Add "simple dialog" routines to pop up modal message boxes.

svn path=/trunk/; revision=43330
This commit is contained in:
Guy Harris 2012-06-18 08:30:53 +00:00
parent 5c423a4c51
commit 7fbd6ca1f0
1 changed files with 114 additions and 0 deletions

View File

@ -35,6 +35,8 @@
#include "simple_dialog_qt.h"
#include <QMessageBox>
/* Simple dialog function - Displays a dialog box with the supplied message
* text.
*
@ -143,3 +145,115 @@ SimpleDialog::SimpleDialog(QWidget *parent) :
QErrorMessage(parent)
{
}
static void
do_simple_message_box(ESD_TYPE_E type, gboolean *notagain,
const char *secondary_msg, const char *msg_format,
va_list ap)
{
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;
}
}
/*
* 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);
#if 0
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);
}
#endif
msg_dialog->exec();
#if 0
if (notagain != NULL) {
/*
* OK, did they check the checkbox?
*/
*notagain = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox));
}
#endif
delete msg_dialog;
}
/*
* 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, ...)
{
va_list ap;
va_start(ap, msg_format);
do_simple_message_box(type, notagain, secondary_msg, msg_format, ap);
va_end(ap);
}
/*
* Error alert box, taking a format and a va_list argument.
*/
void
vsimple_error_message_box(const char *msg_format, va_list ap)
{
do_simple_message_box(ESD_TYPE_ERROR, NULL, NULL, msg_format, ap);
}
/*
* Error alert box, taking a format and a list of arguments.
*/
void
simple_error_message_box(const char *msg_format, ...)
{
va_list ap;
va_start(ap, msg_format);
do_simple_message_box(ESD_TYPE_ERROR, NULL, NULL, msg_format, ap);
va_end(ap);
}