From ee0d88f91c81856df64e132f7bfe456de2d22a9b Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Mon, 29 May 2023 17:20:06 +0800 Subject: [PATCH] Display the profile path name in the title bar --- DSView/pv/config/appconfig.cpp | 2 + DSView/pv/config/appconfig.h | 1 + DSView/pv/dialogs/applicationpardlg.cpp | 12 +++++- DSView/pv/interface/icallbacks.h | 2 + DSView/pv/mainframe.cpp | 7 ++-- DSView/pv/mainwindow.cpp | 53 ++++++++++++++++++++----- DSView/pv/mainwindow.h | 9 ++++- lang/cn/dlg.json | 6 ++- lang/en/dlg.json | 6 ++- 9 files changed, 80 insertions(+), 18 deletions(-) diff --git a/DSView/pv/config/appconfig.cpp b/DSView/pv/config/appconfig.cpp index 3944c946..9988455b 100644 --- a/DSView/pv/config/appconfig.cpp +++ b/DSView/pv/config/appconfig.cpp @@ -99,6 +99,7 @@ void _loadApp(AppOptions &o, QSettings &st){ getFiled("logLevel", st, o.logLevel, 3); getFiled("transDecoderDlg", st, o.transDecoderDlg, true); getFiled("trigPosDisplayInMid", st, o.trigPosDisplayInMid, true); + getFiled("displayProfileInBar", st, o.displayProfileInBar, false); QString fmt; getFiled("protocalFormats", st, fmt, ""); @@ -119,6 +120,7 @@ void _saveApp(AppOptions &o, QSettings &st){ setFiled("logLevel", st, o.logLevel); setFiled("transDecoderDlg", st, o.transDecoderDlg); setFiled("trigPosDisplayInMid", st, o.trigPosDisplayInMid); + setFiled("displayProfileInBar", st, o.displayProfileInBar); QString fmt = FormatArrayToString(o.m_protocolFormats); setFiled("protocalFormats", st, fmt); diff --git a/DSView/pv/config/appconfig.h b/DSView/pv/config/appconfig.h index 47ac6ba9..453bdd72 100644 --- a/DSView/pv/config/appconfig.h +++ b/DSView/pv/config/appconfig.h @@ -62,6 +62,7 @@ struct AppOptions int logLevel; bool transDecoderDlg; bool trigPosDisplayInMid; + bool displayProfileInBar; std::vector m_protocolFormats; }; diff --git a/DSView/pv/dialogs/applicationpardlg.cpp b/DSView/pv/dialogs/applicationpardlg.cpp index d60c9a2f..caadabae 100644 --- a/DSView/pv/dialogs/applicationpardlg.cpp +++ b/DSView/pv/dialogs/applicationpardlg.cpp @@ -48,7 +48,7 @@ bool ApplicationParamDlg::ShowDlg(QWidget *parent) { DSDialog dlg(parent, true, true); dlg.setTitle(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_DISPLAY_OPTIONS), "Display options")); - dlg.setMinimumSize(300, 200); + dlg.setMinimumSize(300, 230); QFormLayout &lay = *(new QFormLayout()); lay.setContentsMargins(0,20,0,30); @@ -63,6 +63,11 @@ bool ApplicationParamDlg::ShowDlg(QWidget *parent) QCheckBox *ck_trigInMid = new QCheckBox(); ck_trigInMid->setChecked(app._appOptions.trigPosDisplayInMid); + QCheckBox *ck_profileBar = new QCheckBox(); + ck_profileBar->setChecked(app._appOptions.displayProfileInBar); + + lay.setHorizontalSpacing(8); + if (mode == LOGIC){ lay.addRow(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_QUICK_SCROLL), "Quick scroll"), ck_quickScroll); } @@ -70,6 +75,8 @@ bool ApplicationParamDlg::ShowDlg(QWidget *parent) lay.addRow(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_TRIG_DISPLAY_MIDDLE), "Tig pos in middle"), ck_trigInMid); } + lay.addRow(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_DISPLAY_PROFILE_IN_BAR), "Profile in bar"), ck_profileBar); + dlg.layout()->addLayout(&lay); dlg.exec(); @@ -80,8 +87,11 @@ bool ApplicationParamDlg::ShowDlg(QWidget *parent) if (ret){ app._appOptions.quickScroll = ck_quickScroll->isChecked(); app._appOptions.trigPosDisplayInMid = ck_trigInMid->isChecked(); + app._appOptions.displayProfileInBar = ck_profileBar->isChecked(); app.SaveApp(); + + AppControl::Instance()->GetSession()->broadcast_msg(DSV_MSG_APP_OPTIONS_CHANGED); } return ret; diff --git a/DSView/pv/interface/icallbacks.h b/DSView/pv/interface/icallbacks.h index c5213dda..2b4da34a 100644 --- a/DSView/pv/interface/icallbacks.h +++ b/DSView/pv/interface/icallbacks.h @@ -96,6 +96,8 @@ public: #define DSV_MSG_CLEAR_DECODE_DATA 8001 +#define DSV_MSG_APP_OPTIONS_CHANGED 9001 + class IMessageListener { public: diff --git a/DSView/pv/mainframe.cpp b/DSView/pv/mainframe.cpp index 2ffb5fbe..531f63a8 100644 --- a/DSView/pv/mainframe.cpp +++ b/DSView/pv/mainframe.cpp @@ -81,14 +81,13 @@ MainFrame::MainFrame() QIcon icon; icon.addFile(QString::fromUtf8(":/icons/logo.svg"), QSize(), QIcon::Normal, QIcon::Off); setWindowIcon(icon); - + // Title _titleBar = new toolbars::TitleBar(true, this); - + // MainWindow - _mainWindow = new MainWindow(this); + _mainWindow = new MainWindow(_titleBar, this); _mainWindow->setWindowFlags(Qt::Widget); - _titleBar->setTitle(_mainWindow->windowTitle()); QVBoxLayout *vbox = new QVBoxLayout(); vbox->setContentsMargins(0,0,0,0); diff --git a/DSView/pv/mainwindow.cpp b/DSView/pv/mainwindow.cpp index 99772fd7..63cbbea7 100644 --- a/DSView/pv/mainwindow.cpp +++ b/DSView/pv/mainwindow.cpp @@ -103,12 +103,16 @@ namespace pv { - MainWindow::MainWindow(QWidget *parent) + MainWindow::MainWindow(toolbars::TitleBar *title_bar, QWidget *parent) : QMainWindow(parent) { _msg = NULL; _frame = parent; + assert(title_bar); + + _title_bar = title_bar; + _session = AppControl::Instance()->GetSession(); _session->set_callback(this); _device_agent = _session->get_device(); @@ -125,6 +129,8 @@ namespace pv _key_vaild = false; _last_key_press_time = high_resolution_clock::now(); + + update_title_bar_text(); } void MainWindow::setup_ui() @@ -196,6 +202,7 @@ namespace pv _measure_dock->setVisible(false); _measure_widget = new dock::MeasureDock(_measure_dock, *_view, _session); _measure_dock->setWidget(_measure_widget); + // search dock _search_dock = new QDockWidget(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_SEARCH_DOCK_TITLE), "Search..."), this); _search_dock->setObjectName("search_dock"); @@ -203,7 +210,7 @@ namespace pv _search_dock->setTitleBarWidget(new QWidget(_search_dock)); _search_dock->setAllowedAreas(Qt::BottomDockWidgetArea); _search_dock->setVisible(false); - // dock::SearchDock *_search_widget = new dock::SearchDock(_search_dock, *_view, _session); + _search_widget = new dock::SearchDock(_search_dock, *_view, _session); _search_dock->setWidget(_search_widget); @@ -212,10 +219,6 @@ namespace pv addDockWidget(Qt::RightDockWidgetArea, _dso_trigger_dock); addDockWidget(Qt::RightDockWidgetArea, _measure_dock); addDockWidget(Qt::BottomDockWidgetArea, _search_dock); - - // Set the title - QString title = QApplication::applicationName() + " v" + QApplication::applicationVersion(); - setWindowTitle(QApplication::translate("MainWindow", title.toLocal8Bit().data(), 0)); // event filter _view->installEventFilter(this); @@ -636,6 +639,11 @@ namespace pv _dso_trigger_widget->update_view(); } + if (_device_agent->is_hardware()){ + _title_ext_string = name; + update_title_bar_text(); + } + return ret; } @@ -1583,7 +1591,8 @@ namespace pv } void MainWindow::load_device_config() - { + { + _title_ext_string = ""; int mode = _device_agent->get_work_mode(); if (_device_agent->is_hardware()) @@ -1610,7 +1619,9 @@ namespace pv } } - on_load_session(ses_name); + if (on_load_session(ses_name)){ + _title_ext_string = ses_name; + } } else if (_device_agent->is_demo()) { @@ -1752,6 +1763,7 @@ namespace pv { reset_all_view(); load_device_config(); + update_title_bar_text(); _sampling_bar->update_device_list(); _logo_bar->dsl_connected(_session->get_device()->is_hardware()); @@ -1827,6 +1839,7 @@ namespace pv _view->mode_changed(); reset_all_view(); load_device_config(); + update_title_bar_text(); update_toolbar_view_status(); _sampling_bar->update_sample_rate_list(); @@ -1987,7 +2000,11 @@ namespace pv } } calc_min_height(); - break; + break; + + case DSV_MSG_APP_OPTIONS_CHANGED: + update_title_bar_text(); + break; } } @@ -2029,4 +2046,22 @@ namespace pv } } + void MainWindow::update_title_bar_text() + { + // Set the title + QString title = QApplication::applicationName() + " v" + QApplication::applicationVersion(); + AppConfig &app = AppConfig::Instance(); + + if (_title_ext_string != "" && app._appOptions.displayProfileInBar){ + title += " [" + _title_ext_string + "]"; + } + + if (_lst_title_string != title){ + _lst_title_string = title; + + setWindowTitle(QApplication::translate("MainWindow", title.toLocal8Bit().data(), 0)); + _title_bar->setTitle(this->windowTitle()); + } + } + } // namespace pv diff --git a/DSView/pv/mainwindow.h b/DSView/pv/mainwindow.h index ccc22b5b..f926a5be 100644 --- a/DSView/pv/mainwindow.h +++ b/DSView/pv/mainwindow.h @@ -57,6 +57,7 @@ class SamplingBar; class TrigBar; class FileBar; class LogoBar; +class TitleBar; } namespace dock{ @@ -89,7 +90,7 @@ public: static const int Per_Chan_Height = 35; public: - explicit MainWindow(QWidget *parent = 0); + explicit MainWindow(toolbars::TitleBar *title_bar, QWidget *parent = 0); void openDoc(); @@ -148,7 +149,8 @@ private: QJsonDocument get_session_json_from_file(QString file); QJsonArray get_decoder_json_from_file(QString file); void calc_min_height(); - void session_save(); + void session_save(); + void update_title_bar_text(); private: //ISessionCallback @@ -200,6 +202,7 @@ private: toolbars::TrigBar *_trig_bar; toolbars::FileBar *_file_bar; toolbars::LogoBar *_logo_bar; //help button, on top right + toolbars::TitleBar *_title_bar; QDockWidget *_protocol_dock; @@ -225,6 +228,8 @@ private: QWidget *_frame; DsTimer _delay_prop_msg_timer; QString _strMsg; + QString _lst_title_string; + QString _title_ext_string; int _key_value; bool _key_vaild; diff --git a/lang/cn/dlg.json b/lang/cn/dlg.json index 3504586f..a496048b 100644 --- a/lang/cn/dlg.json +++ b/lang/cn/dlg.json @@ -65,7 +65,7 @@ }, { "id": "IDS_DLG_QUICK_SCROLL", - "text": "快速滚动" + "text": "通过鼠标快速滚动波形" }, { "id": "IDS_DLG_SAVE", @@ -686,5 +686,9 @@ { "id": "IDS_DLG_TRIG_DISPLAY_MIDDLE", "text": "触发位置自动居中显示" + }, + { + "id": "IDS_DLG_DISPLAY_PROFILE_IN_BAR", + "text": "将配置文件名显示在标题栏上" } ] \ No newline at end of file diff --git a/lang/en/dlg.json b/lang/en/dlg.json index 52ec0a41..611fb7e4 100644 --- a/lang/en/dlg.json +++ b/lang/en/dlg.json @@ -65,7 +65,7 @@ }, { "id": "IDS_DLG_QUICK_SCROLL", - "text": "Quick scroll" + "text": "Quick scroll waveform by mouse" }, { "id": "IDS_DLG_SAVE", @@ -686,5 +686,9 @@ { "id": "IDS_DLG_TRIG_DISPLAY_MIDDLE", "text": "Trig pos display at the middle" + }, + { + "id": "IDS_DLG_DISPLAY_PROFILE_IN_BAR", + "text": "Display the profile in title bar" } ] \ No newline at end of file