format file
This commit is contained in:
160
src/motif_test.c
160
src/motif_test.c
@@ -19,15 +19,18 @@
|
|||||||
|
|
||||||
#define PAD 8
|
#define PAD 8
|
||||||
|
|
||||||
void button_callback(Widget widget, XtPointer client_data, XtPointer call_data) {
|
void button_callback(Widget widget, XtPointer client_data, XtPointer call_data)
|
||||||
|
{
|
||||||
puts("Button clicked!");
|
puts("Button clicked!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void quit_callback(Widget widget, XtPointer client_data, XtPointer call_data) {
|
void quit_callback(Widget widget, XtPointer client_data, XtPointer call_data)
|
||||||
|
{
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dialog_callback(Widget widget, XtPointer client_data, XtPointer call_data) {
|
void dialog_callback(Widget widget, XtPointer client_data, XtPointer call_data)
|
||||||
|
{
|
||||||
Widget parent = (Widget)client_data;
|
Widget parent = (Widget)client_data;
|
||||||
XmString msg = XmStringCreateLocalized("Hello from a secondary dialog!");
|
XmString msg = XmStringCreateLocalized("Hello from a secondary dialog!");
|
||||||
Widget dialog = XmCreateMessageDialog(parent, "dialog", NULL, 0);
|
Widget dialog = XmCreateMessageDialog(parent, "dialog", NULL, 0);
|
||||||
@@ -39,7 +42,8 @@ void dialog_callback(Widget widget, XtPointer client_data, XtPointer call_data)
|
|||||||
XtManageChild(dialog);
|
XtManageChild(dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
XtAppContext app;
|
XtAppContext app;
|
||||||
Widget toplevel, mainwin, menubar, form;
|
Widget toplevel, mainwin, menubar, form;
|
||||||
|
|
||||||
@@ -47,9 +51,12 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
/* 获取 Display 指针并打印 */
|
/* 获取 Display 指针并打印 */
|
||||||
Display *dpy = XtDisplay(toplevel);
|
Display *dpy = XtDisplay(toplevel);
|
||||||
if (dpy) {
|
if (dpy)
|
||||||
|
{
|
||||||
printf("Connected to X server: %s\n", DisplayString(dpy));
|
printf("Connected to X server: %s\n", DisplayString(dpy));
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
fprintf(stderr, "Failed to get Display* from toplevel widget.\n");
|
fprintf(stderr, "Failed to get Display* from toplevel widget.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,65 +84,65 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
/* 标签 */
|
/* 标签 */
|
||||||
Widget label = XtVaCreateManagedWidget("This is a label",
|
Widget label = XtVaCreateManagedWidget("This is a label",
|
||||||
xmLabelWidgetClass, form,
|
xmLabelWidgetClass, form,
|
||||||
XmNtopAttachment, XmATTACH_FORM,
|
XmNtopAttachment, XmATTACH_FORM,
|
||||||
|
XmNtopOffset, PAD,
|
||||||
|
XmNleftAttachment, XmATTACH_FORM,
|
||||||
|
XmNleftOffset, PAD,
|
||||||
|
XmNrightAttachment, XmATTACH_FORM,
|
||||||
|
XmNrightOffset, PAD,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
/* 按钮 */
|
||||||
|
Widget button = XtVaCreateManagedWidget("Click Me",
|
||||||
|
xmPushButtonWidgetClass, form,
|
||||||
|
XmNtopAttachment, XmATTACH_WIDGET,
|
||||||
|
XmNtopWidget, label,
|
||||||
|
XmNtopOffset, PAD,
|
||||||
|
XmNleftAttachment, XmATTACH_FORM,
|
||||||
|
XmNleftOffset, PAD,
|
||||||
|
XmNrightAttachment, XmATTACH_FORM,
|
||||||
|
XmNrightOffset, PAD,
|
||||||
|
NULL);
|
||||||
|
XtAddCallback(button, XmNactivateCallback, button_callback, NULL);
|
||||||
|
|
||||||
|
/* 打开二级对话框的按钮 */
|
||||||
|
Widget dialogBtn = XtVaCreateManagedWidget("Show Dialog",
|
||||||
|
xmPushButtonWidgetClass, form,
|
||||||
|
XmNtopAttachment, XmATTACH_WIDGET,
|
||||||
|
XmNtopWidget, button,
|
||||||
|
XmNtopOffset, PAD,
|
||||||
|
XmNleftAttachment, XmATTACH_FORM,
|
||||||
|
XmNleftOffset, PAD,
|
||||||
|
XmNrightAttachment, XmATTACH_FORM,
|
||||||
|
XmNrightOffset, PAD,
|
||||||
|
NULL);
|
||||||
|
XtAddCallback(dialogBtn, XmNactivateCallback, dialog_callback, form);
|
||||||
|
|
||||||
|
/* 文本框 */
|
||||||
|
Widget text = XtVaCreateManagedWidget("text",
|
||||||
|
xmTextWidgetClass, form,
|
||||||
|
XmNtopAttachment, XmATTACH_WIDGET,
|
||||||
|
XmNtopWidget, dialogBtn,
|
||||||
XmNtopOffset, PAD,
|
XmNtopOffset, PAD,
|
||||||
XmNleftAttachment, XmATTACH_FORM,
|
XmNleftAttachment, XmATTACH_FORM,
|
||||||
XmNleftOffset, PAD,
|
XmNleftOffset, PAD,
|
||||||
XmNrightAttachment, XmATTACH_FORM,
|
XmNrightAttachment, XmATTACH_FORM,
|
||||||
XmNrightOffset, PAD,
|
XmNrightOffset, PAD,
|
||||||
|
XmNcolumns, 20,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
/* 按钮 */
|
|
||||||
Widget button = XtVaCreateManagedWidget("Click Me",
|
|
||||||
xmPushButtonWidgetClass, form,
|
|
||||||
XmNtopAttachment, XmATTACH_WIDGET,
|
|
||||||
XmNtopWidget, label,
|
|
||||||
XmNtopOffset, PAD,
|
|
||||||
XmNleftAttachment, XmATTACH_FORM,
|
|
||||||
XmNleftOffset, PAD,
|
|
||||||
XmNrightAttachment, XmATTACH_FORM,
|
|
||||||
XmNrightOffset, PAD,
|
|
||||||
NULL);
|
|
||||||
XtAddCallback(button, XmNactivateCallback, button_callback, NULL);
|
|
||||||
|
|
||||||
/* 打开二级对话框的按钮 */
|
|
||||||
Widget dialogBtn = XtVaCreateManagedWidget("Show Dialog",
|
|
||||||
xmPushButtonWidgetClass, form,
|
|
||||||
XmNtopAttachment, XmATTACH_WIDGET,
|
|
||||||
XmNtopWidget, button,
|
|
||||||
XmNtopOffset, PAD,
|
|
||||||
XmNleftAttachment, XmATTACH_FORM,
|
|
||||||
XmNleftOffset, PAD,
|
|
||||||
XmNrightAttachment, XmATTACH_FORM,
|
|
||||||
XmNrightOffset, PAD,
|
|
||||||
NULL);
|
|
||||||
XtAddCallback(dialogBtn, XmNactivateCallback, dialog_callback, form);
|
|
||||||
|
|
||||||
/* 文本框 */
|
|
||||||
Widget text = XtVaCreateManagedWidget("text",
|
|
||||||
xmTextWidgetClass, form,
|
|
||||||
XmNtopAttachment, XmATTACH_WIDGET,
|
|
||||||
XmNtopWidget, dialogBtn,
|
|
||||||
XmNtopOffset, PAD,
|
|
||||||
XmNleftAttachment, XmATTACH_FORM,
|
|
||||||
XmNleftOffset, PAD,
|
|
||||||
XmNrightAttachment, XmATTACH_FORM,
|
|
||||||
XmNrightOffset, PAD,
|
|
||||||
XmNcolumns, 20,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
/* Toggle 按钮(复选框) */
|
/* Toggle 按钮(复选框) */
|
||||||
Widget toggle = XtVaCreateManagedWidget("Check me",
|
Widget toggle = XtVaCreateManagedWidget("Check me",
|
||||||
xmToggleButtonWidgetClass, form,
|
xmToggleButtonWidgetClass, form,
|
||||||
XmNtopAttachment, XmATTACH_WIDGET,
|
XmNtopAttachment, XmATTACH_WIDGET,
|
||||||
XmNtopWidget, text,
|
XmNtopWidget, text,
|
||||||
XmNtopOffset, PAD,
|
XmNtopOffset, PAD,
|
||||||
XmNleftAttachment, XmATTACH_FORM,
|
XmNleftAttachment, XmATTACH_FORM,
|
||||||
XmNleftOffset, PAD,
|
XmNleftOffset, PAD,
|
||||||
XmNrightAttachment, XmATTACH_FORM,
|
XmNrightAttachment, XmATTACH_FORM,
|
||||||
XmNrightOffset, PAD,
|
XmNrightOffset, PAD,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
/* RadioBox(单选按钮组) */
|
/* RadioBox(单选按钮组) */
|
||||||
Widget radioBox = XmCreateRadioBox(form, "radioBox", NULL, 0);
|
Widget radioBox = XmCreateRadioBox(form, "radioBox", NULL, 0);
|
||||||
@@ -175,25 +182,26 @@ int main(int argc, char *argv[]) {
|
|||||||
items[4] = XmStringCreateLocalized("Item E");
|
items[4] = XmStringCreateLocalized("Item E");
|
||||||
items[5] = XmStringCreateLocalized("Item F");
|
items[5] = XmStringCreateLocalized("Item F");
|
||||||
XmListAddItems(list, items, 6, 1);
|
XmListAddItems(list, items, 6, 1);
|
||||||
for (int i = 0; i < 6; ++i) XmStringFree(items[i]);
|
for (int i = 0; i < 6; ++i)
|
||||||
|
XmStringFree(items[i]);
|
||||||
XtManageChild(list);
|
XtManageChild(list);
|
||||||
|
|
||||||
/* 滑块 (模拟进度条) */
|
/* 滑块 (模拟进度条) */
|
||||||
Widget scale = XtVaCreateManagedWidget("scale",
|
Widget scale = XtVaCreateManagedWidget("scale",
|
||||||
xmScaleWidgetClass, form,
|
xmScaleWidgetClass, form,
|
||||||
XmNorientation, XmHORIZONTAL,
|
XmNorientation, XmHORIZONTAL,
|
||||||
XmNminimum, 0,
|
XmNminimum, 0,
|
||||||
XmNmaximum, 100,
|
XmNmaximum, 100,
|
||||||
XmNvalue, 30,
|
XmNvalue, 30,
|
||||||
XmNshowValue, True,
|
XmNshowValue, True,
|
||||||
XmNtopAttachment, XmATTACH_WIDGET,
|
XmNtopAttachment, XmATTACH_WIDGET,
|
||||||
XmNtopWidget, swList,
|
XmNtopWidget, swList,
|
||||||
XmNtopOffset, PAD,
|
XmNtopOffset, PAD,
|
||||||
XmNleftAttachment, XmATTACH_FORM,
|
XmNleftAttachment, XmATTACH_FORM,
|
||||||
XmNleftOffset, PAD,
|
XmNleftOffset, PAD,
|
||||||
XmNrightAttachment, XmATTACH_FORM,
|
XmNrightAttachment, XmATTACH_FORM,
|
||||||
XmNrightOffset, PAD,
|
XmNrightOffset, PAD,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
XtManageChild(form);
|
XtManageChild(form);
|
||||||
XmMainWindowSetAreas(mainwin, menubar, NULL, NULL, NULL, form);
|
XmMainWindowSetAreas(mainwin, menubar, NULL, NULL, NULL, form);
|
||||||
@@ -202,11 +210,15 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
/* 自定义事件循环 */
|
/* 自定义事件循环 */
|
||||||
XEvent event;
|
XEvent event;
|
||||||
while (1) {
|
while (1)
|
||||||
if (XtAppPending(app)) {
|
{
|
||||||
|
if (XtAppPending(app))
|
||||||
|
{
|
||||||
XtAppNextEvent(app, &event);
|
XtAppNextEvent(app, &event);
|
||||||
XtDispatchEvent(&event);
|
XtDispatchEvent(&event);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* 空闲时可以执行后台逻辑 */
|
/* 空闲时可以执行后台逻辑 */
|
||||||
printf("Idle...\n");
|
printf("Idle...\n");
|
||||||
usleep(500000); /* 0.5秒 */
|
usleep(500000); /* 0.5秒 */
|
||||||
|
|||||||
Reference in New Issue
Block a user