From eb46659c95ec01f8cc634d75b2f4f3931598725a Mon Sep 17 00:00:00 2001 From: Roland Knall Date: Wed, 3 Jul 2019 23:01:34 +0200 Subject: [PATCH] Qt: Move ColText to QStringList for PacketListRecord Change-Id: Id6e0593a2ae80fbb97aa6a0d738eb22b22434245 Reviewed-on: https://code.wireshark.org/review/33836 Petri-Dish: Roland Knall Tested-by: Petri Dish Buildbot Reviewed-by: Roland Knall --- ui/qt/models/packet_list_model.cpp | 4 +-- ui/qt/models/packet_list_record.cpp | 39 ++++++++--------------------- ui/qt/models/packet_list_record.h | 6 ++--- 3 files changed, 15 insertions(+), 34 deletions(-) diff --git a/ui/qt/models/packet_list_model.cpp b/ui/qt/models/packet_list_model.cpp index cbe7f075ed..da1f7c877f 100644 --- a/ui/qt/models/packet_list_model.cpp +++ b/ui/qt/models/packet_list_model.cpp @@ -510,7 +510,7 @@ bool PacketListModel::recordLessThan(PacketListRecord *r1, PacketListRecord *r2) cmp_val = 1; } } else { - cmp_val = strcmp(r1->columnString(sort_cap_file_, sort_column_).constData(), r2->columnString(sort_cap_file_, sort_column_).constData()); + cmp_val = r1->columnString(sort_cap_file_, sort_column_).compare(r2->columnString(sort_cap_file_, sort_column_)); } if (cmp_val == 0) { @@ -627,7 +627,7 @@ QVariant PacketListModel::data(const QModelIndex &d_index, int role) const case Qt::DisplayRole: { int column = d_index.column(); - QByteArray column_string = record->columnString(cap_file_, column, true); + QString column_string = record->columnString(cap_file_, column, true); // We don't know an item's sizeHint until we fetch its text here. // Assume each line count is 1. If the line count changes, emit // itemHeightChanged which triggers another redraw (including a diff --git a/ui/qt/models/packet_list_record.cpp b/ui/qt/models/packet_list_record.cpp index 8ff545867e..6f0d41b2d3 100644 --- a/ui/qt/models/packet_list_record.cpp +++ b/ui/qt/models/packet_list_record.cpp @@ -23,21 +23,10 @@ #include -class ColumnTextList : public QList { -public: - // Allocate our records using wmem. - static void *operator new(size_t size) { - return wmem_alloc(wmem_file_scope(), size); - } - - static void operator delete(void *) {} -}; - QMap PacketListRecord::cinfo_column_; unsigned PacketListRecord::col_data_ver_ = 1; PacketListRecord::PacketListRecord(frame_data *frameData, struct _GStringChunk *string_cache_pool) : - col_text_(0), fdata_(frameData), lines_(1), line_count_changed_(false), @@ -55,21 +44,21 @@ void *PacketListRecord::operator new(size_t size) // We might want to return a const char * instead. This would keep us from // creating excessive QByteArrays, e.g. in PacketListModel::recordLessThan. -const QByteArray PacketListRecord::columnString(capture_file *cap_file, int column, bool colorized) +const QString PacketListRecord::columnString(capture_file *cap_file, int column, bool colorized) { // packet_list_store.c:packet_list_get_value Q_ASSERT(fdata_); if (!cap_file || column < 0 || column > cap_file->cinfo.num_cols) { - return QByteArray(); + return QString(); } bool dissect_color = colorized && !colorized_; - if (!col_text_ || column >= col_text_->size() || !col_text_->at(column) || data_ver_ != col_data_ver_ || dissect_color) { + if (column >= col_text_.count() || col_text_.at(column).isNull() || data_ver_ != col_data_ver_ || dissect_color) { dissect(cap_file, dissect_color); } - return col_text_->value(column, QByteArray()); + return col_text_.at(column); } void PacketListRecord::resetColumns(column_info *cinfo) @@ -104,14 +93,12 @@ void PacketListRecord::dissect(capture_file *cap_file, bool dissect_color) wtap_rec rec; /* Record metadata */ Buffer buf; /* Record data */ - if (!col_text_) col_text_ = new ColumnTextList; - gboolean dissect_columns = col_text_->isEmpty() || data_ver_ != col_data_ver_; + gboolean dissect_columns = col_text_.isEmpty() || data_ver_ != col_data_ver_; if (!cap_file) { return; } - if (dissect_columns) { cinfo = &cap_file->cinfo; } @@ -206,11 +193,7 @@ void PacketListRecord::cacheColumnStrings(column_info *cinfo) return; } - if (col_text_) { - col_text_->clear(); - } else { - col_text_ = new ColumnTextList; - } + col_text_.clear(); lines_ = 1; line_count_changed_ = false; @@ -223,7 +206,7 @@ void PacketListRecord::cacheColumnStrings(column_info *cinfo) /* Column based on frame_data or it already contains a value */ if (text_col < 0) { col_fill_in_frame_data(fdata_, cinfo, column, FALSE); - col_text_->append(cinfo->columns[column].col_data); + col_text_ << QString(cinfo->columns[column].col_data); continue; } @@ -240,7 +223,7 @@ void PacketListRecord::cacheColumnStrings(column_info *cinfo) // XXX - ui/gtk/packet_list_store.c uses G_MAXUSHORT. We don't do proper UTF8 // truncation in either case. int col_text_len = MIN(qstrlen(cinfo->col_data[column]) + 1, COL_MAX_INFO_LEN); - col_text_->append(QByteArray::fromRawData(cinfo->columns[column].col_data, col_text_len)); + col_text_ << QString(QByteArray::fromRawData(cinfo->columns[column].col_data, col_text_len)); break; } /* !! FALL-THROUGH!! */ @@ -267,9 +250,9 @@ void PacketListRecord::cacheColumnStrings(column_info *cinfo) if (!get_column_resolved(column) && cinfo->col_expr.col_expr_val[column]) { /* Use the unresolved value in col_expr_val */ // XXX Use QContiguousCache? - col_text_->append(cinfo->col_expr.col_expr_val[column]); + col_text_ << QString(cinfo->col_expr.col_expr_val[column]); } else { - col_text_->append(cinfo->columns[column].col_data); + col_text_ << QString(cinfo->columns[column].col_data); } break; } @@ -291,7 +274,7 @@ void PacketListRecord::cacheColumnStrings(column_info *cinfo) // https://git.gnome.org/browse/glib/tree/glib/gstringchunk.c // We might be better off adding the equivalent functionality to // wmem_tree. - col_text_->append(g_string_chunk_insert_const(string_cache_pool_, col_str)); + col_text_ << QString(g_string_chunk_insert_const(string_cache_pool_, col_str)); for (int i = 0; col_str[i]; i++) { if (col_str[i] == '\n') col_lines++; } diff --git a/ui/qt/models/packet_list_record.h b/ui/qt/models/packet_list_record.h index d90d5aed52..fe19cf2896 100644 --- a/ui/qt/models/packet_list_record.h +++ b/ui/qt/models/packet_list_record.h @@ -26,8 +26,6 @@ struct conversation; struct _GStringChunk; -class ColumnTextList; - class PacketListRecord { public: @@ -38,7 +36,7 @@ public: static void operator delete(void *) {} // Return the string value for a column. Data is cached if possible. - const QByteArray columnString(capture_file *cap_file, int column, bool colorized = false); + const QString columnString(capture_file *cap_file, int column, bool colorized = false); frame_data *frameData() const { return fdata_; } // packet_list->col_to_text in gtk/packet_list_store.c static int textColumn(int column) { return cinfo_column_.value(column, -1); } @@ -54,7 +52,7 @@ public: private: /** The column text for some columns */ - ColumnTextList *col_text_; + QStringList col_text_; frame_data *fdata_; int lines_;