2
0
forked from Ivasoft/DSView

Add file path remember feature

This commit is contained in:
DreamSourceLab
2016-06-21 23:26:46 +08:00
parent 4f2e5c2e10
commit d86c9558cb
5 changed files with 88 additions and 21 deletions

View File

@@ -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);

View File

@@ -33,6 +33,8 @@
#include <QPainter>
#include <QBitmap>
#include <QResizeEvent>
#include <QDesktopWidget>
#include <QApplication>
#include <algorithm>
@@ -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

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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);
}
}