示例#1
0
void
BuildRegisterWindow(Register_Window *rw)
{
        GtkWidget *window;
    GtkWidget *register_sheet;
  GtkWidget *main_vbox;
  GtkWidget *scrolled_window;

#define MAXROWS  (MAX_REGISTERS/REGISTERS_PER_ROW)
#define MAXCOLS  (REGISTERS_PER_ROW+1)


    
	GtkSheet *sheet;

	gchar name[10];
	gint i;
	gint column_width,char_width;

  int x,y,width,height;
  
	
  if(rw==NULL)
  {
      printf("Warning build_register_viewer(%x)\n",(unsigned int)rw);
      return;
  }

	
  window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

  ((GUI_Object*)rw)->window=window;

  gtk_signal_connect (GTK_OBJECT (window), "destroy",
		      GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
  //GTK_SIGNAL_FUNC (quit), NULL);

  main_vbox=gtk_vbox_new(FALSE,1);
  gtk_container_set_border_width(GTK_CONTAINER(main_vbox),0); 
  gtk_container_add(GTK_CONTAINER(window), main_vbox);
  gtk_widget_show(main_vbox);

    if(rw->type==REGISTER_RAM)
  {
      register_sheet=gtk_sheet_new(1,MAXCOLS,"gpsim Register Viewer [RAM]");
      gtk_window_set_title(GTK_WINDOW(window), "register viewer [RAM]");
      // Add a status bar
      StatusBar_create(main_vbox,gp->status_bar);
  }
  else
  {
      register_sheet=gtk_sheet_new(1,MAXCOLS,"gpsim Register Viewer [EEPROM]");
      gtk_window_set_title(GTK_WINDOW(window), "register viewer [EEPROM]");
  }
    
    GTK_WIDGET_UNSET_FLAGS(register_sheet,GTK_CAN_DEFAULT);
    
  rw->register_sheet = GTK_SHEET(register_sheet);

    /* create popupmenu */
    rw->popup_menu=build_menu(sheet,rw);

  build_entry_bar(main_vbox, rw);

  width=((GUI_Object*)rw)->width;
  height=((GUI_Object*)rw)->height;
  x=((GUI_Object*)rw)->x;
  y=((GUI_Object*)rw)->y;
  gtk_window_set_default_size(GTK_WINDOW(rw->gui_obj.window), width,height);
  gtk_widget_set_uposition(GTK_WIDGET(rw->gui_obj.window),x,y);


  gtk_signal_connect(GTK_OBJECT (window), "delete_event",
		     GTK_SIGNAL_FUNC(delete_event), rw);

  scrolled_window=gtk_scrolled_window_new(NULL, NULL);

  gtk_container_add(GTK_CONTAINER(scrolled_window), register_sheet);
  
  GTK_SHEET_SET_FLAGS(register_sheet, GTK_SHEET_CLIP_TEXT);

  gtk_widget_show(register_sheet);

  gtk_widget_show(scrolled_window);

  gtk_box_pack_start(GTK_BOX(main_vbox), scrolled_window, TRUE, TRUE, 0);

  gtk_signal_connect(GTK_OBJECT(gtk_sheet_get_entry(GTK_SHEET(register_sheet))),
		     "changed", (GtkSignalFunc)show_entry, rw);

  gtk_signal_connect(GTK_OBJECT(register_sheet),
		     "activate", (GtkSignalFunc)activate_sheet_cell,
		     (gpointer) rw);

  gtk_signal_connect(GTK_OBJECT(rw->entry),
		     "changed", (GtkSignalFunc)show_sheet_entry, rw);

  gtk_signal_connect(GTK_OBJECT(rw->entry),
		     "activate", (GtkSignalFunc)activate_sheet_entry,
		     rw);

//  gtk_widget_realize(window);

                         	char_width = gdk_string_width (normal_style->font,"9");
	column_width = 3 * char_width + 6;

	sheet=rw->register_sheet;

	for(i=0; i<sheet->maxcol; i++){
	  //sprintf(name,"0x%02x",i);
		sprintf(name,"%02x",i);
		gtk_sheet_column_button_add_label(sheet, i, name);
		gtk_sheet_set_column_title(sheet, i, name);
		gtk_sheet_set_column_width (sheet, i, column_width);
	}

	sprintf(name,"ASCII");
	gtk_sheet_column_button_add_label(sheet, i, name);
	gtk_sheet_set_column_title(sheet, i, name);
	gtk_sheet_set_column_width (sheet, i, REGISTERS_PER_ROW*char_width + 6);

	gtk_sheet_set_row_titles_width(sheet, column_width);

	
	gtk_signal_connect(GTK_OBJECT(sheet),
			   "key_press_event",
			   (GtkSignalFunc) clipboard_handler, 
			   NULL);

	gtk_signal_connect(GTK_OBJECT(sheet),
			   "resize_range",
			   (GtkSignalFunc) resize_handler, 
			   rw);

	gtk_signal_connect(GTK_OBJECT(sheet),
			   "move_range",
			   (GtkSignalFunc) move_handler, 
			   rw);
	
	gtk_signal_connect(GTK_OBJECT(sheet),
			   "button_press_event",
			   (GtkSignalFunc) do_popup, 
			   rw);

	gtk_signal_connect(GTK_OBJECT(sheet),
			   "set_cell",
			   (GtkSignalFunc) parse_numbers,
			   rw);
	
//  rw->gui_obj.window = window;
	
	gtk_signal_connect_after(GTK_OBJECT(rw->gui_obj.window), "configure_event",
				 GTK_SIGNAL_FUNC(gui_object_configure_event),rw);


  gtk_widget_show (window);

  gtk_widget_grab_default(rw->location);
  
  rw->gui_obj.enabled=1;
  
  for(i=0;i<MAX_REGISTERS;i++)
      rw->registers[i]=NULL;
  
  if(rw->processor)
  {
      RegWindow_new_processor(rw, ((GUI_Object*)rw)->gp);
  }
}
示例#2
0
/* [gtk thread] */
static GtkWidget *build_menu_item(ALLEGRO_MENU_ITEM *aitem)
{
   GtkWidget *gitem;
   
   if (!aitem->caption) {
      gitem = gtk_separator_menu_item_new();
   }
   else {
      ALLEGRO_USTR *caption = al_ustr_dup(aitem->caption);
      
      /* convert & to _ using unprintable chars as placeholders */
      al_ustr_find_replace_cstr(caption, 0, "_", "\x01\x02");
      al_ustr_find_replace_cstr(caption, 0, "&", "_");
      al_ustr_find_replace_cstr(caption, 0, "\x01\x02", "__");
      
      if (aitem->flags & ALLEGRO_MENU_ITEM_CHECKBOX) {
         gitem = gtk_check_menu_item_new_with_mnemonic(al_cstr(caption));
         gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gitem), aitem->flags & ALLEGRO_MENU_ITEM_CHECKED);
         g_signal_connect_swapped (gitem, "toggled", G_CALLBACK(checkbox_on_toggle),
            (gpointer) aitem);
      }
      else {
         /* always create an image menu item, in case the user ever sets an icon */
         gitem = gtk_image_menu_item_new_with_mnemonic(al_cstr(caption));
         
         if (aitem->icon) {
            const int w = al_get_bitmap_width(aitem->icon), h = al_get_bitmap_height(aitem->icon);
            const int stride = w * 4;
            int x, y, i;
            GdkPixbuf *pixbuf;
            uint8_t *data = al_malloc(stride * h);
            
            if (data) {
               for (y = 0, i = 0; y < h; ++y) {
                  for (x = 0; x < w; ++x, i += 4) {
                     al_unmap_rgba(al_get_pixel(aitem->icon, x, y),
                        &data[i],
                        &data[i + 1],
                        &data[i + 2],
                        &data[i + 3]
                     );
                  }
               }
               
               pixbuf = gdk_pixbuf_new_from_data (data, GDK_COLORSPACE_RGB, TRUE, 8,
                  w, h, stride, destroy_pixbuf, NULL);
               
               aitem->extra2 = gtk_image_new_from_pixbuf(pixbuf);
               
               gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(gitem), aitem->extra2);
               
               /* Subtract the main reference. the image still holds a reference, so the
                * pixbuf won't be destroyed until the image itself is. */
               g_object_unref(pixbuf);
            }
         }
      }
      
      al_ustr_free(caption);
      
      gtk_widget_set_sensitive(gitem, !(aitem->flags & ALLEGRO_MENU_ITEM_DISABLED));
      
      aitem->extra1 = gitem;
      
      if (aitem->popup) {
         GtkWidget *gsubmenu = gtk_menu_new();
         build_menu(gsubmenu, aitem->popup);
         aitem->popup->extra1 = gsubmenu;
         gtk_widget_show(gsubmenu);
         gtk_menu_item_set_submenu(GTK_MENU_ITEM(gitem), gsubmenu);
      }
      else if (aitem->id) {
         g_signal_connect_swapped (gitem, "activate",
            G_CALLBACK(menuitem_response), (gpointer) aitem);
      }
   }
      
   gtk_widget_show(gitem);
   
   return gitem;
}
示例#3
0
void init_graphics (char *window_name) {

 /* Open the toplevel window, get the colors, 2 graphics  *
  * contexts, load a font, and set up the toplevel window *
  * Calls build_menu to set up the menu.                  */

 char *display_name = NULL;
 int x, y;                                   /* window position */
 unsigned int border_width = 2;  /* ignored by OpenWindows */
 XTextProperty windowName;

/* X Windows' names for my colours. */
 char *cnames[NUM_COLOR] = {"white", "black", "grey55", "grey75", "blue", 
        "green", "yellow", "cyan", "red", "RGBi:0.0/0.5/0.0" };

 XColor exact_def;
 Colormap cmap;
 int i;
 unsigned long valuemask = 0; /* ignore XGCvalues and use defaults */
 XGCValues values;
 XEvent event;


 disp_type = SCREEN;         /* Graphics go to screen, not ps */

 for (i=0;i<=MAX_FONT_SIZE;i++) 
    font_is_loaded[i] = 0;     /* No fonts loaded yet. */

 /* connect to X server */
        /* connect to X server */
 if ( (display=XOpenDisplay(display_name)) == NULL )
 {
     fprintf( stderr, "Cannot connect to X server %s\n",
                          XDisplayName(display_name));
     exit( -1 );
 }

 /* get screen size from display structure macro */
 screen_num = DefaultScreen(display);
 display_width = DisplayWidth(display, screen_num);
 display_height = DisplayHeight(display, screen_num);

 x = y = 0;
        
 top_width = 2*display_width/3;
 top_height = 4*display_height/5;
 
 cmap = DefaultColormap(display, screen_num);
 private_cmap = None;

 for (i=0;i<NUM_COLOR;i++) {
    if (!XParseColor(display,cmap,cnames[i],&exact_def)) {
       fprintf(stderr, "Color name %s not in database", cnames[i]);
       exit(-1);
    }
    if (!XAllocColor(display, cmap, &exact_def)) {
       fprintf(stderr, "Couldn't allocate color %s.\n",cnames[i]); 

       if (private_cmap == None) {
          fprintf(stderr, "Will try to allocate a private colourmap.\n");
          fprintf(stderr, "Colours will only display correctly when your "
                          "cursor is in the graphics window.\n"
                          "Exit other colour applications and rerun this "
                          "program if you don't like that.\n\n");
                    
          private_cmap = XCopyColormapAndFree (display, cmap);
          cmap = private_cmap;
          if (!XAllocColor (display, cmap, &exact_def)) {
             fprintf (stderr, "Couldn't allocate color %s as private.\n",
                 cnames[i]);
             exit (1);
          }
       }

       else {
          fprintf (stderr, "Couldn't allocate color %s as private.\n",
              cnames[i]);
          exit (1);
       }
    }
    colors[i] = exact_def.pixel;
 }

 toplevel = XCreateSimpleWindow(display,RootWindow(display,screen_num),
          x, y, top_width, top_height, border_width, colors[BLACK],
          colors[WHITE]);  

 if (private_cmap != None) 
     XSetWindowColormap (display, toplevel, private_cmap);

 /* hints stuff deleted. */

 XSelectInput (display, toplevel, ExposureMask | StructureNotifyMask |
       ButtonPressMask);
 

 /* Create default Graphics Contexts.  valuemask = 0 -> use defaults. */
 gc = XCreateGC(display, toplevel, valuemask, &values);
 gc_menus = XCreateGC(display, toplevel, valuemask, &values);

 /* Create XOR graphics context for Rubber Banding */
 values.function = GXxor;   
 values.foreground = colors[BLACK];
 gcxor = XCreateGC(display, toplevel, (GCFunction | GCForeground),
       &values);
 
 /* specify font for menus.  */
 load_font(menu_font_size);
 font_is_loaded[menu_font_size] = 1;
 XSetFont(display, gc_menus, font_info[menu_font_size]->fid);

/* Set drawing defaults for user-drawable area.  Use whatever the *
 * initial values of the current stuff was set to.                */
 force_setfontsize(currentfontsize);
 force_setcolor (currentcolor);
 force_setlinestyle (currentlinestyle);
 force_setlinewidth (currentlinewidth);
 
 XStringListToTextProperty(&window_name, 1, &windowName);
 XSetWMName (display, toplevel, &windowName);
/* XSetWMIconName (display, toplevel, &windowName); */

 
 /* set line attributes */
/* XSetLineAttributes(display, gc, line_width, line_style,
           cap_style, join_style); */
 
 /* set dashes */
 /* XSetDashes(display, gc, dash_offset, dash_list, list_length); */

 XMapWindow (display, toplevel);
 build_textarea();
 build_menu();
 
/* The following is completely unnecessary if the user is using the       *
 * interactive (event_loop) graphics.  It waits for the first Expose      *
 * event before returning so that I can tell the window manager has got   *
 * the top-level window up and running.  Thus the user can start drawing  *
 * into this window immediately, and there's no danger of the window not  *
 * being ready and output being lost.                                     */

 XPeekIfEvent (display, &event, test_if_exposed, NULL); 
}
示例#4
0
GtkWidget* XNavGtk::build_menu(GtkWidget* Parent, int MenuType,
    const char* MenuTitle, void* MenuUserData,
    void (*Callback)(GtkWidget*, gpointer), void* CallbackData,
    xmenu_sMenuItem* Items, int* idx)
{
  GtkWidget *Menu, *W;
  int i;
  unsigned int Level;

  Menu = (GtkWidget*)g_object_new(GTK_TYPE_MENU, NULL);
  g_object_set_data((GObject*)Menu, "userdata", (gpointer)MenuUserData);

  Level = Items[*idx].Level;

  for (; Items[*idx].Level != 0 && Items[*idx].Level >= Level; (*idx)++) {
    switch (Items[*idx].Item) {
    case xmenu_eMenuItem_Ref: {
      if (MenuType == MENU_OPTION) {
        printf("You can't have submenus from option menu items.");
        return NULL;
      }

      i = *idx;
      GtkWidget* sub = gtk_menu_item_new_with_label(
          CoWowGtk::translate_utf8(Items[*idx].Name));
      (*idx)++;
      W = build_menu(Menu, MENU_PULLDOWN, Lng::translate(Items[i].Name),
          MenuUserData, Callback, CallbackData, Items, idx);
      (*idx)--;
      gtk_menu_item_set_submenu(GTK_MENU_ITEM(sub), GTK_WIDGET(W));
      gtk_menu_shell_append(GTK_MENU_SHELL(Menu), sub);
      gtk_widget_show(sub);
      break;
    }
    case xmenu_eMenuItem_Cascade: {
      if (MenuType == MENU_OPTION) {
        printf("You can't have submenus from option menu items.");
        return NULL;
      }

      // Check that the Cascade contains any pushbuttons
      int found = 0;
      unsigned int cascade_level = Items[*idx].Level;
      int cidx;
      for (cidx = *idx + 1;
           Items[cidx].Level != 0 && Items[cidx].Level > cascade_level;
           cidx++) {
        if (Items[cidx].Item == xmenu_eMenuItem_Ref
            || Items[cidx].Item == xmenu_eMenuItem_Button) {
          found = 1;
          break;
        }
      }
      if (found) {
        i = *idx;
        GtkWidget* sub = gtk_menu_item_new_with_label(
            CoWowGtk::translate_utf8(Items[*idx].Name));
        (*idx)++;
        W = build_menu(Menu, MENU_PULLDOWN, Lng::translate(Items[i].Name),
            MenuUserData, Callback, CallbackData, Items, idx);
        (*idx)--;
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(sub), GTK_WIDGET(W));
        gtk_menu_shell_append(GTK_MENU_SHELL(Menu), sub);
        gtk_widget_show(sub);
      } else {
        *idx = cidx - 1;
      }
      break;
    }
    case xmenu_eMenuItem_Separator:
      // Separator
      W = gtk_separator_menu_item_new();
      gtk_menu_shell_append(GTK_MENU_SHELL(Menu), W);
      gtk_widget_show(W);
      break;
    case xmenu_eMenuItem_Button:
      // Pushbutton
      W = gtk_menu_item_new_with_label(
          CoWowGtk::translate_utf8(Items[*idx].Name));
      gtk_widget_set_sensitive(W, Items[*idx].Flags.f.Sensitive ? TRUE : FALSE);
      g_object_set_data((GObject*)W, "userdata", (gpointer)((long int)*idx));
      if (Callback)
        g_signal_connect(W, "activate", G_CALLBACK(Callback), CallbackData);
      gtk_menu_shell_append(GTK_MENU_SHELL(Menu), W);
      gtk_widget_show(W);
      break;
    default:;
    }
  }

  return Menu;
}
示例#5
0
int main(int argc, char **argv) {

    /* args parser */
    Parameters::config p_c {40, 90, 3, 1, 13, 5, 3, 2, Parameters::lang_us};
    Parameters p(argc, argv, p_c);
    build_menu(&p);
    try {
        p.parse_params();
    }
    /* catch errors on parameters */
    catch(const std::exception& e) {
        std::cerr << "error :" << std::endl << "   " << e.what() << std::endl;
        std::cerr << "You can use \"--help\" to get more help." << std::endl;
        return 0;
    }
    /* stops if no arg or help requested */
    if(p.is_spec("help") || argc==1) {
        p.print_help();
        return 0;
    }
    /* or if license is needed */
    else if(p.is_spec("license")) {
        p.print_license();
        return 0;
    }
    /* checks incompatibility among parameters */
    if(!check_errors(&p)) {
        std::cerr << "You can use \"--help\" to get more help." << std::endl;
        return 0;
    }
    
    /* add slash to MNIST folder */
    std::string mnist_folder = "";
    if(p.is_spec("mnist")) {
        mnist_folder = p.str_val("mnist");
        if(mnist_folder.length()>0 && mnist_folder.at(mnist_folder.length()-1)!='/') mnist_folder.push_back('/');
    }
    
    /* initializations */
    srand(static_cast<unsigned int>(time(NULL)));
    
    /* DigitScanner */
    DigitScanner<float> dgs;
    if(p.is_spec("hlayers")) {
        if(p.num_val<int>("hlayers", 1)==0)      dgs.set_layers({784, 10});
        else if(p.num_val<int>("hlayers", 2)==0) dgs.set_layers({784, p.num_val<int>("hlayers", 1), 10});
        else                                     dgs.set_layers({784, p.num_val<int>("hlayers", 1), p.num_val<int>("hlayers", 2), 10});
    }
    else if(p.is_spec("fnnin")) { if(!dgs.load(p.str_val("fnnin"))) return 0; }
    
    /* actions */
    if(p.is_spec("train")) { dgs.train(mnist_folder, p.num_val<int>("train", 1), p.num_val<int>("train", 2), p.num_val<int>("train", 3), p.num_val<int>("train", 4), p.num_val<double>("eta"), p.num_val<double>("alpha"), p.num_val<int>("threads")); }
    if(p.is_spec("test"))  { dgs.test(mnist_folder, p.num_val<int>("test", 1), p.num_val<int>("test", 2), p.num_val<int>("threads")); }

    /* save */
    if(p.is_spec("fnnout")) { dgs.save(p.str_val("fnnout")); }
    
    /* gui */
    if(p.is_spec("gui")) {
        Window *w = new Window(280, 280);
        w->set_dgs(&dgs);
        w->set_scene_width(280);
        w->init();
        w->launch();
    }
    
    return 0;
    
}
示例#6
0
Widget XNavMotif::build_menu( Widget Parent,
			      int   MenuType,
			      const char *MenuTitle,
			      void *MenuUserData,
			      void (*Callback)( Widget, XNav *, XmAnyCallbackStruct *),
			      void *CallbackData,
			      xmenu_sMenuItem *Items,
			      int *idx)
{
  Widget Menu, Cascade, W;
  int i;
  unsigned int Level;
  XmString Str;
  WidgetClass Class;
  Arg ArgList[5]; 
  XmFontList fontlist;
  XFontStruct *font;
  XmFontListEntry fontentry;

  // Set default fontlist
  font = XLoadQueryFont( flow_Display(Parent),
  	      "-*-Helvetica-Bold-R-Normal--12-*-*-*-P-*-ISO8859-1");
  fontentry = XmFontListEntryCreate( (char*) "tag1", XmFONT_IS_FONT, font);
  fontlist = XmFontListAppendEntry( NULL, fontentry);
  XtFree( (char *)fontentry);

  i = 0;
  XtSetArg(ArgList[i], XmNuserData, MenuUserData); i++;
  XtSetArg(ArgList[i], XmNbuttonFontList, fontlist); i++;
  XtSetArg(ArgList[i], XmNlabelFontList, fontlist); i++;
  if (MenuType == MENU_PULLDOWN || MenuType == MENU_OPTION)
    Menu = XmCreatePulldownMenu(Parent, (char*) "_pulldown", ArgList, i);
  else if (MenuType == MENU_POPUP)
    Menu = XmCreatePopupMenu(Parent, (char*) "_popup", ArgList, i);  
  else  {
    XtWarning("Invalid menu type passed to BuildMenu().");
    return NULL;
  }

  if (MenuType == MENU_PULLDOWN) {
    Str = XmStringCreateSimple((char*) MenuTitle);	
    Cascade = XtVaCreateManagedWidget(MenuTitle,
	    xmCascadeButtonGadgetClass, Parent,
	    XmNsubMenuId,   Menu,
	    XmNlabelString, Str,
	    NULL);
    XmStringFree(Str);
  } 
  else if (MenuType == MENU_OPTION) {
    Str = XmStringCreateSimple((char*) MenuTitle);
    XtSetArg(ArgList[0], XmNsubMenuId, Menu);
    XtSetArg(ArgList[1], XmNlabelString, Str);
    Cascade = XmCreateOptionMenu(Parent, (char*) MenuTitle, ArgList, 2);
    XmStringFree(Str);
  }

  XmFontListFree( fontlist);

  Level = Items[*idx].Level;

  for (; Items[*idx].Level != 0 && Items[*idx].Level >= Level; (*idx)++) {
    if (Items[*idx].Item == xmenu_eMenuItem_Cascade ||
      Items[*idx].Item == xmenu_eMenuItem_Ref) {
      if (MenuType == MENU_OPTION) {
        XtWarning("You can't have submenus from option menu items.");
        return NULL;
      } 
      else {
        i = *idx;
        (*idx)++;	
        build_menu(Menu, MENU_PULLDOWN, 
		   Lng::translate( Items[i].Name), MenuUserData, 
		   Callback, CallbackData, Items, idx);
        (*idx)--;
      }
    }
    else {
      if (Items[*idx].Item == xmenu_eMenuItem_Separator)
        Class = xmSeparatorGadgetClass;
      else
        Class = xmPushButtonGadgetClass;
 
      W = XtVaCreateManagedWidget(Lng::translate( Items[*idx].Name), 
		    Class, Menu,
		    XmNuserData, *idx,
		    XmNsensitive, (Boolean)(Items[*idx].Flags.f.Sensitive == 1),
		    NULL);

      if (Callback && Class == xmPushButtonGadgetClass)
        XtAddCallback(W, XmNactivateCallback, (XtCallbackProc) Callback, 
		      (XtPointer) CallbackData);
    }
  }

  return MenuType == MENU_POPUP ? Menu : Cascade;
}
示例#7
0
static void
update_actions (void)
{
  GtkAction                *action;
  WebKitWebBackForwardList *back_forward_list;
  WebKitWebFrame           *frame;

  back_forward_list =
    webkit_web_view_get_back_forward_list (WEBKIT_WEB_VIEW (view));

  /*  update the back button and its menu  */

  action = gtk_ui_manager_get_action (ui_manager,
                                      "/ui/help-browser-popup/back");
  gtk_action_set_sensitive (action,
                            webkit_web_view_can_go_back (WEBKIT_WEB_VIEW (view)));

  if (back_forward_list)
    {
      const GList *list;

      list = webkit_web_back_forward_list_get_back_list_with_limit (back_forward_list,
                                                                    12);
      gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev),
                                     build_menu (list, TRUE));
    }
  else
    {
      gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_prev), NULL);
    }

  /*  update the forward button and its menu  */

  action = gtk_ui_manager_get_action (ui_manager,
                                      "/ui/help-browser-popup/forward");
  gtk_action_set_sensitive (action,
                            webkit_web_view_can_go_forward (WEBKIT_WEB_VIEW (view)));

  if (back_forward_list)
    {
      const GList *list;

      list = webkit_web_back_forward_list_get_forward_list_with_limit (back_forward_list,
                                                                       12);
      gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_next),
                                     build_menu (list, FALSE));
    }
  else
    {
      gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (button_next), NULL);
    }

  /*  update the copy-location action  */
  action = gtk_ui_manager_get_action (ui_manager,
                                      "/ui/help-browser-popup/copy-location");

  frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (view));
  gtk_action_set_sensitive (action, webkit_web_frame_get_uri (frame) != NULL);

  /*  update the show-index action  */
  action = gtk_ui_manager_get_action (ui_manager,
                                      "/ui/help-browser-popup/show-index");
  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
                                gtk_widget_get_visible (sidebar));
}
示例#8
0
int main(int argc, char **argv)
{
	int rc = 0;
	struct cfgdata_t cfg;
	struct params_t params;
	kx_inputs inputs;

	lg = log_open(16);
	log_msg(lg, "%s starting", PACKAGE_STRING);

	initmode = do_init();

	/* Get cmdline parameters */
	params.cfg = &cfg;
	init_cfgdata(&cfg);
	cfg.angle = 0;	/* No rotation by default */
	parse_cmdline(&cfg);

	kxb_ttydev = cfg.ttydev;
	setup_terminal(kxb_ttydev, &kxb_echo_state, 1);
	/* Setup function that will restore terminal when exit() will called */
	atexit(atexit_restore_terminal);

	log_msg(lg, "FB angle is %d, tty is %s", cfg.angle, cfg.ttydev);

#ifdef USE_MACHINE_KERNEL
	machine_kernel = get_machine_kernelpath();	/* FIXME should be passed as arg to get_bootinfo() */
#endif

#ifdef USE_DELAY
	/* extra delay for initializing slow SD/CF */
	sleep(USE_DELAY);
#endif

	int no_ui = 1;	/* UI presence flag */
#ifdef USE_FBMENU
	params.gui = NULL;
	if (no_ui) {
		params.gui = gui_init(cfg.angle);
		if (NULL == params.gui) {
			log_msg(lg, "Can't initialize GUI");
		} else no_ui = 0;
	}
#endif
#ifdef USE_TEXTUI
	FILE *ttyfp;
	params.tui = NULL;
	if (no_ui) {

		if (cfg.ttydev) ttyfp = fopen(cfg.ttydev, "w");
		else ttyfp = stdout;

		params.tui = tui_init(ttyfp);
		if (NULL == params.tui) {
			log_msg(lg, "Can't initialize TUI");
			if (ttyfp != stdout) fclose(ttyfp);
		} else no_ui = 0;
	}
#endif
	if (no_ui) exit(-1); /* Exit if no one UI was initialized */
	
	params.menu = build_menu(&params);
	params.bootcfg = NULL;
	scan_devices(&params);

	if (-1 == fill_menu(&params)) {
		exit(-1);
	}

	/* Collect input devices */
	inputs_init(&inputs, 8);
	inputs_open(&inputs);
	inputs_preprocess(&inputs);

	/* Run main event loop
	 * Return values: <0 - error, >=0 - selected item id */
	rc = do_main_loop(&params, &inputs);

#ifdef USE_FBMENU
	if (params.gui) {
		if (rc < 0) gui_clear(params.gui);
		gui_destroy(params.gui);
	}
#endif
#ifdef USE_TEXTUI
	if (params.tui) {
		tui_destroy(params.tui);
		if (ttyfp != stdout) fclose(ttyfp);
	}
#endif
	inputs_close(&inputs);
	inputs_clean(&inputs);

	log_close(lg);
	lg = NULL;

	/* rc < 0 indicate error */
	if (rc < 0) exit(rc);

	menu_destroy(params.menu, 0);

	if (rc >= A_DEVICES) {
		start_kernel(&params, rc - A_DEVICES);
	}

	/* When we reach this point then some error has occured */
	DPRINTF("We should not reach this point!");
	exit(-1);
}