X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fbuild.cpp;h=3a524a76465f7fa727d966f19eab7f445b7a820f;hb=839c9693774fdb0e420391f65b8066e8bd04c591;hp=5207d67678e275d2b7dcbc45645017b493005896;hpb=51fa1a72ab2099fab13b429097300ed464c25a9d;p=xonotic%2Fnetradiant.git diff --git a/radiant/build.cpp b/radiant/build.cpp index 5207d676..3a524a76 100644 --- a/radiant/build.cpp +++ b/radiant/build.cpp @@ -311,21 +311,12 @@ static bool is_separator( const BuildPair &p ){ } -class BuildPairEqual -{ -const char* m_name; -public: -BuildPairEqual( const char* name ) : m_name( name ){ -} -bool operator()( const BuildPair& self ) const { - return string_equal( self.first.c_str(), m_name ); -} -}; - typedef std::list Project; Project::iterator Project_find( Project& project, const char* name ){ - return std::find_if( project.begin(), project.end(), BuildPairEqual( name ) ); + return std::find_if(project.begin(), project.end(), [&](const BuildPair &self) { + return string_equal(self.first.c_str(), name); + }); } Project::iterator Project_find( Project& project, std::size_t index ){ @@ -661,12 +652,13 @@ class ProjectList public: Project& m_project; ui::ListStore m_store{ui::null}; +GtkWidget* m_buildView; bool m_changed; ProjectList( Project& project ) : m_project( project ), m_changed( false ){ } }; -gboolean project_cell_edited( GtkCellRendererText* cell, gchar* path_string, gchar* new_text, ProjectList* projectList ){ +gboolean project_cell_edited(ui::CellRendererText cell, gchar* path_string, gchar* new_text, ProjectList* projectList ){ Project& project = projectList->m_project; auto path = ui::TreePath( path_string ); @@ -695,6 +687,8 @@ gboolean project_cell_edited( GtkCellRendererText* cell, gchar* path_string, gch gtk_list_store_set( projectList->m_store, &iter, 0, new_text, -1 ); projectList->m_store.append(); + //make command field activatable + g_signal_emit_by_name( G_OBJECT( gtk_tree_view_get_selection( GTK_TREE_VIEW( projectList->m_buildView ) ) ), "changed" ); } gtk_tree_path_free( path ); @@ -708,7 +702,7 @@ gboolean project_key_press( ui::TreeView widget, GdkEventKey* event, ProjectList Project& project = projectList->m_project; if ( event->keyval == GDK_KEY_Delete ) { - auto selection = ui::TreeSelection(gtk_tree_view_get_selection(widget)); + auto selection = ui::TreeSelection::from(gtk_tree_view_get_selection(widget)); GtkTreeIter iter; GtkTreeModel* model; if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) { @@ -766,7 +760,7 @@ gboolean project_selection_changed( ui::TreeSelection selection, ui::ListStore s return FALSE; } -gboolean commands_cell_edited( GtkCellRendererText* cell, gchar* path_string, gchar* new_text, ui::ListStore store ){ +gboolean commands_cell_edited(ui::CellRendererText cell, gchar* path_string, gchar* new_text, ui::ListStore store ){ if ( g_current_build == 0 ) { return FALSE; } @@ -847,8 +841,8 @@ ui::Window BuildMenuDialog_construct( ModalDialog& modal, ProjectList& projectLi vbox.pack_start( button, FALSE, FALSE, 0 ); } } - auto buildViewStore = ui::ListStore(gtk_list_store_new( 1, G_TYPE_STRING )); - auto buildView = ui::TreeView( ui::TreeModel( buildViewStore )); + auto buildViewStore = ui::ListStore::from(gtk_list_store_new( 1, G_TYPE_STRING )); + auto buildView = ui::TreeView( ui::TreeModel::from( buildViewStore._handle )); { auto frame = create_dialog_frame( "Build menu" ); table1.attach(frame, {0, 1, 0, 1}); @@ -873,6 +867,7 @@ ui::Window BuildMenuDialog_construct( ModalDialog& modal, ProjectList& projectLi view.show(); + projectList.m_buildView = buildView; projectList.m_store = store; scr.add(view); @@ -890,9 +885,9 @@ ui::Window BuildMenuDialog_construct( ModalDialog& modal, ProjectList& projectLi frame.add(scr); { - auto store = ui::ListStore(gtk_list_store_new( 1, G_TYPE_STRING )); + auto store = ui::ListStore::from(gtk_list_store_new( 1, G_TYPE_STRING )); - auto view = ui::TreeView(ui::TreeModel( store )); + auto view = ui::TreeView(ui::TreeModel::from( store._handle )); gtk_tree_view_set_headers_visible(view, FALSE ); auto renderer = ui::CellRendererText(ui::New); @@ -913,7 +908,7 @@ ui::Window BuildMenuDialog_construct( ModalDialog& modal, ProjectList& projectLi view.connect( "key_press_event", G_CALLBACK( commands_key_press ), store ); - auto sel = ui::TreeSelection(gtk_tree_view_get_selection(buildView )); + auto sel = ui::TreeSelection::from(gtk_tree_view_get_selection(buildView )); sel.connect( "changed", G_CALLBACK( project_selection_changed ), store ); } } @@ -928,6 +923,7 @@ ui::Window BuildMenuDialog_construct( ModalDialog& modal, ProjectList& projectLi namespace { CopiedString g_buildMenu; +CopiedString g_lastExecutedBuild; } void LoadBuildMenu(); @@ -968,9 +964,10 @@ BuildMenuItem( const char* name, ui::MenuItem item ) : m_name( name ), m_item( item ){ } void run(){ + g_lastExecutedBuild = m_name; RunBSP( m_name ); } -typedef MemberCaller RunCaller; +typedef MemberCaller RunCaller; }; typedef std::list BuildMenuItems; @@ -1035,9 +1032,19 @@ void SaveBuildMenu(){ #include "stringio.h" void BuildMenu_Construct(){ - GlobalPreferenceSystem().registerPreference( "BuildMenu", CopiedStringImportStringCaller( g_buildMenu ), CopiedStringExportStringCaller( g_buildMenu ) ); + GlobalPreferenceSystem().registerPreference( "BuildMenu", make_property_string( g_buildMenu ) ); LoadBuildMenu(); } void BuildMenu_Destroy(){ SaveBuildMenu(); } + + +void Build_runRecentExecutedBuild(){ + if( g_lastExecutedBuild.empty() ){ + g_BuildMenuItems.begin()->run(); + } + else{ + RunBSP( g_lastExecutedBuild.c_str() ); + } +}