wireshark/ui/qt/display_filter_combo.cpp
Gerald Combs ae7ee61e84 Rename the "saved_val" preference element to "stashed_val" in order to
more clearly indicate that it's a copy of a preference value rather than
something we've saved in the preferences file. Update
prefs_pref_to_str() to handle default, stashed, and current prefs.

Create ui/preference_utils.[ch] and move some common routines there. Use
prefs_pref_type_name() in the GTK+ preferences dialog.

Make the "OK" button in the Qt preferences dialog work. We simply write
the prefs and redissect on "OK" and do nothing on "Cancel". This is
intentionally different from the Apply/OK/Cancel behavior in the GTK+
version.

Add a general "emitAppSignal" method to wsApp and use it for packet
dissection and preference changes.

Suggest that we might want to create a WsString class to make conversion
between QStrings, gchar *s, and GStrings easier.

svn path=/trunk/; revision=47139
2013-01-18 00:50:14 +00:00

151 lines
4.1 KiB
C++

/* display_filter_combo.cpp
*
* $Id$
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <stdio.h>
#include "qt_ui_utils.h"
#include "ui/recent.h"
#include <epan/prefs.h>
#include "display_filter_edit.h"
#include "display_filter_combo.h"
#include "wireshark_application.h"
#include <QCompleter>
// If we ever add support for multiple windows this will need to be replaced.
static DisplayFilterCombo *cur_display_filter_combo = NULL;
DisplayFilterCombo::DisplayFilterCombo(QWidget *parent) :
QComboBox(parent)
{
setEditable(true);
setLineEdit(new DisplayFilterEdit());
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
setAccessibleName(tr("Display filter selector"));
cur_display_filter_combo = this;
setStyleSheet(
"QComboBox {"
#ifdef Q_WS_MAC
" border: 1px solid gray;"
#else
" border: 1px solid palette(shadow);"
#endif
" border-radius: 3px;"
" padding: 0px 0px 0px 0px;"
" margin-left: 0px;"
" min-width: 20em;"
" }"
"QComboBox::drop-down {"
" subcontrol-origin: padding;"
" subcontrol-position: top right;"
" width: 16px;"
" border-left-width: 0px;"
" }"
"QComboBox::down-arrow {"
" image: url(:/dfilter/dfilter_dropdown.png);"
" }"
"QComboBox::down-arrow:on { /* shift the arrow when popup is open */"
" top: 1px;"
" left: 1px;"
"}"
);
completer()->setCompletionMode(QCompleter::PopupCompletion);
connect(wsApp, SIGNAL(preferencesChanged()), this, SLOT(updateMaxCount()));
}
extern "C" void dfilter_recent_combo_write_all(FILE *rf) {
if (!cur_display_filter_combo)
return;
cur_display_filter_combo->writeRecent(rf);
}
void DisplayFilterCombo::writeRecent(FILE *rf) {
int i;
const char *filter_str;
for (i = 0; i < count(); i++) {
filter_str = itemText(i).toUtf8().constData();
if(filter_str && strlen(filter_str) > 0) {
fprintf(rf, RECENT_KEY_DISPLAY_FILTER ": %s\n", filter_str);
}
}
}
void DisplayFilterCombo::applyDisplayFilter()
{
DisplayFilterEdit *df_edit = qobject_cast<DisplayFilterEdit *>(lineEdit());
if (df_edit) df_edit->applyDisplayFilter();
}
void DisplayFilterCombo::updateMaxCount()
{
setMaxCount(prefs.gui_recent_df_entries_max);
}
extern "C" gboolean dfilter_combo_add_recent(const gchar *filter) {
if (!cur_display_filter_combo)
return FALSE;
cur_display_filter_combo->addItem(filter);
cur_display_filter_combo->clearEditText();
return TRUE;
}
// xxx - Move to an as-yet-to-be-written capture filter module along with ::addRecentCapture and ::writeRecentCapture
QList<QString> cfilters;
extern "C" gboolean cfilter_combo_add_recent(const gchar *filter) {
cfilters.append(filter);
return TRUE;
}
extern "C" void cfilter_combo_recent_write_all(FILE *rf) {
QString cfilter;
foreach (cfilter, cfilters) {
fprintf (rf, RECENT_KEY_CAPTURE_FILTER ": %s\n", cfilter.toUtf8().constData());
}
}
/*
* Editor modelines
*
* Local Variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* ex: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/