[Kst] branches/work/kst/portto4/kst/src/libkstapp
Barth Netterfield
netterfield at astro.utoronto.ca
Sat Mar 10 13:32:40 UTC 2012
This broke moving of view objects.
On Wed, Mar 7, 2012 at 6:47 PM, Nicolas Brisset
<nicolas.brisset at eurocopter.com> wrote:
> SVN commit 1284152 by brisset:
>
> Add drag&drop feature:
> - if dropping a .kst file, open it after checking what needed to be saved has been saved
> - if dropping something else, open it in the datawizard
>
> The prompt to save feature in case of change has been refactored along the way to make it more readable code-wise. I hope I haven't broken anything.
> The reason why our previous attempt had not been conclusive is that we have to setAcceptDrops(false) all the way down the parent chain: _tabWidget *and* View.
>
> Note: my tests exposed a bug: adding view items is not registered as a change. This should be fixed!
>
> FEATURE: 272510
>
>
> M +45 -19 mainwindow.cpp
> M +4 -1 mainwindow.h
> M +2 -0 scene.cpp
> M +2 -0 view.cpp
>
>
> --- branches/work/kst/portto4/kst/src/libkstapp/mainwindow.cpp #1284151:1284152
> @@ -105,6 +105,7 @@
> _tabWidget->createView();
>
> setCentralWidget(_tabWidget);
> + _tabWidget->setAcceptDrops(false); // Force drops to be passed to parent
> connect(_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentViewChanged()));
> connect(_tabWidget, SIGNAL(currentViewModeChanged()), this, SLOT(currentViewModeChanged()));
> connect(PlotItemManager::self(), SIGNAL(tiedZoomRemoved()), this, SLOT(tiedZoomRemoved()));
> @@ -116,6 +117,7 @@
> QTimer::singleShot(0, this, SLOT(performHeavyStartupActions()));
>
> updateRecentKstFiles();
> + setAcceptDrops(true);
> }
>
>
> @@ -194,8 +196,12 @@
> }
>
>
> -bool MainWindow::promptSave() {
> - int rc = QMessageBox::warning(this, tr("Kst: Save Promp"), tr("Your document has been modified.\nSave changes?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save);
> +bool MainWindow::promptSaveDone() {
> + if (! _doc->isChanged()) {
> + return true; // No need to ask if there is no unsaved change -> we're done
> + }
> + else { // Changes registered: ask the user
> + int rc = QMessageBox::warning(this, tr("Kst: Save Prompt"), tr("Your document has been modified.\nSave changes?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Save);
> if (rc == QMessageBox::Save) {
> save();
> } else if (rc == QMessageBox::Cancel) {
> @@ -203,10 +209,11 @@
> }
> return true;
> }
> +}
>
>
> void MainWindow::closeEvent(QCloseEvent *e) {
> - if (_doc->isChanged() && !promptSave()) {
> + if (!promptSaveDone()) {
> e->ignore();
> return;
> }
> @@ -258,11 +265,8 @@
> bool clearApproved = false;
> if (force) {
> clearApproved = true;
> - } else if (_doc->isChanged()) {
> - clearApproved = promptSave();
> } else {
> - int rc = QMessageBox::warning(this, tr("Kst"), tr("Delete everything?"), QMessageBox::Ok, QMessageBox::Cancel);
> - clearApproved = (rc == QMessageBox::Ok);
> + clearApproved = promptSaveDone();
> }
>
> if (clearApproved) {
> @@ -271,16 +275,17 @@
> delete _doc;
> _doc = new Document(this);
> _scriptServer->setStore(_doc->objectStore());
> + tabWidget()->clear();
> + tabWidget()->createView();
> + return;
> } else {
> return;
> }
>
> - tabWidget()->clear();
> - tabWidget()->createView();
> }
>
> void MainWindow::open() {
> - if (_doc->isChanged() && !promptSave()) {
> + if (!promptSaveDone()) {
> return;
> }
> QSettings settings("Kst2");
> @@ -425,12 +430,7 @@
> QDir::setCurrent(file.left(file.lastIndexOf('/')));
>
> QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
> - delete _dataManager;
> - _dataManager = 0;
> - delete _doc;
> - _doc = new Document(this);
> - _scriptServer->setStore(_doc->objectStore());
> -
> + newDoc(true); // Does all the init stuff, but does not ask for override as it's supposed to be done elsewhere
> bool ok = _doc->open(file);
> QApplication::restoreOverrideCursor();
>
> @@ -438,9 +438,6 @@
> QMessageBox::critical(this, tr("Kst"),
> tr("Error opening document '%1':\n%2\n"
> "Maybe it is a Kst 1 file which could not be read by Kst 2.").arg(file, _doc->lastError()));
> - delete _doc;
> - _doc = new Document(this);
> - _scriptServer->setStore(_doc->objectStore());
> }
>
> setWindowTitle("Kst - " + file);
> @@ -1835,7 +1832,12 @@
> dataWizard->show();
> }
>
> +void MainWindow::showDataWizard(const QString &dataFile) {
> + DataWizard *dataWizard = new DataWizard(this, dataFile);
> + dataWizard->show();
> +}
>
> +
> void MainWindow::openRecentDataFile()
> {
> QAction *action = qobject_cast<QAction *>(sender());
> @@ -1909,6 +1911,30 @@
> }
> }
>
> +void MainWindow::dragEnterEvent(QDragEnterEvent *event)
> +{
> + if (event->mimeData()->hasUrls()) {
> + event->acceptProposedAction();
> }
> +}
>
> +
> +void MainWindow::dropEvent(QDropEvent *event)
> +{
> + QString path = event->mimeData()->urls().first().toLocalFile();
> + if (path.endsWith(QString(".kst"))) {
> + if (!promptSaveDone()) { // There are things to save => cancel
> + event->ignore();
> + return;
> + }
> + openFile(path);
> + }
> + else {
> + showDataWizard(path); // This is not destructive: it only add data, no need to ask for confirmation
> + }
> + event->accept();
> +}
> +
> +}
> +
> // vim: ts=2 sw=2 et
> --- branches/work/kst/portto4/kst/src/libkstapp/mainwindow.h #1284151:1284152
> @@ -79,6 +79,7 @@
> void showChangeDataSampleDialog();
> void showChangeFileDialog();
> void showDataWizard();
> + void showDataWizard(const QString &dataFile);
> void showBugReportWizard();
> void showPluginDialog(QString &pluginName);
>
> @@ -166,11 +167,13 @@
>
> void readSettings();
> void writeSettings();
> - bool promptSave();
> + bool promptSaveDone();
>
> QAction* createRecentFileAction(const QString& filename, int idx, const QString& text, const char* openslot);
> void updateRecentFiles(const QString& key, QMenu *menu, QList<QAction*>& actions, QMenu* submenu, const QString& newfilename, const char* openslot);
>
> + void dragEnterEvent(QDragEnterEvent *event);
> + void dropEvent(QDropEvent *event);
>
> private:
> Document *_doc;
> --- branches/work/kst/portto4/kst/src/libkstapp/scene.cpp #1284151:1284152
> @@ -101,6 +101,8 @@
> // " drop hot spot" << m->item->dropHotSpot << " topleft:" << m->item->rect().topLeft();
> m->item->moveTo(viewpos - m->item->rect().center() - m->item->dropHotSpot.toPoint());
> event->acceptProposedAction();
> + } else {
> + event->ignore();
> }
> }
>
> --- branches/work/kst/portto4/kst/src/libkstapp/view.cpp #1284151:1284152
> @@ -110,6 +110,8 @@
> connect(this, SIGNAL(viewModeChanged(View::ViewMode)), PlotItemManager::self(), SLOT(clearFocusedPlots()));
>
> applyDialogDefaultsFill();
> +
> + setAcceptDrops(false); // Pass event to parent
> }
>
>
> _______________________________________________
> Kst mailing list
> Kst at kde.org
> https://mail.kde.org/mailman/listinfo/kst
--
C. Barth Netterfield
University of Toronto
416-845-0946
More information about the Kst
mailing list