bool MainWindow::saveAs() { const Url saveAsUrl = FileDialog::getSaveUrl(this, tr("Save PGF source file"), m_currentUrl, QLatin1String("text/x-pgf")); if (!saveAsUrl.isValid() || saveAsUrl.isEmpty()) return false; return saveUrl(saveAsUrl); }
void MainWindow::checkForFileChanges(const FileCheckMoment &moment) { if (moment == FocusIn) { QDateTime lastExternalModifiedDateTime(QFileInfo(m_currentUrl.path()).lastModified()); if (lastExternalModifiedDateTime > m_lastInternalModifiedDateTime) m_isModifiedExternally = true; else // when the fileChangedWarningMessageBox below is cancelled, the main window is focused in again with m_isModifiedExternally == true so this slot is called again, but now m_lastInternalModifiedDateTime has been updated (during focusOut) and now we don't want to show the dialog again return; } if (!m_isModifiedExternally) return; m_isModifiedExternally = false; QPointer<QMessageBox> fileChangedWarningMessageBox = new QMessageBox(this); fileChangedWarningMessageBox->setText(tr("The document was modified by another program.\nWhat do you want to do?")); fileChangedWarningMessageBox->setWindowTitle(KtikzApplication::applicationName()); fileChangedWarningMessageBox->setIcon(QMessageBox::Warning); QAbstractButton *overwriteButton = fileChangedWarningMessageBox->addButton(tr("&Overwrite"), QMessageBox::AcceptRole); QAbstractButton *reloadButton; switch (moment) { case Saving: reloadButton = fileChangedWarningMessageBox->addButton(tr("&Save under another name"), QMessageBox::AcceptRole); break; case Closing: reloadButton = fileChangedWarningMessageBox->addButton(tr("&Close without saving"), QMessageBox::AcceptRole); break; case FocusIn: default: reloadButton = fileChangedWarningMessageBox->addButton(tr("&Reload file"), QMessageBox::AcceptRole); break; } fileChangedWarningMessageBox->addButton(QMessageBox::Cancel); fileChangedWarningMessageBox->exec(); if (fileChangedWarningMessageBox->clickedButton() == overwriteButton) saveUrl(m_currentUrl); else if (fileChangedWarningMessageBox->clickedButton() == reloadButton) switch (moment) { case Saving: saveAs(); break; case Closing: // do nothing since the file will be closed anyway break; case FocusIn: default: reload(); break; } else // cancel (check again on "Save" or "Close") m_isModifiedExternally = true; delete fileChangedWarningMessageBox; }
bool MainWindow::save() { if (!m_currentUrl.isValid() || m_currentUrl.isEmpty()) return saveAs(); else { if (m_isModifiedExternally) { checkForFileChanges(Saving); return true; } else return saveUrl(m_currentUrl); } }
void KWebKitPart::connectWebPageSignals(WebPage* page) { if (!page) return; connect(page, SIGNAL(loadStarted()), this, SLOT(slotLoadStarted())); connect(page, SIGNAL(loadAborted(QUrl)), this, SLOT(slotLoadAborted(QUrl))); connect(page, SIGNAL(linkHovered(QString,QString,QString)), this, SLOT(slotLinkHovered(QString,QString,QString))); connect(page, SIGNAL(saveFrameStateRequested(QWebFrame*,QWebHistoryItem*)), this, SLOT(slotSaveFrameState(QWebFrame*,QWebHistoryItem*))); connect(page, SIGNAL(restoreFrameStateRequested(QWebFrame*)), this, SLOT(slotRestoreFrameState(QWebFrame*))); connect(page, SIGNAL(statusBarMessage(QString)), this, SLOT(slotSetStatusBarText(QString))); connect(page, SIGNAL(windowCloseRequested()), this, SLOT(slotWindowCloseRequested())); connect(page, SIGNAL(printRequested(QWebFrame*)), m_browserExtension, SLOT(slotPrintRequested(QWebFrame*))); connect(page, SIGNAL(frameCreated(QWebFrame*)), this, SLOT(slotFrameCreated(QWebFrame*))); connect(m_webView, SIGNAL(linkShiftClicked(QUrl)), page, SLOT(downloadUrl(QUrl))); connect(page, SIGNAL(loadProgress(int)), m_browserExtension, SIGNAL(loadingProgress(int))); connect(page, SIGNAL(selectionChanged()), m_browserExtension, SLOT(updateEditActions())); connect(m_browserExtension, SIGNAL(saveUrl(QUrl)), page, SLOT(downloadUrl(QUrl))); connect(page->mainFrame(), SIGNAL(loadFinished(bool)), this, SLOT(slotMainFrameLoadFinished(bool))); KWebWallet *wallet = page->wallet(); if (wallet) { connect(wallet, SIGNAL(saveFormDataRequested(QString,QUrl)), this, SLOT(slotSaveFormDataRequested(QString,QUrl))); connect(wallet, SIGNAL(fillFormRequestCompleted(bool)), this, SLOT(slotFillFormRequestCompleted(bool))); connect(wallet, SIGNAL(walletClosed()), this, SLOT(slotWalletClosed())); } }