aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/preference_utils.c22
-rw-r--r--ui/preference_utils.h8
-rw-r--r--ui/qt/main_window_slots.cpp21
3 files changed, 49 insertions, 2 deletions
diff --git a/ui/preference_utils.c b/ui/preference_utils.c
index 404c13c997..ef6ca14778 100644
--- a/ui/preference_utils.c
+++ b/ui/preference_utils.c
@@ -200,6 +200,28 @@ column_prefs_add_custom(gint fmt, const gchar *title, const gchar *custom_fields
return colnr;
}
+gint
+column_prefs_has_custom(const gchar *custom_field)
+{
+ GList *clp;
+ fmt_data *cfmt;
+ gint colnr = -1;
+
+ for (gint i = 0; i < prefs.num_cols; i++) {
+ clp = g_list_nth(prefs.col_list, i);
+ if (clp == NULL) /* Sanity check, invalid column requested */
+ continue;
+
+ cfmt = (fmt_data *) clp->data;
+ if (cfmt->fmt == COL_CUSTOM && strcmp(custom_field, cfmt->custom_fields) == 0) {
+ colnr = i;
+ break;
+ }
+ }
+
+ return colnr;
+}
+
void
column_prefs_remove_link(GList *col_link)
{
diff --git a/ui/preference_utils.h b/ui/preference_utils.h
index 0b9eb656b8..04e3bc7d85 100644
--- a/ui/preference_utils.h
+++ b/ui/preference_utils.h
@@ -71,6 +71,14 @@ gint column_prefs_add_custom(gint fmt, const gchar *title,
const gchar *custom_field,
gint position);
+/** Check if a custom column exists.
+ *
+ * @param custom_field column custom field
+ *
+ * @return The index of the column if existing, -1 if not existing
+ */
+gint column_prefs_has_custom(const gchar *custom_field);
+
/** Remove a column.
*
* @param col_link Column list entry
diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp
index 20d8db22e0..26e0353ae2 100644
--- a/ui/qt/main_window_slots.cpp
+++ b/ui/qt/main_window_slots.cpp
@@ -2765,8 +2765,25 @@ void MainWindow::on_actionAnalyzeDisplayFilterMacros_triggered()
void MainWindow::on_actionAnalyzeCreateAColumn_triggered()
{
if (capture_file_.capFile() != 0 && capture_file_.capFile()->finfo_selected != 0) {
- insertColumn(QString(capture_file_.capFile()->finfo_selected->hfinfo->name),
- QString(capture_file_.capFile()->finfo_selected->hfinfo->abbrev));
+ header_field_info *hfinfo = capture_file_.capFile()->finfo_selected->hfinfo;
+ int col = column_prefs_has_custom(hfinfo->abbrev);
+ if (col == -1) {
+ insertColumn(hfinfo->name, hfinfo->abbrev);
+ } else {
+ QString status;
+ if (QString(hfinfo->name) == get_column_title(col)) {
+ status = tr("The \"%1\" column already exists.").arg(hfinfo->name);
+ } else {
+ status = tr("The \"%1\" column already exists as \"%2\".").arg(hfinfo->name).arg(get_column_title(col));
+ }
+ wsApp->pushStatus(WiresharkApplication::TemporaryStatus, status);
+
+ if (!get_column_visible(col)) {
+ packet_list_->setColumnHidden(col, false);
+ set_column_visible(col, TRUE);
+ prefs_main_write();
+ }
+ }
}
}