aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorAhmad Fatoum <ahmad@a3f.at>2017-04-14 11:33:57 +0200
committerPeter Wu <peter@lekensteyn.nl>2017-04-17 10:51:10 +0000
commitb478df61f54f08e0279d83e2cc11313fbdf28758 (patch)
tree99585c43e985315c471038eb5a95e3368e9e4a73 /ui
parentf63ad23ef9036a60e78e5efd45936aae1705d5ac (diff)
Qt: Provide both file save and open preferences
This is a breaking change. prefs_register_filename_preference hasn't been differentiating between files to be saved and ones to be opened. On GTK, a neutral dialog is used, so no problems there. On Qt, a save dialog has been always used, even in dissectors that were reading configuration files without modification. prefs_register_filename_preference now takes an argument to indicate whether UI could be a save dialog with a warning on overwriting a file, or whether it's a general purpose open file dialog. Qt now does this. Previously no warning was shown on overwriting a file, so it may be used for opening files too without irritating the user. This has been changed, as non-destructive reads should now use the open dialog. Dissectors were changed accordingly. Change-Id: I9087fefa5ee7ca58de0775d4fe2c0fdcfa3a3018 Reviewed-on: https://code.wireshark.org/review/21086 Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Diffstat (limited to 'ui')
-rw-r--r--ui/gtk/prefs_dlg.c9
-rw-r--r--ui/qt/module_preferences_scroll_area.cpp34
-rw-r--r--ui/qt/module_preferences_scroll_area.h3
-rw-r--r--ui/qt/preference_editor_frame.cpp2
-rw-r--r--ui/qt/preferences_dialog.cpp13
-rw-r--r--ui/qt/protocol_preferences_menu.cpp4
6 files changed, 48 insertions, 17 deletions
diff --git a/ui/gtk/prefs_dlg.c b/ui/gtk/prefs_dlg.c
index 0437a2b4f8..13d29f319d 100644
--- a/ui/gtk/prefs_dlg.c
+++ b/ui/gtk/prefs_dlg.c
@@ -199,7 +199,8 @@ pref_show(pref_t *pref, gpointer user_data)
prefs_get_string_value(pref, pref_stashed)));
break;
- case PREF_FILENAME:
+ case PREF_SAVE_FILENAME:
+ case PREF_OPEN_FILENAME:
prefs_set_control(pref, create_preference_path_entry(main_grid, prefs_get_ordinal(pref),
label_string,
tooltip_txt,
@@ -978,7 +979,8 @@ pref_check(pref_t *pref, gpointer user_data)
break;
case PREF_STRING:
- case PREF_FILENAME:
+ case PREF_SAVE_FILENAME:
+ case PREF_OPEN_FILENAME:
case PREF_DIRNAME:
/* Value can't be bad. */
break;
@@ -1090,7 +1092,8 @@ pref_fetch(pref_t *pref, gpointer user_data)
break;
case PREF_STRING:
- case PREF_FILENAME:
+ case PREF_SAVE_FILENAME:
+ case PREF_OPEN_FILENAME:
case PREF_DIRNAME:
str_val = gtk_entry_get_text(GTK_ENTRY(prefs_get_control(pref)));
module->prefs_changed |= prefs_set_string_value(pref, str_val, pref_current);
diff --git a/ui/qt/module_preferences_scroll_area.cpp b/ui/qt/module_preferences_scroll_area.cpp
index e4829c928c..0ff2589f0a 100644
--- a/ui/qt/module_preferences_scroll_area.cpp
+++ b/ui/qt/module_preferences_scroll_area.cpp
@@ -189,7 +189,8 @@ pref_show(pref_t *pref, gpointer layout_ptr)
vb->addLayout(hb);
break;
}
- case PREF_FILENAME:
+ case PREF_SAVE_FILENAME:
+ case PREF_OPEN_FILENAME:
case PREF_DIRNAME:
{
QLabel *label = new QLabel(prefs_get_title(pref));
@@ -260,7 +261,8 @@ ModulePreferencesScrollArea::ModulePreferencesScrollArea(module_t *module, QWidg
connect(le, SIGNAL(textEdited(QString)), this, SLOT(uintLineEditTextEdited(QString)));
break;
case PREF_STRING:
- case PREF_FILENAME:
+ case PREF_SAVE_FILENAME:
+ case PREF_OPEN_FILENAME:
case PREF_DIRNAME:
connect(le, SIGNAL(textEdited(QString)), this, SLOT(stringLineEditTextEdited(QString)));
break;
@@ -308,8 +310,11 @@ ModulePreferencesScrollArea::ModulePreferencesScrollArea(module_t *module, QWidg
case PREF_UAT:
connect(pb, SIGNAL(pressed()), this, SLOT(uatPushButtonPressed()));
break;
- case PREF_FILENAME:
- connect(pb, SIGNAL(pressed()), this, SLOT(filenamePushButtonPressed()));
+ case PREF_SAVE_FILENAME:
+ connect(pb, SIGNAL(pressed()), this, SLOT(saveFilenamePushButtonPressed()));
+ break;
+ case PREF_OPEN_FILENAME:
+ connect(pb, SIGNAL(pressed()), this, SLOT(openFilenamePushButtonPressed()));
break;
case PREF_DIRNAME:
connect(pb, SIGNAL(pressed()), this, SLOT(dirnamePushButtonPressed()));
@@ -483,7 +488,7 @@ void ModulePreferencesScrollArea::uatPushButtonPressed()
uat_dlg.exec();
}
-void ModulePreferencesScrollArea::filenamePushButtonPressed()
+void ModulePreferencesScrollArea::saveFilenamePushButtonPressed()
{
QPushButton *filename_pb = qobject_cast<QPushButton*>(sender());
if (!filename_pb) return;
@@ -492,9 +497,24 @@ void ModulePreferencesScrollArea::filenamePushButtonPressed()
if (!pref) return;
QString filename = QFileDialog::getSaveFileName(this, wsApp->windowTitleString(prefs_get_title(pref)),
- prefs_get_string_value(pref, pref_stashed), QString(), NULL,
- QFileDialog::DontConfirmOverwrite);
+ prefs_get_string_value(pref, pref_stashed));
+
+ if (!filename.isEmpty()) {
+ prefs_set_string_value(pref, QDir::toNativeSeparators(filename).toStdString().c_str(), pref_stashed);
+ updateWidgets();
+ }
+}
+
+void ModulePreferencesScrollArea::openFilenamePushButtonPressed()
+{
+ QPushButton *filename_pb = qobject_cast<QPushButton*>(sender());
+ if (!filename_pb) return;
+
+ pref_t *pref = VariantPointer<pref_t>::asPtr(filename_pb->property(pref_prop_));
+ if (!pref) return;
+ QString filename = QFileDialog::getOpenFileName(this, wsApp->windowTitleString(prefs_get_title(pref)),
+ prefs_get_string_value(pref, pref_stashed));
if (!filename.isEmpty()) {
prefs_set_string_value(pref, QDir::toNativeSeparators(filename).toStdString().c_str(), pref_stashed);
updateWidgets();
diff --git a/ui/qt/module_preferences_scroll_area.h b/ui/qt/module_preferences_scroll_area.h
index 7b46e8dfe8..458efdf0af 100644
--- a/ui/qt/module_preferences_scroll_area.h
+++ b/ui/qt/module_preferences_scroll_area.h
@@ -62,7 +62,8 @@ private slots:
void stringLineEditTextEdited(const QString &new_str);
void rangeSyntaxLineEditTextEdited(const QString &new_str);
void uatPushButtonPressed();
- void filenamePushButtonPressed();
+ void saveFilenamePushButtonPressed();
+ void openFilenamePushButtonPressed();
void dirnamePushButtonPressed();
};
diff --git a/ui/qt/preference_editor_frame.cpp b/ui/qt/preference_editor_frame.cpp
index 5ac034c6b4..3bdc552b6b 100644
--- a/ui/qt/preference_editor_frame.cpp
+++ b/ui/qt/preference_editor_frame.cpp
@@ -41,7 +41,7 @@
#include <QPushButton>
// To do:
-// - Handle PREF_FILENAME and PREF_DIRNAME.
+// - Handle PREF_SAVE_FILENAME, PREF_OPEN_FILENAME and PREF_DIRNAME.
PreferenceEditorFrame::PreferenceEditorFrame(QWidget *parent) :
AccordionFrame(parent),
diff --git a/ui/qt/preferences_dialog.cpp b/ui/qt/preferences_dialog.cpp
index 347ff58070..26b4c62fcd 100644
--- a/ui/qt/preferences_dialog.cpp
+++ b/ui/qt/preferences_dialog.cpp
@@ -684,18 +684,25 @@ void PreferencesDialog::on_advancedTree_itemActivated(QTreeWidgetItem *item, int
editor = cur_line_edit_;
break;
}
- case PREF_FILENAME:
+ case PREF_SAVE_FILENAME:
+ case PREF_OPEN_FILENAME:
case PREF_DIRNAME:
{
QString filename;
- if (prefs_get_type(pref) == PREF_FILENAME) {
+ if (prefs_get_type(pref) == PREF_SAVE_FILENAME) {
filename = QFileDialog::getSaveFileName(this, wsApp->windowTitleString(prefs_get_title(pref)),
prefs_get_string_value(pref, pref_stashed));
+
+ } else if (prefs_get_type(pref) == PREF_OPEN_FILENAME) {
+ filename = QFileDialog::getOpenFileName(this, wsApp->windowTitleString(prefs_get_title(pref)),
+ prefs_get_string_value(pref, pref_stashed));
+
} else {
filename = QFileDialog::getExistingDirectory(this, wsApp->windowTitleString(prefs_get_title(pref)),
- prefs_get_string_value(pref, pref_stashed));
+ prefs_get_string_value(pref, pref_stashed));
}
+
if (!filename.isEmpty()) {
prefs_set_string_value(pref, QDir::toNativeSeparators(filename).toStdString().c_str(), pref_stashed);
adv_ti->updatePref();
diff --git a/ui/qt/protocol_preferences_menu.cpp b/ui/qt/protocol_preferences_menu.cpp
index 75bade980b..f16aded36e 100644
--- a/ui/qt/protocol_preferences_menu.cpp
+++ b/ui/qt/protocol_preferences_menu.cpp
@@ -39,7 +39,7 @@
// To do:
// - Elide really long items?
-// - Handle PREF_FILENAME and PREF_DIRNAME.
+// - Handle PREF_SAVE_FILENAME, PREF_OPEN_FILENAME and PREF_DIRNAME.
// - Handle color prefs.
class BoolPreferenceAction : public QAction
@@ -244,7 +244,7 @@ void ProtocolPreferencesMenu::addMenuItem(preference *pref)
case PREF_OBSOLETE:
break;
default:
- // A type we currently don't handle (e.g. PREF_FILENAME). Just open
+ // A type we currently don't handle (e.g. PREF_SAVE_FILENAME). Just open
// the prefs dialog.
QString title = QString("%1" UTF8_HORIZONTAL_ELLIPSIS).arg(prefs_get_title(pref));
QAction *mpa = addAction(title);