diff options
author | Gerald Combs <gerald@wireshark.org> | 2015-03-27 18:49:39 -0500 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2015-05-07 20:15:29 +0000 |
commit | e55ac64077be6044292dd8eeda4cd6412386caeb (patch) | |
tree | 4809db80cc5e201dae730f226345c7a5398fb2ea /ui/qt | |
parent | 141c923e2f9f6afbc01fd9d00fce9d22b441f82d (diff) |
Qt: Fix packet list column resizing.
The size hint changes in g5ab8490 broke packet list column resizing. Add
back a way to force the hinting necessary for sizeHintForColumn to work
properly.
Bug: 11067
Ping-Bug: 10924
Change-Id: Icd525200f7a88f2b6d22a3039cda98ad0527239e
Reviewed-on: https://code.wireshark.org/review/8334
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'ui/qt')
-rw-r--r-- | ui/qt/packet_list.cpp | 20 | ||||
-rw-r--r-- | ui/qt/packet_list.h | 1 | ||||
-rw-r--r-- | ui/qt/packet_list_model.cpp | 19 | ||||
-rw-r--r-- | ui/qt/packet_list_model.h | 3 |
4 files changed, 29 insertions, 14 deletions
diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index 5f76bb9b04..7255cc506a 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -55,6 +55,7 @@ #include <QAction> #include <QActionGroup> #include <QContextMenuEvent> +#include <QFontMetrics> #include <QHeaderView> #include <QMessageBox> #include <QScrollBar> @@ -591,6 +592,18 @@ void PacketList::setColumnVisibility() } } +int PacketList::sizeHintForColumn(int column) const +{ + int size_hint; + + // This is a bit hacky but Qt does a fine job of column sizing and + // reimplementing QTreeView::sizeHintForColumn seems worse. + packet_list_model_->setSizeHintEnabled(false); + size_hint = QTreeView::sizeHintForColumn(column); + packet_list_model_->setSizeHintEnabled(true); + return size_hint; +} + void PacketList::initHeaderContextMenu() { header_ctx_menu_.clear(); @@ -670,12 +683,13 @@ void PacketList::applyRecentColumnWidths() fmt = get_column_format(i); long_str = get_column_width_string(fmt, i); if (long_str) { - col_width = packet_list_model_->columnTextSize(long_str); + col_width = fontMetrics().width(long_str); } else { - col_width = packet_list_model_->columnTextSize(MIN_COL_WIDTH_STR); + col_width = fontMetrics().width(MIN_COL_WIDTH_STR); } } - setColumnWidth(i, col_width); + col_width += QTreeView::sizeHintForColumn(i); // Decoration padding + setColumnWidth(i, col_width) ; } column_state_ = header()->saveState(); redrawVisiblePackets(); diff --git a/ui/qt/packet_list.h b/ui/qt/packet_list.h index 8095fe7d2e..0e9194cd6c 100644 --- a/ui/qt/packet_list.h +++ b/ui/qt/packet_list.h @@ -104,6 +104,7 @@ private: void setFrameIgnore(gboolean set, frame_data *fdata); void setFrameReftime(gboolean set, frame_data *fdata); void setColumnVisibility(); + int sizeHintForColumn(int column) const; void initHeaderContextMenu(); signals: void packetDissectionChanged(); diff --git a/ui/qt/packet_list_model.cpp b/ui/qt/packet_list_model.cpp index 56135e4731..cad606e6f3 100644 --- a/ui/qt/packet_list_model.cpp +++ b/ui/qt/packet_list_model.cpp @@ -39,6 +39,7 @@ PacketListModel::PacketListModel(QObject *parent, capture_file *cf) : QAbstractItemModel(parent), + size_hint_enabled_(true), row_height_(-1), line_spacing_(0) { @@ -127,13 +128,6 @@ void PacketListModel::resetColorized() endResetModel(); } -int PacketListModel::columnTextSize(const char *str) -{ - QFontMetrics fm(mono_font_); - - return fm.width(str); -} - void PacketListModel::setMonospaceFont(const QFont &mono_font, int row_height) { QFontMetrics fm(mono_font_); @@ -331,9 +325,14 @@ QVariant PacketListModel::data(const QModelIndex &index, int role) const } case Qt::SizeHintRole: { - // We assume that inter-line spacing is 0. - QSize size = QSize(-1, row_height_ + ((record->lineCount() - 1) * line_spacing_)); - return size; + if (size_hint_enabled_) { + // We assume that inter-line spacing is 0. + QSize size = QSize(-1, row_height_ + ((record->lineCount() - 1) * line_spacing_)); + return size; + } else { + // Used by PacketList::sizeHintForColumn + return QVariant(); + } } default: return QVariant(); diff --git a/ui/qt/packet_list_model.h b/ui/qt/packet_list_model.h index db229ce38b..d0644c55b9 100644 --- a/ui/qt/packet_list_model.h +++ b/ui/qt/packet_list_model.h @@ -62,7 +62,7 @@ public: int visibleIndexOf(frame_data *fdata) const; void resetColumns(); void resetColorized(); - int columnTextSize(const char *str); + void setSizeHintEnabled(bool enable) { size_hint_enabled_ = enable; } signals: void goToPacket(int); @@ -80,6 +80,7 @@ private: QVector<PacketListRecord *> physical_rows_; QMap<int, int> number_to_row_; + bool size_hint_enabled_; int row_height_; int line_spacing_; |