Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |

# A Motif Dialog

Header

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <qmotifwidget.h>

    class MainWindow : public QMotifWidget
    {
    public:
        MainWindow();

        void showMotifDialog();
        void showQtDialog();
    };

    #endif // MAINWINDOW_H

Implementation:

    #include <qapplication.h>
    #include <qmotif.h>

    #include "mainwindow.h"

    int main( int argc, char **argv )
    {
        XtSetLanguageProc( NULL, NULL, NULL );

        QMotif integrator( "dialog" );
        QApplication app( argc, argv );

        MainWindow *mainwindow = new MainWindow;
        app.setMainWidget( mainwindow );
        mainwindow->show();

        return app.exec();
    }

    #include "mainwindow.h"
    #include "dialog.h"

    #include <Xm/MainW.h>
    #include <Xm/RowColumn.h>
    #include <Xm/CascadeB.h>
    #include <Xm/PushB.h>
    #include <Xm/PushBG.h>
    #include <Xm/SeparatoG.h>
    #include <Xm/Text.h>
    #include <Xm/MessageB.h>
    #include <Xm/Form.h>
    #include <Xm/LabelG.h>

    #include <qapplication.h>

    static void motifDialogCallback( Widget, XtPointer client_data, XtPointer )
    {
        MainWindow *mw = (MainWindow *) client_data;
        mw->showMotifDialog();
    }

    static void qtDialogCallback( Widget, XtPointer client_data, XtPointer )
    {
        MainWindow *mw = (MainWindow *) client_data;
        mw->showQtDialog();
    }

    static void quitCallback( Widget, XtPointer client_data, XtPointer )
    {
        MainWindow *mw = (MainWindow *) client_data;
        mw->close();
    }

    MainWindow::MainWindow()
        : QMotifWidget( 0, xmMainWindowWidgetClass, NULL, 0, "mainwindow" )
    {
        Widget menubar = XmCreateMenuBar( motifWidget(), "menubar", NULL, 0 );
        Widget filemenu = XmCreatePulldownMenu( menubar, "filemenu", NULL, 0 );
        Widget item;

        item = XtVaCreateManagedWidget( "Motif Dialog...",
                                        xmPushButtonGadgetClass, filemenu,
                                        XmNmnemonic, 'C',
                                        NULL );
        XtAddCallback( item, XmNactivateCallback, motifDialogCallback, this );

        item = XtVaCreateManagedWidget( "Qt Dialog...",
                                        xmPushButtonGadgetClass, filemenu,
                                        XmNmnemonic, 'Q',
                                        NULL );
        XtAddCallback( item, XmNactivateCallback, qtDialogCallback, this );

        item = XtVaCreateManagedWidget( "sep",
                                        xmSeparatorGadgetClass, filemenu,
                                        NULL );

        item = XtVaCreateManagedWidget( "Exit",
                                        xmPushButtonGadgetClass, filemenu,
                                        XmNmnemonic, 'x',
                                        NULL );
        XtAddCallback( item, XmNactivateCallback, quitCallback, this );

        XmString str = XmStringCreateLocalized( "File" );
        item = XtVaCreateManagedWidget( "File",
                                        xmCascadeButtonWidgetClass, menubar,
                                        XmNlabelString, str,
                                        XmNmnemonic, 'F',
                                        XmNsubMenuId, filemenu,
                                        NULL );
        XmStringFree( str );

        Arg args[2];
        XtSetArg( args[0], XmNeditMode, XmMULTI_LINE_EDIT );
        Widget texteditor =
            XmCreateScrolledText( motifWidget(), "texteditor",
                                  args, 1 );

        XtManageChild( menubar );
        XtManageChild( texteditor );

        // pick a nice default size
        XtVaSetValues( motifWidget(),
                       XmNwidth, 400,
                       XmNheight, 300,
                       NULL );

        setCaption( tr("QMotif Dialog Example") );

    }

    void MainWindow::showMotifDialog()
    {
        QMotifDialog dialog( this, "custom dialog", TRUE );
        dialog.setCaption( tr("Custom Motif Dialog") );

        Widget form = XmCreateForm( dialog.shell(), "custom motif dialog", NULL, 0 );

        XmString str;
        Arg args[9];

        str = XmStringCreateLocalized( "Close" );
        XtSetArg( args[0], XmNlabelString, str );
        XtSetArg( args[1], XmNshowAsDefault, True );
        XtSetArg( args[2], XmNleftAttachment, XmATTACH_POSITION );
        XtSetArg( args[3], XmNleftPosition, 40 );
        XtSetArg( args[4], XmNrightAttachment, XmATTACH_POSITION );
        XtSetArg( args[5], XmNrightPosition, 60 );
        XtSetArg( args[7], XmNbottomAttachment, XmATTACH_FORM );
        XtSetArg( args[6], XmNtopOffset, 10 );
        XtSetArg( args[8], XmNbottomOffset, 10 );
        Widget button = XmCreatePushButton( form, "Close", args, 9 );
        XmStringFree( str );

        str =
            XmStringCreateLocalized( "This is a custom Motif-based dialog using\n"
                                     "QMotifDialog with a QWidget-based parent." );
        XtSetArg( args[0], XmNlabelString, str );
        XtSetArg( args[1], XmNleftAttachment, XmATTACH_FORM );
        XtSetArg( args[2], XmNrightAttachment, XmATTACH_FORM );
        XtSetArg( args[3], XmNtopAttachment, XmATTACH_FORM );
        XtSetArg( args[4], XmNbottomAttachment, XmATTACH_WIDGET );
        XtSetArg( args[5], XmNbottomWidget, button );
        XtSetArg( args[6], XmNtopOffset, 10 );
        XtSetArg( args[7], XmNbottomOffset, 10 );
        Widget label = XmCreateLabelGadget( form, "label", args, 8 );
        XmStringFree( str );

        XtManageChild( button );
        XtManageChild( label );
        XtManageChild( form );

        XtAddCallback( button, XmNactivateCallback,
                       (XtCallbackProc) QMotifDialog::acceptCallback, &dialog );

        dialog.exec();
    }

    void MainWindow::showQtDialog()
    {
        // custom Qt-based dialog using a Motif-based parent
        CustomDialog customdialog( motifWidget(), "custom dialog", TRUE );
        customdialog.exec();
    }

See also QMotif Support Extension.