summaryrefslogtreecommitdiffstats
path: root/pokemodr/PokeModrUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pokemodr/PokeModrUI.cpp')
-rw-r--r--pokemodr/PokeModrUI.cpp108
1 files changed, 57 insertions, 51 deletions
diff --git a/pokemodr/PokeModrUI.cpp b/pokemodr/PokeModrUI.cpp
index a673d2e8..7ea15841 100644
--- a/pokemodr/PokeModrUI.cpp
+++ b/pokemodr/PokeModrUI.cpp
@@ -134,8 +134,7 @@ PokeModrUI::PokeModrUI(KConfigGroup config, KConfigGroup history, QWidget* paren
PokeModrUI::~PokeModrUI()
{
-// delete m_recent;
-// on_actionQuit_triggered();
+ closeAllPokemods(true);
}
void PokeModrUI::update()
@@ -145,8 +144,10 @@ void PokeModrUI::update()
void PokeModrUI::closeEvent(QCloseEvent* event)
{
- quit();
- event->accept();
+ if (closeAllPokemods())
+ event->accept();
+ else
+ event->ignore();
}
void PokeModrUI::setChangedTitle(const bool changed)
@@ -190,9 +191,9 @@ bool PokeModrUI::openPokemod(const KUrl& url)
QString temp;
if (KIO::NetAccess::download(url, temp, this))
{
- if (openPokemod(temp))
- return true;
+ const bool opened = openPokemod(temp);
KIO::NetAccess::removeTempFile(temp);
+ return opened;
}
else
KMessageBox::error(this, KIO::NetAccess::lastErrorString(), "KIO Error");
@@ -225,34 +226,20 @@ bool PokeModrUI::openPokemod(const QString& path)
void PokeModrUI::savePokemod()
{
- const Pokemod* pokemod = currentPokemod();
- if (pokemod)
- {
- KUrl url = treePokemod->url(pokemod);
- if (url.isEmpty())
- saveAsPokemod();
- else
- savePokemod(url);
- }
+ savePokemod(treePokemod->currentPokemod());
}
-void PokeModrUI::saveAsPokemod()
+void PokeModrUI::savePokemod(const Pokemod* pokemod)
{
- const Pokemod* pokemod = currentPokemod();
- if (pokemod)
- {
- KUrl url = KFileDialog::getSaveUrl(KUrl("kfiledialog:///pokemod"), QString::fromUtf8("*.pmod|PokéMod files"), this, QString::fromUtf8("Open PokéMod"));
- if (!url.isEmpty())
- {
- if (savePokemod(url))
- treePokemod->setUrl(pokemod, url);
- }
- }
+ const KUrl url = treePokemod->url(pokemod);
+ if (url.isEmpty())
+ saveAsPokemod(pokemod);
+ else
+ savePokemod(pokemod, url);
}
-bool PokeModrUI::savePokemod(const KUrl& url)
+bool PokeModrUI::savePokemod(const Pokemod* pokemod, const KUrl& url)
{
- const Pokemod* pokemod = currentPokemod();
if (pokemod)
{
if (url.isLocalFile())
@@ -285,35 +272,68 @@ bool PokeModrUI::savePokemod(const KUrl& url)
return false;
}
+void PokeModrUI::saveAsPokemod()
+{
+ saveAsPokemod(treePokemod->currentPokemod());
+}
+
+void PokeModrUI::saveAsPokemod(const Pokemod* pokemod)
+{
+ if (pokemod)
+ {
+ KUrl url = KFileDialog::getSaveUrl(KUrl("kfiledialog:///pokemod"), QString::fromUtf8("*.pmod|PokéMod files"), this, QString::fromUtf8("Open PokéMod"));
+ if (!url.isEmpty())
+ {
+ if (savePokemod(pokemod, url))
+ treePokemod->setUrl(pokemod, url);
+ }
+ }
+}
+
void PokeModrUI::closePokemod()
{
- closePokemod(currentPokemod());
+ closePokemod(treePokemod->currentPokemod());
}
-void PokeModrUI::closePokemod(const Pokemod* pokemod)
+bool PokeModrUI::closePokemod(const Pokemod* pokemod, const bool force)
{
if (pokemod)
{
if (treePokemod->dirty(pokemod))
{
- switch (KMessageBox::questionYesNoCancel(this, "You have unsaved changes, would you like to save them?", QString::fromUtf8("Unsaved PokéMod")))
+ int result;
+ if (force)
+ result = KMessageBox::questionYesNo(this, "You have unsaved changes, would you like to save them?", QString::fromUtf8("Unsaved PokéMod"));
+ else
+ result = KMessageBox::questionYesNoCancel(this, "You have unsaved changes, would you like to save them?", QString::fromUtf8("Unsaved PokéMod"));
+ switch (result)
{
case KMessageBox::Yes:
- savePokemod();
+ savePokemod(pokemod);
case KMessageBox::No:
break;
case KMessageBox::Cancel:
- return;
+ return false;
}
}
- treePokemod->deletePokemod(currentPokemod());
+ treePokemod->deletePokemod(pokemod);
+ if (formPanel->widget())
+ delete formPanel->takeWidget();
}
+ return true;
}
-void PokeModrUI::quit()
+bool PokeModrUI::closeAllPokemods(const bool force)
{
- // TODO: close all pokemods and cancel if any are left open
- close();
+ QList<const Pokemod*> pokemods = treePokemod->openedPokemods();
+ for (int i = 0; i < pokemods.size(); )
+ {
+ if (closePokemod(pokemods[i], force))
+ pokemods.removeAt(i);
+ else
+ ++i;
+ }
+ return !pokemods.size();
}
void PokeModrUI::cutObject()
@@ -365,8 +385,6 @@ void PokeModrUI::on_treePokemod_clicked(const QModelIndex& index)
connect(widget, SIGNAL(changed(bool)), this, SLOT(setChangedTitle(bool)));
connect(widget, SIGNAL(changed(bool)), boxButtons, SLOT(setEnabled(bool)));
connect(buttonApply, SIGNAL(clicked()), widget, SLOT(apply()));
- // TODO: set as dirty
-// connect(buttonApply, SIGNAL(clicked(bool)), this, SLOT(setDirty()));
connect(buttonDiscard, SIGNAL(clicked()), widget, SLOT(discard()));
setChangedTitle(false);
formPanel->setWidget(widget);
@@ -380,15 +398,3 @@ void PokeModrUI::on_treePokemod_customContextMenuRequested(const QPoint& positio
if (menu)
menu->popup(mapToGlobal(position));
}
-
-const Pokemod* PokeModrUI::currentPokemod() const
-{
- QModelIndex index = treePokemod->currentIndex();
- if (index.isValid())
- {
- const Object* object = static_cast<BaseModel*>(index.internalPointer())->object();
- if (object)
- return static_cast<const Pokemod*>(object->pokemod());
- }
- return NULL;
-}