forked from osmocom/wireshark
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>
This commit is contained in:
parent
141c923e2f
commit
e55ac64077
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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_;
|
||||
|
||||
|
|
Loading…
Reference in New Issue