GtkWindow* create_simple_modal_dialog_window(const char* title, ModalDialog& dialog, GtkWidget* contents) { GtkWindow* window = create_fixedsize_modal_dialog_window(0, title, dialog); GtkVBox* vbox1 = create_dialog_vbox(8, 4); gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(vbox1)); gtk_container_add(GTK_CONTAINER(vbox1), contents); GtkAlignment* alignment = GTK_ALIGNMENT(gtk_alignment_new(0.5, 0.0, 0.0, 0.0)); gtk_widget_show(GTK_WIDGET(alignment)); gtk_box_pack_start(GTK_BOX(vbox1), GTK_WIDGET(alignment), FALSE, FALSE, 0); GtkButton* button = create_dialog_button("OK", G_CALLBACK(dialog_button_ok), &dialog); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(button)); return window; }
void DoCommandListDlg(){ command_list_dialog_t dialog; GtkWindow* window = create_modal_dialog_window( MainFrame_getWindow(), "Mapped Commands", dialog, -1, 400 ); g_signal_connect( G_OBJECT( window ), "key-press-event", (GCallback) accelerator_window_key_press, &dialog ); GtkAccelGroup* accel = gtk_accel_group_new(); gtk_window_add_accel_group( window, accel ); GtkHBox* hbox = create_dialog_hbox( 4, 4 ); gtk_container_add( GTK_CONTAINER( window ), GTK_WIDGET( hbox ) ); { GtkScrolledWindow* scr = create_scrolled_window( GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC ); gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( scr ), TRUE, TRUE, 0 ); { GtkListStore* store = gtk_list_store_new( 4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT ); GtkWidget* view = gtk_tree_view_new_with_model( GTK_TREE_MODEL( store ) ); dialog.m_list = GTK_TREE_VIEW( view ); gtk_tree_view_set_enable_search( GTK_TREE_VIEW( view ), false ); // annoying { GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes( "Command", renderer, "text", 0, "weight-set", 2, "weight", 3, NULL ); gtk_tree_view_append_column( GTK_TREE_VIEW( view ), column ); } { GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes( "Key", renderer, "text", 1, "weight-set", 2, "weight", 3, NULL ); gtk_tree_view_append_column( GTK_TREE_VIEW( view ), column ); } gtk_widget_show( view ); gtk_container_add( GTK_CONTAINER( scr ), view ); { // Initialize dialog StringOutputStream path( 256 ); path << SettingsPath_get() << "commandlist.txt"; globalOutputStream() << "Writing the command list to " << path.c_str() << "\n"; class BuildCommandList : public CommandVisitor { TextFileOutputStream m_commandList; GtkListStore* m_store; public: BuildCommandList( const char* filename, GtkListStore* store ) : m_commandList( filename ), m_store( store ){ } void visit( const char* name, Accelerator& accelerator ){ StringOutputStream modifiers; modifiers << accelerator; { GtkTreeIter iter; gtk_list_store_append( m_store, &iter ); gtk_list_store_set( m_store, &iter, 0, name, 1, modifiers.c_str(), 2, false, 3, 800, -1 ); } if ( !m_commandList.failed() ) { int l = strlen( name ); m_commandList << name; while ( l++ < 25 ) m_commandList << ' '; m_commandList << modifiers.c_str() << '\n'; } } } visitor( path.c_str(), store ); GlobalShortcuts_foreach( visitor ); } g_object_unref( G_OBJECT( store ) ); } } GtkVBox* vbox = create_dialog_vbox( 4 ); gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( vbox ), TRUE, TRUE, 0 ); { GtkButton* editbutton = create_dialog_button( "Edit", (GCallback) accelerator_edit_button_clicked, &dialog ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( editbutton ), FALSE, FALSE, 0 ); GtkButton* clearbutton = create_dialog_button( "Clear", (GCallback) accelerator_clear_button_clicked, &dialog ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( clearbutton ), FALSE, FALSE, 0 ); GtkWidget *spacer = gtk_image_new(); gtk_widget_show( spacer ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( spacer ), TRUE, TRUE, 0 ); GtkButton* button = create_modal_dialog_button( "Close", dialog.m_close_button ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( button ), FALSE, FALSE, 0 ); widget_make_default( GTK_WIDGET( button ) ); gtk_widget_grab_default( GTK_WIDGET( button ) ); gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_Return, (GdkModifierType)0, (GtkAccelFlags)0 ); gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_Escape, (GdkModifierType)0, (GtkAccelFlags)0 ); } modal_dialog_show( window, dialog ); gtk_widget_destroy( GTK_WIDGET( window ) ); }
GtkWindow* PrefsDlg::BuildDialog() { PreferencesDialog_addInterfacePreferences(FreeCaller1<PreferencesPage&, Interface_constructPreferences>()); Mouse_registerPreferencesPage(); GtkWindow* dialog = create_floating_window("NetRadiant Preferences", m_parent); { GtkWidget* mainvbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(dialog), mainvbox); gtk_container_set_border_width(GTK_CONTAINER(mainvbox), 5); gtk_widget_show(mainvbox); { GtkWidget* hbox = gtk_hbox_new(FALSE, 5); gtk_widget_show(hbox); gtk_box_pack_end(GTK_BOX(mainvbox), hbox, FALSE, TRUE, 0); { GtkButton* button = create_dialog_button("OK", G_CALLBACK(dialog_button_ok), &m_modal); gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(button), FALSE, FALSE, 0); } { GtkButton* button = create_dialog_button("Cancel", G_CALLBACK(dialog_button_cancel), &m_modal); gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(button), FALSE, FALSE, 0); } { GtkButton* button = create_dialog_button("Clean", G_CALLBACK(OnButtonClean), this); gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(button), FALSE, FALSE, 0); } } { GtkWidget* hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(mainvbox), hbox, TRUE, TRUE, 0); gtk_widget_show(hbox); { GtkWidget* sc_win = gtk_scrolled_window_new(0, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_win), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(hbox), sc_win, FALSE, FALSE, 0); gtk_widget_show(sc_win); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sc_win), GTK_SHADOW_IN); // prefs pages notebook m_notebook = gtk_notebook_new(); // hide the notebook tabs since its not supposed to look like a notebook gtk_notebook_set_show_tabs(GTK_NOTEBOOK(m_notebook), FALSE); gtk_box_pack_start(GTK_BOX(hbox), m_notebook, TRUE, TRUE, 0); gtk_widget_show(m_notebook); { GtkTreeStore* store = gtk_tree_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); GtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); { GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes("Preferences", renderer, "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(view), column); } { GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(treeSelection), this); } gtk_widget_show(view); gtk_container_add(GTK_CONTAINER (sc_win), view); { /********************************************************************/ /* Add preference tree options */ /********************************************************************/ // Front page... //GtkWidget* front = PreferencePages_addPage(m_notebook, "Front Page"); { GtkWidget* global = PreferencePages_addPage(m_notebook, "Global Preferences"); { PreferencesPage preferencesPage(*this, getVBox(global)); Global_constructPreferences(preferencesPage); } GtkTreeIter group = PreferenceTree_appendPage(store, 0, "Global", global); { GtkWidget* game = PreferencePages_addPage(m_notebook, "Game"); PreferencesPage preferencesPage(*this, getVBox(game)); g_GamesDialog.CreateGlobalFrame(preferencesPage); PreferenceTree_appendPage(store, &group, "Game", game); } } { GtkWidget* interfacePage = PreferencePages_addPage(m_notebook, "Interface Preferences"); { PreferencesPage preferencesPage(*this, getVBox(interfacePage)); PreferencesPageCallbacks_constructPage(g_interfacePreferences, preferencesPage); } GtkTreeIter group = PreferenceTree_appendPage(store, 0, "Interface", interfacePage); PreferenceTreeGroup preferenceGroup(*this, m_notebook, store, group); PreferenceGroupCallbacks_constructGroup(g_interfaceCallbacks, preferenceGroup); } { GtkWidget* display = PreferencePages_addPage(m_notebook, "Display Preferences"); { PreferencesPage preferencesPage(*this, getVBox(display)); PreferencesPageCallbacks_constructPage(g_displayPreferences, preferencesPage); } GtkTreeIter group = PreferenceTree_appendPage(store, 0, "Display", display); PreferenceTreeGroup preferenceGroup(*this, m_notebook, store, group); PreferenceGroupCallbacks_constructGroup(g_displayCallbacks, preferenceGroup); } { GtkWidget* settings = PreferencePages_addPage(m_notebook, "General Settings"); { PreferencesPage preferencesPage(*this, getVBox(settings)); PreferencesPageCallbacks_constructPage(g_settingsPreferences, preferencesPage); } GtkTreeIter group = PreferenceTree_appendPage(store, 0, "Settings", settings); PreferenceTreeGroup preferenceGroup(*this, m_notebook, store, group); PreferenceGroupCallbacks_constructGroup(g_settingsCallbacks, preferenceGroup); } } gtk_tree_view_expand_all(GTK_TREE_VIEW(view)); g_object_unref(G_OBJECT(store)); } } } } gtk_notebook_set_page(GTK_NOTEBOOK(m_notebook), 0); return dialog; }
GtkButton* create_modal_dialog_button(const char* label, ModalDialogButton& button) { return create_dialog_button(label, G_CALLBACK(modal_dialog_button_clicked), &button); }
GtkWindow* BuildMenuDialog_construct(ModalDialog& modal, ProjectList& projectList) { GtkWindow* window = create_dialog_window(MainFrame_getWindow(), "Build Menu", G_CALLBACK(dialog_delete_callback), &modal, -1, 400); GtkWidget* buildView = 0; { GtkTable* table1 = create_dialog_table(2, 2, 4, 4, 4); gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(table1)); { GtkVBox* vbox = create_dialog_vbox(4); gtk_table_attach(table1, GTK_WIDGET(vbox), 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); { GtkButton* button = create_dialog_button("OK", G_CALLBACK(dialog_button_ok), &modal); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0); } { GtkButton* button = create_dialog_button("Cancel", G_CALLBACK(dialog_button_cancel), &modal); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0); } } { GtkFrame* frame = create_dialog_frame("Build menu"); gtk_table_attach(table1, GTK_WIDGET(frame), 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); { GtkScrolledWindow* scr = create_scrolled_window(GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC, 4); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(scr)); { GtkListStore* store = gtk_list_store_new(1, G_TYPE_STRING); GtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); object_set_boolean_property(G_OBJECT(renderer), "editable", TRUE); g_signal_connect(renderer, "edited", G_CALLBACK(project_cell_edited), &projectList); GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes("", renderer, "text", 0, 0); gtk_tree_view_append_column(GTK_TREE_VIEW(view), column); GtkTreeSelection* selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); gtk_widget_show(view); buildView = view; projectList.m_store = store; gtk_container_add(GTK_CONTAINER (scr), view); g_signal_connect(G_OBJECT(view), "key_press_event", G_CALLBACK(project_key_press), &projectList); g_object_unref(G_OBJECT(store)); } } } { GtkFrame* frame = create_dialog_frame("Commandline"); gtk_table_attach(table1, GTK_WIDGET(frame), 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); { GtkScrolledWindow* scr = create_scrolled_window(GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC, 4); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(scr)); { GtkListStore* store = gtk_list_store_new(1, G_TYPE_STRING); GtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); object_set_boolean_property(G_OBJECT(renderer), "editable", TRUE); g_signal_connect(renderer, "edited", G_CALLBACK(commands_cell_edited), store); GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes("", renderer, "text", 0, 0); gtk_tree_view_append_column(GTK_TREE_VIEW(view), column); GtkTreeSelection* selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE); gtk_widget_show(view); gtk_container_add(GTK_CONTAINER (scr), view); g_object_unref(G_OBJECT(store)); g_signal_connect(G_OBJECT(view), "key_press_event", G_CALLBACK(commands_key_press), store); g_signal_connect(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(buildView))), "changed", G_CALLBACK(project_selection_changed), store); } } } } BSPCommandList_Construct(projectList.m_store, g_build_project); return window; }