]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/build.cpp
Merge commit 'e7c45da823515747a88569374d62717b72dcf078' into garux-merge
[xonotic/netradiant.git] / radiant / build.cpp
index 5207d67678e275d2b7dcbc45645017b493005896..3a524a76465f7fa727d966f19eab7f445b7a820f 100644 (file)
@@ -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<BuildPair> 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<BuildMenuItem, &BuildMenuItem::run> RunCaller;
+typedef MemberCaller<BuildMenuItem, void(), &BuildMenuItem::run> RunCaller;
 };
 
 typedef std::list<BuildMenuItem> 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() );
+       }
+}