/* about_dialog.cpp * * 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 "config.h" #include "about_dialog.h" #include "ui_about_dialog.h" #include "wireshark_application.h" #include #ifdef HAVE_LIBSMI #include #endif #ifdef HAVE_GEOIP #include #endif #ifdef HAVE_LUA #include #endif #include "../log.h" #include "../version_info.h" #include "../register.h" #include "ui/text_import_scanner.h" #include "ui/last_open_dir.h" #include "ui/alert_box.h" #include "ui/help_url.h" #include "file.h" #include "wsutil/file_util.h" #include "wsutil/tempfile.h" #include "wsutil/plugins.h" #include "qt_ui_utils.h" #include #include #include #include "wireshark_application.h" // To do: // - Tweak and enhance ui... const QString AboutDialog::about_folders_row(const char *name, const QString dir, const char *typ_file) { int one_em = fontMetrics().height(); QString short_dir = fontMetrics().elidedText(dir, Qt::ElideMiddle, one_em * 18); // Arbitrary // It would be really nice to be able to add a tooltip with the // full path here but Qt's rich text doesn't appear to support // "a title=". return QString("%1%3%4\n") .arg(name) .arg(QUrl::fromLocalFile(dir).toString()) .arg(short_dir) .arg(typ_file); } static void plugins_add_description(const char *name, const char *version, const char *types, const char *filename, void *user_data ) { QList *plugin_data = (QList *)user_data; QStringList plugin_row = QStringList() << name << version << types << filename; *plugin_data << plugin_row; } const QString AboutDialog::plugins_scan() { QList plugin_data; QString plugin_table; #ifdef HAVE_PLUGINS plugins_get_descriptions(plugins_add_description, &plugin_data); #endif #ifdef HAVE_LUA wslua_plugins_get_descriptions(plugins_add_description, &plugin_data); #endif int one_em = fontMetrics().height(); QString short_file; foreach (QStringList plugin_row, plugin_data) { short_file = fontMetrics().elidedText(plugin_row[3], Qt::ElideMiddle, one_em * 22); // Arbitrary plugin_table += QString("%1%2%3%4\n") .arg(plugin_row[0]) // Name .arg(plugin_row[1]) // Version .arg(plugin_row[2]) // Type .arg(short_file); } return plugin_table; } AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent), ui(new Ui::AboutDialog) { ui->setupUi(this); QFile f_authors; QFile f_license; const char *constpath; QString message; #if defined (HAVE_LIBSMI) || defined (HAVE_GEOIP) char *path = NULL; gint i; gchar **resultArray; #endif /* Wireshark tab */ /* Construct the message string */ message = QString( "Version " VERSION "%1\n" "\n" "%2" "\n" "%3" "\n" "%4" "\n" "Wireshark is Open Source Software released under the GNU General Public License.\n" "\n" "Check the man page and http://www.wireshark.org for more information.") .arg(wireshark_gitversion).arg(get_copyright_info()).arg(comp_info_str->str) .arg(runtime_info_str->str); ui->label_wireshark->setTextInteractionFlags(Qt::TextSelectableByMouse); ui->label_wireshark->setText(message); /* Check if it is a dev release... (VERSION_MINOR is odd in dev release) */ #if VERSION_MINOR & 1 ui->label_logo->setPixmap( QPixmap( ":/about/wssplash_dev.png" ) ); #endif /* Authors */ f_authors.setFileName(get_datafile_path("AUTHORS-SHORT")); f_authors.open(QFile::ReadOnly | QFile::Text); QTextStream ReadFile_authors(&f_authors); ReadFile_authors.setCodec("UTF-8"); ui->pte_Authors->setFont(wsApp->monospaceFont()); ui->pte_Authors->insertPlainText(ReadFile_authors.readAll()); ui->pte_Authors->moveCursor(QTextCursor::Start); /* Folders */ int one_em = fontMetrics().height(); // Couldn't get CSS to work. message = QString("\n").arg(one_em / 4); message += "\n"; /* "file open" */ message += about_folders_row("\"File\" dialogs", get_last_open_dir(), "capture files"); /* temp */ message += about_folders_row("Temp", g_get_tmp_dir(), "untitled capture files"); /* pers conf */ message += about_folders_row("Personal configuration", gchar_free_to_qstring(get_persconffile_path("", FALSE)), "dfilters, preferences, ethers, ..."); /* global conf */ constpath = get_datafile_dir(); if (constpath != NULL) { message += about_folders_row("Global configuration", constpath, "dfilters, preferences, manuf, ..."); } /* system */ message += about_folders_row("System", get_systemfile_dir(), "ethers, ipxnets"); /* program */ message += about_folders_row("Program", get_progfile_dir(), "program files"); #if defined(HAVE_PLUGINS) || defined(HAVE_LUA) /* pers plugins */ message += about_folders_row("Personal Plugins", gchar_free_to_qstring(get_plugins_pers_dir()), "dissector plugins"); /* global plugins */ message += about_folders_row("Global Plugins", get_plugin_dir(), "dissector plugins"); #endif #ifdef HAVE_GEOIP /* GeoIP */ path = geoip_db_get_paths(); resultArray = g_strsplit(path, G_SEARCHPATH_SEPARATOR_S, 10); for(i = 0; resultArray[i]; i++) { message += about_folders_row("GeoIP path", g_strstrip(resultArray[i]), "GeoIP database search path"); } g_strfreev(resultArray); g_free(path); #endif #ifdef HAVE_LIBSMI /* SMI MIBs/PIBs */ path = oid_get_default_mib_path(); resultArray = g_strsplit(path, G_SEARCHPATH_SEPARATOR_S, 10); for(i = 0; resultArray[i]; i++) { message += about_folders_row("MIB/PIB path", g_strstrip(resultArray[i]), "SMI MIB/PIB search path"); } g_strfreev(resultArray); g_free(path); #endif message += "
NameLocationTypical Files
"; ui->label_folders->setText(message); /* Plugins */ message = QString("\n").arg(one_em / 4); message += "\n"; message += plugins_scan(); message += "
NameVersionTypePath
"; ui->label_plugins->setText(message); /* License */ #if defined(_WIN32) f_license.setFileName(get_datafile_path("COPYING.txt")); #else f_license.setFileName(get_datafile_path("COPYING")); #endif f_license.open(QFile::ReadOnly | QFile::Text); QTextStream ReadFile_license(&f_license); ui->pte_License->setFont(wsApp->monospaceFont()); ui->pte_License->insertPlainText(ReadFile_license.readAll()); ui->pte_License->moveCursor(QTextCursor::Start); } AboutDialog::~AboutDialog() { delete ui; } /* * 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: */