ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/RenegadeMapSelector/MapSelector.cpp
(Generate patch)

Comparing trunk/RenegadeMapSelector/MapSelector.cpp (file contents):
Revision 86 by douglas, 2003-03-15T16:43:53-08:00 vs.
Revision 88 by douglas, 2003-03-15T20:18:13-08:00

# Line 4 | Line 4
4   //
5   // MapSelector.cpp
6  
7 < #ifndef _WIN32
8 <
9 < static void destruct(GtkWidget* widget, gpointer data)
10 < {
11 <        gtk_main_quit();
12 < }
13 <
14 < static void done(GtkWidget* widget, gpointer data)
15 < {
16 <        if (true)
17 <        {
18 <                message(GTK_WINDOW(window), "You need at least one map.", "No Maps",
19 <                        GTK_MESSAGE_WARNING);
20 <        }
21 <        else
22 <        {
23 <                //
24 <
25 <                config->save();
26 <
27 <                gtk_main_quit();
28 <        }
29 < }
30 <
31 < static void mapAdd(GtkWidget* widget, gpointer data)
32 < {
33 <        cout << "STUB: add\n\a" << flush;
34 < }
7 > #include "MapSelector.h"
8  
9 < static void mapRemove(GtkWidget* widget, gpointer data)
37 < {
38 <        cout << "STUB: remove\n\a" << flush;
39 < }
40 <
41 < static void mapUp(GtkWidget* widget, gpointer data)
42 < {
43 <        cout << "STUB: up\n\a" << flush;
44 < }
45 <
46 < static void mapDown(GtkWidget* widget, gpointer data)
47 < {
48 <        cout << "STUB: down\n\a" << flush;
49 < }
9 > #ifndef _WIN32
10  
11   MapSelector::MapSelector()
12   {
# Line 55 | Line 15 | MapSelector::MapSelector()
15          gtk_window_set_title(GTK_WINDOW(window), "Renegade Map Selector");
16          gtk_window_set_resizable(GTK_WINDOW(window), false);
17          g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(destruct),
18 <                NULL);
18 >                this);
19  
20          GtkWidget* vertical = gtk_vbox_new(false, 0);
21          GtkWidget* horizontal = gtk_hbox_new(false, 9);
# Line 64 | Line 24 | MapSelector::MapSelector()
24          gtk_frame_set_label_align(GTK_FRAME(left), 0.5, 0.5);
25          gtk_container_set_border_width(GTK_CONTAINER(left), 6);
26  
27 +        GtkWidget* leftScroll = gtk_scrolled_window_new(NULL, NULL);
28 +        
29 +        gtk_container_set_border_width(GTK_CONTAINER(leftScroll), 6);
30 +        gtk_widget_set_size_request(leftScroll, 150, 200);
31 +        gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(leftScroll),
32 +                GTK_SHADOW_IN);
33 +
34 +        available = gtk_tree_view_new();
35 +
36 +        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(available), false);
37 +        setupAvailable();
38 +
39          GtkWidget* center = gtk_vbox_new(true, 0);
40          GtkWidget* top = gtk_vbutton_box_new();
41  
# Line 73 | Line 45 | MapSelector::MapSelector()
45  
46          add = gtk_button_new_with_mnemonic("_Add");
47  
48 <        g_signal_connect(G_OBJECT(add), "clicked", G_CALLBACK(mapAdd), NULL);
48 >        g_signal_connect(G_OBJECT(add), "clicked", G_CALLBACK(mapAdd), this);
49          gtk_widget_set_sensitive(add, false);
50  
51          remove = gtk_button_new_with_mnemonic("_Remove");
52  
53 <        g_signal_connect(G_OBJECT(remove), "clicked", G_CALLBACK(mapRemove), NULL);
53 >        g_signal_connect(G_OBJECT(remove), "clicked", G_CALLBACK(mapRemove), this);
54          gtk_widget_set_sensitive(remove, false);
55  
56          GtkWidget* middle = gtk_vbutton_box_new();
# Line 89 | Line 61 | MapSelector::MapSelector()
61  
62          up = gtk_button_new_with_mnemonic("_Up");
63  
64 <        g_signal_connect(G_OBJECT(up), "clicked", G_CALLBACK(mapUp), NULL);
64 >        g_signal_connect(G_OBJECT(up), "clicked", G_CALLBACK(mapUp), this);
65          gtk_widget_set_sensitive(up, false);
66  
67          down = gtk_button_new_with_mnemonic("_Down");
68  
69 <        g_signal_connect(G_OBJECT(down), "clicked", G_CALLBACK(mapDown), NULL);
69 >        g_signal_connect(G_OBJECT(down), "clicked", G_CALLBACK(mapDown), this);
70          gtk_widget_set_sensitive(down, false);
71  
72          GtkWidget* right = gtk_frame_new("Selected Maps");
# Line 102 | Line 74 | MapSelector::MapSelector()
74          gtk_frame_set_label_align(GTK_FRAME(right), 0.5, 0.5);
75          gtk_container_set_border_width(GTK_CONTAINER(right), 6);
76  
77 +        GtkWidget* rightScroll = gtk_scrolled_window_new(NULL, NULL);
78 +
79 +        gtk_container_set_border_width(GTK_CONTAINER(rightScroll), 6);
80 +        gtk_widget_set_size_request(rightScroll, 150, 200);
81 +        gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(rightScroll),
82 +                GTK_SHADOW_IN);
83 +
84 +        selected = gtk_tree_view_new();
85 +
86 +        gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(selected), false);
87 +        setupSelected();
88 +
89          GtkWidget* separator = gtk_hseparator_new();
90          GtkWidget* bottom = gtk_hbutton_box_new();
91  
# Line 111 | Line 95 | MapSelector::MapSelector()
95  
96          GtkWidget* ok = gtk_button_new_from_stock(GTK_STOCK_OK);
97  
98 <        g_signal_connect(G_OBJECT(ok), "clicked", G_CALLBACK(done), NULL);
98 >        g_signal_connect(G_OBJECT(ok), "clicked", G_CALLBACK(done), this);
99  
100          GtkWidget* cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
101  
102 <        g_signal_connect(G_OBJECT(cancel), "clicked", G_CALLBACK(destruct), NULL);
102 >        g_signal_connect(G_OBJECT(cancel), "clicked", G_CALLBACK(destruct), this);
103  
104          // pack
105          gtk_container_add(GTK_CONTAINER(vertical), horizontal);
106          gtk_container_add(GTK_CONTAINER(horizontal), left);
107 +        gtk_container_add(GTK_CONTAINER(left), leftScroll);
108 +        gtk_container_add(GTK_CONTAINER(leftScroll), available);
109          gtk_container_add(GTK_CONTAINER(horizontal), center);
110          gtk_container_add(GTK_CONTAINER(center), top);
111          gtk_container_add(GTK_CONTAINER(top), add);
# Line 128 | Line 114 | MapSelector::MapSelector()
114          gtk_container_add(GTK_CONTAINER(middle), up);
115          gtk_container_add(GTK_CONTAINER(middle), down);
116          gtk_container_add(GTK_CONTAINER(horizontal), right);
117 +        gtk_container_add(GTK_CONTAINER(right), rightScroll);
118 +        gtk_container_add(GTK_CONTAINER(rightScroll), selected);
119          gtk_container_add(GTK_CONTAINER(vertical), separator);
120          gtk_container_add(GTK_CONTAINER(bottom), ok);
121          gtk_container_add(GTK_CONTAINER(bottom), cancel);
# Line 135 | Line 123 | MapSelector::MapSelector()
123          gtk_container_add(GTK_CONTAINER(window), vertical);
124  
125          // show
126 +        gtk_widget_show(available);
127 +        gtk_widget_show(leftScroll);
128          gtk_widget_show(left);
129          gtk_widget_show(add);
130          gtk_widget_show(remove);
# Line 143 | Line 133 | MapSelector::MapSelector()
133          gtk_widget_show(down);
134          gtk_widget_show(middle);
135          gtk_widget_show(center);
136 +        gtk_widget_show(selected);
137 +        gtk_widget_show(rightScroll);
138          gtk_widget_show(right);
139          gtk_widget_show(horizontal);
140          gtk_widget_show(separator);
# Line 155 | Line 147 | MapSelector::MapSelector()
147          gtk_main();
148   }
149  
150 + void MapSelector::setupAvailable()
151 + {
152 +        GtkListStore* store = gtk_list_store_new(1, G_TYPE_STRING);
153 +
154 +        char* directory = new char[MAXPATHLEN + 1];
155 +        getcwd(directory, MAXPATHLEN + 1);
156 +        if (debug) cerr << "directory = " << directory << "\n";
157 +
158 +        char* data = new char[strlen(directory) + 6];
159 +        sprintf(data, "%s/data", directory);
160 +        delete [] directory;
161 +        if (debug) cerr << "data = " << data << "\n";
162 +
163 +        DIR* dir = opendir(data);
164 +        delete [] data;
165 +
166 +        GtkTreeIter itor;
167 +        dirent* file;
168 +        while ((file = readdir(dir)) != NULL)
169 +        {
170 +                string name = file->d_name;
171 +
172 +                if (name.rfind(".mix") == name.length() - 4)
173 +                {
174 +                        gtk_list_store_append(store, &itor);
175 +                        gtk_list_store_set(store, &itor, 0, name.c_str(), -1);
176 +                }
177 +        }
178 +
179 +        closedir(dir);
180 +
181 +        gtk_tree_view_set_model(GTK_TREE_VIEW(available), GTK_TREE_MODEL(store));
182 +
183 +        GtkCellRenderer* renderer = gtk_cell_renderer_text_new();
184 +        GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes(NULL,
185 +                renderer, "text", 0, NULL);
186 +
187 +        gtk_tree_view_append_column(GTK_TREE_VIEW(available), column);
188 + }
189 +
190 + void MapSelector::setupSelected()
191 + {
192 +        //
193 + }
194 +
195 + void destruct(GtkWidget* widget, MapSelector* data)
196 + {
197 +        gtk_main_quit();
198 + }
199 +
200 + void done(GtkWidget* widget, MapSelector* data)
201 + {
202 +        if (true)
203 +        {
204 +                message(GTK_WINDOW(data->window), "You need at least one map.",
205 +                        "No Maps", GTK_MESSAGE_WARNING);
206 +        }
207 +        else
208 +        {
209 +                //
210 +
211 +                config->save();
212 +
213 +                gtk_main_quit();
214 +        }
215 + }
216 +
217 + void mapAdd(GtkWidget* widget, MapSelector* data)
218 + {
219 +        cout << "STUB: add\n\a" << flush;
220 + }
221 +
222 + void mapRemove(GtkWidget* widget, MapSelector* data)
223 + {
224 +        cout << "STUB: remove\n\a" << flush;
225 + }
226 +
227 + void mapUp(GtkWidget* widget, MapSelector* data)
228 + {
229 +        cout << "STUB: up\n\a" << flush;
230 + }
231 +
232 + void mapDown(GtkWidget* widget, MapSelector* data)
233 + {
234 +        cout << "STUB: down\n\a" << flush;
235 + }
236 +
237   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines