⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selfile.c

📁 Graphviz - Graph Drawing Programs from AT&T Research and Lucent Bell Labs See doc/build.html for
💻 C
📖 第 1 页 / 共 2 页
字号:
        (XtPointer) NULL    );    i = 0;    XtSetArg (arglist[i], XtNwidth, listWidth); i++;    XtSetArg (arglist[i], XtNheight, listHeight); i++;    XtSetArg (arglist[i], XtNborderColor, SFfore); i++;    XtSetArg (arglist[i], XtNfromVert, selFileHScroll); i++;    XtSetArg (arglist[i], XtNvertDistance, 10); i++;    XtSetArg (arglist[i], XtNtop, XtChainTop); i++;    XtSetArg (arglist[i], XtNbottom, XtChainTop); i++;    XtSetArg (arglist[i], XtNleft, XtChainLeft); i++;    XtSetArg (arglist[i], XtNright, XtChainLeft); i++;    selFileLists[0] = XtCreateManagedWidget (        "selFileList1", compositeWidgetClass, selFileForm, arglist, i    );    i = 0;    XtSetArg (arglist[i], XtNwidth, listWidth); i++;    XtSetArg (arglist[i], XtNheight, listHeight); i++;    XtSetArg (arglist[i], XtNborderColor, SFfore); i++;    XtSetArg (arglist[i], XtNfromHoriz, selFileLists[0]); i++;    XtSetArg (arglist[i], XtNfromVert, selFileHScroll); i++;    XtSetArg (arglist[i], XtNhorizDistance, listSpacing); i++;    XtSetArg (arglist[i], XtNvertDistance, 10); i++;    XtSetArg (arglist[i], XtNtop, XtChainTop); i++;    XtSetArg (arglist[i], XtNbottom, XtChainTop); i++;    XtSetArg (arglist[i], XtNleft, XtChainLeft); i++;    XtSetArg (arglist[i], XtNright, XtChainLeft); i++;    selFileLists[1] = XtCreateManagedWidget (        "selFileList2", compositeWidgetClass, selFileForm, arglist, i    );    i = 0;    XtSetArg (arglist[i], XtNwidth, listWidth); i++;    XtSetArg (arglist[i], XtNheight, listHeight); i++;    XtSetArg (arglist[i], XtNborderColor, SFfore); i++;    XtSetArg (arglist[i], XtNfromHoriz, selFileLists[1]); i++;    XtSetArg (arglist[i], XtNfromVert, selFileHScroll); i++;    XtSetArg (arglist[i], XtNhorizDistance, listSpacing); i++;    XtSetArg (arglist[i], XtNvertDistance, 10); i++;    XtSetArg (arglist[i], XtNtop, XtChainTop); i++;    XtSetArg (arglist[i], XtNbottom, XtChainTop); i++;    XtSetArg (arglist[i], XtNleft, XtChainLeft); i++;    XtSetArg (arglist[i], XtNright, XtChainLeft); i++;    selFileLists[2] = XtCreateManagedWidget (        "selFileList3", compositeWidgetClass, selFileForm, arglist, i    );    for (n = 0; n < 3; n++) {        i = 0;        XtSetArg (arglist[i], XtNx, vScrollX); i++;        XtSetArg (arglist[i], XtNy, vScrollY); i++;        XtSetArg (arglist[i], XtNwidth, scrollThickness); i++;        XtSetArg (arglist[i], XtNheight, SFvScrollHeight); i++;        XtSetArg (arglist[i], XtNborderColor, SFfore); i++;        selFileVScrolls[n] = XtCreateManagedWidget (            "selFileVScroll", scrollbarWidgetClass, selFileLists[n], arglist, i        );        XtAddCallback (            selFileVScrolls[n], XtNjumpProc,            SFvFloatSliderMovedCallback, (XtPointer) n        );        XtAddCallback (            selFileVScrolls[n], XtNscrollProc,            SFvAreaSelectedCallback, (XtPointer) n        );        i = 0;        XtSetArg (arglist[i], XtNorientation, XtorientHorizontal); i++;        XtSetArg (arglist[i], XtNx, hScrollX); i++;        XtSetArg (arglist[i], XtNy, hScrollY); i++;        XtSetArg (arglist[i], XtNwidth, SFhScrollWidth); i++;        XtSetArg (arglist[i], XtNheight, scrollThickness); i++;        XtSetArg (arglist[i], XtNborderColor, SFfore); i++;        selFileHScrolls[n] = XtCreateManagedWidget (            "selFileHScroll", scrollbarWidgetClass, selFileLists[n], arglist, i        );        XtAddCallback (            selFileHScrolls[n], XtNjumpProc,            SFhSliderMovedCallback, (XtPointer) n        );        XtAddCallback (            selFileHScrolls[n], XtNscrollProc,            SFhAreaSelectedCallback, (XtPointer) n        );    }    i = 0;    XtSetArg (arglist[i], XtNlabel, ok); i++;    XtSetArg (arglist[i], XtNresizable, True); i++;    XtSetArg (arglist[i], XtNcallback, SFokSelect); i++;    XtSetArg (arglist[i], XtNborderColor, SFfore); i++;    XtSetArg (arglist[i], XtNfromVert, selFileLists[0]); i++;    XtSetArg (arglist[i], XtNvertDistance, 30); i++;    XtSetArg (arglist[i], XtNtop, XtChainTop); i++;    XtSetArg (arglist[i], XtNbottom, XtChainTop); i++;    XtSetArg (arglist[i], XtNleft, XtChainLeft); i++;    XtSetArg (arglist[i], XtNright, XtChainLeft); i++;    selFileOK = XtCreateManagedWidget (        "selFileOK", commandWidgetClass, selFileForm, arglist, i    );    i = 0;    XtSetArg (arglist[i], XtNlabel, cancel); i++;    XtSetArg (arglist[i], XtNresizable, True); i++;    XtSetArg (arglist[i], XtNcallback, SFcancelSelect); i++;    XtSetArg (arglist[i], XtNborderColor, SFfore); i++;    XtSetArg (arglist[i], XtNfromHoriz, selFileOK); i++;    XtSetArg (arglist[i], XtNfromVert, selFileLists[0]); i++;    XtSetArg (arglist[i], XtNhorizDistance, 30); i++;    XtSetArg (arglist[i], XtNvertDistance, 30); i++;    XtSetArg (arglist[i], XtNtop, XtChainTop); i++;    XtSetArg (arglist[i], XtNbottom, XtChainTop); i++;    XtSetArg (arglist[i], XtNleft, XtChainLeft); i++;    XtSetArg (arglist[i], XtNright, XtChainLeft); i++;    selFileCancel = XtCreateManagedWidget (        "selFileCancel", commandWidgetClass, selFileForm, arglist, i    );    XtSetMappedWhenManaged (selFile, False);    XtRealizeWidget (selFile);    /* Add WM_DELETE_WINDOW protocol */    SFwmDeleteWindow = XInternAtom (SFdisplay, "WM_DELETE_WINDOW", False);    XSetWMProtocols (SFdisplay, XtWindow (selFile), &SFwmDeleteWindow, 1);    SFcreateGC ();    xtermCursor = XCreateFontCursor (SFdisplay, XC_xterm);    sbRightArrowCursor = XCreateFontCursor (SFdisplay, XC_sb_right_arrow);    dotCursor = XCreateFontCursor (SFdisplay, XC_dot);    XDefineCursor (SFdisplay, XtWindow (selFileForm), xtermCursor);    XDefineCursor (SFdisplay, XtWindow (selFileField), xtermCursor);    for (n = 0; n < 3; n++) {        XDefineCursor (            SFdisplay, XtWindow (selFileLists[n]), sbRightArrowCursor        );    }    XDefineCursor (SFdisplay, XtWindow (selFileOK), dotCursor);    XDefineCursor (SFdisplay, XtWindow (selFileCancel), dotCursor);    for (n = 0; n < 3; n++) {        XtAddEventHandler (            selFileLists[n], ExposureMask, True,            SFexposeList, (XtPointer) n        );        XtAddEventHandler (            selFileLists[n], EnterWindowMask, False,            SFenterList, (XtPointer) n        );        XtAddEventHandler (            selFileLists[n], LeaveWindowMask, False,            SFleaveList, (XtPointer) n        );        XtAddEventHandler (            selFileLists[n], PointerMotionMask, False,            SFmotionList, (XtPointer) n        );        XtAddEventHandler (            selFileLists[n], ButtonPressMask, False,            SFbuttonPressList, (XtPointer) n        );        XtAddEventHandler (            selFileLists[n], ButtonReleaseMask, False,            SFbuttonReleaseList, (XtPointer) n        );    }    XtAddEventHandler (        selFileField, KeyPressMask, False,        SFmodVerifyCallback, (XtPointer) NULL    );    SFapp = XtWidgetToApplicationContext (selFile);}/* position widget under the cursor */static void SFpositionWidget (Widget w) {    Arg args[3];    Cardinal num_args;    Dimension width, height, b_width;    int x, y, max_x, max_y;    Window root, child;    int dummyx, dummyy;    unsigned int dummymask;    XQueryPointer (        XtDisplay (w), XtWindow (w), &root, &child, &x, &y,        &dummyx, &dummyy, &dummymask    );    num_args = 0;    XtSetArg (args[num_args], XtNwidth, &width); num_args++;    XtSetArg (args[num_args], XtNheight, &height); num_args++;    XtSetArg (args[num_args], XtNborderWidth, &b_width); num_args++;    XtGetValues (w, args, num_args);    width += 2 * b_width;    height += 2 * b_width;    x -= ((Position) width / 2);    if (x < 0)        x = 0;    if (x > (max_x = (Position) (XtScreen (w)->width - width)))        x = max_x;    y -= ((Position) height / 2);    if (y < 0)        y = 0;    if (y > (max_y = (Position) (XtScreen (w)->height - height)))        y = max_y;    num_args = 0;    XtSetArg (args[num_args], XtNx, x); num_args++;    XtSetArg (args[num_args], XtNy, y); num_args++;    XtSetValues (w, args, num_args);}FILE *SFopenFile (char *name, char *mode, char *prompt, char *failed) {    Arg args[1];    FILE *fp;    SFchdir (SFstartDir);    if ((fp = fopen (name, mode)) == NULL) {        char *buf;#ifdef HAVE_STRERROR        char *errormsg = strerror (errno);        if (errormsg) {            buf = XtMalloc (                strlen (failed) + strlen (errormsg) + strlen (prompt) + 2            );            strcpy (buf, failed);            strcat (buf, errormsg);            strcat (buf, "\n");#else        if (errno < sys_nerr) {            buf = XtMalloc (                strlen (failed) + strlen (sys_errlist[errno]) +                strlen (prompt) + 2            );            strcpy (buf, failed);            strcat (buf, sys_errlist[errno]);            strcat (buf, "\n");            strcat (buf, prompt);#endif        } else {            buf = XtMalloc (strlen (failed) + strlen (prompt) + 2);            strcpy (buf, failed);            strcat (buf, "\n");            strcat (buf, prompt);        }        XtSetArg (args[0], XtNlabel, buf);        XtSetValues (selFilePrompt, args, ONE);        XtFree (buf);        return NULL;    }    return fp;}void SFtextChanged (void) {    if ((SFtextBuffer[0] == '/') || (SFtextBuffer[0] == '~')) {        strcpy (SFcurrentPath, SFtextBuffer);        SFtextPos = XawTextGetInsertionPoint (selFileField);    } else {        strcat (strcpy (SFcurrentPath, SFstartDir), SFtextBuffer);        SFtextPos = XawTextGetInsertionPoint (            selFileField        ) + strlen (SFstartDir);    }    if (!SFworkProcAdded) {        SFworkProcId = XtAppAddWorkProc (SFapp, SFworkProc, NULL);        SFworkProcAdded = 1;    }    SFupdatePath ();}static void SFprepareToReturn (void) {    SFstatus = SEL_FILE_NULL;    XtRemoveGrab (selFile);    XtUnmapWidget (selFile);    XtRemoveTimeOut (SFdirModTimerId);    if (SFchdir (SFstartDir)) {        XtAppError (SFapp, "XsraSelFile: can't return to current directory");    }}intXsraSelFile (    Widget toplevel, char *prompt, char *ok, char *cancel, char *failed,    char *init_path, char *mode,    int (*show_entry) (char *, char **, struct stat *),    char *name_return, int name_size) {    static int firstTime = 1;    Cardinal   i;    Arg        arglist[20];    XEvent     event;    if (!prompt) {        prompt = "Pathname:";    }    if (!ok) {        ok = "OK";    }    if (!cancel) {        cancel = "Cancel";    }    if (firstTime) {        firstTime = 0;        SFdisplay = XtDisplay (toplevel);        SFcreateWidgets (toplevel, prompt, ok, cancel);    } else {        i = 0;        XtSetArg (arglist[i], XtNlabel, prompt); i++;        XtSetValues (selFilePrompt, arglist, i);        i = 0;        XtSetArg (arglist[i], XtNlabel, ok); i++;        XtSetValues (selFileOK, arglist, i);        i = 0;        XtSetArg (arglist[i], XtNlabel, cancel); i++;        XtSetValues (selFileCancel, arglist, i);    }    SFpositionWidget (selFile);    XtMapWidget (selFile);    if (!getcwd (SFstartDir, MAXPATHLEN)) {        XtAppError (SFapp, "XsraSelFile: can't get current directory");    }    strcat (SFstartDir, "/");    strcpy (SFcurrentDir, SFstartDir);    if (init_path) {        if (init_path[0] == '/') {            strcpy (SFcurrentPath, init_path);            if (strncmp (SFcurrentPath, SFstartDir, strlen (SFstartDir))) {                SFsetText (SFcurrentPath);            } else {                SFsetText (& (SFcurrentPath[strlen (SFstartDir)]));            }        } else {            strcat (strcpy (SFcurrentPath, SFstartDir), init_path);            SFsetText (& (SFcurrentPath[strlen (SFstartDir)]));        }    } else {        strcpy (SFcurrentPath, SFstartDir);    }    SFfunc = show_entry;    SFtextChanged ();    XtAddGrab (selFile, True, True);    SFdirModTimerId = XtAppAddTimeOut (        SFapp, (unsigned long) 1000, SFdirModTimer, (XtPointer) NULL    );    while (1) {        XtAppNextEvent (SFapp, &event);        XtDispatchEvent (&event);        switch (SFstatus) {        case SEL_FILE_TEXT:            SFstatus = SEL_FILE_NULL;            SFtextChanged ();            break;        case SEL_FILE_OK:            strncpy (name_return, SFtextBuffer, name_size);            SFprepareToReturn ();            if (SFworkProcAdded) {                XtRemoveWorkProc (SFworkProcId);                SFworkProcAdded = 0;            }            return 1;        case SEL_FILE_CANCEL:            SFprepareToReturn ();            return 0;        case SEL_FILE_NULL:            break;        }    }    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -