summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ui/qt/main_window.h1
-rw-r--r--ui/qt/main_window_slots.cpp17
-rw-r--r--ui/qt/module_preferences_scroll_area.h2
-rw-r--r--ui/qt/preferences_dialog.cpp38
-rw-r--r--ui/qt/preferences_dialog.h6
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_;