diff options
Diffstat (limited to 'pokemodr/PokeModrUI.cpp')
| -rw-r--r-- | pokemodr/PokeModrUI.cpp | 108 |
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; -} |
