- {
- 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));
+ view.show();
+ scr.add(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;
+ ui::ListStore m_store;
+public:
+ BuildCommandList( const char* filename, ui::ListStore store ) : m_commandList( filename ), m_store( store ){
+ }
+ void visit( const char* name, Accelerator& accelerator ){
+ StringOutputStream modifiers;
+ modifiers << accelerator;
+
+ m_store.append(0, name, 1, modifiers.c_str(), 2, false, 3, 800);
+
+ 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 );
+ }
+
+ store.unref();
+ }
+ }
+
+ auto vbox = create_dialog_vbox( 4 );
+ hbox.pack_start( vbox, TRUE, TRUE, 0 );
+ {
+ auto editbutton = create_dialog_button( "Edit", (GCallback) accelerator_edit_button_clicked, &dialog );
+ vbox.pack_start( editbutton, FALSE, FALSE, 0 );
+
+ auto clearbutton = create_dialog_button( "Clear", (GCallback) accelerator_clear_button_clicked, &dialog );
+ vbox.pack_start( clearbutton, FALSE, FALSE, 0 );
+
+ ui::Widget spacer = ui::Image(ui::New);
+ spacer.show();
+ vbox.pack_start( spacer, TRUE, TRUE, 0 );
+
+ auto button = create_modal_dialog_button( "Close", dialog.m_close_button );
+ vbox.pack_start( button, FALSE, FALSE, 0 );
+ widget_make_default( button );
+ gtk_widget_grab_default( button );
+ gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Return, (GdkModifierType)0, (GtkAccelFlags)0 );
+ gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Escape, (GdkModifierType)0, (GtkAccelFlags)0 );
+ }
+
+ modal_dialog_show( window, dialog );
+ window.destroy();