123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977 |
- /*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
- /*%% (c) Copyright 1993, 1994 Hewlett-Packard Company */
- /*%% (c) Copyright 1993, 1994 International Business Machines Corp. */
- /*%% (c) Copyright 1993, 1994 Sun Microsystems, Inc. */
- /*%% (c) Copyright 1993, 1994 Novell, Inc. */
- /*%% $TOG: cntl.c /main/4 1998/05/18 16:55:06 rafi $ */
- /*
- * cntl.c
- *
- * Copyright (c) 1993 by Sun Microsystems, Inc.
- */
- /*
- * An example controller for the remote-control editor defined in edit.c.
- * Puts up a simple panel with a text field to enter the filename to
- * operate on and sends out ToolTalk messages to start up an editor to
- * carry out the operations. Also allows browsing any sub-file specs
- * defined in the file.
- */
- #include <stdio.h>
- #include <sys/param.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <Xm/Xm.h>
- #include <Xm/MainW.h>
- #include <Xm/CascadeB.h>
- #include <Xm/DialogS.h>
- #include <Xm/Form.h>
- #include <Xm/Label.h>
- #include <Xm/List.h>
- #include <Xm/PushB.h>
- #include <Xm/Text.h>
- #include <Xm/Protocols.h>
- #include <desktop/tt_c.h>
- #define TITLE_LINE_HEIGHT 25
- Display *dpy;
- XtAppContext app;
- Widget cntl_ui_base_window;
- Widget cntl_ui_base_controls;
- Widget cntl_ui_file_button;
- Widget cntl_ui_file_label;
- Widget cntl_ui_file_field;
- Widget cntl_ui_message;
- Widget cntl_ui_file_menu;
-
- Widget cntl_ui_saveas_popup;
- Widget cntl_ui_saveas_controls;
- Widget cntl_ui_save_as_dlabel;
- Widget cntl_ui_save_as_directory;
- Widget cntl_ui_new_flabel;
- Widget cntl_ui_new_filename;
- Widget cntl_ui_save_as_button;
-
- Widget cntl_ui_obj_popup;
- Widget cntl_ui_obj_controls;
- Widget cntl_ui_olist_label;
- Widget cntl_ui_olist;
- Widget cntl_ui_hilite_button;
- Widget cntl_ui_obj_field;
- char *cntl_objid = (char *)0;
- Tt_scope msg_scope = TT_FILE_IN_SESSION;
- void
- main(argc, argv)
- int argc;
- char **argv;
- {
- void cntl_ui_initialize();
- /*
- * Initialize Motif.
- */
- XtToolkitInitialize();
- app = XtCreateApplicationContext();
- dpy = XtOpenDisplay(app, 0, 0, "cntl", 0, 0, &argc, argv);
- /*
- * Initialize user interface components.
- */
- cntl_ui_initialize();
-
- if (! cntl_init_tt()) {
- fprintf(stderr,"%s: Can't initialize ToolTalk\n", argv[0]);
- exit(1);
- }
- /*
- * Turn control over to Motif.
- */
- XtAppMainLoop(app);
- tt_close();
- exit(0);
- }
- int
- is_window_showing(widget)
- Widget widget;
- {
- return(XtIsManaged(widget)) ;
- }
- void
- get_screen_size(widget, width, height)
- Widget widget;
- int *width, *height;
- {
- Display *dpy = XtDisplay(widget);
- int screen = DefaultScreen(dpy);
- *width = DisplayWidth(dpy, screen);
- *height = DisplayHeight(dpy, screen);
- }
- void
- force_popup_on_screen(popup, px, py)
- Widget popup;
- int *px, *py;
- {
- Dimension popup_width, popup_height;
- Position left, top;
- int n, x, y, screen_width, screen_height;
- x = *px;
- y = *py;
- /* Get the screen size. */
- get_screen_size(popup, &screen_width, &screen_height);
- XtVaGetValues(popup,
- XmNwidth, &popup_width,
- XmNheight, &popup_height,
- 0);
-
- /* Make sure frame does not go off side of screen. */
-
- n = x + (int) popup_width;
- if (n > screen_width) x -= (n - screen_width);
- else if (x < 0) x = 0;
-
- /* Make sure frame doen't go off top or bottom. */
-
- n = y + (int) popup_height;
- if (n > screen_height) y -= n - screen_height;
- else if (y < 0) y = 0;
-
- /* Set location and return. */
- left = (Position) x;
- top = (Position) y;
- XtVaSetValues(popup,
- XmNx, left,
- XmNy, top,
- 0);
- *px = x;
- *py = y;
- }
- void
- position_popup(base, popup)
- Widget base, popup;
- {
- int bw, bx, by, px, py;
- int screen_width, screen_height;
- Position base_x, base_y, popup_x, popup_y;
- Dimension base_width, base_height, popup_width, popup_height;
- XtVaGetValues(base,
- XmNx, &base_x,
- XmNy, &base_y,
- XmNwidth, &base_width,
- XmNheight, &base_height,
- 0);
- bx = (int) base_x;
- by = (int) base_y;
- bw = (int) base_width;
- XtVaGetValues(popup,
- XmNx, &popup_x,
- XmNy, &popup_y,
- XmNwidth, &popup_width,
- XmNheight, &popup_height,
- 0);
-
- px = (int) popup_x;
- py = (int) popup_y;
-
- get_screen_size(popup, &screen_width, &screen_height);
- px = bx + bw + 5;
- py = by - TITLE_LINE_HEIGHT;
- force_popup_on_screen(popup, &px, &py);
- }
- void
- show_popup(widget)
- Widget widget;
- {
- if (!is_window_showing(widget))
- position_popup(cntl_ui_base_window, widget) ;
- XtMapWidget(widget);
- XtManageChild(widget);
- XtPopup(XtParent(widget), XtGrabNone);
- }
- void
- dismiss_popup(widget, client_data, cbs)
- Widget widget;
- XtPointer client_data;
- XmAnyCallbackStruct *cbs;
- {
- XtUnmapWidget(widget);
- XtUnmanageChild(widget);
- }
- void
- add_delete_callback(widget)
- Widget widget;
- {
- Atom WM_DELETE_WINDOW;
- WM_DELETE_WINDOW = XmInternAtom(XtDisplay(widget),
- "WM_DELETE_WINDOW", False);
- XmAddWMProtocolCallback(widget, WM_DELETE_WINDOW,
- (XtCallbackProc) dismiss_popup, NULL);
- }
- void
- write_footer(message)
- char *message;
- {
- XmString label;
- label = XmStringCreateSimple(message);
- XtVaSetValues(cntl_ui_message, XmNlabelString, label, 0);
- XmStringFree(label);
- }
- /*
- * Initialize our ToolTalk environment.
- */
- int
- cntl_init_tt()
- {
- char *procid = tt_open();
- int ttfd;
- void cntl_receive_tt_message();
- Tt_pattern pat;
- Tt_callback_action cntl_update_obj_panel_callback();
- if (tt_pointer_error(procid) != TT_OK) {
- return 0;
- }
- ttfd = tt_fd();
- /* register a dynamic pattern to catch whenever the remote */
- /* editor creates a sub-file object so that we can update our */
- /* object query panel. */
- pat = tt_pattern_create();
- tt_pattern_op_add(pat, "Sun_EditDemo_new_object");
- tt_pattern_scope_add(pat, msg_scope);
- tt_pattern_category_set(pat, TT_OBSERVE);
- tt_pattern_callback_add(pat, cntl_update_obj_panel_callback);
- if (tt_pattern_register(pat) != TT_OK) {
- return 0;
- }
- XtAppAddInput(app, ttfd, (XtPointer) XtInputReadMask,
- cntl_receive_tt_message, 0);
- tt_session_join(tt_default_session());
- tt_free(procid);
- return 1;
- }
- /*
- * Handle any incoming ToolTalk messages. Since all the messages we send
- * out have callback functions, no further action is required after doing
- * a tt_message_receive.
- */
- void
- cntl_receive_tt_message(client_data, fid, id)
- XtPointer client_data;
- int *fid;
- XtInputId *id;
- {
- Tt_message msg;
- msg = tt_message_receive();
- if (msg != NULL && tt_pointer_error(msg) == TT_ERR_NOMP) {
- fprintf(stderr,"ToolTalk server down.\n");
- exit(0);
- }
- }
- /*
- * Callback for our dynamic pattern informing us when an object has
- * been added to a file. We use this information to update the file
- * objects panel if it is up.
- */
- Tt_callback_action
- cntl_update_obj_panel_callback(m, p)
- Tt_message m;
- Tt_pattern p;
- {
- int mark;
- mark = tt_mark();
- if (cntl_is_same_file(tt_message_file(m),
- XmTextGetString(cntl_ui_file_field))) {
- /* update the objects panel if it's showing */
- /* objects for the same file as the one in the */
- /* message. */
- cntl_update_obj_panel();
- }
- /*
- * no further action required for this message. Destroy it
- * and return TT_CALLBACK_PROCESSED so no other callbacks will
- * be run for the message.
- */
- tt_message_destroy(m);
- tt_release(mark);
- return TT_CALLBACK_PROCESSED;
- }
- /*
- * Default callback for all the ToolTalk messages we send.
- */
- Tt_callback_action
- cntl_msg_callback(m, p)
- Tt_message m;
- Tt_pattern p;
- {
- int mark;
- char msg[255];
- char *errstr;
- mark = tt_mark();
- switch (tt_message_state(m)) {
- case TT_STARTED:
- write_footer("Starting editor...");
- break;
- case TT_HANDLED:
- write_footer("");
- break;
- case TT_FAILED:
- errstr = tt_message_status_string(m);
- if (tt_pointer_error(errstr) == TT_OK && errstr) {
- sprintf(msg,"%s failed: %s", tt_message_op(m), errstr);
- } else if (tt_message_status(m) == TT_ERR_NO_MATCH) {
- sprintf(msg,"%s failed: Couldn't contact editor",
- tt_message_op(m),
- tt_status_message(tt_message_status(m)));
- } else {
- sprintf(msg,"%s failed: %s",
- tt_message_op(m),
- tt_status_message(tt_message_status(m)));
- }
- write_footer(msg);
- break;
- default:
- break;
- }
- /*
- * no further action required for this message. Destroy it
- * and return TT_CALLBACK_PROCESSED so no other callbacks will
- * be run for the message.
- */
- tt_message_destroy(m);
- tt_release(mark);
- return TT_CALLBACK_PROCESSED;
- }
- /*
- * Handle the edit actions by sending out a message to Sun_EditDemo to
- * start an editing session.
- */
- void
- cntl_edit(file)
- char *file;
- {
- Tt_message msg;
- write_footer("");
- msg = tt_prequest_create(msg_scope, "Sun_EditDemo_edit");
- tt_message_file_set(msg, file);
- tt_message_callback_add(msg, cntl_msg_callback);
- tt_message_send(msg);
- }
- /*
- * Handle the save actions by sending out a message to the Sun_EditDemo
- * editing this file to save the file.
- */
- void
- cntl_save(file)
- char *file;
- {
- Tt_message msg;
- write_footer("");
- msg = tt_prequest_create(msg_scope, "Sun_EditDemo_save");
- tt_message_file_set(msg, file);
- tt_message_callback_add(msg, cntl_msg_callback);
- tt_message_send(msg);
- }
- /*
- * Shut down the Sun_EditDemo that is editing this file.
- */
- void
- cntl_close(file)
- char *file;
- {
- Tt_message msg;
- write_footer("");
- msg = tt_prequest_create(msg_scope, "Sun_EditDemo_close");
- tt_message_file_set(msg, file);
- tt_message_callback_add(msg, cntl_msg_callback);
- tt_message_send(msg);
- }
- /*
- * Instruct the Sun_EditDemo that is editing this file to save the file
- * under a new name.
- */
- void
- cntl_save_as(file, dir, newfile)
- char *file;
- char *dir;
- char *newfile;
- {
- Tt_message msg;
- char buf[255];
- int dirlen;
- msg = tt_prequest_create(msg_scope, "Sun_EditDemo_save_as");
- /* construct new filename out of directory and new file */
- /* fields. */
- dirlen = strlen(dir);
- if (dirlen > 0 && dir[dirlen - 1] == '/') {
- sprintf(buf,"%s%s", dir, newfile);
- } else {
- sprintf(buf,"%s/%s", dir, newfile);
- }
- tt_message_arg_add(msg, TT_IN, "string", buf);
- tt_message_file_set(msg, file);
- tt_message_callback_add(msg, cntl_msg_callback);
- tt_message_send(msg);
- }
- /*
- * Handler for `file_menu (Edit)'.
- */
- void
- cntl_ui_edit(widget, client_data, call_data)
- Widget widget;
- XtPointer client_data, call_data;
- {
- write_footer("");
- cntl_edit(XmTextGetString(cntl_ui_file_field));
- }
- /*
- * Handler for `file_menu (Save)'.
- */
- void
- cntl_ui_save(widget, client_data, call_data)
- Widget widget;
- XtPointer client_data, call_data;
- {
- write_footer("");
- cntl_save(XmTextGetString(cntl_ui_file_field));
- }
- /*
- * Handler for `file_menu (Save as...)'.
- */
- cntl_ui_save_as(widget, client_data, call_data)
- Widget widget;
- XtPointer client_data, call_data;
- {
- write_footer("");
- show_popup(cntl_ui_saveas_popup);
- }
- /*
- * Handler for `file_menu (Close)'.
- */
- cntl_ui_close(widget, client_data, call_data)
- Widget widget;
- XtPointer client_data, call_data;
- {
- write_footer("");
- cntl_close(XmTextGetString(cntl_ui_file_field));
- }
- /*
- * Callback function for `save_as_button'.
- */
- void
- cntl_ui_save_as_button_handler(widget, client_data, call_data)
- Widget widget;
- XtPointer client_data, call_data;
- {
- write_footer("");
- cntl_save_as(XmTextGetString(cntl_ui_file_field),
- XmTextGetString(cntl_ui_save_as_directory),
- XmTextGetString(cntl_ui_new_filename));
- }
- /*
- * Function to insert the objid given into the scrolling lists of objects
- * for a file. Used inside tt_file_objects_query as it iterates through
- * all the ToolTalk objects in a file.
- */
- Tt_filter_action
- cntl_gather_specs(objid, list_count, acc)
- char *objid;
- void *list_count;
- void *acc;
- {
- int *i = (int *)list_count;
- XmString label;
- label = XmStringCreateSimple(objid);
- XmListAddItem(cntl_ui_olist, label, *i);
- XmStringFree(label);
- *i = (*i + 1);
- /* continue processing */
- return TT_FILTER_CONTINUE;
- }
-
-
- /*
- * Called to update the scrolling list of objects for a file. Uses
- * tt_file_objects_query to find all the ToolTalk objects.
- */
- int
- cntl_update_obj_panel()
- {
- static int list_item = 0;
- char *file;
- int i;
- cntl_objid = (char *)0;
- for (i = list_item; i >= 0; i--) {
- XmListDeletePos(cntl_ui_olist, i);
- }
- list_item = 0;
- file = XmTextGetString(cntl_ui_file_field);
- if (tt_file_objects_query(file,
- (Tt_filter_function)cntl_gather_specs,
- &list_item, NULL) != TT_OK) {
- write_footer("Couldn't query objects for file");
- return 0;
- }
- return 1;
- }
- /*
- * Callback function for "File objects..." menu item.
- */
- void
- cntl_ui_file_objects(widget, client_data, call_data)
- Widget widget;
- XtPointer client_data, call_data;
- {
- char *string;
- write_footer("");
- string = XmTextGetString(cntl_ui_file_field);
- if (cntl_update_obj_panel()) {
- (void) tt_file_join(XmTextGetString(cntl_ui_file_field));
- show_popup(cntl_ui_obj_popup);
- }
- }
- /*
- * Notify callback function for `cntl_ui_olist'.
- */
- void
- cntl_ui_olist_handler(widget, client_data, cbs)
- Widget widget;
- XtPointer client_data;
- XmListCallbackStruct *cbs;
- {
- char *string;
- string = XmStringUnparse(cbs->item, NULL, XmCHARSET_TEXT, XmCHARSET_TEXT,
- NULL, 0, XmOUTPUT_ALL);
- cntl_objid = strdup(string);
- XtFree (string);
- }
- /*
- * Notify callback function for `cntl_ui_hilite_button'.
- */
- void
- cntl_ui_hilite_button_handler(widget, client_data, call_data)
- Widget widget;
- XtPointer client_data, call_data;
- {
- Tt_message msg;
-
- if (cntl_objid == (char *)0) {
- write_footer("No object id selected");
- return;
- }
- msg = tt_orequest_create(cntl_objid, "hilite_obj");
- tt_message_arg_add(msg, TT_IN, "string", cntl_objid);
- tt_message_callback_add(msg, cntl_msg_callback);
- tt_message_send(msg);
- }
- /*
- * Initialize ui environment.
- */
- void
- cntl_ui_initialize()
- {
- Arg args[20];
- int n;
- Widget but;
- XmString label;
- void cntl_ui_saveas_popup_initialize();
- void cntl_ui_obj_popup_initialize();
- cntl_ui_base_window = XtAppCreateShell(0, "base_frame",
- applicationShellWidgetClass, dpy, 0, 0 );
- XtVaSetValues(cntl_ui_base_window,
- XmNwidth, 339,
- XmNheight, 100,
- XmNtitle, "Sun_EditDemo_cntl",
- 0);
- cntl_ui_base_controls = XtVaCreateManagedWidget("controls",
- xmFormWidgetClass, cntl_ui_base_window, 0 );
- n = 0;
- XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNleftOffset, 5); n++;
- XtSetArg(args[n], XmNrightOffset, 5); n++;
- XtSetArg(args[n], XmNtopOffset, 5); n++;
- cntl_ui_file_menu = (Widget) XmCreateMenuBar(cntl_ui_base_controls,
- "menubar", args, n);
- cntl_ui_file_button = (Widget) XmCreatePulldownMenu(cntl_ui_file_menu,
- "File", NULL, 0);
- label = XmStringCreateSimple("File");
- XtVaCreateManagedWidget("File",
- xmCascadeButtonWidgetClass, cntl_ui_file_menu,
- XmNlabelString, label,
- XmNmnemonic, 'F',
- XmNsubMenuId, cntl_ui_file_button,
- 0);
- XmStringFree(label);
- but = XtVaCreateManagedWidget("Edit",
- xmPushButtonWidgetClass, cntl_ui_file_button, 0);
- XtAddCallback(but, XmNactivateCallback,
- (XtCallbackProc) cntl_ui_edit, 0);
- but = XtVaCreateManagedWidget("Save",
- xmPushButtonWidgetClass, cntl_ui_file_button, 0);
- XtAddCallback(but, XmNactivateCallback,
- (XtCallbackProc) cntl_ui_save, 0);
- but = XtVaCreateManagedWidget("Save as...",
- xmPushButtonWidgetClass, cntl_ui_file_button, 0);
- XtAddCallback(but, XmNactivateCallback,
- (XtCallbackProc) cntl_ui_save_as, 0);
- but = XtVaCreateManagedWidget("File Objects...",
- xmPushButtonWidgetClass, cntl_ui_file_button, 0);
- XtAddCallback(but, XmNactivateCallback,
- (XtCallbackProc) cntl_ui_file_objects, 0);
- but = XtVaCreateManagedWidget("Close",
- xmPushButtonWidgetClass, cntl_ui_file_button, 0);
- XtAddCallback(but, XmNactivateCallback,
- (XtCallbackProc) cntl_ui_close, 0);
- XtManageChild(cntl_ui_file_menu);
- cntl_ui_file_label = XtVaCreateManagedWidget("File:",
- xmLabelWidgetClass, cntl_ui_base_controls,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, cntl_ui_file_menu,
- XmNtopOffset, 5,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 5,
- 0);
- label = XmStringCreateSimple("File:");
- XtVaSetValues(cntl_ui_file_label, XmNlabelString, label, 0);
- XmStringFree(label);
- cntl_ui_file_field = XtVaCreateManagedWidget("text",
- xmTextWidgetClass, cntl_ui_base_controls,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, cntl_ui_file_menu,
- XmNtopOffset, 5,
- XmNleftAttachment, XmATTACH_WIDGET,
- XmNleftWidget, cntl_ui_file_label,
- XmNleftOffset, 5,
- XmNrightAttachment, XmATTACH_FORM,
- XmNrightOffset, 5,
- 0);
- label = XmStringCreateSimple("");
- XtVaSetValues(cntl_ui_file_field, XmNlabelString, label, 0);
- XmStringFree(label);
- cntl_ui_message = XtVaCreateManagedWidget("message",
- xmLabelWidgetClass, cntl_ui_base_controls,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, cntl_ui_file_field,
- XmNtopOffset, 10,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 5,
- XmNrightAttachment, XmATTACH_FORM,
- XmNrightOffset, 5,
- XmNbottomAttachment, XmATTACH_FORM,
- XmNbottomOffset, 5,
- 0);
- label = XmStringCreateSimple("");
- XtVaSetValues(cntl_ui_message, XmNlabelString, label, 0);
- XmStringFree(label);
- XtRealizeWidget(cntl_ui_base_window);
- cntl_ui_saveas_popup_initialize();
- cntl_ui_obj_popup_initialize();
- }
- void
- cntl_ui_saveas_popup_initialize()
- {
- Arg args[10];
- int n;
- XmString label;
- n = 0;
- XtSetArg(args[n], XmNtitle, "Sun_EditMenu_cntl: Save As"); n++;
- XtSetArg(args[n], XmNmappedWhenManaged, False); n++;
- XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING); n++;
- cntl_ui_saveas_popup = XmCreateDialogShell(cntl_ui_base_window,
- "saveas", args, n);
- cntl_ui_saveas_controls = XtVaCreateManagedWidget("controls",
- xmFormWidgetClass, cntl_ui_saveas_popup,
- XmNrubberPositioning, False,
- XmNresizePolicy, XmRESIZE_ANY,
- XmNautoUnmanage, False,
- XmNwidth, 350,
- XmNheight, 120,
- 0);
- label = XmStringCreateSimple("Directory:");
- cntl_ui_save_as_dlabel = XtVaCreateManagedWidget("dlabel",
- xmLabelWidgetClass, cntl_ui_saveas_controls,
- XmNtopAttachment, XmATTACH_FORM,
- XmNtopOffset, 5,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 5,
- XmNlabelString, label,
- 0);
- XmStringFree(label);
- cntl_ui_save_as_directory = XtVaCreateManagedWidget("text",
- xmTextWidgetClass, cntl_ui_saveas_controls,
- XmNcolumns, 35,
- XmNtopAttachment, XmATTACH_FORM,
- XmNtopOffset, 5,
- XmNleftAttachment, XmATTACH_WIDGET,
- XmNleftWidget, cntl_ui_save_as_dlabel,
- XmNleftOffset, 5,
- XmNrightAttachment, XmATTACH_FORM,
- XmNrightOffset, 5,
- 0);
- label = XmStringCreateSimple("Filename:");
- cntl_ui_new_flabel = XtVaCreateManagedWidget("flabel",
- xmLabelWidgetClass, cntl_ui_saveas_controls,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, cntl_ui_save_as_directory,
- XmNtopOffset, 5,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 5,
- XmNlabelString, label,
- 0);
- XmStringFree(label);
- label = XmStringCreateSimple("");
- cntl_ui_new_filename = XtVaCreateManagedWidget("text",
- xmTextWidgetClass, cntl_ui_saveas_controls,
- XmNcolumns, 35,
- XmNlabelString, label,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, cntl_ui_save_as_directory,
- XmNtopOffset, 5,
- XmNleftAttachment, XmATTACH_WIDGET,
- XmNleftWidget, cntl_ui_save_as_dlabel,
- XmNleftOffset, 5,
- XmNrightAttachment, XmATTACH_FORM,
- XmNrightOffset, 5,
- 0);
- XmStringFree(label);
- label = XmStringCreateSimple("Save");
- cntl_ui_save_as_button = XtVaCreateManagedWidget("button",
- xmPushButtonWidgetClass, cntl_ui_saveas_controls,
- XmNleftAttachment, XmATTACH_FORM,
- XmNleftOffset, 5,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, cntl_ui_new_filename,
- XmNtopOffset, 5,
- XmNbottomAttachment, XmATTACH_FORM,
- XmNbottomOffset, 5,
- XmNlabelString, label,
- 0);
- XmStringFree(label);
- XtAddCallback(cntl_ui_save_as_button,
- XmNactivateCallback, cntl_ui_save_as_button_handler, 0);
- XtManageChild(cntl_ui_saveas_controls);
- add_delete_callback(cntl_ui_saveas_popup);
- }
- void
- cntl_ui_obj_popup_initialize()
- {
- int n;
- Arg args[20];
- XmString label;
- n = 0;
- XtSetArg(args[n], XmNtitle, "Sun_EditMenu_cntl: File Objects"); n++;
- XtSetArg(args[n], XmNmappedWhenManaged, False); n++;
- XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING); n++;
- cntl_ui_obj_popup = XmCreateDialogShell(cntl_ui_base_window,
- "object", args, n);
- cntl_ui_obj_controls = XtVaCreateManagedWidget("controls",
- xmFormWidgetClass, cntl_ui_obj_popup,
- XmNrubberPositioning, False,
- XmNresizePolicy, XmRESIZE_ANY,
- XmNautoUnmanage, False,
- XmNwidth, 350,
- XmNheight, 120,
- 0);
- n = 0;
- label = XmStringCreateSimple("File Objects:");
- XtSetArg(args[n], XmNlabelString, label); n++;
- XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNleftOffset, 5); n++;
- XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNtopOffset, 5); n++;
- cntl_ui_olist_label =
- XmCreateLabel(cntl_ui_obj_controls, "label", args, n);
- XmStringFree(label);
- XtManageChild(cntl_ui_olist_label);
- n = 0;
- XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNtopOffset, 5); n++;
- XtSetArg(args[n], XmNvisibleItemCount, 4); n++;
- XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
- XtSetArg(args[n], XmNleftWidget, cntl_ui_olist_label); n++;
- XtSetArg(args[n], XmNleftOffset, 5); n++;
- XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
- XtSetArg(args[n], XmNrightOffset, 5); n++;
- XtSetArg(args[n], XmNresizable, True); n++;
- cntl_ui_olist =
- XmCreateScrolledList(cntl_ui_obj_controls, "olist", args, n);
- XtAddCallback(cntl_ui_olist,
- XmNsingleSelectionCallback, cntl_ui_olist_handler, 0);
- XtManageChild(cntl_ui_olist);
- label = XmStringCreateSimple("Display");
- cntl_ui_hilite_button = XtVaCreateManagedWidget("button",
- xmPushButtonWidgetClass, cntl_ui_obj_controls,
- XmNtopAttachment, XmATTACH_WIDGET,
- XmNtopWidget, cntl_ui_olist,
- XmNtopOffset, 5,
- XmNbottomAttachment, XmATTACH_FORM,
- XmNbottomOffset, 5,
- XmNlabelString, label,
- 0);
- XmStringFree(label);
- XtAddCallback(cntl_ui_hilite_button,
- XmNactivateCallback, cntl_ui_hilite_button_handler, 0);
- XtManageChild(cntl_ui_obj_controls);
- add_delete_callback(cntl_ui_obj_popup);
- }
- int
- cntl_is_same_file(f1, f2)
- char *f1;
- char *f2;
- {
- struct stat f1_stat;
- struct stat f2_stat;
- if (!strcmp(f1,f2)) {
- return(1);
- }
- return((0 == stat(f1, &f1_stat)) &&
- (0 == stat(f2, &f2_stat)) &&
- (f1_stat.st_ino == f2_stat.st_ino) &&
- (f1_stat.st_dev == f2_stat.st_dev));
- }
|