Motif - c ++ - строка меню с двумя типами кнопок и обратным вызовом - PullRequest
0 голосов
/ 04 августа 2020

Я работаю над проектом, который должен переводить ввод пользователя, но проблема не в этом. На самом деле я новичок в libmotif и хочу, чтобы кнопка переключения выбирала способ перевода (с французского на итальянский или с итальянского на французский). Поэтому у меня уже есть каскадная кнопка в этой строке меню, и я получил это предупреждение: Предупреждение: Имя: main_list Класс: XmRowColumn Попытка добавить неправильный дочерний тип к однородному виджету RowColumn

Предупреждение: не удается найти список обратных вызовов в XtAddCallback

Более того, могу ли я поставить переключатель в параметр другой функции, чтобы посмотреть его состояние?

//Création de la fenêtre principal
Widget main_window = XtVaCreateManagedWidget("main_window", xmMainWindowWidgetClass, top_widget, NULL) ;

//Menu
Widget menu_bar = XmCreateMenuBar(main_window, (String) "main_list", NULL, 0);
XtManageChild(menu_bar);
Widget quit = XtVaCreateManagedWidget("Quit", xmCascadeButtonWidgetClass, menu_bar,NULL);

Widget toggle = XtVaCreateManagedWidget("Fr vers It", xmToggleButtonWidgetClass, menu_bar, NULL);
//Callbacks
XtAddCallback(quit, XmNactivateCallback, quit_call, NULL);
XtAddCallback(toggle,XmNactivateCallback, toggle_call, NULL);

1 Ответ

0 голосов
/ 05 августа 2020

К строке меню можно прикрепить только CascadeButton или CascadeButtonGadget. Вы не можете поместить на него кнопку-переключатель. Вы можете создать PullDown и прикрепить к нему кнопку Toggle

#include <Xm/RowColumn.h>
#include <Xm/MainW.h>
#include <Xm/CascadeB.h>
#include <Xm/SeparatoG.h>
#include <Xm/PushBG.h>
#include <Xm/ToggleBG.h>

main(argc, argv)
int argc;
char *argv[];
{
    Widget toplevel, MainWindow, menuBar, FilePullDown;
    XmString    label_str;
    XtAppContext app;

    XtSetLanguageProc (NULL, NULL, NULL);

    toplevel = XtVaAppInitialize (&app, "Program", NULL, 0,
        &argc, argv, NULL, NULL);

    MainWindow = XtVaCreateManagedWidget ("mainWindow",
        xmMainWindowWidgetClass, toplevel,
        XmNscrollingPolicy,  XmAUTOMATIC,
        NULL);

    menuBar = XmCreateMenuBar (MainWindow, "menuBar", NULL, 0); 


    FilePullDown = XmCreatePulldownMenu (menuBar, "Language", NULL, 0);


    label_str = XmStringCreateLocalized ("Language or Exit");
    XtVaCreateManagedWidget ("File", 
        xmCascadeButtonWidgetClass, menuBar,
        XmNlabelString,  label_str,
        XmNmnemonic,    'F',
        XmNsubMenuId,    FilePullDown,
        NULL);
    XmStringFree (label_str); 

    /* Now add the menu items */
    XtVaCreateManagedWidget ("Italian or French",
        xmToggleButtonGadgetClass, FilePullDown, NULL);

    XtVaCreateManagedWidget ("separator",
        xmSeparatorGadgetClass, FilePullDown, NULL);

    XtVaCreateManagedWidget ("Exit",
        xmPushButtonGadgetClass, FilePullDown, NULL);

    XtManageChild (menuBar);

    XtRealizeWidget (toplevel);
    XtAppMainLoop (app);
}
...