windowtitle.c
来自「nedit 是一款linux下的开发源码的功能强大的编辑器」· C语言 代码 · 共 1,504 行 · 第 1/4 页
C
1,504 行
titlePtr = safeStrCpy(titlePtr, titleEnd, GetUserName()); break; case '%': /* escaped % */ titlePtr = safeCharAdd(titlePtr, titleEnd, '%'); break; case '*': /* short file status ? */ fileStatusPresent = True; if (*titleFormat && *titleFormat == 'S') { ++titleFormat; shortStatus = True; if (IS_ANY_LOCKED_IGNORING_USER(lockReasons) && fileChanged) titlePtr = safeStrCpy(titlePtr, titleEnd, "RO*"); else if (IS_ANY_LOCKED_IGNORING_USER(lockReasons)) titlePtr = safeStrCpy(titlePtr, titleEnd, "RO"); else if (IS_USER_LOCKED(lockReasons) && fileChanged) titlePtr = safeStrCpy(titlePtr, titleEnd, "LO*"); else if (IS_USER_LOCKED(lockReasons)) titlePtr = safeStrCpy(titlePtr, titleEnd, "LO"); else if (fileChanged) titlePtr = safeStrCpy(titlePtr, titleEnd, "*"); break; } /* fall-through */ default: titlePtr = safeCharAdd(titlePtr, titleEnd, c); break; } } else { titlePtr = safeCharAdd(titlePtr, titleEnd, c); } } compressWindowTitle(title); if (title[0] == 0) { sprintf(&title[0], "<empty>"); /* For preview purposes only */ } if (etDialog.form) { /* Prevent recursive callback loop */ etDialog.suppressFormatUpdate = True; /* Sync radio buttons with format string (in case the user entered the format manually) */ XmToggleButtonSetState(etDialog.fileW, fileNamePresent, False); XmToggleButtonSetState(etDialog.statusW, fileStatusPresent, False); XmToggleButtonSetState(etDialog.serverW, serverNamePresent, False);#ifndef VMS XmToggleButtonSetState(etDialog.ccW, clearCasePresent, False);#endif /* VMS */ XmToggleButtonSetState(etDialog.dirW, dirNamePresent, False); XmToggleButtonSetState(etDialog.hostW, hostNamePresent, False); XmToggleButtonSetState(etDialog.nameW, userNamePresent, False); XtSetSensitive(etDialog.shortStatusW, fileStatusPresent); if (fileStatusPresent) { XmToggleButtonSetState(etDialog.shortStatusW, shortStatus, False); } /* Directory components are also sensitive to presence of dir */ XtSetSensitive(etDialog.ndirW, dirNamePresent); XtSetSensitive(etDialog.mdirW, dirNamePresent); if (dirNamePresent) /* Avoid erasing number when not active */ { if (noOfComponents >= 0) { char* value = XmTextGetString(etDialog.ndirW); char buf[2]; sprintf(&buf[0], "%d", noOfComponents); if (strcmp(&buf[0], value)) /* Don't overwrite unless diff. */ SetIntText(etDialog.ndirW, noOfComponents); XtFree(value); } else { XmTextSetString(etDialog.ndirW, ""); } } /* Enable/disable test buttons, depending on presence of codes */ XtSetSensitive(etDialog.oFileChangedW, fileStatusPresent); XtSetSensitive(etDialog.oFileReadOnlyW, fileStatusPresent); XtSetSensitive(etDialog.oFileLockedW, fileStatusPresent && !IS_PERM_LOCKED(etDialog.lockReasons)); XtSetSensitive(etDialog.oServerNameW, serverNamePresent); #ifndef VMS XtSetSensitive(etDialog.oCcViewTagW, clearCasePresent); XtSetSensitive(etDialog.oServerEqualViewW, clearCasePresent && serverNamePresent);#endif /* VMS */ XtSetSensitive(etDialog.oDirW, dirNamePresent); etDialog.suppressFormatUpdate = False; } return(title);}/* a utility that sets the values of all toggle buttons */static void setToggleButtons(void){ XmToggleButtonSetState(etDialog.oDirW, etDialog.filenameSet == True, False); XmToggleButtonSetState(etDialog.oFileChangedW, etDialog.fileChanged == True, False); XmToggleButtonSetState(etDialog.oFileReadOnlyW, IS_PERM_LOCKED(etDialog.lockReasons), False); XmToggleButtonSetState(etDialog.oFileLockedW, IS_USER_LOCKED(etDialog.lockReasons), False); /* Read-only takes precedence on locked */ XtSetSensitive(etDialog.oFileLockedW, !IS_PERM_LOCKED(etDialog.lockReasons));#ifdef VMS XmToggleButtonSetState(etDialog.oServerNameW, etDialog.isServer, False);#else XmToggleButtonSetState(etDialog.oCcViewTagW, GetClearCaseViewTag() != NULL, False); XmToggleButtonSetState(etDialog.oServerNameW, etDialog.isServer, False); if (GetClearCaseViewTag() != NULL && etDialog.isServer && GetPrefServerName()[0] != '\0' && strcmp(GetClearCaseViewTag(), GetPrefServerName()) == 0) { XmToggleButtonSetState(etDialog.oServerEqualViewW, True, False); } else { XmToggleButtonSetState(etDialog.oServerEqualViewW, False, False); }#endif /* VMS */} static void formatChangedCB(Widget w, XtPointer clientData, XtPointer callData){ char *format; int filenameSet = XmToggleButtonGetState(etDialog.oDirW); char *title; const char* serverName; if (etDialog.suppressFormatUpdate) { return; /* Prevent recursive feedback */ } format = XmTextGetString(etDialog.formatW); #ifndef VMS if (XmToggleButtonGetState(etDialog.oServerEqualViewW) && XmToggleButtonGetState(etDialog.ccW)) { serverName = etDialog.viewTag; } else#endif /* VMS */ { serverName = XmToggleButtonGetState(etDialog.oServerNameW) ? etDialog.serverName : ""; } title = FormatWindowTitle( etDialog.filename, etDialog.filenameSet == True ? etDialog.path : "/a/very/long/path/used/as/example/",#ifdef VMS NULL,#else XmToggleButtonGetState(etDialog.oCcViewTagW) ? etDialog.viewTag : NULL,#endif /* VMS */ serverName, etDialog.isServer, filenameSet, etDialog.lockReasons, XmToggleButtonGetState(etDialog.oFileChangedW), format); XtFree(format); XmTextFieldSetString(etDialog.previewW, title);}#ifndef VMSstatic void ccViewTagCB(Widget w, XtPointer clientData, XtPointer callData){ if (XmToggleButtonGetState(w) == False) { XmToggleButtonSetState(etDialog.oServerEqualViewW, False, False); } formatChangedCB(w, clientData, callData);}#endif /* VMS */static void serverNameCB(Widget w, XtPointer clientData, XtPointer callData){ if (XmToggleButtonGetState(w) == False) { XmToggleButtonSetState(etDialog.oServerEqualViewW, False, False); } etDialog.isServer = XmToggleButtonGetState(w); formatChangedCB(w, clientData, callData);} static void fileChangedCB(Widget w, XtPointer clientData, XtPointer callData){ etDialog.fileChanged = XmToggleButtonGetState(w); formatChangedCB(w, clientData, callData);}static void fileLockedCB(Widget w, XtPointer clientData, XtPointer callData){ SET_USER_LOCKED(etDialog.lockReasons, XmToggleButtonGetState(w)); formatChangedCB(w, clientData, callData);}static void fileReadOnlyCB(Widget w, XtPointer clientData, XtPointer callData){ SET_PERM_LOCKED(etDialog.lockReasons, XmToggleButtonGetState(w)); formatChangedCB(w, clientData, callData);}#ifndef VMSstatic void serverEqualViewCB(Widget w, XtPointer clientData, XtPointer callData){ if (XmToggleButtonGetState(w) == True) { XmToggleButtonSetState(etDialog.oCcViewTagW, True, False); XmToggleButtonSetState(etDialog.oServerNameW, True, False); etDialog.isServer = True; } formatChangedCB(w, clientData, callData);} #endif /* VMS */static void applyCB(Widget w, XtPointer clientData, XtPointer callData){ char *format = XmTextGetString(etDialog.formatW); /* pop down the dialog *//* XtUnmanageChild(etDialog.form); */ if (strcmp(format, GetPrefTitleFormat()) != 0) { SetPrefTitleFormat(format); } XtFree(format);}static void dismissCB(Widget w, XtPointer clientData, XtPointer callData){ /* pop down the dialog */ XtUnmanageChild(etDialog.form);}static void restoreCB(Widget w, XtPointer clientData, XtPointer callData){ XmTextSetString(etDialog.formatW, "{%c} [%s] %f (%S) - %d");}static void helpCB(Widget w, XtPointer clientData, XtPointer callData){ Help(HELP_CUSTOM_TITLE_DIALOG);}static void wtDestroyCB(Widget w, XtPointer clientData, XtPointer callData){ if (w == etDialog.form) /* Prevent disconnecting the replacing dialog */ etDialog.form = NULL;}static void wtUnmapCB(Widget w, XtPointer clientData, XtPointer callData){ if (etDialog.form == w) /* Prevent destroying the replacing dialog */ XtDestroyWidget(etDialog.form);}static void appendToFormat(const char* string){ char *format = XmTextGetString(etDialog.formatW); char *buf = XtMalloc(strlen(string) + strlen(format) + 1); strcpy(buf, format); strcat(buf, string); XmTextSetString(etDialog.formatW, buf); XtFree(format); XtFree(buf);}static void removeFromFormat(const char* string){ char *format = XmTextGetString(etDialog.formatW); char* pos; /* There can be multiple occurences */ while ((pos = strstr(format, string))) { /* If the string is preceded or followed by a brace, include the brace(s) for removal */ char* start = pos; char* end = pos + strlen(string); char post = *end; if (post == '}' || post == ')' || post == ']' || post == '>') { end += 1; post = *end; } if (start > format) { char pre = *(start-1); if (pre == '{' || pre == '(' || pre == '[' || pre == '<') start -= 1; } if (start > format) { char pre = *(start-1); /* If there is a space in front and behind, remove one space (there can be more spaces, but in that case it is likely that the user entered them manually); also remove trailing space */ if (pre == ' ' && post == ' ') { end += 1; } else if (pre == ' ' && post == (char)0) { /* Remove (1) trailing space */ start -= 1; } } /* Contract the string: move end to start */ strcpy(start, end); } /* Remove leading and trailing space */ pos = format; while (*pos == ' ') ++pos; strcpy(format, pos); pos = format + strlen(format) - 1; while (pos >= format && *pos == ' ') { --pos; } *(pos+1) = (char)0; XmTextSetString(etDialog.formatW, format); XtFree(format);}static void toggleFileCB(Widget w, XtPointer clientData, XtPointer callData){ if (XmToggleButtonGetState(etDialog.fileW)) appendToFormat(" %f"); else removeFromFormat("%f");}static void toggleServerCB(Widget w, XtPointer clientData, XtPointer callData){ if (XmToggleButtonGetState(etDialog.serverW)) appendToFormat(" [%s]"); else removeFromFormat("%s");}static void toggleHostCB(Widget w, XtPointer clientData, XtPointer callData){
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?