diff options
-rw-r--r-- | ui/qt/main_window.h | 1 | ||||
-rw-r--r-- | ui/qt/main_window_slots.cpp | 17 | ||||
-rw-r--r-- | ui/qt/module_preferences_scroll_area.h | 2 | ||||
-rw-r--r-- | ui/qt/preferences_dialog.cpp | 38 | ||||
-rw-r--r-- | ui/qt/preferences_dialog.h | 6 |
5 files changed, 53 insertions, 11 deletions
diff --git a/ui/qt/main_window.h b/ui/qt/main_window.h index bf8df911f9..cb50134d78 100644 --- a/ui/qt/main_window.h +++ b/ui/qt/main_window.h @@ -330,6 +330,7 @@ private slots: void on_actionEditPacketComment_triggered(); void on_actionEditConfigurationProfiles_triggered(); void showPreferencesDialog(PreferencesDialog::PreferencesPane start_pane = PreferencesDialog::ppAppearance); + void showPreferencesDialog(QString module_name); void on_actionEditPreferences_triggered(); void showHideMainWidgets(QAction *action); diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp index bfe6f81dbe..200bd2704e 100644 --- a/ui/qt/main_window_slots.cpp +++ b/ui/qt/main_window_slots.cpp @@ -1970,8 +1970,23 @@ void MainWindow::on_actionEditConfigurationProfiles_triggered() void MainWindow::showPreferencesDialog(PreferencesDialog::PreferencesPane start_pane) { - PreferencesDialog pref_dialog(this, start_pane); + PreferencesDialog pref_dialog(this); + pref_dialog.setPane(start_pane); + pref_dialog.exec(); + + // Emitting PacketDissectionChanged directly from PreferencesDialog + // can cause problems. Queue them up and emit them here. + foreach (WiresharkApplication::AppSignal app_signal, pref_dialog.appSignals()) { + wsApp->emitAppSignal(app_signal); + } +} + +void MainWindow::showPreferencesDialog(QString module_name) +{ + PreferencesDialog pref_dialog(this); + + pref_dialog.setPane(module_name); pref_dialog.exec(); // Emitting PacketDissectionChanged directly from PreferencesDialog diff --git a/ui/qt/module_preferences_scroll_area.h b/ui/qt/module_preferences_scroll_area.h index 302cdbb8b1..c2bfb72eb3 100644 --- a/ui/qt/module_preferences_scroll_area.h +++ b/ui/qt/module_preferences_scroll_area.h @@ -29,6 +29,7 @@ #include "color.h" #include <epan/prefs.h> +#include <epan/prefs-int.h> #include <QScrollArea> @@ -43,6 +44,7 @@ class ModulePreferencesScrollArea : public QScrollArea public: explicit ModulePreferencesScrollArea(module_t *module, QWidget *parent = 0); ~ModulePreferencesScrollArea(); + const QString name() const { return QString(module_->name); } protected: void showEvent(QShowEvent *); diff --git a/ui/qt/preferences_dialog.cpp b/ui/qt/preferences_dialog.cpp index b69435e459..b8e4a38890 100644 --- a/ui/qt/preferences_dialog.cpp +++ b/ui/qt/preferences_dialog.cpp @@ -195,9 +195,6 @@ module_prefs_show(module_t *module, gpointer ti_ptr) /* Scrolled window */ ModulePreferencesScrollArea *mpsa = new ModulePreferencesScrollArea(module); -// /* Associate this module with the page's frame. */ -// g_object_set_data(G_OBJECT(frame), E_PAGE_MODULE_KEY, module); - /* Add the page to the notebook */ stacked_widget->addWidget(mpsa); @@ -261,7 +258,7 @@ const int capture_item_ = 1; // We store the saved and current preference values in the "Advanced" tree columns const int pref_ptr_col_ = 0; -PreferencesDialog::PreferencesDialog(QWidget *parent, PreferencesPane start_pane) : +PreferencesDialog::PreferencesDialog(QWidget *parent) : QDialog(parent), pd_ui_(new Ui::PreferencesDialog), cur_line_edit_(NULL), @@ -301,18 +298,21 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, PreferencesPane start_pane pd_ui_->prefsTree->invisibleRootItem()->child(capture_item_)->setDisabled(disable_capture); // PreferencesPane, prefsTree, and stackedWidget must all correspond to each other. + // This may not be the best way to go about enforcing that. QTreeWidgetItem *item = pd_ui_->prefsTree->itemAt(0,0); - QTreeWidgetItem *start_item = pd_ui_->prefsTree->invisibleRootItem()->child(0); item->setSelected(true); pd_ui_->stackedWidget->setCurrentIndex(0); for (int i = 0; i < pd_ui_->stackedWidget->count() && item; i++) { item->setData(0, Qt::UserRole, qVariantFromValue(pd_ui_->stackedWidget->widget(i))); - if (i == start_pane) { - start_item = item; - } item = pd_ui_->prefsTree->itemBelow(item); } - pd_ui_->prefsTree->setCurrentItem(start_item); + item = pd_ui_->prefsTree->topLevelItem(0); + prefs_pane_to_item_[ppAppearance] = item; + prefs_pane_to_item_[ppLayout] = item->child(0); + prefs_pane_to_item_[ppColumn] = item->child(1); + prefs_pane_to_item_[ppFontAndColor] = item->child(2); + prefs_pane_to_item_[ppCapture] = pd_ui_->prefsTree->topLevelItem(1); + prefs_pane_to_item_[ppFilterExpressions] = pd_ui_->prefsTree->topLevelItem(2); // Printing prefs don't apply here. module_t *print_module = prefs_find_module("print"); @@ -334,6 +334,26 @@ PreferencesDialog::~PreferencesDialog() prefs_modules_foreach_submodules(NULL, module_prefs_clean_stash, NULL); } +void PreferencesDialog::setPane(PreferencesDialog::PreferencesPane start_pane) +{ + if (prefs_pane_to_item_.contains(start_pane)) { + pd_ui_->prefsTree->setCurrentItem(prefs_pane_to_item_[start_pane]); + } +} + +void PreferencesDialog::setPane(const QString module_name) +{ + QTreeWidgetItemIterator pref_it(pd_ui_->prefsTree); + while (*pref_it) { + ModulePreferencesScrollArea *mpsa = qobject_cast<ModulePreferencesScrollArea *>((*pref_it)->data(0, Qt::UserRole).value<QWidget *>()); + if (mpsa && mpsa->name() == module_name) { + pd_ui_->prefsTree->setCurrentItem((*pref_it)); + break; + } + ++pref_it; + } +} + void PreferencesDialog::showEvent(QShowEvent *evt) { Q_UNUSED(evt); diff --git a/ui/qt/preferences_dialog.h b/ui/qt/preferences_dialog.h index 19e51c055e..7f083da461 100644 --- a/ui/qt/preferences_dialog.h +++ b/ui/qt/preferences_dialog.h @@ -59,8 +59,11 @@ public: ppFilterExpressions }; - explicit PreferencesDialog(QWidget *parent = 0, PreferencesPane start_pane = ppAppearance); + explicit PreferencesDialog(QWidget *parent = 0); ~PreferencesDialog(); + void setPane(PreferencesPane start_pane); + void setPane(const QString module_name); + const QList<WiresharkApplication::AppSignal> appSignals() const { return app_signals_; } protected: @@ -72,6 +75,7 @@ private: void updateItem(QTreeWidgetItem &item); Ui::PreferencesDialog *pd_ui_; + QHash<PreferencesDialog::PreferencesPane, QTreeWidgetItem *>prefs_pane_to_item_; int cur_pref_type_; QLineEdit *cur_line_edit_; QString saved_string_pref_; |