/* * This file Copyright (C) 2007 Charles Kerr * * This file is licensed by the GPL version 2. Works owned by the * Transmission project are granted a special exemption to clause 2(b) * so that the bulk of its code can remain under the MIT license. * This exemption does not extend to derived works not owned by * the Transmission project. */ #include #include #include #include #include "torrent-inspector.h" #include "img_icon_full.h" #define UNUSED G_GNUC_UNUSED extern void doAction (const char * action_name, gpointer user_data ); static GtkActionGroup * myGroup = 0; static void action_cb ( GtkAction * a, gpointer user_data ) { doAction ( gtk_action_get_name(a), user_data ); } #if !GTK_CHECK_VERSION(2,8,0) #define GTK_STOCK_INFO GTK_STOCK_PROPERTIES #endif #if !GTK_CHECK_VERSION(2,10,0) #define GTK_STOCK_SELECT_ALL NULL #endif static GtkRadioActionEntry priority_toggle_entries[] = { { "priority-high", NULL, N_("_High"), NULL, NULL, TR_PRI_HIGH }, { "priority-normal", NULL, N_("_Normal"), NULL, NULL, TR_PRI_NORMAL }, { "priority-low", NULL, N_("_Low"), NULL, NULL, TR_PRI_LOW } }; extern void set_selected_file_priority ( tr_priority_t ); static void priority_changed_cb (GtkAction *action UNUSED, GtkRadioAction *current) { const int priority = gtk_radio_action_get_current_value (current); set_selected_file_priority ( priority ); } static GtkActionEntry entries[] = { { "file-menu", NULL, N_("_File"), NULL, NULL, NULL }, { "edit-menu", NULL, N_("_Edit"), NULL, NULL, NULL }, { "help-menu", NULL, N_("_Help"), NULL, NULL, NULL }, { "priority-menu", NULL, N_("_Priority"), NULL, NULL, NULL }, { "add-torrent", GTK_STOCK_OPEN, NULL, NULL, NULL, G_CALLBACK(action_cb) }, { "start-torrent", GTK_STOCK_EXECUTE, N_("_Start"), "S", NULL, G_CALLBACK(action_cb) }, { "recheck-torrent", GTK_STOCK_REFRESH, N_("Re_check"), NULL, NULL, G_CALLBACK(action_cb) }, { "stop-torrent", GTK_STOCK_STOP, N_("S_top"), "T", NULL, G_CALLBACK(action_cb) }, { "remove-torrent", GTK_STOCK_REMOVE, N_("_Remove"), "R", NULL, G_CALLBACK(action_cb) }, { "create-torrent", GTK_STOCK_NEW, N_("_Create New Torrent"), NULL, NULL, G_CALLBACK(action_cb) }, { "close", GTK_STOCK_CLOSE, N_("_Close"), "C", NULL, G_CALLBACK(action_cb) }, { "quit", GTK_STOCK_QUIT, N_("_Quit"), "Q", NULL, G_CALLBACK(action_cb) }, { "select-all", GTK_STOCK_SELECT_ALL, N_("Select _All"), "A", NULL, G_CALLBACK(action_cb) }, { "unselect-all", NULL, N_("_Deselect All"), "U", NULL, G_CALLBACK(action_cb) }, { "edit-preferences", GTK_STOCK_PREFERENCES, N_("Edit _Preferences"), NULL, NULL, G_CALLBACK(action_cb) }, { "show-torrent-inspector", GTK_STOCK_INFO, N_("_Torrent Info"), NULL, NULL, G_CALLBACK(action_cb) }, { "show-about-dialog", GTK_STOCK_ABOUT, N_("_About Transmission"), NULL, NULL, G_CALLBACK(action_cb) }, { "show-debug-window", NULL, N_("Show _Debug Window"), NULL, NULL, G_CALLBACK(action_cb) }, { "toggle-main-window", "ICON_TRANSMISSION", N_("Show / Hide _Transmission"), NULL, NULL, G_CALLBACK(action_cb) }, { "update-tracker", GTK_STOCK_REFRESH, N_("Update Tracker"), NULL, NULL, G_CALLBACK(action_cb) } }; static void ensure_tooltip (GtkActionEntry * e) { if( !e->tooltip && e->label ) { const char * src; char *tgt; e->tooltip = g_malloc( strlen( e->label ) + 1 ); for( src=e->label, tgt=(char*)e->tooltip; *src; ++src ) if( *src != '_' ) *tgt++ = *src; *tgt++ = '\0'; } } typedef struct { const guint8* raw; const char * name; } BuiltinIconInfo; /* only one icon now... but room to grow ;) */ const BuiltinIconInfo my_builtin_icons [] = { { tr_icon_full, "ICON_TRANSMISSION" } }; static void register_my_icons ( void ) { int i; const int n = G_N_ELEMENTS( my_builtin_icons ); GtkIconFactory * factory = gtk_icon_factory_new (); gtk_icon_factory_add_default( factory ); for( i=0; inext ) { GtkActionGroup * action_group = GTK_ACTION_GROUP( l->data ); GList *ait, *actions = gtk_action_group_list_actions( action_group ); for( ait=actions; ait!=NULL; ait=ait->next ) { GtkAction * action = GTK_ACTION( ait->data ); const char * name = gtk_action_get_name( action ); g_hash_table_insert( key_to_action, g_strdup(name), action ); } g_list_free( actions ); } } static GtkAction* get_action( const char* name ) { ensure_action_map_loaded( myUIManager ); return ( GtkAction* ) g_hash_table_lookup( key_to_action, name ); } void action_activate ( const char * name ) { GtkAction * action = get_action( name ); g_assert( action != NULL ); gtk_action_activate( action ); } void action_sensitize( const char * name, gboolean b ) { GtkAction * action = get_action( name ); g_assert( action != NULL ); g_object_set( action, "sensitive", b, NULL ); } void action_toggle( const char * name, gboolean b ) { GtkAction * action = get_action( name ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(action), b ); } GtkWidget* action_get_widget( const char * path ) { return gtk_ui_manager_get_widget( myUIManager, path ); }