diff --git a/DSView/pv/dialogs/protocolexp.cpp b/DSView/pv/dialogs/protocolexp.cpp index b4a6f988..d0907af8 100644 --- a/DSView/pv/dialogs/protocolexp.cpp +++ b/DSView/pv/dialogs/protocolexp.cpp @@ -114,9 +114,11 @@ void ProtocolExp::accept() if(i < supportedFormats.count() - 1) filter.append(";;"); } + const QString DIR_KEY("ProtocolExportPath"); + QSettings settings; QString default_filter = _format_combobox->currentText(); QString file_name = QFileDialog::getSaveFileName( - this, tr("Export Data"), "",filter,&default_filter); + this, tr("Export Data"), settings.value(DIR_KEY).toString(),filter,&default_filter); if (!file_name.isEmpty()) { QFileInfo f(file_name); QStringList list = default_filter.split('.').last().split(')'); @@ -124,6 +126,9 @@ void ProtocolExp::accept() if(f.suffix().compare(ext)) file_name+=tr(".")+ext; + QDir CurrentDir; + settings.setValue(DIR_KEY, CurrentDir.absoluteFilePath(file_name)); + QFile file(file_name); file.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream out(&file); diff --git a/DSView/pv/mainframe.cpp b/DSView/pv/mainframe.cpp index 6049f41a..74f822a5 100644 --- a/DSView/pv/mainframe.cpp +++ b/DSView/pv/mainframe.cpp @@ -33,6 +33,8 @@ #include #include #include +#include +#include #include @@ -109,12 +111,14 @@ MainFrame::MainFrame(DeviceManager &device_manager, _layout->addWidget(_bottom_right, 2, 2); connect(&_timer, SIGNAL(timeout()), this, SLOT(unfreezing())); + readSettings(); } -bool MainFrame::close() +void MainFrame::closeEvent(QCloseEvent *event) { _mainWindow->session_save(); - return QFrame::close(); + writeSettings(); + event->accept(); } void MainFrame::unfreezing() @@ -200,7 +204,7 @@ bool MainFrame::eventFilter(QObject *object, QEvent *event) } else if(mouse_event->buttons().testFlag(Qt::LeftButton)) { if (_moving) { this->move(mouse_event->globalPos() - _lastMousePosition); - } else if (!_freezing){ + } else if (!_freezing) { switch (_startPos) { case TopLeft: newWidth = std::max(_dragStartGeometry.right() - mouse_event->globalX(), minimumWidth()); @@ -266,7 +270,7 @@ bool MainFrame::eventFilter(QObject *object, QEvent *event) break; } _freezing = true; - } + } return true; } } else if (type == QEvent::MouseButtonPress) { @@ -275,7 +279,7 @@ bool MainFrame::eventFilter(QObject *object, QEvent *event) _startPos == None) { _moving = true; _lastMousePosition = mouse_event->pos() + - QPoint(Margin, Margin) + + //QPoint(Margin, Margin) + QPoint(geometry().left() - frameGeometry().left(), frameGeometry().right() - geometry().right()); } if (_startPos != None) @@ -304,4 +308,27 @@ bool MainFrame::eventFilter(QObject *object, QEvent *event) return QObject::eventFilter(object, event); } +void MainFrame::writeSettings() +{ + QSettings settings; + + settings.beginGroup("MainFrame"); + settings.setValue("size", size()); + settings.setValue("pos", pos() + + QPoint(geometry().left() - frameGeometry().left(), frameGeometry().right() - geometry().right())); + settings.endGroup(); +} + +void MainFrame::readSettings() +{ + QSettings settings; + QDesktopWidget* desktopWidget = QApplication::desktop(); + QRect deskRect = desktopWidget->availableGeometry(); + + settings.beginGroup("MainFrame"); + resize(settings.value("size", QSize(minWidth, minHeight)).toSize()); + move(settings.value("pos", QPoint((deskRect.width() - minWidth)/2, (deskRect.height() - minHeight)/2)).toPoint()); + settings.endGroup(); +} + } // namespace pv diff --git a/DSView/pv/mainframe.h b/DSView/pv/mainframe.h index eafc317c..50432639 100644 --- a/DSView/pv/mainframe.h +++ b/DSView/pv/mainframe.h @@ -41,6 +41,9 @@ class TitleBar; class MainFrame : public QFrame { Q_OBJECT +public: + static const int minWidth = 800; + static const int minHeight = 680; public: static const int Margin = 8; @@ -64,17 +67,21 @@ public: void showMaxRestore(); protected: + void closeEvent(QCloseEvent *event); bool eventFilter(QObject *object, QEvent *event); public slots: void unfreezing(); - bool close(); void showNormal(); void showMaximized(); + private: void hide_border(); void show_border(); + void writeSettings(); + void readSettings(); + private: toolbars::TitleBar *_titleBar; MainWindow *_mainWindow; diff --git a/DSView/pv/mainwindow.cpp b/DSView/pv/mainwindow.cpp index ca9825e4..4bf1f35b 100644 --- a/DSView/pv/mainwindow.cpp +++ b/DSView/pv/mainwindow.cpp @@ -571,35 +571,42 @@ void MainWindow::on_search(bool visible) void MainWindow::on_screenShot() { + const QString DIR_KEY("ScreenShotPath"); + QSettings settings; QPixmap pixmap; QDesktopWidget *desktop = QApplication::desktop(); pixmap = QPixmap::grabWindow(desktop->winId(), pos().x(), pos().y(), frameGeometry().width(), frameGeometry().height()); QString format = "png"; - QString initialPath = QDir::currentPath()+ - tr("/untitled.") + format; QString fileName = QFileDialog::getSaveFileName(this, - tr("Save As"),initialPath, + tr("Save As"),settings.value(DIR_KEY).toString(), tr("%1 Files (*.%2);;All Files (*)") .arg(format.toUpper()).arg(format)); - if (!fileName.isEmpty()) + if (!fileName.isEmpty()) { + QDir CurrentDir; + settings.setValue(DIR_KEY, CurrentDir.absoluteFilePath(fileName)); pixmap.save(fileName, format.toLatin1()); + } } void MainWindow::on_save() { using pv::dialogs::StoreProgress; + const QString DIR_KEY("SavePath"); + QSettings settings; + // Stop any currently running capture session _session.stop_capture(); // Show the dialog const QString file_name = QFileDialog::getSaveFileName( - this, tr("Save File"), "", tr("DSView Data (*.dsl)")); + this, tr("Save File"), settings.value(DIR_KEY).toString(), tr("DSView Data (*.dsl)")); if (file_name.isEmpty()) return; - + QDir CurrentDir; + settings.setValue(DIR_KEY, CurrentDir.absoluteFilePath(file_name)); StoreProgress *dlg = new StoreProgress(file_name, _session, this); dlg->run(); } diff --git a/DSView/pv/toolbars/filebar.cpp b/DSView/pv/toolbars/filebar.cpp index 9f10daa6..e76c354c 100644 --- a/DSView/pv/toolbars/filebar.cpp +++ b/DSView/pv/toolbars/filebar.cpp @@ -123,12 +123,17 @@ FileBar::FileBar(SigSession &session, QWidget *parent) : void FileBar::on_actionOpen_triggered() { + const QString DIR_KEY("OpenPath"); + QSettings settings; // Show the dialog const QString file_name = QFileDialog::getOpenFileName( - this, tr("Open File"), "", tr( + this, tr("Open File"), settings.value(DIR_KEY).toString(), tr( "DSView Data (*.dsl);;All Files (*.*)")); - if (!file_name.isEmpty()) + if (!file_name.isEmpty()) { + QDir CurrentDir; + settings.setValue(DIR_KEY, CurrentDir.absoluteFilePath(file_name)); load_file(file_name); + } } void FileBar::session_error( @@ -151,6 +156,8 @@ void FileBar::show_session_error( } void FileBar::on_actionExport_triggered(){ + const QString DIR_KEY("ExportPath"); + QSettings settings; int unit_size; uint64_t length; const void* buf = _session.get_buf(unit_size, length); @@ -170,13 +177,15 @@ void FileBar::on_actionExport_triggered(){ filter.append(";;"); } QString file_name = QFileDialog::getSaveFileName( - this, tr("Export Data"), "",filter,&filter); + this, tr("Export Data"), settings.value(DIR_KEY).toString(),filter,&filter); if (!file_name.isEmpty()) { QFileInfo f(file_name); QStringList list = filter.split('.').last().split(')'); QString ext = list.first(); if(f.suffix().compare(ext)) file_name+=tr(".")+ext; + QDir CurrentDir; + settings.setValue(DIR_KEY, CurrentDir.absoluteFilePath(file_name)); _session.export_file(file_name, this, ext); } } @@ -184,6 +193,8 @@ void FileBar::on_actionExport_triggered(){ void FileBar::on_actionSave_triggered() { + const QString DIR_KEY("SavePath"); + QSettings settings; //save(); int unit_size; uint64_t length; @@ -197,13 +208,15 @@ void FileBar::on_actionSave_triggered() msg.exec(); } else { QString file_name = QFileDialog::getSaveFileName( - this, tr("Save File"), "", + this, tr("Save File"), settings.value(DIR_KEY).toString(), tr("DSView Data (*.dsl)")); if (!file_name.isEmpty()) { QFileInfo f(file_name); if(f.suffix().compare("dsl")) file_name.append(tr(".dsl")); + QDir CurrentDir; + settings.setValue(DIR_KEY, CurrentDir.absoluteFilePath(file_name)); _session.save_file(file_name, this, _session.get_device()->dev_inst()->mode); } } @@ -212,12 +225,17 @@ void FileBar::on_actionSave_triggered() void FileBar::on_actionLoad_triggered() { + const QString DIR_KEY("SessionLoadPath"); + QSettings settings; // Show the dialog const QString file_name = QFileDialog::getOpenFileName( - this, tr("Open Session"), "", tr( + this, tr("Open Session"), settings.value(DIR_KEY).toString(), tr( "DSView Session (*.dsc)")); - if (!file_name.isEmpty()) + if (!file_name.isEmpty()) { + QDir CurrentDir; + settings.setValue(DIR_KEY, CurrentDir.absoluteFilePath(file_name)); load_session(file_name); + } } void FileBar::on_actionDefault_triggered() @@ -242,14 +260,17 @@ void FileBar::on_actionDefault_triggered() void FileBar::on_actionStore_triggered() { - QString default_name = _session.get_device()->name(); + const QString DIR_KEY("SessionStorePath"); + QSettings settings; QString file_name = QFileDialog::getSaveFileName( - this, tr("Save Session"), default_name, + this, tr("Save Session"), settings.value(DIR_KEY).toString(), tr("DSView Session (*.dsc)")); if (!file_name.isEmpty()) { QFileInfo f(file_name); if(f.suffix().compare("dsc")) file_name.append(tr(".dsc")); + QDir CurrentDir; + settings.setValue(DIR_KEY, CurrentDir.absoluteFilePath(file_name)); store_session(file_name); } }