/** * Creates and opens the about window from about-gtk3.xml or * about-gtk2.xml, triggered by clicking on the GtkImageMenuItem * 'About' in the context menu. */ void create_about (void) { GtkBuilder *builder; GError *error = NULL; GtkWidget *about; gchar *uifile; #ifdef WITH_GTK3 uifile = get_ui_file("about-gtk3.xml"); #else uifile = get_ui_file("about-gtk2.xml"); #endif if (!uifile) { report_error(_("Can't find about interface file. Please insure PNMixer is installed correctly.")); return; } builder = gtk_builder_new(); if (!gtk_builder_add_from_file( builder, uifile, &error)) { g_warning("%s",error->message); report_error(error->message); g_error_free(error); g_free(uifile); g_object_unref (G_OBJECT (builder)); return; } g_free(uifile); gtk_builder_connect_signals(builder, NULL); about = GTK_WIDGET(gtk_builder_get_object(builder,"about_dialog")); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about),VERSION); g_object_unref (G_OBJECT (builder)); gtk_dialog_run (GTK_DIALOG (about)); gtk_widget_destroy (about); }
/** * Creates the volume popup window. */ void create_popup_window(void) { GtkBuilder *builder; GError *error = NULL; gchar *uifile; gchar *slider_orientation; slider_orientation = prefs_get_string("SliderOrientation", "vertical"); if (!g_strcmp0(slider_orientation, "horizontal")) uifile = get_ui_file(UI_FILE_POPUP_VOLUME_HORIZONTAL); else uifile = get_ui_file(UI_FILE_POPUP_VOLUME_VERTICAL); g_free(slider_orientation); if (!uifile) { report_error(_ ("Can't find the volume popup window interface file. " "Please ensure PNMixer is installed correctly. Exiting.")); exit(1); } DEBUG_PRINT("Loading volume popup ui from '%s'", uifile); builder = gtk_builder_new(); if (!gtk_builder_add_from_file(builder, uifile, &error)) { g_warning("%s", error->message); report_error(error->message); exit(1); } g_free(uifile); vol_adjustment = GTK_ADJUSTMENT(gtk_builder_get_object(builder, "vol_scale_adjustment")); /* get original adjustments */ get_current_levels(); vol_scale = GTK_WIDGET(gtk_builder_get_object(builder, "vol_scale")); mute_check_popup_window = GTK_WIDGET(gtk_builder_get_object(builder, "mute_check_popup_window")); popup_window = GTK_WIDGET(gtk_builder_get_object(builder, "popup_window")); gtk_builder_connect_signals(builder, NULL); g_object_unref(G_OBJECT(builder)); gtk_widget_grab_focus(vol_scale); }
/** * Creates the menu popup window. */ void create_popup_menu(void) { GtkBuilder *builder; GError *error = NULL; gchar *uifile; uifile = get_ui_file(UI_FILE_POPUP_MENU); if (!uifile) { report_error(_ ("Can't find the menu popup window interface file. " "Please ensure PNMixer is installed correctly. Exiting.")); exit(1); } builder = gtk_builder_new(); if (!gtk_builder_add_from_file(builder, uifile, &error)) { g_warning("%s", error->message); report_error(error->message); exit(1); } g_free(uifile); mute_check_popup_menu = GTK_WIDGET(gtk_builder_get_object(builder, "mute_check_popup_menu")); popup_menu = GTK_WIDGET(gtk_builder_get_object(builder, "popup_menu")); gtk_builder_connect_signals(builder, NULL); g_object_unref(G_OBJECT(builder)); }
/* Initialize a popup window. * The struct is supposed to be empty at this point. */ static void popup_window_init(PopupWindow *window, Audio *audio) { gchar *uifile; GtkBuilder *builder; /* Build UI file depending on slider orientation */ gchar *orientation; orientation = prefs_get_string("SliderOrientation", "vertical"); if (!g_strcmp0(orientation, "horizontal")) uifile = get_ui_file(POPUP_WINDOW_HORIZONTAL_UI_FILE); else uifile = get_ui_file(POPUP_WINDOW_VERTICAL_UI_FILE); g_free(orientation); DEBUG("Building from ui file '%s'", uifile); builder = gtk_builder_new_from_file(uifile); /* Save some widgets for later use */ assign_gtk_widget(builder, window, popup_window); assign_gtk_widget(builder, window, mute_check); assign_gtk_widget(builder, window, vol_scale); assign_gtk_adjustment(builder, window, vol_scale_adj); /* Configure some widgets */ configure_vol_text(GTK_SCALE(window->vol_scale)); configure_vol_increment(GTK_ADJUSTMENT(window->vol_scale_adj)); /* Connect ui signal handlers */ gtk_builder_connect_signals(builder, window); /* Connect audio signal handlers */ window->audio = audio; audio_signals_connect(audio, on_audio_changed, window); /* Cleanup */ g_object_unref(builder); g_free(uifile); }
/** * Creates the popup windows from popup_window-gtk3.xml or * popup_window-gtk2.xml */ void create_popups (void) { GtkBuilder *builder; GError *error = NULL; gchar *uifile; builder = gtk_builder_new(); #ifdef WITH_GTK3 uifile = get_ui_file("popup_window-gtk3.xml"); #else uifile = get_ui_file("popup_window-gtk2.xml"); #endif if (!uifile) { report_error(_("Can't find main user interface file. Please insure PNMixer is installed correctly. Exiting\n")); exit(1); } if (!gtk_builder_add_from_file( builder, uifile, &error )) { g_warning("%s",error->message); report_error(error->message); exit(1); } g_free(uifile); vol_adjustment = GTK_ADJUSTMENT(gtk_builder_get_object(builder,"vol_scale_adjustment")); /* get original adjustments */ get_current_levels(); vol_scale = GTK_WIDGET(gtk_builder_get_object(builder,"vol_scale")); mute_check = GTK_WIDGET(gtk_builder_get_object(builder,"mute_check")); popup_window = GTK_WIDGET(gtk_builder_get_object(builder,"popup_window")); popup_menu = GTK_WIDGET(gtk_builder_get_object(builder,"popup_menu")); gtk_builder_connect_signals(builder, NULL); g_object_unref (G_OBJECT (builder)); gtk_widget_grab_focus(vol_scale); }
static int common_gtk_glade_main( struct configured_features *my_config) { SDL_TimerID limiter_timer; gdbstub_handle_t arm9_gdb_stub; gdbstub_handle_t arm7_gdb_stub; struct armcpu_memory_iface *arm9_memio = &arm9_base_memory_iface; struct armcpu_memory_iface *arm7_memio = &arm7_base_memory_iface; struct armcpu_ctrl_iface *arm9_ctrl_iface; struct armcpu_ctrl_iface *arm7_ctrl_iface; #ifdef GTKGLEXT_AVAILABLE // check if you have GTHREAD when running configure script //g_thread_init(NULL); register_gl_fun(my_gl_Begin,my_gl_End); #endif #ifdef DEBUG LogStart(); #endif init_keyvals(); if ( my_config->arm9_gdb_port != 0) { arm9_gdb_stub = createStub_gdb( my_config->arm9_gdb_port, &arm9_memio, &arm9_base_memory_iface); if ( arm9_gdb_stub == NULL) { g_print( "Failed to create ARM9 gdbstub on port %d\n", my_config->arm9_gdb_port); return -1; } } if ( my_config->arm7_gdb_port != 0) { arm7_gdb_stub = createStub_gdb( my_config->arm7_gdb_port, &arm7_memio, &arm7_base_memory_iface); if ( arm7_gdb_stub == NULL) { g_print( "Failed to create ARM7 gdbstub on port %d\n", my_config->arm7_gdb_port); return -1; } } if(SDL_Init( SDL_INIT_TIMER | SDL_INIT_VIDEO) == -1) { fprintf(stderr, "Error trying to initialize SDL: %s\n", SDL_GetError()); return 1; } desmume_init( arm9_memio, &arm9_ctrl_iface, arm7_memio, &arm7_ctrl_iface); /* * Activate the GDB stubs * This has to come after the NDS_Init (called in desmume_init) * where the cpus are set up. */ if ( my_config->arm9_gdb_port != 0) { activateStub_gdb( arm9_gdb_stub, arm9_ctrl_iface); } if ( my_config->arm7_gdb_port != 0) { activateStub_gdb( arm7_gdb_stub, arm7_ctrl_iface); } /* Initialize joysticks */ if(!init_joy()) return 1; CONFIG_FILE = g_build_filename(g_get_home_dir(), ".desmume.ini", NULL); Read_ConfigFile(); /* load the interface */ xml = glade_xml_new(get_ui_file("DeSmuMe.glade"), NULL, NULL); xml_tools = glade_xml_new(get_ui_file("DeSmuMe_Dtools.glade"), NULL, NULL); pWindow = glade_xml_get_widget(xml, "wMainW"); pDrawingArea = glade_xml_get_widget(xml, "wDraw_Main"); pDrawingArea2 = glade_xml_get_widget(xml, "wDraw_Sub"); /* connect the signals in the interface */ glade_xml_signal_autoconnect_StringObject(xml); glade_xml_signal_autoconnect_StringObject(xml_tools); init_GL_capabilities( my_config->software_colour_convert); /* check command line file */ if( my_config->nds_file) { if(desmume_open( my_config->nds_file) >= 0) { desmume_resume(); enable_rom_features(); } else { GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pWindow), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Unable to load :\n%s", my_config->nds_file); gtk_dialog_run(GTK_DIALOG(pDialog)); gtk_widget_destroy(pDialog); } } gtk_widget_show(pDrawingArea); gtk_widget_show(pDrawingArea2); { int use_null_3d = my_config->disable_3d; #ifdef GTKGLEXT_AVAILABLE if ( !use_null_3d) { /* setup the gdk 3D emulation */ if ( init_opengl_gdk_3Demu()) { NDS_3D_SetDriver(1); if (!gpu3D->NDS_3D_Init()) { fprintf( stderr, "Failed to initialise openGL 3D emulation; " "removing 3D support\n"); use_null_3d = 1; } } else { fprintf( stderr, "Failed to setup openGL 3D emulation; " "removing 3D support\n"); use_null_3d = 1; } } #endif if ( use_null_3d) { NDS_3D_SetDriver ( 0); gpu3D->NDS_3D_Init(); } } // on_menu_tileview_activate(NULL,NULL); /* setup the frame limiter and indicate if it is disabled */ glade_fps_limiter_disabled = my_config->disable_limiter; if ( !glade_fps_limiter_disabled) { /* create the semaphore used for fps limiting */ glade_fps_limiter_semaphore = SDL_CreateSemaphore( 1); /* start a SDL timer for every FPS_LIMITER_FRAME_PERIOD * frames to keep us at 60 fps */ limiter_timer = SDL_AddTimer( 16 * FPS_LIMITER_FRAME_PERIOD, glade_fps_limiter_fn, glade_fps_limiter_semaphore); if ( limiter_timer == NULL) { fprintf( stderr, "Error trying to start FPS limiter timer: %s\n", SDL_GetError()); SDL_DestroySemaphore( glade_fps_limiter_semaphore); glade_fps_limiter_disabled = 1; } } /* start event loop */ gtk_main(); desmume_free(); if ( !glade_fps_limiter_disabled) { /* tidy up the FPS limiter timer and semaphore */ SDL_RemoveTimer( limiter_timer); SDL_DestroySemaphore( glade_fps_limiter_semaphore); } #ifdef DEBUG LogStop(); #endif /* Unload joystick */ uninit_joy(); SDL_Quit(); Write_ConfigFile(); return EXIT_SUCCESS; }
GtkWidget* create_prefs_window (void) { GtkBuilder *builder; GError *error = NULL; GdkColor vol_meter_color_button_color; gint *vol_meter_clrs; gchar *vol_cmd,*uifile,*custcmd; PrefsData *prefs_data; uifile = get_ui_file("prefs.xml"); if (!uifile) { report_error(_("Can't find preferences user interface file. Please insure PNMixer is installed correctly.\n")); return NULL; } builder = gtk_builder_new(); if (!gtk_builder_add_from_file( builder, uifile, &error)) { g_warning("%s",error->message); report_error(error->message); g_error_free(error); g_free(uifile); g_object_unref (G_OBJECT (builder)); return NULL; } g_free(uifile); prefs_data = g_slice_new(PrefsData); #define GO(name) prefs_data->name = GTK_WIDGET(gtk_builder_get_object(builder,#name)) GO(prefs_window); GO(card_combo); GO(chan_combo); GO(vol_pos_label); GO(vol_pos_combo); GO(vol_meter_pos_label); GO(vol_meter_pos_spin); GO(vol_meter_color_label); GO(vol_meter_color_button); GO(custom_label); GO(custom_entry); GO(vol_text_check); GO(draw_vol_check); GO(icon_theme_combo); GO(vol_control_entry); GO(scroll_step_spin); GO(middle_click_combo); GO(enable_hotkeys_check); GO(hotkey_spin); GO(hotkey_dialog); GO(hotkey_key_label); GO(mute_hotkey_label); GO(up_hotkey_label); GO(down_hotkey_label); #ifdef HAVE_LIBN GO(enable_noti_check); GO(hotkey_noti_check); GO(mouse_noti_check); GO(popup_noti_check); GO(external_noti_check); #endif #undef GO // vol text display gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(prefs_data->vol_text_check), g_key_file_get_boolean_with_default(keyFile,"PNMixer","DisplayTextVolume",FALSE)); gtk_combo_box_set_active (GTK_COMBO_BOX (prefs_data->vol_pos_combo), g_key_file_get_integer_with_default(keyFile,"PNMixer","TextVolumePosition",0)); // volume meter gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(prefs_data->draw_vol_check), g_key_file_get_boolean_with_default(keyFile,"PNMixer","DrawVolMeter",FALSE)); gtk_adjustment_set_upper (GTK_ADJUSTMENT(gtk_builder_get_object(builder,"vol_meter_pos_adjustment")), tray_icon_size()-10); gtk_spin_button_set_value (GTK_SPIN_BUTTON(prefs_data->vol_meter_pos_spin), g_key_file_get_integer_with_default(keyFile,"PNMixer","VolMeterPos",0)); // load available icon themes into icon theme combo box. also sets active load_icon_themes(prefs_data->icon_theme_combo, GTK_LIST_STORE(gtk_builder_get_object(builder,"icon_theme_liststore"))); // set color button color vol_meter_clrs = get_vol_meter_colors(); vol_meter_color_button_color.red = vol_meter_clrs[0]; vol_meter_color_button_color.green = vol_meter_clrs[1]; vol_meter_color_button_color.blue = vol_meter_clrs[2]; gtk_color_button_set_color(GTK_COLOR_BUTTON(prefs_data->vol_meter_color_button), &vol_meter_color_button_color); g_free(vol_meter_clrs); // fill in card/channel combo boxes fill_card_combo(prefs_data->card_combo,prefs_data->chan_combo); // volume command vol_cmd = get_vol_command(); if (vol_cmd) { gtk_entry_set_text(GTK_ENTRY(prefs_data->vol_control_entry), vol_cmd); g_free(vol_cmd); } // mouse scroll step gtk_spin_button_set_value(GTK_SPIN_BUTTON(prefs_data->scroll_step_spin), g_key_file_get_integer_with_default(keyFile,"PNMixer","MouseScrollStep",1)); // middle click gtk_combo_box_set_active(GTK_COMBO_BOX(prefs_data->middle_click_combo), g_key_file_get_integer_with_default(keyFile,"PNMixer","MiddleClickAction",0)); // custom command gtk_entry_set_invisible_char(GTK_ENTRY(prefs_data->custom_entry), 8226); custcmd = g_key_file_get_string(keyFile,"PNMixer","CustomCommand",NULL); if (custcmd) { gtk_entry_set_text(GTK_ENTRY(prefs_data->custom_entry),custcmd); g_free(custcmd); } on_vol_text_toggle(GTK_TOGGLE_BUTTON(prefs_data->vol_text_check), prefs_data); on_draw_vol_toggle(GTK_TOGGLE_BUTTON(prefs_data->draw_vol_check), prefs_data); on_middle_changed(GTK_COMBO_BOX(prefs_data->middle_click_combo), prefs_data); // hotkeys gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(prefs_data->enable_hotkeys_check), g_key_file_get_boolean_with_default(keyFile,"PNMixer","EnableHotKeys",FALSE)); // hotkey step gtk_spin_button_set_value(GTK_SPIN_BUTTON(prefs_data->hotkey_spin), g_key_file_get_integer_with_default(keyFile,"PNMixer","HotkeyVolumeStep",1)); if (g_key_file_has_key(keyFile,"PNMixer","VolMuteKey",NULL)) set_label_for_keycode(prefs_data->mute_hotkey_label, g_key_file_get_integer(keyFile,"PNMixer", "VolMuteKey", NULL), g_key_file_get_integer_with_default(keyFile,"PNMixer", "VolMuteMods", 0)); if (g_key_file_has_key(keyFile,"PNMixer","VolUpKey",NULL)) set_label_for_keycode(prefs_data->up_hotkey_label, g_key_file_get_integer(keyFile,"PNMixer", "VolUpKey", NULL), g_key_file_get_integer_with_default(keyFile,"PNMixer", "VolUpMods", 0)); if (g_key_file_has_key(keyFile,"PNMixer","VolDownKey",NULL)) set_label_for_keycode(prefs_data->down_hotkey_label, g_key_file_get_integer(keyFile,"PNMixer", "VolDownKey", NULL), g_key_file_get_integer_with_default(keyFile,"PNMixer", "VolDownMods", 0)); gtk_notebook_append_page(GTK_NOTEBOOK(gtk_builder_get_object(builder,"notebook1")), #ifdef HAVE_LIBN GTK_WIDGET(gtk_builder_get_object(builder,"notification_vbox")), #else GTK_WIDGET(gtk_builder_get_object(builder,"no_notification_label")), #endif gtk_label_new("Notifications")); #ifdef HAVE_LIBN // notification checkboxes set_notifications_booleans(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_data->enable_noti_check),enable_noti); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_data->hotkey_noti_check),hotkey_noti); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_data->mouse_noti_check),mouse_noti); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_data->popup_noti_check),popup_noti); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_data->external_noti_check),external_noti); on_notification_toggle(GTK_TOGGLE_BUTTON(prefs_data->enable_noti_check),prefs_data); #endif gtk_builder_connect_signals(builder, prefs_data); g_object_unref (G_OBJECT (builder)); return prefs_data->prefs_window; }