X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FModalDialog.hh;fp=src%2FMoof%2FModalDialog.hh;h=11d9d7997916926b4fff50c25e44211af078f36d;hp=0000000000000000000000000000000000000000;hb=8a1acac01b444dccf8b57cedf08392ada2e473c1;hpb=bffc879fc8ee8167bb123310d39fad4e2f426ffd diff --git a/src/Moof/ModalDialog.hh b/src/Moof/ModalDialog.hh new file mode 100644 index 0000000..11d9d79 --- /dev/null +++ b/src/Moof/ModalDialog.hh @@ -0,0 +1,155 @@ + +/******************************************************************************* + + Copyright (c) 2009, Charles McGarvey + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +*******************************************************************************/ + +#ifndef _MOOF_MODALDIALOG_HH_ +#define _MOOF_MODALDIALOG_HH_ + +#include + +#if defined(_WIN32) || defined(__WIN32__) +#include +#elif defined(__APPLE__) && defined(__MACH__) +#include +#elif USE_GTK +#include +#elif USE_QT4 +#include +#include +#include +#endif + +#include + +#if HAVE_CONFIG_H +#include "config.h" +#endif + + +namespace Mf { + + +/** + * Small wrapper over various user interface modal dialog windows. + */ + +struct ModalDialog +{ + enum Type + { + INFO = 1, + WARNING = 2, + CRITICAL = 3 + }; + + std::string title; + Type type; + std::string text1; + std::string text2; + + void run() const + { +#if USE_GTK + + int argc = 0; + char** argv; + gtk_init(&argc, &argv); + + GtkMessageType iconType; + switch (type) + { + case WARNING: + iconType = GTK_MESSAGE_WARNING; + break; + case CRITICAL: + iconType = GTK_MESSAGE_ERROR; + break; + default: + iconType = GTK_MESSAGE_INFO; + break; + } + + GtkWidget* dialog = gtk_message_dialog_new(NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, iconType, + GTK_BUTTONS_CLOSE, "%s", text1.c_str()); + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), + "%s", text2.c_str()); + gtk_window_set_title(GTK_WINDOW(dialog), title.c_str()); + + std::string iconPath = Resource::getPath(PACKAGE".png"); + GdkPixbuf* iconPixbuf = gdk_pixbuf_new_from_file(iconPath.c_str(), NULL); + gtk_window_set_icon(GTK_WINDOW(dialog), iconPixbuf); + + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + // FIXME - this doesn't seem to actually remove the window from the + // screen when it closes, not sure why... + +#elif USE_QT4 + + int argc = 0; + char** argv; + QApplication qtApp(argc, argv); + + QMessageBox::Icon iconType; + switch (type) + { + case WARNING: + iconType = QMessageBox::Warning; + break; + case CRITICAL: + iconType = QMessageBox::Critical; + break; + default: + iconType = QMessageBox::Information; + break; + } + + QMessageBox dialog; + dialog.setWindowTitle(title.c_str()); + dialog.setIcon(iconType); + dialog.setText(text1.c_str()); + dialog.setInformativeText(text2.c_str()); + dialog.setStandardButtons(QMessageBox::Close); + + std::string iconPath = Resource::getPath(PACKAGE".png"); + QIcon icon(iconPath.c_str()); + dialog.setWindowIcon(icon); + + dialog.exec(); + +#endif + } +}; + + +} // namespace Mf + +#endif // _MOOF_MODALDIALOG_HH_ + +/** vim: set ts=4 sw=4 tw=80: *************************************************/ +