コード例 #1
0
ファイル: gtkimagemenuitem.c プロジェクト: raja651/gtk
static void
gtk_image_menu_item_set_property (GObject         *object,
                                  guint            prop_id,
                                  const GValue    *value,
                                  GParamSpec      *pspec)
{
    GtkImageMenuItem *image_menu_item = GTK_IMAGE_MENU_ITEM (object);

    switch (prop_id)
    {
    case PROP_IMAGE:
        gtk_image_menu_item_set_image (image_menu_item, (GtkWidget *) g_value_get_object (value));
        break;
    case PROP_USE_STOCK:
        G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
        gtk_image_menu_item_set_use_stock (image_menu_item, g_value_get_boolean (value));
        G_GNUC_END_IGNORE_DEPRECATIONS;
        break;
    case PROP_ALWAYS_SHOW_IMAGE:
        gtk_image_menu_item_set_always_show_image (image_menu_item, g_value_get_boolean (value));
        break;
    case PROP_ACCEL_GROUP:
        G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
        gtk_image_menu_item_set_accel_group (image_menu_item, g_value_get_object (value));
        G_GNUC_END_IGNORE_DEPRECATIONS;
        break;
    default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
        break;
    }
}
コード例 #2
0
ファイル: Menu.cpp プロジェクト: NikitaSharma28/libamanita
void Menu::create(Window *wnd,uint32_t st) {
	int i,n;
	char str[257];
#ifdef USE_WIN32
	char buf[5];
#ifdef USE_WCHAR
	wchar_t wstr[257];
#endif
#endif
	MenuItem *m;
#ifdef USE_GTK
	GtkAccelGroup *accel_group = gtk_accel_group_new();
	gtk_window_add_accel_group(GTK_WINDOW((GtkWindow *)((Window *)parent)->wnd),accel_group);

	component = (Component)gtk_menu_bar_new();
#endif

#ifdef USE_WIN32
	component = (Component)CreateMenu();
#endif

	window = wnd;

	for(i=0,m=items; m && i<nitems; ++i) {
*str = '\0';
for(n=0; n<m->lvl; ++n) strcat(str,"--> ");
strcat(str,m->name);
debug_output("Menu::create(menu: index=%d,id='%d',parent='%d',child='%d',menuitem='%s')\n",m->index,m->id,m->parent? m->parent->id : -1,m->child? m->child->id : -1,str);

#ifdef USE_GTK
		if(m->id==-1) {
			if(m->parent) {
				m->item = gtk_separator_menu_item_new();
				gtk_menu_shell_append(GTK_MENU_SHELL((GtkWidget *)m->parent->submenu),m->item);
			}
		} else {
			m->item = gtk_image_menu_item_new_with_label(m->name);
			if(m->icon)
				gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(m->item),GTK_WIDGET(gtk_image_new_from_stock(m->icon,GTK_ICON_SIZE_MENU)));
			if(!m->sensitive) gtk_widget_set_sensitive(m->item,false);
			if(m->acc!=-1) {
				gtk_image_menu_item_set_accel_group(GTK_IMAGE_MENU_ITEM(m->item),accel_group);
				gtk_widget_add_accelerator(m->item,"activate",accel_group,m->acc,(GdkModifierType)m->acc_mod,GTK_ACCEL_VISIBLE);
			}
			if(m->child) {
				m->submenu = (Component)gtk_menu_new();
				gtk_menu_item_set_submenu(GTK_MENU_ITEM(m->item),m->submenu);
			}
			if(m->parent) {
				gtk_menu_shell_append(GTK_MENU_SHELL(m->parent->submenu),m->item);
				if(!m->child) {
debug_output("Menu::create(g_signal_connect: %s - %p)\n",m->name,m);
					if(event_handler) g_signal_connect(G_OBJECT(m->item),"activate",G_CALLBACK(menuitem_callback),(gpointer)m);
				}
			} else {
				gtk_menu_shell_append(GTK_MENU_SHELL((GtkWidget *)component),m->item);
			}
		}
#endif

#ifdef USE_WIN32
		if(m->id==-1) {
			if(m->parent)
				AppendMenu((HMENU)m->parent->submenu,MF_SEPARATOR,0,0);
		} else {
			strcpy(str,m->name);
			if(m->acc!=-1) {
				strcat(str,"\t");
				if((m->acc_mod&KEY_CONTROL)) strcat(str,"Ctrl-");
				if((m->acc_mod&KEY_ALT)) strcat(str,"Alt-");
				if((m->acc_mod&KEY_SHIFT)) strcat(str,"Shift-");
				if(m->acc>=KEY_a && m->acc<=KEY_z) sprintf(buf,"%c",m->acc);
				else if(m->acc>=KEY_F1 && m->acc<=KEY_F12) sprintf(buf,"F%d",m->acc+1-KEY_F1);
				strcat(str,buf);
			}
			if(m->child) {
				m->submenu = (Component)CreatePopupMenu();
#ifdef USE_WCHAR
				char2w(wstr,str,256);
debug_output("Menu::create(m: %p, wstr: %ls)\n",m,wstr);
				AppendMenu((HMENU)(m->parent? m->parent->submenu : component),MF_STRING|MF_POPUP,(UINT)m->submenu,wstr);
#else
				AppendMenu((HMENU)(m->parent? m->parent->submenu : component),MF_STRING|MF_POPUP,(UINT)m->submenu,str);
#endif
			} else if(m->parent) {
#ifdef USE_WCHAR
				char2w(wstr,str,256);
debug_output("Menu::create(m: %p, parent: %p, submenu: %p, wstr: %ls)\n",m,m->parent,m->parent? m->parent->submenu : 0,wstr);
				AppendMenu((HMENU)m->parent->submenu,MF_STRING,WIDGET_MAKE_ID(WIDGET_MENU,m->index),wstr);
#else
				AppendMenu((HMENU)m->parent->submenu,MF_STRING,WIDGET_MAKE_ID(WIDGET_MENU,m->index),str);
#endif
			}
//			if(!m->sensitive) gtk_widget_set_sensitive(m->item,false);
//			if(m->acc!=-1) {
//				gtk_image_menu_item_set_accel_group(GTK_IMAGE_MENU_ITEM(m->item),accel_group);
//				gtk_widget_add_accelerator(m->item,"activate",accel_group,m->acc,(GdkModifierType)m->acc_mod,GTK_ACCEL_VISIBLE);
//			}
		}
#endif

		if(i==nitems-1) break;
		if(m->child) m = m->child;
		else if(items[m->index+1].parent==m->parent || m->parent) m = &items[m->index+1];
		else break;
	}

#ifdef USE_WIN32
	SetMenu((HWND)((Window *)parent)->component,(HMENU)component);
#endif
}