- }
-
- GtkVBox* vbox = create_dialog_vbox(4);
- gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), FALSE, FALSE, 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_focus(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));
+ };
+ */
+
+void DoCommandListDlg(){
+ command_list_dialog_t dialog;
+
+ ui::Window window = MainFrame_getWindow().create_modal_dialog_window("Mapped Commands", dialog, -1, 400);
+ window.on_key_press([](ui::Widget widget, GdkEventKey *event, gpointer dialogptr) {
+ return accelerator_window_key_press(widget, event, dialogptr);
+ }, &dialog);
+
+ auto accel = ui::AccelGroup(ui::New);
+ window.add_accel_group( accel );
+
+ auto hbox = create_dialog_hbox( 4, 4 );
+ window.add(hbox);
+
+ {
+ auto scr = create_scrolled_window( ui::Policy::NEVER, ui::Policy::AUTOMATIC );
+ gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( scr ), TRUE, TRUE, 0 );
+
+ {
+ ui::ListStore store = ui::ListStore(gtk_list_store_new( 4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT ));
+
+ ui::Widget view = ui::TreeView(ui::TreeModel(GTK_TREE_MODEL(store)));
+ dialog.m_list = GTK_TREE_VIEW( view );
+
+ gtk_tree_view_set_enable_search( GTK_TREE_VIEW( view ), false ); // annoying
+
+ {
+ auto renderer = ui::CellRendererText(ui::New);
+ GtkTreeViewColumn* column = ui::TreeViewColumn( "Command", renderer, {{"text", 0}, {"weight-set", 2}, {"weight", 3}} );
+ gtk_tree_view_append_column( GTK_TREE_VIEW( view ), column );
+ }
+
+ {
+ auto renderer = ui::CellRendererText(ui::New);
+ GtkTreeViewColumn* column = ui::TreeViewColumn( "Key", renderer, {{"text", 1}, {"weight-set", 2}, {"weight", 3}} );
+ gtk_tree_view_append_column( GTK_TREE_VIEW( view ), column );
+ }
+
+ 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();
+ }
+ }
+
+ 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 );
+
+ ui::Widget spacer = ui::Image(ui::New);
+ spacer.show();
+ gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( spacer ), TRUE, TRUE, 0 );
+
+ auto 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( button );
+ gtk_widget_grab_default( GTK_WIDGET( button ) );
+ gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_KEY_Return, (GdkModifierType)0, (GtkAccelFlags)0 );
+ gtk_widget_add_accelerator( GTK_WIDGET( button ), "clicked", accel, GDK_KEY_Escape, (GdkModifierType)0, (GtkAccelFlags)0 );
+ }
+
+ modal_dialog_show( window, dialog );
+ gtk_widget_destroy( GTK_WIDGET( window ) );