00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #define _XMENU_SOURCE_
00025
00026 #include <stdio.h>
00027 #include <errno.h>
00028 #include <unistd.h>
00029
00030 #include "setup.h"
00031
00032 #include "constrct.h"
00033 #include "filecom.h"
00034
00035 #include "xsetup.h"
00036 #include "xclips.h"
00037 #include "xmenu.h"
00038 #include "xedit.h"
00039 #include "xclipstext.h"
00040 #include "xmenu_wind.h"
00041 #include "xmenu_exec.h"
00042 #include "xmenu_file.h"
00043 #include "xmenu_watch.h"
00044 #include "xmenu_opt.h"
00045 #include "xmenu_exec.h"
00046 #include "xmain.h"
00047
00048 #include <string.h>
00049 #include <ctype.h>
00050 #include <sys/types.h>
00051 #include <sys/stat.h>
00052 #include <sys/dir.h>
00053
00054
00055 static void AboutXCLIPS(Widget,XtPointer,XtPointer);
00056 static void CreateFileMenu(Widget);
00057 static void CreateExecutionMenu(Widget);
00058 static void CreateBrowseMenu(Widget);
00059 static void CreateWindowsMenu(Widget);
00060
00061
00062
00063 Widget defrule_manager = NULL, deffact_manager = NULL, deftemplate_manager = NULL,
00064 deffunction_manager = NULL, defgeneric_manager = NULL, definstances_manager = NULL,
00065 defclass_manager = NULL, agenda_manager = NULL,defglobal_manager = NULL;
00066
00067 Widget button_form, button;
00068
00069 Widget FileItemWidgets[7];
00070 Widget ExecItemWidgets[5];
00071
00072 String about_info[] =
00073 {
00074 "XCLIPS for CLIPS version 6.30",
00075 "",
00076 "Developers:",
00077 "",
00078 " XCLIPS: BeBe Ly & Daniel McCoy",
00079 "",
00080 " CLIPS: Gary Riley & Brian Dantes ",
00081 "",
00082 NULL,
00083 };
00084
00085
00086
00087
00088
00089
00090
00091 void CreatePullDownMenus(
00092 Widget parent)
00093 {
00094 button_form = XtCreateManagedWidget("buttonForm",formWidgetClass,
00095 parent,NULL, 0);
00096 XtSetArg(TheArgs[0], XtNbitmap, clips_logo);
00097 XtSetArg(TheArgs[1], XtNinternalHeight, 0);
00098 XtSetArg(TheArgs[2], XtNinternalWidth, 0);
00099 XtSetArg(TheArgs[3], XtNshapeStyle, XmuShapeOval);
00100 XtSetArg(TheArgs[4], XtNborderWidth, 0);
00101 button = XtCreateManagedWidget("button",commandWidgetClass,
00102 button_form,TheArgs, 5);
00103
00104 XtAddCallback(button, XtNcallback, AboutXCLIPS, NULL);
00105
00106 CreateFileMenu(button_form);
00107 CreateExecutionMenu(button_form);
00108 CreateBrowseMenu(button_form);
00109 CreateWindowsMenu(button_form);
00110 }
00111
00112
00113
00114
00115
00116
00117
00118 static void CreateFileMenu(
00119 Widget parent)
00120 {
00121 Widget line, menu;
00122 int i = 0;
00123
00124 XtSetArg(TheArgs[0], XtNfromHoriz, button);
00125 XtSetArg(TheArgs[1], XtNlabel, "File");
00126 button = XtCreateManagedWidget("button",menuButtonWidgetClass,
00127 parent,TheArgs, 2);
00128
00129 menu = XtCreatePopupShell("menu",simpleMenuWidgetClass,
00130 button,NULL, 0);
00131
00132 XtSetArg(TheArgs[0], XtNleftMargin, 15);
00133
00134
00135
00136
00137
00138 FileItemWidgets[i] = XtCreateManagedWidget("Edit... ^V",
00139 smeBSBObjectClass,menu,TheArgs,1);
00140 XtAddCallback(FileItemWidgets[i++], XtNcallback, EditCallback, NULL);
00141
00142
00143
00144
00145
00146 FileItemWidgets[i] = XtCreateManagedWidget("Complete... ^C",smeBSBObjectClass,
00147 menu,TheArgs, 1);
00148 XtAddCallback(FileItemWidgets[i++], XtNcallback, CompletionDialogCallback,(XtPointer)NULL);
00149
00150 line = XtCreateManagedWidget("line",smeLineObjectClass,menu,NULL,0);
00151
00152
00153
00154
00155
00156 FileItemWidgets[i] = XtCreateManagedWidget("Load... ^L",
00157 smeBSBObjectClass,menu,TheArgs,1);
00158 XtAddCallback(FileItemWidgets[i++], XtNcallback, LoadRulesCallback, NULL);
00159
00160
00161
00162
00163
00164 FileItemWidgets[i] = XtCreateManagedWidget("Load Batch...",
00165 smeBSBObjectClass,
00166 menu,
00167 TheArgs, 1);
00168 XtAddCallback(FileItemWidgets[i++], XtNcallback, LoadBatchCallback, NULL);
00169
00170
00171
00172
00173
00174 FileItemWidgets[i] = XtCreateManagedWidget("Load Binary...",
00175 smeBSBObjectClass,
00176 menu,
00177 TheArgs, 1);
00178 XtAddCallback(FileItemWidgets[i++], XtNcallback, LoadBinaryCallback, NULL);
00179
00180
00181
00182
00183
00184 file_dribble = XtCreateManagedWidget("Dribble... ^D",
00185 smeBSBObjectClass,
00186 menu,
00187 TheArgs, 1);
00188 XtAddCallback(file_dribble, XtNcallback, DribbleCallback, NULL);
00189
00190 line = XtCreateManagedWidget("line",
00191 smeLineObjectClass,
00192 menu,
00193 NULL, 0);
00194
00195
00196
00197
00198 FileItemWidgets[i] = XtCreateManagedWidget("Save Binary...",
00199 smeBSBObjectClass,
00200 menu,
00201 TheArgs, 1);
00202 XtAddCallback(FileItemWidgets[i++], XtNcallback, SaveBinaryCallback, NULL);
00203
00204 line = XtCreateManagedWidget("line",
00205 smeLineObjectClass,
00206 menu,
00207 NULL, 0);
00208
00209
00210
00211
00212 FileItemWidgets[i] = XtCreateManagedWidget("Quit ^Q",
00213 smeBSBObjectClass,
00214 menu,
00215 TheArgs, 1);
00216 XtAddCallback(FileItemWidgets[i], XtNcallback, QuitCallback, NULL);
00217 }
00218
00219
00220
00221
00222
00223
00224
00225 static void CreateExecutionMenu(
00226 Widget parent)
00227 {
00228 Widget line, menu, entry;
00229 int i = 0;
00230
00231 XtSetArg(TheArgs[0], XtNfromHoriz, button);
00232 XtSetArg(TheArgs[1], XtNlabel, "Execution");
00233 button = XtCreateManagedWidget("button",
00234 menuButtonWidgetClass,
00235 parent,
00236 TheArgs, 2);
00237
00238 menu = XtCreatePopupShell("menu",
00239 simpleMenuWidgetClass,
00240 button,
00241 NULL, 0);
00242
00243 ExecItemWidgets[i] = XtCreateManagedWidget("Reset ^E",
00244 smeBSBObjectClass,
00245 menu,
00246 NULL, 0);
00247 XtAddCallback(ExecItemWidgets[i], XtNcallback, ResetCallback, NULL);
00248 i++;
00249 ExecItemWidgets[i] = XtCreateManagedWidget("Run ^R",
00250 smeBSBObjectClass,
00251 menu,
00252 NULL, 0);
00253 XtAddCallback(ExecItemWidgets[i], XtNcallback, RunCallback, NULL);
00254 i++;
00255 ExecItemWidgets[i] = XtCreateManagedWidget("Step ^T",
00256 smeBSBObjectClass,
00257 menu,
00258 NULL, 0);
00259 XtAddCallback(ExecItemWidgets[i], XtNcallback, StepCallback, NULL);
00260 i++;
00261 entry = XtCreateManagedWidget("Watch...",
00262 smeBSBObjectClass,
00263 menu,
00264 NULL, 0);
00265
00266 XtAddCallback(entry,XtNcallback,WatchWindow,NULL);
00267
00268 entry = XtCreateManagedWidget("Options...",
00269 smeBSBObjectClass,
00270 menu,
00271 NULL, 0);
00272 XtAddCallback(entry,XtNcallback,OptionsWindow,NULL);
00273 line = XtCreateManagedWidget("line",
00274 smeLineObjectClass,
00275 menu,
00276 NULL, 0);
00277
00278 ExecItemWidgets[i] = XtCreateManagedWidget("Clear CLIPS ^K",
00279 smeBSBObjectClass,
00280 menu,
00281 NULL, 0);
00282 XtAddCallback(ExecItemWidgets[i], XtNcallback, ClearCLIPSCallback, NULL);
00283 i++;
00284 ExecItemWidgets[i] = XtCreateManagedWidget("Clear Window ^N",
00285 smeBSBObjectClass,
00286 menu,
00287 NULL, 0);
00288 XtAddCallback(ExecItemWidgets[i],XtNcallback,ClearScreenCallback,NULL);
00289 }
00290
00291
00292
00293
00294
00295
00296
00297 static void CreateBrowseMenu(
00298 Widget parent)
00299 {
00300 Widget menu,entry,line;
00301
00302 XtSetArg(TheArgs[0], XtNfromHoriz, button);
00303 XtSetArg(TheArgs[1], XtNlabel, "Browse");
00304 button = XtCreateManagedWidget("button",
00305 menuButtonWidgetClass,
00306 parent,
00307 TheArgs, 2);
00308 menu = XtCreatePopupShell("menu",
00309 simpleMenuWidgetClass,
00310 button,
00311 NULL, 0);
00312
00313 entry = XtCreateManagedWidget("Module...",
00314 smeBSBObjectClass,
00315 menu,
00316 NULL, 0);
00317 XtAddCallback(entry,
00318 XtNcallback,
00319 ModuleCallback,
00320 NULL);
00321
00322 line = XtCreateManagedWidget("line",
00323 smeLineObjectClass,
00324 menu,
00325 NULL, 0);
00326
00327 XtSetArg(TheArgs[0], XtNleftMargin, 15);
00328 XtSetArg(TheArgs[1], XtNsensitive, False);
00329
00330 defrule_manager = XtCreateManagedWidget("Defrule Manager...",
00331 smeBSBObjectClass,
00332 menu,
00333 TheArgs, 2);
00334 XtAddCallback(defrule_manager, XtNcallback, DefruleManagerCallback, NULL);
00335
00336 deffact_manager = XtCreateManagedWidget("Deffacts Manager...",
00337 smeBSBObjectClass,
00338 menu,
00339 TheArgs, 2);
00340 XtAddCallback(deffact_manager, XtNcallback, DeffactManagerCallback, NULL);
00341
00342 deftemplate_manager = XtCreateManagedWidget("Deftemplates Manager...",
00343 smeBSBObjectClass,
00344 menu,
00345 TheArgs, 2);
00346 XtAddCallback(deftemplate_manager, XtNcallback,
00347 DeftemplateManagerCallback, NULL);
00348
00349 deffunction_manager = XtCreateManagedWidget("Deffunction Manager...",
00350 smeBSBObjectClass,
00351 menu,
00352 TheArgs, 2);
00353 XtAddCallback(deffunction_manager, XtNcallback,
00354 DeffunctionManagerCallback, NULL);
00355
00356 defglobal_manager = XtCreateManagedWidget("Defglobal Manager...",
00357 smeBSBObjectClass,
00358 menu,
00359 TheArgs, 2);
00360 XtAddCallback(defglobal_manager, XtNcallback,
00361 DefglobalManagerCallback, NULL);
00362
00363 defgeneric_manager = XtCreateManagedWidget("Defgeneric Manager...",
00364 smeBSBObjectClass,
00365 menu,
00366 TheArgs, 2);
00367 XtAddCallback(defgeneric_manager, XtNcallback,
00368 DefgenericManagerCallback, NULL);
00369
00370 defclass_manager = XtCreateManagedWidget("Defclass Manager...",
00371 smeBSBObjectClass,
00372 menu,
00373 TheArgs, 2);
00374 XtAddCallback(defclass_manager, XtNcallback, DefclassManagerCallback, NULL);
00375
00376 definstances_manager = XtCreateManagedWidget("Definstances Manager...",
00377 smeBSBObjectClass,
00378 menu,
00379 TheArgs, 2);
00380 XtAddCallback(definstances_manager, XtNcallback,
00381 DefinstancesManagerCallback, NULL);
00382
00383 agenda_manager = XtCreateManagedWidget("Agenda Manager...",
00384 smeBSBObjectClass,
00385 menu,
00386 TheArgs, 1);
00387 XtAddCallback(agenda_manager, XtNcallback, AgendaManagerCallback, NULL);
00388 }
00389
00390
00391
00392
00393
00394
00395
00396 static void CreateWindowsMenu(
00397 Widget parent)
00398 {
00399 Widget line,menu, entry,all,none;
00400
00401 XtSetArg(TheArgs[0], XtNfromHoriz, button);
00402 XtSetArg(TheArgs[1], XtNlabel, "Windows");
00403 button = XtCreateManagedWidget("button",
00404 menuButtonWidgetClass,
00405 parent,
00406 TheArgs, 2);
00407
00408 menu = XtCreatePopupShell("menu",
00409 simpleMenuWidgetClass,
00410 button,
00411 NULL, 0);
00412
00413
00414
00415
00416
00417 XtSetArg(TheArgs[0], XtNleftMargin, 15);
00418 facts_window = XtCreateManagedWidget("Facts Window",
00419 smeBSBObjectClass,
00420 menu,
00421 TheArgs, 1);
00422 XtAddCallback(facts_window, XtNcallback, FactsWindowCallback, NULL);
00423
00424
00425
00426
00427
00428 agenda_window = XtCreateManagedWidget("Agenda Window",
00429 smeBSBObjectClass,
00430 menu,
00431 TheArgs, 1);
00432 XtAddCallback(agenda_window, XtNcallback, AgendaWindowCallback, NULL);
00433
00434
00435
00436
00437
00438 instances_window = XtCreateManagedWidget("Instances Window",
00439 smeBSBObjectClass,
00440 menu,
00441 TheArgs, 1);
00442
00443 XtAddCallback(instances_window, XtNcallback,InstancesWindowCallback,NULL);
00444
00445
00446
00447
00448
00449 globals_window = XtCreateManagedWidget("Global Window",
00450 smeBSBObjectClass,
00451 menu,
00452 TheArgs, 1);
00453 XtAddCallback(globals_window, XtNcallback,GlobalsWindowCallback,NULL);
00454
00455
00456
00457
00458
00459 focus_window = XtCreateManagedWidget("Focus Window",
00460 smeBSBObjectClass,
00461 menu,
00462 TheArgs, 1);
00463 XtAddCallback(focus_window, XtNcallback,FocusWindowCallback,NULL);
00464
00465 line = XtCreateManagedWidget("line", smeLineObjectClass, menu, NULL, 0);
00466
00467
00468
00469
00470
00471 all = XtCreateManagedWidget("All Windows",
00472 smeBSBObjectClass,
00473 menu,
00474 TheArgs, 1);
00475 XtAddCallback(all,XtNcallback,AllWindowsCallback,NULL);
00476
00477
00478
00479
00480
00481 none = XtCreateManagedWidget("None",
00482 smeBSBObjectClass,
00483 menu,
00484 TheArgs, 1);
00485 XtAddCallback(none,XtNcallback,NoWindowsCallback,NULL);
00486 line = XtCreateManagedWidget("line", smeLineObjectClass, menu, NULL, 0);
00487
00488
00489
00490
00491
00492
00493 entry = XtCreateManagedWidget("Command Line CLIPS ^Z",
00494 smeBSBObjectClass,
00495 menu,
00496 TheArgs, 1);
00497 XtAddCallback(entry, XtNcallback, CommandLineCLIPSCallback, NULL);
00498
00499
00500
00501
00502
00503 entry = XtCreateManagedWidget("Color Utility",
00504 smeBSBObjectClass,
00505 menu,
00506 TheArgs, 1);
00507 XtAddCallback(entry, XtNcallback, ColorUtilityCallback, NULL);
00508
00509 }
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521 static void AboutXCLIPS(
00522 Widget w,
00523 XtPointer client_data,
00524 XtPointer call_data)
00525 {
00526 Widget about, about_form, about_list;
00527
00528 about = XtCreatePopupShell("About XCLIPS",
00529 topLevelShellWidgetClass,
00530 toplevel,
00531 NULL, 0);
00532
00533 XtSetArg(TheArgs[0], XtNdefaultDistance, 0);
00534 about_form = XtCreateManagedWidget("about_form",
00535 formWidgetClass,
00536 about,
00537 TheArgs, 1);
00538
00539 XtSetArg(TheArgs[0], XtNborderWidth, 0);
00540 XtSetArg(TheArgs[1], XtNdefaultColumns, 1);
00541 XtSetArg(TheArgs[2], XtNforceColumns, True);
00542 XtSetArg(TheArgs[3], XtNlist, about_info);
00543 XtSetArg(TheArgs[4], XtNallowVert, True);
00544 XtSetArg(TheArgs[5], XtNallowHoriz, True);
00545 about_list = XtCreateManagedWidget("menu",
00546 listWidgetClass,
00547 about_form,
00548 TheArgs, 6);
00549 XtAddCallback(about_list, XtNcallback, CancelPopupSelect,
00550 (XtPointer)about_form);
00551
00552 XtPopup(about, XtGrabNone);
00553 }
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566 void DialogReturn(
00567 Widget w,
00568 XEvent *event,
00569 String *params,
00570 Cardinal *num_params)
00571 {
00572 MenuFunc(w, params, (XtPointer)NULL);
00573 }
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586 void MenuFunc(
00587 Widget w,
00588 XtPointer client_data,
00589 XtPointer call_data)
00590 {
00591 void *theEnv = GetCurrentEnvironment();
00592 String filename = XawDialogGetValueString(XtParent(w));
00593 char fullpath[255];
00594 Widget popup = XtParent(XtParent(XtParent(w)));
00595
00596 if (filename[0] == 0)
00597 { return; }
00598
00599 chdir(path);
00600 strcpy(fullpath, path);
00601 strcat(fullpath, filename);
00602 MoveEndOfFile(dialog_text, &TheEvent);
00603
00604 switch(file_item)
00605 {
00606 case EDIT:
00607 XtDestroyWidget(popup);
00608 EditNewFile(w, client_data, call_data);
00609 break;
00610
00611 case LOADBATCH:
00612 XtDestroyWidget(popup);
00613 LoadBatch(fullpath);
00614 break;
00615
00616 case LOADBINARY:
00617 XtDestroyWidget(popup);
00618 LoadBinary(fullpath);
00619 break;
00620
00621 case LOADFACTS:
00622 XtDestroyWidget(popup);
00623 LoadTheFacts(fullpath);
00624 break;
00625
00626 case LOADRULES:
00627 XtDestroyWidget(popup);
00628 LoadRules(fullpath);
00629 break;
00630
00631 case DRIBBLEON:
00632 XtDestroyWidget(popup);
00633 EnvDribbleOn(theEnv,fullpath);
00634 break;
00635
00636 case SAVERULES:
00637 IntSave(w,client_data,call_data);
00638 break;
00639
00640 case SAVEBINARY:
00641 IntSave(w,client_data,call_data);
00642 break;
00643
00644 case SAVEFACTS:
00645 IntSave(w, client_data, call_data);
00646 break;
00647 }
00648 }
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658 void CancelPopupSelect(
00659 Widget w,
00660 XtPointer client_data,
00661 XtPointer call_data)
00662 {
00663 XtDestroyWidget(XtParent((Widget) client_data));
00664 }
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675 void PopdownSelect(
00676 Widget w,
00677 XtPointer client_data,
00678 XtPointer call_data)
00679 {
00680 XtPopdown(XtParent((Widget) client_data));
00681 }