aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2015-03-27 18:49:39 -0500
committerGerald Combs <gerald@wireshark.org>2015-05-07 20:15:29 +0000
commite55ac64077be6044292dd8eeda4cd6412386caeb (patch)
tree4809db80cc5e201dae730f226345c7a5398fb2ea /ui/qt
parent141c923e2f9f6afbc01fd9d00fce9d22b441f82d (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.cpp20
-rw-r--r--ui/qt/packet_list.h1
-rw-r--r--ui/qt/packet_list_model.cpp19
-rw-r--r--ui/qt/packet_list_model.h3
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_;