00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 #include "config.h"
00032 
00033 
00034 #include <stdio.h>
00035 #include <unistd.h>
00036 
00037 
00038 
00039 
00040 #include "log.h"
00041 #include "i18n.h"
00042 #include "ipc.h"
00043 #include "main.h"
00044 #include "menu.h"
00045 #include "view.h"
00046 
00047 #define UNUSED(x) (void)(x)
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 static const char *MENU_MAIN                = "erbrowser_menu_main";
00061                                             
00062 
00063 static const char *GROUP_ACTIONS            = "erbrowser_actions";
00064                                             
00065 
00066 static const char *GROUP_TOOLS              = "erbrowser_tools";
00067 static const char *GROUP_ZOOM_FONT_TOOLS    = "erbrowser_zoom";
00068 static const char *ITEM_FONT_SIZE_SMALL     = "zoom_small";
00069 static const char *ITEM_FONT_SIZE_MEDIUM    = "zoom_medium";
00070 static const char *ITEM_FONT_SIZE_LARGE     = "zoom_large";
00071 static const char *ITEM_FONT_SIZE_XLARGE    = "zoom_xlarge";
00072 static const char *GROUP_TOOLS_FONTSIZE     = "erbrowser_font_size";
00073 
00074 
00075 static const char *ITEM_ACTION_BACK         = "history_back";
00076 static const char *ITEM_ACTION_FORWARD      = "history_forward";
00077 static const char *ITEM_ACTION_RELOAD       = "reload";
00078 #if MACHINE_IS_DR1000S || MACHINE_IS_DR1000SW
00079 static const char *ITEM_ACTION_FULL_SCREEN  = "mode_full_screen";
00080 static const char *ITEM_ACTION_CLOSE        = "close";
00081 #endif
00082                                             
00083 
00084 static const char *STATE_NORMAL             = "normal";
00085 static const char *STATE_SELECTED           = "selected";
00086 
00087 static const gfloat ZOOM_LEVEL_SMALL        = 0.8f;
00088 static const gfloat ZOOM_LEVEL_MEDIUM       = 1.0f; 
00089 static const gfloat ZOOM_LEVEL_LARGE        = 1.2f;
00090 static const gfloat ZOOM_LEVEL_XLARGE       = 1.5f;
00091 
00092 
00093 
00094 
00095 
00096 
00097 
00098 
00099 
00100 
00101 
00102 
00103 
00104 
00105 
00106 
00107 
00108 void menu_init(void)
00109 {
00110     LOGPRINTF("entry");
00111 
00112     const char *group;
00113     group = GROUP_TOOLS;
00114     ipc_menu_add_group( group,                  "",    "folder"               );
00115     ipc_menu_add_group( GROUP_TOOLS_FONTSIZE,   group, "tools_character"      );  
00116     
00117     group = GROUP_ZOOM_FONT_TOOLS;
00118     ipc_menu_add_group( group,  GROUP_TOOLS_FONTSIZE,  "folder"               );
00119     ipc_menu_add_item ( ITEM_FONT_SIZE_SMALL,   group, ITEM_FONT_SIZE_SMALL   );
00120     ipc_menu_add_item ( ITEM_FONT_SIZE_MEDIUM,  group, ITEM_FONT_SIZE_MEDIUM  );
00121     ipc_menu_set_item_state( ITEM_FONT_SIZE_MEDIUM, group, STATE_SELECTED     );
00122     ipc_menu_add_item ( ITEM_FONT_SIZE_LARGE,   group, ITEM_FONT_SIZE_LARGE   );
00123     ipc_menu_add_item ( ITEM_FONT_SIZE_XLARGE,  group, ITEM_FONT_SIZE_XLARGE  );
00124 
00125     group = GROUP_ACTIONS;
00126     ipc_menu_add_group( group,                  "",    "folder"               );
00127     ipc_menu_add_item ( ITEM_ACTION_BACK,       group, ITEM_ACTION_BACK       );
00128     ipc_menu_add_item ( ITEM_ACTION_FORWARD,    group, ITEM_ACTION_FORWARD    );
00129     ipc_menu_add_item ( ITEM_ACTION_RELOAD,     group, ITEM_ACTION_RELOAD     );
00130 #if MACHINE_IS_DR1000S || MACHINE_IS_DR1000SW
00131     ipc_menu_add_item ( ITEM_ACTION_FULL_SCREEN, group, ITEM_ACTION_FULL_SCREEN );
00132     ipc_menu_add_item ( ITEM_ACTION_CLOSE,       group, ITEM_ACTION_CLOSE       );
00133 #endif
00134 
00135     ipc_menu_add_menu ( MENU_MAIN, GROUP_ACTIONS, GROUP_TOOLS, NULL );
00136 
00137     menu_set_text();
00138     
00139     
00140     menu_show();    
00141 }
00142 
00143 
00144 
00145 void menu_destroy(void)
00146 {
00147     LOGPRINTF("entry");
00148 
00149     
00150     ipc_remove_menu( MENU_MAIN );
00151 }
00152 
00153 
00154 
00155 void menu_show(void)
00156 {
00157     LOGPRINTF("entry");
00158 
00159     
00160     ipc_menu_show_menu( MENU_MAIN );
00161 }
00162 
00163 
00164 void menu_set_full_screen(gboolean mode)
00165 {
00166     LOGPRINTF("entry");
00167 
00168 #if MACHINE_IS_DR1000S || MACHINE_IS_DR1000SW
00169     if (mode)
00170     {
00171         ipc_menu_set_item_state(ITEM_ACTION_FULL_SCREEN, GROUP_ACTIONS, STATE_SELECTED);
00172     }
00173     else
00174     {
00175         ipc_menu_set_item_state(ITEM_ACTION_FULL_SCREEN, GROUP_ACTIONS, STATE_NORMAL);
00176     }
00177 #else
00178     UNUSED(mode);
00179 #endif    
00180 }
00181 
00182 
00183 void menu_set_text(void)
00184 {
00185     LOGPRINTF("entry");
00186 
00187     const char *group;
00188     group = GROUP_TOOLS;
00189     ipc_menu_set_group_label( GROUP_TOOLS_FONTSIZE,         _("Adjust Font Size"));
00190 
00191     group = GROUP_ZOOM_FONT_TOOLS;
00192     ipc_menu_set_group_label( group,                        _("Actions")         );
00193     ipc_menu_set_item_label ( ITEM_FONT_SIZE_SMALL,  group, _("Small")           );
00194     ipc_menu_set_item_label ( ITEM_FONT_SIZE_MEDIUM, group, _("Medium")          );
00195     ipc_menu_set_item_label ( ITEM_FONT_SIZE_LARGE,  group, _("Large")           );
00196     ipc_menu_set_item_label ( ITEM_FONT_SIZE_XLARGE, group, _("X-Large")         );
00197 
00198     group = GROUP_ACTIONS;                                                     
00199     ipc_menu_set_group_label( group,                        _("Actions")         );
00200     ipc_menu_set_item_label ( ITEM_ACTION_BACK,    group,   _("Previous")        );
00201     ipc_menu_set_item_label ( ITEM_ACTION_FORWARD, group,   _("Next")            );
00202     ipc_menu_set_item_label ( ITEM_ACTION_RELOAD,  group,   _("Reload Page")     );
00203 #if MACHINE_IS_DR1000S || MACHINE_IS_DR1000SW
00204     ipc_menu_set_item_label ( ITEM_ACTION_FULL_SCREEN, group, _("Full Screen")   );
00205     ipc_menu_set_item_label ( ITEM_ACTION_CLOSE,   group,     _("Close")         );
00206 #endif
00207 }
00208 
00209 
00210 void menu_set_zoom_level(gfloat zoom_level)
00211 {
00212     const gchar *selected = NULL;
00213     
00214     
00215     if (zoom_level <= ZOOM_LEVEL_SMALL)
00216         selected = ITEM_FONT_SIZE_SMALL;
00217     else if (zoom_level <= ZOOM_LEVEL_MEDIUM)
00218         selected = ITEM_FONT_SIZE_MEDIUM;
00219     else if (zoom_level <=  ZOOM_LEVEL_LARGE)
00220         selected = ITEM_FONT_SIZE_LARGE;
00221     else
00222         selected = ITEM_FONT_SIZE_XLARGE;
00223 
00224     
00225     if (selected != ITEM_FONT_SIZE_SMALL)
00226         ipc_menu_set_item_state(ITEM_FONT_SIZE_SMALL,  GROUP_ZOOM_FONT_TOOLS, STATE_NORMAL);            
00227     if (selected != ITEM_FONT_SIZE_MEDIUM)
00228         ipc_menu_set_item_state(ITEM_FONT_SIZE_MEDIUM, GROUP_ZOOM_FONT_TOOLS, STATE_NORMAL);
00229     if (selected != ITEM_FONT_SIZE_LARGE)
00230         ipc_menu_set_item_state(ITEM_FONT_SIZE_LARGE,  GROUP_ZOOM_FONT_TOOLS, STATE_NORMAL);
00231     if (selected != ITEM_FONT_SIZE_XLARGE)
00232         ipc_menu_set_item_state(ITEM_FONT_SIZE_XLARGE, GROUP_ZOOM_FONT_TOOLS, STATE_NORMAL);
00233     if (selected) 
00234         ipc_menu_set_item_state(selected, GROUP_ZOOM_FONT_TOOLS, STATE_SELECTED);
00235 }
00236 
00237 
00238 
00239 
00240 
00241 
00242 
00243 void menu_on_item_activated ( const gchar *item,
00244                               const gchar *group,
00245                               const gchar *menu,
00246                               const gchar *state )
00247 {
00248     gboolean    ok = TRUE;
00249 
00250     LOGPRINTF("entry: item [%s] group [%s]", item, group);
00251 
00252     if ( strcmp(group, GROUP_ACTIONS) == 0 )
00253     {
00254         if ( strcmp(item, ITEM_ACTION_BACK) == 0 )
00255         {
00256             view_go_back();
00257         }
00258         else if ( strcmp(item, ITEM_ACTION_FORWARD) == 0 )
00259         {
00260             view_go_forward();
00261         }
00262         else if ( strcmp(item, ITEM_ACTION_RELOAD) == 0 )
00263         {
00264             view_reload();
00265         }
00266 #if MACHINE_IS_DR1000S || MACHINE_IS_DR1000SW
00267         else if ( strcmp(item, ITEM_ACTION_FULL_SCREEN) == 0 )
00268         {
00269             if ( strcmp(state, STATE_NORMAL) == 0 )
00270             {
00271                 view_full_screen(TRUE);
00272             }
00273             else if ( strcmp(state, STATE_SELECTED) == 0 )
00274             {
00275                 view_full_screen(FALSE);
00276             }
00277         }
00278         else if ( strcmp(item, ITEM_ACTION_CLOSE) == 0 )
00279         {
00280             
00281             main_quit();
00282         }
00283 #endif
00284         else
00285         {
00286             WARNPRINTF("unexpected menu item [%s] in group [%s]", item, group);
00287             ok = FALSE;
00288         }
00289     }
00290     else if ( strcmp(group, GROUP_ZOOM_FONT_TOOLS) == 0 )
00291     {
00292         if ( strcmp(item, ITEM_FONT_SIZE_SMALL) == 0 )
00293         {
00294             view_set_zoom_level(ZOOM_LEVEL_SMALL);
00295         }
00296         else if ( strcmp(item, ITEM_FONT_SIZE_MEDIUM) == 0 )
00297         {
00298             view_set_zoom_level(ZOOM_LEVEL_MEDIUM);
00299         }
00300         else if ( strcmp(item, ITEM_FONT_SIZE_LARGE) == 0 )
00301         {
00302             view_set_zoom_level(ZOOM_LEVEL_LARGE);
00303         }
00304         else if ( strcmp(item, ITEM_FONT_SIZE_XLARGE) == 0 )
00305         {
00306             view_set_zoom_level(ZOOM_LEVEL_XLARGE);
00307         }
00308         else
00309         {
00310             WARNPRINTF("unexpected menu item [%s] in group [%s]", item, group);
00311             ok = FALSE;
00312         }
00313     }
00314     else
00315     {
00316         WARNPRINTF("unexpected menu group [%s]", group);
00317         ok = FALSE;
00318     }
00319 
00320     if (!ok)
00321     {
00322         WARNPRINTF("unhandled menu item.\n"
00323                                  "menu: %s\n"
00324                                  "group: %s\n"
00325                                  "item: %s\n"
00326                                  "state: %s",
00327                                menu,
00328                                group,
00329                                item,
00330                                state );
00331     }
00332 }