diff --git a/epan/prefs.c b/epan/prefs.c index 9a4b224413..e3e4086bc8 100644 --- a/epan/prefs.c +++ b/epan/prefs.c @@ -1915,7 +1915,10 @@ prefs_register_modules(void) prefs_register_obsolete_preference(gui_font_module, "font_name"); prefs_register_string_preference(gui_font_module, "gtk2.font_name", "Font name", - "Font name for packet list, protocol tree, and hex dump panes.", (const char**)(&prefs.gui_font_name)); + "Font name for packet list, protocol tree, and hex dump panes. (GTK+)", (const char**)(&prefs.gui_gtk2_font_name)); + + prefs_register_string_preference(gui_font_module, "qt.font_name", "Font name", + "Font name for packet list, protocol tree, and hex dump panes. (Qt)", (const char**)(&prefs.gui_qt_font_name)); /* User Interface : Colors */ gui_color_module = prefs_register_subtree(gui_module, "Colors", "Colors", NULL); @@ -2571,12 +2574,13 @@ pre_init_prefs(void) prefs.gui_toolbar_main_style = TB_STYLE_ICONS; prefs.gui_toolbar_filter_style = TB_STYLE_TEXT; /* This can be g_freed, so it must be g_mallocated. */ - /* XXX - are these the right font names for Qt? */ #ifdef _WIN32 - prefs.gui_font_name = g_strdup("Lucida Console 10"); + prefs.gui_gtk2_font_name = g_strdup("Lucida Console 10"); #else - prefs.gui_font_name = g_strdup("Monospace 10"); + prefs.gui_gtk2_font_name = g_strdup("Monospace 10"); #endif + /* We try to find the best font in the Qt code */ + prefs.gui_qt_font_name = g_strdup(""); prefs.gui_marked_fg.pixel = 65535; prefs.gui_marked_fg.red = 65535; prefs.gui_marked_fg.green = 65535; diff --git a/epan/prefs.h b/epan/prefs.h index 342d797bde..8b29860ca6 100644 --- a/epan/prefs.h +++ b/epan/prefs.h @@ -136,7 +136,8 @@ typedef struct _e_prefs { gboolean gui_hex_dump_highlight_style; gint gui_toolbar_main_style; gint gui_toolbar_filter_style; - gchar *gui_font_name; + gchar *gui_gtk2_font_name; + gchar *gui_qt_font_name; color_t gui_marked_fg; color_t gui_marked_bg; color_t gui_ignored_fg; diff --git a/ui/gtk/font_utils.c b/ui/gtk/font_utils.c index c4964d37c5..02eb079230 100644 --- a/ui/gtk/font_utils.c +++ b/ui/gtk/font_utils.c @@ -215,7 +215,7 @@ user_font_apply(void) { PangoFontDescription *old_r_font = NULL; /* convert font name to reflect the zoom level */ - gui_font_name = font_zoom(prefs.gui_font_name); + gui_font_name = font_zoom(prefs.gui_gtk2_font_name); if (gui_font_name == NULL) { /* * This means the font name isn't an XLFD font name. @@ -359,18 +359,18 @@ void font_init(void) #endif /* Try to load the regular fixed-width font */ - m_r_font = pango_font_description_from_string(prefs.gui_font_name); + m_r_font = pango_font_description_from_string(prefs.gui_gtk2_font_name); if (m_r_font == NULL) { /* XXX - pop this up as a dialog box? no */ fprintf(stderr, "wireshark: Warning: font %s not found - defaulting to Monospace 9\n", - prefs.gui_font_name); + prefs.gui_gtk2_font_name); if ((m_r_font = pango_font_description_from_string("Monospace 9")) == NULL) { fprintf(stderr, "wireshark: Error: font Monospace 9 not found\n"); exit(1); } - g_free(prefs.gui_font_name); - prefs.gui_font_name = g_strdup("Monospace 9"); + g_free(prefs.gui_gtk2_font_name); + prefs.gui_gtk2_font_name = g_strdup("Monospace 9"); } /* Call this for the side-effects that set_fonts() produces */ diff --git a/ui/gtk/main.c b/ui/gtk/main.c index f6608deb22..dd6214eb9f 100644 --- a/ui/gtk/main.c +++ b/ui/gtk/main.c @@ -2663,8 +2663,8 @@ main(int argc, char *argv[]) #endif break; case 'm': /* Fixed-width font for the display */ - g_free(prefs_p->gui_font_name); - prefs_p->gui_font_name = g_strdup(optarg); + g_free(prefs_p->gui_gtk2_font_name); + prefs_p->gui_gtk2_font_name = g_strdup(optarg); break; case 'n': /* No name resolution */ gbl_resolv_flags.mac_name = FALSE; diff --git a/ui/gtk/prefs_font_color.c b/ui/gtk/prefs_font_color.c index 486705e38a..fe004eac1a 100644 --- a/ui/gtk/prefs_font_color.c +++ b/ui/gtk/prefs_font_color.c @@ -45,8 +45,8 @@ #define SAMPLE_MARKED_TEXT "Sample marked packet text\n" #define SAMPLE_IGNORED_TEXT "Sample ignored packet text\n" -#define SAMPLE_CLIENT_TEXT "Sample TCP stream client text\n" -#define SAMPLE_SERVER_TEXT "Sample TCP stream server text\n" +#define SAMPLE_CLIENT_TEXT "Sample stream client text\n" +#define SAMPLE_SERVER_TEXT "Sample stream server text\n" #define MFG_IDX 0 #define MBG_IDX 1 #define IFG_IDX 2 @@ -96,14 +96,14 @@ font_color_prefs_show(void) GtkWidget *font_sample, *color_sample, *colorsel; int i; const gchar *mt[] = { - "Marked packet foreground", /* MFG_IDX 0*/ - "Marked packet background", /* MBG_IDX 1*/ - "Ignored packet foreground", /* IFG_IDX 2*/ - "Ignored packet background", /* IBG_IDX 3*/ - "TCP stream client foreground", /* CFG_IDX 4*/ - "TCP stream client background", /* CBG_IDX 5*/ - "TCP stream server foreground", /* SFG_IDX 6*/ - "TCP stream server background" /* SBG_IDX 7*/ + "Marked packet foreground", /* MFG_IDX 0*/ + "Marked packet background", /* MBG_IDX 1*/ + "Ignored packet foreground", /* IFG_IDX 2*/ + "Ignored packet background", /* IBG_IDX 3*/ + "Stream client foreground", /* CFG_IDX 4*/ + "Stream client background", /* CBG_IDX 5*/ + "Stream server foreground", /* SFG_IDX 6*/ + "Stream server background" /* SBG_IDX 7*/ }; int mcount = sizeof(mt) / sizeof (gchar *); GtkTextBuffer *buf; @@ -140,7 +140,7 @@ font_color_prefs_show(void) ws_gtk_grid_attach_extended(GTK_GRID(main_grid), label, 0, 0, 1, 1, GTK_EXPAND|GTK_FILL, 0, 0,0); gtk_widget_show(label); - font_button = gtk_font_button_new_with_font(prefs.gui_font_name); + font_button = gtk_font_button_new_with_font(prefs.gui_gtk2_font_name); gtk_font_button_set_title(GTK_FONT_BUTTON(font_button), "Wireshark: Font"); ws_gtk_grid_attach(GTK_GRID(main_grid), font_button, 1, 0, 1, 1); gtk_widget_show(font_button); @@ -343,10 +343,10 @@ font_color_prefs_fetch(GtkWidget *w _U_) * places where there *can* be a bad preference value. */ if (font_fetch()) { - if (strcmp(new_font_name, prefs.gui_font_name) != 0) { + if (strcmp(new_font_name, prefs.gui_gtk2_font_name) != 0) { font_changed = TRUE; - g_free(prefs.gui_font_name); - prefs.gui_font_name = g_strdup(new_font_name); + g_free(prefs.gui_gtk2_font_name); + prefs.gui_gtk2_font_name = g_strdup(new_font_name); } } } diff --git a/ui/qt/CMakeLists.txt b/ui/qt/CMakeLists.txt index a62402853d..db8f3063c6 100644 --- a/ui/qt/CMakeLists.txt +++ b/ui/qt/CMakeLists.txt @@ -38,6 +38,7 @@ set(QTSHARK_H_SRC export_dissection_dialog.h export_object_dialog.h file_set_dialog.h + font_color_preferences_frame.h import_text_dialog.h interface_tree.h label_stack.h @@ -46,7 +47,6 @@ set(QTSHARK_H_SRC main_welcome.h main_window.h main_window_preferences_frame.h - monospace_font.h packet_comment_dialog.h packet_format_group_box.h packet_list.h @@ -86,6 +86,7 @@ set(QTSHARK_CPP_SRC export_dissection_dialog.cpp export_object_dialog.cpp file_set_dialog.cpp + font_color_preferences_frame.cpp import_text_dialog.cpp interface_tree.cpp label_stack.cpp @@ -96,7 +97,6 @@ set(QTSHARK_CPP_SRC main_window.cpp main_window_preferences_frame.cpp main_window_slots.cpp - monospace_font.cpp packet_comment_dialog.cpp packet_format_group_box.cpp packet_list.cpp @@ -127,6 +127,7 @@ set(QTSHARK_UI column_preferences_frame.ui export_object_dialog.ui file_set_dialog.ui + font_color_preferences_frame.ui import_text_dialog.ui layout_preferences_frame.ui main_welcome.ui diff --git a/ui/qt/Makefile.am b/ui/qt/Makefile.am index 23fbf5881c..7fe01cba0d 100644 --- a/ui/qt/Makefile.am +++ b/ui/qt/Makefile.am @@ -89,6 +89,8 @@ export_object_dialog.cpp export_object_dialog.h: ui_export_object_dialog.h file_set_dialog.cpp file_set_dialog.h: ui_file_set_dialog.h +font_color_preferences_frame.cpp font_color_preferences_frame.h: ui_font_color_preferences_frame.h + import_text_dialog.cpp import_text_dialog.h: ui_import_text_dialog.h layout_preferences_frame.cpp layout_preferences_frame.h: ui_layout_preferences_frame.h diff --git a/ui/qt/Makefile.common b/ui/qt/Makefile.common index 92cc573e61..613434597e 100644 --- a/ui/qt/Makefile.common +++ b/ui/qt/Makefile.common @@ -34,6 +34,7 @@ GENERATED_NODIST_HEADER_FILES = \ ui_column_preferences_frame.h \ ui_export_object_dialog.h \ ui_file_set_dialog.h \ + ui_font_color_preferences_frame.h \ ui_import_text_dialog.h \ ui_layout_preferences_frame.h \ ui_main_welcome.h \ @@ -96,6 +97,7 @@ MOC_HDRS = \ export_dissection_dialog.h \ export_object_dialog.h \ file_set_dialog.h \ + font_color_preferences_frame.h \ import_text_dialog.h \ interface_tree.h \ label_stack.h \ @@ -104,7 +106,6 @@ MOC_HDRS = \ main_welcome.h \ main_window.h \ main_window_preferences_frame.h \ - monospace_font.h \ packet_comment_dialog.h \ packet_format_group_box.h \ packet_list.h \ @@ -132,6 +133,7 @@ UI_FILES = \ column_preferences_frame.ui \ export_object_dialog.ui \ file_set_dialog.ui \ + font_color_preferences_frame.ui \ import_text_dialog.ui \ layout_preferences_frame.ui \ main_welcome.ui \ @@ -205,6 +207,7 @@ WIRESHARK_QT_SRC = \ export_dissection_dialog.cpp \ export_object_dialog.cpp \ file_set_dialog.cpp \ + font_color_preferences_frame.cpp \ import_text_dialog.cpp \ interface_tree.cpp \ label_stack.cpp \ @@ -215,7 +218,6 @@ WIRESHARK_QT_SRC = \ main_window.cpp \ main_window_preferences_frame.cpp \ main_window_slots.cpp \ - monospace_font.cpp \ packet_comment_dialog.cpp \ packet_format_group_box.cpp \ packet_list.cpp \ diff --git a/ui/qt/QtShark.pro b/ui/qt/QtShark.pro index 73faee8fa2..e3b72e261e 100644 --- a/ui/qt/QtShark.pro +++ b/ui/qt/QtShark.pro @@ -196,7 +196,8 @@ FORMS += main_window.ui \ preferences_dialog.ui \ main_window_preferences_frame.ui \ layout_preferences_frame.ui \ - column_preferences_frame.ui + column_preferences_frame.ui \ + font_color_preferences_frame.ui win32 { ## These should be in config.pri ?? !isEmpty(PORTAUDIO_DIR) { @@ -233,7 +234,8 @@ HEADERS += $$HEADERS_WS_C \ preferences_dialog.h \ main_window_preferences_frame.h \ layout_preferences_frame.h \ - column_preferences_frame.h + column_preferences_frame.h \ + font_color_preferences_frame.h win32 { OBJECTS_WS_C = $$SOURCES_WS_C @@ -395,7 +397,6 @@ HEADERS += \ main_status_bar.h \ main_welcome.h \ main_window.h \ - monospace_font.h \ packet_list.h \ packet_list_model.h \ packet_list_record.h \ @@ -433,7 +434,6 @@ SOURCES += \ main_welcome.cpp \ main_window.cpp \ main_window_slots.cpp \ - monospace_font.cpp \ packet_comment_dialog.cpp \ packet_format_group_box.cpp \ packet_list.cpp \ @@ -456,4 +456,5 @@ SOURCES += \ preferences_dialog.cpp \ main_window_preferences_frame.cpp \ layout_preferences_frame.cpp \ - column_preferences_frame.cpp + column_preferences_frame.cpp \ + font_color_preferences_frame.cpp diff --git a/ui/qt/color_utils.cpp b/ui/qt/color_utils.cpp index 499771aa5f..02f9c56f4b 100644 --- a/ui/qt/color_utils.cpp +++ b/ui/qt/color_utils.cpp @@ -21,13 +21,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "config.h" - -#include #include "color_utils.h" -#include "color.h" /* * Initialize a color with R, G, and B values, including any toolkit-dependent @@ -51,12 +47,16 @@ initialize_color(color_t *color, guint16 red, guint16 green, guint16 blue) return TRUE; } -// XXX - We probably don't need a class. -ColorUtils::ColorUtils(QWidget *parent) : - QWidget(parent) +ColorUtils::ColorUtils(QObject *parent) : + QObject(parent) { } +QColor ColorUtils::fromColorT (color_t *color) { + if (!color) return QColor(); + return QColor(color->red >> 8, color->green >> 8, color->blue >> 8); +} + /* * Editor modelines * diff --git a/ui/qt/color_utils.h b/ui/qt/color_utils.h index e8372a1ad0..d1d7b09cb4 100644 --- a/ui/qt/color_utils.h +++ b/ui/qt/color_utils.h @@ -24,13 +24,22 @@ #ifndef COLOR_UTILS_H #define COLOR_UTILS_H -#include +#include "config.h" -class ColorUtils : public QWidget +#include + +#include "color.h" + +#include +#include + +class ColorUtils : public QObject { Q_OBJECT public: - explicit ColorUtils(QWidget *parent = 0); + explicit ColorUtils(QObject *parent = 0); + + static QColor fromColorT(color_t *color); signals: diff --git a/ui/qt/font_color_preferences_frame.cpp b/ui/qt/font_color_preferences_frame.cpp new file mode 100644 index 0000000000..fa0d0d90c1 --- /dev/null +++ b/ui/qt/font_color_preferences_frame.cpp @@ -0,0 +1,230 @@ +/* font_color_preferences_frame.cpp + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * 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 "font_color_preferences_frame.h" +#include "ui_font_color_preferences_frame.h" +#include "color_utils.h" +#include "wireshark_application.h" + +#include +#include + +#include + +static const char *font_pangrams_[] = { + "Example GIF query packets have jumbo window sizes", + "Lazy badgers move unique waxy jellyfish packets" +}; +const int num_font_pangrams_ = (sizeof font_pangrams_ / sizeof font_pangrams_[0]); + +FontColorPreferencesFrame::FontColorPreferencesFrame(QWidget *parent) : + QFrame(parent), + ui(new Ui::FontColorPreferencesFrame) +{ + ui->setupUi(this); + + pref_qt_gui_font_name_ = prefFromPrefPtr(&prefs.gui_qt_font_name); + pref_marked_fg_ = prefFromPrefPtr(&prefs.gui_marked_fg); + pref_marked_bg_ = prefFromPrefPtr(&prefs.gui_marked_bg); + pref_ignored_fg_ = prefFromPrefPtr(&prefs.gui_ignored_fg); + pref_ignored_bg_ = prefFromPrefPtr(&prefs.gui_ignored_bg); + pref_client_fg_ = prefFromPrefPtr(&prefs.st_client_fg); + pref_client_bg_ = prefFromPrefPtr(&prefs.st_client_bg); + pref_server_fg_ = prefFromPrefPtr(&prefs.st_server_fg); + pref_server_bg_ = prefFromPrefPtr(&prefs.st_server_bg); + + cur_font_.fromString(pref_qt_gui_font_name_->stashed_val.string); + +} + +FontColorPreferencesFrame::~FontColorPreferencesFrame() +{ + delete ui; +} + +void FontColorPreferencesFrame::showEvent(QShowEvent *evt) +{ + Q_UNUSED(evt) + + GRand *rand_state = g_rand_new(); + QString pangram = QString(font_pangrams_[g_rand_int_range(rand_state, 0, num_font_pangrams_)]) + " 0123456789"; + ui->fontSampleLineEdit->setText(pangram); + ui->fontSampleLineEdit->setCursorPosition(0); + ui->fontSampleLineEdit->setMinimumWidth(wsApp->monospaceTextSize(pangram.toUtf8().constData()) + wsApp->monospaceTextSize(" ")); + g_rand_free(rand_state); + + updateWidgets(); +} + +void FontColorPreferencesFrame::updateWidgets() +{ + int margin = style()->pixelMetric(QStyle::PM_LayoutLeftMargin); + + ui->fontPushButton->setText( + cur_font_.family() + " " + cur_font_.styleName() + " " + + QString::number(cur_font_.pointSizeF(), 'f', 1)); + ui->fontSampleLineEdit->setFont(cur_font_); + + QString line_edit_ss = QString("QLineEdit { margin-left: %1px; }").arg(margin); + ui->fontSampleLineEdit->setStyleSheet(line_edit_ss); + + QString color_button_ss = + "QPushButton {" + " border: 1px solid palette(Dark);" + " background-color: %1;" + " margin-left: %2px;" + "}"; + QString sample_text_ss = + "QLineEdit {" + " color: %1;" + " background-color: %2;" + "}"; + + ui->markedFGPushButton->setStyleSheet(color_button_ss.arg( + ColorUtils::fromColorT(&pref_marked_fg_->stashed_val.color).name()) + .arg(margin)); + ui->markedBGPushButton->setStyleSheet(color_button_ss.arg( + ColorUtils::fromColorT(&pref_marked_bg_->stashed_val.color).name()) + .arg(0)); + ui->markedSampleLineEdit->setStyleSheet(sample_text_ss.arg( + ColorUtils::fromColorT(&pref_marked_fg_->stashed_val.color).name(), + ColorUtils::fromColorT(&pref_marked_bg_->stashed_val.color).name())); + ui->markedSampleLineEdit->setFont(cur_font_); + + ui->ignoredFGPushButton->setStyleSheet(color_button_ss.arg( + ColorUtils::fromColorT(&pref_ignored_fg_->stashed_val.color).name()) + .arg(margin)); + ui->ignoredBGPushButton->setStyleSheet(color_button_ss.arg( + ColorUtils::fromColorT(&pref_ignored_bg_->stashed_val.color).name()) + .arg(0)); + ui->ignoredSampleLineEdit->setStyleSheet(sample_text_ss.arg( + ColorUtils::fromColorT(&pref_ignored_fg_->stashed_val.color).name(), + ColorUtils::fromColorT(&pref_ignored_bg_->stashed_val.color).name())); + ui->ignoredSampleLineEdit->setFont(cur_font_); + + ui->clientFGPushButton->setStyleSheet(color_button_ss.arg( + ColorUtils::fromColorT(&pref_client_fg_->stashed_val.color).name()) + .arg(margin)); + ui->clientBGPushButton->setStyleSheet(color_button_ss.arg( + ColorUtils::fromColorT(&pref_client_bg_->stashed_val.color).name()) + .arg(0)); + ui->clientSampleLineEdit->setStyleSheet(sample_text_ss.arg( + ColorUtils::fromColorT(&pref_client_fg_->stashed_val.color).name(), + ColorUtils::fromColorT(&pref_client_bg_->stashed_val.color).name())); + ui->clientSampleLineEdit->setFont(cur_font_); + + ui->serverFGPushButton->setStyleSheet(color_button_ss.arg( + ColorUtils::fromColorT(&pref_server_fg_->stashed_val.color).name()) + .arg(margin)); + ui->serverBGPushButton->setStyleSheet(color_button_ss.arg( + ColorUtils::fromColorT(&pref_server_bg_->stashed_val.color).name()) + .arg(0)); + ui->serverSampleLineEdit->setStyleSheet(sample_text_ss.arg( + ColorUtils::fromColorT(&pref_server_fg_->stashed_val.color).name(), + ColorUtils::fromColorT(&pref_server_bg_->stashed_val.color).name())); + ui->serverSampleLineEdit->setFont(cur_font_); +} + +void FontColorPreferencesFrame::changeColor(pref_t *pref) +{ + QColorDialog color_dlg; + + color_dlg.setCurrentColor(QColor( + pref->stashed_val.color.red >> 8, + pref->stashed_val.color.green >> 8, + pref->stashed_val.color.blue >> 8 + )); + if (color_dlg.exec() == QDialog::Accepted) { + QColor cc = color_dlg.currentColor(); + pref->stashed_val.color.red = cc.red() << 8 | cc.red(); + pref->stashed_val.color.green = cc.green() << 8 | cc.green(); + pref->stashed_val.color.blue = cc.blue() << 8 | cc.blue(); + updateWidgets(); + } +} + +#include +void FontColorPreferencesFrame::on_fontPushButton_clicked() +{ + bool ok; + QFont new_font = QFontDialog::getFont(&ok, cur_font_, this, "Wireshark: Font"); + if (ok) { + g_free(pref_qt_gui_font_name_->stashed_val.string); + pref_qt_gui_font_name_->stashed_val.string = g_strdup(new_font.toString().toUtf8().constData()); + cur_font_ = new_font; + updateWidgets(); + } +} + +void FontColorPreferencesFrame::on_markedFGPushButton_clicked() +{ + changeColor(pref_marked_fg_); +} + +void FontColorPreferencesFrame::on_markedBGPushButton_clicked() +{ + changeColor(pref_marked_bg_); +} + +void FontColorPreferencesFrame::on_ignoredFGPushButton_clicked() +{ + changeColor(pref_ignored_fg_); +} + +void FontColorPreferencesFrame::on_ignoredBGPushButton_clicked() +{ + changeColor(pref_ignored_bg_); +} + +void FontColorPreferencesFrame::on_clientFGPushButton_clicked() +{ + changeColor(pref_client_fg_); +} + +void FontColorPreferencesFrame::on_clientBGPushButton_clicked() +{ + changeColor(pref_client_bg_); +} + +void FontColorPreferencesFrame::on_serverFGPushButton_clicked() +{ + changeColor(pref_server_fg_); +} + +void FontColorPreferencesFrame::on_serverBGPushButton_clicked() +{ + changeColor(pref_server_bg_); +} + +/* + * 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: + */ diff --git a/ui/qt/font_color_preferences_frame.h b/ui/qt/font_color_preferences_frame.h new file mode 100644 index 0000000000..1b1a4e82d2 --- /dev/null +++ b/ui/qt/font_color_preferences_frame.h @@ -0,0 +1,79 @@ +/* font_color_preferences_frame.h + * + * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * 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. + */ + +#ifndef FONT_COLOR_PREFERENCES_FRAME_H +#define FONT_COLOR_PREFERENCES_FRAME_H + +#include "preferences_dialog.h" + +#include +#include + +namespace Ui { +class FontColorPreferencesFrame; +} + +class FontColorPreferencesFrame : public QFrame +{ + Q_OBJECT + +public: + explicit FontColorPreferencesFrame(QWidget *parent = 0); + ~FontColorPreferencesFrame(); + +protected: + void showEvent(QShowEvent *evt); + +private: + Ui::FontColorPreferencesFrame *ui; + + pref_t *pref_qt_gui_font_name_; + pref_t *pref_marked_fg_; + pref_t *pref_marked_bg_; + pref_t *pref_ignored_fg_; + pref_t *pref_ignored_bg_; + pref_t *pref_client_fg_; + pref_t *pref_client_bg_; + pref_t *pref_server_fg_; + pref_t *pref_server_bg_; + QFont cur_font_; + + void updateWidgets(); + void changeColor(pref_t *pref); + +private slots: + void on_fontPushButton_clicked(); + + void on_markedFGPushButton_clicked(); + void on_markedBGPushButton_clicked(); + void on_ignoredFGPushButton_clicked(); + void on_ignoredBGPushButton_clicked(); + void on_clientFGPushButton_clicked(); + void on_clientBGPushButton_clicked(); + void on_serverFGPushButton_clicked(); + void on_serverBGPushButton_clicked(); + + +}; + +#endif // FONT_COLOR_PREFERENCES_FRAME_H diff --git a/ui/qt/font_color_preferences_frame.ui b/ui/qt/font_color_preferences_frame.ui new file mode 100644 index 0000000000..053a161ce5 --- /dev/null +++ b/ui/qt/font_color_preferences_frame.ui @@ -0,0 +1,215 @@ + + + FontColorPreferencesFrame + + + + 0 + 0 + 540 + 280 + + + + + 540 + 280 + + + + Frame + + + 0 + + + + + + + + Main window font: + + + + + + + Select Font + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + true + + + + + + + Colors: + + + + + + + + + QPushButton { border: 1px solid palette(Dark); } + + + true + + + + + + + Sample ignored packet text + + + true + + + + + + + QPushButton { border: 1px solid palette(Dark); } + + + true + + + + + + + Sample marked packet text + + + true + + + + + + + QPushButton { border: 1px solid palette(Dark); } + + + true + + + + + + + Sample stream client text + + + true + + + + + + + QPushButton { border: 1px solid palette(Dark); } + + + true + + + + + + + Sample stream server text + + + true + + + + + + + QPushButton { border: 1px solid palette(Dark); } + + + true + + + + + + + QPushButton { border: 1px solid palette(Dark); } + + + true + + + + + + + QPushButton { border: 1px solid palette(Dark); } + + + true + + + + + + + QPushButton { border: 1px solid palette(Dark); } + + + true + + + + + + + + + Qt::Vertical + + + + 178 + 13 + + + + + + + + + diff --git a/ui/qt/main.cpp b/ui/qt/main.cpp index 955ebac211..9a57c68db3 100644 --- a/ui/qt/main.cpp +++ b/ui/qt/main.cpp @@ -119,8 +119,6 @@ #include -#include "monospace_font.h" - #include #include #include @@ -1002,7 +1000,7 @@ int main(int argc, char *argv[]) // #endif // g_free(rc_file); - font_init(); + wsApp->setMonospaceFont(prefs.gui_qt_font_name); //////// @@ -1022,25 +1020,25 @@ int main(int argc, char *argv[]) //////// - switch (user_font_apply()) { - case FA_SUCCESS: - break; - case FA_FONT_NOT_RESIZEABLE: - /* "user_font_apply()" popped up an alert box. */ - /* turn off zooming - font can't be resized */ - case FA_FONT_NOT_AVAILABLE: - /* XXX - did we successfully load the un-zoomed version earlier? - If so, this *probably* means the font is available, but not at - this particular zoom level, but perhaps some other failure - occurred; I'm not sure you can determine which is the case, - however. */ - /* turn off zooming - zoom level is unavailable */ - default: - /* in any other case than FA_SUCCESS, turn off zooming */ -// recent.gui_zoom_level = 0; - /* XXX: would it be a good idea to disable zooming (insensitive GUI)? */ - break; - } +// switch (user_font_apply()) { +// case FA_SUCCESS: +// break; +// case FA_FONT_NOT_RESIZEABLE: +// /* "user_font_apply()" popped up an alert box. */ +// /* turn off zooming - font can't be resized */ +// case FA_FONT_NOT_AVAILABLE: +// /* XXX - did we successfully load the un-zoomed version earlier? +// If so, this *probably* means the font is available, but not at +// this particular zoom level, but perhaps some other failure +// occurred; I'm not sure you can determine which is the case, +// however. */ +// /* turn off zooming - zoom level is unavailable */ +// default: +// /* in any other case than FA_SUCCESS, turn off zooming */ +//// recent.gui_zoom_level = 0; +// /* XXX: would it be a good idea to disable zooming (insensitive GUI)? */ +// break; +// } //////// color_filters_init(); diff --git a/ui/qt/monospace_font.cpp b/ui/qt/monospace_font.cpp deleted file mode 100644 index 28014c280e..0000000000 --- a/ui/qt/monospace_font.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/* monospace_font.cpp - * - * $Id$ - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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 "monospace_font.h" - -#include -#include -#include -#include - -// -// XXX We should probably move this to wsApp. -// - -//MonospaceFont::MonospaceFont(QObject *parent) : -// QFont(parent) -//{ -//} - -QFont mono_regular_font_, mono_bold_font_; - -//void MonospaceFont::propagate() { -// emit(monospaceFontChanged(self)); -//} - -// http://en.wikipedia.org/wiki/Category:Monospaced_typefaces -#define WIN_DEF_FONT "Consolas" -#define WIN_ALT_FONTS "Lucida Console" -#define OSX_DEF_FONT "Menlo" -#define OSX_ALT_FONTS "Monaco" -#define X11_DEF_FONT "Bitstream Vera Sans Mono" -#define X11_ALT_FONTS "Liberation Mono" << "DejaVu Sans Mono" -#define FALLBACK_FONTS "Lucida Sans Typewriter" << "Inconsolata" << "Droid Sans Mono" << "Andale Mono" << "Courier New" << "monospace" - -void -font_init(void) { - QStringList substitutes; - - // Try to pick the latest, shiniest fixed-width font for our OS. -#if defined(Q_WS_WIN) -#define DEF_FONT WIN_DEF_FONT -#define FONT_SIZE_ADJUST 2 - substitutes = QStringList() << WIN_ALT_FONTS << OSX_DEF_FONT << OSX_ALT_FONTS << X11_DEF_FONT << X11_ALT_FONTS << FALLBACK_FONTS; -#elif defined(Q_WS_MAC) -#define DEF_FONT OSX_DEF_FONT -#define FONT_SIZE_ADJUST 0 - substitutes = QStringList() << OSX_ALT_FONTS << WIN_DEF_FONT << WIN_ALT_FONTS << X11_DEF_FONT << X11_ALT_FONTS << FALLBACK_FONTS; -#else -#define DEF_FONT X11_DEF_FONT -#define FONT_SIZE_ADJUST 0 - substitutes = QStringList() << X11_ALT_FONTS << WIN_DEF_FONT << WIN_ALT_FONTS << OSX_DEF_FONT << OSX_ALT_FONTS << FALLBACK_FONTS; -#endif - - mono_regular_font_.setFamily(DEF_FONT); - mono_regular_font_.insertSubstitutions(DEF_FONT, substitutes); - mono_regular_font_.setPointSize(wsApp->font().pointSize() + FONT_SIZE_ADJUST); -#if QT_VERSION >= 0x040700 - mono_bold_font_.setStyleHint(QFont::Monospace); - #else - mono_bold_font_.setStyleHint(QFont::TypeWriter); - #endif - - mono_bold_font_.setFamily(DEF_FONT); - mono_bold_font_.insertSubstitutions(DEF_FONT, substitutes); - mono_bold_font_.setPointSize(wsApp->font().pointSize() + FONT_SIZE_ADJUST); -#if QT_VERSION >= 0x040700 - mono_bold_font_.setStyleHint(QFont::Monospace); - #else - mono_bold_font_.setStyleHint(QFont::TypeWriter); - #endif - mono_bold_font_.setWeight(QFont::Bold); -} - -fa_ret_t -user_font_apply(void) { -// char *gui_font_name; -// PangoFontDescription *new_r_font, *new_b_font; -// PangoFontDescription *old_r_font = NULL, *old_b_font = NULL; - - /* convert font name to reflect the zoom level */ -// gui_font_name = font_zoom(prefs.gui_font_name); -// if (gui_font_name == NULL) { -// /* -// * This means the font name isn't an XLFD font name. -// * We just report that for now as a font not available in -// * multiple sizes. -// */ -// simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, -// "Your current font isn't available in any other sizes.\n"); -// return FA_FONT_NOT_RESIZEABLE; -// } - -// /* load normal and bold font */ -// new_r_font = pango_font_description_from_string(gui_font_name); -// new_b_font = pango_font_description_copy(new_r_font); -// pango_font_description_set_weight(new_b_font, PANGO_WEIGHT_BOLD); - -// if (new_r_font == NULL || new_b_font == NULL) { -// /* We're no longer using the new fonts; unreference them. */ -// if (new_r_font != NULL) -// pango_font_description_free(new_r_font); -// if (new_b_font != NULL) -// pango_font_description_free(new_b_font); -// g_free(gui_font_name); - -// /* We let our caller pop up a dialog box, as the error message -// depends on the context (did they zoom in or out, or did they -// do something else? */ -// return FA_FONT_NOT_AVAILABLE; -// } - -// /* the font(s) seem to be ok */ -// packet_list_set_font(new_r_font); -// set_ptree_font_all(new_r_font); -// old_r_font = m_r_font; -// old_b_font = m_b_font; -// set_fonts(new_r_font, new_b_font); - -// /* Redraw the packet bytes windows. */ -// redraw_packet_bytes_all(); - -// /* Redraw the "Follow TCP Stream" windows. */ -// follow_tcp_redraw_all(); - -// /* We're no longer using the old fonts; unreference them. */ -// if (old_r_font != NULL) -// pango_font_description_free(old_r_font); -// if (old_b_font != NULL) -// pango_font_description_free(old_b_font); -// g_free(gui_font_name); - - return FA_SUCCESS; -} - -QFont WiresharkApplication::monospaceFont(bool bold) -{ - return bold ? mono_bold_font_ : mono_regular_font_; -} - -int get_monospace_text_size(const char *str, bool regular) { - QFontMetrics *fm; - - if (regular) - fm = new QFontMetrics(mono_regular_font_); - else - fm = new QFontMetrics(mono_bold_font_); - - return fm->width(str); -} - -/* - * 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: - */ diff --git a/ui/qt/monospace_font.h b/ui/qt/monospace_font.h deleted file mode 100644 index 53e8cace72..0000000000 --- a/ui/qt/monospace_font.h +++ /dev/null @@ -1,77 +0,0 @@ -/* monospace_font.h - * - * $Id$ - * - * Wireshark - Network traffic analyzer - * By Gerald Combs - * 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. - */ - -#ifndef MONOSPACE_FONT_H -#define MONOSPACE_FONT_H - -#include "wireshark_application.h" - -#include - -//class MonospaceFont : public QFont -//{ -// Q_OBJECT -//public: -// explicit MonospaceFont(QObject *parent = 0); -// void propagate(void); - -//signals: -// void monospaceFontChanged(QFont); - -//public slots: - -//}; - -/** Init the application and user fonts at program start. */ -extern void font_init(void); - -/** Return value from font_apply() */ -typedef enum { - FA_SUCCESS, /**< function succeeded */ - FA_FONT_NOT_RESIZEABLE, /**< the chosen font isn't resizable */ - FA_FONT_NOT_AVAILABLE /**< the chosen font isn't available */ -} fa_ret_t; - -/** Applies a new user font, corresponding to the preferences font name and recent zoom level. - * Will also redraw the screen. - * - * @return if the new font could be set or not - */ -extern fa_ret_t user_font_apply(void); - -extern int get_monospace_text_size(const char *str, bool regular); - -#endif // MONOSPACE_FONT_H - -/* - * 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: - */ diff --git a/ui/qt/packet_list.cpp b/ui/qt/packet_list.cpp index 015e66f59e..f17979f104 100644 --- a/ui/qt/packet_list.cpp +++ b/ui/qt/packet_list.cpp @@ -33,8 +33,8 @@ #include #include "packet_list.h" -#include "monospace_font.h" #include "proto_tree.h" +#include "wireshark_application.h" #include "qt_ui_utils.h" @@ -395,9 +395,9 @@ void PacketList::showEvent (QShowEvent *event) { fmt = get_column_format(i); long_str = get_column_width_string(fmt, i); if (long_str) { - col_width = get_monospace_text_size(long_str, TRUE); + col_width = wsApp->monospaceTextSize(long_str); } else { - col_width = get_monospace_text_size(MIN_COL_WIDTH_STR, TRUE); + col_width = wsApp->monospaceTextSize(MIN_COL_WIDTH_STR); } setColumnWidth(i, col_width); } diff --git a/ui/qt/preferences_dialog.cpp b/ui/qt/preferences_dialog.cpp index 9121aedae2..24d43f9b45 100644 --- a/ui/qt/preferences_dialog.cpp +++ b/ui/qt/preferences_dialog.cpp @@ -220,6 +220,7 @@ void PreferencesDialog::showEvent(QShowEvent *evt) pd_ui_->prefsTree->resizeColumnToContents(0); new_prefs_tree_width += pd_ui_->prefsTree->columnWidth(0); + pd_ui_->prefsTree->setMinimumWidth(new_prefs_tree_width); sizes[1] += sizes[0] - new_prefs_tree_width; sizes[0] = new_prefs_tree_width; pd_ui_->splitter->setSizes(sizes); @@ -674,6 +675,7 @@ void PreferencesDialog::on_buttonBox_accepted() // prefs_airpcap_update(); #endif + wsApp->setMonospaceFont(prefs.gui_qt_font_name); wsApp->emitAppSignal(WiresharkApplication::PreferencesChanged); /* Now destroy the "Preferences" dialog. */ diff --git a/ui/qt/preferences_dialog.ui b/ui/qt/preferences_dialog.ui index 2a00617285..cc710080c7 100644 --- a/ui/qt/preferences_dialog.ui +++ b/ui/qt/preferences_dialog.ui @@ -55,9 +55,6 @@ Font and Colors - - ItemIsDragEnabled|ItemIsUserCheckable - @@ -119,7 +116,7 @@ - + @@ -217,6 +214,12 @@
column_preferences_frame.h
1 + + FontColorPreferencesFrame + QFrame +
font_color_preferences_frame.h
+ 1 +
diff --git a/ui/qt/wireshark_application.cpp b/ui/qt/wireshark_application.cpp index eb321b535a..7414374e3c 100644 --- a/ui/qt/wireshark_application.cpp +++ b/ui/qt/wireshark_application.cpp @@ -44,16 +44,17 @@ # include "ui/win32/console_win32.h" #endif /* _WIN32 */ +#include #include -#include #include #include -#include +#include +#include #include #ifdef Q_WS_WIN -#include #include +#include #endif WiresharkApplication *wsApp = NULL; @@ -151,6 +152,8 @@ extern "C" void menu_recent_file_write_all(FILE *rf) { } } + + extern gboolean main_do_quit(void) { WiresharkApplication::quit(); return FALSE; @@ -306,6 +309,70 @@ void WiresharkApplication::helpTopicAction(topic_action_e action) } } +// http://en.wikipedia.org/wiki/Category:Monospaced_typefaces +#define WIN_DEF_FONT "Consolas" +#define WIN_ALT_FONTS "Lucida Console" +#define OSX_DEF_FONT "Menlo" +#define OSX_ALT_FONTS "Monaco" +#define X11_DEF_FONT "Bitstream Vera Sans Mono" +#define X11_ALT_FONTS "Liberation Mono" << "DejaVu Sans Mono" +#define FALLBACK_FONTS "Lucida Sans Typewriter" << "Inconsolata" << "Droid Sans Mono" << "Andale Mono" << "Courier New" << "monospace" + +void WiresharkApplication::setMonospaceFont(const char *font_string) { + + if (font_string && strlen(font_string) > 0) { + mono_regular_font_.fromString(font_string); + mono_bold_font_ = QFont(mono_regular_font_); + mono_bold_font_.setBold(true); + return; + } + + QStringList substitutes; + + // Try to pick the latest, shiniest fixed-width font for our OS. +#if defined(Q_WS_WIN) +#define DEF_FONT WIN_DEF_FONT +#define FONT_SIZE_ADJUST 2 + substitutes = QStringList() << WIN_ALT_FONTS << OSX_DEF_FONT << OSX_ALT_FONTS << X11_DEF_FONT << X11_ALT_FONTS << FALLBACK_FONTS; +#elif defined(Q_WS_MAC) +#define DEF_FONT OSX_DEF_FONT +#define FONT_SIZE_ADJUST 0 + substitutes = QStringList() << OSX_ALT_FONTS << WIN_DEF_FONT << WIN_ALT_FONTS << X11_DEF_FONT << X11_ALT_FONTS << FALLBACK_FONTS; +#else +#define DEF_FONT X11_DEF_FONT +#define FONT_SIZE_ADJUST 0 + substitutes = QStringList() << X11_ALT_FONTS << WIN_DEF_FONT << WIN_ALT_FONTS << OSX_DEF_FONT << OSX_ALT_FONTS << FALLBACK_FONTS; +#endif + + mono_regular_font_.setFamily(DEF_FONT); + mono_regular_font_.insertSubstitutions(DEF_FONT, substitutes); + mono_regular_font_.setPointSize(wsApp->font().pointSize() + FONT_SIZE_ADJUST); + mono_regular_font_.setBold(false); + + mono_bold_font_ = QFont(mono_regular_font_); + mono_bold_font_.setBold(true); + + g_free(prefs.gui_qt_font_name); + prefs.gui_qt_font_name = g_strdup(mono_regular_font_.toString().toUtf8().constData()); +} + +int WiresharkApplication::monospaceTextSize(const char *str, bool bold) +{ + QFontMetrics *fm; + + if (bold) + fm = new QFontMetrics(mono_bold_font_); + else + fm = new QFontMetrics(mono_regular_font_); + + return fm->width(str); +} + +QFont WiresharkApplication::monospaceFont(bool bold) +{ + return bold ? mono_bold_font_ : mono_regular_font_; +} + void WiresharkApplication::setConfigurationProfile(const gchar *profile_name) { char *gdp_path, *dp_path; diff --git a/ui/qt/wireshark_application.h b/ui/qt/wireshark_application.h index 750ea2a9b6..fda28b97af 100644 --- a/ui/qt/wireshark_application.h +++ b/ui/qt/wireshark_application.h @@ -37,8 +37,9 @@ #include "ui/help_url.h" #include -#include #include +#include +#include #include // Recent items: @@ -81,6 +82,8 @@ public: void setLastOpenDir(QString *dir_str); void helpTopicAction(topic_action_e action); QFont monospaceFont(bool bold = false); + void setMonospaceFont(const char *font_string); + int monospaceTextSize(const char *str, bool bold = false); void setConfigurationProfile(const gchar *profile_name); @@ -88,6 +91,8 @@ private: void prefsToCaptureOpts(); bool initialized_; + QFont mono_regular_font_; + QFont mono_bold_font_; QTimer *recent_timer_; QList pending_open_files_;