]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/mru.cpp
radiant/console: make logging thread-safe
[xonotic/netradiant.git] / radiant / mru.cpp
index 50d89bf1c0ad29db4760fc5693445b65239a37e5..798e7f5eccd01044c78a2468470aa38f0e081d37 100644 (file)
 #include "map.h"
 #include "qe3.h"
 
-#define MRU_MAX 4
+const int MRU_MAX = 4;
 namespace {
-GtkMenuItem *MRU_items[MRU_MAX];
-std::size_t MRU_used;
-typedef CopiedString MRU_filename_t;
-MRU_filename_t MRU_filenames[MRU_MAX];
-typedef const char* MRU_key_t;
-MRU_key_t MRU_keys[MRU_MAX] = { "File0", "File1", "File2", "File3" };
+       GtkMenuItem *MRU_items[MRU_MAX];
+       std::size_t MRU_used;
+       typedef CopiedString MRU_filename_t;
+       MRU_filename_t MRU_filenames[MRU_MAX];
+       typedef const char* MRU_key_t;
+       MRU_key_t MRU_keys[MRU_MAX] = { "File0", "File1", "File2", "File3" };
 }
 
 inline const char* MRU_GetText( std::size_t index ){
@@ -50,28 +50,30 @@ inline const char* MRU_GetText( std::size_t index ){
 
 class EscapedMnemonic
 {
-StringBuffer m_buffer;
+private:
+       StringBuffer m_buffer;
+
 public:
-EscapedMnemonic( std::size_t capacity ) : m_buffer( capacity ){
-       m_buffer.push_back( '_' );
-}
-const char* c_str() const {
-       return m_buffer.c_str();
-}
-void push_back( char c ){ // not escaped
-       m_buffer.push_back( c );
-}
-std::size_t write( const char* buffer, std::size_t length ){
-       for ( const char* end = buffer + length; buffer != end; ++buffer )
-       {
-               if ( *buffer == '_' ) {
-                       m_buffer.push_back( '_' );
-               }
+       EscapedMnemonic( std::size_t capacity ) : m_buffer( capacity ){
+               m_buffer.push_back( '_' );
+       }
+       const char* c_str() const {
+               return m_buffer.c_str();
+       }
+       void push_back( char c ){ // not escaped
+               m_buffer.push_back( c );
+       }
+       std::size_t write( const char* buffer, std::size_t length ){
+               for ( const char* end = buffer + length; buffer != end; ++buffer )
+               {
+                       if ( *buffer == '_' ) {
+                               m_buffer.push_back( '_' );
+                       }
 
-               m_buffer.push_back( *buffer );
+                       m_buffer.push_back( *buffer );
+               }
+               return length;
        }
-       return length;
-}
 };
 
 template<typename T>
@@ -120,8 +122,8 @@ void MRU_AddFile( const char *str ){
                MRU_SetText( i, MRU_GetText( i - 1 ) );
 
        MRU_SetText( 0, str );
-       gtk_widget_set_sensitive( GTK_WIDGET( MRU_items[0] ), TRUE );
-       ui::Widget(GTK_WIDGET( MRU_items[MRU_used - 1] )).show();
+       gtk_widget_set_sensitive( ui::MenuItem::from(MRU_items[0]) , TRUE );
+       ui::MenuItem::from(MRU_items[MRU_used - 1] ).show();
 }
 
 void MRU_Init(){
@@ -130,13 +132,13 @@ void MRU_Init(){
        }
 }
 
-void MRU_AddWidget( GtkMenuItem *widget, std::size_t pos ){
+void MRU_AddWidget( ui::MenuItem widget, std::size_t pos ){
        if ( pos < MRU_MAX ) {
                MRU_items[pos] = widget;
                if ( pos < MRU_used ) {
                        MRU_updateWidget( pos, MRU_GetText( pos ) );
-                       gtk_widget_set_sensitive( GTK_WIDGET( MRU_items[0] ), TRUE );
-                       ui::Widget(GTK_WIDGET( MRU_items[pos] )).show();
+                       gtk_widget_set_sensitive( ui::MenuItem::from(MRU_items[0]) , TRUE );
+                       ui::MenuItem::from(MRU_items[pos]).show();
                }
        }
 }
@@ -159,12 +161,13 @@ void MRU_Activate( std::size_t index ){
                        MRU_SetText( i, MRU_GetText( i + 1 ) );
 
                if ( MRU_used == 0 ) {
-                       gtk_label_set_text( GTK_LABEL( gtk_bin_get_child(GTK_BIN( MRU_items[0] )) ), "Recent Files" );
-                       gtk_widget_set_sensitive( GTK_WIDGET( MRU_items[0] ), FALSE );
+                       auto label = ui::Label::from(gtk_bin_get_child(GTK_BIN(MRU_items[0] )) );
+                       label.text("Recent Files");
+                       gtk_widget_set_sensitive( ui::MenuItem::from(MRU_items[0]), FALSE );
                }
                else
                {
-                       gtk_widget_hide( GTK_WIDGET( MRU_items[MRU_used] ) );
+                       ui::MenuItem::from(MRU_items[MRU_used]).hide();
                }
        }
 }
@@ -172,19 +175,21 @@ void MRU_Activate( std::size_t index ){
 
 class LoadMRU
 {
-std::size_t m_number;
+private:
+       std::size_t m_number;
+
 public:
-LoadMRU( std::size_t number )
-       : m_number( number ){
-}
-void load(){
-       if ( ConfirmModified( "Open Map" ) ) {
-               MRU_Activate( m_number - 1 );
+       LoadMRU( std::size_t number )
+               : m_number( number ){
+       }
+       void load(){
+               if ( ConfirmModified( "Open Map" ) ) {
+                       MRU_Activate( m_number - 1 );
+               }
        }
-}
 };
 
-typedef MemberCaller<LoadMRU, &LoadMRU::load> LoadMRUCaller;
+typedef MemberCaller<LoadMRU, void(), &LoadMRU::load> LoadMRUCaller;
 
 LoadMRU g_load_mru1( 1 );
 LoadMRU g_load_mru2( 2 );
@@ -193,23 +198,23 @@ LoadMRU g_load_mru4( 4 );
 
 void MRU_constructMenu( ui::Menu menu ){
        {
-               GtkMenuItem* item = create_menu_item_with_mnemonic( menu, "_1", LoadMRUCaller( g_load_mru1 ) );
-               gtk_widget_set_sensitive( GTK_WIDGET( item ), FALSE );
+               auto item = create_menu_item_with_mnemonic( menu, "_1", LoadMRUCaller( g_load_mru1 ) );
+               gtk_widget_set_sensitive( item , FALSE );
                MRU_AddWidget( item, 0 );
        }
        {
-               GtkMenuItem* item = create_menu_item_with_mnemonic( menu, "_2", LoadMRUCaller( g_load_mru2 ) );
-               gtk_widget_hide( GTK_WIDGET( item ) );
+               auto item = create_menu_item_with_mnemonic( menu, "_2", LoadMRUCaller( g_load_mru2 ) );
+               item.hide();
                MRU_AddWidget( item, 1 );
        }
        {
-               GtkMenuItem* item = create_menu_item_with_mnemonic( menu, "_3", LoadMRUCaller( g_load_mru3 ) );
-               gtk_widget_hide( GTK_WIDGET( item ) );
+               auto item = create_menu_item_with_mnemonic( menu, "_3", LoadMRUCaller( g_load_mru3 ) );
+               item.hide();
                MRU_AddWidget( item, 2 );
        }
        {
-               GtkMenuItem* item = create_menu_item_with_mnemonic( menu, "_4", LoadMRUCaller( g_load_mru4 ) );
-               gtk_widget_hide( GTK_WIDGET( item ) );
+               auto item = create_menu_item_with_mnemonic( menu, "_4", LoadMRUCaller( g_load_mru4 ) );
+               item.hide();
                MRU_AddWidget( item, 3 );
        }
 }
@@ -218,11 +223,11 @@ void MRU_constructMenu( ui::Menu menu ){
 #include "stringio.h"
 
 void MRU_Construct(){
-       GlobalPreferenceSystem().registerPreference( "Count", SizeImportStringCaller( MRU_used ), SizeExportStringCaller( MRU_used ) );
+       GlobalPreferenceSystem().registerPreference( "Count", make_property_string( MRU_used ) );
 
        for ( std::size_t i = 0; i != MRU_MAX; ++i )
        {
-               GlobalPreferenceSystem().registerPreference( MRU_keys[i], CopiedStringImportStringCaller( MRU_filenames[i] ), CopiedStringExportStringCaller( MRU_filenames[i] ) );
+               GlobalPreferenceSystem().registerPreference( MRU_keys[i], make_property_string( MRU_filenames[i] ) );
        }
 
        MRU_Init();