Back to Evolution Project page
00001 #ifdef HAVE_CONFIG_H 00002 # include <config.h> 00003 #endif 00004 00005 #include <gnome.h> 00006 00007 #include "callbacks.h" 00008 #include "interface.h" 00009 #include "support.h" 00010 #include <unistd.h> 00011 #include <stdio.h> 00012 #include <string.h> 00013 #include "auxiliar.h" 00014 00015 void 00016 on_new1_activate (GtkMenuItem *menuitem, 00017 gpointer user_data) 00018 { 00019 create_my_frmNew(); 00020 } 00021 00022 00023 void 00024 on_open1_activate (GtkMenuItem *menuitem, 00025 gpointer user_data) 00026 { 00027 if (level_changed) 00028 gtk_widget_show(create_dlgConfirmOpen()); 00029 else { 00030 current_fileoperation = FILE_OPERATION_OPEN; 00031 gtk_widget_show(create_frmOpenSave()); 00032 } 00033 } 00034 00035 00036 void 00037 on_save1_activate (GtkMenuItem *menuitem, 00038 gpointer user_data) 00039 { 00040 if (!level_changed) { 00041 show_on_statusbar("No need to saving... Saving again!"); 00042 } 00043 if (!save_level(current_filename)) 00044 on_save_as1_activate(menuitem, user_data); 00045 } 00046 00047 00048 void 00049 on_save_as1_activate (GtkMenuItem *menuitem, 00050 gpointer user_data) 00051 { 00052 current_fileoperation = FILE_OPERATION_SAVE; 00053 gtk_widget_show(create_frmOpenSave()); 00054 } 00055 00056 00057 void 00058 on_exit1_activate (GtkMenuItem *menuitem, 00059 gpointer user_data) 00060 { 00061 if (level_changed) 00062 gtk_widget_show(create_dlgConfirmExit()); 00063 else 00064 exit_program(); 00065 } 00066 00067 00068 void 00069 on_about1_activate (GtkMenuItem *menuitem, 00070 gpointer user_data) 00071 { 00072 gtk_widget_show(create_frmAbout()); 00073 } 00074 00075 00076 00077 void 00078 on_frmSplash_show (GtkWidget *widget, 00079 gpointer user_data) 00080 { 00081 GtkWidget* frmSplash; 00082 frmSplash = lookup_widget(widget, "frmSplash"); 00083 00084 //Warning: I need to change this... 00085 gtk_object_destroy(GTK_OBJECT(frmSplash)); 00086 } 00087 00088 00089 void 00090 on_Main_show (GtkWidget *widget, 00091 gpointer user_data) 00092 { 00093 GList *last, *current; 00094 GnomeIconList *iconlist1, *iconlist2; 00095 int pos; 00096 00097 iconlist1 = GNOME_ICON_LIST(lookup_widget(widget, "iconlist1")); 00098 iconlist2 = GNOME_ICON_LIST(lookup_widget(widget, "iconlist2")); 00099 00100 read_config(); 00101 set_pixmaps_from_filenames(sprite_list); 00102 set_pixmaps_from_filenames(sprite_list_sp); 00103 00104 last = g_list_first(sprite_list); 00105 current = g_list_last(sprite_list); 00106 00107 if (last) { 00108 do { 00109 // printf ("Descrição: '%s'\n", ((sprite *)(current->data))->description ); 00110 pos = gnome_icon_list_append(iconlist1, 00111 ((sprite *)(current->data))->filename, 00112 ((sprite *)(current->data))->description); 00113 gnome_icon_list_set_icon_data(iconlist1, pos, (sprite *)(current->data)); 00114 if (current==last) break; 00115 current = current->prev; 00116 } while (1); 00117 } 00118 00119 last = g_list_first(sprite_list_sp); 00120 current = g_list_last(sprite_list_sp); 00121 00122 if (last) { 00123 do { 00124 // printf ("Descrição: '%s'\n", ((sprite *)(current->data))->description ); 00125 pos = gnome_icon_list_append(iconlist2, 00126 ((sprite *)(current->data))->filename, 00127 ((sprite *)(current->data))->description); 00128 gnome_icon_list_set_icon_data(iconlist2, pos, (sprite *)(current->data)); 00129 if (current==last) break; 00130 current = current->prev; 00131 } while (1); 00132 } 00133 00134 new_map(DEFAULT_MAP_WIDTH, DEFAULT_MAP_HEIGHT); 00135 } 00136 00137 00138 gboolean 00139 on_Main_destroy_event (GtkWidget *widget, 00140 GdkEvent *event, 00141 gpointer user_data) 00142 { 00143 g_print("destroy event received...\n"); 00144 return TRUE; 00145 } 00146 00147 /* 00148 void 00149 on_list1_selection_changed (GtkList *list, 00150 gpointer user_data) 00151 { 00152 GtkObject* item; 00153 GList* list1; 00154 sprite *sp; 00155 GtkPixmap *pixmap20; 00156 00157 //Update level screen 00158 hide_old(); 00159 old_x = old_y = -1; 00160 00161 //get a pointer to screen pixmap widget 00162 pixmap20 = GTK_PIXMAP( lookup_widget(GTK_WIDGET(list), "pixmap20") ); 00163 00164 //get the sprite selected 00165 list1 = GTK_LIST(list)->selection; 00166 if (!list1) return; //None items selected 00167 item = GTK_OBJECT(list1->data); 00168 sp = (sprite *) gtk_object_get_data(item, "sprite_list"); 00169 sp_sel = sp; 00170 00171 //Display the selected pixmap 00172 gtk_pixmap_set (pixmap20, sp->pixmap, sp->mask); 00173 g_print("Sprite selected. \tName: '%s'\tDescription: '%s'\n", sp->name, sp->description); 00174 00175 //Refresh the level screen 00176 draw_grid(); 00177 } 00178 */ 00179 00180 00181 void 00182 on_buttonyes_clicked (GtkButton *button, 00183 gpointer user_data) 00184 { 00185 create_new_level(); 00186 on_buttonno_clicked(button, user_data); 00187 } 00188 00189 00190 void 00191 on_buttonno_clicked (GtkButton *button, 00192 gpointer user_data) 00193 { 00194 gtk_widget_destroy(dlg_areyousure); 00195 dlg_areyousure=NULL; 00196 } 00197 00198 00199 void 00200 on_buttonok_clicked (GtkButton *button, 00201 gpointer user_data) 00202 { 00203 GtkWidget *sbtn_width, *sbtn_height; 00204 int lh, lw; 00205 level_changed = FALSE; 00206 strcpy(current_filename, ""); 00207 current_fileoperation = FILE_OPERATION_NONE; 00208 00209 //Get values from dialog box 00210 sbtn_width = lookup_widget(frmNew, "sbtn_width"); 00211 sbtn_height = lookup_widget(frmNew, "sbtn_height"); 00212 lw = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sbtn_width)); 00213 lh = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sbtn_height)); 00214 if ((lw<1) || (lh<1)) { 00215 g_print("Sorry, but I can't imagine in a level of size (%d x %d)... Are you crazy?\n", lw, lh); 00216 return; 00217 } 00218 new_map(lw, lh); 00219 00220 //Free dialog box 00221 on_buttoncancel_clicked(button, user_data); 00222 } 00223 00224 00225 void 00226 on_buttoncancel_clicked (GtkButton *button, 00227 gpointer user_data) 00228 { 00229 gtk_widget_destroy(frmNew); 00230 frmNew = NULL; 00231 } 00232 00233 00234 gboolean 00235 on_drawarea_expose_event (GtkWidget *widget, 00236 GdkEventExpose *event, 00237 gpointer user_data) 00238 { 00239 draw_grid(); 00240 return FALSE; 00241 } 00242 00243 00244 00245 00246 gboolean 00247 on_drawarea_motion_notify_event (GtkWidget *widget, 00248 GdkEventMotion *event, 00249 gpointer user_data) 00250 { 00251 int i, j, stepx, stepy; 00252 gchar status[200]; 00253 current_x = get_unit_from_pixelx(event->x); 00254 current_y = get_unit_from_pixely(event->y); 00255 00256 sprintf(status, " Position on grid: (%d, %d)", current_x, current_y); 00257 show_on_statusbar(status); 00258 00259 if (!sp_sel) return FALSE; 00260 if ((current_x == old_x) && (current_y == old_y)) return FALSE; 00261 00262 // g_print("old (%d,%d) current (%d,%d)\n", old_x, old_y, current_x, current_y); 00263 if (clicked) { 00264 if ((old_x>-1) && (old_x<level_width) && (old_y>-1) && (old_y<level_height)) { 00265 stepx = (old_x>current_x) ? -1 : 1; 00266 stepy = (old_y>current_y) ? -1 : 1; 00267 for (i=old_x; (stepx==1) ? (i<=current_x) : (i>=current_x); i+=stepx) 00268 for (j=old_y; (stepy==1) ? (j<=current_y) : (j>=current_y); j+=stepy) 00269 event_on_unit(sp_sel, i, j); 00270 } 00271 else 00272 event_on_unit(sp_sel, current_x, current_y); 00273 } 00274 00275 hide_old(widget->window); 00276 show_current(widget->window); 00277 00278 // draw_grid(); 00279 00280 return FALSE; 00281 } 00282 00283 00284 gboolean 00285 on_drawarea_button_press_event (GtkWidget *widget, 00286 GdkEventButton *event, 00287 gpointer user_data) 00288 { 00289 00290 //g_print ("Button pressed on unit (%d;%d)\n", get_unit_from_pixelx(event->x), get_unit_from_pixely(event->y)); 00291 clicked = 1; 00292 if(!sp_sel) return FALSE; 00293 event_on_unit(sp_sel, get_unit_from_pixelx(event->x), get_unit_from_pixely(event->y)); 00294 return FALSE; 00295 } 00296 00297 00298 gboolean 00299 on_drawarea_button_release_event (GtkWidget *widget, 00300 GdkEventButton *event, 00301 gpointer user_data) 00302 { 00303 //g_print ("Button released on unit (%d;%d)\n", get_unit_from_pixelx(event->x), get_unit_from_pixely(event->y)); 00304 clicked = 0; 00305 if(!sp_sel) return FALSE; 00306 event_on_unit(sp_sel, get_unit_from_pixelx(event->x), get_unit_from_pixely(event->y)); 00307 return FALSE; 00308 } 00309 00310 00311 void 00312 on_grid1_activate (GtkMenuItem *menuitem, 00313 gpointer user_data) 00314 { 00315 GtkWidget *drawarea; 00316 drawarea = lookup_widget(Main, "drawarea"); 00317 00318 toggle_view_grid(); 00319 00320 hide_old(drawarea->window); 00321 } 00322 00323 00324 void 00325 on_refresh1_activate (GtkMenuItem *menuitem, 00326 gpointer user_data) 00327 { 00328 refresh_all(); 00329 } 00330 00331 00332 void 00333 on_iconlist1_select_icon (GnomeIconList *gnomeiconlist, 00334 gint arg1, 00335 GdkEvent *event, 00336 gpointer user_data) 00337 { 00338 sprite *sp; 00339 GtkWidget *drawarea; 00340 drawarea = lookup_widget(Main, "drawarea"); 00341 00342 //Update level screen 00343 hide_old(drawarea->window); 00344 old_x = old_y = -1; 00345 00346 sp = (sprite *) gnome_icon_list_get_icon_data(gnomeiconlist, arg1); 00347 sp_sel = sp; 00348 // g_print("Sprite selected: %s %s\n", sp->description, sp->filename); 00349 show_on_statusbar(sp->filename); 00350 //Refresh the level screen 00351 draw_grid(); 00352 } 00353 00354 00355 void 00356 on_iconlist2_select_icon (GnomeIconList *gnomeiconlist, 00357 gint arg1, 00358 GdkEvent *event, 00359 gpointer user_data) 00360 { 00361 on_iconlist1_select_icon(gnomeiconlist, arg1, event, user_data); 00362 } 00363 00364 00365 void 00366 on_sprites1_activate (GtkMenuItem *menuitem, 00367 gpointer user_data) 00368 { 00369 toggle_view_sprites(); 00370 } 00371 00372 00373 void 00374 on_ok_button1_clicked (GtkButton *button, 00375 gpointer user_data) 00376 { 00377 GtkWidget *widget; 00378 widget = lookup_widget(GTK_WIDGET(button), "frmOpenSave"); 00379 strcpy(op_filename, gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget))); 00380 00381 if (current_fileoperation == FILE_OPERATION_OPEN) { 00382 open_level(op_filename); 00383 } else if (current_fileoperation == FILE_OPERATION_SAVE) { 00384 if (file_exists(op_filename)) 00385 gtk_widget_show(create_dlgConfirmOverwrite()); 00386 else 00387 save_level(op_filename); 00388 } 00389 00390 on_cancel_button1_clicked(button, user_data); 00391 } 00392 00393 00394 void 00395 on_cancel_button1_clicked (GtkButton *button, 00396 gpointer user_data) 00397 { 00398 GtkWidget *frm; 00399 frm = lookup_widget(GTK_WIDGET(button), "frmOpenSave"); 00400 if (frm) gtk_widget_destroy(frm); 00401 } 00402 00403 00404 void 00405 on_button1_clicked (GtkButton *button, 00406 gpointer user_data) 00407 { 00408 on_button2_clicked(button, user_data); 00409 exit_program(); 00410 } 00411 00412 00413 void 00414 on_button2_clicked (GtkButton *button, 00415 gpointer user_data) 00416 { 00417 GtkWidget *frm; 00418 frm = lookup_widget(GTK_WIDGET(button), "dlgConfirmExit"); 00419 if (frm) gtk_widget_destroy(frm); 00420 } 00421 00422 00423 void 00424 on_btn_yesopen_clicked (GtkButton *button, 00425 gpointer user_data) 00426 { 00427 GtkWidget *widget; 00428 current_fileoperation = FILE_OPERATION_OPEN; 00429 widget = create_frmOpenSave(); 00430 gtk_file_selection_set_filename(GTK_FILE_SELECTION(widget), current_filename); 00431 gtk_widget_show(widget); 00432 on_btn_noopen_clicked(button, user_data); 00433 } 00434 00435 00436 void 00437 on_btn_noopen_clicked (GtkButton *button, 00438 gpointer user_data) 00439 { 00440 GtkWidget *frm; 00441 frm = lookup_widget(GTK_WIDGET(button), "dlgConfirmOpen"); 00442 if (frm) gtk_widget_destroy(frm); 00443 } 00444 00445 00446 void 00447 on_btn_yesoverwrite_clicked (GtkButton *button, 00448 gpointer user_data) 00449 { 00450 g_print(op_filename); 00451 save_level(op_filename); 00452 on_btn_nooverwrite_clicked(button, user_data); 00453 } 00454 00455 00456 void 00457 on_btn_nooverwrite_clicked (GtkButton *button, 00458 gpointer user_data) 00459 { 00460 GtkWidget *frm; 00461 frm = lookup_widget(GTK_WIDGET(button), "dlgConfirmOverwrite"); 00462 if (frm) gtk_widget_destroy(frm); 00463 } 00464