<Ctrl>R to restart does not work [Wireshark Qt]
[metze/wireshark/wip.git] / ui / qt / main_window.h
1 /* main_window.h
2  *
3  * $Id$
4  *
5  * Wireshark - Network traffic analyzer
6  * By Gerald Combs <gerald@wireshark.org>
7  * Copyright 1998 Gerald Combs
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version 2
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23
24 #ifndef MAINWINDOW_H
25 #define MAINWINDOW_H
26
27 #include <stdio.h>
28
29 #include "config.h"
30
31 #include <glib.h>
32
33 #include "file.h"
34
35 #include "ui/ui_util.h"
36
37 #include <epan/prefs.h>
38
39 #ifdef HAVE_LIBPCAP
40 #include "capture_opts.h"
41 #endif
42 #include "capture_session.h"
43
44 #include <QMainWindow>
45 #include <QSplitter>
46
47 #ifdef _WIN32
48 # include <QTimer>
49 #else
50 # include <QSocketNotifier>
51 #endif
52
53 #include "main_welcome.h"
54 #include "packet_list.h"
55 #include "display_filter_combo.h"
56 #include "progress_bar.h"
57 #include "file_set_dialog.h"
58 #include "capture_file_dialog.h"
59 #include "summary_dialog.h"
60 #include "follow_stream_dialog.h"
61 #include "capture_interfaces_dialog.h"
62 #include "about_dialog.h"
63
64 class QAction;
65
66 namespace Ui {
67     class MainWindow;
68 }
69
70 class MainWindow : public QMainWindow
71 {
72     Q_OBJECT
73
74 public:
75     explicit MainWindow(QWidget *parent = 0);
76     ~MainWindow();
77     void setPipeInputHandler(gint source, gpointer user_data, int *child_process, pipe_input_cb_t input_cb);
78
79     QString getFilter();
80
81 protected:
82     bool eventFilter(QObject *obj, QEvent *event);
83     void keyPressEvent(QKeyEvent *event);
84     void closeEvent (QCloseEvent *event);
85
86 private:
87     enum MatchSelected {
88         MatchSelectedReplace,
89         MatchSelectedAnd,
90         MatchSelectedOr,
91         MatchSelectedNot,
92         MatchSelectedAndNot,
93         MatchSelectedOrNot
94     };
95
96     enum CopySelected {
97         CopySelectedDescription,
98         CopySelectedFieldName,
99         CopySelectedValue
100     };
101
102     Ui::MainWindow *main_ui_;
103     QMenu *open_recent_menu_;
104     QSplitter master_split_;
105     QSplitter extra_split_;
106     MainWelcome *main_welcome_;
107     DisplayFilterCombo *df_combo_box_;
108     capture_file *cap_file_;
109     // XXX - packet_list_, proto_tree_, and byte_view_tab_ should
110     // probably be full-on values instead of pointers.
111     PacketList *packet_list_;
112     ProtoTree *proto_tree_;
113     QWidget *previous_focus_;
114     FileSetDialog file_set_dialog_;
115     SummaryDialog summary_dialog_;
116     ByteViewTab *byte_view_tab_;
117     QWidget empty_pane_;
118
119     bool capture_stopping_;
120     bool capture_filter_valid_;
121 #ifdef HAVE_LIBPCAP
122     CaptureInterfacesDialog capture_interfaces_dialog_;
123 #endif
124
125     // Pipe input
126     gint                pipe_source_;
127     gpointer            pipe_user_data_;
128     int                 *pipe_child_process_;
129     pipe_input_cb_t     pipe_input_cb_;
130 #ifdef _WIN32
131     QTimer *pipe_timer_;
132 #else
133     QSocketNotifier *pipe_notifier_;
134 #endif
135
136     void saveWindowGeometry();
137     QWidget* getLayoutWidget(layout_pane_content_e type);
138
139     void mergeCaptureFile();
140     void importCaptureFile();
141     void saveCaptureFile(capture_file *cf, bool stay_closed);
142     void saveAsCaptureFile(capture_file *cf, bool must_support_comments, bool stay_closed);
143     void exportSelectedPackets();
144     void exportDissections(export_type_e export_type);
145
146     void fileAddExtension(QString &file_name, int file_type, bool compressed);
147     bool testCaptureFileClose(bool from_quit = false, QString& before_what = *new QString());
148     void captureStop();
149
150     void setTitlebarForSelectedTreeRow();
151     void setTitlebarForCaptureFile();
152     void setTitlebarForCaptureInProgress();
153     void setMenusForCaptureFile(bool force_disable = false);
154     void setMenusForCaptureInProgress(bool capture_in_progress = false);
155     void setMenusForCaptureStopping();
156     void setForCapturedPackets(bool have_captured_packets);
157     void setMenusForFileSet(bool enable_list_files);
158
159     void setForCaptureInProgress(gboolean capture_in_progress = false);
160
161 signals:
162     void showProgress(progdlg_t **dlg_p, bool animate, const QString message, bool terminate_is_stop, bool *stop_flag, float pct);
163     void setCaptureFile(capture_file *cf);
164     void setDissectedCaptureFile(capture_file *cf);
165     void displayFilterSuccess(bool success);
166
167 public slots:
168     // in main_window_slots.cpp
169     void openCaptureFile(QString& cf_path = *new QString(), QString &display_filter = *new QString());
170     void filterPackets(QString& new_filter = *new QString(), bool force = false);
171     void updateForUnsavedChanges();
172     void layoutPanes();
173
174     void captureCapturePrepared(capture_session *cap_session);
175     void captureCaptureUpdateStarted(capture_session *cap_session);
176     void captureCaptureUpdateFinished(capture_session *cap_session);
177     void captureCaptureFixedStarted(capture_session *cap_session);
178     void captureCaptureFixedFinished(capture_session *cap_session);
179     void captureCaptureStopping(capture_session *cap_session);
180     void captureCaptureFailed(capture_session *cap_session);
181
182     void captureFileOpened(const capture_file *cf);
183     void captureFileReadStarted(const capture_file *cf);
184     void captureFileReadFinished(const capture_file *cf);
185     void captureFileClosing(const capture_file *cf);
186     void captureFileClosed(const capture_file *cf);
187
188     void configurationProfileChanged(const gchar *profile_name);
189     void filterExpressionsChanged();
190
191 private slots:
192     // in main_window_slots.cpp
193     void startCapture();
194     void pipeTimeout();
195     void pipeActivated(int source);
196     void pipeNotifierDestroyed();
197     void stopCapture();
198
199     void loadWindowGeometry();
200     void updateRecentFiles();
201     void recentActionTriggered();
202     void setMenusForFollowStream();
203     void setMenusForSelectedPacket();
204     void setMenusForSelectedTreeRow(field_info *fi = NULL);
205     void interfaceSelectionChanged();
206     void captureFilterSyntaxChanged(bool valid);
207     void redissectPackets();
208     void recreatePacketList();
209
210     void setFeaturesEnabled(bool enabled = true);
211
212     void addDisplayFilterButton(QString df_text);
213     void displayFilterButtonClicked();
214
215     // We should probably move these to main_window_actions.cpp similar to
216     // gtk/main_menubar.c
217     void on_actionFileOpen_triggered();
218     void on_actionFileMerge_triggered();
219     void on_actionFileImportFromHexDump_triggered();
220     void on_actionFileClose_triggered();
221     void on_actionFileSave_triggered();
222     void on_actionFileSaveAs_triggered();
223     void on_actionFileSetListFiles_triggered();
224     void on_actionFileSetNextFile_triggered();
225     void on_actionFileSetPreviousFile_triggered();
226     void on_actionFileExportPackets_triggered();
227     void on_actionFileExportAsPlainText_triggered();
228     // We're dropping PostScript exports
229     void on_actionFileExportAsCSV_triggered();
230     void on_actionFileExportAsCArrays_triggered();
231     void on_actionFileExportAsPSML_triggered();
232     void on_actionFileExportAsPDML_triggered();
233     void on_actionFileExportPacketBytes_triggered();
234     void on_actionFileExportObjectsDICOM_triggered();
235     void on_actionFileExportObjectsHTTP_triggered();
236     void on_actionFileExportObjectsSMB_triggered();
237     void on_actionFilePrint_triggered();
238
239     void on_actionFileExportSSLSessionKeys_triggered();
240
241     void actionEditCopyTriggered(MainWindow::CopySelected selection_type);
242     void on_actionEditCopyDescription_triggered();
243     void on_actionEditCopyFieldName_triggered();
244     void on_actionEditCopyValue_triggered();
245     void on_actionEditCopyAsFilter_triggered();
246     void on_actionEditFindPacket_triggered();
247     void on_actionEditFindNext_triggered();
248     void on_actionEditFindPrevious_triggered();
249     void on_actionEditMarkPacket_triggered();
250     void on_actionEditMarkAllDisplayed_triggered();
251     void on_actionEditUnmarkAllDisplayed_triggered();
252     void on_actionEditNextMark_triggered();
253     void on_actionEditPreviousMark_triggered();
254     void on_actionEditIgnorePacket_triggered();
255     void on_actionEditIgnoreAllDisplayed_triggered();
256     void on_actionEditUnignoreAllDisplayed_triggered();
257     void on_actionEditSetTimeReference_triggered();
258     void on_actionEditUnsetAllTimeReferences_triggered();
259     void on_actionEditNextTimeReference_triggered();
260     void on_actionEditPreviousTimeReference_triggered();
261     void on_actionEditTimeShift_triggered();
262     void on_actionEditPacketComment_triggered();
263     void on_actionEditConfigurationProfiles_triggered();
264     void on_actionEditPreferences_triggered();
265
266     void on_actionViewReload_triggered();
267
268     void on_actionGoGoToPacket_triggered();
269     void resetPreviousFocus();
270
271 #ifdef HAVE_LIBPCAP
272     void on_actionCaptureOptions_triggered();
273 #endif
274
275     void matchSelectedFilter(MainWindow::MatchSelected filter_type, bool apply = false, bool copy_only = false);
276     void on_actionAnalyzeAAFSelected_triggered();
277     void on_actionAnalyzeAAFNotSelected_triggered();
278     void on_actionAnalyzeAAFAndSelected_triggered();
279     void on_actionAnalyzeAAFOrSelected_triggered();
280     void on_actionAnalyzeAAFAndNotSelected_triggered();
281     void on_actionAnalyzeAAFOrNotSelected_triggered();
282     void on_actionAnalyzePAFSelected_triggered();
283     void on_actionAnalyzePAFNotSelected_triggered();
284     void on_actionAnalyzePAFAndSelected_triggered();
285     void on_actionAnalyzePAFOrSelected_triggered();
286     void on_actionAnalyzePAFAndNotSelected_triggered();
287     void on_actionAnalyzePAFOrNotSelected_triggered();
288
289     void on_actionAnalyzeDecodeAs_triggered();
290
291     void openFollowStreamDialog(follow_type_t type);
292     void on_actionAnalyzeFollowTCPStream_triggered();
293     void on_actionAnalyzeFollowUDPStream_triggered();
294     void on_actionAnalyzeFollowSSLStream_triggered();
295
296     void on_actionHelpContents_triggered();
297     void on_actionHelpMPWireshark_triggered();
298     void on_actionHelpMPWireshark_Filter_triggered();
299     void on_actionHelpMPCapinfos_triggered();
300     void on_actionHelpMPDumpcap_triggered();
301     void on_actionHelpMPEditcap_triggered();
302     void on_actionHelpMPMergecap_triggered();
303     void on_actionHelpMPRawShark_triggered();
304     void on_actionHelpMPReordercap_triggered();
305     void on_actionHelpMPText2cap_triggered();
306     void on_actionHelpMPTShark_triggered();
307     void on_actionHelpWebsite_triggered();
308     void on_actionHelpFAQ_triggered();
309     void on_actionHelpAsk_triggered();
310     void on_actionHelpDownloads_triggered();
311     void on_actionHelpWiki_triggered();
312     void on_actionHelpSampleCaptures_triggered();
313     void on_actionHelpAbout_triggered();
314
315 #ifdef HAVE_SOFTWARE_UPDATE
316     void on_actionHelpCheckForUpdates_triggered();
317 #endif
318
319     void on_goToCancel_clicked();
320     void on_goToGo_clicked();
321     void on_goToLineEdit_returnPressed();
322     void on_actionStartCapture_triggered();
323     void on_actionStopCapture_triggered();
324
325     void on_actionSummary_triggered();
326     void on_actionStatisticsFlowGraph_triggered();
327     void openTcpStreamDialog(int graph_type);
328     void on_actionStatisticsTcpStreamStevens_triggered();
329     void on_actionStatisticsTcpStreamTcptrace_triggered();
330     void on_actionStatisticsTcpStreamThroughput_triggered();
331     void on_actionStatisticsTcpStreamRoundTripTime_triggered();
332     void on_actionStatisticsTcpStreamWindowScaling_triggered();
333     void openSCTPAllAssocsDialog();
334     void on_actionSCTPShowAllAssociations_triggered();
335     void on_actionSCTPAnalyseThisAssociation_triggered();
336     void on_actionSCTPFilterThisAssociation_triggered();
337
338 #ifdef HAVE_LIBPCAP
339     void on_actionCaptureInterfaces_triggered();
340 #endif
341
342     void openStatisticsTreeDialog(const gchar *abbr);
343     void on_actionStatisticsANCP_triggered();
344     void on_actionStatisticsBACappInstanceId_triggered();
345     void on_actionStatisticsBACappIP_triggered();
346     void on_actionStatisticsBACappObjectId_triggered();
347     void on_actionStatisticsBACappService_triggered();
348     void on_actionStatisticsCollectd_triggered();
349     void on_actionStatisticsHART_IP_triggered();
350     void on_actionStatisticsHTTPPacketCounter_triggered();
351     void on_actionStatisticsHTTPRequests_triggered();
352     void on_actionStatisticsHTTPLoadDistribution_triggered();
353     void on_actionStatisticsPacketLen_triggered();
354     void on_actionStatisticsSametime_triggered();
355
356     void on_actionTelephonyISUPMessages_triggered();
357     void on_actionTelephonyRTSPPacketCounter_triggered();
358     void on_actionTelephonySMPPOperations_triggered();
359     void on_actionTelephonyUCPMessages_triggered();
360 };
361
362 #endif // MAINWINDOW_H
363
364 /*
365  * Editor modelines
366  *
367  * Local Variables:
368  * c-basic-offset: 4
369  * tab-width: 8
370  * indent-tabs-mode: nil
371  * End:
372  *
373  * ex: set shiftwidth=4 tabstop=8 expandtab:
374  * :indentSize=4:tabSize=8:noTabs=true:
375  */