diff options
author | Roland Knall <rknall@gmail.com> | 2019-07-09 15:38:30 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2019-07-11 04:49:27 +0000 |
commit | 20d70997ef6790b73edfa135b742c5af410bbe6a (patch) | |
tree | b581c308e704e291fe46805374942f44d11a44b3 /ui | |
parent | 4e7ac431a55ab8da9155e1f040d676569aa6d184 (diff) |
Qt: MainStatusbar and CopyFromProfileMenu to Model
Remove the profile.? specific implementation and move both
functions to profile model, makeing the class the single
source for profile related parsing
Change-Id: I61ecc2fc1f294e4e3943a00bb8522258c8ff8ec5
Reviewed-on: https://code.wireshark.org/review/33880
Petri-Dish: Roland Knall <rknall@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/qt/main_status_bar.cpp | 75 | ||||
-rw-r--r-- | ui/qt/models/profile_model.cpp | 3 | ||||
-rw-r--r-- | ui/qt/widgets/copy_from_profile_menu.cpp | 102 | ||||
-rw-r--r-- | ui/qt/widgets/copy_from_profile_menu.h | 5 |
4 files changed, 95 insertions, 90 deletions
diff --git a/ui/qt/main_status_bar.cpp b/ui/qt/main_status_bar.cpp index 834dbd9c24..2bd86d1451 100644 --- a/ui/qt/main_status_bar.cpp +++ b/ui/qt/main_status_bar.cpp @@ -20,7 +20,6 @@ #include <wsutil/utf8_entities.h> #include "ui/main_statusbar.h" -#include "ui/profile.h" #include <ui/qt/utils/qt_ui_utils.h> #include "capture_file.h" @@ -32,6 +31,7 @@ #include <ui/qt/widgets/clickable_label.h> #include <QAction> +#include <QActionGroup> #include <QHBoxLayout> #include <QSplitter> #include <QToolButton> @@ -535,47 +535,55 @@ void MainStatusBar::updateCaptureFixedStatistics(capture_session *cap_session) void MainStatusBar::showProfileMenu(const QPoint &global_pos, Qt::MouseButton button) { - const gchar *profile_name = get_profile_name(); - bool separator_added = false; - GList *fl_entry; - profile_def *profile; - QAction *pa; + ProfileModel model; - init_profile_list(); - fl_entry = current_profile_list(); + QActionGroup global(this); + QActionGroup user(this); - QMenu profile_menu_; + for(int cnt = 0; cnt < model.rowCount(); cnt++) + { + QModelIndex idx = model.index(cnt, ProfileModel::COL_NAME); + if ( ! idx.isValid() ) + continue; - while (fl_entry && fl_entry->data) { - profile = (profile_def *) fl_entry->data; - if (!profile->is_global || !profile_exists(profile->name, false)) { - if (profile->is_global && !separator_added) { - profile_menu_.addSeparator(); - separator_added = true; - } - pa = profile_menu_.addAction(profile->name); - if (strcmp(profile->name, profile_name) == 0) { - /* Current profile */ - pa->setCheckable(true); - pa->setChecked(true); - } - if (profile->is_global) { - QFont ti_font = pa->font(); - ti_font.setItalic(true); - pa->setFont(ti_font); - } - connect(pa, SIGNAL(triggered()), this, SLOT(switchToProfile())); + QAction * pa = Q_NULLPTR; + QString name = idx.data().toString(); + if ( idx.data(ProfileModel::DATA_IS_DEFAULT).toBool() || idx.data(ProfileModel::DATA_IS_GLOBAL).toBool() ) + { + /* Check if this profile does not exist as user */ + if ( cnt == model.findByName(name) ) + pa = global.addAction(name); } - fl_entry = g_list_next(fl_entry); + else + pa = user.addAction(name); + + if ( ! pa ) + continue; + + pa->setCheckable(true); + if ( idx.data(ProfileModel::DATA_IS_SELECTED).toBool() ) + pa->setChecked(true); + + pa->setFont(idx.data(Qt::FontRole).value<QFont>()); + pa->setProperty("profile_name", idx.data()); + pa->setProperty("profile_is_global", idx.data(ProfileModel::DATA_IS_GLOBAL)); + + connect(pa, &QAction::triggered, this, &MainStatusBar::switchToProfile); } + QMenu profile_menu_; + profile_menu_.addActions(global.actions()); + profile_menu_.addSeparator(); + profile_menu_.addActions(user.actions()); + if (button == Qt::LeftButton) { profile_menu_.exec(global_pos); } else { bool enable_edit = false; - const char * cur_profile = get_profile_name(); - if (profile_exists(cur_profile, FALSE) && strcmp (cur_profile, DEFAULT_PROFILE) != 0) + + QModelIndex idx = model.activeProfile(); + if ( ! idx.data(ProfileModel::DATA_IS_DEFAULT).toBool() && ! idx.data(ProfileModel::DATA_IS_GLOBAL).toBool() ) enable_edit = true; profile_menu_.setTitle(tr("Switch to")); @@ -622,8 +630,9 @@ void MainStatusBar::switchToProfile() { QAction *pa = qobject_cast<QAction*>(sender()); - if (pa) { - wsApp->setConfigurationProfile(pa->text().toUtf8().constData()); + if (pa && pa->property("profile_name").isValid()) { + QString profile = pa->property("profile_name").toString(); + wsApp->setConfigurationProfile(profile.toUtf8().constData()); } } diff --git a/ui/qt/models/profile_model.cpp b/ui/qt/models/profile_model.cpp index 79995cc824..07138450ce 100644 --- a/ui/qt/models/profile_model.cpp +++ b/ui/qt/models/profile_model.cpp @@ -309,6 +309,7 @@ QVariant ProfileModel::data(const QModelIndex &index, int role) const case ProfileModel::DATA_IS_DEFAULT: return qVariantFromValue(prof->status == PROF_STAT_DEFAULT); + case ProfileModel::DATA_IS_GLOBAL: return qVariantFromValue(prof->is_global); @@ -391,7 +392,7 @@ Qt::ItemFlags ProfileModel::flags(const QModelIndex &index) const if ( ! prof ) return fl; - if ( index.column() == ProfileModel::COL_NAME && ! prof->is_global && prof->status != PROF_STAT_DEFAULT ) + if ( index.column() == ProfileModel::COL_NAME && prof->status != PROF_STAT_DEFAULT && ! prof->is_global && set_profile_.compare(prof->name) != 0 ) fl |= Qt::ItemIsEditable; return fl; diff --git a/ui/qt/widgets/copy_from_profile_menu.cpp b/ui/qt/widgets/copy_from_profile_menu.cpp index 849be71570..8a985a0c61 100644 --- a/ui/qt/widgets/copy_from_profile_menu.cpp +++ b/ui/qt/widgets/copy_from_profile_menu.cpp @@ -8,67 +8,65 @@ */ #include <ui/qt/widgets/copy_from_profile_menu.h> -#include <ui/profile.h> +#include <ui/qt/models/profile_model.h> #include <wsutil/filesystem.h> +#include <QDir> +#include <QFileInfo> + CopyFromProfileMenu::CopyFromProfileMenu(QString filename, QWidget *parent) : QMenu(parent), - filename_(filename), have_profiles_(false) { - const gchar *profile_name = get_profile_name(); - bool globals_started = false; - - init_profile_list(); - - const GList *fl_entry = edited_profile_list(); - while (fl_entry && fl_entry->data) { - profile_def *profile = (profile_def *) fl_entry->data; - char *profile_dir = get_profile_dir(profile->name, profile->is_global); - char *file_name = g_build_filename(profile_dir, filename_.toUtf8().constData(), NULL); - if ((strcmp(profile_name, profile->name) != 0) && config_file_exists_with_entries(file_name, '#')) { - if (profile->is_global && !globals_started) { - if (have_profiles_) { - addSeparator(); - } - addSystemDefault(); - globals_started = true; - } - QAction *action = addAction(profile->name); - action->setData(QString(file_name)); - if (profile->is_global) { - QFont ti_font = action->font(); - ti_font.setItalic(true); - action->setFont(ti_font); - } - have_profiles_ = true; - } - g_free(file_name); - g_free(profile_dir); - fl_entry = g_list_next(fl_entry); - } + ProfileModel model(this); - if (!globals_started) { - if (have_profiles_) { - addSeparator(); - } - addSystemDefault(); - } -} -// "System default" is not a profile. -// Add a special entry for this if the filename exists. -void CopyFromProfileMenu::addSystemDefault() -{ - char *file_name = g_build_filename(get_datafile_dir(), filename_.toUtf8().constData(), NULL); - if (file_exists(file_name)) { - QAction *action = addAction("System default"); - action->setData(QString(file_name)); - QFont ti_font = action->font(); - ti_font.setItalic(true); - action->setFont(ti_font); + QActionGroup global(this); + QActionGroup user(this); + + for(int cnt = 0; cnt < model.rowCount(); cnt++) + { + QModelIndex idx = model.index(cnt, ProfileModel::COL_NAME); + QModelIndex idxPath = model.index(cnt, ProfileModel::COL_PATH); + if ( ! idx.isValid() || ! idxPath.isValid() ) + continue; + + if ( ! idx.data(ProfileModel::DATA_PATH_IS_NOT_DESCRIPTION).toBool() || idx.data(ProfileModel::DATA_IS_SELECTED).toBool() ) + continue; + + QDir profileDir(idxPath.data().toString()); + if ( ! profileDir.exists() ) + continue; + + QFileInfo fi = profileDir.filePath(filename); + if ( ! fi.exists() ) + continue; + + if ( ! config_file_exists_with_entries(fi.absoluteFilePath().toUtf8().constData(), '#') ) + continue; + + QAction * pa = Q_NULLPTR; + if ( idx.data(ProfileModel::DATA_IS_DEFAULT).toBool() || idx.data(ProfileModel::DATA_IS_GLOBAL).toBool() ) + pa = global.addAction(idx.data().toString()); + else + pa = user.addAction(idx.data().toString()); + + pa->setCheckable(true); + if ( idx.data(ProfileModel::DATA_IS_SELECTED).toBool() ) + pa->setChecked(true); + + pa->setFont(idx.data(Qt::FontRole).value<QFont>()); + pa->setProperty("profile_name", idx.data()); + pa->setProperty("profile_is_global", idx.data(ProfileModel::DATA_IS_GLOBAL)); + + pa->setProperty("filename", fi.absoluteFilePath()); + pa->setData(fi.absoluteFilePath().toUtf8().constData()); } - g_free(file_name); + + addActions(global.actions()); + if (global.actions().count() > 0) + addSeparator(); + addActions(user.actions()); } bool CopyFromProfileMenu::haveProfiles() diff --git a/ui/qt/widgets/copy_from_profile_menu.h b/ui/qt/widgets/copy_from_profile_menu.h index 596c6c6a43..164035fd19 100644 --- a/ui/qt/widgets/copy_from_profile_menu.h +++ b/ui/qt/widgets/copy_from_profile_menu.h @@ -20,15 +20,12 @@ class CopyFromProfileMenu : public QMenu Q_OBJECT public: - explicit CopyFromProfileMenu(QString filename, QWidget *parent = 0); + explicit CopyFromProfileMenu(QString filename, QWidget *parent = Q_NULLPTR); ~CopyFromProfileMenu() { } bool haveProfiles(); private: - void addSystemDefault(); - - QString filename_; bool have_profiles_; }; |