diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/preference_utils.c | 22 | ||||
-rw-r--r-- | ui/preference_utils.h | 8 | ||||
-rw-r--r-- | ui/qt/main_window_slots.cpp | 21 |
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(); + } + } } } |