diff --git a/CMakeLists.txt b/CMakeLists.txt index 525d747a..8fe5cb63 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -345,6 +345,7 @@ set(DSView_SOURCES DSView/pv/utility/array.cpp DSView/pv/deviceagent.cpp DSView/pv/ui/langresource.cpp + DSView/pv/ui/fun.cpp ) set(DSView_HEADERS @@ -437,6 +438,7 @@ set(DSView_HEADERS DSView/pv/utility/path.h DSView/pv/utility/array.h DSView/pv/deviceagent.h + DSView/pv/ui/fun.h ) #=============================================================================== diff --git a/DSView/main.cpp b/DSView/main.cpp index 7332c87a..c5157238 100644 --- a/DSView/main.cpp +++ b/DSView/main.cpp @@ -198,13 +198,13 @@ bool bHighScale = true; AppControl *control = AppControl::Instance(); AppConfig &app = AppConfig::Instance(); app.LoadAll(); //load app config - LangResource::Instance()->Load(app._frameOptions.language); + LangResource::Instance()->Load(app.frameOptions.language); - if (app._appOptions.ableSaveLog){ - dsv_log_enalbe_logfile(app._appOptions.appendLogMode); + if (app.appOptions.ableSaveLog){ + dsv_log_enalbe_logfile(app.appOptions.appendLogMode); - if (app._appOptions.logLevel >= logLevel){ - dsv_log_level(app._appOptions.logLevel); + if (app.appOptions.logLevel >= logLevel){ + dsv_log_level(app.appOptions.logLevel); } } diff --git a/DSView/pv/appcontrol.cpp b/DSView/pv/appcontrol.cpp index 76737c65..7800eeee 100644 --- a/DSView/pv/appcontrol.cpp +++ b/DSView/pv/appcontrol.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include "sigsession.h" #include "dsvdef.h" #include "config/appconfig.h" @@ -145,10 +146,36 @@ void AppControl::UnInit() _session->uninit(); } - bool AppControl::TopWindowIsMaximized() - { - if (_topWindow != NULL){ - return _topWindow->isMaximized(); - } - return false; - } +bool AppControl::TopWindowIsMaximized() +{ + if (_topWindow != NULL){ + return _topWindow->isMaximized(); + } + return false; +} + +void AppControl::add_font_form(IFontForm *form) +{ + assert(form); + _font_forms.push_back(form); +} + +void AppControl::remove_font_form(IFontForm *form) +{ + assert(form); + + for (auto it = _font_forms.begin(); it != _font_forms.end(); it++) + { + if ( *(it) == form){ + _font_forms.erase(it); + break; + } + } +} + +void AppControl::update_font_forms() +{ + for (auto f : _font_forms){ + f->update_font(); + } +} diff --git a/DSView/pv/appcontrol.h b/DSView/pv/appcontrol.h index 8cef0051..a2f32893 100644 --- a/DSView/pv/appcontrol.h +++ b/DSView/pv/appcontrol.h @@ -22,9 +22,11 @@ #pragma once #include +#include struct sr_context; class QWidget; +class IFontForm; namespace pv{ class SigSession; @@ -64,10 +66,15 @@ public: bool TopWindowIsMaximized(); + void add_font_form(IFontForm *form); + void remove_font_form(IFontForm *form); + void update_font_forms(); + public: std::string _open_file_name; private: pv::SigSession *_session; QWidget *_topWindow; + std::vector _font_forms; }; diff --git a/DSView/pv/config/appconfig.cpp b/DSView/pv/config/appconfig.cpp index e5b6099b..0b337dc2 100644 --- a/DSView/pv/config/appconfig.cpp +++ b/DSView/pv/config/appconfig.cpp @@ -37,7 +37,8 @@ StringPair::StringPair(const std::string &key, const std::string &value) } //------------function -QString FormatArrayToString(std::vector &protocolFormats){ +static QString FormatArrayToString(std::vector &protocolFormats) +{ QString str; for (StringPair &o : protocolFormats){ @@ -52,7 +53,8 @@ QString FormatArrayToString(std::vector &protocolFormats){ return str; } -void StringToFormatArray(const QString &str, std::vector &protocolFormats){ +static void StringToFormatArray(const QString &str, std::vector &protocolFormats) +{ QStringList arr = str.split(";"); for (int i=0; i &protocolFo } } -//read write field - -void getFiled(const char *key, QSettings &st, QString &f, const char *dv){ +//----------------read write field +static void getFiled(const char *key, QSettings &st, QString &f, const char *dv) +{ f = st.value(key, dv).toString(); } -void getFiled(const char *key, QSettings &st, int &f, int dv){ + +static void setFiled(const char *key, QSettings &st, QString f) +{ + st.setValue(key, f); +} + +static void getFiled(const char *key, QSettings &st, int &f, int dv) +{ f = st.value(key, dv).toInt(); } -void getFiled(const char *key, QSettings &st, bool &f, bool dv){ + +static void setFiled(const char *key, QSettings &st, int f) +{ + st.setValue(key, f); +} + +static void getFiled(const char *key, QSettings &st, bool &f, bool dv) +{ f = st.value(key, dv).toBool(); } - -void setFiled(const char *key, QSettings &st, QString f){ - st.setValue(key, f); -} -void setFiled(const char *key, QSettings &st, int f){ - st.setValue(key, f); -} -void setFiled(const char *key, QSettings &st, bool f){ + +static void setFiled(const char *key, QSettings &st, bool f){ st.setValue(key, f); } +static void getFiled(const char *key, QSettings &st, float &f, float dv) +{ + f = st.value(key, dv).toInt(); +} + +static void setFiled(const char *key, QSettings &st, float f) +{ + st.setValue(key, f); +} ///------ app -void _loadApp(AppOptions &o, QSettings &st){ +static void _loadApp(AppOptions &o, QSettings &st) +{ st.beginGroup("Application"); getFiled("quickScroll", st, o.quickScroll, true); getFiled("warnofMultiTrig", st, o.warnofMultiTrig, true); @@ -111,7 +131,8 @@ void _loadApp(AppOptions &o, QSettings &st){ st.endGroup(); } -void _saveApp(AppOptions &o, QSettings &st){ +static void _saveApp(AppOptions &o, QSettings &st) +{ st.beginGroup("Application"); setFiled("quickScroll", st, o.quickScroll); setFiled("warnofMultiTrig", st, o.warnofMultiTrig); @@ -131,7 +152,8 @@ void _saveApp(AppOptions &o, QSettings &st){ //-----frame -void _loadDockOptions(DockOptions &o, QSettings &st, const char *group){ +static void _loadDockOptions(DockOptions &o, QSettings &st, const char *group) +{ st.beginGroup(group); getFiled("decodeDoc", st, o.decodeDock, false); getFiled("triggerDoc", st, o.triggerDock, false); @@ -140,7 +162,8 @@ void _loadDockOptions(DockOptions &o, QSettings &st, const char *group){ st.endGroup(); } -void _saveDockOptions(DockOptions &o, QSettings &st, const char *group){ +static void _saveDockOptions(DockOptions &o, QSettings &st, const char *group) +{ st.beginGroup(group); setFiled("decodeDoc", st, o.decodeDock); setFiled("triggerDoc", st, o.triggerDock); @@ -149,7 +172,8 @@ void _saveDockOptions(DockOptions &o, QSettings &st, const char *group){ st.endGroup(); } -void _loadFrame(FrameOptions &o, QSettings &st){ +static void _loadFrame(FrameOptions &o, QSettings &st) +{ st.beginGroup("MainFrame"); getFiled("style", st, o.style, THEME_STYLE_DARK); getFiled("language", st, o.language, -1); @@ -177,7 +201,8 @@ void _loadFrame(FrameOptions &o, QSettings &st){ } } -void _saveFrame(FrameOptions &o, QSettings &st){ +static void _saveFrame(FrameOptions &o, QSettings &st) +{ st.beginGroup("MainFrame"); setFiled("style", st, o.style); setFiled("language", st, o.language); @@ -196,7 +221,8 @@ void _saveFrame(FrameOptions &o, QSettings &st){ } //------history -void _loadHistory(UserHistory &o, QSettings &st){ +static void _loadHistory(UserHistory &o, QSettings &st) +{ st.beginGroup("UserHistory"); getFiled("exportDir", st, o.exportDir, ""); getFiled("saveDir", st, o.saveDir, ""); @@ -209,7 +235,8 @@ void _loadHistory(UserHistory &o, QSettings &st){ st.endGroup(); } -void _saveHistory(UserHistory &o, QSettings &st){ +static void _saveHistory(UserHistory &o, QSettings &st) +{ st.beginGroup("UserHistory"); setFiled("exportDir", st, o.exportDir); setFiled("saveDir", st, o.saveDir); @@ -222,6 +249,45 @@ void _saveHistory(UserHistory &o, QSettings &st){ st.endGroup(); } +//------font +static void _loadFont(FontOptions &o, QSettings &st) +{ + st.beginGroup("FontSetting"); + getFiled("toolbarName", st, o.toolbar.name, ""); + getFiled("toolbarSize", st, o.toolbar.size, 10); + getFiled("channelLabelName", st, o.channelLabel.name, ""); + getFiled("channelLabelSize", st, o.channelLabel.size, 10); + getFiled("channelBodyName", st, o.channelBody.name, ""); + getFiled("channelBodySize", st, o.channelBody.size, 9); + getFiled("rulerName", st, o.ruler.name, ""); + getFiled("ruleSize", st, o.ruler.size, 9); + getFiled("titleName", st, o.title.name, ""); + getFiled("titleSize", st, o.title.size, 10); + getFiled("otherName", st, o.other.name, ""); + getFiled("otherSize", st, o.other.size, 10); + + st.endGroup(); +} + +static void _saveFont(FontOptions &o, QSettings &st) +{ + st.beginGroup("FontSetting"); + setFiled("toolbarName", st, o.toolbar.name); + setFiled("toolbarSize", st, o.toolbar.size); + setFiled("channelLabelName", st, o.channelLabel.name); + setFiled("channelLabelSize", st, o.channelLabel.size); + setFiled("channelBodyName", st, o.channelBody.name); + setFiled("channelBodySize", st, o.channelBody.size); + setFiled("rulerName", st, o.ruler.name); + setFiled("ruleSize", st, o.ruler.size); + setFiled("titleName", st, o.title.name); + setFiled("titleSize", st, o.title.size); + setFiled("otherName", st, o.other.name); + setFiled("otherSize", st, o.other.size); + + st.endGroup(); +} + //------------AppConfig AppConfig::AppConfig() @@ -249,36 +315,42 @@ AppConfig::~AppConfig() void AppConfig::LoadAll() { QSettings st(QApplication::organizationName(), QApplication::applicationName()); - _loadApp(_appOptions, st); - _loadHistory(_userHistory, st); - _loadFrame(_frameOptions, st); + _loadApp(appOptions, st); + _loadHistory(userHistory, st); + _loadFrame(frameOptions, st); + _loadFont(fontOptions, st); //dsv_dbg("Config file path:\"%s\"", st.fileName().toUtf8().data()); } - void AppConfig::SaveApp() - { - QSettings st(QApplication::organizationName(), QApplication::applicationName()); - _saveApp(_appOptions, st); - } +void AppConfig::SaveApp() +{ + QSettings st(QApplication::organizationName(), QApplication::applicationName()); + _saveApp(appOptions, st); +} - void AppConfig::SaveHistory() - { - QSettings st(QApplication::organizationName(), QApplication::applicationName()); - _saveHistory(_userHistory, st); - } +void AppConfig::SaveHistory() +{ + QSettings st(QApplication::organizationName(), QApplication::applicationName()); + _saveHistory(userHistory, st); +} - void AppConfig::SaveFrame() - { - QSettings st(QApplication::organizationName(), QApplication::applicationName()); - _saveFrame(_frameOptions, st); - } - +void AppConfig::SaveFrame() +{ + QSettings st(QApplication::organizationName(), QApplication::applicationName()); + _saveFrame(frameOptions, st); +} + +void AppConfig::SaveFont() +{ + QSettings st(QApplication::organizationName(), QApplication::applicationName()); + _saveFont(fontOptions, st); +} void AppConfig::SetProtocolFormat(const std::string &protocolName, const std::string &value) { bool bChange = false; - for (StringPair &o : _appOptions.m_protocolFormats){ + for (StringPair &o : appOptions.m_protocolFormats){ if (o.m_key == protocolName){ o.m_value = value; bChange = true; @@ -288,14 +360,14 @@ void AppConfig::SetProtocolFormat(const std::string &protocolName, const std::st if (!bChange) { - if (_appOptions.m_protocolFormats.size() > MAX_PROTOCOL_FORMAT_LIST) + if (appOptions.m_protocolFormats.size() > MAX_PROTOCOL_FORMAT_LIST) { - while (_appOptions.m_protocolFormats.size() < MAX_PROTOCOL_FORMAT_LIST) + while (appOptions.m_protocolFormats.size() < MAX_PROTOCOL_FORMAT_LIST) { - _appOptions.m_protocolFormats.erase(_appOptions.m_protocolFormats.begin()); + appOptions.m_protocolFormats.erase(appOptions.m_protocolFormats.begin()); } } - _appOptions.m_protocolFormats.push_back(StringPair(protocolName, value)); + appOptions.m_protocolFormats.push_back(StringPair(protocolName, value)); bChange = true; } @@ -306,7 +378,7 @@ void AppConfig::SetProtocolFormat(const std::string &protocolName, const std::st std::string AppConfig::GetProtocolFormat(const std::string &protocolName) { - for (StringPair &o : _appOptions.m_protocolFormats){ + for (StringPair &o : appOptions.m_protocolFormats){ if (o.m_key == protocolName){ return o.m_value; } @@ -317,7 +389,7 @@ std::string AppConfig::GetProtocolFormat(const std::string &protocolName) //-------------api QString GetIconPath() { - QString style = AppConfig::Instance()._frameOptions.style; + QString style = AppConfig::Instance().frameOptions.style; if (style == ""){ style = THEME_STYLE_DARK; } diff --git a/DSView/pv/config/appconfig.h b/DSView/pv/config/appconfig.h index 4aba8a30..02c642d5 100644 --- a/DSView/pv/config/appconfig.h +++ b/DSView/pv/config/appconfig.h @@ -106,6 +106,22 @@ struct UserHistory QString exportFormat; }; +struct FontParam +{ + QString name; + float size; +}; + +struct FontOptions +{ + FontParam toolbar; + FontParam channelLabel; + FontParam channelBody; + FontParam ruler; + FontParam title; + FontParam other; +}; + class AppConfig { private: @@ -120,17 +136,19 @@ public: void SaveApp(); void SaveHistory(); void SaveFrame(); + void SaveFont(); void SetProtocolFormat(const std::string &protocolName, const std::string &value); std::string GetProtocolFormat(const std::string &protocolName); inline bool IsLangCn() { - return _frameOptions.language == LAN_CN; + return frameOptions.language == LAN_CN; } public: - AppOptions _appOptions; - UserHistory _userHistory; - FrameOptions _frameOptions; + AppOptions appOptions; + UserHistory userHistory; + FrameOptions frameOptions; + FontOptions fontOptions; }; diff --git a/DSView/pv/dialogs/about.cpp b/DSView/pv/dialogs/about.cpp index ea10ee3d..09cf27aa 100644 --- a/DSView/pv/dialogs/about.cpp +++ b/DSView/pv/dialogs/about.cpp @@ -86,7 +86,7 @@ About::About(QWidget *parent) : QDir dir(GetAppDataDir()); AppConfig &app = AppConfig::Instance(); - int lan = app._frameOptions.language; + int lan = app.frameOptions.language; QString filename = dir.absolutePath() + "/NEWS" + QString::number(lan); QFile news(filename); diff --git a/DSView/pv/dialogs/applicationpardlg.cpp b/DSView/pv/dialogs/applicationpardlg.cpp index a3e912ec..bc2d86cf 100644 --- a/DSView/pv/dialogs/applicationpardlg.cpp +++ b/DSView/pv/dialogs/applicationpardlg.cpp @@ -22,13 +22,21 @@ #include "applicationpardlg.h" #include "dsdialog.h" #include +#include +#include #include #include -#include "../config/appconfig.h" +#include +#include +#include +#include +#include "../config/appconfig.h" #include "../ui/langresource.h" #include "../appcontrol.h" #include "../sigsession.h" +#include "../ui/dscombobox.h" +#include "../log.h" namespace pv { @@ -44,6 +52,47 @@ ApplicationParamDlg::~ApplicationParamDlg() { } +void ApplicationParamDlg::bind_font_name_list(QComboBox *box, QString v) +{ + int selDex = -1; + + QString defName(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_DEFAULT_FONT), "Default")); + box->addItem(defName); + + QFontDatabase fDataBase; + for (QString family : fDataBase.families()) { + if (family.indexOf("[") == -1) + { + box->addItem(family); + + if (selDex == -1 && family == v){ + selDex = box->count() - 1; + } + } + } + + if (selDex == -1) + selDex = 0; + + box->setCurrentIndex(selDex); +} + +void ApplicationParamDlg::bind_font_size_list(QComboBox *box, float size) +{ + int selDex = -1; + + for(int i=9; i<=15; i++) + { + box->addItem(QString::number(i)); + if (i == size){ + selDex = box->count() - 1; + } + } + if (selDex == -1) + selDex = 0; + box->setCurrentIndex(selDex); +} + bool ApplicationParamDlg::ShowDlg(QWidget *parent) { DSDialog dlg(parent, true, true); @@ -58,16 +107,16 @@ bool ApplicationParamDlg::ShowDlg(QWidget *parent) int mode = AppControl::Instance()->GetSession()->get_device()->get_work_mode(); QCheckBox *ck_quickScroll = new QCheckBox(); - ck_quickScroll->setChecked(app._appOptions.quickScroll); + ck_quickScroll->setChecked(app.appOptions.quickScroll); QCheckBox *ck_trigInMid = new QCheckBox(); - ck_trigInMid->setChecked(app._appOptions.trigPosDisplayInMid); + ck_trigInMid->setChecked(app.appOptions.trigPosDisplayInMid); QCheckBox *ck_profileBar = new QCheckBox(); - ck_profileBar->setChecked(app._appOptions.displayProfileInBar); + ck_profileBar->setChecked(app.appOptions.displayProfileInBar); QCheckBox *ck_abortData = new QCheckBox(); - ck_abortData->setChecked(app._appOptions.swapBackBufferAlways); + ck_abortData->setChecked(app.appOptions.swapBackBufferAlways); lay.setHorizontalSpacing(8); @@ -81,6 +130,66 @@ bool ApplicationParamDlg::ShowDlg(QWidget *parent) lay.addRow(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_DISPLAY_PROFILE_IN_BAR), "Profile in bar"), ck_profileBar); + //----------------Font setting. + std::vector font_bind_list; + FontBindInfo ft1 = {NULL, NULL, S_ID(IDS_DLG_TOOLBAR_FONT), "Toolbar", + &app.fontOptions.toolbar.name, &app.fontOptions.toolbar.size}; + font_bind_list.push_back(ft1); + + FontBindInfo ft2 = {NULL, NULL, S_ID(IDS_DLG_CHANNEL_NAME_FONT), "Channel Name", + &app.fontOptions.channelLabel.name, &app.fontOptions.channelLabel.size}; + font_bind_list.push_back(ft2); + + FontBindInfo ft3 = {NULL, NULL, S_ID(IDS_DLG_CHANNEL_BODY_FONT), "Channel Body", + &app.fontOptions.channelBody.name, &app.fontOptions.channelBody.size}; + font_bind_list.push_back(ft3); + + FontBindInfo ft4 = {NULL, NULL, S_ID(IDS_DLG_RULER_FONT), "Ruler", + &app.fontOptions.ruler.name, &app.fontOptions.ruler.size}; + font_bind_list.push_back(ft4); + + FontBindInfo ft5 = {NULL, NULL, S_ID(IDS_DLG_TITLE_FONT), "Titel", + &app.fontOptions.title.name, &app.fontOptions.title.size}; + font_bind_list.push_back(ft5); + + FontBindInfo ft6 = {NULL, NULL, S_ID(IDS_DLG_OTHER_FONT), "Other", + &app.fontOptions.other.name, &app.fontOptions.other.size}; + font_bind_list.push_back(ft6); + + QWidget *lineSpace = new QWidget(); + lineSpace->setFixedHeight(8); + lay.addRow(lineSpace); + + QGroupBox *ftGroup = new QGroupBox(); + ftGroup->setTitle(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_FONT_GROUP), "Font")); + QVBoxLayout *ftPannelLay = new QVBoxLayout(); + ftGroup->setLayout(ftPannelLay); + ftPannelLay->setContentsMargins(5,15,5,10); + + for (FontBindInfo &inf : font_bind_list) + { + QWidget *ftWid = new QWidget(); + QHBoxLayout *ftLay = new QHBoxLayout(); + ftLay->setContentsMargins(0,0,0,0); + ftWid->setLayout(ftLay); + QString ftLb = LangResource::Instance()->get_lang_text(STR_PAGE_DLG, + inf.lang_id.toUtf8().data(), inf.lang_def); + ftLay->addWidget(new QLabel(ftLb)); + QComboBox *ftCbName = new DsComboBox(); + bind_font_name_list(ftCbName, *inf.ptr_name); + ftLay->addWidget(ftCbName); + QComboBox *ftCbSize = new DsComboBox(); + ftCbSize->setFixedWidth(50); + bind_font_size_list(ftCbSize, *inf.ptr_size); + ftLay->addWidget(ftCbSize); + ftPannelLay->addWidget(ftWid); + + inf.name_box = ftCbName; + inf.size_box = ftCbSize; + } + + lay.addRow(ftGroup); + dlg.layout()->addLayout(&lay); dlg.exec(); @@ -89,14 +198,56 @@ bool ApplicationParamDlg::ShowDlg(QWidget *parent) //save config if (ret){ - app._appOptions.quickScroll = ck_quickScroll->isChecked(); - app._appOptions.trigPosDisplayInMid = ck_trigInMid->isChecked(); - app._appOptions.displayProfileInBar = ck_profileBar->isChecked(); - app._appOptions.swapBackBufferAlways = ck_abortData->isChecked(); - app.SaveApp(); + bool bAppChanged = false; + bool bFontChanged = false; - AppControl::Instance()->GetSession()->broadcast_msg(DSV_MSG_APP_OPTIONS_CHANGED); + if (app.appOptions.quickScroll != ck_quickScroll->isChecked()){ + app.appOptions.quickScroll = ck_quickScroll->isChecked(); + bAppChanged = true; + } + if (app.appOptions.trigPosDisplayInMid != ck_trigInMid->isChecked()){ + app.appOptions.trigPosDisplayInMid = ck_trigInMid->isChecked(); + bAppChanged = true; + } + if (app.appOptions.displayProfileInBar != ck_profileBar->isChecked()){ + app.appOptions.displayProfileInBar = ck_profileBar->isChecked(); + bAppChanged = true; + } + if (app.appOptions.swapBackBufferAlways != ck_abortData->isChecked()){ + app.appOptions.swapBackBufferAlways = ck_abortData->isChecked(); + bAppChanged = true; + } + + for (FontBindInfo &inf : font_bind_list) + { + QString oldName = *inf.ptr_name; + float oldSize = *inf.ptr_size; + + if (inf.name_box->currentIndex() > 0) + *inf.ptr_name = inf.name_box->currentText(); + else + *inf.ptr_name = ""; + + if (inf.size_box->currentIndex() >= 0) + *inf.ptr_size = inf.size_box->currentText().toFloat(); + else + *inf.ptr_size = 9; + + if (oldName != *inf.ptr_name || oldSize != *inf.ptr_size){ + bFontChanged = true; + } + } + + if (bFontChanged){ + app.SaveFont(); + AppControl::Instance()->GetSession()->broadcast_msg(DSV_MSG_FONT_OPTIONS_CHANGED); + } + + if (bAppChanged){ + app.SaveApp(); + AppControl::Instance()->GetSession()->broadcast_msg(DSV_MSG_APP_OPTIONS_CHANGED); + } } return ret; diff --git a/DSView/pv/dialogs/applicationpardlg.h b/DSView/pv/dialogs/applicationpardlg.h index 58f97543..72e74910 100644 --- a/DSView/pv/dialogs/applicationpardlg.h +++ b/DSView/pv/dialogs/applicationpardlg.h @@ -22,7 +22,19 @@ #pragma once #include -#include +#include + +class QComboBox; + +struct FontBindInfo +{ + QComboBox *name_box; + QComboBox *size_box; + QString lang_id; + char *lang_def; + QString *ptr_name; + float *ptr_size; +}; namespace pv { @@ -37,10 +49,14 @@ namespace pv bool ShowDlg(QWidget *parent); - //IDlgCallback + private: + //IDlgCallback void OnDlgResult(bool bYes); + void bind_font_name_list(QComboBox *box, QString v); + + void bind_font_size_list(QComboBox *box, float size); }; diff --git a/DSView/pv/dialogs/decoderoptionsdlg.cpp b/DSView/pv/dialogs/decoderoptionsdlg.cpp index d529eecb..16e7c662 100644 --- a/DSView/pv/dialogs/decoderoptionsdlg.cpp +++ b/DSView/pv/dialogs/decoderoptionsdlg.cpp @@ -168,7 +168,7 @@ void DecoderOptionsDlg::load_options_view() update_decode_range(); // set default sample range int h_ex2 = 0; - bool bLang = AppConfig::Instance()._appOptions.transDecoderDlg; + bool bLang = AppConfig::Instance().appOptions.transDecoderDlg; if (LangResource::Instance()->is_lang_en() == false){ QWidget *sp1 = new QWidget(); @@ -390,7 +390,7 @@ void DecoderOptionsDlg::create_decoder_form( decoder_form->setLabelAlignment(Qt::AlignLeft); decoder_form->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); - bool bLang = AppConfig::Instance()._appOptions.transDecoderDlg; + bool bLang = AppConfig::Instance().appOptions.transDecoderDlg; if (LangResource::Instance()->is_lang_en()){ bLang = false; } @@ -527,7 +527,7 @@ void DecoderOptionsDlg::on_trans_pramas() QCheckBox *ck_box = dynamic_cast(sender()); assert(ck_box); - AppConfig::Instance()._appOptions.transDecoderDlg = ck_box->isChecked(); + AppConfig::Instance().appOptions.transDecoderDlg = ck_box->isChecked(); AppConfig::Instance().SaveApp(); _is_reload_form = true; this->accept(); diff --git a/DSView/pv/dialogs/dsdialog.cpp b/DSView/pv/dialogs/dsdialog.cpp index f9f8e392..79cee824 100644 --- a/DSView/pv/dialogs/dsdialog.cpp +++ b/DSView/pv/dialogs/dsdialog.cpp @@ -29,6 +29,8 @@ #include #include #include "../dsvdef.h" +#include "../config/appconfig.h" +#include "../ui/fun.h" namespace pv { namespace dialogs { @@ -125,6 +127,8 @@ int DSDialog::exec() connect(_base_button, SIGNAL(rejected()), this, SLOT(reject())); connect(_base_button, SIGNAL(accepted()), this, SLOT(accept())); } + + update_font(); return QDialog::exec(); } @@ -156,7 +160,7 @@ void DSDialog::build_base(bool hasClose) this->setGraphicsEffect(_shadow); _titlebar = new toolbars::TitleBar(false, this, hasClose); - _main_layout->addWidget(_titlebar); + _main_layout->addWidget(_titlebar); _titleSpaceLine = new QWidget(this); _titleSpaceLine->setFixedHeight(15); @@ -170,5 +174,24 @@ void DSDialog::build_base(bool hasClose) _main_layout->setContentsMargins(10,5,10,10); } +void DSDialog::update_font() +{ + FontOptions &st = AppConfig::Instance().fontOptions; + QFont font = this->font(); + ui::set_font_param(font, st.other); + ui::set_form_font(this, font); + + if (_titlebar != NULL){ + _titlebar->update_font(); + } +} + +void DSDialog::show() +{ + update_font(); + + QWidget::show(); +} + } // namespace dialogs } // namespace pv diff --git a/DSView/pv/dialogs/dsdialog.h b/DSView/pv/dialogs/dsdialog.h index faa1a1ad..c6b423dc 100644 --- a/DSView/pv/dialogs/dsdialog.h +++ b/DSView/pv/dialogs/dsdialog.h @@ -40,7 +40,7 @@ namespace dialogs { class Shadow; //DSView any dialog base class -class DSDialog : public QDialog +class DSDialog : public QDialog, IFontForm { Q_OBJECT @@ -67,6 +67,11 @@ public: void SetTitleSpace(int h); + //IFontForm + void update_font(); + + void show(); + protected: void accept(); void reject(); diff --git a/DSView/pv/dialogs/dsmessagebox.cpp b/DSView/pv/dialogs/dsmessagebox.cpp index 07f54b02..2b3559d5 100644 --- a/DSView/pv/dialogs/dsmessagebox.cpp +++ b/DSView/pv/dialogs/dsmessagebox.cpp @@ -29,8 +29,9 @@ #include #include #include "../dsvdef.h" - #include "../ui/langresource.h" +#include "../config/appconfig.h" +#include "../ui/fun.h" namespace pv { namespace dialogs { @@ -127,5 +128,19 @@ void DSMessageBox::on_button(QAbstractButton *btn) reject(); } +int DSMessageBox::exec() +{ + FontOptions &st = AppConfig::Instance().fontOptions; + QFont font = this->font(); + ui::set_font_param(font, st.other); + ui::set_form_font(this, font); + + if (_titlebar != NULL){ + _titlebar->update_font(); + } + + return QDialog::exec(); +} + } // namespace dialogs } // namespace pv diff --git a/DSView/pv/dialogs/dsmessagebox.h b/DSView/pv/dialogs/dsmessagebox.h index 6f33bfea..254dee38 100644 --- a/DSView/pv/dialogs/dsmessagebox.h +++ b/DSView/pv/dialogs/dsmessagebox.h @@ -45,6 +45,8 @@ public: ~DSMessageBox(); QMessageBox *mBox(); + + int exec(); inline int IsYes(){return _bClickYes;} diff --git a/DSView/pv/dialogs/protocolexp.cpp b/DSView/pv/dialogs/protocolexp.cpp index 596d380c..6fdebac9 100644 --- a/DSView/pv/dialogs/protocolexp.cpp +++ b/DSView/pv/dialogs/protocolexp.cpp @@ -128,7 +128,7 @@ void ProtocolExp::accept() AppConfig &app = AppConfig::Instance(); QString default_filter = _format_combobox->currentText(); - QString default_name = app._userHistory.protocolExportPath + "/" + "decoder-"; + QString default_name = app.userHistory.protocolExportPath + "/" + "decoder-"; default_name += _session->get_session_time().toString("-yyMMdd-hhmmss"); QString file_name = QFileDialog::getSaveFileName( @@ -149,9 +149,9 @@ void ProtocolExp::accept() file_name += "." + ext; QString fname = path::GetDirectoryName(file_name); - if (fname != app._userHistory.openDir) + if (fname != app.userHistory.openDir) { - app._userHistory.protocolExportPath = fname; + app.userHistory.protocolExportPath = fname; app.SaveHistory(); } _fileName = file_name; diff --git a/DSView/pv/dialogs/storeprogress.cpp b/DSView/pv/dialogs/storeprogress.cpp index eb108809..032ad6f0 100644 --- a/DSView/pv/dialogs/storeprogress.cpp +++ b/DSView/pv/dialogs/storeprogress.cpp @@ -158,8 +158,8 @@ void StoreProgress::accept() if (_isExport && _store_session.IsLogicDataType()){ bool ck = _ckOrigin->isChecked(); AppConfig &app = AppConfig::Instance(); - if (app._appOptions.originalData != ck){ - app._appOptions.originalData = ck; + if (app.appOptions.originalData != ck){ + app.appOptions.originalData = ck; app.SaveApp(); } } @@ -223,7 +223,7 @@ void StoreProgress::export_run() { QGridLayout *lay = new QGridLayout(); lay->setContentsMargins(5, 0, 0, 0); - bool isOrg = AppConfig::Instance()._appOptions.originalData; + bool isOrg = AppConfig::Instance().appOptions.originalData; _ckOrigin = new QRadioButton(); _ckOrigin->setText(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_ORIGINAL_DATA), "Original data")); diff --git a/DSView/pv/dialogs/waitingdialog.cpp b/DSView/pv/dialogs/waitingdialog.cpp index 7bebf4e5..e80225d8 100644 --- a/DSView/pv/dialogs/waitingdialog.cpp +++ b/DSView/pv/dialogs/waitingdialog.cpp @@ -57,7 +57,7 @@ WaitingDialog::WaitingDialog(QWidget *parent, SigSession *session, int key) : this->setWindowOpacity(0.7); QFont font; - font.setPointSize(10); + font.setPointSize(9); font.setBold(true); QLabel *warning_tips = new QLabel(this); diff --git a/DSView/pv/dock/dsotriggerdock.cpp b/DSView/pv/dock/dsotriggerdock.cpp index 6ab67113..c37dced3 100644 --- a/DSView/pv/dock/dsotriggerdock.cpp +++ b/DSView/pv/dock/dsotriggerdock.cpp @@ -22,23 +22,21 @@ #include "dsotriggerdock.h" #include "../sigsession.h" #include "../dialogs/dsmessagebox.h" -#include "../view/dsosignal.h" - - +#include "../view/dsosignal.h" #include #include #include #include #include - #include #include #include #include - #include "../ui/langresource.h" #include "../log.h" #include "../ui/msgbox.h" +#include "../config/appconfig.h" +#include "../ui/fun.h" using namespace boost; using namespace std; @@ -173,6 +171,8 @@ DsoTriggerDock::DsoTriggerDock(QWidget *parent, SigSession *session) : _widget->setObjectName("dsoTriggerWidget"); retranslateUi(); + + update_font(); } DsoTriggerDock::~DsoTriggerDock() @@ -491,5 +491,15 @@ void DsoTriggerDock::update_view() connect(_margin_slider, SIGNAL(valueChanged(int)), this, SLOT(margin_changed(int))); } +void DsoTriggerDock::update_font() +{ + QFont font = this->font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.other); + ui::set_form_font(this, font); + + this->parentWidget()->setFont(font); +} + } // namespace dock } // namespace pv diff --git a/DSView/pv/dock/dsotriggerdock.h b/DSView/pv/dock/dsotriggerdock.h index 0f3c9cb8..446ce1a7 100644 --- a/DSView/pv/dock/dsotriggerdock.h +++ b/DSView/pv/dock/dsotriggerdock.h @@ -33,6 +33,7 @@ #include #include "../ui/dscombobox.h" +#include "../interface/icallbacks.h" namespace pv { @@ -40,7 +41,7 @@ class SigSession; namespace dock { -class DsoTriggerDock : public QScrollArea +class DsoTriggerDock : public QScrollArea, public IFontForm { Q_OBJECT @@ -59,6 +60,9 @@ private: void reStyle(); bool check_trig_channel(); + //IFontForm + void update_font(); + signals: void set_trig_pos(int percent); diff --git a/DSView/pv/dock/measuredock.cpp b/DSView/pv/dock/measuredock.cpp index e275046a..e277c7e1 100644 --- a/DSView/pv/dock/measuredock.cpp +++ b/DSView/pv/dock/measuredock.cpp @@ -38,6 +38,8 @@ #include "../ui/msgbox.h" #include #include +#include "../appcontrol.h" +#include "../ui/fun.h" using namespace boost; @@ -144,6 +146,8 @@ MeasureDock::MeasureDock(QWidget *parent, View &view, SigSession *session) : _widget->setObjectName("measureWidget"); retranslateUi(); + + update_font(); } MeasureDock::~MeasureDock() @@ -702,5 +706,15 @@ void MeasureDock::del_cursor() _view.update(); } +void MeasureDock::update_font() +{ + QFont font = this->font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.other); + ui::set_form_font(this, font); + + this->parentWidget()->setFont(font); +} + } // namespace dock } // namespace pv diff --git a/DSView/pv/dock/measuredock.h b/DSView/pv/dock/measuredock.h index fadd496c..8590f44f 100644 --- a/DSView/pv/dock/measuredock.h +++ b/DSView/pv/dock/measuredock.h @@ -41,7 +41,8 @@ #include -#include "../ui/dscombobox.h" +#include "../ui/dscombobox.h" +#include "../interface/icallbacks.h" namespace pv { @@ -54,7 +55,7 @@ namespace view { namespace dock { -class MeasureDock : public QScrollArea +class MeasureDock : public QScrollArea, public IFontForm { Q_OBJECT @@ -73,6 +74,9 @@ private: void retranslateUi(); void reStyle(); + //IFontForm + void update_font(); + private: DsComboBox* create_probe_selector(QWidget *parent); void update_probe_selector(DsComboBox *selector); diff --git a/DSView/pv/dock/protocoldock.cpp b/DSView/pv/dock/protocoldock.cpp index fca1225c..1487dbc3 100644 --- a/DSView/pv/dock/protocoldock.cpp +++ b/DSView/pv/dock/protocoldock.cpp @@ -52,8 +52,9 @@ #include "../data/decode/decoderstatus.h" #include "../data/decode/decoder.h" #include "../log.h" - #include "../ui/langresource.h" +#include "../appcontrol.h" +#include "../ui/fun.h" using namespace std; @@ -221,6 +222,8 @@ ProtocolDock::ProtocolDock(QWidget *parent, view::View &view, SigSession *sessio connect(_ann_search_edit, SIGNAL(editingFinished()), this, SLOT(search_changed())); connect(_pro_search_button, SIGNAL(clicked()), this, SLOT(show_protocol_select())); + + update_font(); } ProtocolDock::~ProtocolDock() @@ -1028,5 +1031,15 @@ bool ProtocolDock::protocol_sort_callback(const DecoderInfoItem *o1, const Decod } } + void ProtocolDock::update_font() + { + QFont font = this->font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.other); + ui::set_form_font(this, font); + + this->parentWidget()->setFont(font); + } + } // namespace dock } // namespace pv diff --git a/DSView/pv/dock/protocoldock.h b/DSView/pv/dock/protocoldock.h index c90c3e43..dedbf01c 100644 --- a/DSView/pv/dock/protocoldock.h +++ b/DSView/pv/dock/protocoldock.h @@ -72,7 +72,8 @@ class ProtocolDock : public QScrollArea, public IProtocolItemLayerCallback, public IKeywordActive, public ISearchItemClick, -public IDecoderPannel +public IDecoderPannel, +public IFontForm { Q_OBJECT @@ -115,6 +116,9 @@ private: //IDecoderPannel void update_deocder_item_name(void *trace_handel, const char *name); + //IFontForm + void update_font(); + signals: void protocol_updated(); diff --git a/DSView/pv/dock/searchcombobox.cpp b/DSView/pv/dock/searchcombobox.cpp index 03020cc5..85a16426 100644 --- a/DSView/pv/dock/searchcombobox.cpp +++ b/DSView/pv/dock/searchcombobox.cpp @@ -25,6 +25,9 @@ #include #include #include +#include "../config/appconfig.h" +#include "../appcontrol.h" +#include "../ui/fun.h" //----------------------ComboButtonItem @@ -126,11 +129,16 @@ void SearchComboBox::ShowDlg(QWidget *editline) } edit->setFocus(); - this->show(); - connect(edit, SIGNAL(textEdited(const QString &)), this, SLOT(on_keyword_changed(const QString &))); + + QFont font = this->font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.other); + ui::set_form_font(this, font); + + this->show(); } void SearchComboBox::AddDataItem(QString id, QString name, void *data_handle) diff --git a/DSView/pv/dock/searchdock.cpp b/DSView/pv/dock/searchdock.cpp index 4be98f2f..01f8b0c8 100644 --- a/DSView/pv/dock/searchdock.cpp +++ b/DSView/pv/dock/searchdock.cpp @@ -41,6 +41,8 @@ #include "../config/appconfig.h" #include "../ui/langresource.h" #include "../ui/msgbox.h" +#include "../appcontrol.h" +#include "../ui/fun.h" namespace pv { namespace dock { @@ -82,6 +84,8 @@ SearchDock::SearchDock(QWidget *parent, View &view, SigSession *session) : retranslateUi(); + update_font(); + connect(&_pre_button, SIGNAL(clicked()), this, SLOT(on_previous())); connect(&_nxt_button, SIGNAL(clicked()),this, SLOT(on_next())); } @@ -249,5 +253,13 @@ void SearchDock::on_set() } } +void SearchDock::update_font() +{ + QFont font = this->font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.other); + _search_value->setFont(font); +} + } // namespace dock } // namespace pv diff --git a/DSView/pv/dock/searchdock.h b/DSView/pv/dock/searchdock.h index a5178d56..38f706fe 100644 --- a/DSView/pv/dock/searchdock.h +++ b/DSView/pv/dock/searchdock.h @@ -43,6 +43,7 @@ #include "../widgets/fakelineedit.h" #include "../ui/dscombobox.h" +#include "../interface/icallbacks.h" namespace pv { @@ -58,7 +59,7 @@ namespace widgets { namespace dock { -class SearchDock : public QWidget +class SearchDock : public QWidget, public IFontForm { Q_OBJECT @@ -73,6 +74,9 @@ private: void retranslateUi(); void reStyle(); + //IFontForm + void update_font(); + public slots: void on_previous(); void on_next(); diff --git a/DSView/pv/dock/triggerdock.cpp b/DSView/pv/dock/triggerdock.cpp index 0f0c8e55..b99fccd1 100644 --- a/DSView/pv/dock/triggerdock.cpp +++ b/DSView/pv/dock/triggerdock.cpp @@ -44,6 +44,8 @@ #include "../ui/msgbox.h" #include "../log.h" #include "../data/decode/annotationrestable.h" +#include "../appcontrol.h" +#include "../ui/fun.h" namespace pv { namespace dock { @@ -123,6 +125,8 @@ TriggerDock::TriggerDock(QWidget *parent, SigSession *session) : _widget->setObjectName("triggerWidget"); retranslateUi(); + + update_font(); } TriggerDock::~TriggerDock() @@ -966,7 +970,7 @@ void TriggerDock::try_commit_trigger() } } - if (app._appOptions.warnofMultiTrig && num > 1) { + if (app.appOptions.warnofMultiTrig && num > 1) { dialogs::DSMessageBox msg(this); msg.mBox()->setText(L_S(STR_PAGE_MSG, S_ID(IDS_MSG_TRIGGER), "Trigger")); msg.mBox()->setInformativeText(L_S(STR_PAGE_MSG, S_ID(IDS_MSG_SET_TRI_MULTI_CHANNEL), @@ -991,7 +995,7 @@ void TriggerDock::try_commit_trigger() if (msg.mBox()->clickedButton() == noMoreButton) { - app._appOptions.warnofMultiTrig = false; + app.appOptions.warnofMultiTrig = false; app.SaveApp(); } } @@ -1064,5 +1068,15 @@ void TriggerDock::on_serial_hex_changed() _is_serial_val_setting = false; } +void TriggerDock::update_font() +{ + QFont font = this->font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.other); + ui::set_form_font(this, font); + + this->parentWidget()->setFont(font); +} + } // namespace dock } // namespace pv diff --git a/DSView/pv/dock/triggerdock.h b/DSView/pv/dock/triggerdock.h index 06309546..1246be01 100644 --- a/DSView/pv/dock/triggerdock.h +++ b/DSView/pv/dock/triggerdock.h @@ -39,10 +39,9 @@ #include #include #include - #include - -#include "../ui/dscombobox.h" +#include "../ui/dscombobox.h" +#include "../interface/icallbacks.h" namespace pv { @@ -50,7 +49,7 @@ class SigSession; namespace dock { -class TriggerDock : public QScrollArea +class TriggerDock : public QScrollArea, public IFontForm { Q_OBJECT @@ -87,6 +86,9 @@ private: */ bool commit_trigger(); + //IFontForm + void update_font(); + private slots: void simple_trigger(); void adv_trigger(); diff --git a/DSView/pv/interface/icallbacks.h b/DSView/pv/interface/icallbacks.h index a9e78366..2cfed68f 100644 --- a/DSView/pv/interface/icallbacks.h +++ b/DSView/pv/interface/icallbacks.h @@ -94,6 +94,7 @@ public: #define DSV_MSG_CLEAR_DECODE_DATA 8001 #define DSV_MSG_APP_OPTIONS_CHANGED 9001 +#define DSV_MSG_FONT_OPTIONS_CHANGED 9002 class IMessageListener { @@ -107,4 +108,10 @@ public: virtual void update_deocder_item_name(void *trace_handel, const char *name)=0; }; +class IFontForm +{ +public: + virtual void update_font()=0; +}; + #endif diff --git a/DSView/pv/mainframe.cpp b/DSView/pv/mainframe.cpp index 531f63a8..1ce355c3 100644 --- a/DSView/pv/mainframe.cpp +++ b/DSView/pv/mainframe.cpp @@ -43,12 +43,14 @@ #include #include #include +#include #include "dsvdef.h" #include "config/appconfig.h" #include "ui/msgbox.h" #include "appcontrol.h" #include "ui/langresource.h" +#include "log.h" #include @@ -402,16 +404,16 @@ bool MainFrame::eventFilter(QObject *object, QEvent *event) { AppConfig &app = AppConfig::Instance(); QRect rc = geometry(); - app._frameOptions.left = rc.left(); - app._frameOptions.top = rc.top(); - app._frameOptions.right = rc.right(); - app._frameOptions.bottom = rc.bottom(); + app.frameOptions.left = rc.left(); + app.frameOptions.top = rc.top(); + app.frameOptions.right = rc.right(); + app.frameOptions.bottom = rc.bottom(); } void MainFrame::writeSettings() { AppConfig &app = AppConfig::Instance(); - app._frameOptions.isMax = isMaximized(); + app.frameOptions.isMax = isMaximized(); if (!isMaximized()){ saveWindowRegion(); @@ -427,14 +429,14 @@ void MainFrame::readSettings() AppConfig &app = AppConfig::Instance(); - if (app._frameOptions.language > 0){ - _mainWindow->switchLanguage(app._frameOptions.language); + if (app.frameOptions.language > 0){ + _mainWindow->switchLanguage(app.frameOptions.language); } - int left = app._frameOptions.left; - int top = app._frameOptions.top; - int right = app._frameOptions.right; - int bottom = app._frameOptions.bottom; + int left = app.frameOptions.left; + int top = app.frameOptions.top; + int right = app.frameOptions.right; + int bottom = app.frameOptions.bottom; int screen_width = QGuiApplication::primaryScreen()->availableGeometry().width(); int screen_height = QGuiApplication::primaryScreen()->availableGeometry().height(); @@ -455,7 +457,7 @@ void MainFrame::readSettings() bReset = true; } - if (app._frameOptions.isMax) + if (app.frameOptions.isMax) { showMaximized(); // show max by system api } @@ -474,7 +476,7 @@ void MainFrame::readSettings() // restore dockwidgets _mainWindow->restore_dock(); - _titleBar->setRestoreButton(app._frameOptions.isMax); + _titleBar->setRestoreButton(app.frameOptions.isMax); } #ifdef _WIN32 @@ -506,9 +508,9 @@ void MainFrame::setTaskbarProgress(int progress) void MainFrame::show_doc() { AppConfig &app = AppConfig::Instance(); - int lan = app._frameOptions.language; + int lan = app.frameOptions.language; - if (app._userHistory.showDocuments) { + if (app.userHistory.showDocuments) { dialogs::DSDialog dlg(this, true); dlg.setTitle(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_DOCUMENT), "Document")); @@ -542,7 +544,7 @@ void MainFrame::show_doc() _mainWindow->openDoc(); } if (msg.clickedButton() == noMoreButton){ - app._userHistory.showDocuments = false; + app.userHistory.showDocuments = false; app.SaveHistory(); } } diff --git a/DSView/pv/mainwindow.cpp b/DSView/pv/mainwindow.cpp index 6270aea4..267df038 100644 --- a/DSView/pv/mainwindow.cpp +++ b/DSView/pv/mainwindow.cpp @@ -112,6 +112,7 @@ namespace pv assert(title_bar); _title_bar = title_bar; + AppControl::Instance()->add_font_form(title_bar); _session = AppControl::Instance()->GetSession(); _session->set_callback(this); @@ -147,7 +148,7 @@ namespace pv setCentralWidget(_central_widget); // Setup the sampling bar - _sampling_bar = new toolbars::SamplingBar(_session, this); + _sampling_bar = new toolbars::SamplingBar(_session, this); _sampling_bar->setObjectName("sampling_bar"); _trig_bar = new toolbars::TrigBar(_session, this); _trig_bar->setObjectName("trig_bar"); @@ -162,7 +163,7 @@ namespace pv _trigger_dock->setFeatures(QDockWidget::DockWidgetMovable); _trigger_dock->setAllowedAreas(Qt::RightDockWidgetArea); _trigger_dock->setVisible(false); - _trigger_widget = new dock::TriggerDock(_trigger_dock, _session); + _trigger_widget = new dock::TriggerDock(_trigger_dock, _session); _trigger_dock->setWidget(_trigger_widget); _dso_trigger_dock = new QDockWidget(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_TRIGGER_DOCK_TITLE), "Trigger Setting..."), this); @@ -183,6 +184,11 @@ namespace pv addToolBar(_file_bar); addToolBar(_logo_bar); + AppControl::Instance()->add_font_form(_sampling_bar); + AppControl::Instance()->add_font_form(_trig_bar); + AppControl::Instance()->add_font_form(_file_bar); + AppControl::Instance()->add_font_form(_logo_bar); + // Setup the dockWidget _protocol_dock = new QDockWidget(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_PROTOCOL_DOCK_TITLE), "Decode Protocol"), this); _protocol_dock->setObjectName("protocol_dock"); @@ -234,8 +240,8 @@ namespace pv // defaut language AppConfig &app = AppConfig::Instance(); - switchLanguage(app._frameOptions.language); - switchTheme(app._frameOptions.style); + switchLanguage(app.frameOptions.language); + switchTheme(app.frameOptions.style); // UI initial _measure_widget->add_dist_measure(); @@ -244,6 +250,13 @@ namespace pv _sampling_bar->set_view(_view); + // Add the font form + AppControl::Instance()->add_font_form(_protocol_widget); + AppControl::Instance()->add_font_form(_dso_trigger_widget); + AppControl::Instance()->add_font_form(_measure_widget); + AppControl::Instance()->add_font_form(_search_widget); + AppControl::Instance()->add_font_form(_trigger_widget); + // event connect(&_event, SIGNAL(session_error()), this, SLOT(on_session_error())); connect(&_event, SIGNAL(signals_changed()), this, SLOT(on_signals_changed())); @@ -420,7 +433,7 @@ namespace pv save_config_to_file(sessionFile); } - app._frameOptions.windowState = saveState(); + app.frameOptions.windowState = saveState(); app.SaveFrame(); } @@ -440,7 +453,7 @@ namespace pv QString base_path = dir.absolutePath() + "/" + driver_name + mode_name; if (!isNewFormat){ - lang_name = QString::number(app._frameOptions.language); + lang_name = QString::number(app.frameOptions.language); } return base_path + ".ses" + lang_name + ".dsc"; @@ -508,7 +521,7 @@ namespace pv void MainWindow::on_screenShot() { AppConfig &app = AppConfig::Instance(); - QString default_name = app._userHistory.screenShotPath + "/" + APP_NAME + QDateTime::currentDateTime().toString("-yyMMdd-hhmmss"); + QString default_name = app.userHistory.screenShotPath + "/" + APP_NAME + QDateTime::currentDateTime().toString("-yyMMdd-hhmmss"); int x = parentWidget()->pos().x(); int y = parentWidget()->pos().y(); @@ -560,9 +573,9 @@ namespace pv fileName = path::GetDirectoryName(fileName); - if (app._userHistory.screenShotPath != fileName) + if (app.userHistory.screenShotPath != fileName) { - app._userHistory.screenShotPath = fileName; + app.userHistory.screenShotPath = fileName; app.SaveHistory(); } } @@ -667,7 +680,7 @@ namespace pv sessionVar["Version"] = QJsonValue::fromVariant(SESSION_FORMAT_VERSION); sessionVar["Device"] = QJsonValue::fromVariant(_device_agent->driver_name()); sessionVar["DeviceMode"] = QJsonValue::fromVariant(_device_agent->get_work_mode()); - sessionVar["Language"] = QJsonValue::fromVariant(app._frameOptions.language); + sessionVar["Language"] = QJsonValue::fromVariant(app.frameOptions.language); sessionVar["Title"] = QJsonValue::fromVariant(title); if (_device_agent->is_hardware() && _device_agent->get_work_mode() == LOGIC) @@ -1173,7 +1186,7 @@ namespace pv { // default dockwidget size AppConfig &app = AppConfig::Instance(); - QByteArray st = app._frameOptions.windowState; + QByteArray st = app.frameOptions.windowState; if (!st.isEmpty()) { try @@ -1341,9 +1354,9 @@ namespace pv AppConfig &app = AppConfig::Instance(); - if (app._frameOptions.language != language && language > 0) + if (app.frameOptions.language != language && language > 0) { - app._frameOptions.language = language; + app.frameOptions.language = language; app.SaveFrame(); LangResource::Instance()->Load(language); } @@ -1372,9 +1385,9 @@ namespace pv { AppConfig &app = AppConfig::Instance(); - if (app._frameOptions.style != style) + if (app.frameOptions.style != style) { - app._frameOptions.style = style; + app.frameOptions.style = style; app.SaveFrame(); } @@ -1407,7 +1420,7 @@ namespace pv { QDir dir(GetAppDataDir()); AppConfig &app = AppConfig::Instance(); - int lan = app._frameOptions.language; + int lan = app.frameOptions.language; QDesktopServices::openUrl( QUrl("file:///" + dir.absolutePath() + "/ug" + QString::number(lan) + ".pdf")); } @@ -2040,7 +2053,11 @@ namespace pv case DSV_MSG_APP_OPTIONS_CHANGED: update_title_bar_text(); - break; + break; + + case DSV_MSG_FONT_OPTIONS_CHANGED: + AppControl::Instance()->update_font_forms(); + break; } } @@ -2088,7 +2105,7 @@ namespace pv QString title = QApplication::applicationName() + " v" + QApplication::applicationVersion(); AppConfig &app = AppConfig::Instance(); - if (_title_ext_string != "" && app._appOptions.displayProfileInBar){ + if (_title_ext_string != "" && app.appOptions.displayProfileInBar){ title += " [" + _title_ext_string + "]"; } diff --git a/DSView/pv/prop/binding/decoderoptions.cpp b/DSView/pv/prop/binding/decoderoptions.cpp index 2cf1d27c..892f1f59 100644 --- a/DSView/pv/prop/binding/decoderoptions.cpp +++ b/DSView/pv/prop/binding/decoderoptions.cpp @@ -51,7 +51,7 @@ DecoderOptions::DecoderOptions(pv::data::DecoderStack* decoder_stack, data::deco const srd_decoder *const dec = _decoder->decoder(); assert(dec); - bool bLang = AppConfig::Instance()._appOptions.transDecoderDlg; + bool bLang = AppConfig::Instance().appOptions.transDecoderDlg; if (LangResource::Instance()->is_lang_en()){ bLang = false; diff --git a/DSView/pv/sigsession.cpp b/DSView/pv/sigsession.cpp index 52b2c288..ea9d8112 100644 --- a/DSView/pv/sigsession.cpp +++ b/DSView/pv/sigsession.cpp @@ -2122,7 +2122,7 @@ namespace pv if (is_repeat_mode()) { AppConfig &app = AppConfig::Instance(); - bool swapBackBufferAlways = app._appOptions.swapBackBufferAlways; + bool swapBackBufferAlways = app.appOptions.swapBackBufferAlways; if (!swapBackBufferAlways && !_is_working && _capture_times > 1){ bAddDecoder = false; bSwapBuffer = false; diff --git a/DSView/pv/storesession.cpp b/DSView/pv/storesession.cpp index 17f41e2a..cda11e4b 100644 --- a/DSView/pv/storesession.cpp +++ b/DSView/pv/storesession.cpp @@ -738,7 +738,7 @@ void StoreSession::export_proc(data::Snapshot *snapshot) //set export all data flag AppConfig &app = AppConfig::Instance(); - int origin_flag = app._appOptions.originalData ? 1 : 0; + int origin_flag = app.appOptions.originalData ? 1 : 0; data::LogicSnapshot *logic_snapshot = NULL; data::AnalogSnapshot *analog_snapshot = NULL; @@ -1368,9 +1368,9 @@ QString StoreSession::MakeSaveFile(bool bDlg) QString default_name; AppConfig &app = AppConfig::Instance(); - if (app._userHistory.saveDir != "") + if (app.userHistory.saveDir != "") { - default_name = app._userHistory.saveDir + "/" + _session->get_device()->name() + "-"; + default_name = app.userHistory.saveDir + "/" + _session->get_device()->name() + "-"; } else{ QDir _dir; @@ -1406,9 +1406,9 @@ QString StoreSession::MakeSaveFile(bool bDlg) QString _dir_path = path::GetDirectoryName(default_name); - if (_dir_path != app._userHistory.saveDir) + if (_dir_path != app.userHistory.saveDir) { - app._userHistory.saveDir = _dir_path; + app.userHistory.saveDir = _dir_path; app.SaveHistory(); } } @@ -1428,9 +1428,9 @@ QString StoreSession::MakeExportFile(bool bDlg) QString default_name; AppConfig &app = AppConfig::Instance(); - if (app._userHistory.exportDir != "") + if (app.userHistory.exportDir != "") { - default_name = app._userHistory.exportDir + "/" + _session->get_device()->name() + "-"; + default_name = app.userHistory.exportDir + "/" + _session->get_device()->name() + "-"; } else{ QDir _dir; @@ -1457,9 +1457,9 @@ QString StoreSession::MakeExportFile(bool bDlg) } QString selfilter; - if (app._userHistory.exportFormat != "" + if (app.userHistory.exportFormat != "" && _session->get_device()->get_work_mode() == LOGIC){ - selfilter.append(app._userHistory.exportFormat); + selfilter.append(app.userHistory.exportFormat); } else{ selfilter.append(".csv"); @@ -1481,15 +1481,15 @@ QString StoreSession::MakeExportFile(bool bDlg) bool bChange = false; QString _dir_path = path::GetDirectoryName(default_name); - if (_dir_path != app._userHistory.exportDir) + if (_dir_path != app.userHistory.exportDir) { - app._userHistory.exportDir = _dir_path; + app.userHistory.exportDir = _dir_path; bChange = true; } - if (selfilter != app._userHistory.exportFormat + if (selfilter != app.userHistory.exportFormat && _session->get_device()->get_work_mode() == LOGIC){ - app._userHistory.exportFormat = selfilter; + app.userHistory.exportFormat = selfilter; bChange = true; } diff --git a/DSView/pv/toolbars/filebar.cpp b/DSView/pv/toolbars/filebar.cpp index 548e3fe3..e0b1b2bf 100644 --- a/DSView/pv/toolbars/filebar.cpp +++ b/DSView/pv/toolbars/filebar.cpp @@ -29,10 +29,9 @@ #include "../ui/msgbox.h" #include "../config/appconfig.h" #include "../utility/path.h" - #include "../ui/langresource.h" -#include "../log.h" -#include "../interface/icallbacks.h" +#include "../log.h" +#include "../ui/fun.h" namespace pv { namespace toolbars { @@ -94,6 +93,8 @@ FileBar::FileBar(SigSession *session, QWidget *parent) : connect(_action_save, SIGNAL(triggered()), this, SIGNAL(sig_save())); connect(_action_export, SIGNAL(triggered()), this, SIGNAL(sig_export())); connect(_action_capture, SIGNAL(triggered()), this, SLOT(on_actionCapture_triggered())); + + update_font(); } void FileBar::changeEvent(QEvent *event) @@ -116,8 +117,6 @@ void FileBar::retranslateUi() _action_save->setText(L_S(STR_PAGE_TOOLBAR, S_ID(IDS_TOOLBAR_FILE_SAVE), "&Save...")); _action_export->setText(L_S(STR_PAGE_TOOLBAR, S_ID(IDS_TOOLBAR_FILE_EXPORT), "&Export...")); _action_capture->setText(L_S(STR_PAGE_TOOLBAR, S_ID(IDS_TOOLBAR_FILE_CAPTURE), "&Capture...")); - - auto_resize(); } void FileBar::reStyle() @@ -151,13 +150,13 @@ void FileBar::on_actionOpen_triggered() const QString file_name = QFileDialog::getOpenFileName( this, L_S(STR_PAGE_DLG, S_ID(IDS_DLG_OPEN_FILE), "Open File"), - app._userHistory.openDir, + app.userHistory.openDir, "DSView Data (*.dsl)"); if (!file_name.isEmpty()) { QString fname = path::GetDirectoryName(file_name); - if (fname != app._userHistory.openDir){ - app._userHistory.openDir = fname; + if (fname != app.userHistory.openDir){ + app.userHistory.openDir = fname; app.SaveHistory(); } @@ -172,13 +171,13 @@ void FileBar::on_actionLoad_triggered() const QString file_name = QFileDialog::getOpenFileName( this, L_S(STR_PAGE_DLG, S_ID(IDS_DLG_OPEN_SEESION), "Open Session"), - app._userHistory.sessionDir, + app.userHistory.sessionDir, "DSView Session (*.dsc)"); if (!file_name.isEmpty()) { QString fname = path::GetDirectoryName(file_name); - if (fname != app._userHistory.sessionDir){ - app._userHistory.sessionDir = fname; + if (fname != app.userHistory.sessionDir){ + app.userHistory.sessionDir = fname; app.SaveHistory(); } @@ -220,7 +219,7 @@ void FileBar::on_actionStore_triggered() QString file_name = QFileDialog::getSaveFileName( this, L_S(STR_PAGE_DLG, S_ID(IDS_DLG_SAVE_SEESION), "Save Session"), - app._userHistory.sessionDir, + app.userHistory.sessionDir, "DSView Session (*.dsc)"); if (!file_name.isEmpty()) { @@ -229,8 +228,8 @@ void FileBar::on_actionStore_triggered() file_name.append(".dsc"); QString fname = path::GetDirectoryName(file_name); - if (fname != app._userHistory.sessionDir){ - app._userHistory.sessionDir = fname; + if (fname != app.userHistory.sessionDir){ + app.userHistory.sessionDir = fname; app.SaveHistory(); } @@ -255,15 +254,12 @@ void FileBar::update_view_status() _menu_session->setEnabled(bEnable && is_hardware); } -void FileBar::auto_resize() -{ - std::vector wids; - wids.push_back(&_file_button); - - for(auto bt : wids){ - int w = bt->fontMetrics().boundingRect(bt->text()).width(); - bt->setMinimumWidth(w+5); - } +void FileBar::update_font() +{ + FontOptions &st = AppConfig::Instance().fontOptions; + QFont font = this->font(); + ui::set_font_param(font, st.toolbar); + ui::set_toolbar_font(this, font); } } // namespace toolbars diff --git a/DSView/pv/toolbars/filebar.h b/DSView/pv/toolbars/filebar.h index 31dd44b6..f7185529 100644 --- a/DSView/pv/toolbars/filebar.h +++ b/DSView/pv/toolbars/filebar.h @@ -29,13 +29,14 @@ #include #include "../sigsession.h" +#include "../interface/icallbacks.h" namespace pv { namespace toolbars { //toolbar button,referenced by MainWindow //TODO: load session file, sorte session, load log data file, sorte data, export data -class FileBar : public QToolBar +class FileBar : public QToolBar, public IFontForm { Q_OBJECT @@ -46,13 +47,14 @@ public: QString genDefaultSessionFile(); - void auto_resize(); - private: void changeEvent(QEvent *event); void retranslateUi(); void reStyle(); + //IFontForm + void update_font(); + signals: void sig_load_file(QString); void sig_save(); diff --git a/DSView/pv/toolbars/logobar.cpp b/DSView/pv/toolbars/logobar.cpp index 5efe7da0..215d5881 100644 --- a/DSView/pv/toolbars/logobar.cpp +++ b/DSView/pv/toolbars/logobar.cpp @@ -46,7 +46,7 @@ #include "../log.h" #include "../ui/langresource.h" #include "../ui/msgbox.h" - +#include "../ui/fun.h" namespace pv { namespace toolbars { @@ -123,6 +123,8 @@ LogoBar::LogoBar(SigSession *session, QWidget *parent) : connect(_issue, SIGNAL(triggered()), this, SLOT(on_actionIssue_triggered())); connect(_update, SIGNAL(triggered()), this, SLOT(on_action_update())); connect(_log, SIGNAL(triggered()), this, SLOT(on_action_setting_log())); + + update_font(); } void LogoBar::changeEvent(QEvent *event) @@ -148,7 +150,7 @@ void LogoBar::retranslateUi() _log->setText(L_S(STR_PAGE_TOOLBAR, S_ID(IDS_TOOLBAR_HELP_LOG), "L&og Options")); AppConfig &app = AppConfig::Instance(); - if (app._frameOptions.language == LAN_CN) + if (app.frameOptions.language == LAN_CN) _language->setIcon(QIcon(":/icons/Chinese.svg")); else _language->setIcon(QIcon(":/icons/English.svg")); @@ -216,7 +218,7 @@ void LogoBar::on_actionIssue_triggered() void LogoBar::on_action_update() { - if (AppConfig::Instance()._frameOptions.language == LAN_CN){ + if (AppConfig::Instance().frameOptions.language == LAN_CN){ QDesktopServices::openUrl(QUrl(QLatin1String("https://dreamsourcelab.cn/download/"))); } else{ @@ -250,14 +252,14 @@ void LogoBar::on_action_setting_log() for (int i=0; i<=5; i++){ cbBox->addItem(QString::number(i)); } - cbBox->setCurrentIndex(app._appOptions.logLevel); + cbBox->setCurrentIndex(app.appOptions.logLevel); QCheckBox *ckSave = new QCheckBox(); - ckSave->setChecked(app._appOptions.ableSaveLog); + ckSave->setChecked(app.appOptions.ableSaveLog); lay->addRow(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_SAVE_FILE), "Save To File"), ckSave); QCheckBox *ckRebuild = new QCheckBox(); - ckRebuild->setChecked(app._appOptions.appendLogMode); + ckRebuild->setChecked(app.appOptions.appendLogMode); lay->addRow(L_S(STR_PAGE_DLG, S_ID(IDS_DLG_APPEND_MODE), "Append mode"), ckRebuild); QPushButton *btOpen = new QPushButton(); @@ -292,12 +294,12 @@ void LogoBar::on_action_setting_log() int level = cbBox->currentIndex(); bool appendLogMode = ckRebuild->isChecked(); - if (ableSave != app._appOptions.ableSaveLog - || level != app._appOptions.logLevel - || appendLogMode != app._appOptions.appendLogMode){ - app._appOptions.ableSaveLog = ableSave; - app._appOptions.logLevel = level; - app._appOptions.appendLogMode = appendLogMode; + if (ableSave != app.appOptions.ableSaveLog + || level != app.appOptions.logLevel + || appendLogMode != app.appOptions.appendLogMode){ + app.appOptions.ableSaveLog = ableSave; + app.appOptions.logLevel = level; + app.appOptions.appendLogMode = appendLogMode; app.SaveApp(); dsv_log_level(level); @@ -346,5 +348,13 @@ void LogoBar::on_clear_log_file() } } +void LogoBar::update_font() +{ + FontOptions &st = AppConfig::Instance().fontOptions; + QFont font = this->font(); + ui::set_font_param(font, st.toolbar); + ui::set_toolbar_font(this, font); +} + } // namespace toolbars } // namespace pv diff --git a/DSView/pv/toolbars/logobar.h b/DSView/pv/toolbars/logobar.h index 6f41046e..1f9391f1 100644 --- a/DSView/pv/toolbars/logobar.h +++ b/DSView/pv/toolbars/logobar.h @@ -33,13 +33,12 @@ #include "../sigsession.h" #include "../interface/icallbacks.h" - namespace pv { namespace toolbars { //The tool button for help,is a ui class,referenced by MainWindow //TODO: switch language,submit bug descript, -class LogoBar : public QToolBar +class LogoBar : public QToolBar, public IFontForm { Q_OBJECT @@ -60,6 +59,9 @@ private: void retranslateUi(); void reStyle(); + //IFontForm + void update_font(); + signals: //post event message to open user help document, MainWindow class receive it void sig_open_doc(); diff --git a/DSView/pv/toolbars/samplingbar.cpp b/DSView/pv/toolbars/samplingbar.cpp index a1c99662..b2a8bbc1 100644 --- a/DSView/pv/toolbars/samplingbar.cpp +++ b/DSView/pv/toolbars/samplingbar.cpp @@ -38,6 +38,7 @@ #include "../ui/msgbox.h" #include "../ui/langresource.h" #include "../view/view.h" +#include "../ui/fun.h" #define SINGLE_ACTION_ICON "/once.svg" #define REPEAT_ACTION_ICON "/repeat.svg" @@ -124,9 +125,10 @@ namespace pv _run_stop_button.setToolButtonStyle(Qt::ToolButtonTextUnderIcon); _run_stop_action = addWidget(&_run_stop_button); _instant_button.setToolButtonStyle(Qt::ToolButtonTextUnderIcon); - _instant_action = addWidget(&_instant_button); + _instant_action = addWidget(&_instant_button); update_view_status(); + update_font(); connect(&_device_selector, SIGNAL(currentIndexChanged(int)), this, SLOT(on_device_selected())); connect(&_configure_button, SIGNAL(clicked()), this, SLOT(on_configure())); @@ -209,8 +211,6 @@ namespace pv _action_single->setText(L_S(STR_PAGE_TOOLBAR, S_ID(IDS_TOOLBAR_CAPTURE_MODE_SINGLE), "&Single")); _action_repeat->setText(L_S(STR_PAGE_TOOLBAR, S_ID(IDS_TOOLBAR_CAPTURE_MODE_REPEAT), "&Repetitive")); _action_loop->setText(L_S(STR_PAGE_TOOLBAR, S_ID(IDS_TOOLBAR_CAPTURE_MODE_LOOP), "&Loop")); - - auto_resize(); } void SamplingBar::reStyle() @@ -1251,18 +1251,12 @@ namespace pv on_instant_stop(); } - void SamplingBar::auto_resize() - { - std::vector wids; - wids.push_back(&_configure_button); - wids.push_back(&_mode_button); - wids.push_back(&_run_stop_button); - wids.push_back(&_instant_button); - - for(auto bt : wids){ - int w = bt->fontMetrics().boundingRect(bt->text()).width(); - bt->setMinimumWidth(w+5); - } + void SamplingBar::update_font() + { + FontOptions &st = AppConfig::Instance().fontOptions; + QFont font = this->font(); + ui::set_font_param(font, st.toolbar); + ui::set_toolbar_font(this, font); } } // namespace toolbars diff --git a/DSView/pv/toolbars/samplingbar.h b/DSView/pv/toolbars/samplingbar.h index f4774a68..6ab964f3 100644 --- a/DSView/pv/toolbars/samplingbar.h +++ b/DSView/pv/toolbars/samplingbar.h @@ -33,6 +33,7 @@ #include #include #include "../ui/dscombobox.h" +#include "../interface/icallbacks.h" #include struct st_dev_inst; @@ -58,7 +59,7 @@ namespace pv namespace toolbars { - class SamplingBar : public QToolBar + class SamplingBar : public QToolBar, public IFontForm { Q_OBJECT @@ -100,8 +101,6 @@ namespace pv void commit_settings(); - void auto_resize(); - signals: void sig_store_session_data(); @@ -123,6 +122,9 @@ namespace pv bool action_run_stop(); bool action_instant_stop(); + + //IFontForm + void update_font(); private slots: void on_collect_mode(); diff --git a/DSView/pv/toolbars/titlebar.cpp b/DSView/pv/toolbars/titlebar.cpp index 945bf2e2..71c3bcf5 100644 --- a/DSView/pv/toolbars/titlebar.cpp +++ b/DSView/pv/toolbars/titlebar.cpp @@ -33,8 +33,8 @@ #include #include "../config/appconfig.h" #include "../appcontrol.h" - #include "../dsvdef.h" +#include "../ui/fun.h" namespace pv { namespace toolbars { @@ -89,7 +89,9 @@ TitleBar::TitleBar(bool top, QWidget *parent, bool hasClose) : lay1->setContentsMargins(0,0,0,0); lay1->setSpacing(0); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + + update_font(); } TitleBar::~TitleBar(){ @@ -234,6 +236,13 @@ void TitleBar::mouseDoubleClickEvent(QMouseEvent *event) QWidget::mouseDoubleClickEvent(event); } +void TitleBar::update_font() +{ + FontOptions &st = AppConfig::Instance().fontOptions; + QFont font = this->font(); + ui::set_font_param(font, st.title); + _title->setFont(font); +} } // namespace toolbars } // namespace pv diff --git a/DSView/pv/toolbars/titlebar.h b/DSView/pv/toolbars/titlebar.h index 3d97da2d..49ec7395 100644 --- a/DSView/pv/toolbars/titlebar.h +++ b/DSView/pv/toolbars/titlebar.h @@ -23,6 +23,7 @@ #define DSVIEW_PV_TOOLBARS_TITLEBAR_H #include + #include "../interface/icallbacks.h" class QToolButton; class QHBoxLayout; @@ -31,7 +32,7 @@ class QLabel; namespace pv { namespace toolbars { -class TitleBar : public QWidget +class TitleBar : public QWidget, public IFontForm { Q_OBJECT @@ -42,6 +43,9 @@ public: void setTitle(QString title); QString title(); + //IFontForm + void update_font(); + private: void changeEvent(QEvent *event); void reStyle(); diff --git a/DSView/pv/toolbars/trigbar.cpp b/DSView/pv/toolbars/trigbar.cpp index 762043fc..2eb8a736 100644 --- a/DSView/pv/toolbars/trigbar.cpp +++ b/DSView/pv/toolbars/trigbar.cpp @@ -33,6 +33,7 @@ #include "../dialogs/applicationpardlg.h" #include "../ui/langresource.h" #include "../config/appconfig.h" +#include "../ui/fun.h" namespace pv { namespace toolbars { @@ -121,6 +122,8 @@ TrigBar::TrigBar(SigSession *session, QWidget *parent) : connect(_dark_style, SIGNAL(triggered()), this, SLOT(on_actionDark_triggered())); connect(_light_style, SIGNAL(triggered()), this, SLOT(on_actionLight_triggered())); connect(_action_dispalyOptions, SIGNAL(triggered()), this, SLOT(on_display_setting())); + + update_font(); } //语言变化 @@ -153,8 +156,6 @@ void TrigBar::retranslateUi() _action_math->setText(L_S(STR_PAGE_TOOLBAR, S_ID(IDS_TOOLBAR_FUNCTION_MATH), "Math")); _action_dispalyOptions->setText(L_S(STR_PAGE_TOOLBAR, S_ID(IDS_TOOLBAR_DISPLAY_OPTIONS), "Options")); - - auto_resize(); } void TrigBar::reStyle() @@ -177,7 +178,7 @@ void TrigBar::reStyle() _action_dispalyOptions->setIcon(QIcon(iconPath+"/gear.svg")); AppConfig &app = AppConfig::Instance(); - QString icon_fname = iconPath +"/"+ app._frameOptions.style +".svg"; + QString icon_fname = iconPath +"/"+ app.frameOptions.style +".svg"; _themes->setIcon(QIcon(icon_fname)); } @@ -326,11 +327,11 @@ void TrigBar::on_actionLissajous_triggered() int mode = _session->get_device()->get_work_mode(); if (mode == LOGIC) - return &app._frameOptions._logicDock; + return &app.frameOptions._logicDock; else if (mode == DSO) - return &app._frameOptions._dsoDock; + return &app.frameOptions._dsoDock; else - return &app._frameOptions._analogDock; + return &app.frameOptions._analogDock; } void TrigBar::update_view_status() @@ -354,36 +355,29 @@ void TrigBar::on_actionLissajous_triggered() } } - void TrigBar::auto_resize() - { - std::vector wids; - wids.push_back(&_trig_button); - wids.push_back(&_protocol_button); - wids.push_back(&_measure_button); - wids.push_back(&_search_button); - wids.push_back(&_setting_button); - - for(auto bt : wids){ - int w = bt->fontMetrics().boundingRect(bt->text()).width(); - bt->setMinimumWidth(w+5); - } - } +void TrigBar::update_checked_status() +{ + DockOptions *opt = getDockOptions(); + assert(opt); - void TrigBar::update_checked_status() - { - DockOptions *opt = getDockOptions(); - assert(opt); + _trig_button.setCheckable(true); + _protocol_button.setCheckable(true); + _measure_button.setCheckable(true); + _search_button.setCheckable(true); - _trig_button.setCheckable(true); - _protocol_button.setCheckable(true); - _measure_button.setCheckable(true); - _search_button.setCheckable(true); + _trig_button.setChecked(opt->triggerDock); + _protocol_button.setChecked(opt->decodeDock); + _measure_button.setChecked(opt->measureDock); + _search_button.setChecked(opt->searchDock); +} - _trig_button.setChecked(opt->triggerDock); - _protocol_button.setChecked(opt->decodeDock); - _measure_button.setChecked(opt->measureDock); - _search_button.setChecked(opt->searchDock); - } +void TrigBar::update_font() +{ + FontOptions &st = AppConfig::Instance().fontOptions; + QFont font = this->font(); + ui::set_font_param(font, st.toolbar); + ui::set_toolbar_font(this, font); +} } // namespace toolbars } // namespace pv diff --git a/DSView/pv/toolbars/trigbar.h b/DSView/pv/toolbars/trigbar.h index eb9baff3..0faa72f3 100644 --- a/DSView/pv/toolbars/trigbar.h +++ b/DSView/pv/toolbars/trigbar.h @@ -27,6 +27,7 @@ #include #include #include +#include "../interface/icallbacks.h" class DockOptions; @@ -38,7 +39,7 @@ namespace toolbars { //boolbar, referenced by MainWindow //TODO:show the property panel about protocol\trigger -class TrigBar : public QToolBar +class TrigBar : public QToolBar, public IFontForm { Q_OBJECT @@ -46,7 +47,6 @@ public: explicit TrigBar(SigSession *session, QWidget *parent = 0); void reload(); void update_view_status(); - void auto_resize(); private: void changeEvent(QEvent *event); @@ -55,6 +55,9 @@ private: DockOptions* getDockOptions(); void update_checked_status(); + //IFontForm + void update_font(); + signals: void sig_setTheme(QString style); void sig_protocol(bool visible); //post decode button click event,to show or hide protocol property panel diff --git a/DSView/pv/ui/dscombobox.cpp b/DSView/pv/ui/dscombobox.cpp index c24c7876..33d7f2eb 100644 --- a/DSView/pv/ui/dscombobox.cpp +++ b/DSView/pv/ui/dscombobox.cpp @@ -74,7 +74,7 @@ DsComboBox::DsComboBox(QWidget *parent) : QComboBox(parent) popup->setMaximumHeight(750); } - if (AppConfig::Instance()._frameOptions.style == THEME_STYLE_DARK){ + if (AppConfig::Instance().frameOptions.style == THEME_STYLE_DARK){ popup->setStyleSheet("background-color:#262626;"); } else{ diff --git a/DSView/pv/ui/fun.cpp b/DSView/pv/ui/fun.cpp new file mode 100644 index 00000000..a9957508 --- /dev/null +++ b/DSView/pv/ui/fun.cpp @@ -0,0 +1,142 @@ +/* + * This file is part of the DSView project. + * DSView is based on PulseView. + * + * Copyright (C) 2023 DreamSourceLab + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "fun.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../config/appconfig.h" + +namespace ui +{ + + void set_font_param(QFont &font, struct FontParam ¶m) + { + font.setPointSizeF(param.size >= 9.0f ? param.size : 9.0f); + + if (param.name != ""){ + font.setFamily(param.name); + } + } + + void set_toolbar_font(QToolBar *bar, QFont &font) + { + assert(bar); + + auto buttons = bar->findChildren(); + for(auto o : buttons) + { + o->setFont(font); + } + + auto buttons2 = bar->findChildren(); + for(auto o : buttons2) + { + o->setFont(font); + } + + auto comboxs = bar->findChildren(); + for(auto o : comboxs) + { + o->setFont(font); + } + + auto labels = bar->findChildren(); + for(auto o : labels) + { + o->setFont(font); + } + + auto actions = bar->findChildren(); + for(auto o : actions) + { + o->setFont(font); + } + } + + void set_form_font(QWidget *wid, QFont &font) + { + assert(wid); + + auto buttons2 = wid->findChildren(); + for(auto o : buttons2) + { + o->setFont(font); + } + + auto comboxs = wid->findChildren(); + for(auto o : comboxs) + { + o->setFont(font); + } + + auto labels = wid->findChildren(); + for(auto o : labels) + { + o->setFont(font); + } + + auto edits = wid->findChildren(); + for(auto o : edits) + { + o->setFont(font); + } + + auto textEdits = wid->findChildren(); + for(auto o : textEdits) + { + o->setFont(font); + } + + auto radios = wid->findChildren(); + for(auto o : radios) + { + o->setFont(font); + } + + // Magnify the size. + font.setPointSizeF(font.pointSizeF() + 1); + + auto tabs = wid->findChildren(); + for(auto o : tabs) + { + o->setFont(font); + } + + auto groups = wid->findChildren(); + for(auto o : groups) + { + o->setFont(font); + } + } + +} // namespace ui \ No newline at end of file diff --git a/DSView/pv/ui/fun.h b/DSView/pv/ui/fun.h new file mode 100644 index 00000000..0fae3a5c --- /dev/null +++ b/DSView/pv/ui/fun.h @@ -0,0 +1,42 @@ +/* + * This file is part of the DSView project. + * DSView is based on PulseView. + * + * Copyright (C) 2023 DreamSourceLab + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _UI_FUN_H +#define _UI_FUN_H + +#include + +struct FontParam; + +class QToolBar; +class QWidget; + +namespace ui +{ + void set_font_param(QFont &font, struct FontParam ¶m); + + void set_toolbar_font(QToolBar *bar, QFont &font); + + void set_form_font(QWidget *wid, QFont &font); + +} // namespace ui + +#endif \ No newline at end of file diff --git a/DSView/pv/view/decodetrace.cpp b/DSView/pv/view/decodetrace.cpp index 18cf3699..f1c2d10b 100644 --- a/DSView/pv/view/decodetrace.cpp +++ b/DSView/pv/view/decodetrace.cpp @@ -51,8 +51,8 @@ #include "../ui/msgbox.h" #include "../appcontrol.h" #include "../dialogs/decoderoptionsdlg.h" - #include "../ui/langresource.h" +#include "../config/appconfig.h" using namespace boost; using namespace std; @@ -209,11 +209,6 @@ void DecodeTrace::paint_back(QPainter &p, int left, int right, QColor fore, QCol }; p.drawPolygon(points, countof(points)); - // Draw the outline - QFont font=p.font(); - font.setPointSize(DefaultFontSize); - p.setFont(font); - // Draw the text p.setPen(fore); p.drawText(r, f, h); @@ -412,7 +407,7 @@ void DecodeTrace::draw_nodetail(QPainter &p, p.drawLine(info_left, y, info_left+5, y + height/2 + 0.5); p.drawLine(info_right, y, info_right-5, y - height/2 + 0.5); p.drawLine(info_right, y, info_right-5, y + height/2 + 0.5); - + p.setPen(fore); p.drawText(nodetail_rect, Qt::AlignCenter | Qt::AlignVCenter, info); } @@ -435,9 +430,6 @@ void DecodeTrace::draw_instant(const pv::data::decode::Annotation &a, QPainter & p.drawRoundedRect(rect, h / 2, h / 2); p.setPen(text_color); - QFont font=p.font(); - font.setPointSize(DefaultFontSize); - p.setFont(font); p.drawText(rect, Qt::AlignCenter | Qt::AlignVCenter, text); } @@ -498,10 +490,6 @@ void DecodeTrace::draw_range(const pv::data::decode::Annotation &a, QPainter &p, if (best_annotation.isEmpty()) best_annotation = annotations.back(); - // If not ellide the last in the list - QFont font=p.font(); - font.setPointSize(DefaultFontSize); - p.setFont(font); p.drawText(rect, Qt::AlignCenter, p.fontMetrics().elidedText( best_annotation, Qt::ElideRight, rect.width())); } @@ -516,9 +504,7 @@ void DecodeTrace::draw_error(QPainter &p, const QString &message, const QRectF bounding_rect = p.boundingRect(text_rect, Qt::AlignCenter, message); p.setPen(Qt::red); - QFont font=p.font(); - font.setPointSize(DefaultFontSize); - p.setFont(font); + if (bounding_rect.width() < text_rect.width()) p.drawText(text_rect, Qt::AlignCenter, L_S(STR_PAGE_DLG, S_ID(IDS_DLG_DECODETRACE_ERROR1), "Error:")+message); else diff --git a/DSView/pv/view/decodetrace.h b/DSView/pv/view/decodetrace.h index 72d5df51..746656c6 100644 --- a/DSView/pv/view/decodetrace.h +++ b/DSView/pv/view/decodetrace.h @@ -79,7 +79,6 @@ private: static const QColor Colours[16]; static const QColor OutlineColours[16]; - static const int DefaultFontSize = 10; static const int ControlRectWidth = 5; static const int MaxAnnType = 100; diff --git a/DSView/pv/view/devmode.cpp b/DSView/pv/view/devmode.cpp index 396766c3..0e96248d 100644 --- a/DSView/pv/view/devmode.cpp +++ b/DSView/pv/view/devmode.cpp @@ -124,7 +124,7 @@ void DevMode::set_device() _close_button->setDisabled(true); AppConfig &app = AppConfig::Instance(); - int lan = app._frameOptions.language; + int lan = app.frameOptions.language; QString iconPath = GetIconPath() + "/"; @@ -201,7 +201,7 @@ void DevMode::on_mode_change() QString iconPath = GetIconPath(); AppConfig &app = AppConfig::Instance(); - int lan = app._frameOptions.language; + int lan = app.frameOptions.language; for(auto i = _mode_list.begin();i != _mode_list.end(); i++) { diff --git a/DSView/pv/view/header.cpp b/DSView/pv/view/header.cpp index 08694f21..39a34589 100644 --- a/DSView/pv/view/header.cpp +++ b/DSView/pv/view/header.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include "view.h" #include "trace.h" @@ -43,7 +44,9 @@ #include "../sigsession.h" #include "../dsvdef.h" #include "../ui/langresource.h" - +#include "../appcontrol.h" +#include "../config/appconfig.h" +#include "../ui/fun.h" using namespace std; @@ -124,6 +127,11 @@ void Header::paintEvent(QPaintEvent*) QColor fore(QWidget::palette().color(QWidget::foregroundRole())); fore.setAlpha(View::ForeAlpha); + FontOptions &st = AppConfig::Instance().fontOptions; + QFont font(painter.font()); + ui::set_font_param(font, st.channelLabel); + painter.setFont(font); + for(auto t : traces) { t->paint_label(painter, w, dragging ? QPoint(-1, -1) : _mouse_point, fore); diff --git a/DSView/pv/view/ruler.cpp b/DSView/pv/view/ruler.cpp index 0b6ee502..d4f4fdcb 100644 --- a/DSView/pv/view/ruler.cpp +++ b/DSView/pv/view/ruler.cpp @@ -38,6 +38,8 @@ #include #include #include "../appcontrol.h" +#include "../config/appconfig.h" +#include "../ui/fun.h" using namespace std; @@ -194,6 +196,11 @@ void Ruler::paintEvent(QPaintEvent*) QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &o, &p, this); + QFont font = p.font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.ruler); + p.setFont(font); + SigSession *session = AppControl::Instance()->GetSession(); // Draw tick mark diff --git a/DSView/pv/view/view.cpp b/DSView/pv/view/view.cpp index 2ff2bec2..1a1267bf 100644 --- a/DSView/pv/view/view.cpp +++ b/DSView/pv/view/view.cpp @@ -496,7 +496,7 @@ void View::receive_trigger(quint64 trig_pos) _show_trig_cursor = true; AppConfig &app = AppConfig::Instance(); - if (app._appOptions.trigPosDisplayInMid){ + if (app.appOptions.trigPosDisplayInMid){ set_scale_offset(_scale, (time / _scale) - (get_view_width() / 2)); } } diff --git a/DSView/pv/view/viewport.cpp b/DSView/pv/view/viewport.cpp index 81d6c405..9e9fb5e4 100644 --- a/DSView/pv/view/viewport.cpp +++ b/DSView/pv/view/viewport.cpp @@ -42,9 +42,9 @@ #include "../config/appconfig.h" #include "../dsvdef.h" #include "../appcontrol.h" -#include "../log.h" - +#include "../log.h" #include "../ui/langresource.h" +#include "../ui/fun.h" using namespace std; @@ -155,6 +155,11 @@ void Viewport::doPaint() QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &o, &p, this); + QFont font = p.font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.channelBody); + p.setFont(font); + _view.session().check_update(); QColor fore(QWidget::palette().color(QWidget::foregroundRole())); QColor back(QWidget::palette().color(QWidget::backgroundRole())); @@ -550,11 +555,14 @@ void Viewport::paintProgress(QPainter &p, QColor fore, QColor back) bool triggered; if (_view.session().get_capture_status(triggered, captured_progress)){ - p.setPen(View::Blue); - QFont font=p.font(); - font.setPointSize(10); + p.setPen(View::Blue); + + QFont font = p.font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.channelBody); font.setBold(true); p.setFont(font); + QRect status_rect = QRect(cenPos.x() - radius, cenPos.y() + radius * 0.4, radius * 2, radius * 0.5); if (triggered) { @@ -584,6 +592,7 @@ void Viewport::paintProgress(QPainter &p, QColor fore, QColor back) font.setPointSize(50); font.setBold(true); p.setFont(font); + p.drawText(_view.get_view_rect(), Qt::AlignCenter | Qt::AlignVCenter, QString::number(progress100)+"%"); prgRate(progress100); } @@ -874,7 +883,7 @@ void Viewport::mouseReleaseEvent(QMouseEvent *event) { assert(event); - bool quickScroll = AppConfig::Instance()._appOptions.quickScroll; + bool quickScroll = AppConfig::Instance().appOptions.quickScroll; bool isMaxWindow = AppControl::Instance()->TopWindowIsMaximized(); if (_type != TIME_VIEW){ diff --git a/DSView/pv/view/viewstatus.cpp b/DSView/pv/view/viewstatus.cpp index f429af72..d2ebb89d 100644 --- a/DSView/pv/view/viewstatus.cpp +++ b/DSView/pv/view/viewstatus.cpp @@ -37,6 +37,9 @@ #include "../ui/langresource.h" #include "../log.h" +#include "../config/appconfig.h" +#include "../appcontrol.h" +#include "../ui/fun.h" using namespace std; @@ -66,6 +69,11 @@ void ViewStatus::paintEvent(QPaintEvent *) style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); QColor fore(QWidget::palette().color(QWidget::foregroundRole())); + QFont font = p.font(); + FontOptions &st = AppConfig::Instance().fontOptions; + ui::set_font_param(font, st.channelBody); + p.setFont(font); + int mode = _session->get_device()->get_work_mode(); if (mode == LOGIC) { diff --git a/DSView/pv/widgets/border.cpp b/DSView/pv/widgets/border.cpp index 25d55439..ec1b19d6 100644 --- a/DSView/pv/widgets/border.cpp +++ b/DSView/pv/widgets/border.cpp @@ -57,7 +57,7 @@ void Border::paintEvent(QPaintEvent *) painter.setRenderHint(QPainter::Antialiasing, true); QLinearGradient linearGrad(QPointF(width(), height()), QPointF(0, 0)); AppConfig &app = AppConfig::Instance(); - QString style = app._frameOptions.style; + QString style = app.frameOptions.style; if (style == THEME_STYLE_DARK) { linearGrad.setColorAt(0, dark_border0); diff --git a/DSView/themes/dark.qss b/DSView/themes/dark.qss index ca6f62e3..185409c3 100644 --- a/DSView/themes/dark.qss +++ b/DSView/themes/dark.qss @@ -65,7 +65,6 @@ QWidget:item:selected QPushButton#flat{ text-align:left; border:none; - /*font-size:14px;*/ } QPushButton#flat:hover @@ -1316,7 +1315,7 @@ QToolButton::menu-indicator } QToolButton{ - /*font-size:14px;*/ + } QToolButton#ModeButton::menu-indicator diff --git a/DSView/themes/light.qss b/DSView/themes/light.qss index 1b89457c..94373436 100644 --- a/DSView/themes/light.qss +++ b/DSView/themes/light.qss @@ -62,7 +62,6 @@ QWidget:item:selected QPushButton#flat{ text-align:left; border:none; - /*font-size:14px;*/ } QPushButton#flat:hover @@ -1356,7 +1355,7 @@ QToolButton::menu-indicator } QToolButton{ - /*font-size:14px;*/ + } QToolButton#ModeButton::menu-indicator diff --git a/lang/cn/dlg.json b/lang/cn/dlg.json index feb607f4..317b9e78 100644 --- a/lang/cn/dlg.json +++ b/lang/cn/dlg.json @@ -702,5 +702,37 @@ { "id": "IDS_DLG_USE_ABORT_DATA_REPEAT", "text": "重复模式下允许使用中途停止的数据" + }, + { + "id": "IDS_DLG_FONT_GROUP", + "text": "字体设置" + }, + { + "id": "IDS_DLG_TOOLBAR_FONT", + "text": "工具栏" + }, + { + "id": "IDS_DLG_CHANNEL_NAME_FONT", + "text": "通道名称" + }, + { + "id": "IDS_DLG_CHANNEL_BODY_FONT", + "text": "通道内容" + }, + { + "id": "IDS_DLG_RULER_FONT", + "text": "刻度" + }, + { + "id": "IDS_DLG_TITLE_FONT", + "text": "标题" + }, + { + "id": "IDS_DLG_OTHER_FONT", + "text": "其它" + }, + { + "id": "IDS_DLG_DEFAULT_FONT", + "text": "默认" } ] \ No newline at end of file diff --git a/lang/en/dlg.json b/lang/en/dlg.json index db247012..0912dd79 100644 --- a/lang/en/dlg.json +++ b/lang/en/dlg.json @@ -702,5 +702,37 @@ { "id": "IDS_DLG_USE_ABORT_DATA_REPEAT", "text": "Allow use of the midway stopped data on repeat mode" + }, + { + "id": "IDS_DLG_FONT_GROUP", + "text": "Font Setting" + }, + { + "id": "IDS_DLG_TOOLBAR_FONT", + "text": "Toolbar" + }, + { + "id": "IDS_DLG_CHANNEL_NAME_FONT", + "text": "Channel Name" + }, + { + "id": "IDS_DLG_CHANNEL_BODY_FONT", + "text": "Channel Body" + }, + { + "id": "IDS_DLG_RULER_FONT", + "text": "Ruler" + }, + { + "id": "IDS_DLG_TITLE_FONT", + "text": "Title" + }, + { + "id": "IDS_DLG_OTHER_FONT", + "text": "Other" + }, + { + "id": "IDS_DLG_DEFAULT_FONT", + "text": "Default" } ] \ No newline at end of file