]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/build.cpp
radiant/buildmenu: rename ".[ExecutableType]" as "[ExecutableExt]"
[xonotic/netradiant.git] / radiant / build.cpp
index 666e04b50d87700c512a86c5f5919ffadc3a6f13..7090b98fb82c047f35dc1c8c36b1fce3ece325cb 100644 (file)
@@ -76,6 +76,25 @@ void setString( const char* string ){
        m_string = string;
 }
 void evaluate( StringBuffer& output ){
+       // replace ".[ExecutableType]" with "[ExecutableExt]"
+       {
+               StringBuffer output;
+               const char *pattern = ".[ExecutableType]";
+               for ( const char *i = m_string.c_str(); *i != '\0'; ++i )
+               {
+                       if ( strncmp( pattern, i, sizeof( pattern ) ) == 0 )
+                       {
+                               output.push_string("[ExecutableExt]");
+                               i += strlen( pattern ) - 1;
+                       }
+                       else
+                       {
+                               output.push_back(*i);
+                       }
+               }
+               setString(output.c_str());
+       }
+
        StringBuffer variable;
        bool in_variable = false;
        for ( const char* i = m_string.c_str(); *i != '\0'; ++i )
@@ -311,21 +330,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 ){
@@ -666,15 +676,15 @@ 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;
 
-       GtkTreePath* path = ui::TreePath( path_string );
+       auto path = ui::TreePath( path_string );
 
        ASSERT_MESSAGE( gtk_tree_path_get_depth( path ) == 1, "invalid path length" );
 
        GtkTreeIter iter;
-       gtk_tree_model_get_iter( GTK_TREE_MODEL( projectList->m_store ), &iter, path );
+       gtk_tree_model_get_iter(projectList->m_store, &iter, path );
 
        Project::iterator i = Project_find( project, gtk_tree_path_get_indices( path )[0] );
        if ( i != project.end() ) {
@@ -704,15 +714,15 @@ gboolean project_cell_edited( GtkCellRendererText* cell, gchar* path_string, gch
        return FALSE;
 }
 
-gboolean project_key_press( ui::Widget widget, GdkEventKey* event, ProjectList* projectList ){
+gboolean project_key_press( ui::TreeView widget, GdkEventKey* event, ProjectList* projectList ){
        Project& project = projectList->m_project;
 
        if ( event->keyval == GDK_KEY_Delete ) {
-               GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( 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 ) ) {
-                       GtkTreePath* path = gtk_tree_model_get_path( model, &iter );
+                       auto path = gtk_tree_model_get_path( model, &iter );
                        Project::iterator x = Project_find( project, gtk_tree_path_get_indices( path )[0] );
                        gtk_tree_path_free( path );
 
@@ -731,7 +741,7 @@ gboolean project_key_press( ui::Widget widget, GdkEventKey* event, ProjectList*
 
 Build* g_current_build = 0;
 
-gboolean project_selection_changed( GtkTreeSelection* selection, ui::ListStore store ){
+gboolean project_selection_changed( ui::TreeSelection selection, ui::ListStore store ){
        Project& project = g_build_project;
 
        store.clear();
@@ -739,7 +749,7 @@ gboolean project_selection_changed( GtkTreeSelection* selection, ui::ListStore s
        GtkTreeIter iter;
        GtkTreeModel* model;
        if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) {
-               GtkTreePath* path = gtk_tree_model_get_path( model, &iter );
+               auto path = gtk_tree_model_get_path( model, &iter );
                Project::iterator x = Project_find( project, gtk_tree_path_get_indices( path )[0] );
                gtk_tree_path_free( path );
 
@@ -766,18 +776,18 @@ gboolean project_selection_changed( GtkTreeSelection* 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;
        }
        Build& build = *g_current_build;
 
-       GtkTreePath* path = ui::TreePath( path_string );
+       auto path = ui::TreePath( path_string );
 
        ASSERT_MESSAGE( gtk_tree_path_get_depth( path ) == 1, "invalid path length" );
 
        GtkTreeIter iter;
-       gtk_tree_model_get_iter( GTK_TREE_MODEL( store ), &iter, path );
+       gtk_tree_model_get_iter(store, &iter, path );
 
        Build::iterator i = Build_find( build, gtk_tree_path_get_indices( path )[0] );
        if ( i != build.end() ) {
@@ -802,18 +812,18 @@ gboolean commands_cell_edited( GtkCellRendererText* cell, gchar* path_string, gc
        return FALSE;
 }
 
-gboolean commands_key_press( ui::Widget widget, GdkEventKey* event, ui::ListStore store ){
+gboolean commands_key_press( ui::TreeView widget, GdkEventKey* event, ui::ListStore store ){
        if ( g_current_build == 0 ) {
                return FALSE;
        }
        Build& build = *g_current_build;
 
        if ( event->keyval == GDK_KEY_Delete ) {
-               GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( widget ) );
+               auto selection = gtk_tree_view_get_selection(widget );
                GtkTreeIter iter;
                GtkTreeModel* model;
                if ( gtk_tree_selection_get_selected( selection, &model, &iter ) ) {
-                       GtkTreePath* path = gtk_tree_model_get_path( model, &iter );
+                       auto path = gtk_tree_model_get_path( model, &iter );
                        Build::iterator i = Build_find( build, gtk_tree_path_get_indices( path )[0] );
                        gtk_tree_path_free( path );
 
@@ -832,8 +842,6 @@ gboolean commands_key_press( ui::Widget widget, GdkEventKey* event, ui::ListStor
 ui::Window BuildMenuDialog_construct( ModalDialog& modal, ProjectList& projectList ){
        ui::Window window = MainFrame_getWindow().create_dialog_window("Build Menu", G_CALLBACK(dialog_delete_callback ), &modal, -1, 400 );
 
-       ui::Widget buildView{ui::null};
-
        {
                auto table1 = create_dialog_table( 2, 2, 4, 4, 4 );
                window.add(table1);
@@ -849,6 +857,8 @@ ui::Window BuildMenuDialog_construct( ModalDialog& modal, ProjectList& projectLi
                                vbox.pack_start( button, FALSE, FALSE, 0 );
                        }
                }
+               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});
@@ -857,24 +867,22 @@ ui::Window BuildMenuDialog_construct( ModalDialog& modal, ProjectList& projectLi
                                frame.add(scr);
 
                                {
-                                       auto store = ui::ListStore(gtk_list_store_new( 1, G_TYPE_STRING ));
-
-                                       ui::Widget view = ui::TreeView( ui::TreeModel(GTK_TREE_MODEL( store ) ));
-                                       gtk_tree_view_set_headers_visible( GTK_TREE_VIEW( view ), FALSE );
+                                       auto view = buildView;
+                                       auto store = buildViewStore;
+                                       gtk_tree_view_set_headers_visible(view, FALSE );
 
                                        auto renderer = ui::CellRendererText(ui::New);
                                        object_set_boolean_property( G_OBJECT( renderer ), "editable", TRUE );
                                        renderer.connect("edited", G_CALLBACK( project_cell_edited ), &projectList );
 
-                                       GtkTreeViewColumn* column = ui::TreeViewColumn( "", renderer, {{"text", 0}} );
-                                       gtk_tree_view_append_column( GTK_TREE_VIEW( view ), column );
+                                       auto column = ui::TreeViewColumn( "", renderer, {{"text", 0}} );
+                                       gtk_tree_view_append_column(view, column );
 
-                                       GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( view ) );
+                                       auto selection = gtk_tree_view_get_selection(view );
                                        gtk_tree_selection_set_mode( selection, GTK_SELECTION_BROWSE );
 
                                        view.show();
 
-                                       buildView = view;
                                        projectList.m_store = store;
                                        scr.add(view);
 
@@ -892,19 +900,19 @@ ui::Window BuildMenuDialog_construct( ModalDialog& modal, ProjectList& projectLi
                                frame.add(scr);
 
                                {
-                                       ui::ListStore store = ui::ListStore(gtk_list_store_new( 1, G_TYPE_STRING ));
+                                       auto store = ui::ListStore::from(gtk_list_store_new( 1, G_TYPE_STRING ));
 
-                                       ui::Widget view = ui::TreeView(ui::TreeModel( GTK_TREE_MODEL( store ) ));
-                                       gtk_tree_view_set_headers_visible( GTK_TREE_VIEW( view ), FALSE );
+                                       auto view = ui::TreeView(ui::TreeModel::from( store._handle ));
+                                       gtk_tree_view_set_headers_visible(view, FALSE );
 
                                        auto renderer = ui::CellRendererText(ui::New);
                                        object_set_boolean_property( G_OBJECT( renderer ), "editable", TRUE );
                                        renderer.connect( "edited", G_CALLBACK( commands_cell_edited ), store );
 
-                                       GtkTreeViewColumn* column = ui::TreeViewColumn( "", renderer, {{"text", 0}} );
-                                       gtk_tree_view_append_column( GTK_TREE_VIEW( view ), column );
+                                       auto column = ui::TreeViewColumn( "", renderer, {{"text", 0}} );
+                                       gtk_tree_view_append_column(view, column );
 
-                                       GtkTreeSelection* selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( view ) );
+                                       auto selection = gtk_tree_view_get_selection(view );
                                        gtk_tree_selection_set_mode( selection, GTK_SELECTION_BROWSE );
 
                                        view.show();
@@ -915,7 +923,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( GTK_TREE_VIEW( buildView ) ));
+                                       auto sel = ui::TreeSelection::from(gtk_tree_view_get_selection(buildView ));
                                        sel.connect( "changed", G_CALLBACK( project_selection_changed ), store );
                                }
                        }
@@ -965,14 +973,14 @@ class BuildMenuItem
 {
 const char* m_name;
 public:
-GtkMenuItem* m_item;
-BuildMenuItem( const char* name, GtkMenuItem* item )
+ui::MenuItem m_item;
+BuildMenuItem( const char* name, ui::MenuItem item )
        : m_name( name ), m_item( item ){
 }
 void run(){
        RunBSP( m_name );
 }
-typedef MemberCaller<BuildMenuItem, &BuildMenuItem::run> RunCaller;
+typedef MemberCaller<BuildMenuItem, void(), &BuildMenuItem::run> RunCaller;
 };
 
 typedef std::list<BuildMenuItem> BuildMenuItems;
@@ -984,7 +992,7 @@ ui::Menu g_bsp_menu{ui::null};
 void Build_constructMenu( ui::Menu menu ){
        for ( Project::iterator i = g_build_project.begin(); i != g_build_project.end(); ++i )
        {
-               g_BuildMenuItems.push_back( BuildMenuItem( ( *i ).first.c_str(), 0 ) );
+               g_BuildMenuItems.push_back( BuildMenuItem( ( *i ).first.c_str(), ui::MenuItem(ui::null) ) );
                if ( is_separator( *i ) ) {
                        g_BuildMenuItems.back().m_item = menu_separator( menu );
                }
@@ -1037,7 +1045,7 @@ 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(){