diff options
-rw-r--r-- | image/stock_icons.qrc | 4 | ||||
-rw-r--r-- | image/stock_icons/14x14/x-filter-deprecated.png | bin | 0 -> 316 bytes | |||
-rw-r--r-- | image/stock_icons/14x14/x-filter-deprecated.svg | 99 | ||||
-rw-r--r-- | image/stock_icons/14x14/x-filter-deprecated@2x.png | bin | 0 -> 402 bytes | |||
-rw-r--r-- | image/stock_icons/14x14/x-filter-invalid.png | bin | 0 -> 211 bytes | |||
-rw-r--r-- | image/stock_icons/14x14/x-filter-invalid.svg | 89 | ||||
-rw-r--r-- | image/stock_icons/14x14/x-filter-invalid@2x.png | bin | 0 -> 445 bytes | |||
-rwxr-xr-x | image/stock_icons/svg-to-png.sh | 4 | ||||
-rw-r--r-- | ui/qt/main_window.cpp | 2 | ||||
-rw-r--r-- | ui/qt/widgets/capture_filter_edit.cpp | 2 | ||||
-rw-r--r-- | ui/qt/widgets/display_filter_edit.cpp | 11 | ||||
-rw-r--r-- | ui/qt/widgets/display_filter_edit.h | 1 | ||||
-rw-r--r-- | ui/qt/widgets/syntax_line_edit.cpp | 51 | ||||
-rw-r--r-- | ui/qt/widgets/syntax_line_edit.h | 1 |
14 files changed, 253 insertions, 11 deletions
diff --git a/image/stock_icons.qrc b/image/stock_icons.qrc index 555ffcc39f..577a03b024 100644 --- a/image/stock_icons.qrc +++ b/image/stock_icons.qrc @@ -45,8 +45,12 @@ <file>stock_icons/14x14/x-filter-clear.active@2x.png</file> <file>stock_icons/14x14/x-filter-clear.selected.png</file> <file>stock_icons/14x14/x-filter-clear.selected@2x.png</file> + <file>stock_icons/14x14/x-filter-deprecated.png</file> + <file>stock_icons/14x14/x-filter-deprecated@2x.png</file> <file>stock_icons/14x14/x-filter-dropdown.png</file> <file>stock_icons/14x14/x-filter-dropdown@2x.png</file> + <file>stock_icons/14x14/x-filter-invalid.png</file> + <file>stock_icons/14x14/x-filter-invalid@2x.png</file> <file>stock_icons/14x14/x-filter-matching-bookmark.png</file> <file>stock_icons/14x14/x-filter-matching-bookmark@2x.png</file> <file>stock_icons/14x14/x-filter-matching-bookmark.active.png</file> diff --git a/image/stock_icons/14x14/x-filter-deprecated.png b/image/stock_icons/14x14/x-filter-deprecated.png Binary files differnew file mode 100644 index 0000000000..e2da3f0227 --- /dev/null +++ b/image/stock_icons/14x14/x-filter-deprecated.png diff --git a/image/stock_icons/14x14/x-filter-deprecated.svg b/image/stock_icons/14x14/x-filter-deprecated.svg new file mode 100644 index 0000000000..65b4258a0a --- /dev/null +++ b/image/stock_icons/14x14/x-filter-deprecated.svg @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="28" + height="28" + id="svg2" + version="1.1" + inkscape:version="0.92.2 5c3e80d, 2017-08-06" + sodipodi:docname="x-filter-deprecated.svg" + inkscape:export-filename="x-filter-deprecated.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="17.817039" + inkscape:cx="16.589324" + inkscape:cy="13.703087" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:window-width="1255" + inkscape:window-height="815" + inkscape:window-x="150" + inkscape:window-y="885" + inkscape:window-maximized="0"> + <inkscape:grid + type="xygrid" + id="grid9515" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + <cc:license + rdf:resource="" /> + <dc:description>Original font: DejaVu Serif</dc:description> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1024.3622)"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Helvetica;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" + x="-34.648232" + y="28.228661" + id="text2997" + transform="translate(0,952.36218)"><tspan + sodipodi:role="line" + id="tspan2999" + x="-34.648232" + y="28.228661" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:1.25;font-family:'DejaVu Serif';-inkscape-font-specification:'DejaVu Serif'"> </tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:100%;font-family:Helvetica;-inkscape-font-specification:'Helvetica, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="5.3898778" + y="1012.4372" + id="text42351"><tspan + sodipodi:role="line" + id="tspan42349" + x="5.3898778" + y="1024.6665" /></text> + <g + aria-label="⚠︎ " + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:100%;font-family:Helvetica;-inkscape-font-specification:'Helvetica, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.15383887px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="text42355" + transform="matrix(0.86666657,0,0,0.86667772,-6.7144534,177.91184)"> + <path + d="m 24.501295,997.48383 c 0.03333,-1.5 0.333333,-4.33329 0.633333,-5.99995 l 0.233333,-1.36667 c 0.06667,-0.3 0.06667,-0.56667 0.06667,-0.8 0,-0.8 -0.4,-1.06667 -1.533333,-1.06667 -1.066667,0 -1.466667,0.3 -1.466667,1.06667 0,0.2 0.03333,0.56667 0.06667,0.8 l 0.233333,1.36667 c 0.333333,1.7 0.6,4.49995 0.633333,5.99995 z m -0.6,1.1 c -0.8,0 -1.466667,0.7 -1.466667,1.49997 0,0.8667 0.666667,1.5334 1.533333,1.5334 0.833334,0 1.5,-0.7 1.5,-1.5334 0,-0.8333 -0.666666,-1.49997 -1.566666,-1.49997 z m 0.03333,-17.89995 -14.9999993,23.76662 H 38.934629 Z m 0,3.1 11.833334,18.99992 H 12.067961 Z" + style="stroke-width:1.15383887px" + id="path42357" + inkscape:connector-curvature="0" /> + </g> + </g> +</svg> diff --git a/image/stock_icons/14x14/x-filter-deprecated@2x.png b/image/stock_icons/14x14/x-filter-deprecated@2x.png Binary files differnew file mode 100644 index 0000000000..5c206670aa --- /dev/null +++ b/image/stock_icons/14x14/x-filter-deprecated@2x.png diff --git a/image/stock_icons/14x14/x-filter-invalid.png b/image/stock_icons/14x14/x-filter-invalid.png Binary files differnew file mode 100644 index 0000000000..9d28c93fb2 --- /dev/null +++ b/image/stock_icons/14x14/x-filter-invalid.png diff --git a/image/stock_icons/14x14/x-filter-invalid.svg b/image/stock_icons/14x14/x-filter-invalid.svg new file mode 100644 index 0000000000..27c68dfa71 --- /dev/null +++ b/image/stock_icons/14x14/x-filter-invalid.svg @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="28" + height="28" + id="svg2" + version="1.1" + inkscape:version="0.92.2 5c3e80d, 2017-08-06" + sodipodi:docname="x-filter-invalid.svg" + inkscape:export-filename="x-filter-invalid.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="19.25" + inkscape:cx="18.219345" + inkscape:cy="16" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:window-width="1188" + inkscape:window-height="789" + inkscape:window-x="189" + inkscape:window-y="886" + inkscape:window-maximized="0"> + <inkscape:grid + type="xygrid" + id="grid22528" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + <cc:license + rdf:resource="" /> + <dc:description>Original font: DejaVu Serif</dc:description> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1024.3622)"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:Helvetica;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none" + x="-34.648232" + y="28.228661" + id="text2997" + transform="translate(0,952.36218)"><tspan + sodipodi:role="line" + id="tspan2999" + x="-34.648232" + y="28.228661" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:1.25;font-family:'DejaVu Serif';-inkscape-font-specification:'DejaVu Serif'"> </tspan></text> + <circle + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.2, 0.2;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="path22530" + cx="14" + cy="1038.3622" + r="12" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999976;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="m 6,1029.942 c 16.420199,16.4202 16.420199,16.4202 16.420199,16.4202" + id="path22532" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/image/stock_icons/14x14/x-filter-invalid@2x.png b/image/stock_icons/14x14/x-filter-invalid@2x.png Binary files differnew file mode 100644 index 0000000000..8bccd9443b --- /dev/null +++ b/image/stock_icons/14x14/x-filter-invalid@2x.png diff --git a/image/stock_icons/svg-to-png.sh b/image/stock_icons/svg-to-png.sh index 39cbf9d1fb..3fb8ab87e1 100755 --- a/image/stock_icons/svg-to-png.sh +++ b/image/stock_icons/svg-to-png.sh @@ -61,7 +61,9 @@ ICONS=" x-filter-clear x-filter-clear.active x-filter-clear.selected + x-filter-deprecated x-filter-dropdown + x-filter-invalid x-filter-matching-bookmark x-filter-matching-bookmark.active x-filter-matching-bookmark.selected @@ -119,7 +121,7 @@ for SIZE in 14x14 16x16 24x14 24x14 ; do done for QRC_FILE in $QRC_FILES ; do - echo " <file>toolbar/${QRC_FILE}</file>" + echo " <file>stock_icons/${QRC_FILE}</file>" done # diff --git a/ui/qt/main_window.cpp b/ui/qt/main_window.cpp index 17ca335aeb..f8a0a631f9 100644 --- a/ui/qt/main_window.cpp +++ b/ui/qt/main_window.cpp @@ -376,8 +376,6 @@ MainWindow::MainWindow(QWidget *parent) : connect(df_edit, SIGNAL(pushFilterSyntaxStatus(const QString&)), main_ui_->statusBar, SLOT(pushFilterStatus(const QString&))); connect(df_edit, SIGNAL(popFilterSyntaxStatus()), main_ui_->statusBar, SLOT(popFilterStatus())); - connect(df_edit, SIGNAL(pushFilterSyntaxWarning(const QString&)), - main_ui_->statusBar, SLOT(pushTemporaryStatus(const QString&))); connect(df_edit, SIGNAL(filterPackets(QString,bool)), this, SLOT(filterPackets(QString,bool))); connect(df_edit, SIGNAL(showPreferencesDialog(QString)), this, SLOT(showPreferencesDialog(QString))); diff --git a/ui/qt/widgets/capture_filter_edit.cpp b/ui/qt/widgets/capture_filter_edit.cpp index 351587f1b2..a00edbd80d 100644 --- a/ui/qt/widgets/capture_filter_edit.cpp +++ b/ui/qt/widgets/capture_filter_edit.cpp @@ -318,6 +318,7 @@ void CaptureFilterEdit::checkFilter(const QString& filter) { setSyntaxState(Busy); popFilterSyntaxStatus(); + setToolTip(QString()); bool empty = filter.isEmpty(); setConflict(false); @@ -412,6 +413,7 @@ void CaptureFilterEdit::setFilterSyntaxState(QString filter, int state, QString setSyntaxState((SyntaxState)state); if (!err_msg.isEmpty()) { emit pushFilterSyntaxStatus(err_msg); + setToolTip(err_msg); } } diff --git a/ui/qt/widgets/display_filter_edit.cpp b/ui/qt/widgets/display_filter_edit.cpp index e3e9599f16..a76ebfee3f 100644 --- a/ui/qt/widgets/display_filter_edit.cpp +++ b/ui/qt/widgets/display_filter_edit.cpp @@ -233,8 +233,10 @@ void DisplayFilterEdit::resizeEvent(QResizeEvent *) void DisplayFilterEdit::focusOutEvent(QFocusEvent *event) { - if (syntaxState() == Valid) + if (syntaxState() == Valid) { emit popFilterSyntaxStatus(); + setToolTip(QString()); + } SyntaxLineEdit::focusOutEvent(event); } @@ -251,13 +253,15 @@ void DisplayFilterEdit::checkFilter(const QString& filter_text) clear_button_->setVisible(!filter_text.isEmpty()); } - popFilterSyntaxStatus(); + emit popFilterSyntaxStatus(); + setToolTip(QString()); checkDisplayFilter(filter_text); switch (syntaxState()) { case Deprecated: { - emit pushFilterSyntaxWarning(syntaxErrorMessage()); + emit pushFilterSyntaxStatus(syntaxErrorMessage()); + setToolTip(syntaxErrorMessage()); break; } case Invalid: @@ -265,6 +269,7 @@ void DisplayFilterEdit::checkFilter(const QString& filter_text) QString invalidMsg(tr("Invalid filter: ")); invalidMsg.append(syntaxErrorMessage()); emit pushFilterSyntaxStatus(invalidMsg); + setToolTip(invalidMsg); break; } default: diff --git a/ui/qt/widgets/display_filter_edit.h b/ui/qt/widgets/display_filter_edit.h index 72eb8cfeca..9a89fbfe3a 100644 --- a/ui/qt/widgets/display_filter_edit.h +++ b/ui/qt/widgets/display_filter_edit.h @@ -72,7 +72,6 @@ private: signals: void pushFilterSyntaxStatus(const QString&); void popFilterSyntaxStatus(); - void pushFilterSyntaxWarning(const QString&); void filterPackets(QString new_filter, bool force); void showPreferencesDialog(QString pane_name); }; diff --git a/ui/qt/widgets/syntax_line_edit.cpp b/ui/qt/widgets/syntax_line_edit.cpp index ae4e082548..feee60a8fe 100644 --- a/ui/qt/widgets/syntax_line_edit.cpp +++ b/ui/qt/widgets/syntax_line_edit.cpp @@ -16,21 +16,22 @@ #include <epan/dfilter/dfilter.h> #include <epan/column-info.h> +#include <wsutil/utf8_entities.h> + #include <ui/qt/widgets/syntax_line_edit.h> #include <ui/qt/utils/color_utils.h> +#include <ui/qt/utils/stock_icon.h> #include <QAbstractItemView> #include <QCompleter> #include <QKeyEvent> +#include <QPainter> #include <QScrollBar> #include <QStringListModel> +#include <QStyleOptionFrame> #include <limits> -// To do: -// - Add indicator icons for syntax states to make things more clear for -// color blind people? - const int max_completion_items_ = 20; SyntaxLineEdit::SyntaxLineEdit(QWidget *parent) : @@ -350,6 +351,48 @@ void SyntaxLineEdit::focusOutEvent(QFocusEvent *event) QLineEdit::focusOutEvent(event); } +// Add indicator icons for syntax states in order to make things more clear for +// color blind people. +void SyntaxLineEdit::paintEvent(QPaintEvent *event) +{ + QLineEdit::paintEvent(event); + + QString si_name; + + switch (syntax_state_) { + case Invalid: + si_name = "x-filter-invalid"; + break; + case Deprecated: + si_name = "x-filter-deprecated"; + break; + default: + return; + } + + QStyleOptionFrame opt; + initStyleOption(&opt); + QRect cr = style()->subElementRect(QStyle::SE_LineEditContents, &opt, this); + QRect sir = QRect(0, 0, 14, 14); // QIcon::paint scales, which is not what we want. + + if (fontMetrics().width(text()) + cr.height() > cr.width() || cr.height() < sir.height()) { + // No space to draw + return; + } + + QIcon state_icon = StockIcon(si_name); + if (state_icon.isNull()) { + return; + } + + int si_off = (cr.height() - sir.height()) / 2; + sir.moveTop(si_off); + sir.moveRight(cr.right() - si_off); + QPainter painter(this); + painter.setOpacity(0.25); + state_icon.paint(&painter, sir); +} + void SyntaxLineEdit::insertFieldCompletion(const QString &completion_text) { if (!completer_) return; diff --git a/ui/qt/widgets/syntax_line_edit.h b/ui/qt/widgets/syntax_line_edit.h index 9244563c43..820795fd96 100644 --- a/ui/qt/widgets/syntax_line_edit.h +++ b/ui/qt/widgets/syntax_line_edit.h @@ -61,6 +61,7 @@ protected: void completionKeyPressEvent(QKeyEvent *event); void completionFocusInEvent(QFocusEvent *event); virtual void focusOutEvent(QFocusEvent *event); + virtual void paintEvent(QPaintEvent *event); private: SyntaxState syntax_state_; |