diff options
author | Michal Labedzki <michal.labedzki@tieto.com> | 2015-12-11 09:34:08 +0100 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2015-12-20 08:21:02 +0000 |
commit | 9bb3f6be4c18822267a64633c298e1a8f1809221 (patch) | |
tree | de9b8934c58f239e29d0227039ad7f55f3d42f06 /ui/qt | |
parent | 7e0ec2c8eb3c88e70992dc40b130c76177b83a30 (diff) |
Qt: Add missing multi-field column validation
GTK already has it, but Qt forgot about it, so multi-field custom column
works ok if previously saved in GTK-shark. Invalid validation prevent from
modifying and saving multi-field custom column in Qt version.
While at it, rename "custom field" to "custom fields" to ensure
we think about multi-field custom column.
Change-Id: I99588150ccb38be11b75f5dd5b0f6443e7055ebb
Reviewed-on: https://code.wireshark.org/review/12685
Petri-Dish: Michal Labedzki <michal.labedzki@tieto.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui/qt')
-rw-r--r-- | ui/qt/column_editor_frame.cpp | 26 | ||||
-rw-r--r-- | ui/qt/column_editor_frame.h | 4 | ||||
-rw-r--r-- | ui/qt/column_editor_frame.ui | 4 | ||||
-rw-r--r-- | ui/qt/column_preferences_frame.cpp | 38 | ||||
-rw-r--r-- | ui/qt/column_preferences_frame.h | 4 | ||||
-rw-r--r-- | ui/qt/column_preferences_frame.ui | 2 | ||||
-rw-r--r-- | ui/qt/packet_list.cpp | 4 | ||||
-rw-r--r-- | ui/qt/packet_list_model.cpp | 2 | ||||
-rw-r--r-- | ui/qt/syntax_line_edit.cpp | 26 | ||||
-rw-r--r-- | ui/qt/syntax_line_edit.h | 1 |
10 files changed, 69 insertions, 42 deletions
diff --git a/ui/qt/column_editor_frame.cpp b/ui/qt/column_editor_frame.cpp index 2e3ca3dc16..dcacada1ef 100644 --- a/ui/qt/column_editor_frame.cpp +++ b/ui/qt/column_editor_frame.cpp @@ -63,17 +63,17 @@ void ColumnEditorFrame::setFields(int index) bool ok = true; if (index == COL_CUSTOM) { - ui->fieldNameLineEdit->setText(saved_field_); - ui->fieldNameLineEdit->checkFieldName(saved_field_); + ui->fieldsNameLineEdit->setText(saved_fields_); + ui->fieldsNameLineEdit->checkCustomColumn(saved_fields_); ui->occurrenceLineEdit->setText(saved_occurrence_); ui->occurrenceLineEdit->checkInteger(saved_occurrence_); - if ((ui->fieldNameLineEdit->syntaxState() != SyntaxLineEdit::Valid) || + if ((ui->fieldsNameLineEdit->syntaxState() != SyntaxLineEdit::Valid) || (ui->occurrenceLineEdit->syntaxState() != SyntaxLineEdit::Valid)) { ok = false; } } else { - ui->fieldNameLineEdit->clear(); - ui->fieldNameLineEdit->setSyntaxState(SyntaxLineEdit::Empty); + ui->fieldsNameLineEdit->clear(); + ui->fieldsNameLineEdit->setSyntaxState(SyntaxLineEdit::Empty); ui->occurrenceLineEdit->clear(); ui->occurrenceLineEdit->setSyntaxState(SyntaxLineEdit::Empty); } @@ -84,7 +84,7 @@ void ColumnEditorFrame::editColumn(int column) { cur_column_ = column; ui->titleLineEdit->setText(get_column_title(column)); - saved_field_ = get_column_custom_field(column); + saved_fields_ = get_column_custom_fields(column); saved_occurrence_ = QString::number(get_column_custom_occurrence(column)); ui->typeComboBox->setCurrentIndex(get_column_format(column)); setFields(ui->typeComboBox->currentIndex()); @@ -95,22 +95,22 @@ void ColumnEditorFrame::on_typeComboBox_activated(int index) setFields(index); } -void ColumnEditorFrame::on_fieldNameLineEdit_textEdited(const QString &field) +void ColumnEditorFrame::on_fieldsNameLineEdit_textEdited(const QString &fields) { - ui->fieldNameLineEdit->checkFieldName(field); + ui->fieldsNameLineEdit->checkCustomColumn(fields); if (ui->typeComboBox->currentIndex() != COL_CUSTOM) { ui->typeComboBox->setCurrentIndex(COL_CUSTOM); ui->occurrenceLineEdit->setText(saved_occurrence_); } bool ok = true; - if ((ui->fieldNameLineEdit->syntaxState() == SyntaxLineEdit::Invalid) || + if ((ui->fieldsNameLineEdit->syntaxState() == SyntaxLineEdit::Invalid) || ((ui->typeComboBox->currentIndex() == COL_CUSTOM) && (ui->occurrenceLineEdit->syntaxState() == SyntaxLineEdit::Empty))) ok = false; ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(ok); - saved_field_ = field; + saved_fields_ = fields; } void ColumnEditorFrame::on_occurrenceLineEdit_textEdited(const QString &occurrence) @@ -118,7 +118,7 @@ void ColumnEditorFrame::on_occurrenceLineEdit_textEdited(const QString &occurren ui->occurrenceLineEdit->checkInteger(occurrence); if (ui->typeComboBox->currentIndex() != COL_CUSTOM) { ui->typeComboBox->setCurrentIndex(COL_CUSTOM); - ui->fieldNameLineEdit->setText(saved_field_); + ui->fieldsNameLineEdit->setText(saved_fields_); } bool ok = true; @@ -145,8 +145,8 @@ void ColumnEditorFrame::on_buttonBox_accepted() set_column_title(cur_column_, col_str.constData()); set_column_format(cur_column_, ui->typeComboBox->currentIndex()); if (ui->typeComboBox->currentIndex() == COL_CUSTOM) { - col_str = ui->fieldNameLineEdit->text().toUtf8(); - set_column_custom_field(cur_column_, col_str.constData()); + col_str = ui->fieldsNameLineEdit->text().toUtf8(); + set_column_custom_fields(cur_column_, col_str.constData()); if (!ui->occurrenceLineEdit->text().isEmpty()) { set_column_custom_occurrence(cur_column_, ui->occurrenceLineEdit->text().toInt()); } diff --git a/ui/qt/column_editor_frame.h b/ui/qt/column_editor_frame.h index f7e019bad5..7ee6023a5d 100644 --- a/ui/qt/column_editor_frame.h +++ b/ui/qt/column_editor_frame.h @@ -42,7 +42,7 @@ signals: private slots: void on_typeComboBox_activated(int index); - void on_fieldNameLineEdit_textEdited(const QString &field); + void on_fieldsNameLineEdit_textEdited(const QString &fields); void on_occurrenceLineEdit_textEdited(const QString &occurrence); void on_buttonBox_rejected(); void on_buttonBox_accepted(); @@ -50,7 +50,7 @@ private slots: private: Ui::ColumnEditorFrame *ui; int cur_column_; - QString saved_field_; + QString saved_fields_; QString saved_occurrence_; void setFields(int index); }; diff --git a/ui/qt/column_editor_frame.ui b/ui/qt/column_editor_frame.ui index cbf3812c3d..8040623cd9 100644 --- a/ui/qt/column_editor_frame.ui +++ b/ui/qt/column_editor_frame.ui @@ -75,12 +75,12 @@ <item> <widget class="QLabel" name="label_3"> <property name="text"> - <string>Field Name</string> + <string>Fields</string> </property> </widget> </item> <item> - <widget class="SyntaxLineEdit" name="fieldNameLineEdit"/> + <widget class="SyntaxLineEdit" name="fieldsNameLineEdit"/> </item> <item> <spacer name="horizontalSpacer_4"> diff --git a/ui/qt/column_preferences_frame.cpp b/ui/qt/column_preferences_frame.cpp index a83111015f..943861d352 100644 --- a/ui/qt/column_preferences_frame.cpp +++ b/ui/qt/column_preferences_frame.cpp @@ -46,7 +46,7 @@ const int visible_col_ = 0; const int title_col_ = 1; const int type_col_ = 2; -const int custom_field_col_ = 3; +const int custom_fields_col_ = 3; const int custom_occurrence_col_ = 4; ColumnPreferencesFrame::ColumnPreferencesFrame(QWidget *parent) : @@ -58,7 +58,7 @@ ColumnPreferencesFrame::ColumnPreferencesFrame(QWidget *parent) : ui->setupUi(this); int one_em = ui->columnTreeWidget->fontMetrics().height(); - ui->columnTreeWidget->setColumnWidth(custom_field_col_, one_em * 10); + ui->columnTreeWidget->setColumnWidth(custom_fields_col_, one_em * 10); ui->columnTreeWidget->setColumnWidth(custom_occurrence_col_, one_em * 5); ui->columnTreeWidget->setMinimumWidth(one_em * 20); @@ -72,7 +72,7 @@ ColumnPreferencesFrame::ColumnPreferencesFrame(QWidget *parent) : for (GList *cur = g_list_first(prefs.col_list); cur != NULL && cur->data != NULL; cur = cur->next) { fmt_data *cfmt = (fmt_data *) cur->data; - addColumn(cfmt->visible, cfmt->title, cfmt->fmt, cfmt->custom_field, cfmt->custom_occurrence); + addColumn(cfmt->visible, cfmt->title, cfmt->fmt, cfmt->custom_fields, cfmt->custom_occurrence); } connect(ui->columnTreeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(updateWidgets())); @@ -106,7 +106,7 @@ void ColumnPreferencesFrame::unstash() if (cfmt->fmt == COL_CUSTOM) { bool ok; int occurrence = (*it)->text(custom_occurrence_col_).toInt(&ok); - cfmt->custom_field = qstring_strdup((*it)->text(custom_field_col_)); + cfmt->custom_fields = qstring_strdup((*it)->text(custom_fields_col_)); cfmt->custom_occurrence = ok ? occurrence : 0; } @@ -119,7 +119,7 @@ void ColumnPreferencesFrame::unstash() old_cfmt->fmt != cfmt->fmt || old_cfmt->visible != cfmt->visible || (old_cfmt->fmt == COL_CUSTOM && ( - g_strcmp0(old_cfmt->custom_field, cfmt->custom_field) != 0 || + g_strcmp0(old_cfmt->custom_fields, cfmt->custom_fields) != 0 || old_cfmt->custom_occurrence != cfmt->custom_occurrence))) { changed = true; } @@ -156,8 +156,8 @@ void ColumnPreferencesFrame::keyPressEvent(QKeyEvent *evt) case title_col_: columnTitleEditingFinished(); break; - case custom_field_col_: - customFieldEditingFinished(); + case custom_fields_col_: + customFieldsEditingFinished(); columnTypeCurrentIndexChanged(new_idx); break; case custom_occurrence_col_: @@ -191,7 +191,7 @@ void ColumnPreferencesFrame::keyPressEvent(QKeyEvent *evt) QFrame::keyPressEvent(evt); } -void ColumnPreferencesFrame::addColumn(bool visible, const char *title, int fmt, const char *custom_field, int custom_occurrence) +void ColumnPreferencesFrame::addColumn(bool visible, const char *title, int fmt, const char *custom_fields, int custom_occurrence) { QTreeWidgetItem *item = new QTreeWidgetItem(ui->columnTreeWidget); @@ -202,7 +202,7 @@ void ColumnPreferencesFrame::addColumn(bool visible, const char *title, int fmt, item->setText(type_col_, col_format_desc(fmt)); item->setData(type_col_, Qt::UserRole, QVariant(fmt)); if (fmt == COL_CUSTOM) { - item->setText(custom_field_col_, custom_field); + item->setText(custom_fields_col_, custom_fields); item->setText(custom_occurrence_col_, QString::number(custom_occurrence)); } @@ -228,8 +228,8 @@ void ColumnPreferencesFrame::on_columnTreeWidget_currentItemChanged(QTreeWidgetI ui->columnTreeWidget->removeItemWidget(previous, type_col_); previous->setText(type_col_, col_format_desc(previous->data(type_col_, Qt::UserRole).toInt())); } - if (previous && ui->columnTreeWidget->itemWidget(previous, custom_field_col_)) { - ui->columnTreeWidget->removeItemWidget(previous, custom_field_col_); + if (previous && ui->columnTreeWidget->itemWidget(previous, custom_fields_col_)) { + ui->columnTreeWidget->removeItemWidget(previous, custom_fields_col_); } if (previous && ui->columnTreeWidget->itemWidget(previous, custom_occurrence_col_)) { ui->columnTreeWidget->removeItemWidget(previous, custom_occurrence_col_); @@ -269,13 +269,13 @@ void ColumnPreferencesFrame::on_columnTreeWidget_itemActivated(QTreeWidgetItem * editor = cur_combo_box_; break; } - case custom_field_col_: + case custom_fields_col_: { SyntaxLineEdit *syntax_edit = new SyntaxLineEdit(); - saved_col_string_ = item->text(custom_field_col_); + saved_col_string_ = item->text(custom_fields_col_); connect(syntax_edit, SIGNAL(textChanged(QString)), - syntax_edit, SLOT(checkFieldName(QString))); - connect(syntax_edit, SIGNAL(editingFinished()), this, SLOT(customFieldEditingFinished())); + syntax_edit, SLOT(checkCustomColumn(QString))); + connect(syntax_edit, SIGNAL(editingFinished()), this, SLOT(customFieldsEditingFinished())); editor = cur_line_edit_ = syntax_edit; saved_combo_idx_ = item->data(type_col_, Qt::UserRole).toInt(); @@ -358,18 +358,18 @@ void ColumnPreferencesFrame::columnTypeCurrentIndexChanged(int index) item->setText(type_col_, col_format_desc(index)); if (index != COL_CUSTOM) { - item->setText(custom_field_col_, ""); + item->setText(custom_fields_col_, ""); item->setText(custom_occurrence_col_, ""); } } -void ColumnPreferencesFrame::customFieldEditingFinished() +void ColumnPreferencesFrame::customFieldsEditingFinished() { QTreeWidgetItem *item = ui->columnTreeWidget->currentItem(); if (!cur_line_edit_ || !item) return; - item->setText(custom_field_col_, cur_line_edit_->text()); - ui->columnTreeWidget->removeItemWidget(item, custom_field_col_); + item->setText(custom_fields_col_, cur_line_edit_->text()); + ui->columnTreeWidget->removeItemWidget(item, custom_fields_col_); } void ColumnPreferencesFrame::customOccurrenceEditingFinished() diff --git a/ui/qt/column_preferences_frame.h b/ui/qt/column_preferences_frame.h index c5c45e2895..0a7ae664b6 100644 --- a/ui/qt/column_preferences_frame.h +++ b/ui/qt/column_preferences_frame.h @@ -54,7 +54,7 @@ private: QComboBox *cur_combo_box_; int saved_combo_idx_; - void addColumn(bool visible, const char *title, int fmt, const char *custom_field, int custom_occurrence); + void addColumn(bool visible, const char *title, int fmt, const char *custom_fields, int custom_occurrence); private slots: void updateWidgets(void); @@ -64,7 +64,7 @@ private slots: void comboDestroyed(); void columnTitleEditingFinished(); void columnTypeCurrentIndexChanged(int index); - void customFieldEditingFinished(); + void customFieldsEditingFinished(); void customOccurrenceEditingFinished(); void on_newToolButton_clicked(); void on_deleteToolButton_clicked(); diff --git a/ui/qt/column_preferences_frame.ui b/ui/qt/column_preferences_frame.ui index 6303354c2f..3dfb5a639e 100644 --- a/ui/qt/column_preferences_frame.ui +++ b/ui/qt/column_preferences_frame.ui @@ -42,7 +42,7 @@ </column> <column> <property name="text"> - <string>Field Name</string> + <string>Fields</string> </property> </column> <column> diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index 22bab09700..2d92d30779 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -848,7 +848,7 @@ void PacketList::writeRecent(FILE *rf) { } col_fmt = get_column_format(col); if (col_fmt == COL_CUSTOM) { - fprintf (rf, " %%Cus:%s,", get_column_custom_field(col)); + fprintf (rf, " %%Cus:%s,", get_column_custom_fields(col)); } else { fprintf (rf, " %s,", col_format_to_string(col_fmt)); } @@ -903,7 +903,7 @@ QString PacketList::getFilterFromRowAndColumn() if (strlen(cap_file_->cinfo.col_expr.col_expr[ctx_column_]) != 0 && strlen(cap_file_->cinfo.col_expr.col_expr_val[ctx_column_]) != 0) { if (cap_file_->cinfo.columns[ctx_column_].col_fmt == COL_CUSTOM) { - header_field_info *hfi = proto_registrar_get_byname(cap_file_->cinfo.columns[ctx_column_].col_custom_field); + header_field_info *hfi = proto_registrar_get_byname(cap_file_->cinfo.columns[ctx_column_].col_custom_fields); if (hfi && hfi->parent == -1) { /* Protocol only */ filter.append(cap_file_->cinfo.col_expr.col_expr[ctx_column_]); diff --git a/ui/qt/packet_list_model.cpp b/ui/qt/packet_list_model.cpp index 351e74e20f..db6e6f58f9 100644 --- a/ui/qt/packet_list_model.cpp +++ b/ui/qt/packet_list_model.cpp @@ -370,7 +370,7 @@ bool PacketListModel::recordLessThan(PacketListRecord *r1, PacketListRecord *r2) header_field_info *hfi; // Column comes from custom data - hfi = proto_registrar_get_byname(sort_cap_file_->cinfo.columns[sort_column_].col_custom_field); + hfi = proto_registrar_get_byname(sort_cap_file_->cinfo.columns[sort_column_].col_custom_fields); if (hfi == NULL) { cmp_val = frame_data_compare(sort_cap_file_->epan, r1->frameData(), r2->frameData(), COL_NUMBER); diff --git a/ui/qt/syntax_line_edit.cpp b/ui/qt/syntax_line_edit.cpp index f9333d098b..bd2e16a4a5 100644 --- a/ui/qt/syntax_line_edit.cpp +++ b/ui/qt/syntax_line_edit.cpp @@ -180,6 +180,32 @@ void SyntaxLineEdit::checkFieldName(QString field) } } +void SyntaxLineEdit::checkCustomColumn(QString fields) +{ + gchar **splitted_fields; + guint i_field; + if (fields.isEmpty()) { + setSyntaxState(SyntaxLineEdit::Empty); + return; + } + + splitted_fields = g_regex_split_simple(" *([^ \\|]+) *(?:(?:\\|\\|)|(?:or))? *", + fields.toUtf8().constData(), G_REGEX_ANCHORED, G_REGEX_MATCH_ANCHORED); + + for (i_field =0; i_field < g_strv_length(splitted_fields); i_field += 1) { + if (splitted_fields[i_field] && *splitted_fields[i_field]) { + if (proto_check_field_name(splitted_fields[i_field]) != 0) { + setSyntaxState(SyntaxLineEdit::Invalid); + g_strfreev(splitted_fields); + return; + } + } + } + g_strfreev(splitted_fields); + + checkDisplayFilter(fields); +} + void SyntaxLineEdit::checkInteger(QString number) { if (number.isEmpty()) { diff --git a/ui/qt/syntax_line_edit.h b/ui/qt/syntax_line_edit.h index c161b5fabf..f76e6bc626 100644 --- a/ui/qt/syntax_line_edit.h +++ b/ui/qt/syntax_line_edit.h @@ -57,6 +57,7 @@ public slots: // Built-in syntax checks. Connect textChanged to these as needed. void checkDisplayFilter(QString filter); void checkFieldName(QString field); + void checkCustomColumn(QString fields); void checkInteger(QString number); protected: |