aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorRoland Knall <rknall@gmail.com>2019-07-09 15:38:30 +0200
committerAnders Broman <a.broman58@gmail.com>2019-07-11 04:49:27 +0000
commit20d70997ef6790b73edfa135b742c5af410bbe6a (patch)
treeb581c308e704e291fe46805374942f44d11a44b3 /ui
parent4e7ac431a55ab8da9155e1f040d676569aa6d184 (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.cpp75
-rw-r--r--ui/qt/models/profile_model.cpp3
-rw-r--r--ui/qt/widgets/copy_from_profile_menu.cpp102
-rw-r--r--ui/qt/widgets/copy_from_profile_menu.h5
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_;
};