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 |
|
|