aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2019-06-21 15:06:33 -0700
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2019-06-23 06:13:32 +0000
commita9ed94356d1b0cb149351e063014d3bdb94c0cd7 (patch)
treedb5b2504d3bb451c7759badbce994a3d71854f3f /ui/qt
parent70d61952dfbf2b1e96bbac824e3fb2538061f12d (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/qt')
-rw-r--r--ui/qt/widgets/capture_filter_combo.cpp79
-rw-r--r--ui/qt/widgets/capture_filter_combo.h4
-rw-r--r--ui/qt/widgets/display_filter_combo.cpp72
-rw-r--r--ui/qt/widgets/display_filter_combo.h5
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();