aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt
diff options
context:
space:
mode:
authorRoland Knall <rknall@gmail.com>2019-11-05 11:41:18 +0000
committerRoland Knall <rknall@gmail.com>2019-11-05 16:56:33 +0000
commita802000a2e6d078a9875d6fef3f7a1630414da04 (patch)
tree170619b85a6489badc9a3e4c53562d82f3f929bc /ui/qt
parenta218460e2241017423745281d59d81a6485678bf (diff)
Qt: Allow action buttons to be left-aligned
Buttons can be left-aligned in the display filter edit bar, by selecting the corresponding option from the context menu Bug: 14123 Change-Id: I18b48bb0ea43a598b2e309dcad9210463be06414 Reviewed-on: https://code.wireshark.org/review/34980 Reviewed-by: Roland Knall <rknall@gmail.com>
Diffstat (limited to 'ui/qt')
-rw-r--r--ui/qt/widgets/display_filter_edit.cpp207
-rw-r--r--ui/qt/widgets/display_filter_edit.h6
2 files changed, 129 insertions, 84 deletions
diff --git a/ui/qt/widgets/display_filter_edit.cpp b/ui/qt/widgets/display_filter_edit.cpp
index 97eee6e965..95858c1874 100644
--- a/ui/qt/widgets/display_filter_edit.cpp
+++ b/ui/qt/widgets/display_filter_edit.cpp
@@ -13,7 +13,7 @@
#include <epan/dfilter/dfilter.h>
-#include <ui/filter_files.h>
+#include <ui/recent.h>
#include <wsutil/utf8_entities.h>
@@ -66,7 +66,8 @@ DisplayFilterEdit::DisplayFilterEdit(QWidget *parent, DisplayFilterEditType type
actions_(Q_NULLPTR),
bookmark_button_(NULL),
clear_button_(NULL),
- apply_button_(NULL)
+ apply_button_(NULL),
+ leftAlignActions_(false)
{
setAccessibleName(tr("Display filter entry"));
@@ -76,77 +77,108 @@ DisplayFilterEdit::DisplayFilterEdit(QWidget *parent, DisplayFilterEditType type
setDefaultPlaceholderText();
- // DFCombo
- // Bookmark
- // DisplayFilterEdit
- // Clear button
- // Apply (right arrow)
- // Combo drop-down
+ QString buttonStyle = QString(
+ "QToolButton {"
+ " border: none;"
+ " background: transparent;" // Disables platform style on Windows.
+ " padding: 0 0 0 0;"
+ "}"
+ "QToolButton::menu-indicator {"
+ " image: none;"
+ "}"
+ );
if (type_ == DisplayFilterToApply) {
bookmark_button_ = new StockIconToolButton(this, "x-display-filter-bookmark");
- bookmark_button_->setCursor(Qt::ArrowCursor);
bookmark_button_->setMenu(new QMenu(bookmark_button_));
bookmark_button_->setPopupMode(QToolButton::InstantPopup);
bookmark_button_->setToolTip(tr("Manage saved bookmarks."));
bookmark_button_->setIconSize(QSize(14, 14));
- bookmark_button_->setStyleSheet(
- "QToolButton {"
- " border: none;"
- " background: transparent;" // Disables platform style on Windows.
- " padding: 0 0 0 0;"
- "}"
- "QToolButton::menu-indicator { image: none; }"
- );
+ bookmark_button_->setStyleSheet(buttonStyle);
clear_button_ = new StockIconToolButton(this, "x-filter-clear");
- clear_button_->setCursor(Qt::ArrowCursor);
clear_button_->setToolTip(tr("Clear display filter"));
clear_button_->setIconSize(QSize(14, 14));
- clear_button_->setStyleSheet(
- "QToolButton {"
- " border: none;"
- " background: transparent;" // Disables platform style on Windows.
- " padding: 0 0 0 0;"
- " margin-left: 1px;"
- "}"
- );
- connect(clear_button_, &StockIconToolButton::clicked, this, &DisplayFilterEdit::clearFilter);
- }
-
- connect(this, &DisplayFilterEdit::textChanged, this,
- static_cast<void (DisplayFilterEdit::*)(const QString &)>(&DisplayFilterEdit::checkFilter));
+ clear_button_->setStyleSheet(buttonStyle);
+ clear_button_->setVisible(false);
- if (type_ == DisplayFilterToApply) {
apply_button_ = new StockIconToolButton(this, "x-filter-apply");
- apply_button_->setCursor(Qt::ArrowCursor);
apply_button_->setEnabled(false);
apply_button_->setToolTip(tr("Apply display filter"));
apply_button_->setIconSize(QSize(24, 14));
- apply_button_->setStyleSheet(
- "QToolButton {"
- " border: none;"
- " background: transparent;" // Disables platform style on Windows.
- " padding: 0 0 0 0;"
- "}"
- );
+ apply_button_->setStyleSheet(buttonStyle);
+
+ connect(clear_button_, &StockIconToolButton::clicked, this, &DisplayFilterEdit::clearFilter);
connect(apply_button_, &StockIconToolButton::clicked, this, &DisplayFilterEdit::applyDisplayFilter);
connect(this, &DisplayFilterEdit::returnPressed, this, &DisplayFilterEdit::applyDisplayFilter);
}
+ connect(this, &DisplayFilterEdit::textChanged, this,
+ static_cast<void (DisplayFilterEdit::*)(const QString &)>(&DisplayFilterEdit::checkFilter));
+
+ connect(wsApp, &WiresharkApplication::appInitialized, this, &DisplayFilterEdit::updateBookmarkMenu);
+ connect(wsApp, &WiresharkApplication::displayFilterListChanged, this, &DisplayFilterEdit::updateBookmarkMenu);
+
+ leftAlignActions_ = recent.gui_geometry_leftalign_actions;
+
+ alignActionButtons();
+}
+
+void DisplayFilterEdit::contextMenuEvent(QContextMenuEvent *event){
+ QMenu *menu = this->createStandardContextMenu();
+ menu->addSeparator();
+ QAction * na = new QAction(tr("Left align buttons"));
+ na->setCheckable(true);
+ na->setChecked(leftAlignActions_);
+ connect(na, &QAction::triggered, this, &DisplayFilterEdit::triggerAlignementAction);
+ menu->addAction(na);
+ menu->exec(event->globalPos());
+}
+
+void DisplayFilterEdit::triggerAlignementAction()
+{
+ leftAlignActions_ = ! leftAlignActions_;
+ if ( qobject_cast<QAction *>(sender()) )
+ qobject_cast<QAction *>(sender())->setChecked(leftAlignActions_);
+
+ recent.gui_geometry_leftalign_actions = leftAlignActions_;
+ write_recent();
+
+ alignActionButtons();
+}
+
+void DisplayFilterEdit::alignActionButtons()
+{
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
- QSize bksz;
- if (bookmark_button_) {
+ QSize bksz, cbsz, apsz;
+ bksz = apsz = cbsz = QSize(0,0);
+
+ if (type_ == DisplayFilterToApply) {
+ bookmark_button_->setMinimumHeight(contentsRect().height());
+ bookmark_button_->setMaximumHeight(contentsRect().height());
bksz = bookmark_button_->sizeHint();
- }
- QSize cbsz;
- if (clear_button_) {
- cbsz = clear_button_->sizeHint();
- }
- QSize apsz;
- if (apply_button_) {
+
+ if ( clear_button_->isVisible() )
+ {
+ cbsz = clear_button_->sizeHint();
+ clear_button_->setMinimumHeight(contentsRect().height());
+ clear_button_->setMaximumHeight(contentsRect().height());
+ }
+
apsz = apply_button_->sizeHint();
+ apply_button_->setMinimumHeight(contentsRect().height());
+ apply_button_->setMaximumHeight(contentsRect().height());
+ }
+
+ int leftPadding = frameWidth + 1;
+ int leftMargin = bksz.width();
+ int rightMargin = cbsz.width() + apsz.width() + frameWidth + 1;
+ if ( leftAlignActions_ )
+ {
+ leftMargin = rightMargin + bksz.width();
+ rightMargin = 0;
}
+
setStyleSheet(QString(
"DisplayFilterEdit {"
" padding-left: %1px;"
@@ -154,14 +186,35 @@ DisplayFilterEdit::DisplayFilterEdit(QWidget *parent, DisplayFilterEditType type
" margin-right: %3px;"
"}"
)
- .arg(frameWidth + 1)
- .arg(bksz.width())
- .arg(cbsz.width() + apsz.width() + frameWidth + 1)
- );
+ .arg(leftPadding)
+ .arg(leftMargin)
+ .arg(rightMargin)
+ );
- connect(wsApp, &WiresharkApplication::appInitialized, this, &DisplayFilterEdit::updateBookmarkMenu);
- connect(wsApp, &WiresharkApplication::displayFilterListChanged, this, &DisplayFilterEdit::updateBookmarkMenu);
+ if (clear_button_) {
+ if ( ! leftAlignActions_ )
+ {
+ clear_button_->move(contentsRect().right() - frameWidth - cbsz.width() - apsz.width(),
+ contentsRect().top());
+ } else {
+ clear_button_->move(contentsRect().left() + bookmark_button_->width(), contentsRect().top());
+ }
+ }
+ if (apply_button_) {
+ if ( ! leftAlignActions_ )
+ {
+ apply_button_->move(contentsRect().right() - frameWidth - apsz.width(),
+ contentsRect().top());
+ } else {
+ int additionalWidth = bookmark_button_->width();
+ if ( clear_button_ && clear_button_->isVisible() )
+ additionalWidth += clear_button_->width();
+
+ apply_button_->move(contentsRect().left() + additionalWidth, contentsRect().top());
+ }
+ }
+ update();
}
void DisplayFilterEdit::setDefaultPlaceholderText()
@@ -187,6 +240,8 @@ void DisplayFilterEdit::setDefaultPlaceholderText()
void DisplayFilterEdit::paintEvent(QPaintEvent *evt) {
SyntaxLineEdit::paintEvent(evt);
+ alignActionButtons();
+
if (bookmark_button_) {
// Draw the right border by hand. We could try to do this in the
// style sheet but it's a pain.
@@ -198,40 +253,23 @@ void DisplayFilterEdit::paintEvent(QPaintEvent *evt) {
QPainter painter(this);
painter.setPen(divider_color);
QRect cr = contentsRect();
- QSize bksz = bookmark_button_->size();
- painter.drawLine(bksz.width(), cr.top(), bksz.width(), cr.bottom());
+ int xpos = 0;
+ if ( leftAlignActions_ )
+ {
+ xpos = bookmark_button_->size().width() + apply_button_->size().width();
+ if ( clear_button_->isVisible() )
+ xpos += clear_button_->size().width();
+ }
+ else
+ xpos = bookmark_button_->size().width();
+
+ painter.drawLine(xpos, cr.top(), xpos, cr.bottom());
}
}
void DisplayFilterEdit::resizeEvent(QResizeEvent *)
{
- QSize cbsz;
- if (clear_button_) {
- cbsz = clear_button_->sizeHint();
- }
- QSize apsz;
- if (apply_button_) {
- apsz = apply_button_->sizeHint();
- } else {
- apsz.setHeight(0); apsz.setWidth(0);
- }
- int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
- if (clear_button_) {
- clear_button_->move(contentsRect().right() - frameWidth - cbsz.width() - apsz.width(),
- contentsRect().top());
- clear_button_->setMinimumHeight(contentsRect().height());
- clear_button_->setMaximumHeight(contentsRect().height());
- }
- if (apply_button_) {
- apply_button_->move(contentsRect().right() - frameWidth - apsz.width(),
- contentsRect().top());
- apply_button_->setMinimumHeight(contentsRect().height());
- apply_button_->setMaximumHeight(contentsRect().height());
- }
- if (bookmark_button_) {
- bookmark_button_->setMinimumHeight(contentsRect().height());
- bookmark_button_->setMaximumHeight(contentsRect().height());
- }
+ alignActionButtons();
}
void DisplayFilterEdit::focusOutEvent(QFocusEvent *event)
@@ -257,6 +295,7 @@ void DisplayFilterEdit::checkFilter(const QString& filter_text)
if (clear_button_) {
clear_button_->setVisible(!filter_text.isEmpty());
+ alignActionButtons();
}
emit popFilterSyntaxStatus();
diff --git a/ui/qt/widgets/display_filter_edit.h b/ui/qt/widgets/display_filter_edit.h
index 1974430d02..32ba762cf5 100644
--- a/ui/qt/widgets/display_filter_edit.h
+++ b/ui/qt/widgets/display_filter_edit.h
@@ -40,6 +40,7 @@ protected:
virtual void dragEnterEvent(QDragEnterEvent *event);
virtual void dragMoveEvent(QDragMoveEvent *event);
virtual void dropEvent(QDropEvent *event);
+ virtual void contextMenuEvent(QContextMenuEvent *menu);
public slots:
bool checkFilter();
@@ -58,6 +59,8 @@ private slots:
void showExpressionPrefs();
void applyOrPrepareFilter();
+ void triggerAlignementAction();
+
private:
DisplayFilterEditType type_;
QString placeholder_text_;
@@ -67,12 +70,15 @@ private:
StockIconToolButton *bookmark_button_;
StockIconToolButton *clear_button_;
StockIconToolButton *apply_button_;
+ bool leftAlignActions_;
void setDefaultPlaceholderText();
void buildCompletionList(const QString& field_word);
void createFilterTextDropMenu(QDropEvent *event, bool prepare, QString filterText = QString());
+ void alignActionButtons();
+
signals:
void pushFilterSyntaxStatus(const QString&);
void popFilterSyntaxStatus();