| 71 |
|
this->vagoSettings->setValue("SeparateInWorkspace",true); |
| 72 |
|
iniChanged=true; |
| 73 |
|
} |
| 74 |
< |
if(!this->vagoSettings->contains("ConfirmExit")){ |
| 75 |
< |
this->vagoSettings->setValue("ConfirmExit", false); |
| 74 |
> |
if(!this->vagoSettings->contains("AskSaveProject")){ |
| 75 |
> |
this->vagoSettings->setValue("AskSaveProject", true); |
| 76 |
> |
iniChanged=true; |
| 77 |
> |
} |
| 78 |
> |
if(!this->vagoSettings->contains("AskToOpenLastProject")){ |
| 79 |
> |
this->vagoSettings->setValue("AskToOpenLastProject", false); |
| 80 |
|
iniChanged=true; |
| 81 |
|
} |
| 82 |
|
if(!this->vagoSettings->contains("LastProjectPath")){ |
| 183 |
|
|
| 184 |
|
void MainWindow::showEvent(QShowEvent *e) |
| 185 |
|
{ |
| 186 |
< |
#ifdef Q_OS_WIN |
| 186 |
> |
// If we don't have a converter yet, application wasn't started. |
| 187 |
> |
if(!this->applicationIsFullyLoaded) |
| 188 |
> |
{ |
| 189 |
> |
// Apparently Qt doesn't contains a slot to when the application was fully load (mainwindow). So we do our own implementation instead. |
| 190 |
> |
connect(this, SIGNAL(signalAppIsLoaded()), this, SLOT(applicationWasLoaded()), Qt::ConnectionType::QueuedConnection); |
| 191 |
> |
emit signalAppIsLoaded(); |
| 192 |
> |
} |
| 193 |
> |
|
| 194 |
> |
e->accept(); |
| 195 |
> |
} |
| 196 |
> |
|
| 197 |
> |
// Called only when the MainWindow was fully loaded and painted on the screen. This slot is only called once. |
| 198 |
> |
void MainWindow::applicationWasLoaded(){ |
| 199 |
> |
#ifdef Q_OS_WIN |
| 200 |
|
// QProgressBar only works after the windows was shown |
| 201 |
|
// http://stackoverflow.com/questions/24840941/qwintaskbarprogress-wont-show (Kervala answer) |
| 202 |
|
|
| 208 |
|
|
| 209 |
|
//Create a thread for do the conversion in background |
| 210 |
|
this->myConverter = new Converter(UtilVago::getAppPath(), this->myLogger, this->listToProccess, this->win7TaskBarProgress); |
| 211 |
< |
#else |
| 211 |
> |
#else |
| 212 |
|
this->myConverter = new Converter(UtilVago::getAppPath(), this->myLogger, this->listToProccess); |
| 213 |
< |
#endif |
| 213 |
> |
#endif |
| 214 |
|
|
| 215 |
|
connectSlots(); |
| 216 |
|
|
| 217 |
|
this->myLogger->writeString("Application started."); |
| 218 |
|
|
| 219 |
< |
e->accept(); |
| 219 |
> |
this->applicationIsFullyLoaded = true; |
| 220 |
> |
|
| 221 |
> |
QString lastSavedProject = this->vagoSettings->value("RecentProject1").toString(); |
| 222 |
> |
|
| 223 |
> |
if(!lastSavedProject.isEmpty() && this->vagoSettings->value("AskToOpenLastProject").toBool()){ |
| 224 |
> |
if(Util::showQuestionPopUp(this,"Do you want to load latest project?\n\nLatest project was '" + Util::cutNameWithoutBackSlash(lastSavedProject) + "'.")){ |
| 225 |
> |
loadProjectState(lastSavedProject); |
| 226 |
> |
} |
| 227 |
> |
} |
| 228 |
|
} |
| 229 |
|
|
| 230 |
|
|
| 252 |
|
myWizard.exec(); |
| 253 |
|
} |
| 254 |
|
|
| 255 |
+ |
void MainWindow::on_actionBackground_Image_Wizard_triggered() |
| 256 |
+ |
{ |
| 257 |
+ |
BGImageWizard myWizard (UtilVago::getAppPath(), this->workspaceWizardsLocation, this->vagoSettings, this->myLogger); |
| 258 |
+ |
myWizard.exec(); |
| 259 |
+ |
} |
| 260 |
+ |
|
| 261 |
|
void MainWindow::on_tbOni_clicked() |
| 262 |
|
{ |
| 263 |
|
QStringList arguments; |
| 464 |
|
addRowTable(myTable,lastFileName,fromTo,command); |
| 465 |
|
} |
| 466 |
|
updateItemsLoaded(myTable); |
| 467 |
+ |
rowsWereChangedInDropTableWidget(); |
| 468 |
|
} |
| 469 |
|
|
| 470 |
|
QString MainWindow::fileParsingXML(QString tabTitle, QString myOutputFolder, QString from, QString to , QString file){ |
| 767 |
|
if(numErrors!=0){ |
| 768 |
|
QString sNumErrors=QString::number(numErrors); |
| 769 |
|
if(numErrors>1){ |
| 770 |
< |
UtilVago::showErrorPopUpLogButton(result+"\n This is the last of "+sNumErrors+" Errors."); |
| 771 |
< |
showErrStatusMessage("Something gone wrong. Check log file ("+sNumErrors+" Errors)."); |
| 770 |
> |
UtilVago::showErrorPopUpLogButton(result+"\n This is the last of "+sNumErrors+" errors."); |
| 771 |
> |
showErrStatusMessage("Something gone wrong. Check log file ("+sNumErrors+" errors)."); |
| 772 |
|
} |
| 773 |
|
else{ |
| 774 |
|
UtilVago::showErrorPopUpLogButton(result); |
| 775 |
|
showErrStatusMessage("Something gone wrong. Check log file."); |
| 776 |
|
} |
| 745 |
– |
|
| 777 |
|
} |
| 778 |
|
else{ |
| 779 |
|
showSuccessStatusMessage("Everything went well!"); |
| 1138 |
|
myTable->removeRow(myTable->selectionModel()->selectedRows().at(size-i-1).row()); |
| 1139 |
|
} |
| 1140 |
|
updateItemsLoaded(myTable); |
| 1141 |
+ |
rowsWereChangedInDropTableWidget(); |
| 1142 |
|
} |
| 1143 |
|
} |
| 1144 |
|
|
| 1162 |
|
|
| 1163 |
|
if(Util::showQuestionPopUp(this,"Are you sure you want to clear the content?",defaultButton)){ |
| 1164 |
|
clearTableNoPrompt(myTable); |
| 1165 |
+ |
updateItemsLoaded(myTable); |
| 1166 |
+ |
rowsWereChangedInDropTableWidget(); |
| 1167 |
|
} |
| 1168 |
< |
updateItemsLoaded(myTable); |
| 1168 |
> |
|
| 1169 |
|
} |
| 1170 |
|
|
| 1171 |
|
void MainWindow::clearTableNoPrompt(DropTableWidget *myTable){ |
| 1182 |
|
|
| 1183 |
|
|
| 1184 |
|
void MainWindow::closeEvent(QCloseEvent *event){ |
| 1185 |
< |
if(this->vagoSettings->value("ConfirmExit").toBool()){ |
| 1186 |
< |
if(!Util::showQuestionPopUp(this,"Exit Vago?")){ |
| 1185 |
> |
if(this->vagoSettings->value("AskSaveProject").toBool() && this->unsavedChangesExist){ |
| 1186 |
> |
QMessageBox::StandardButton result = askToSaveCurrentProject(); |
| 1187 |
> |
if(result == QMessageBox::StandardButton::Cancel){ |
| 1188 |
|
event->ignore(); |
| 1189 |
|
} |
| 1190 |
|
} |
| 1191 |
|
} |
| 1192 |
|
|
| 1193 |
+ |
QMessageBox::StandardButton MainWindow::askToSaveCurrentProject(){ |
| 1194 |
+ |
QMessageBox::StandardButton result = |
| 1195 |
+ |
Util::showQuestionPopUpWithCancel(this,"There are unsaved changes. Do you want to save the current project?", QMessageBox::StandardButton::Yes); |
| 1196 |
+ |
|
| 1197 |
+ |
if(result == QMessageBox::StandardButton::Yes){ |
| 1198 |
+ |
on_actionSave_triggered(); |
| 1199 |
+ |
} |
| 1200 |
+ |
|
| 1201 |
+ |
return result; |
| 1202 |
+ |
} |
| 1203 |
+ |
|
| 1204 |
|
void MainWindow::on_cbToLevels_currentIndexChanged(const QString &arg1) |
| 1205 |
|
{ |
| 1206 |
|
|
| 1295 |
|
this->itemsLoaded->setText(QString().setNum(numItems)+ (numItems==1?" item ":" items ") +"loaded"); |
| 1296 |
|
} |
| 1297 |
|
|
| 1298 |
+ |
void MainWindow::rowsWereChangedInDropTableWidget(){ |
| 1299 |
+ |
// We have changed rows, we have now unsaved changes. |
| 1300 |
+ |
if(!this->unsavedChangesExist){ |
| 1301 |
+ |
this->unsavedChangesExist = true; |
| 1302 |
+ |
setVagoWindowTitle(); |
| 1303 |
+ |
} |
| 1304 |
+ |
} |
| 1305 |
+ |
|
| 1306 |
|
void MainWindow::on_tbCommand_clicked() |
| 1307 |
|
{ |
| 1308 |
|
//Show preferences |
| 1367 |
|
|
| 1368 |
|
} |
| 1369 |
|
|
| 1370 |
+ |
// New Project |
| 1371 |
+ |
void MainWindow::on_actionNew_Project_triggered() |
| 1372 |
+ |
{ |
| 1373 |
+ |
if(this->vagoSettings->value("AskSaveProject").toBool() && this->unsavedChangesExist){ |
| 1374 |
+ |
QMessageBox::StandardButton result = askToSaveCurrentProject(); |
| 1375 |
+ |
if(result == QMessageBox::StandardButton::Cancel){ |
| 1376 |
+ |
return; |
| 1377 |
+ |
} |
| 1378 |
+ |
} |
| 1379 |
+ |
|
| 1380 |
+ |
QList<DropTableWidget*> myTables = getAllTableWidgets(); |
| 1381 |
+ |
|
| 1382 |
+ |
for(DropTableWidget* const currTable : myTables){ |
| 1383 |
+ |
clearTableNoPrompt(currTable); |
| 1384 |
+ |
} |
| 1385 |
+ |
|
| 1386 |
+ |
this->lastProjectFilePath=""; // clear last project file path |
| 1387 |
+ |
this->unsavedChangesExist = false; |
| 1388 |
+ |
|
| 1389 |
+ |
setVagoWindowTitle(); // update vago title |
| 1390 |
+ |
} |
| 1391 |
+ |
|
| 1392 |
|
void MainWindow::on_actionSave_triggered() |
| 1393 |
|
{ |
| 1394 |
|
if(this->lastProjectFilePath.isEmpty()){ |
| 1553 |
|
else if(selectedOption==moveUp.get()){ |
| 1554 |
|
qSort(selectedRows); //let's order the selections by the row number, so we know exactly how to swap it |
| 1555 |
|
myTable->swapPositions(selectedRows,-1); |
| 1556 |
+ |
rowsWereChangedInDropTableWidget(); |
| 1557 |
|
} |
| 1558 |
|
else if(selectedOption==moveDown.get()){ |
| 1559 |
|
qSort(selectedRows); |
| 1560 |
|
myTable->swapPositions(selectedRows,+1); |
| 1561 |
+ |
rowsWereChangedInDropTableWidget(); |
| 1562 |
|
} |
| 1563 |
|
else if(selectedOption==changeOptions.get()){ |
| 1564 |
|
changeToCurrentSettings(selectedRows,myTable); |
| 1617 |
|
result+=QString::number(disabledCount) + (disabledCount==1?" item ":" items ") + "Disabled"; |
| 1618 |
|
} |
| 1619 |
|
|
| 1620 |
+ |
rowsWereChangedInDropTableWidget(); |
| 1621 |
|
showSuccessStatusMessage(result); |
| 1622 |
|
} |
| 1623 |
|
} |
| 1643 |
|
myTable->updateTableToolTips(row); |
| 1644 |
|
} |
| 1645 |
|
|
| 1646 |
+ |
rowsWereChangedInDropTableWidget(); |
| 1647 |
|
showSuccessStatusMessage(QString::number(rows.size()) + (rows.size()==1?" item ":" items ")+ "changed to the current settings"); |
| 1648 |
|
} |
| 1649 |
|
|
| 1667 |
|
myTable->updateTableToolTips(row); |
| 1668 |
|
} |
| 1669 |
|
|
| 1670 |
+ |
rowsWereChangedInDropTableWidget(); |
| 1671 |
|
showSuccessStatusMessage(QString::number(rows.size()) + (rows.size()==1?" item ":" items ")+ "changed the output to "+(newOutput!=this->workspaceLocation?Util::cutName(newOutput):"Vago workspace")); |
| 1672 |
|
} |
| 1673 |
|
|
| 1758 |
|
pugi::xml_document doc; |
| 1759 |
|
|
| 1760 |
|
pugi::xml_node rootNode = doc.append_child("VagoProject"); |
| 1761 |
< |
rootNode.append_attribute("vagoVersion").set_value(GlobalVars::AppVersion.toUtf8().constData()); |
| 1761 |
> |
rootNode.append_attribute("vagoVersion").set_value(GlobalVars::LastCompatibleVersion.toUtf8().constData()); |
| 1762 |
|
|
| 1763 |
|
foreach(DropTableWidget* const &myTable, tableWidgets){ |
| 1764 |
|
saveProjectWidget(rootNode, myTable); |
| 1772 |
|
this->vagoSettings->setValue("LastProjectPath",QFileInfo(filePath).absoluteDir().path()); |
| 1773 |
|
|
| 1774 |
|
this->lastProjectFilePath = filePath; |
| 1775 |
+ |
this->unsavedChangesExist = false; |
| 1776 |
|
|
| 1777 |
|
addNewRecentProject(filePath); |
| 1778 |
|
|
| 1925 |
|
vagoTitle += Util::cutNameWithoutBackSlash(this->lastProjectFilePath); |
| 1926 |
|
} |
| 1927 |
|
|
| 1928 |
+ |
if(this->unsavedChangesExist){ |
| 1929 |
+ |
vagoTitle += "*"; |
| 1930 |
+ |
} |
| 1931 |
+ |
|
| 1932 |
|
setWindowTitle(vagoTitle); |
| 1933 |
|
} |
| 1934 |
|
|
| 2001 |
|
void MainWindow::loadProjectState(const QString &filePath) |
| 2002 |
|
{ |
| 2003 |
|
|
| 2004 |
+ |
if(this->vagoSettings->value("AskSaveProject").toBool() && this->unsavedChangesExist){ |
| 2005 |
+ |
QMessageBox::StandardButton result = askToSaveCurrentProject(); |
| 2006 |
+ |
if(result == QMessageBox::StandardButton::Cancel){ |
| 2007 |
+ |
return; |
| 2008 |
+ |
} |
| 2009 |
+ |
} |
| 2010 |
+ |
|
| 2011 |
|
QString statusError = "Couldn't load project."; |
| 2012 |
|
|
| 2013 |
|
pugi::xml_document doc; |
| 2063 |
|
this->vagoSettings->setValue("LastProjectPath",QFileInfo(filePath).absoluteDir().path()); |
| 2064 |
|
|
| 2065 |
|
this->lastProjectFilePath = filePath; |
| 2066 |
+ |
this->unsavedChangesExist = false; |
| 2067 |
|
|
| 2068 |
|
addNewRecentProject(filePath); |
| 2069 |
|
|