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 <QAction>
|
||||||
#include <QActionGroup>
|
#include <QActionGroup>
|
||||||
#include <QContextMenuEvent>
|
#include <QContextMenuEvent>
|
||||||
|
#include <QFontMetrics>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QScrollBar>
|
#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()
|
void PacketList::initHeaderContextMenu()
|
||||||
{
|
{
|
||||||
header_ctx_menu_.clear();
|
header_ctx_menu_.clear();
|
||||||
|
@ -670,12 +683,13 @@ void PacketList::applyRecentColumnWidths()
|
||||||
fmt = get_column_format(i);
|
fmt = get_column_format(i);
|
||||||
long_str = get_column_width_string(fmt, i);
|
long_str = get_column_width_string(fmt, i);
|
||||||
if (long_str) {
|
if (long_str) {
|
||||||
col_width = packet_list_model_->columnTextSize(long_str);
|
col_width = fontMetrics().width(long_str);
|
||||||
} else {
|
} 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();
|
column_state_ = header()->saveState();
|
||||||
redrawVisiblePackets();
|
redrawVisiblePackets();
|
||||||
|
|
|
@ -104,6 +104,7 @@ private:
|
||||||
void setFrameIgnore(gboolean set, frame_data *fdata);
|
void setFrameIgnore(gboolean set, frame_data *fdata);
|
||||||
void setFrameReftime(gboolean set, frame_data *fdata);
|
void setFrameReftime(gboolean set, frame_data *fdata);
|
||||||
void setColumnVisibility();
|
void setColumnVisibility();
|
||||||
|
int sizeHintForColumn(int column) const;
|
||||||
void initHeaderContextMenu();
|
void initHeaderContextMenu();
|
||||||
signals:
|
signals:
|
||||||
void packetDissectionChanged();
|
void packetDissectionChanged();
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
|
|
||||||
PacketListModel::PacketListModel(QObject *parent, capture_file *cf) :
|
PacketListModel::PacketListModel(QObject *parent, capture_file *cf) :
|
||||||
QAbstractItemModel(parent),
|
QAbstractItemModel(parent),
|
||||||
|
size_hint_enabled_(true),
|
||||||
row_height_(-1),
|
row_height_(-1),
|
||||||
line_spacing_(0)
|
line_spacing_(0)
|
||||||
{
|
{
|
||||||
|
@ -127,13 +128,6 @@ void PacketListModel::resetColorized()
|
||||||
endResetModel();
|
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)
|
void PacketListModel::setMonospaceFont(const QFont &mono_font, int row_height)
|
||||||
{
|
{
|
||||||
QFontMetrics fm(mono_font_);
|
QFontMetrics fm(mono_font_);
|
||||||
|
@ -331,9 +325,14 @@ QVariant PacketListModel::data(const QModelIndex &index, int role) const
|
||||||
}
|
}
|
||||||
case Qt::SizeHintRole:
|
case Qt::SizeHintRole:
|
||||||
{
|
{
|
||||||
// We assume that inter-line spacing is 0.
|
if (size_hint_enabled_) {
|
||||||
QSize size = QSize(-1, row_height_ + ((record->lineCount() - 1) * line_spacing_));
|
// We assume that inter-line spacing is 0.
|
||||||
return size;
|
QSize size = QSize(-1, row_height_ + ((record->lineCount() - 1) * line_spacing_));
|
||||||
|
return size;
|
||||||
|
} else {
|
||||||
|
// Used by PacketList::sizeHintForColumn
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
|
@ -62,7 +62,7 @@ public:
|
||||||
int visibleIndexOf(frame_data *fdata) const;
|
int visibleIndexOf(frame_data *fdata) const;
|
||||||
void resetColumns();
|
void resetColumns();
|
||||||
void resetColorized();
|
void resetColorized();
|
||||||
int columnTextSize(const char *str);
|
void setSizeHintEnabled(bool enable) { size_hint_enabled_ = enable; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void goToPacket(int);
|
void goToPacket(int);
|
||||||
|
@ -80,6 +80,7 @@ private:
|
||||||
QVector<PacketListRecord *> physical_rows_;
|
QVector<PacketListRecord *> physical_rows_;
|
||||||
QMap<int, int> number_to_row_;
|
QMap<int, int> number_to_row_;
|
||||||
|
|
||||||
|
bool size_hint_enabled_;
|
||||||
int row_height_;
|
int row_height_;
|
||||||
int line_spacing_;
|
int line_spacing_;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue