diff options
author | Gerald Combs <gerald@wireshark.org> | 2019-06-21 15:06:33 -0700 |
---|---|---|
committer | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2019-06-23 06:13:32 +0000 |
commit | a9ed94356d1b0cb149351e063014d3bdb94c0cd7 (patch) | |
tree | db5b2504d3bb451c7759badbce994a3d71854f3f /ui | |
parent | 70d61952dfbf2b1e96bbac824e3fb2538061f12d (diff) |
Qt: Split the filter dropdown arrow icon into dark and light versions.
The capture and display filter widgets set their dropdown arrow icons
using CSS, which means we can't use a template icon without a
significant amount of hackery. This is the only instance where we set an
icon using CSS, so split it into dark and light versions and use them as
appropriate.
Ping-Bug: 15511
Change-Id: I699ddc327d8eb109129e60bcb5036b14e6e34414
Reviewed-on: https://code.wireshark.org/review/33696
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/qt/widgets/capture_filter_combo.cpp | 79 | ||||
-rw-r--r-- | ui/qt/widgets/capture_filter_combo.h | 4 | ||||
-rw-r--r-- | ui/qt/widgets/display_filter_combo.cpp | 72 | ||||
-rw-r--r-- | ui/qt/widgets/display_filter_combo.h | 5 |
4 files changed, 98 insertions, 62 deletions
diff --git a/ui/qt/widgets/capture_filter_combo.cpp b/ui/qt/widgets/capture_filter_combo.cpp index e869d6f924..7525d2130c 100644 --- a/ui/qt/widgets/capture_filter_combo.cpp +++ b/ui/qt/widgets/capture_filter_combo.cpp @@ -16,6 +16,7 @@ #include <epan/prefs.h> #include <ui/qt/widgets/capture_filter_combo.h> +#include <ui/qt/utils/color_utils.h> #include "wireshark_application.h" CaptureFilterCombo::CaptureFilterCombo(QWidget *parent, bool plain) : @@ -34,35 +35,7 @@ CaptureFilterCombo::CaptureFilterCombo(QWidget *parent, bool plain) : setSizePolicy(QSizePolicy::MinimumExpanding, sizePolicy().verticalPolicy()); setInsertPolicy(QComboBox::NoInsert); setAccessibleName(tr("Capture filter selector")); - setStyleSheet( - "QComboBox {" -#ifdef Q_OS_MAC - " border: 1px solid gray;" -#else - " border: 1px solid palette(shadow);" -#endif - " border-radius: 3px;" - " padding: 0px 0px 0px 0px;" - " margin-left: 0px;" - " min-width: 20em;" - " }" - - "QComboBox::drop-down {" - " subcontrol-origin: padding;" - " subcontrol-position: top right;" - " width: 16px;" - " border-left-width: 0px;" - " }" - - "QComboBox::down-arrow {" - " image: url(:/stock_icons/14x14/x-filter-dropdown.png);" - " }" - - "QComboBox::down-arrow:on { /* shift the arrow when popup is open */" - " top: 1px;" - " left: 1px;" - "}" - ); + updateStyleSheet(); connect(this, &CaptureFilterCombo::interfacesChanged, cf_edit_, static_cast<void (CaptureFilterEdit::*)()>(&CaptureFilterEdit::checkFilter)); @@ -93,6 +66,54 @@ void CaptureFilterCombo::writeRecent(FILE *rf) } } +bool CaptureFilterCombo::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::PaletteChange: + updateStyleSheet(); + break; + default: + break; + } + return QComboBox::event(event); +} + +void CaptureFilterCombo::updateStyleSheet() +{ + const char *display_mode = ColorUtils::themeIsDark() ? "dark" : "light"; + + QString ss = QString( + "QComboBox {" +#ifdef Q_OS_MAC + " border: 1px solid gray;" +#else + " border: 1px solid palette(shadow);" +#endif + " border-radius: 3px;" + " padding: 0px 0px 0px 0px;" + " margin-left: 0px;" + " min-width: 20em;" + " }" + + "QComboBox::drop-down {" + " subcontrol-origin: padding;" + " subcontrol-position: top right;" + " width: 16px;" + " border-left-width: 0px;" + " }" + + "QComboBox::down-arrow {" + " image: url(:/stock_icons/14x14/x-filter-dropdown.%1.png);" + " }" + + "QComboBox::down-arrow:on { /* shift the arrow when popup is open */" + " top: 1px;" + " left: 1px;" + "}" + ).arg(display_mode); + setStyleSheet(ss); +} + void CaptureFilterCombo::saveAndRebuildFilterList() { if (!currentText().isEmpty()) { diff --git a/ui/qt/widgets/capture_filter_combo.h b/ui/qt/widgets/capture_filter_combo.h index ba6baf62e4..a0c4edb66d 100644 --- a/ui/qt/widgets/capture_filter_combo.h +++ b/ui/qt/widgets/capture_filter_combo.h @@ -31,9 +31,11 @@ signals: void captureFilterSyntaxChanged(bool valid); void startCapture(); -public slots: +protected: + virtual bool event(QEvent *event); private: + void updateStyleSheet(); CaptureFilterEdit *cf_edit_; private slots: diff --git a/ui/qt/widgets/display_filter_combo.cpp b/ui/qt/widgets/display_filter_combo.cpp index 6f2cf71f20..ba2298d14f 100644 --- a/ui/qt/widgets/display_filter_combo.cpp +++ b/ui/qt/widgets/display_filter_combo.cpp @@ -20,6 +20,7 @@ #include <ui/qt/widgets/display_filter_edit.h> #include <ui/qt/widgets/display_filter_combo.h> +#include <ui/qt/utils/color_utils.h> #include "wireshark_application.h" // If we ever add support for multiple windows this will need to be replaced. @@ -37,36 +38,8 @@ DisplayFilterCombo::DisplayFilterCombo(QWidget *parent) : // Default is Preferred. setSizePolicy(QSizePolicy::MinimumExpanding, sizePolicy().verticalPolicy()); setAccessibleName(tr("Display filter selector")); - cur_display_filter_combo = this; - setStyleSheet( - "QComboBox {" -#ifdef Q_OS_MAC - " border: 1px solid gray;" -#else - " border: 1px solid palette(shadow);" -#endif - " border-radius: 3px;" - " padding: 0px 0px 0px 0px;" - " margin-left: 0px;" - " min-width: 20em;" - " }" - - "QComboBox::drop-down {" - " subcontrol-origin: padding;" - " subcontrol-position: top right;" - " width: 14px;" - " border-left-width: 0px;" - " }" - - "QComboBox::down-arrow {" - " image: url(:/stock_icons/14x14/x-filter-dropdown.png);" - " }" - - "QComboBox::down-arrow:on { /* shift the arrow when popup is open */" - " top: 1px;" - " left: 1px;" - "}" - ); + cur_display_filter_combo = this; + updateStyleSheet(); setToolTip(tr("Select from previously used filters.")); connect(wsApp, &WiresharkApplication::preferencesChanged, this, &DisplayFilterCombo::updateMaxCount); @@ -105,12 +78,51 @@ bool DisplayFilterCombo::event(QEvent *event) } break; } + case QEvent::PaletteChange: + updateStyleSheet(); + break; default: break; } return QComboBox::event(event); } +void DisplayFilterCombo::updateStyleSheet() +{ + const char *display_mode = ColorUtils::themeIsDark() ? "dark" : "light"; + + QString ss = QString( + "QComboBox {" +#ifdef Q_OS_MAC + " border: 1px solid gray;" +#else + " border: 1px solid palette(shadow);" +#endif + " border-radius: 3px;" + " padding: 0px 0px 0px 0px;" + " margin-left: 0px;" + " min-width: 20em;" + " }" + + "QComboBox::drop-down {" + " subcontrol-origin: padding;" + " subcontrol-position: top right;" + " width: 14px;" + " border-left-width: 0px;" + " }" + + "QComboBox::down-arrow {" + " image: url(:/stock_icons/14x14/x-filter-dropdown.%1.png);" + " }" + + "QComboBox::down-arrow:on { /* shift the arrow when popup is open */" + " top: 1px;" + " left: 1px;" + "}" + ).arg(display_mode); + setStyleSheet(ss); +} + bool DisplayFilterCombo::checkDisplayFilter() { DisplayFilterEdit *df_edit = qobject_cast<DisplayFilterEdit *>(lineEdit()); diff --git a/ui/qt/widgets/display_filter_combo.h b/ui/qt/widgets/display_filter_combo.h index 891e7544c1..8ff17174d9 100644 --- a/ui/qt/widgets/display_filter_combo.h +++ b/ui/qt/widgets/display_filter_combo.h @@ -21,11 +21,12 @@ public: bool addRecentCapture(const char *filter); void writeRecent(FILE *rf); -signals: - protected: virtual bool event(QEvent *event); +private: + void updateStyleSheet(); + public slots: bool checkDisplayFilter(); void applyDisplayFilter(); |