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

📄 mimerichtextinit.c

📁 linux下的E_MAIL客户端源码
💻 C
📖 第 1 页 / 共 5 页
字号:
   priv->hsbVal = priv->vsbVal = 0;   priv->hsbMax = priv->vsbMax = 0;   args.Reset();   args.ResizePolicy(XmRESIZE_NONE);   args.MarginWidth(0);   args.MarginHeight(0);   args.ShadowThickness(0);   args.BorderWidth(0);   args.UserData(this);   priv->textDA = XmCreateDrawingArea(parent, "richTextArea", ARGS);//// Read and load fonts so we can get size of rows and columns//   priv->defPlainFontName = get_string(cl, MainWidget(), "font",				       "-misc-fixed-medium-r-normal--13*");   priv->defFixedFontName = get_string(cl, MainWidget(), "fixedFont",				       "-misc-fixed-medium-r-normal--13*");   priv->plainFont    = priv->defPlainFontName;   priv->fixedFont    = priv->defFixedFontName;   priv->lineSpacing  = (char)get_int(cl, MainWidget(), "lineSpacing",  1);   priv->forceFixed   = get_boolean(cl, MainWidget(), "forceFixed",   False);//// Set the margins//   priv->marginWd  = (Dimension)get_int(cl, MainWidget(), "marginWidth",  5);   priv->marginHt  = (Dimension)get_int(cl, MainWidget(), "marginHeight", 5);   priv->marginWd2 = (Dimension)2 * priv->marginWd;   priv->marginHt2 = (Dimension)2 * priv->marginHt;//// Set width based on row and column counts if necessary//   priv->singleLine = get_boolean(cl, MainWidget(), "singleLine",   False);   int	colCount = get_int(cl, MainWidget(), "columnCount", 0);   int	rowCount = get_int(cl, MainWidget(), "rowCount",    0);//// See if rows or columns was passed in//   for (i=0; i<argc; i++) {      Arg	*arg = &argv[i];      if ( strcasecmp(arg->name, "rows") == 0 )	 rowCount = (int)arg->value;      else if ( strcasecmp(arg->name, "columns") == 0 )	 colCount = (int)arg->value;   }   if ( priv->singleLine ) rowCount = 1;//// Set size based on rows and columns if necessary//   if ( colCount > 0 ) {      priv->drawWd = CharWidth() * colCount + priv->marginWd2;      XtVaSetValues(priv->textDA, XmNwidth, priv->drawWd, NULL);   }   else      XtVaGetValues(priv->textDA, XmNwidth, &priv->drawWd, NULL);   if ( rowCount > 0 ) {      priv->drawHt = ((CharHeight() + priv->lineSpacing) * rowCount)      		   - priv->lineSpacing + 2/*for accents on top line*/		   + priv->marginHt2;      XtVaSetValues(priv->textDA, XmNheight, priv->drawHt, NULL);   }   else      XtVaGetValues(priv->textDA, XmNheight, &priv->drawHt, NULL);   priv->maxWd = priv->drawWd;   priv->maxHt = priv->drawHt;   XtManageChild(priv->textDA);   if ( !priv->textSW ) {      XtManageChild(priv->textFrame);      XtManageChild(priv->hlForm);      XtManageChild(priv->textHSB);      XtManageChild(priv->textVSB);   }   XtAddCallback(priv->textDA, XmNexposeCallback,   		 (XtCallbackProc)MimeRichTextP::HandleExpose, priv);//// Read resources//   priv->tabStop     = (char)get_int(cl, MainWidget(), "tabStop",	 8);   priv->indentWd    =       get_int(cl, MainWidget(), "indentWidth", 32);   priv->autoScrollInterval		     = get_int(cl, MainWidget(), "autoScrollInterval", 10);   priv->maxLength   = get_int(cl, MainWidget(), "maxTextLength", 200000);   priv->timerOk     = get_boolean(cl, MainWidget(), "timerOk", True);   StringC	typeStr = get_string(cl, MainWidget(), "textType", "plain");   if ( strcasecmp(typeStr, "rich")          == 0 ||        strcasecmp(typeStr, "richtext")      == 0 ||        strcasecmp(typeStr, "text/richtext") == 0 )      priv->textType = TT_RICH;   else if ( strcasecmp(typeStr, "enriched")      == 0 ||	     strcasecmp(typeStr, "text/enriched") == 0 )      priv->textType = TT_ENRICHED;   else if ( strcasecmp(typeStr, "html")        == 0 ||	     strcasecmp(typeStr, "x-html")      == 0 ||	     strcasecmp(typeStr, "text/x-html") == 0 ||	     strcasecmp(typeStr, "text/html")   == 0 )      priv->textType = TT_HTML;   else      priv->textType = TT_PLAIN;   if ( priv->singleLine )      priv->resizeWidth = True;   else      priv->resizeWidth = get_boolean(cl, MainWidget(), "resizeWidth", False);   priv->fgColor  =      get_color(cl, MainWidget(), "foreground",     XtDefaultForeground);   priv->bgColor  =      get_color(cl, MainWidget(), "background",     XtDefaultBackground);   priv->urlColor =      get_color(cl, MainWidget(), "urlColor",       priv->fgColor);   priv->linkColor =      get_color(cl, MainWidget(), "linkColor",      priv->urlColor);   priv->hlColor  =      get_color(cl, MainWidget(), "highlightColor", priv->fgColor);   if ( priv->hlForm )      XtVaGetValues(priv->hlForm, XmNbackground, &priv->hlFormBg, NULL);   priv->cursorColor = priv->fgColor ^ priv->bgColor;   XtVaSetValues(priv->textDA, XmNbackground, priv->bgColor,			       XmNforeground, priv->fgColor, NULL);//// Initialize character set//   char	*cs = StrCaseStr(priv->defPlainFontName, "iso8859");   if ( cs ) priv->defCharset = cs;   else	     priv->defCharset = "us-ascii";   priv->defCharset = get_string(cl, MainWidget(), "charset", priv->defCharset);   if ( priv->defCharset.StartsWith("iso-", IGNORE_CASE) )      priv->defCharset(3,1) = "";	// Remove '-'   if ( debuglev > 1 ) cout <<"Character set is " <<priv->defCharset <<endl;   priv->curCharset = AddCharset(priv->defCharset);//// Get size of excerpt string//   priv->excerptStr = get_string(cl, MainWidget(), "excerptPrefix", "> ");   int	dir, asc, dsc;   XCharStruct	size;   XTextExtents(priv->plainFont.xfont, priv->excerptStr,   		priv->excerptStr.size(), &dir, &asc, &dsc, &size);   priv->excerptWd = size.width;//// Add actions and translations if necessary//   static Boolean       actionsAdded = False;   if ( !actionsAdded ) {      XtAppAddActions(halApp->context, priv->actions, XtNumber(priv->actions));      actionsAdded = True;//// These translations cannot be specified in a resource file due to the fact//    that Motif overrides them after the resource file is processed.//      priv->defaultTrans1 = XtParseTranslationTable("\c s	<Key>osfLeft:		MimeRichTextC-select-left-word()\n\c	<Key>osfLeft:		MimeRichTextC-move-left-word()\n\s	<Key>osfLeft:		MimeRichTextC-select-left-char()\n\	<Key>osfLeft:		MimeRichTextC-move-left-char()\n\c s	<Key>osfRight:		MimeRichTextC-select-right-word()\n\c	<Key>osfRight:		MimeRichTextC-move-right-word()\n\s	<Key>osfRight:		MimeRichTextC-select-right-char()\n\	<Key>osfRight:		MimeRichTextC-move-right-char()\n\c s	<Key>osfUp:		MimeRichTextC-select-up-para()\n\c 	<Key>osfUp:		MimeRichTextC-move-up-para()\n\s	<Key>osfUp:		MimeRichTextC-select-up-line()\n\	<Key>osfUp:		MimeRichTextC-move-up-line()\n\c s	<Key>osfDown:		MimeRichTextC-select-down-para()\n\c 	<Key>osfDown:		MimeRichTextC-move-down-para()\n\s	<Key>osfDown:		MimeRichTextC-select-down-line()\n\	<Key>osfDown:		MimeRichTextC-move-down-line()\n\c s	<Key>osfBeginLine:	MimeRichTextC-select-file-beg()\n\c	<Key>osfBeginLine:	MimeRichTextC-move-file-beg()\n\s	<Key>osfBeginLine:	MimeRichTextC-select-line-beg()\n\	<Key>osfBeginLine:	MimeRichTextC-move-line-beg()\n\c s	<Key>osfEndLine:	MimeRichTextC-select-file-end()\n\c	<Key>osfEndLine:	MimeRichTextC-move-file-end()\n\s	<Key>osfEndLine:	MimeRichTextC-select-line-end()\n\	<Key>osfEndLine:	MimeRichTextC-move-line-end()\n\s	<Key>osfBeginData:	MimeRichTextC-select-file-beg()\n\	<Key>osfBeginData:	MimeRichTextC-move-file-beg()\n\s	<Key>osfEndData:	MimeRichTextC-select-file-end()\n\	<Key>osfEndData:	MimeRichTextC-move-file-end()\n\c s	<Key>osfBackSpace:	MimeRichTextC-delete-line-beg()\n\c	<Key>osfBackSpace:	MimeRichTextC-delete-left-word()\n\s	<Key>osfBackSpace:	MimeRichTextC-delete-left-char()\n\	<Key>osfBackSpace:	MimeRichTextC-delete-left-char()\n\c s	<Key>osfDelete:		MimeRichTextC-delete-line-end()\n\c	<Key>osfDelete:		MimeRichTextC-delete-right-word()\n\s	<Key>osfDelete:		MimeRichTextC-delete-right-char()\n\	<Key>osfDelete:		MimeRichTextC-delete-right-char()\n\	<Key>osfClear:		MimeRichTextC-delete-selection()\n\	<Key>osfCut:		MimeRichTextC-cut-selection()\n\	<Key>osfCopy:		MimeRichTextC-copy-selection()\n\c	<Key>osfPageUp:		MimeRichTextC-scroll-top()\n\	<Key>osfPageUp:		MimeRichTextC-scroll-up-page()\n\c	<Key>osfPageDown:	MimeRichTextC-scroll-bottom()\n\	<Key>osfPageDown:	MimeRichTextC-scroll-down-page()\n\	<Key>osfInsert:		MimeRichTextC-paste()\n\	<Key>osfPaste:		MimeRichTextC-paste()\n\	<Key>osfUndo:		MimeRichTextC-undo()\n\c	<Key>u:			MimeRichTextC-delete-line-beg()\n\c	<Key>w:			MimeRichTextC-delete-left-word()\n\c	<Key>h:			MimeRichTextC-delete-left-char()\n\c	<Key>v:			MimeRichTextC-paste()\n\c	<Key>z:			MimeRichTextC-undo()\n\c	<Key>p:			MimeRichTextC-plain()\n\c	<Key>b:			MimeRichTextC-bold()\n\c	<Key>i:			MimeRichTextC-italic()\n\c	<Key>f:			MimeRichTextC-fixed()\n\c	<Key>period:		MimeRichTextC-bigger()\n\c	<Key>comma:		MimeRichTextC-smaller()\n\c	<Key>-:			MimeRichTextC-underline()\n\c	<Key>=:			MimeRichTextC-center()\n\c	<Key>bracketleft:	MimeRichTextC-flush-left()\n\c	<Key>bracketright:	MimeRichTextC-flush-right()\n\c s	<Key>period:		MimeRichTextC-left-margin-in()\n\c s	<Key>comma:		MimeRichTextC-left-margin-out()\n\Mod1	<Key>period:		MimeRichTextC-excerpt-more()\n\Mod1	<Key>comma:		MimeRichTextC-excerpt-less()\n\c	<Key>l:			MimeRichTextC-refresh()\n\c	<Key>/:			MimeRichTextC-search()\n\	<Key>:			MimeRichTextC-insert-self()\n\!c	<Btn1Down>:		MimeRichTextC-follow-url()\n\!s	<Btn1Down>:		MimeRichTextC-select-extend()\n\~c ~s	<Btn1Down>:		MimeRichTextC-select-begin()\n\!s	<Btn1Motion>:		MimeRichTextC-select-extend()\n\~c ~s	<Btn1Motion>:		MimeRichTextC-select-motion()\n\~c	<Btn1Up>:		MimeRichTextC-select-end()\n\	<Btn2Up>:		MimeRichTextC-paste()\n\	<Btn3Down>:		MimeRichTextC-post-menu()\");/*	<Btn1Down>:		MimeRichTextC-select-begin()\n\	<Btn2Up>:		MimeRichTextC-paste()\n\	<Btn3Down>:		MimeRichTextC-post-menu()\n\c	<Btn1Up>:		MimeRichTextC-follow-url()\n\	<Btn1Up>:		MimeRichTextC-select-end()\n\s	<Btn1Down>:		MimeRichTextC-select-extend()\n\s	<Btn1Motion>:		MimeRichTextC-select-extend()\n\	<Btn1Motion>:		MimeRichTextC-select-motion()\n\*//*c	<Btn1Down>,<Btn1Up>:	MimeRichTextC-follow-url()\n\s	<Btn1Down>:		MimeRichTextC-select-extend()\n\	<Btn1Down>(4):		MimeRichTextC-quad-click()\n\	<Btn1Down>(3):		MimeRichTextC-trip-click()\n\	<Btn1Down>(2):		MimeRichTextC-doub-click()\n\	<Btn1Down>:		MimeRichTextC-sing-click()\n\s	<Btn1Up>:		MimeRichTextC-select-end()\n\	<Btn1Up>(4):		MimeRichTextC-select-end()\n\	<Btn1Up>(3):		MimeRichTextC-select-end()\n\	<Btn1Up>(2):		MimeRichTextC-select-end()\n\	<Btn1Down>,<Btn1Up>:	MimeRichTextC-select-end()\n\	<Btn2Up>:		MimeRichTextC-paste()\n\*//*!c	<Btn1Down>:		MimeRichTextC-follow-url()\n\!s	<Btn1Down>:		MimeRichTextC-select-extend()\n\~c ~s	<Btn1Down>:		MimeRichTextC-select-begin()\n\!s	<Btn1Motion>:		MimeRichTextC-select-extend()\n\~c ~s	<Btn1Motion>:		MimeRichTextC-select-motion()\n\~c	<Btn1Up>:		MimeRichTextC-select-end()\n\	<Btn2Up>:		MimeRichTextC-paste()\n\*///// These translations handle the behavior of the "delete" key.  People are//   so particular...//      priv->delRightTrans = XtParseTranslationTable("\c s	<Key>osfDelete:	MimeRichTextC-delete-line-end()\n\c	<Key>osfDelete:	MimeRichTextC-delete-right-word()\n\s	<Key>osfDelete:	MimeRichTextC-delete-right-char()\n\	<Key>osfDelete:	MimeRichTextC-delete-right-char()\n\");      priv->delLeftTrans = XtParseTranslationTable("\c s	<Key>osfDelete:	MimeRichTextC-delete-line-beg()\n\c	<Key>osfDelete:	MimeRichTextC-delete-left-word()\n\s	<Key>osfDelete:	MimeRichTextC-delete-left-char()\n\	<Key>osfDelete:	MimeRichTextC-delete-left-char()\n\");//// These translations mimic emacs and override any default translations//      priv->emacsTrans = XtParseTranslationTable("\c	<Key>b:			MimeRichTextC-move-left-char()\n\Mod1	<Key>b:			MimeRichTextC-move-left-word()\n\c 	<Key>f:			MimeRichTextC-move-right-char()\n\Mod1	<Key>f:			MimeRichTextC-move-right-word()\n\c 	<Key>a:			MimeRichTextC-move-line-beg()\n\c	<Key>e:			MimeRichTextC-move-line-end()\n\c	<Key>p:			MimeRichTextC-move-up-line()\n\Mod1	<Key>bracketleft:	MimeRichTextC-move-up-para()\n\c	<Key>n:			MimeRichTextC-move-down-line()\n\Mod1	<Key>bracketright:	MimeRichTextC-move-down-para()\n\Mod1	<Key>comma:		MimeRichTextC-move-file-beg()\n\Mod1	<Key>period:		MimeRichTextC-move-file-end()\n\c	<Key>z:			MimeRichTextC-scroll-up-line()\n\Mod1	<Key>z:			MimeRichTextC-scroll-down-line()\n\c	<Key>d:			MimeRichTextC-delete-right-char()\n\c	<Key>k:			MimeRichTextC-delete-line-end()\n\c s	<Key>b:			MimeRichTextC-select-left-char()\n\Mod1 s	<Key>b:			MimeRichTextC-select-left-word()\n\c s 	<Key>f:			MimeRichTextC-select-right-char()\n\Mod1 s	<Key>f:			MimeRichTextC-select-right-word()\n\c s	<Key>a:			MimeRichTextC-select-line-beg()\n\c s	<Key>e:			MimeRichTextC-select-line-end()\n\c s	<Key>p:			MimeRichTextC-select-up-line()\n\Mod1 s	<Key>bracketleft:	MimeRichTextC-select-up-para()\n\c s	<Key>n:			MimeRichTextC-select-down-line()\n\Mod1 s	<Key>bracketright:	MimeRichTextC-select-down-para()\n\Mod1 s	<Key>comma:		MimeRichTextC-select-file-beg()\n\Mod1 s	<Key>period:		MimeRichTextC-select-file-end()\n\c	<Key>y:			MimeRichTextC-undo()\n\c	<Key>0:			MimeRichTextC-plain()\n\c	<Key>1:			MimeRichTextC-bold()\n\c	<Key>2:			MimeRichTextC-italic()\n\c	<Key>3:			MimeRichTextC-fixed()\n\c	<Key>4:			MimeRichTextC-bigger()\n\Mod1	<Key>4:			MimeRichTextC-smaller()\n\c	<Key>5:			MimeRichTextC-flush-left()\n\Mod1	<Key>5:			MimeRichTextC-flush-right()\n\c	<Key>6:			MimeRichTextC-left-margin-in()\n\Mod1	<Key>6:			MimeRichTextC-left-margin-out()\n\c	<Key>7:			MimeRichTextC-right-margin-in()\n\Mod1	<Key>7:			MimeRichTextC-right-margin-out()\n\c	<Key>8:			MimeRichTextC-excerpt-more()\n\Mod1	<Key>8:			MimeRichTextC-excerpt-less()\");   } // End if actions not added//// Read translation resources//   priv->tabTraverses = get_boolean(cl, MainWidget(), "tabTraverses", False);   priv->delLikeBs    = get_boolean(cl, MainWidget(), "deleteMeansBackspace",								      False);   priv->emacsMode    = get_boolean(cl, MainWidget(), "emacsMode",    False);   priv->userTrans    = get_string (cl, priv->textDA, "translations");   priv->userTrans.Trim();   priv->UpdateTranslations();//// Initialize character classes for double-click//   StringC	charClassDef = get_string(cl, MainWidget(), "charClass", "");   SetCharClasses(charClassDef);//// Initialize cursor//   priv->editable = get_boolean(cl, MainWidget(), "editable",        True);   float rate     = get_float  (cl, MainWidget(), "cursorBlinkRate", 1.0);   float onTime   = get_float  (cl, MainWidget(), "cursorOnPercent", 75.0);   float blinkInterval = (rate > 0.0) ? (float)1000/rate : 0.0;   priv->cursorOnTime  = (int)(blinkInterval * (onTime/(float)100));   priv->cursorOffTime = (int)(blinkInterval - (float)priv->cursorOnTime);//// Add event handler for focus change//   Widget	shell = parent;   while ( !XtIsShell(shell) ) shell = XtParent(shell);   unsigned char	focusPolicy;   XtVaGetValues(shell, XmNkeyboardFocusPolicy, &focusPolicy, NULL);   if ( focusPolicy == XmPOINTER )      XtAddEventHandler(priv->textDA, EnterWindowMask|LeaveWindowMask, False,			(XtEventHandler)MimeRichTextP::HandleFocusChange,			(XtPointer)priv);   else      XtAddEventHandler(priv->textDA, FocusChangeMask, False,			(XtEventHandler)MimeRichTextP::HandleFocusChange,			(XtPointer)priv);//// We took multi-click translation out of trans table.  Go back to//    ActSelectMotion//#if 0//// Add event handler for button 1 motion.  This cannot co-exist in the//    regular translation table because of the presence of multi-click//    events.  (Xt volume 5, page 876).//   XtAddEventHandler(priv->textDA, Button1MotionMask, False,		     (XtEventHandler)MimeRichTextP::HandleButton1Motion,		     (XtPointer)priv);#endif//// Get the command to be used when a URL is clicked//   priv->webCommand = get_string(cl, MainWidget(), "webBrowserCommand",   				 "Mosaic %s");//// Create atom for cut and paste//   if ( !MimeRichTextP::mimeRichAtom )      MimeRichTextP::mimeRichAtom =	 XmInternAtom(halApp->display, MIME_ENRICHED_ATOM_NAME, False);//// Add a blank line//   priv->NewInputLine();

⌨️ 快捷键说明

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