Add a timeline view for packets, with the timing data used to generate the display
[gd/wireshark/.git] / ui / qt / main_window.h
1 /* main_window.h
2  *
3  * Wireshark - Network traffic analyzer
4  * By Gerald Combs <gerald@wireshark.org>
5  * Copyright 1998 Gerald Combs
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21
22 #ifndef MAINWINDOW_H
23 #define MAINWINDOW_H
24
25 #include <stdio.h>
26
27 #include <config.h>
28
29 #include <glib.h>
30
31 #include "file.h"
32
33 #include "ui/ui_util.h"
34 #include "ui/iface_toolbar.h"
35
36 #include <epan/prefs.h>
37 #include <epan/plugin_if.h>
38 #include <epan/timestamp.h>
39
40 #ifdef HAVE_LIBPCAP
41 #include "capture_opts.h"
42 #endif
43 #include <capchild/capture_session.h>
44
45 #include <QMainWindow>
46 #include <QSplitter>
47
48 #ifdef _WIN32
49 # include <QTimer>
50 #else
51 # include <QSocketNotifier>
52 #endif
53
54 #include "capture_file.h"
55 #include "capture_file_dialog.h"
56 #include "capture_file_properties_dialog.h"
57 #include "display_filter_combo.h"
58 #include "filter_action.h"
59 #include "follow_stream_dialog.h"
60 #include "preferences_dialog.h"
61
62 class AccordionFrame;
63 class ByteViewTab;
64 class CaptureInterfacesDialog;
65 class FileSetDialog;
66 class FunnelStatistics;
67 class MainWelcome;
68 class PacketList;
69 class WirelessTimeline;
70 class ProtoTree;
71 class WirelessFrame;
72
73 class QAction;
74 class QActionGroup;
75
76 namespace Ui {
77     class MainWindow;
78 }
79
80 Q_DECLARE_METATYPE(ts_type)
81 Q_DECLARE_METATYPE(ts_precision)
82
83 class MainWindow : public QMainWindow
84 {
85     Q_OBJECT
86
87 public:
88     explicit MainWindow(QWidget *parent = 0);
89     ~MainWindow();
90     void setPipeInputHandler(gint source, gpointer user_data, ws_process_id *child_process, pipe_input_cb_t input_cb);
91
92     QString getFilter();
93 #ifdef HAVE_LIBPCAP
94     capture_session *captureSession() { return &cap_session_; }
95     info_data_t *captureInfoData() { return &info_data_; }
96 #endif
97
98     virtual QMenu *createPopupMenu();
99
100     void gotoFrame(int packet_num);
101     CaptureFile *captureFile() { return &capture_file_; }
102
103     void removeAdditionalToolbar(QString toolbarName);
104
105     void addInterfaceToolbar(const iface_toolbar *toolbar_entry);
106     void removeInterfaceToolbar(const gchar *menu_title);
107
108 protected:
109     virtual bool eventFilter(QObject *obj, QEvent *event);
110     virtual void keyPressEvent(QKeyEvent *event);
111     virtual void closeEvent(QCloseEvent *event);
112     virtual void dragEnterEvent(QDragEnterEvent *event);
113     virtual void dropEvent(QDropEvent *event);
114     virtual void changeEvent(QEvent* event);
115     virtual void resizeEvent(QResizeEvent *event);
116
117
118 private:
119     // XXX Move to FilterUtils
120     enum MatchSelected {
121         MatchSelectedReplace,
122         MatchSelectedAnd,
123         MatchSelectedOr,
124         MatchSelectedNot,
125         MatchSelectedAndNot,
126         MatchSelectedOrNot
127     };
128
129     enum CopySelected {
130         CopyAllVisibleItems,
131         CopyAllVisibleSelectedTreeItems,
132         CopySelectedDescription,
133         CopySelectedFieldName,
134         CopySelectedValue
135     };
136
137     enum FileCloseContext {
138         Default,
139         Quit,
140         Restart,
141         Reload
142     };
143
144     Ui::MainWindow *main_ui_;
145     QSplitter master_split_;
146     QSplitter extra_split_;
147     QVector<unsigned> cur_layout_;
148     MainWelcome *main_welcome_;
149     DisplayFilterCombo *df_combo_box_;
150     CaptureFile capture_file_;
151     QFont mono_font_;
152     WirelessFrame *wireless_frame_;
153     // XXX - packet_list_, proto_tree_, and byte_view_tab_ should
154     // probably be full-on values instead of pointers.
155     PacketList *packet_list_;
156     WirelessTimeline *wireless_timeline_;
157     ProtoTree *proto_tree_;
158     QWidget *previous_focus_;
159     FileSetDialog *file_set_dialog_;
160     ByteViewTab *byte_view_tab_;
161     QWidget empty_pane_;
162     QActionGroup *show_hide_actions_;
163     QActionGroup *time_display_actions_;
164     QActionGroup *time_precision_actions_;
165     FunnelStatistics *funnel_statistics_;
166     QList<QPair<QAction *, bool> > freeze_actions_;
167     QWidget *freeze_focus_;
168     QMap<QAction *, ts_type> td_actions;
169     QMap<QAction *, ts_precision> tp_actions;
170     QToolBar *filter_expression_toolbar_;
171     bool was_maximized_;
172
173     bool capture_stopping_;
174     bool capture_filter_valid_;
175 #ifdef HAVE_LIBPCAP
176     capture_session cap_session_;
177     CaptureInterfacesDialog *capture_interfaces_dialog_;
178     info_data_t info_data_;
179 #endif
180
181     // Pipe input
182     gint                pipe_source_;
183     gpointer            pipe_user_data_;
184     ws_process_id      *pipe_child_process_;
185     pipe_input_cb_t     pipe_input_cb_;
186 #ifdef _WIN32
187     QTimer *pipe_timer_;
188 #else
189     QSocketNotifier *pipe_notifier_;
190 #endif
191
192 #if defined(Q_OS_MAC) && QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
193     QMenu *dock_menu_;
194 #endif
195
196 #ifdef HAVE_SOFTWARE_UPDATE
197     QAction *update_action_;
198 #endif
199
200     QWidget* getLayoutWidget(layout_pane_content_e type);
201
202     void freeze();
203     void thaw();
204
205     void mergeCaptureFile();
206     void importCaptureFile();
207     bool saveCaptureFile(capture_file *cf, bool dont_reopen);
208     bool saveAsCaptureFile(capture_file *cf, bool must_support_comments = false, bool dont_reopen = false);
209     void exportSelectedPackets();
210     void exportDissections(export_type_e export_type);
211
212     void fileAddExtension(QString &file_name, int file_type, bool compressed);
213     bool testCaptureFileClose(QString before_what, FileCloseContext context = Default);
214     void captureStop();
215
216     void initMainToolbarIcons();
217     void initShowHideMainWidgets();
218     void initTimeDisplayFormatMenu();
219     void initTimePrecisionFormatMenu();
220     void initFreezeActions();
221
222     void setTitlebarForCaptureInProgress();
223     void setMenusForCaptureFile(bool force_disable = false);
224     void setMenusForCaptureInProgress(bool capture_in_progress = false);
225     void setMenusForCaptureStopping();
226     void setForCapturedPackets(bool have_captured_packets);
227     void setMenusForFileSet(bool enable_list_files);
228     void setWindowIcon(const QIcon &icon);
229     QString replaceWindowTitleVariables(QString title);
230
231     void externalMenuHelper(ext_menu_t * menu, QMenu  * subMenu, gint depth);
232
233     void setForCaptureInProgress(bool capture_in_progress = false, GArray *ifaces = NULL);
234     QMenu* findOrAddMenu(QMenu *parent_menu, QString& menu_text);
235
236     void recursiveCopyProtoTreeItems(QTreeWidgetItem *item, QString &clip, int ident_level);
237     void captureFileReadStarted(const QString &action);
238
239     void addMenuActions(QList<QAction *> &actions, int menu_group);
240     void removeMenuActions(QList<QAction *> &actions, int menu_group);
241     void goToConversationFrame(bool go_next);
242     void colorizeWithFilter(QByteArray filter, int color_number = -1);
243
244 signals:
245     void setCaptureFile(capture_file *cf);
246     void setDissectedCaptureFile(capture_file *cf);
247     void displayFilterSuccess(bool success);
248     void monospaceFontChanged(const QFont &mono_font);
249     void closePacketDialogs();
250     void reloadFields();
251     void packetInfoChanged(struct _packet_info *pinfo);
252     void fieldFilterChanged(const QByteArray field_filter);
253     void filterAction(QString filter, FilterAction::Action action, FilterAction::ActionType type);
254
255 public slots:
256     // in main_window_slots.cpp
257     /**
258      * Open a capture file.
259      * @param cf_path Path to the file.
260      * @param display_filter Display filter to apply. May be empty.
261      * @param type File type.
262      * @return True on success, false on failure.
263      */
264     // XXX We might want to return a cf_read_status_t or a CaptureFile.
265     bool openCaptureFile(QString cf_path, QString display_filter, unsigned int type, gboolean is_tempfile = FALSE);
266     bool openCaptureFile(QString cf_path = QString(), QString display_filter = QString()) { return openCaptureFile(cf_path, display_filter, WTAP_TYPE_AUTO); }
267     void filterPackets(QString new_filter = QString(), bool force = false);
268     void updateForUnsavedChanges();
269     void layoutPanes();
270     void applyRecentPaneGeometry();
271     void layoutToolbars();
272     void updatePreferenceActions();
273     void updateRecentActions();
274
275     void setTitlebarForCaptureFile();
276     void setWSWindowTitle(QString title = QString());
277
278     void captureCapturePrepared(capture_session *);
279     void captureCaptureUpdateStarted(capture_session *);
280     void captureCaptureUpdateFinished(capture_session *);
281     void captureCaptureFixedStarted(capture_session *);
282     void captureCaptureFixedFinished(capture_session *cap_session);
283     void captureCaptureStopping(capture_session *);
284     void captureCaptureFailed(capture_session *);
285
286     void captureFileOpened();
287     void captureFileReadStarted() { captureFileReadStarted(tr("Loading")); }
288     void captureFileReadFinished();
289     void captureFileReloadStarted() { captureFileReadStarted(tr("Reloading")); }
290     void captureFileRescanStarted() { setMenusForCaptureFile(true); captureFileReadStarted(tr("Rescanning")); }
291     void captureFileRetapStarted();
292     void captureFileRetapFinished();
293     void captureFileMergeStarted();
294     void captureFileMergeFinished();
295     void captureFileFlushTapsData();
296     void captureFileClosing();
297     void captureFileClosed();
298     void captureFileSaveStarted(const QString &file_path);
299
300     void filterExpressionsChanged();
301
302     void launchRLCGraph(bool channelKnown, guint16 ueid, guint8 rlcMode,
303                         guint16 channelType, guint16 channelId, guint8 direction);
304
305     void on_actionViewFullScreen_triggered(bool checked);
306 private slots:
307     // Manually connected slots (no "on_<object>_<signal>").
308
309     void initViewColorizeMenu();
310     void initConversationMenus();
311     static gboolean addExportObjectsMenuItem(const void *key, void *value, void *userdata);
312     void initExportObjectsMenus();
313
314     // in main_window_slots.cpp
315     /**
316      * @brief startCapture
317      * Start capturing from the selected interfaces using the capture filter
318      * shown in the main welcome screen.
319      */
320     void startCapture();
321     void pipeTimeout();
322     void pipeActivated(int source);
323     void pipeNotifierDestroyed();
324     void stopCapture();
325
326     void loadWindowGeometry();
327     void saveWindowGeometry();
328     void mainStackChanged(int);
329     void updateRecentCaptures();
330     void recentActionTriggered();
331     void setMenusForSelectedPacket();
332     void setMenusForSelectedTreeRow(field_info *fi = NULL);
333     void interfaceSelectionChanged();
334     void captureFilterSyntaxChanged(bool valid);
335     void redissectPackets();
336     void checkDisplayFilter();
337     void fieldsChanged();
338     void reloadLuaPlugins();
339     void showAccordionFrame(AccordionFrame *show_frame, bool toggle = false);
340     void showColumnEditor(int column);
341     void showPreferenceEditor(); // module_t *, pref *
342     void addStatsPluginsToMenu();
343     void addDynamicMenus();
344     void reloadDynamicMenus();
345     void addPluginIFStructures();
346     QMenu * searchSubMenu(QString objectName);
347     void activatePluginIFToolbar(bool);
348
349     void startInterfaceCapture(bool valid, const QString capture_filter);
350
351     void applyGlobalCommandLineOptions();
352     void setFeaturesEnabled(bool enabled = true);
353
354     void on_actionDisplayFilterExpression_triggered();
355     void on_actionNewDisplayFilterExpression_triggered();
356     void displayFilterButtonClicked();
357
358     // Handle FilterAction signals
359     void queuedFilterAction(QString filter, FilterAction::Action action, FilterAction::ActionType type);
360
361     /** Pass stat cmd arguments to a slot.
362      * @param menu_path slot Partial slot name, e.g. "StatisticsIOGraph".
363      * @param arg "-z" argument, e.g. "io,stat".
364      * @param userdata Optional user data.
365      */
366     void openStatCommandDialog(const QString &menu_path, const char *arg, void *userdata);
367
368     /** Pass tap parameter arguments to a slot.
369      * @param cfg_str slot Partial slot name, e.g. "StatisticsAFPSrt".
370      * @param arg "-z" argument, e.g. "afp,srt".
371      * @param userdata Optional user data.
372      */
373     void openTapParameterDialog(const QString cfg_str, const QString arg, void *userdata);
374     void openTapParameterDialog();
375
376     void byteViewTabChanged(int tab_index);
377
378 #ifdef HAVE_SOFTWARE_UPDATE
379     void softwareUpdateRequested();
380 #endif
381
382     // Automatically connected slots ("on_<object>_<signal>").
383     //
384     // The slots below follow the naming conventaion described in
385     // http://doc.qt.io/qt-4.8/qmetaobject.html#connectSlotsByName and are
386     // automatically connected at initialization time via main_ui_->setupUi,
387     // which in turn calls connectSlotsByName.
388     //
389     // If you're manually connecting a signal to a slot, don't prefix its name
390     // with "on_". Otherwise you'll get runtime warnings.
391
392     // We might want move these to main_window_actions.cpp similar to
393     // gtk/main_menubar.c
394
395     void on_actionFileOpen_triggered();
396     void on_actionFileMerge_triggered();
397     void on_actionFileImportFromHexDump_triggered();
398     void on_actionFileClose_triggered();
399     void on_actionFileSave_triggered();
400     void on_actionFileSaveAs_triggered();
401     void on_actionFileSetListFiles_triggered();
402     void on_actionFileSetNextFile_triggered();
403     void on_actionFileSetPreviousFile_triggered();
404     void on_actionFileExportPackets_triggered();
405     void on_actionFileExportAsPlainText_triggered();
406     // We're dropping PostScript exports
407     void on_actionFileExportAsCSV_triggered();
408     void on_actionFileExportAsCArrays_triggered();
409     void on_actionFileExportAsPSML_triggered();
410     void on_actionFileExportAsPDML_triggered();
411     void on_actionFileExportAsJSON_triggered();
412     void on_actionFileExportPacketBytes_triggered();
413     void on_actionFilePrint_triggered();
414
415     void on_actionFileExportPDU_triggered();
416     void on_actionFileExportSSLSessionKeys_triggered();
417
418     void actionEditCopyTriggered(MainWindow::CopySelected selection_type);
419     void on_actionCopyAllVisibleItems_triggered();
420     void on_actionCopyAllVisibleSelectedTreeItems_triggered();
421     void on_actionEditCopyDescription_triggered();
422     void on_actionEditCopyFieldName_triggered();
423     void on_actionEditCopyValue_triggered();
424     void on_actionEditCopyAsFilter_triggered();
425     void on_actionEditFindPacket_triggered();
426     void on_actionEditFindNext_triggered();
427     void on_actionEditFindPrevious_triggered();
428     void on_actionEditMarkPacket_triggered();
429     void on_actionEditMarkAllDisplayed_triggered();
430     void on_actionEditUnmarkAllDisplayed_triggered();
431     void on_actionEditNextMark_triggered();
432     void on_actionEditPreviousMark_triggered();
433     void on_actionEditIgnorePacket_triggered();
434     void on_actionEditIgnoreAllDisplayed_triggered();
435     void on_actionEditUnignoreAllDisplayed_triggered();
436     void on_actionEditSetTimeReference_triggered();
437     void on_actionEditUnsetAllTimeReferences_triggered();
438     void on_actionEditNextTimeReference_triggered();
439     void on_actionEditPreviousTimeReference_triggered();
440     void on_actionEditTimeShift_triggered();
441     void on_actionEditPacketComment_triggered();
442     void on_actionEditConfigurationProfiles_triggered();
443     void showPreferencesDialog(PreferencesDialog::PreferencesPane start_pane = PreferencesDialog::ppAppearance);
444     void showPreferencesDialog(QString module_name);
445     void on_actionEditPreferences_triggered();
446
447     void showHideMainWidgets(QAction *action);
448     void setTimestampFormat(QAction *action);
449     void setTimestampPrecision(QAction *action);
450     void on_actionViewTimeDisplaySecondsWithHoursAndMinutes_triggered(bool checked);
451     void on_actionViewEditResolvedName_triggered();
452     void setNameResolution();
453     void on_actionViewNameResolutionPhysical_triggered();
454     void on_actionViewNameResolutionNetwork_triggered();
455     void on_actionViewNameResolutionTransport_triggered();
456     // XXX We're not porting the concurrency action from GTK+ on purpose.
457     void zoomText();
458     void on_actionViewZoomIn_triggered();
459     void on_actionViewZoomOut_triggered();
460     void on_actionViewNormalSize_triggered();
461     void on_actionWirelessTimelineZoomIn_triggered();
462     void on_actionWirelessTimelineZoomOut_triggered();
463     void on_actionWirelessTimelineZoomFullOut_triggered();
464     void on_actionViewColorizePacketList_triggered(bool checked);
465     void on_actionViewColoringRules_triggered();
466     void colorizeConversation(bool create_rule = false);
467     void colorizeActionTriggered();
468     void on_actionViewColorizeResetColorization_triggered();
469     void on_actionViewColorizeNewColoringRule_triggered();
470     void on_actionViewResetLayout_triggered();
471     void on_actionViewResizeColumns_triggered();
472
473     void on_actionViewInternalsConversationHashTables_triggered();
474     void on_actionViewInternalsDissectorTables_triggered();
475     void on_actionViewInternalsSupportedProtocols_triggered();
476
477     void openPacketDialog(bool from_reference = false);
478     void on_actionViewShowPacketInNewWindow_triggered();
479     void on_actionContextShowLinkedPacketInNewWindow_triggered();
480     void on_actionViewReload_triggered();
481     void on_actionViewReload_as_File_Format_or_Capture_triggered();
482
483     void on_actionGoGoToPacket_triggered();
484     void on_actionGoGoToLinkedPacket_triggered();
485     void on_actionGoNextConversationPacket_triggered();
486     void on_actionGoPreviousConversationPacket_triggered();
487     void on_actionGoAutoScroll_toggled(bool checked);
488     void resetPreviousFocus();
489
490     void on_actionCaptureOptions_triggered();
491 #ifdef HAVE_LIBPCAP
492     void on_actionCaptureRefreshInterfaces_triggered();
493 #endif
494     void on_actionCaptureCaptureFilters_triggered();
495
496     void on_actionAnalyzeDisplayFilters_triggered();
497     void on_actionAnalyzeDisplayFilterMacros_triggered();
498     void matchFieldFilter(FilterAction::Action action, FilterAction::ActionType filter_type);
499     void on_actionAnalyzeCreateAColumn_triggered();
500     void on_actionAnalyzeAAFSelected_triggered();
501     void on_actionAnalyzeAAFNotSelected_triggered();
502     void on_actionAnalyzeAAFAndSelected_triggered();
503     void on_actionAnalyzeAAFOrSelected_triggered();
504     void on_actionAnalyzeAAFAndNotSelected_triggered();
505     void on_actionAnalyzeAAFOrNotSelected_triggered();
506     void on_actionAnalyzePAFSelected_triggered();
507     void on_actionAnalyzePAFNotSelected_triggered();
508     void on_actionAnalyzePAFAndSelected_triggered();
509     void on_actionAnalyzePAFOrSelected_triggered();
510     void on_actionAnalyzePAFAndNotSelected_triggered();
511     void on_actionAnalyzePAFOrNotSelected_triggered();
512
513     void applyConversationFilter();
514     void applyExportObject();
515
516     void on_actionAnalyzeEnabledProtocols_triggered();
517     void on_actionAnalyzeDecodeAs_triggered();
518     void on_actionAnalyzeReloadLuaPlugins_triggered();
519
520     void openFollowStreamDialog(follow_type_t type);
521     void on_actionAnalyzeFollowTCPStream_triggered();
522     void on_actionAnalyzeFollowUDPStream_triggered();
523     void on_actionAnalyzeFollowSSLStream_triggered();
524     void on_actionAnalyzeFollowHTTPStream_triggered();
525     void statCommandExpertInfo(const char *, void *);
526     void on_actionAnalyzeExpertInfo_triggered();
527
528     void on_actionHelpContents_triggered();
529     void on_actionHelpMPWireshark_triggered();
530     void on_actionHelpMPWireshark_Filter_triggered();
531     void on_actionHelpMPCapinfos_triggered();
532     void on_actionHelpMPDumpcap_triggered();
533     void on_actionHelpMPEditcap_triggered();
534     void on_actionHelpMPMergecap_triggered();
535     void on_actionHelpMPRawShark_triggered();
536     void on_actionHelpMPReordercap_triggered();
537     void on_actionHelpMPText2cap_triggered();
538     void on_actionHelpMPTShark_triggered();
539     void on_actionHelpWebsite_triggered();
540     void on_actionHelpFAQ_triggered();
541     void on_actionHelpAsk_triggered();
542     void on_actionHelpDownloads_triggered();
543     void on_actionHelpWiki_triggered();
544     void on_actionHelpSampleCaptures_triggered();
545     void on_actionHelpAbout_triggered();
546
547 #ifdef HAVE_SOFTWARE_UPDATE
548     void checkForUpdates();
549 #endif
550
551     void on_goToCancel_clicked();
552     void on_goToGo_clicked();
553     void on_goToLineEdit_returnPressed();
554     void on_actionCaptureStart_triggered();
555     void on_actionCaptureStop_triggered();
556     void on_actionCaptureRestart_triggered();
557
558     void on_actionStatisticsCaptureFileProperties_triggered();
559     void on_actionStatisticsResolvedAddresses_triggered();
560     void on_actionStatisticsProtocolHierarchy_triggered();
561     void on_actionStatisticsFlowGraph_triggered();
562     void openTcpStreamDialog(int graph_type);
563     void on_actionStatisticsTcpStreamStevens_triggered();
564     void on_actionStatisticsTcpStreamTcptrace_triggered();
565     void on_actionStatisticsTcpStreamThroughput_triggered();
566     void on_actionStatisticsTcpStreamRoundTripTime_triggered();
567     void on_actionStatisticsTcpStreamWindowScaling_triggered();
568     void openSCTPAllAssocsDialog();
569     void on_actionSCTPShowAllAssociations_triggered();
570     void on_actionSCTPAnalyseThisAssociation_triggered();
571     void on_actionSCTPFilterThisAssociation_triggered();
572     void statCommandMulticastStatistics(const char *arg, void *);
573     void on_actionStatisticsUdpMulticastStreams_triggered();
574
575     void statCommandWlanStatistics(const char *arg, void *);
576     void on_actionWirelessWlanStatistics_triggered();
577
578     void openStatisticsTreeDialog(const gchar *abbr);
579     void on_actionStatistics29WestTopics_Advertisements_by_Topic_triggered();
580     void on_actionStatistics29WestTopics_Advertisements_by_Source_triggered();
581     void on_actionStatistics29WestTopics_Advertisements_by_Transport_triggered();
582     void on_actionStatistics29WestTopics_Queries_by_Topic_triggered();
583     void on_actionStatistics29WestTopics_Queries_by_Receiver_triggered();
584     void on_actionStatistics29WestTopics_Wildcard_Queries_by_Pattern_triggered();
585     void on_actionStatistics29WestTopics_Wildcard_Queries_by_Receiver_triggered();
586     void on_actionStatistics29WestQueues_Advertisements_by_Queue_triggered();
587     void on_actionStatistics29WestQueues_Advertisements_by_Source_triggered();
588     void on_actionStatistics29WestQueues_Queries_by_Queue_triggered();
589     void on_actionStatistics29WestQueues_Queries_by_Receiver_triggered();
590     void on_actionStatistics29WestUIM_Streams_triggered();
591     void on_actionStatistics29WestUIM_Stream_Flow_Graph_triggered();
592     void on_actionStatistics29WestLBTRM_triggered();
593     void on_actionStatistics29WestLBTRU_triggered();
594     void on_actionStatisticsANCP_triggered();
595     void on_actionStatisticsBACappInstanceId_triggered();
596     void on_actionStatisticsBACappIP_triggered();
597     void on_actionStatisticsBACappObjectId_triggered();
598     void on_actionStatisticsBACappService_triggered();
599     void on_actionStatisticsCollectd_triggered();
600     void statCommandConversations(const char *arg = NULL, void *userdata = NULL);
601     void on_actionStatisticsConversations_triggered();
602     void statCommandEndpoints(const char *arg = NULL, void *userdata = NULL);
603     void on_actionStatisticsEndpoints_triggered();
604     void on_actionStatisticsHART_IP_triggered();
605     void on_actionStatisticsHTTPPacketCounter_triggered();
606     void on_actionStatisticsHTTPRequests_triggered();
607     void on_actionStatisticsHTTPLoadDistribution_triggered();
608     void on_actionStatisticsPacketLengths_triggered();
609     void statCommandIOGraph(const char *, void *);
610     void on_actionStatisticsIOGraph_triggered();
611     void on_actionStatisticsSametime_triggered();
612     void on_actionStatisticsDNS_triggered();
613     void actionStatisticsPlugin_triggered();
614     void on_actionStatisticsHpfeeds_triggered();
615     void on_actionStatisticsHTTP2_triggered();
616
617     void openVoipCallsDialog(bool all_flows = false);
618     void on_actionTelephonyVoipCalls_triggered();
619     void on_actionTelephonyGsmMapSummary_triggered();
620     void statCommandLteMacStatistics(const char *arg, void *);
621     void on_actionTelephonyLteRlcStatistics_triggered();
622     void statCommandLteRlcStatistics(const char *arg, void *);
623     void on_actionTelephonyLteMacStatistics_triggered();
624     void on_actionTelephonyLteRlcGraph_triggered();
625     void on_actionTelephonyIax2StreamAnalysis_triggered();
626     void on_actionTelephonyISUPMessages_triggered();
627     void on_actionTelephonyMtp3Summary_triggered();
628     void on_actionTelephonyOsmuxPacketCounter_triggered();
629     void on_actionTelephonyRTPStreams_triggered();
630     void on_actionTelephonyRTPStreamAnalysis_triggered();
631     void on_actionTelephonyRTSPPacketCounter_triggered();
632     void on_actionTelephonySMPPOperations_triggered();
633     void on_actionTelephonyUCPMessages_triggered();
634     void on_actionTelephonySipFlows_triggered();
635
636     void on_actionBluetoothATT_Server_Attributes_triggered();
637     void on_actionBluetoothDevices_triggered();
638     void on_actionBluetoothHCI_Summary_triggered();
639
640     void on_actionToolsFirewallAclRules_triggered();
641
642     void externalMenuItem_triggered();
643
644     void on_actionContextCopyBytesHexTextDump_triggered();
645     void on_actionContextCopyBytesHexDump_triggered();
646     void on_actionContextCopyBytesPrintableText_triggered();
647     void on_actionContextCopyBytesHexStream_triggered();
648     void on_actionContextCopyBytesBinary_triggered();
649     void on_actionContextCopyBytesEscapedString_triggered();
650
651     void on_actionContextShowPacketBytes_triggered();
652
653     void on_actionContextWikiProtocolPage_triggered();
654     void on_actionContextFilterFieldReference_triggered();
655
656 #ifdef HAVE_EXTCAP
657     void extcap_options_finished(int result);
658     void showExtcapOptionsDialog(QString & device_name);
659 #endif
660 };
661
662 #endif // MAINWINDOW_H
663
664 /*
665  * Editor modelines
666  *
667  * Local Variables:
668  * c-basic-offset: 4
669  * tab-width: 8
670  * indent-tabs-mode: nil
671  * End:
672  *
673  * ex: set shiftwidth=4 tabstop=8 expandtab:
674  * :indentSize=4:tabSize=8:noTabs=true:
675  */