1 /***********************************************************************
2 created: 24/9/2004
3 author: Paul D Turner
4 *************************************************************************/
5 /***************************************************************************
6 * Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining
9 * a copy of this software and associated documentation files (the
10 * "Software"), to deal in the Software without restriction, including
11 * without limitation the rights to use, copy, modify, merge, publish,
12 * distribute, sublicense, and/or sell copies of the Software, and to
13 * permit persons to whom the Software is furnished to do so, subject to
14 * the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be
17 * included in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 ***************************************************************************/
27 #include "GTK2CEGuiRendererSelector.h"
28
29 // Renderer name strings
30 const std::string GTK2CEGuiRendererSelector::OgreRendererName("Ogre3D Engine Renderer");
31 const std::string GTK2CEGuiRendererSelector::OpenGLRendererName("OpenGL Renderer (using glut)");
32 const std::string GTK2CEGuiRendererSelector::IrrlichtRendererName("Irrlicht Engine Renderer");
33
34
35
GTK2CEGuiRendererSelector()36 GTK2CEGuiRendererSelector::GTK2CEGuiRendererSelector()
37 {
38 // fake args for gtk_init
39 int argc = 1;
40 char* argv = "SampleApp";
41 char** pargv = &argv;
42
43 gtk_init (&argc, &pargv);
44
45 createDialog();
46 }
47
~GTK2CEGuiRendererSelector()48 GTK2CEGuiRendererSelector::~GTK2CEGuiRendererSelector()
49 {
50 }
51
invokeDialog()52 bool GTK2CEGuiRendererSelector::invokeDialog()
53 {
54 CEGuiRendererType renderer_types[3];
55 int idx = 0;
56
57 // Put items in the combobox for enabled renderers.
58 if (d_rendererAvailability[OgreGuiRendererType])
59 {
60 gtk_combo_box_append_text(GTK_COMBO_BOX(d_combobox1), OgreRendererName.c_str());
61 renderer_types[idx++] = OgreGuiRendererType;
62 }
63 if (d_rendererAvailability[OpenGLGuiRendererType])
64 {
65 gtk_combo_box_append_text(GTK_COMBO_BOX(d_combobox1), OpenGLRendererName.c_str());
66 renderer_types[idx++] = OpenGLGuiRendererType;
67 }
68 if (d_rendererAvailability[IrrlichtGuiRendererType])
69 {
70 gtk_combo_box_append_text(GTK_COMBO_BOX(d_combobox1), IrrlichtRendererName.c_str());
71 renderer_types[idx++] = IrrlichtGuiRendererType;
72 }
73
74 gtk_widget_show(d_dialog);
75 gtk_main ();
76
77 if (!d_cancelled)
78 {
79 gint active = gtk_combo_box_get_active(GTK_COMBO_BOX(d_combobox1));
80
81 if (active != -1)
82 {
83 d_lastSelected = renderer_types[active];
84 }
85 else
86 {
87 d_cancelled = true;
88 }
89
90 }
91
92 return !d_cancelled;
93 }
94
createDialog()95 void GTK2CEGuiRendererSelector::createDialog()
96 {
97 d_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
98 gtk_widget_set_size_request(d_dialog, 320, 100);
99 gtk_window_set_title(GTK_WINDOW(d_dialog), "CEGui - Renderer Selection");
100 gtk_window_set_position(GTK_WINDOW(d_dialog), GTK_WIN_POS_CENTER);
101 gtk_window_set_resizable(GTK_WINDOW(d_dialog), FALSE);
102 gtk_window_set_type_hint(GTK_WINDOW(d_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
103
104 d_vbox1 = gtk_vbox_new(FALSE, 10);
105 gtk_widget_show(d_vbox1);
106 gtk_container_add(GTK_CONTAINER(d_dialog), d_vbox1);
107
108 d_label1 = gtk_label_new("Select Renderer:");
109 gtk_widget_show(d_label1);
110 gtk_box_pack_start(GTK_BOX(d_vbox1), d_label1, FALSE, FALSE, 0);
111 gtk_misc_set_alignment(GTK_MISC(d_label1), 0, 0.5);
112
113 d_hbox1 = gtk_hbox_new(FALSE, 0);
114 gtk_widget_show(d_hbox1);
115 gtk_box_pack_end(GTK_BOX(d_vbox1), d_hbox1, FALSE, TRUE, 5);
116
117 d_cancelButton = gtk_button_new_from_stock("gtk-cancel");
118 gtk_widget_show(d_cancelButton);
119 gtk_box_pack_start(GTK_BOX(d_hbox1), d_cancelButton, TRUE, FALSE, 0);
120
121 d_okButton = gtk_button_new_from_stock("gtk-ok");
122 gtk_widget_show(d_okButton);
123 gtk_box_pack_start(GTK_BOX(d_hbox1), d_okButton, TRUE, FALSE, 0);
124
125 d_combobox1 = gtk_combo_box_new_text();
126 gtk_widget_show(d_combobox1);
127 gtk_box_pack_start(GTK_BOX(d_vbox1), d_combobox1, TRUE, FALSE, 0);
128
129 g_signal_connect((gpointer) d_cancelButton, "clicked",
130 G_CALLBACK(GTK2CEGuiRendererSelector::on_cancelButton_clicked),
131 this);
132 g_signal_connect((gpointer) d_okButton, "clicked",
133 G_CALLBACK(GTK2CEGuiRendererSelector::on_okButton_clicked),
134 this);
135 }
136
on_cancelButton_clicked(GtkButton * button,gpointer user_data)137 void GTK2CEGuiRendererSelector::on_cancelButton_clicked(GtkButton* button, gpointer user_data)
138 {
139 static_cast<GTK2CEGuiRendererSelector*>(user_data)->d_cancelled = true;
140 gtk_widget_hide(static_cast<GTK2CEGuiRendererSelector*>(user_data)->d_dialog);
141 gtk_main_quit();
142 }
143
on_okButton_clicked(GtkButton * button,gpointer user_data)144 void GTK2CEGuiRendererSelector::on_okButton_clicked(GtkButton* button, gpointer user_data)
145 {
146 static_cast<GTK2CEGuiRendererSelector*>(user_data)->d_cancelled = false;
147 gtk_widget_hide(static_cast<GTK2CEGuiRendererSelector*>(user_data)->d_dialog);
148 gtk_main_quit();
149 }
150