Kerberos: add kerberos_inject_longterm_key() helper function
[wireshark-sm.git] / ui / qt / packet_list.h
blobaa71453a958404399f6d7f63df7932c2ca9d9181
1 /** @file
3 * Wireshark - Network traffic analyzer
4 * By Gerald Combs <gerald@wireshark.org>
5 * Copyright 1998 Gerald Combs
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
10 #ifndef PACKET_LIST_H
11 #define PACKET_LIST_H
13 #include "byte_view_tab.h"
14 #include <ui/qt/models/packet_list_model.h>
15 #include "proto_tree.h"
16 #include "protocol_preferences_menu.h"
17 #include <ui/qt/models/related_packet_delegate.h>
18 #include <ui/qt/utils/field_information.h>
20 #include <QMenu>
21 #include <QTime>
22 #include <QTreeView>
23 #include <QPainter>
25 class PacketListHeader;
26 class OverlayScrollBar;
27 class ProfileSwitcher;
29 class QAction;
30 class QTimerEvent;
33 // XXX - Wireshark supports up to 2^32-1 packets in a capture, but
34 // row numbers in a QAbstractItemModel are ints, not unsigned ints,
35 // so we can only have 2^31-1 rows on ILP32, LP64, and LLP64 platforms.
36 // Does that mean we're permanently stuck at a maximum of 2^31-1 packets
37 // per capture?
39 class PacketList : public QTreeView
41 Q_OBJECT
42 public:
43 explicit PacketList(QWidget *parent = 0);
44 ~PacketList();
46 enum SummaryCopyType {
47 CopyAsText,
48 CopyAsCSV,
49 CopyAsYAML,
50 CopyAsHTML
52 Q_ENUM(SummaryCopyType)
54 virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = EnsureVisible) override;
55 QMenu *conversationMenu() { return &conv_menu_; }
56 QMenu *colorizeMenu() { return &colorize_menu_; }
57 void setProtoTree(ProtoTree *proto_tree);
59 /** Disable and clear the packet list.
61 * @param keep_current_frame If true, keep the selected frame.
62 * Disable packet list widget updates, clear the detail and byte views,
63 * and disconnect the model.
65 bool freeze(bool keep_current_frame = false);
66 /** Enable and restore the packet list.
68 * Enable packet list widget updates and reconnect the model.
70 * @param restore_selection If true, redissect the previously selected
71 * packet. This includes filling in the detail and byte views.
73 bool thaw(bool restore_selection = false);
74 void clear();
75 void writeRecent(FILE *rf);
76 bool contextMenuActive();
77 QString getFilterFromRowAndColumn(QModelIndex idx);
78 void resetColorized();
79 QString getPacketComment(unsigned c_number);
80 void addPacketComment(QString new_comment);
81 void setPacketComment(unsigned c_number, QString new_comment);
82 QString allPacketComments();
83 void deleteCommentsFromPackets();
84 void deleteAllPacketComments();
85 void setVerticalAutoScroll(bool enabled = true);
86 void setCaptureInProgress(bool in_progress = false, bool auto_scroll = true) { capture_in_progress_ = in_progress; tail_at_end_ = in_progress && auto_scroll; }
87 void captureFileReadFinished();
88 void resetColumns();
89 bool haveNextHistory(bool update_cur = false);
90 bool havePreviousHistory(bool update_cur = false);
91 void setProfileSwitcher(ProfileSwitcher *profile_switcher);
93 frame_data * getFDataForRow(int row) const;
95 bool uniqueSelectActive();
96 bool multiSelectActive();
97 QList<int> selectedRows(bool useFrameNum = false);
99 QString createSummaryText(QModelIndex idx, SummaryCopyType type);
100 QString createHeaderSummaryText(SummaryCopyType type);
102 QStringList createHeaderPartsForAligned();
103 QList<int> createAlignmentPartsForAligned();
104 QList<int> createSizePartsForAligned(bool useHeader, QStringList hdr_parts, QList<int> rows);
105 QString createHeaderSummaryForAligned(QStringList hdr_parts, QList<int> align_parts, QList<int> size_parts);
106 QString createSummaryForAligned(QModelIndex idx, QList<int> align_parts, QList<int> size_parts);
108 QString createDefaultStyleForHtml();
109 QString createOpeningTagForHtml();
110 QString createHeaderSummaryForHtml();
111 QString createSummaryForHtml(QModelIndex idx);
112 QString createClosingTagForHtml();
114 void resizeAllColumns(bool onlyTimeFormatted = false);
116 protected:
118 void selectionChanged(const QItemSelection & selected, const QItemSelection & deselected) override;
119 virtual void contextMenuEvent(QContextMenuEvent *event) override;
120 void timerEvent(QTimerEvent *event) override;
121 void paintEvent(QPaintEvent *event) override;
122 virtual void mousePressEvent (QMouseEvent *event) override;
123 virtual void mouseReleaseEvent (QMouseEvent *event) override;
124 virtual void mouseMoveEvent (QMouseEvent *event) override;
125 virtual void resizeEvent(QResizeEvent *event) override;
126 virtual void keyPressEvent(QKeyEvent *event) override;
128 protected slots:
129 void rowsInserted(const QModelIndex &parent, int start, int end) override;
130 virtual void drawRow(QPainter *painter, const QStyleOptionViewItem &option,
131 const QModelIndex &index) const override;
133 private:
134 PacketListModel *packet_list_model_;
135 PacketListHeader * packet_list_header_;
136 ProtoTree *proto_tree_;
137 capture_file *cap_file_;
138 QMenu conv_menu_;
139 QMenu colorize_menu_;
140 int ctx_column_;
141 QByteArray column_state_;
142 OverlayScrollBar *overlay_sb_;
143 int overlay_timer_id_;
144 bool create_near_overlay_;
145 bool create_far_overlay_;
146 QVector<QRgb> overlay_colors_;
147 bool changing_profile_;
149 QModelIndex mouse_pressed_at_;
151 RelatedPacketDelegate related_packet_delegate_;
152 QAction *show_hide_separator_;
153 QList<QAction *>show_hide_actions_;
154 bool capture_in_progress_;
155 bool tail_at_end_;
156 bool columns_changed_;
157 bool set_column_visibility_;
158 bool set_style_sheet_;
159 QModelIndex frozen_current_row_;
160 QModelIndexList frozen_selected_rows_;
161 QVector<int> selection_history_;
162 int cur_history_;
163 bool in_history_;
164 GPtrArray *finfo_array; // Packet data from the last selected packet entry
165 ProfileSwitcher *profile_switcher_;
167 void setFrameReftime(bool set, frame_data *fdata);
168 void setColumnVisibility();
169 int sizeHintForColumn(int column) const override;
170 void setRecentColumnWidth(int column);
171 void drawCurrentPacket();
172 void applyRecentColumnWidths();
173 void scrollViewChanged(bool at_end);
174 QString joinSummaryRow(QStringList col_parts, int row, SummaryCopyType type);
176 signals:
177 void packetDissectionChanged();
178 void showColumnPreferences(QString pane_name);
179 void editColumn(int column);
180 void packetListScrolled(bool at_end);
181 void showProtocolPreferences(const QString module_name);
182 void editProtocolPreference(struct preference *pref, struct pref_module *module);
184 void framesSelected(QList<int>);
185 void fieldSelected(FieldInformation *);
187 public slots:
188 void setCaptureFile(capture_file *cf);
189 void setMonospaceFont(const QFont &mono_font);
190 void setRegularFont(const QFont &regular_font);
191 void goNextPacket();
192 void goPreviousPacket();
193 void goFirstPacket();
194 void goLastPacket();
195 void goToPacket(int packet, int hf_id = -1);
196 void goNextHistoryPacket();
197 void goPreviousHistoryPacket();
198 void markFrame();
199 void markAllDisplayedFrames(bool set);
200 void ignoreFrame();
201 void ignoreAllDisplayedFrames(bool set);
202 void setTimeReference();
203 void unsetAllTimeReferences();
204 void applyTimeShift();
205 void recolorPackets();
206 void redrawVisiblePackets();
207 void redrawVisiblePacketsDontSelectCurrent();
208 void colorsChanged();
209 void columnsChanged();
210 void fieldsChanged(capture_file *cf);
211 void preferencesChanged();
212 void freezePacketList(bool changing_profile);
214 private slots:
215 void columnVisibilityTriggered();
216 void sectionResized(int col, int, int new_width);
217 void sectionMoved(int, int, int);
218 void updateRowHeights(const QModelIndex &ih_index);
219 void copySummary();
220 void vScrollBarActionTriggered(int);
221 void drawFarOverlay();
222 void drawNearOverlay();
223 void updatePackets(bool redraw);
224 void ctxDecodeAsDialog();
227 #endif // PACKET_LIST_H