📄 appprefwinc.c
字号:
(XtCallbackProc)AutoSelectPattern, this); XtAddCallback(saveAddrPB, XmNactivateCallback, (XtCallbackProc)AutoSelectPattern, this); XtAddCallback(savePatternPB, XmNactivateCallback, (XtCallbackProc)AutoSelectPattern, this); XtAddCallback(savePatUserPB, XmNactivateCallback, (XtCallbackProc)AutoSelectPattern, this); XtAddCallback(savePatAddrPB, XmNactivateCallback, (XtCallbackProc)AutoSelectPattern, this); wlist[0] = saveUserPB; wlist[1] = saveAddrPB; wlist[2] = savePatternPB; wlist[3] = savePatUserPB; wlist[4] = savePatAddrPB; XtManageChildren(wlist, 5); XtManageChild(savePatternTB); XtManageChild(savePatternOM); XtManageChild(savePatternTF); XtManageChild(savePatternForm); XtManageChild(saveFolderForm); XtManageChild(saveRC); int count = 0; wlist[count++] = imapTB; wlist[count++] = imapTF; wlist[count++] = popTB; wlist[count++] = popTF; wlist[count++] = popCmdLabel; wlist[count++] = popCmdTF; wlist[count++] = folderLabel; wlist[count++] = folderTF; wlist[count++] = saveLabel; wlist[count++] = saveFrame; wlist[count++] = autoLabel; wlist[count++] = autoTF; wlist[count++] = printLabel; wlist[count++] = printTF; wlist[count++] = bellLabel; wlist[count++] = bellScale; XtManageChildren(wlist, count); // fieldRC children fieldRC->SetChildren(wlist, count); wlist[0] = *checkRC; wlist[1] = archiveForm; wlist[2] = *fieldRC; XtManageChildren(wlist, 3); // appForm children checkRC->Defer(False); fieldRC->Defer(False); HandleHelp();} // End constructor/*--------------------------------------------------------------- * Main window destructor */AppPrefWinC::~AppPrefWinC(){ delete checkRC; delete fieldRC;}/*--------------------------------------------------------------- * Callback to handle initial display */voidAppPrefWinC::Show(){ AppPrefC *prefs = ishApp->appPrefs;//// Initialize settings// XmTextFieldSetString(inBoxTF, prefs->inBox); StringC tmpStr; tmpStr += prefs->checkInterval; XmTextFieldSetString(checkTF, tmpStr); tmpStr.Clear(); tmpStr += prefs->recentFolderCount; XmTextFieldSetString(recentTF, tmpStr); XmTextFieldSetString(archiveTF, prefs->OrigArchiveFolder()); XmTextFieldSetString(imapTF, prefs->imapServer); XmTextFieldSetString(popTF, prefs->popServer); XmTextFieldSetString(popCmdTF, prefs->popclientCmd); XmTextFieldSetString(folderTF, prefs->OrigFolderDir()); XmTextFieldSetString(printTF, prefs->printCmd); XmToggleButtonSetState(alertTB, ishApp->alertPrefs->alertOn, False); XmToggleButtonSetState(showNewTB, prefs->scrollToNew, True); XmToggleButtonSetState(delSaveTB, prefs->deleteSaved, False); XmToggleButtonSetState(hideDelTB, prefs->hideDeleted, False); XmToggleButtonSetState(quickHelpTB, halApp->quickHelpEnabled, False); XmToggleButtonSetState(windowPosTB, prefs->rememberWindows, False); XmToggleButtonSetState(newUnreadTB, prefs->markNewAsUnread, False); XmToggleButtonSetState(archiveTB, prefs->archiveOnSave, False); XmToggleButtonSetState(imapTB, prefs->usingImap, False); XmToggleButtonSetState(popTB, prefs->usingPop, False); if ( prefs->OrigSaveFile().size() ) XmTextFieldSetString(saveFolderTF, prefs->OrigSaveFile()); if ( prefs->OrigSaveDir().size() ) XmTextFieldSetString(savePatternTF, prefs->OrigSaveDir()); switch ( prefs->saveType ) { case (SAVE_TO_FOLDER): XmToggleButtonSetState(saveFolderTB, True, True); break; case (SAVE_BY_USER): XmToggleButtonSetState(savePatternTB, True, True); XtVaSetValues(savePatternOM, XmNmenuHistory, saveUserPB, NULL); break; case (SAVE_BY_ADDRESS): XmToggleButtonSetState(savePatternTB, True, True); XtVaSetValues(savePatternOM, XmNmenuHistory, saveAddrPB, NULL); break; case (SAVE_BY_PATTERN): XmToggleButtonSetState(savePatternTB, True, True); XtVaSetValues(savePatternOM, XmNmenuHistory, savePatternPB, NULL); break; case (SAVE_BY_PATTERN_OR_USER): XmToggleButtonSetState(savePatternTB, True, True); XtVaSetValues(savePatternOM, XmNmenuHistory, savePatUserPB, NULL); break; case (SAVE_BY_PATTERN_OR_ADDRESS): XmToggleButtonSetState(savePatternTB, True, True); XtVaSetValues(savePatternOM, XmNmenuHistory, savePatAddrPB, NULL); break; } if ( prefs->OrigAutomountRoot().size() ) XmTextFieldSetString(autoTF, prefs->OrigAutomountRoot());//// Display the bell volume. It is stored in the range (-100, 100) and// display in the range (0, 10)// XmScaleSetValue(bellScale, (prefs->bellVolume + 100) / 20); OptWinC::Show();} // End Show/*--------------------------------------------------------------- * Method to apply settings */BooleanAppPrefWinC::Apply(){//// Check filenames// char *cs = XmTextFieldGetString(inBoxTF); StringC inBoxStr(cs); inBoxStr.Trim(); XtFree(cs); if ( inBoxStr.size() <= 0 ) { set_invalid(inBoxTF, True, True); PopupMessage("Please enter an In-box folder name."); return False; } cs = XmTextFieldGetString(saveFolderTF); StringC saveStr(cs); saveStr.Trim(); XtFree(cs); if ( XmToggleButtonGetState(saveFolderTB) && saveStr.size() <= 0 ) { set_invalid(saveFolderTF, True, True); PopupMessage("Please enter a folder name for saved messages."); return False; } cs = XmTextFieldGetString(imapTF); StringC imapStr(cs); imapStr.Trim(); XtFree(cs); if ( XmToggleButtonGetState(imapTB) && imapStr.size() <= 0 ) { set_invalid(imapTF, True, True); PopupMessage("Please enter the name of your IMAP server."); return False; } else if ( imapStr.Contains('{') || imapStr.Contains('}') || imapStr.Contains('/') ) { set_invalid(imapTF, True, True); PopupMessage("Please enter the server name only."); return False; } cs = XmTextFieldGetString(popTF); StringC popStr(cs); popStr.Trim(); XtFree(cs); cs = XmTextFieldGetString(popCmdTF); StringC popCmdStr(cs); popCmdStr.Trim(); XtFree(cs); if ( XmToggleButtonGetState(popTB) ) { if ( popStr.size() <= 0 ) { set_invalid(popTF, True, True); PopupMessage("Please enter the name of your POP server."); return False; } else if ( popCmdStr.size() <= 0 ) { set_invalid(popCmdTF, True, True); PopupMessage("Please enter the path to your popclient command."); return False; } } cs = XmTextFieldGetString(savePatternTF); StringC saveDirStr(cs); saveDirStr.Trim(); XtFree(cs); if ( XmToggleButtonGetState(savePatternTB) && saveDirStr.size() <= 0 ) { set_invalid(savePatternTF, True, True); PopupMessage("Please enter a directory name for saved messages."); return False; } cs = XmTextFieldGetString(archiveTF); StringC archiveStr(cs); archiveStr.Trim(); XtFree(cs); if ( XmToggleButtonGetState(archiveTB) && archiveStr.size() <= 0 ) { set_invalid(archiveTF, True, True); PopupMessage("Please enter a folder name for archived messages."); return False; } BusyCursor(True); AppPrefC *prefs = ishApp->appPrefs; if (inBoxStr.compare(prefs->inBox)) { PopupMessage("New In-box setting will take effect only after restart.", XmDIALOG_INFORMATION); } prefs->inBox = inBoxStr; prefs->usingImap = XmToggleButtonGetState(imapTB); prefs->imapServer = imapStr; prefs->usingPop = XmToggleButtonGetState(popTB); prefs->popServer = popStr; prefs->popclientCmd = popCmdStr;//// Set folder directory// cs = XmTextFieldGetString(folderTF); if ( strlen(cs) > 0 ) prefs->SetFolderDir(cs); else { if ( prefs->usingImap ) prefs->SetFolderDir(cs); // OK to have null dir for IMAP else prefs->SetFolderDir(ishApp->home); // else set sensible default } XtFree(cs);//// Set default save file and directory// prefs->SetSaveFile(saveStr); prefs->SetSaveDir(saveDirStr);//// Set save type// if ( XmToggleButtonGetState(saveFolderTB) ) prefs->saveType = SAVE_TO_FOLDER; else { Widget pb; XtVaGetValues(savePatternOM, XmNmenuHistory, &pb, NULL); if ( pb == saveUserPB ) prefs->saveType = SAVE_BY_USER; else if ( pb == saveAddrPB ) prefs->saveType = SAVE_BY_ADDRESS; else if ( pb == savePatternPB ) prefs->saveType = SAVE_BY_PATTERN; else if ( pb == savePatUserPB ) prefs->saveType = SAVE_BY_PATTERN_OR_USER; else if ( pb == savePatAddrPB ) prefs->saveType = SAVE_BY_PATTERN_OR_ADDRESS; }//// Set automounter root prefix// cs = XmTextFieldGetString(autoTF); prefs->SetAutomountRoot(cs); XtFree(cs);//// Read check interval// cs = XmTextFieldGetString(checkTF); int ci = atoi(cs); if ( ci != prefs->checkInterval ) { prefs->checkInterval = ci; if ( ci > 0 ) ishApp->CheckForNewMail(); // Start check again } XtFree(cs); ishApp->alertPrefs->alertOn = XmToggleButtonGetState(alertTB); prefs->deleteSaved = XmToggleButtonGetState(delSaveTB); prefs->scrollToNew = XmToggleButtonGetState(showNewTB); prefs->rememberWindows = XmToggleButtonGetState(windowPosTB); prefs->markNewAsUnread = XmToggleButtonGetState(newUnreadTB); prefs->archiveOnSave = XmToggleButtonGetState(archiveTB); prefs->SetArchiveFolder(archiveStr); halApp->QuickHelp(XmToggleButtonGetState(quickHelpTB));//// Read recent folder count// cs = XmTextFieldGetString(recentTF); ci = atoi(cs); if ( ci < 1 ) { ci = 10; StringC ciStr; ciStr += ci; XmTextFieldSetString(recentTF, ciStr); } prefs->recentFolderCount = ci; XtFree(cs);//// Read print command// cs = XmTextFieldGetString(printTF); prefs->printCmd = cs; XtFree(cs);//// Read bell volume. Displayed in range 0-10, stored in range -100 to 100// int val; XmScaleGetValue(bellScale, &val); prefs->bellVolume = (val - 5) * 20;//// Set main window attributes// Boolean hideDel = XmToggleButtonGetState(hideDelTB); if ( hideDel != prefs->hideDeleted ) { prefs->hideDeleted = hideDel; ishApp->mainWin->HideDeletedChanged(); } prefs->WriteDatabase();//// Write to file if necessary// if ( applyAll ) prefs->WriteFile(); BusyCursor(False); return True;} // End Apply/*--------------------------------------------------------------- * Callback to implement radio button behavior in saveFrame */voidAppPrefWinC::SaveChanged(Widget tb, AppPrefWinC* 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->saveFolderTB ) XmToggleButtonSetState(This->savePatternTB, False, False); else XmToggleButtonSetState(This->saveFolderTB, False, False);} // End SaveChanged/*--------------------------------------------------------------- * Callbacks to automatically select toggle buttons when field is * changed or type is selected */voidAppPrefWinC::AutoSelectFolder(Widget, AppPrefWinC* This, XtPointer){ XmToggleButtonSetState(This->saveFolderTB, True, True);}voidAppPrefWinC::AutoSelectPattern(Widget, AppPrefWinC* This, XtPointer){ XmToggleButtonSetState(This->savePatternTB, True, True);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -