2012-01-04 22:13:01 +00:00
|
|
|
/* simple_dialog_qt.cpp
|
|
|
|
*
|
|
|
|
* 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
|
2012-06-28 22:56:06 +00:00
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
2012-01-04 22:13:01 +00:00
|
|
|
*/
|
|
|
|
|
2012-09-20 02:03:38 +00:00
|
|
|
#include "config.h"
|
2012-01-04 22:13:01 +00:00
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include <glib.h>
|
|
|
|
|
|
|
|
#include <epan/strutil.h>
|
|
|
|
|
2012-01-16 01:18:56 +00:00
|
|
|
#include "ui/simple_dialog.h"
|
|
|
|
|
2012-01-04 22:13:01 +00:00
|
|
|
#include "simple_dialog_qt.h"
|
|
|
|
|
2012-06-18 08:30:53 +00:00
|
|
|
#include <QMessageBox>
|
|
|
|
|
2012-01-04 22:13:01 +00:00
|
|
|
/* Simple dialog function - Displays a dialog box with the supplied message
|
|
|
|
* text.
|
|
|
|
*
|
|
|
|
* Args:
|
|
|
|
* type : One of ESD_TYPE_*.
|
|
|
|
* btn_mask : The value passed in determines which buttons are displayed.
|
|
|
|
* msg_format : Sprintf-style format of the text displayed in the dialog.
|
|
|
|
* ... : Argument list for msg_format
|
|
|
|
*/
|
|
|
|
|
|
|
|
gpointer
|
|
|
|
vsimple_dialog(ESD_TYPE_E type, gint btn_mask, const gchar *msg_format, va_list ap)
|
|
|
|
{
|
|
|
|
|
|
|
|
gchar *vmessage;
|
|
|
|
gchar *message;
|
|
|
|
SimpleDialog *dlg = NULL;
|
|
|
|
// queued_message_t *queued_message;
|
|
|
|
// GtkWidget *win;
|
|
|
|
// GdkWindowState state = 0;
|
|
|
|
|
|
|
|
/* Format the message. */
|
|
|
|
vmessage = g_strdup_vprintf(msg_format, ap);
|
|
|
|
|
|
|
|
/* convert character encoding from locale to UTF8 (using iconv) */
|
|
|
|
message = g_locale_to_utf8(vmessage, -1, NULL, NULL, NULL);
|
|
|
|
g_free(vmessage);
|
|
|
|
|
|
|
|
g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: vsimple_dialog t: %d bm: %d m: %s", type, btn_mask, message);
|
|
|
|
|
|
|
|
|
|
|
|
// if (top_level != NULL) {
|
|
|
|
// state = gdk_window_get_state(top_level->window);
|
|
|
|
// }
|
|
|
|
|
|
|
|
// /* If we don't yet have a main window or it's iconified, don't show the
|
|
|
|
// dialog. If showing up a dialog, while main window is iconified, program
|
|
|
|
// will become unresponsive! */
|
|
|
|
// if (top_level == NULL || state & GDK_WINDOW_STATE_ICONIFIED) {
|
|
|
|
|
|
|
|
// queued_message = g_malloc(sizeof (queued_message_t));
|
|
|
|
// queued_message->type = type;
|
|
|
|
// queued_message->btn_mask = btn_mask;
|
|
|
|
// queued_message->message = message;
|
|
|
|
// message_queue = g_slist_append(message_queue, queued_message);
|
|
|
|
// return NULL;
|
|
|
|
// }
|
|
|
|
|
|
|
|
// /*
|
|
|
|
// * Do we have any queued up messages? If so, pop them up.
|
|
|
|
// */
|
|
|
|
// display_queued_messages();
|
|
|
|
|
|
|
|
// win = display_simple_dialog(type, btn_mask, message);
|
|
|
|
|
|
|
|
g_free(message);
|
|
|
|
|
|
|
|
return dlg;
|
|
|
|
}
|
|
|
|
|
|
|
|
gpointer
|
|
|
|
simple_dialog(ESD_TYPE_E type, gint btn_mask, const gchar *msg_format, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
gpointer ret;
|
|
|
|
|
|
|
|
va_start(ap, msg_format);
|
|
|
|
ret = vsimple_dialog(type, btn_mask, msg_format, ap);
|
|
|
|
va_end(ap);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2012-12-26 10:33:02 +00:00
|
|
|
const char *
|
2012-01-04 22:13:01 +00:00
|
|
|
simple_dialog_primary_start(void) {
|
2012-12-26 10:33:02 +00:00
|
|
|
return "";
|
2012-01-04 22:13:01 +00:00
|
|
|
}
|
|
|
|
|
2012-12-26 10:33:02 +00:00
|
|
|
const char *
|
2012-01-04 22:13:01 +00:00
|
|
|
simple_dialog_primary_end(void) {
|
2012-12-26 10:33:02 +00:00
|
|
|
return "";
|
2012-01-04 22:13:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
char *
|
|
|
|
simple_dialog_format_message(const char *msg)
|
|
|
|
{
|
|
|
|
char *str;
|
|
|
|
|
|
|
|
if (msg) {
|
|
|
|
str = xml_escape(msg);
|
|
|
|
} else {
|
|
|
|
str = NULL;
|
|
|
|
}
|
|
|
|
return str;
|
|
|
|
}
|
|
|
|
|
|
|
|
void simple_dialog_set_cb(gpointer dialog, simple_dialog_cb_t callback_fct, gpointer data)
|
|
|
|
{
|
|
|
|
g_log(NULL, G_LOG_LEVEL_DEBUG, "FIX: simple_dialog_set_cb d: %p cf: %p d: %p", dialog, callback_fct, data);
|
|
|
|
|
|
|
|
// g_object_set_data(G_OBJECT(GTK_WIDGET(dialog)), CALLBACK_FCT_KEY, callback_fct);
|
|
|
|
// g_object_set_data(G_OBJECT(GTK_WIDGET(dialog)), CALLBACK_DATA_KEY, data);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SimpleDialog::SimpleDialog(QWidget *parent) :
|
|
|
|
QErrorMessage(parent)
|
|
|
|
{
|
|
|
|
}
|
2012-06-18 08:30:53 +00:00
|
|
|
|
|
|
|
static void
|
|
|
|
do_simple_message_box(ESD_TYPE_E type, gboolean *notagain,
|
|
|
|
const char *secondary_msg, const char *msg_format,
|
|
|
|
va_list ap)
|
|
|
|
{
|
2014-01-26 12:56:16 +00:00
|
|
|
QMessageBox *msg_dialog;
|
|
|
|
gchar *message;
|
|
|
|
|
|
|
|
if (notagain != NULL) {
|
|
|
|
if (*notagain) {
|
|
|
|
/*
|
|
|
|
* The user had checked the "Don't show this message again" checkbox
|
|
|
|
* in the past; don't bother showing it.
|
|
|
|
*/
|
|
|
|
return;
|
|
|
|
}
|
2012-06-18 08:30:53 +00:00
|
|
|
}
|
2014-01-26 12:56:16 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* XXX - this should be passed the main window.
|
|
|
|
* Also, this should be set to window modal by setting its window
|
|
|
|
* modality to Qt::WindowModal, so it shows up as a sheet in
|
|
|
|
* OS X.
|
|
|
|
*/
|
|
|
|
msg_dialog = new QMessageBox(NULL);
|
|
|
|
switch (type) {
|
|
|
|
|
|
|
|
case ESD_TYPE_INFO:
|
|
|
|
msg_dialog->setIcon(QMessageBox::Information);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ESD_TYPE_WARN:
|
|
|
|
msg_dialog->setIcon(QMessageBox::Warning);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ESD_TYPE_ERROR:
|
|
|
|
msg_dialog->setIcon(QMessageBox::Critical);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
g_assert_not_reached();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Format the message. */
|
|
|
|
message = g_strdup_vprintf(msg_format, ap);
|
|
|
|
msg_dialog->setText(message);
|
|
|
|
g_free(message);
|
|
|
|
|
|
|
|
/* Add the secondary text. */
|
|
|
|
if (secondary_msg != NULL)
|
|
|
|
msg_dialog->setInformativeText(secondary_msg);
|
2012-06-18 08:30:53 +00:00
|
|
|
|
|
|
|
#if 0
|
2014-01-26 12:56:16 +00:00
|
|
|
if (notagain != NULL) {
|
|
|
|
checkbox = gtk_check_button_new_with_label("Don't show this message again.");
|
|
|
|
gtk_container_set_border_width(GTK_CONTAINER(checkbox), 12);
|
|
|
|
gtk_box_pack_start(GTK_BOX(gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(msg_dialog))), checkbox,
|
|
|
|
TRUE, TRUE, 0);
|
|
|
|
gtk_widget_show(checkbox);
|
|
|
|
}
|
2012-06-18 08:30:53 +00:00
|
|
|
#endif
|
|
|
|
|
2014-01-26 12:56:16 +00:00
|
|
|
msg_dialog->exec();
|
2012-06-18 08:30:53 +00:00
|
|
|
#if 0
|
2014-01-26 12:56:16 +00:00
|
|
|
if (notagain != NULL) {
|
|
|
|
/*
|
|
|
|
* OK, did they check the checkbox?
|
|
|
|
*/
|
|
|
|
*notagain = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox));
|
|
|
|
}
|
2012-06-18 08:30:53 +00:00
|
|
|
#endif
|
2014-01-26 12:56:16 +00:00
|
|
|
delete msg_dialog;
|
2012-06-18 08:30:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Alert box, with optional "don't show this message again" variable
|
|
|
|
* and checkbox, and optional secondary text.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
simple_message_box(ESD_TYPE_E type, gboolean *notagain,
|
|
|
|
const char *secondary_msg, const char *msg_format, ...)
|
|
|
|
{
|
2014-01-26 12:56:16 +00:00
|
|
|
va_list ap;
|
2012-06-18 08:30:53 +00:00
|
|
|
|
2014-01-26 12:56:16 +00:00
|
|
|
va_start(ap, msg_format);
|
|
|
|
do_simple_message_box(type, notagain, secondary_msg, msg_format, ap);
|
|
|
|
va_end(ap);
|
2012-06-18 08:30:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Error alert box, taking a format and a va_list argument.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
vsimple_error_message_box(const char *msg_format, va_list ap)
|
|
|
|
{
|
2014-01-26 12:56:16 +00:00
|
|
|
do_simple_message_box(ESD_TYPE_ERROR, NULL, NULL, msg_format, ap);
|
2012-06-18 08:30:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Error alert box, taking a format and a list of arguments.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
simple_error_message_box(const char *msg_format, ...)
|
|
|
|
{
|
2014-01-26 12:56:16 +00:00
|
|
|
va_list ap;
|
2012-06-18 08:30:53 +00:00
|
|
|
|
2014-01-26 12:56:16 +00:00
|
|
|
va_start(ap, msg_format);
|
|
|
|
do_simple_message_box(ESD_TYPE_ERROR, NULL, NULL, msg_format, ap);
|
|
|
|
va_end(ap);
|
2012-06-18 08:30:53 +00:00
|
|
|
}
|
2014-01-26 12:56:16 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* 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:
|
|
|
|
*/
|