void DisplayFilterEdit::applyDisplayFilter() { if (syntaxState() != Valid && syntaxState() != Empty) { return; } QString new_filter = text(); emit filterPackets(new_filter, true); }
void CaptureFilterEdit::applyCaptureFilter() { if (syntaxState() == Invalid) { return; } emit startCapture(); }
void DisplayFilterEdit::checkFilter(const QString& text) { dfilter_t *dfp; guchar c; clear_button_->setVisible(!text.isEmpty()); popFilterSyntaxStatus(); if (field_name_only_ && (c = proto_check_field_name(text.toUtf8().constData()))) { setSyntaxState(Invalid); emit pushFilterSyntaxStatus(QString().sprintf("Illegal character in field name: '%c'", c)); } else if (dfilter_compile(text.toUtf8().constData(), &dfp)) { GPtrArray *depr = NULL; if (dfp != NULL) { depr = dfilter_deprecated_tokens(dfp); } if (text.isEmpty()) { setSyntaxState(Empty); } else if (depr) { /* You keep using that word. I do not think it means what you think it means. */ setSyntaxState(Deprecated); /* * We're being lazy and only printing the first "problem" token. * Would it be better to print all of them? */ emit pushFilterSyntaxWarning(QString().sprintf("\"%s\" may have unexpected results (see the User's Guide)", (const char *) g_ptr_array_index(depr, 0))); } else { setSyntaxState(Valid); } dfilter_free(dfp); } else { setSyntaxState(Invalid); QString invalidMsg(tr("Invalid filter")); if (dfilter_error_msg) { invalidMsg.append(QString().sprintf(": %s", dfilter_error_msg)); } emit pushFilterSyntaxStatus(invalidMsg); } bookmark_button_->setEnabled(syntaxState() == Valid || syntaxState() == Deprecated); if (apply_button_) { apply_button_->setEnabled(SyntaxState() != Invalid); } }
void FieldFilterEdit::applyDisplayFilter() { if (syntaxState() == Invalid) { return; } QString new_filter = text(); emit filterPackets(new_filter, true); }
void DisplayFilterEdit::applyDisplayFilter() { QString dfString(text()); gchar *dftext = NULL; cf_status_t cf_status; if (syntaxState() != Valid && syntaxState() != Empty) { return; } if (dfString.length() > 0) dftext = g_strdup(dfString.toUtf8().constData()); cf_status = cf_filter_packets(&cfile, dftext, FALSE); g_free(dftext); if (cf_status == CF_OK) { if (apply_button_) { apply_button_->setEnabled(false); } if (dfString.length() < 1) { // gtk_widget_set_sensitive (g_object_get_data (G_OBJECT(filter_cm), E_DFILTER_CLEAR_KEY), FALSE); // gtk_widget_set_sensitive (g_object_get_data (G_OBJECT(filter_cm), E_DFILTER_SAVE_KEY), FALSE); } } if (cf_status == CF_OK && dfString.length() > 0) { // int index; g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: add \"%s\" to recent display filters", this->text().toUtf8().constData()); // if(!dfilter_entry_match(filter_cm,s, &index)){ // gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(filter_cm), s); // index++; // } // while ((guint)index >= prefs.gui_recent_df_entries_max){ // gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(filter_cm), index); // index--; // } } }
// ui/gtk/filter_autocomplete.c:build_autocompletion_list void FieldFilterEdit::buildCompletionList(const QString &field_word) { // Push a hint about the current field. if (syntaxState() == Valid) { emit popFilterSyntaxStatus(); header_field_info *hfinfo = proto_registrar_get_byname(field_word.toUtf8().constData()); if (hfinfo) { QString cursor_field_msg = QString("%1: %2") .arg(hfinfo->name) .arg(ftype_pretty_name(hfinfo->type)); emit pushFilterSyntaxStatus(cursor_field_msg); } } if (field_word.length() < 1) { completion_model_->setStringList(QStringList()); return; } void *proto_cookie; QStringList field_list; int field_dots = field_word.count('.'); // Some protocol names (_ws.expert) contain periods. for (int proto_id = proto_get_first_protocol(&proto_cookie); proto_id != -1; proto_id = proto_get_next_protocol(&proto_cookie)) { protocol_t *protocol = find_protocol_by_id(proto_id); if (!proto_is_protocol_enabled(protocol)) continue; // Don't complete the current word. const QString pfname = proto_get_protocol_filter_name(proto_id); if (field_word.compare(pfname)) field_list << pfname; // Add fields only if we're past the protocol name and only for the // current protocol. if (field_dots > pfname.count('.')) { void *field_cookie; const QByteArray fw_ba = field_word.toUtf8(); // or toLatin1 or toStdString? const char *fw_utf8 = fw_ba.constData(); gsize fw_len = (gsize) strlen(fw_utf8); for (header_field_info *hfinfo = proto_get_first_protocol_field(proto_id, &field_cookie); hfinfo; hfinfo = proto_get_next_protocol_field(proto_id, &field_cookie)) { if (hfinfo->same_name_prev_id != -1) continue; // Ignore duplicate names. if (!g_ascii_strncasecmp(fw_utf8, hfinfo->abbrev, fw_len)) { if ((gsize) strlen(hfinfo->abbrev) != fw_len) field_list << hfinfo->abbrev; } } } } field_list.sort(); completion_model_->setStringList(field_list); completer()->setCompletionPrefix(field_word); }
void CaptureFilterEdit::setFilterSyntaxState(QString filter, bool valid, QString err_msg) { if (filter.compare(text()) == 0) { // The user hasn't changed the filter if (valid) { setSyntaxState(text().isEmpty() ? Empty : Valid); } else { setSyntaxState(Invalid); emit pushFilterSyntaxStatus(err_msg); } } #ifdef HAVE_LIBPCAP if (syntaxState() != Invalid) { if (bookmark_button_) { bookmark_button_->setEnabled(true); } if (apply_button_) { apply_button_->setEnabled(true); } valid = true; g_free(global_capture_opts.default_options.cfilter); if (filter.isEmpty()) { global_capture_opts.default_options.cfilter = NULL; } else { global_capture_opts.default_options.cfilter = qstring_strdup(filter); } if (global_capture_opts.num_selected > 0) { interface_t device; for (guint i = 0; i < global_capture_opts.all_ifaces->len; i++) { device = g_array_index(global_capture_opts.all_ifaces, interface_t, i); if (!device.selected) { continue; } // if (device.active_dlt == -1) { // simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The link type of interface %s was not specified.", device.name); // continue; /* Programming error: somehow managed to select an "unsupported" entry */ // } g_array_remove_index(global_capture_opts.all_ifaces, i); device.cfilter = qstring_strdup(filter); g_array_insert_val(global_capture_opts.all_ifaces, i, device); // update_filter_string(device.name, filter_text); } } } #endif // HAVE_LIBPCAP emit captureFilterSyntaxChanged(valid); }
void FieldFilterEdit::checkFilter(const QString& filter_text) { popFilterSyntaxStatus(); checkDisplayFilter(filter_text); switch (syntaxState()) { case Deprecated: { emit pushFilterSyntaxWarning(syntaxErrorMessage()); break; } case Invalid: { QString invalidMsg(tr("Invalid filter: ")); invalidMsg.append(syntaxErrorMessage()); emit pushFilterSyntaxStatus(invalidMsg); break; } default: break; } }
bool FieldFilterEdit::checkFilter() { checkFilter(text()); return syntaxState() != Invalid; }
void FieldFilterEdit::focusOutEvent(QFocusEvent *event) { if (syntaxState() == Valid) emit popFilterSyntaxStatus(); SyntaxLineEdit::focusOutEvent(event); }
void DisplayFilterEdit::checkFilter(const QString& filter_text) { if (clear_button_) { clear_button_->setVisible(!filter_text.isEmpty()); } popFilterSyntaxStatus(); checkDisplayFilter(filter_text); switch (syntaxState()) { case Deprecated: { /* * We're being lazy and only printing the first "problem" token. * Would it be better to print all of them? */ QString deprecatedMsg(tr("\"%1\" may have unexpected results (see the User's Guide)") .arg(deprecatedToken())); emit pushFilterSyntaxWarning(deprecatedMsg); break; } case Invalid: { QString invalidMsg(tr("Invalid filter: ")); invalidMsg.append(syntaxErrorMessage()); emit pushFilterSyntaxStatus(invalidMsg); break; } default: break; } if (bookmark_button_) { bool enable_save_action = false; bool match = false; QMenu *bb_menu = bookmark_button_->menu(); bb_menu->clear(); QAction *save_action = bb_menu->addAction(tr("Save this filter")); connect(save_action, SIGNAL(triggered(bool)), this, SLOT(saveFilter())); QAction *manage_action = bb_menu->addAction(tr("Manage Display Filters")); connect(manage_action, SIGNAL(triggered(bool)), this, SLOT(showFilters())); QAction *expr_action = bb_menu->addAction(tr("Manage Filter Expressions")); connect(expr_action, SIGNAL(triggered(bool)), this, SLOT(showExpressionPrefs())); QAction *first_filter = NULL; for (GList *df_item = get_filter_list_first(DFILTER_LIST); df_item; df_item = g_list_next(df_item)) { if (!df_item->data) continue; filter_def *df_def = (filter_def *) df_item->data; if (!df_def->name || !df_def->strval) continue; int one_em = bb_menu->fontMetrics().height(); QString prep_text = QString("%1: %2").arg(df_def->name).arg(df_def->strval); prep_text = bb_menu->fontMetrics().elidedText(prep_text, Qt::ElideRight, one_em * 40); QAction *prep_action = bb_menu->addAction(prep_text); prep_action->setData(df_def->strval); connect(prep_action, SIGNAL(triggered(bool)), this, SLOT(prepareFilter())); if (!first_filter) first_filter = prep_action; if (filter_text.compare(df_def->strval) == 0) { match = true; } } if (first_filter) bb_menu->insertSeparator(first_filter); if (match) { bookmark_button_->setStockIcon("x-filter-matching-bookmark"); QAction *remove_action = new QAction(tr("Remove this filter"), bb_menu); bb_menu->insertAction(manage_action, remove_action); remove_action->setData(filter_text); connect(remove_action, SIGNAL(triggered(bool)), this, SLOT(removeFilter())); } else { bookmark_button_->setStockIcon("x-filter-bookmark"); } if (!match && (syntaxState() == Valid || syntaxState() == Deprecated) && !filter_text.isEmpty()) { enable_save_action = true; } save_action->setEnabled(enable_save_action); }
bool DisplayFilterEdit::checkFilter() { checkFilter(text()); return syntaxState() != Invalid; }