Wireshark  4.3.0
The Wireshark network protocol analyzer
main_application.h
Go to the documentation of this file.
1 
10 #ifndef MAIN_APPLICATION_H
11 #define MAIN_APPLICATION_H
12 
13 #include <config.h>
14 
15 #include <glib.h>
16 
17 #include "wsutil/feature_list.h"
18 
19 #include "epan/register.h"
20 
21 #include "ui/help_url.h"
22 
23 #include <QApplication>
24 #include <QDir>
25 #include <QFont>
26 #include <QIcon>
27 #include <QTimer>
28 #include <QTranslator>
29 
30 #include "capture_event.h"
31 
32 struct _e_prefs;
33 
34 class QAction;
35 class QSocketNotifier;
36 
37 // Recent items:
38 // - Read from prefs
39 // - Add from open file
40 // - Check current list
41 // - Signal updated item
42 // -
43 typedef struct _recent_item_status {
44  QString filename;
45  qint64 size;
46  bool accessible;
47  bool in_thread;
49 
50 class MainApplication : public QApplication
51 {
52  Q_OBJECT
53 public:
54  explicit MainApplication(int &argc, char **argv);
55  ~MainApplication();
56 
57  enum AppSignal {
58  CaptureFilterListChanged,
59  ColumnsChanged,
60  DisplayFilterListChanged,
61  FieldsChanged,
62  FilterExpressionsChanged,
63  LocalInterfacesChanged,
64  NameResolutionChanged,
65  PacketDissectionChanged,
66  PreferencesChanged,
67  ProfileChanging,
68  RecentCapturesChanged,
69  RecentPreferencesRead,
70  FreezePacketList
71  };
72 
73  enum MainMenuItem {
74  FileOpenDialog,
75  CaptureOptionsDialog
76  };
77 
78  enum StatusInfo {
79  FilterSyntax,
80  FieldStatus,
81  FileStatus,
82  BusyStatus,
83  ByteStatus,
84  TemporaryStatus
85  };
86 
87  void registerUpdate(register_action_e action, const char *message);
88  void emitAppSignal(AppSignal signal);
89  // Emitting app signals (PacketDissectionChanged in particular) from
90  // dialogs on macOS can be problematic. Dialogs should call queueAppSignal
91  // instead.
92  void queueAppSignal(AppSignal signal) { app_signals_ << signal; }
93  void emitStatCommandSignal(const QString &menu_path, const char *arg, void *userdata);
94  void emitTapParameterSignal(const QString cfg_abbr, const QString arg, void *userdata);
95  void addDynamicMenuGroupItem(int group, QAction *sg_action);
96  void appendDynamicMenuGroupItem(int group, QAction *sg_action);
97  void removeDynamicMenuGroupItem(int group, QAction *sg_action);
98  QList<QAction *> dynamicMenuGroupItems(int group);
99  QList<QAction *> addedMenuGroupItems(int group);
100  QList<QAction *> removedMenuGroupItems(int group);
101  void clearAddedMenuGroupItems();
102  void clearRemovedMenuGroupItems();
103 
104  void allSystemsGo();
105  void emitLocalInterfaceEvent(const char *ifname, int added, int up);
106 
107  virtual void refreshLocalInterfaces();
108 
109  struct _e_prefs * readConfigurationFiles(bool reset);
110  QList<recent_item_status *> recentItems() const;
111  void addRecentItem(const QString filename, qint64 size, bool accessible);
112  void removeRecentItem(const QString &filename);
113  QDir lastOpenDir();
114  void setLastOpenDir(const char *dir_name);
115  void setLastOpenDirFromFilename(QString file_name);
116  void helpTopicAction(topic_action_e action);
117  const QFont monospaceFont(bool zoomed = false) const;
118  void setMonospaceFont(const char *font_string);
119  int monospaceTextSize(const char *str);
120  void setConfigurationProfile(const gchar *profile_name, bool write_recent_file = true);
121  void reloadLuaPluginsDelayed();
122  bool isInitialized() { return initialized_; }
123  void setReloadingLua(bool is_reloading) { is_reloading_lua_ = is_reloading; }
124  bool isReloadingLua() { return is_reloading_lua_; }
125  const QIcon &normalIcon();
126  const QIcon &captureIcon();
127  const QString &windowTitleSeparator() const { return window_title_separator_; }
128  const QString windowTitleString(QStringList title_parts);
129  const QString windowTitleString(QString title_part) { return windowTitleString(QStringList() << title_part); }
130  void applyCustomColorsFromRecent();
131 #if defined(HAVE_SOFTWARE_UPDATE) && defined(Q_OS_WIN)
132  void rejectSoftwareUpdate() { software_update_ok_ = false; }
133  bool softwareUpdateCanShutdown();
134  void softwareUpdateShutdownRequest();
135 #endif
136  QWidget *mainWindow();
137 
138  QTranslator translator;
139  QTranslator translatorQt;
140  void loadLanguage(const QString language);
141 
142  void doTriggerMenuItem(MainMenuItem menuItem);
143 
144  void zoomTextFont(int zoomLevel);
145 
146  void pushStatus(StatusInfo sinfo, const QString &message, const QString &messagetip = QString());
147  void popStatus(StatusInfo sinfo);
148 
149  void gotoFrame(int frameNum);
150 
151 private:
152  bool initialized_;
153  bool is_reloading_lua_;
154  QFont mono_font_;
155  QFont zoomed_font_;
156  QTimer recent_timer_;
157  QTimer packet_data_timer_;
158  QTimer tap_update_timer_;
159  QList<QString> pending_open_files_;
160  QSocketNotifier *if_notifier_;
161  static QString window_title_separator_;
162  QList<AppSignal> app_signals_;
163  int active_captures_;
164 #if defined(HAVE_SOFTWARE_UPDATE) && defined(Q_OS_WIN)
165  bool software_update_ok_;
166 #endif
167 
168  void storeCustomColorsInRecent();
169  void clearDynamicMenuGroupItems();
170 
171 protected:
172  bool event(QEvent *event);
173  virtual void initializeIcons() = 0;
174 
175  QIcon normal_icon_;
176  QIcon capture_icon_;
177 
178 signals:
179  void appInitialized();
180  void localInterfaceEvent(const char *ifname, int added, int up);
181  void localInterfaceListChanged();
182  void openCaptureFile(QString cf_path, QString display_filter, unsigned int type);
183  void openCaptureOptions();
184  void recentPreferencesRead();
185  void updateRecentCaptureStatus(const QString &filename, qint64 size, bool accessible);
186  void splashUpdate(register_action_e action, const char *message);
187  void profileChanging();
188  void profileNameChanged(const gchar *profile_name);
189 
190  void freezePacketList(bool changing_profile);
191  void columnsChanged(); // XXX This recreates the packet list. We might want to rename it accordingly.
192  void captureFilterListChanged();
193  void displayFilterListChanged();
194  void filterExpressionsChanged();
195  void packetDissectionChanged();
196  void preferencesChanged();
197  void addressResolutionChanged();
198  void columnDataChanged();
199  void checkDisplayFilter();
200  void fieldsChanged();
201  void reloadLuaPlugins();
202 #if defined(HAVE_SOFTWARE_UPDATE) && defined(Q_OS_WIN)
203  // Each of these are called from a separate thread.
204  void softwareUpdateRequested();
205  void softwareUpdateClose();
206  void softwareUpdateQuit();
207 #endif
208 
209  void openStatCommandDialog(const QString &menu_path, const char *arg, void *userdata);
210  void openTapParameterDialog(const QString cfg_str, const QString arg, void *userdata);
211 
212  /* Signals activation and stop of a capture. The value provides the number of active captures */
213  void captureActive(int);
214 
215  void zoomRegularFont(const QFont & font);
216  void zoomMonospaceFont(const QFont & font);
217 
218 public slots:
219  void clearRecentCaptures();
220  void refreshRecentCaptures();
221 
222  void captureEventHandler(CaptureEvent);
223 
224  // Flush queued app signals. Should be called from the main window after
225  // each dialog that calls queueAppSignal closes.
226  void flushAppSignals();
227 
228 private slots:
229  void updateTaps();
230 
231  void cleanup();
232  void ifChangeEventsAvailable();
233  void itemStatusFinished(const QString filename = "", qint64 size = 0, bool accessible = false);
234  void refreshPacketData();
235 #if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) && defined(Q_OS_WIN)
236  void colorSchemeChanged();
237 #endif
238 };
239 
240 extern MainApplication *mainApp;
241 
243 extern void gather_wireshark_qt_compiled_info(feature_list l);
245 extern void gather_wireshark_runtime_info(feature_list l);
246 #endif // MAIN_APPLICATION_H
Definition: capture_event.h:20
Definition: main_application.h:51
void gather_wireshark_runtime_info(feature_list l)
Definition: logray_main.cpp:238
void gather_wireshark_qt_compiled_info(feature_list l)
Definition: logray_main.cpp:201
QString lastOpenDir()
Return the last directory that had been opened.
Definition: qt_ui_utils.cpp:309
Definition: prefs.h:137
Definition: main_application.h:43