// Create menubar bool wxMenuBar::CreateMenuBar(wxFrame* parent) { m_parent = parent; // bleach... override it! PreCreation(); m_parent = NULL; if (m_mainWidget) { XtVaSetValues((Widget) parent->GetMainWidget(), XmNmenuBar, (Widget) m_mainWidget, NULL); /* if (!XtIsManaged((Widget) m_mainWidget)) XtManageChild((Widget) m_mainWidget); */ XtMapWidget((Widget) m_mainWidget); return true; } Widget menuBarW = XmCreateMenuBar ((Widget) parent->GetMainWidget(), wxMOTIF_STR("MenuBar"), NULL, 0); m_mainWidget = (WXWidget) menuBarW; size_t menuCount = GetMenuCount(); for (size_t i = 0; i < menuCount; i++) { wxMenu *menu = GetMenu(i); wxString title(m_titles[i]); menu->SetButtonWidget(menu->CreateMenu (this, menuBarW, menu, i, title, true)); if (strcmp (wxStripMenuCodes(title), "Help") == 0) XtVaSetValues ((Widget) menuBarW, XmNmenuHelpWidget, (Widget) menu->GetButtonWidget(), NULL); // tear off menu support #if (XmVersion >= 1002) if ( menu->IsTearOff() ) { XtVaSetValues(GetWidget(menu), XmNtearOffModel, XmTEAR_OFF_ENABLED, NULL); Widget tearOff = XmGetTearOffControl(GetWidget(menu)); wxDoChangeForegroundColour((Widget) tearOff, m_foregroundColour); wxDoChangeBackgroundColour((Widget) tearOff, m_backgroundColour, true); } #endif } PostCreation(); XtVaSetValues((Widget) parent->GetMainWidget(), XmNmenuBar, (Widget) m_mainWidget, NULL); XtRealizeWidget ((Widget) menuBarW); XtManageChild ((Widget) menuBarW); SetMenuBarFrame(parent); return true; }
int main(int argc, char **argv) { /* Install converter to make the command line indicated above work */ XmRepTypeInstallTearOffModelConverter(); /* Toplevel and Menu Bar */ toplevel = XtVaAppInitialize(&app_context, "test50", NULL, 0, &argc, argv, fallback, NULL); menubar = XmCreateMenuBar(toplevel, "menubar", NULL, 0); { XmRowColumnPart *rc = &((XmRowColumnWidget)menubar)->row_column; rc->ParentShell = NULL; rc->tear_off_focus_item = NULL; } /* First Menu */ pane1 = XmCreatePulldownMenu(menubar, "pane1", NULL, 0); { XmRowColumnPart *rc = &((XmRowColumnWidget)pane1)->row_column; rc->ParentShell = NULL; rc->tear_off_focus_item = NULL; } /* XtAddCallback(pane1, XmNmapCallback, (void *)GenericCallback, (XtPointer)__LINE__); XtAddCallback(pane1, XmNtearOffMenuActivateCallback, (void *)GenericCallback, (XtPointer)__LINE__); XtAddCallback(pane1, XmNtearOffMenuDeactivateCallback, (void *)GenericCallback, (XtPointer)__LINE__); XtAddCallback(pane1, XmNunmapCallback, (void *)GenericCallback, (XtPointer)__LINE__); XtAddCallback(XtParent(pane1), XmNpopupCallback, (void *)GenericCallback, (XtPointer)__LINE__); XtAddCallback(XtParent(pane1), XmNpopdownCallback, (void *)GenericCallback, (XtPointer)__LINE__); */ pane1_tear_off = XmGetTearOffControl(pane1); cascade1 = XtVaCreateManagedWidget("cascade1", xmCascadeButtonWidgetClass, menubar, XmNsubMenuId, pane1, NULL); /* XtAddCallback(cascade1, XmNactivateCallback, (void *)GenericCallback, (XtPointer)__LINE__); XtAddCallback(cascade1, XmNcascadingCallback, (void *)GenericCallback, (XtPointer)__LINE__); */ button1 = XtVaCreateManagedWidget("button1", xmPushButtonWidgetClass, pane1, NULL); XtManageChild(menubar); XtRealizeWidget(toplevel); LessTifTestWaitForIt(toplevel); printf("%7s %17s %15s %9s %11s %11s %11s %11s %17s %8s %11s %11s %s\n", "widget", "parent", "type", "arm", "cascadeBtn", "mem", "last", "popup", "shell", "torn", "to_last", "focus", "\n"); Report(); LessTifTestBtn1Down(cascade1); Report(); LessTifTestBtn1Up(pane1_tear_off); Report(); /* XtCallActionProc(XtParent(pane1_tear_off), "MenuEscape", NULL, NULL, 0); Report(); */ LessTifTestMainLoop(toplevel); exit(0); }