By activating the last created toggle-button (MTButtonActivate(tb)), the 'label' LABEL changes its text before the SHELL (the window) is realized. This is useful to force the window size to a suitable width.
/* C version */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "mgui.h" #define N_TOGGLE_BUTTON 4 MOBJECT label; int toggle_status[N_TOGGLE_BUTTON]; void ExitCB(MOBJECT obj, void *a, void *b) { MShellDestroy((MOBJECT)b); MGUITerm(); exit(0); } void ToggleButtonCB(MOBJECT rb, MVALUE status, void *ii) { char str[128]; int i; toggle_status[(int)ii] = (int)status; strcpy(str, "Button status: "); for (i=0; i < N_TOGGLE_BUTTON; i++) strcat(str, (toggle_status[i] ? " ON" : " OFF")); MObjectSetText(label, str); } void MGUIMain(int argc, char **argv) { int ii; char str[16]; MOBJECT shell, rform, pb, tb; shell = MCreateShell("Sample 6", SF_NO_CLOSE); rform = MCreateRowForm(shell); for (ii=0; ii < N_TOGGLE_BUTTON; ii++) { sprintf(str, "Toggle %d", ii); tb = MCreateTButton(rform, str, HELV_L_FONT); MTButtonSetCallback(tb, ToggleButtonCB, (void *)ii); } label = MCreateLabel(rform, "", DEFAULT_FONT); MTButtonActivate(tb); pb = MCreatePButton(shell, "Quit", TIMES_L_FONT); MPButtonSetCallback(pb, ExitCB, shell); MShellRealize(shell); MMainLoop(); }
// C++ version
#include <stdio.h> #include <string.h> #include "mguipp.h" class CaAppl : public CmAppl { public: void start(int, char **); }; CaAppl appInstance; class CaMainWindow : public CmShell { CmLabel *label; int toggle_status[4]; public: CaMainWindow(const char *title, int flags); void toggleButton1CB(int); void toggleButton2CB(int); void toggleButton3CB(int); void toggleButton4CB(int); void changeLabelText(int id, int status); void exitCB(void); }; void CaMainWindow::exitCB(void) { delete this; CmAppl::end(0); } void CaAppl::start(int argc, char **argv) { CaMainWindow *win = new CaMainWindow("Example 6", SF_NO_CLOSE); win->realize(); mainLoop(); } CaMainWindow::CaMainWindow(const char *title, int flags) : CmShell(title, flags) { CmRowForm *rform; CmToggleButton *tb; CmPushButton *pb; for (int ii=0; ii < 4; ii++) toggle_status[ii] = 0; rform = new CmRowForm(this); tb= new CmToggleButton(rform, "Toggle 1", HELV_MEDIUM); tb->setCallback(this, (INT_CB)toggleButton1CB); tb= new CmToggleButton(rform, "Toggle 2", HELV_MEDIUM); tb->setCallback(this, (INT_CB)toggleButton2CB); tb= new CmToggleButton(rform, "Toggle 3", HELV_MEDIUM); tb->setCallback(this, (INT_CB)toggleButton3CB); tb= new CmToggleButton(rform, "Toggle 4", HELV_MEDIUM); tb->setCallback(this, (INT_CB)toggleButton4CB); label = new CmLabel(rform, "", DEFAULT_FONT); tb->arm(); pb = new CmPushButton(this, "Quit", TIMES_MEDIUM); pb->setCallback(this, (VOID_CB)exitCB); } void CaMainWindow::changeLabelText(int btn, int status) { char str[64]; int ii; toggle_status[btn] = status; strcpy(str, "Button status: "); for (ii=0; ii < 4; ii++) strcat(str, (toggle_status[ii] ? " ON" : " OFF")); label->setText(str); } void CaMainWindow::toggleButton1CB(int status) { changeLabelText(0, status); } void CaMainWindow::toggleButton2CB(int status) { changeLabelText(1, status); } void CaMainWindow::toggleButton3CB(int status) { changeLabelText(2, status); } void CaMainWindow::toggleButton4CB(int status) { changeLabelText(3, status); }