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 + -
显示快捷键?