- }
-
- 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);
+
+ GtkAccelGroup* accel = ui::AccelGroup();
+ 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 );
+
+ 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();
+ 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();
+ GtkTreeViewColumn* column = ui::TreeViewColumn( "Key", renderer, {{"text", 1}, {"weight-set", 2}, {"weight", 3}} );
+ 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 );
+
+ ui::Widget spacer = ui::Image();
+ 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 ) );