📄 mailprefwinc.c
字号:
wlist[2] = *checkRC; XtManageChildren(wlist, 3); // appForm children HandleHelp(); XtAddCallback(shell, XmNpopupCallback, (XtCallbackProc)DoPopup, (XtPointer)this);} // End constructor/*--------------------------------------------------------------- * Destructor */MailPrefWinC::~MailPrefWinC(){ delete fieldRC; delete checkRC;}/*--------------------------------------------------------------- * Callback routine to handle initial display. */voidMailPrefWinC::DoPopup(Widget, MailPrefWinC *This, XtPointer){ XtRemoveCallback(This->shell, XmNpopupCallback, (XtCallbackProc)DoPopup, (XtPointer)This);//// Finish initializing fieldRC// WidgetList wlist; Cardinal wcount; XtVaGetValues(*This->fieldRC, XmNchildren, &wlist, XmNnumChildren, &wcount, NULL); This->fieldRC->SetChildren(wlist, wcount); This->fieldRC->SetRowResize(2, True); // confirmAddr row This->fieldRC->SetRowResize(3, True); // otherHead row This->fieldRC->SetRowHeightAdjust(2, RcADJUST_ATTACH); This->fieldRC->SetRowHeightAdjust(3, RcADJUST_ATTACH); This->fieldRC->Defer(False);}/*--------------------------------------------------------------- * Method to handle display */voidMailPrefWinC::Show(Widget parent){ MailPrefC *prefs = ishApp->mailPrefs;//// See if this widget corresponds to a particular composition window// SendWinC *sendWin = NULL; if ( parent != (Widget)*ishApp->mainWin ) { u_int count = ishApp->sendWinList.size(); for (int i=0; !sendWin && i<count; i++) { SendWinC *win = (SendWinC*)*ishApp->sendWinList[i]; if ( parent == (Widget)*win ) sendWin = win; } }//// Initialize settings// if ( sendWin ) XmToggleButtonSetState(checkAddrTB, sendWin->CheckingAddresses(), False); else XmToggleButtonSetState(checkAddrTB, prefs->verifyAddresses, False); StringC str; str += prefs->splitSize; XmTextFieldSetString(splitTF, str); XmToggleButtonSetState(splitTB, prefs->split, False); Widget hist = NULL; Widget tb = NULL; switch ( prefs->fccType ) { case (FCC_TO_FOLDER): tb = fccFolderTB; break; case (FCC_BY_USER): tb = fccPatternTB; hist = fccUserPB; break; case (FCC_BY_ADDRESS): tb = fccPatternTB; hist = fccAddrPB; break; case (FCC_BY_YEAR): tb = fccPatternTB; hist = fccYearPB; break; case (FCC_BY_MONTH): tb = fccPatternTB; hist = fccMonthPB; break; case (FCC_BY_WEEK): tb = fccPatternTB; hist = fccWeekPB; break; case (FCC_BY_DAY): tb = fccPatternTB; hist = fccDayPB; break; case (FCC_NONE): default: tb = noFccTB; break; } // End switch fccType XmTextFieldSetString(fccFolderTF, prefs->OrigFccFolder()); XmTextFieldSetString(fccPatternTF, prefs->OrigFccFolderDir()); if ( hist ) XtVaSetValues(fccPatternOM, XmNmenuHistory, hist, NULL); XmToggleButtonSetState(tb, True, True); XmTextFieldSetString(fromHeadTF, prefs->fromHeader); if ( sendWin ) { switch ( sendWin->MailType() ) { case (MAIL_PLAIN): XmToggleButtonSetState(mailPlainTB, True, True); break; case (MAIL_MIME): XmToggleButtonSetState(mailMimeTB, True, True); break; case (MAIL_ALT): XmToggleButtonSetState(mailAltTB, True, True); break; } switch ( sendWin->TextType() ) { case (CT_PLAIN): XmToggleButtonSetState(textPlainTB, True, True); break; case (CT_ENRICHED): XmToggleButtonSetState(textRichTB, True, True); break; } } else { switch ( prefs->mailType ) { case (MAIL_PLAIN): XmToggleButtonSetState(mailPlainTB, True, True); break; case (MAIL_MIME): XmToggleButtonSetState(mailMimeTB, True, True); break; case (MAIL_ALT): XmToggleButtonSetState(mailAltTB, True, True); break; } switch ( prefs->textType ) { case (CT_PLAIN): XmToggleButtonSetState(textPlainTB, True, True); break; case (CT_ENRICHED): XmToggleButtonSetState(textRichTB, True, True); break; } } XmTextFieldSetString(charTF, prefs->charset); switch ( prefs->bodyEncType ) { case (ET_8BIT): XmToggleButtonSetState(bodyEnc8bitTB, True, True); break; default: XmToggleButtonSetState(bodyEncQpTB, True, True); break; } switch ( prefs->headEncType ) { case (ET_QP): XmToggleButtonSetState(headEncQTB, True, True); break; case (ET_BASE_64): XmToggleButtonSetState(headEncBTB, True, True); break; default: XmToggleButtonSetState(headEncNoneTB, True, True); break; } XmToggleButtonSetState(deadTB, prefs->saveOnInterrupt, False); XmTextFieldSetString (deadTF, prefs->OrigDeadFile()); XmTextFieldSetString(sendmailTF, prefs->OrigSendmailCmd()); XmToggleButtonSetState(confirmAddrTB, prefs->confirmAddrs, False); TextSetList(confirmAddrText, prefs->confirmAddrList); TextSetString(otherHeadText, prefs->otherHeaders); OptWinC::Show(parent);} // End ShowvoidMailPrefWinC::Show(){ Show(XtParent(*this));}/*--------------------------------------------------------------- * Method to apply settings */BooleanMailPrefWinC::Apply(){ MailPrefC *prefs = ishApp->mailPrefs; char *cs;//// Get split data// Boolean doSplit = XmToggleButtonGetState(splitTB); int splitSize = 100000; cs = XmTextFieldGetString(splitTF); if ( strlen(cs) > 0 ) splitSize = atoi(cs); XtFree(cs);//// Get split size// if ( doSplit && splitSize < 10000 ) { set_invalid(splitTF, True, True); PopupMessage("Minimum split size is 10000"); return False; } Boolean doDead = XmToggleButtonGetState(deadTB); cs = XmTextFieldGetString(deadTF); StringC deadStr(cs); XtFree(cs); if ( doDead && deadStr.size() <= 0 ) { set_invalid(deadTF, True, True); PopupMessage("Please enter a file name for interrupted messages."); return False; }//// Get fcc type// StringC fccStr, origFccStr; if ( XmToggleButtonGetState(fccFolderTB) ) { cs = XmTextFieldGetString(fccFolderTF); origFccStr = cs; XtFree(cs); if ( origFccStr.size() == 0 ) { set_invalid(fccFolderTF, True, True); PopupMessage("Please enter a folder name."); return False; } fccStr = origFccStr; ishApp->ExpandFolderName(fccStr); } else if ( XmToggleButtonGetState(fccPatternTB) ) { cs = XmTextFieldGetString(fccPatternTF); origFccStr = cs; XtFree(cs); if ( origFccStr.size() == 0 ) { set_invalid(fccPatternTF, True, True); PopupMessage("Please enter a directory name."); return False; } fccStr = origFccStr; ishApp->ExpandFolderName(fccStr);//// Check the status of the specified name// if ( access(fccStr, W_OK) != 0 ) {//// Create the directory if it doesn't exist// if ( errno == ENOENT ) { StringC errStr; if ( !MakeDir(fccStr) ) { set_invalid(fccPatternTF, True, True); return False; } } // End if name does not exist//// Make sure this is a directory// else if ( !IsDir(fccStr) ) { set_invalid(fccPatternTF, True, True); fccStr += " exists but is not a directory."; PopupMessage(fccStr); return False; } // End if name not a directory//// The directory is not writable// else { set_invalid(fccPatternTF, True, True); fccStr += " exists but is not writable."; PopupMessage(fccStr); return False; } } // End if name not writable//// Make sure this is a directory// else if ( !IsDir(fccStr) ) { set_invalid(fccPatternTF, True, True); fccStr += " exists but is not a directory."; PopupMessage(fccStr); return False; } // End if name not a directory } // End if using pattern BusyCursor(True);//// Set the "From:" header// cs = XmTextFieldGetString(fromHeadTF); prefs->fromHeader = cs; XtFree(cs); prefs->verifyAddresses = XmToggleButtonGetState(checkAddrTB); u_int count = ishApp->sendWinList.size(); int i; for (i=0; i<count; i++) { SendWinC *sendWin = (SendWinC*)*ishApp->sendWinList[i]; sendWin->SetAddressChecking(prefs->verifyAddresses); } prefs->split = doSplit; prefs->splitSize = splitSize; if ( XmToggleButtonGetState(fccFolderTB) ) { prefs->fccType = FCC_TO_FOLDER; prefs->SetFccFolder(origFccStr); } else if ( XmToggleButtonGetState(fccPatternTB) ) { Widget hist; XtVaGetValues(fccPatternOM, XmNmenuHistory, &hist, NULL); if ( hist == fccUserPB ) prefs->fccType = FCC_BY_USER; else if ( hist == fccAddrPB ) prefs->fccType = FCC_BY_ADDRESS; else if ( hist == fccYearPB ) prefs->fccType = FCC_BY_YEAR; else if ( hist == fccMonthPB ) prefs->fccType = FCC_BY_MONTH; else if ( hist == fccWeekPB ) prefs->fccType = FCC_BY_WEEK; else prefs->fccType = FCC_BY_DAY; prefs->SetFccFolderDir(origFccStr); } else { prefs->fccType = FCC_NONE; } if ( XmToggleButtonGetState(mailPlainTB) ) prefs->mailType = MAIL_PLAIN; else if ( XmToggleButtonGetState(mailAltTB) ) prefs->mailType = MAIL_ALT; else prefs->mailType = MAIL_MIME; if ( XmToggleButtonGetState(textPlainTB) ) prefs->textType = CT_PLAIN; else prefs->textType = CT_ENRICHED; count = ishApp->sendWinList.size(); for (i=0; i<count; i++) { SendWinC *sendWin = (SendWinC*)*ishApp->sendWinList[i]; sendWin->UpdateFcc(); sendWin->SetMailType(prefs->mailType); sendWin->SetTextType(prefs->textType); }//// Set default character set// cs = XmTextFieldGetString(charTF); if ( strlen(cs) > 0 ) prefs->charset = cs; else prefs->charset = "us-ascii"; XtFree(cs);//// Set default 8-bit encoding// if ( XmToggleButtonGetState(bodyEnc8bitTB) ) prefs->bodyEncType = ET_8BIT; else prefs->bodyEncType = ET_QP; if ( XmToggleButtonGetState(headEncQTB) ) prefs->headEncType = ET_QP; else if ( XmToggleButtonGetState(headEncBTB) ) prefs->headEncType = ET_BASE_64; else prefs->headEncType = ET_NONE;//// Set dead letter file// prefs->saveOnInterrupt = doDead; prefs->SetDeadFile(deadStr);//// Set sendmail command// cs = XmTextFieldGetString(sendmailTF); prefs->SetSendmailCmd(cs); XtFree(cs);//// Set confirmation addresses// prefs->confirmAddrs = XmToggleButtonGetState(confirmAddrTB); prefs->confirmAddrList.removeAll(); StringC tmp; tmp = XmTextGetString(confirmAddrText); ExtractList(tmp, prefs->confirmAddrList);//// Set other headers// prefs->otherHeaders.Clear(); cs = XmTextGetString(otherHeadText); prefs->otherHeaders = cs; XtFree(cs); prefs->WriteDatabase();//// Write to file if necessary// if ( applyAll ) prefs->WriteFile(); BusyCursor(False); return True;} // End Apply/*--------------------------------------------------------------- * Callback to implement radio button behavior in fccFrame */voidMailPrefWinC::FccChanged(Widget tb, MailPrefWinC* This, XmToggleButtonCallbackStruct *data){//// Don't allow buttons to be turned off by the user// if ( !data->set ) { XmToggleButtonSetState(tb, True, False); return; } if ( tb == This->noFccTB ) { XmToggleButtonSetState(This->fccFolderTB, False, False); XmToggleButtonSetState(This->fccPatternTB, False, False); } else if ( tb == This->fccFolderTB ) { XmToggleButtonSetState(This->noFccTB, False, False); XmToggleButtonSetState(This->fccPatternTB, False, False); } else { XmToggleButtonSetState(This->noFccTB, False, False); XmToggleButtonSetState(This->fccFolderTB, False, False); }} // End FccChanged/*--------------------------------------------------------------- * Callbacks to automatically select toggle buttons when field is * changed or type is selected */voidMailPrefWinC::AutoSelectFolder(Widget, MailPrefWinC* This, XtPointer){ XmToggleButtonSetState(This->fccFolderTB, True, True);}voidMailPrefWinC::AutoSelectPattern(Widget, MailPrefWinC* This, XtPointer){ XmToggleButtonSetState(This->fccPatternTB, True, True);}/*--------------------------------------------------------------- * Callback to handle press of charset button */voidMailPrefWinC::DoCharset(Widget w, MailPrefWinC *This, XtPointer){ char *cs = "us-ascii"; if ( w == This->charIso1PB ) cs = "iso-8859-1"; else if ( w == This->charIso2PB ) cs = "iso-8859-2"; else if ( w == This->charIso3PB ) cs = "iso-8859-3"; else if ( w == This->charIso4PB ) cs = "iso-8859-4"; else if ( w == This->charIso5PB ) cs = "iso-8859-5"; else if ( w == This->charIso6PB ) cs = "iso-8859-6"; else if ( w == This->charIso7PB ) cs = "iso-8859-7"; else if ( w == This->charIso8PB ) cs = "iso-8859-8"; else if ( w == This->charIso9PB ) cs = "iso-8859-9"; else if ( w == This->charIso13PB ) cs = "iso-8859-13"; XmTextFieldSetString(This->charTF, cs);} // End DoCharset
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -