aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/qt/packet_list.cpp160
-rw-r--r--ui/qt/packet_list.h1
-rw-r--r--ui/qt/packet_list_model.cpp163
-rw-r--r--ui/qt/packet_list_model.h25
4 files changed, 165 insertions, 184 deletions
diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp
index f126179ea0..c853012b99 100644
--- a/ui/qt/packet_list.cpp
+++ b/ui/qt/packet_list.cpp
@@ -43,18 +43,18 @@
#include "ui/main_statusbar.h"
#include "ui/recent.h"
+#include "ui/recent_utils.h"
#include "ui/ui_util.h"
#include <QTreeWidget>
#include <QTabWidget>
#include <QTextEdit>
-
-static gboolean enable_color;
+#include <QScrollBar>
// If we ever add the ability to open multiple capture files we might be
// able to use something like QMap<capture_file *, PacketList *> to match
// capture files against packet lists and models.
-static PacketList *cur_packet_list = NULL;
+static PacketList *gbl_cur_packet_list = NULL;
guint
new_packet_list_append(column_info *cinfo, frame_data *fdata, packet_info *pinfo)
@@ -62,7 +62,7 @@ new_packet_list_append(column_info *cinfo, frame_data *fdata, packet_info *pinfo
Q_UNUSED(cinfo);
Q_UNUSED(pinfo);
- if (!cur_packet_list)
+ if (!gbl_cur_packet_list)
return 0;
/* fdata should be filled with the stuff we need
@@ -70,7 +70,7 @@ new_packet_list_append(column_info *cinfo, frame_data *fdata, packet_info *pinfo
*/
guint visible_pos;
- visible_pos = cur_packet_list->packetListModel()->appendPacket(fdata);
+ visible_pos = gbl_cur_packet_list->packetListModel()->appendPacket(fdata);
return visible_pos;
}
@@ -94,19 +94,19 @@ g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: new_packet_list_resize_column %d", col);
void
new_packet_list_select_first_row(void)
{
- if (!cur_packet_list)
+ if (!gbl_cur_packet_list)
return;
- cur_packet_list->goFirstPacket();
- cur_packet_list->setFocus();
+ gbl_cur_packet_list->goFirstPacket();
+ gbl_cur_packet_list->setFocus();
}
void
new_packet_list_select_last_row(void)
{
- if (!cur_packet_list)
+ if (!gbl_cur_packet_list)
return;
- cur_packet_list->goLastPacket();
- cur_packet_list->setFocus();
+ gbl_cur_packet_list->goLastPacket();
+ gbl_cur_packet_list->setFocus();
}
/*
@@ -117,9 +117,9 @@ new_packet_list_select_last_row(void)
gboolean
new_packet_list_select_row_from_data(frame_data *fdata_needle)
{
- int row = cur_packet_list->packetListModel()->visibleIndexOf(fdata_needle);
+ int row = gbl_cur_packet_list->packetListModel()->visibleIndexOf(fdata_needle);
if (row >= 0) {
- cur_packet_list->setCurrentIndex(cur_packet_list->packetListModel()->index(row,0));
+ gbl_cur_packet_list->setCurrentIndex(gbl_cur_packet_list->packetListModel()->index(row,0));
return TRUE;
}
@@ -129,114 +129,88 @@ new_packet_list_select_row_from_data(frame_data *fdata_needle)
gboolean
new_packet_list_check_end(void)
{
- gboolean at_end = FALSE;
-// GtkAdjustment *adj;
-
- g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: new_packet_list_check_end");
-
-// adj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(packetlist->view));
-// g_return_val_if_fail(adj != NULL, FALSE);
-
-//#if GTK_CHECK_VERSION(2,14,0)
-// if (gtk_adjustment_get_value(adj) >= gtk_adjustment_get_upper(adj) - gtk_adjustment_get_page_size(adj)) {
-//#else
-// if (adj->value >= adj->upper - adj->page_size) {
-//#endif
-// at_end = TRUE;
-// }
-//#ifdef HAVE_LIBPCAP
-//#if GTK_CHECK_VERSION(2,14,0)
-// if (gtk_adjustment_get_value(adj) > 0 && at_end != last_at_end && at_end != auto_scroll_live) {
-//#else
-// if (adj->value > 0 && at_end != last_at_end && at_end != auto_scroll_live) {
-//#endif
-// menu_auto_scroll_live_changed(at_end);
-// }
-//#endif
-// last_at_end = at_end;
- return at_end;
+ if (gbl_cur_packet_list) {
+ QScrollBar *sb = gbl_cur_packet_list->verticalScrollBar();
+ if (sb && sb->isVisible() && sb->value() == sb->maximum()) {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
void
new_packet_list_clear(void)
{
-
- g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: new_packet_list_clear");
-
- cur_packet_list->clear();
+ if (gbl_cur_packet_list) {
+ gbl_cur_packet_list->clear();
+ }
}
void
new_packet_list_enable_color(gboolean enable)
{
- enable_color = enable;
- g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: new_packet_list_enable_color: %d", enable);
-
- // gtk_widget_queue_draw (packetlist->view);
+ if (gbl_cur_packet_list && gbl_cur_packet_list->packetListModel()) {
+ gbl_cur_packet_list->packetListModel()->setColorEnabled(enable);
+ gbl_cur_packet_list->update();
+ }
}
void
new_packet_list_freeze(void)
{
- g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: new_packet_list_freeze");
-// /* So we don't lose the model by the time we want to thaw it */
-// g_object_ref(packetlist);
-
-// /* Detach view from model */
-// gtk_tree_view_set_model(GTK_TREE_VIEW(packetlist->view), NULL);
+ if (gbl_cur_packet_list) {
+ gbl_cur_packet_list->setUpdatesEnabled(false);
+ }
}
void
new_packet_list_thaw(void)
{
- g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: new_packet_list_thaw");
-// /* Apply model */
-// gtk_tree_view_set_model( GTK_TREE_VIEW(packetlist->view), GTK_TREE_MODEL(packetlist));
-
-// /* Remove extra reference added by new_packet_list_freeze() */
-// g_object_unref(packetlist);
+ if (gbl_cur_packet_list) {
+ gbl_cur_packet_list->setUpdatesEnabled(true);
+ }
- packets_bar_update();
+ packets_bar_update();
}
void
new_packet_list_recreate_visible_rows(void)
{
- cur_packet_list->packetListModel()->recreateVisibleRows();
+ if (gbl_cur_packet_list && gbl_cur_packet_list->packetListModel()) {
+ gbl_cur_packet_list->packetListModel()->recreateVisibleRows();
+ }
}
frame_data *
new_packet_list_get_row_data(gint row)
{
- if (!cur_packet_list)
- return NULL;
- return cur_packet_list->packetListModel()->getRowFdata(row);
+ if (gbl_cur_packet_list && gbl_cur_packet_list->packetListModel()) {
+ return gbl_cur_packet_list->packetListModel()->getRowFdata(row);
+ }
+ return NULL;
}
void
new_packet_list_moveto_end(void)
{
- if (cur_packet_list)
- cur_packet_list->goLastPacket();
+ if (gbl_cur_packet_list)
+ gbl_cur_packet_list->goLastPacket();
}
/* Redraw the packet list *and* currently-selected detail */
void
new_packet_list_queue_draw(void)
{
-// GtkTreeSelection *selection;
-// GtkTreeIter iter;
-// gint row;
+ if (gbl_cur_packet_list)
+ gbl_cur_packet_list->updateAll();
+}
- g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: new_packet_list_queue_draw");
-// gtk_widget_queue_draw (packetlist->view);
+void
+new_packet_list_recent_write_all(FILE *rf) {
+ if (!gbl_cur_packet_list)
+ return;
-// selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(packetlist->view));
-// if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
-// return;
-// row = row_number_from_iter(&iter);
-// cf_select_packet(&cfile, row);
- cf_select_packet(&cfile, 1);
+ gbl_cur_packet_list->writeRecent(rf);
}
#define MIN_COL_WIDTH_STR "...."
@@ -252,9 +226,11 @@ PacketList::PacketList(QWidget *parent) :
packet_list_model_ = new PacketListModel(this, &cfile);
setModel(packet_list_model_);
+ packet_list_model_->setColorEnabled(true); // We don't yet fetch color settings.
+// packet_list_model_->setColorEnabled(recent.packet_list_colorize);
- g_assert(cur_packet_list == NULL);
- cur_packet_list = this;
+ g_assert(gbl_cur_packet_list == NULL);
+ gbl_cur_packet_list = this;
proto_tree_ = NULL;
byte_view_tab_ = NULL;
@@ -328,6 +304,15 @@ void PacketList::selectionChanged (const QItemSelection & selected, const QItemS
}
}
+// Redraw the packet list and detail
+void PacketList::updateAll() {
+ update();
+
+ if (selectedIndexes().length() > 0) {
+ cf_select_packet(&cfile, selectedIndexes()[0].row());
+ }
+}
+
void PacketList::clear() {
// packet_history_clear();
packetListModel()->clear();
@@ -338,17 +323,10 @@ void PacketList::clear() {
delete byte_view_tab_->currentWidget();
}
-// /* XXX is this correct in all cases?
-// * Reset the sort column, use packetlist as model in case the list is frozen.
-// */
- cur_packet_list->sortByColumn(0, Qt::AscendingOrder);
-}
-
-extern "C" void new_packet_list_recent_write_all(FILE *rf) {
- if (!cur_packet_list)
- return;
-
- cur_packet_list->writeRecent(rf);
+ /* XXX is this correct in all cases?
+ * Reset the sort column, use packetlist as model in case the list is frozen.
+ */
+ gbl_cur_packet_list->sortByColumn(0, Qt::AscendingOrder);
}
void PacketList::writeRecent(FILE *rf) {
@@ -381,8 +359,6 @@ void PacketList::writeRecent(FILE *rf) {
}
-#include <QDebug>
-
void PacketList::goNextPacket(void) {
setCurrentIndex(moveCursor(MoveDown, Qt::NoModifier));
}
diff --git a/ui/qt/packet_list.h b/ui/qt/packet_list.h
index 5dc0440c5c..2b26ea6b10 100644
--- a/ui/qt/packet_list.h
+++ b/ui/qt/packet_list.h
@@ -40,6 +40,7 @@ public:
PacketListModel *packetListModel() const;
void setProtoTree(ProtoTree *proto_tree);
void setByteViewTab(ByteViewTab *byteViewTab);
+ void updateAll();
void clear();
void writeRecent(FILE *rf);
diff --git a/ui/qt/packet_list_model.cpp b/ui/qt/packet_list_model.cpp
index 0ecd460668..05d03ba838 100644
--- a/ui/qt/packet_list_model.cpp
+++ b/ui/qt/packet_list_model.cpp
@@ -44,98 +44,53 @@ PacketListModel::PacketListModel(QObject *parent, capture_file *cfPtr) :
cf = cfPtr;
}
-gint PacketListModel::appendPacket(frame_data *fdata)
+// Packet list records have no children (for now, at least).
+QModelIndex PacketListModel::index(int row, int column, const QModelIndex &parent)
+ const
{
- PacketListRecord *record = new PacketListRecord(fdata);
- gint pos = visibleRows.count() + 1;
-
- physicalRows << record;
+ Q_UNUSED(parent);
+ if (row >= visible_rows_.count() || row < 0 || column >= cf->cinfo.num_cols)
+ return QModelIndex();
- if (fdata->flags.passed_dfilter || fdata->flags.ref_time) {
- beginInsertRows(QModelIndex(), pos, pos);
- visibleRows << record;
- endInsertRows();
- } else {
- pos = -1;
- }
- return pos;
-}
+ PacketListRecord *record = visible_rows_[row];
-frame_data *PacketListModel::getRowFdata(int row) {
- if (row >= visibleRows.count())
- return NULL;
- PacketListRecord *record = visibleRows[row];
- if (!record)
- return NULL;
- return record->getFdata();
+ return createIndex(row, column, record);
}
-
-QVariant PacketListModel::headerData(int section, Qt::Orientation orientation,
- int role) const
+// Everything is under the root.
+QModelIndex PacketListModel::parent(const QModelIndex &index) const
{
- if (orientation == Qt::Horizontal && section < cf->cinfo.num_cols) {
- switch (role) {
- case Qt::DisplayRole:
- return cf->cinfo.col_title[section];
- default:
- break;
- }
- }
-
- return QVariant();
+ Q_UNUSED(index);
+ return QModelIndex();
}
guint PacketListModel::recreateVisibleRows()
{
- int pos = visibleRows.count() + 1;
+ int pos = visible_rows_.count() + 1;
PacketListRecord *record;
beginResetModel();
- visibleRows.clear();
+ visible_rows_.clear();
endResetModel();
beginInsertRows(QModelIndex(), pos, pos);
- foreach (record, physicalRows) {
+ foreach (record, physical_rows_) {
if (record->getFdata()->flags.passed_dfilter || record->getFdata()->flags.ref_time) {
- visibleRows << record;
+ visible_rows_ << record;
}
}
endInsertRows();
- return visibleRows.count();
+ return visible_rows_.count();
}
-int PacketListModel::visibleIndexOf(frame_data *fdata) const
-{
- int row = 0;
- foreach (PacketListRecord *record, visibleRows) {
- if (record->getFdata() == fdata) {
- return row;
- }
- row++;
- }
-
- return -1;
-}
-
-
-// Packet list records have no children (for now, at least).
-QModelIndex PacketListModel::index(int row, int column, const QModelIndex &parent)
- const
-{
- Q_UNUSED(parent);
- if (row >= visibleRows.count() || row < 0 || column >= cf->cinfo.num_cols)
- return QModelIndex();
-
- PacketListRecord *record = visibleRows[row];
-
- return createIndex(row, column, record);
+void PacketListModel::setColorEnabled(bool enable_color) {
+ enable_color_ = enable_color;
}
-// Everything is under the root.
-QModelIndex PacketListModel::parent(const QModelIndex &index) const
-{
- Q_UNUSED(index);
- return QModelIndex();
+void PacketListModel::clear() {
+ beginResetModel();
+ physical_rows_.clear();
+ visible_rows_.clear();
+ endResetModel();
}
int PacketListModel::rowCount(const QModelIndex &parent) const
@@ -143,7 +98,7 @@ int PacketListModel::rowCount(const QModelIndex &parent) const
if (parent.column() >= cf->cinfo.num_cols)
return 0;
- return visibleRows.count();
+ return visible_rows_.count();
}
int PacketListModel::columnCount(const QModelIndex &parent) const
@@ -213,7 +168,6 @@ QVariant PacketListModel::data(const QModelIndex &index, int role) const
union wtap_pseudo_header pseudo_header; /* Packet pseudo_header */
guint8 pd[WTAP_MAX_PACKET_SIZE]; /* Packet data */
gboolean dissect_columns = TRUE; // XXX - Currently only a placeholder
- gboolean dissect_color = TRUE; // XXX - Currently only a placeholder
if (dissect_columns)
cinfo = &cf->cinfo;
@@ -241,28 +195,28 @@ QVariant PacketListModel::data(const QModelIndex &index, int role) const
// }
// record->columnized = TRUE;
}
- if (dissect_color) {
+ if (enable_color_) {
fdata->color_filter = NULL;
// record->colorized = TRUE;
}
return QVariant(); /* error reading the frame */
}
- create_proto_tree = (color_filters_used() && dissect_color) ||
+ create_proto_tree = (color_filters_used() && enable_color_) ||
(have_custom_cols(cinfo) && dissect_columns);
epan_dissect_init(&edt,
create_proto_tree,
FALSE /* proto_tree_visible */);
- if (dissect_color)
+ if (enable_color_)
color_filters_prime_edt(&edt);
if (dissect_columns)
col_custom_prime_edt(&edt, cinfo);
epan_dissect_run(&edt, &pseudo_header, pd, fdata, cinfo);
- if (dissect_color)
+ if (enable_color_)
fdata->color_filter = color_filters_colorize_packet(&edt);
if (dissect_columns) {
@@ -279,7 +233,7 @@ QVariant PacketListModel::data(const QModelIndex &index, int role) const
// if (dissect_columns)
// record->columnized = TRUE;
- // if (dissect_color)
+ // if (enable_color_)
// record->colorized = TRUE;
epan_dissect_cleanup(&edt);
@@ -287,9 +241,56 @@ QVariant PacketListModel::data(const QModelIndex &index, int role) const
return record->data(col_num, cinfo);
}
-void PacketListModel::clear() {
- beginResetModel();
- physicalRows.clear();
- visibleRows.clear();
- endResetModel();
+QVariant PacketListModel::headerData(int section, Qt::Orientation orientation,
+ int role) const
+{
+ if (orientation == Qt::Horizontal && section < cf->cinfo.num_cols) {
+ switch (role) {
+ case Qt::DisplayRole:
+ return cf->cinfo.col_title[section];
+ default:
+ break;
+ }
+ }
+
+ return QVariant();
+}
+
+gint PacketListModel::appendPacket(frame_data *fdata)
+{
+ PacketListRecord *record = new PacketListRecord(fdata);
+ gint pos = visible_rows_.count() + 1;
+
+ physical_rows_ << record;
+
+ if (fdata->flags.passed_dfilter || fdata->flags.ref_time) {
+ beginInsertRows(QModelIndex(), pos, pos);
+ visible_rows_ << record;
+ endInsertRows();
+ } else {
+ pos = -1;
+ }
+ return pos;
+}
+
+frame_data *PacketListModel::getRowFdata(int row) {
+ if (row >= visible_rows_.count())
+ return NULL;
+ PacketListRecord *record = visible_rows_[row];
+ if (!record)
+ return NULL;
+ return record->getFdata();
+}
+
+int PacketListModel::visibleIndexOf(frame_data *fdata) const
+{
+ int row = 0;
+ foreach (PacketListRecord *record, visible_rows_) {
+ if (record->getFdata() == fdata) {
+ return row;
+ }
+ row++;
+ }
+
+ return -1;
}
diff --git a/ui/qt/packet_list_model.h b/ui/qt/packet_list_model.h
index e571b4c53b..bbb7f37ecf 100644
--- a/ui/qt/packet_list_model.h
+++ b/ui/qt/packet_list_model.h
@@ -48,17 +48,18 @@ public:
QModelIndex index(int row, int column,
const QModelIndex &parent = QModelIndex()) const;
QModelIndex parent(const QModelIndex &index) const;
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- QVariant data(const QModelIndex &index, int role) const;
-
- gint appendPacket(frame_data *fdata);
- frame_data *getRowFdata(int row);
+ guint recreateVisibleRows();
+ void setColorEnabled(bool enable_color);
void clear();
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const;
- guint recreateVisibleRows();
+
+ gint appendPacket(frame_data *fdata);
+ frame_data *getRowFdata(int row);
int visibleIndexOf(frame_data *fdata) const;
@@ -68,11 +69,13 @@ public slots:
private:
capture_file *cf;
- QList<QString> colNames;
- QVector<PacketListRecord *> visibleRows;
- QVector<PacketListRecord *> physicalRows;
- QFont plFont;
- int headerHeight;
+ QList<QString> col_names_;
+ QVector<PacketListRecord *> visible_rows_;
+ QVector<PacketListRecord *> physical_rows_;
+ QFont pl_font_;
+
+ int header_height_;
+ bool enable_color_;
};
#endif // PACKET_LIST_MODEL_H