#include "os/file.h"
#include "generic/callback.h"
-#include "stream/stringstream.h"
#include "convert.h"
#include "gtkutil/menu.h"
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 ){
class EscapedMnemonic
{
-StringBuffer m_buffer;
+private:
+ std::string 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() : m_buffer(){
+ 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>
void MRU_updateWidget( std::size_t index, const char *filename ){
- EscapedMnemonic mnemonic( 64 );
+ EscapedMnemonic mnemonic;
mnemonic << Unsigned( index + 1 ) << "- " << filename;
gtk_label_set_text_with_mnemonic( GTK_LABEL( gtk_bin_get_child( GTK_BIN( MRU_items[index] ) ) ), mnemonic.c_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(){
}
}
-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();
}
}
}
MRU_SetText( i, MRU_GetText( i + 1 ) );
if ( MRU_used == 0 ) {
- auto label = ui::Label(GTK_LABEL(gtk_bin_get_child(GTK_BIN(MRU_items[0] )) ));
+ auto label = ui::Label::from(gtk_bin_get_child(GTK_BIN(MRU_items[0] )) );
label.text("Recent Files");
- gtk_widget_set_sensitive( GTK_WIDGET( MRU_items[0] ), FALSE );
+ 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();
}
}
}
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 );
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 );
}
}
#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();