📄 ishappp.c
字号:
// Delete the dialog// XtDestroyWidget(dialog); } // End if using a pop server else { // Not using a POP server pub->appPrefs->usingPop = False; } pub->appPrefs->WriteDatabase(); pub->appPrefs->WriteFile();} // End QueryPop/*--------------------------------------------------------------- * Callback to auto-deselect a toggle button */static voidAutoDeselect(Widget, Widget dst, XmToggleButtonCallbackStruct *src){ if ( src->set ) XmToggleButtonSetState(dst, False, False);}/*--------------------------------------------------------------- * Method to ask the user what folder type(s) they will be using */voidIshAppP::QueryFolderType(){ QueryAnswerT answer; WArgList args; args.DialogStyle(XmDIALOG_FULL_APPLICATION_MODAL); args.AutoUnmanage(False); if ( halApp->questionPM ) args.SymbolPixmap(halApp->questionPM); Widget dialog = XmCreateQuestionDialog(*pub, "queryFolderTypeWin", ARGS); XtAddCallback(dialog, XmNokCallback, (XtCallbackProc)AnswerQuery, (XtPointer)&answer); XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_CANCEL_BUTTON)); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)HalAppC::DoHelp, (char *) "helpcard");//// Don't allow window manager close function// XmAddWMProtocolCallback(XtParent(dialog), halApp->delWinAtom, (XtCallbackProc)PreventClose, dialog);//// Add toggle buttons for folder type choices// Widget typeFrame = XmCreateFrame(dialog, "typeFrame", 0,0);//// Set up typeRC for 1 row with equal sized columns// RowColC *typeRC = new RowColC(typeFrame, "typeRC", ARGS); typeRC->Defer(True); typeRC->SetOrientation(RcCOL_MAJOR); typeRC->SetRowCount(1); typeRC->SetColAlignment(XmALIGNMENT_CENTER); typeRC->SetColWidthAdjust(RcADJUST_NONE); typeRC->SetColResize(True); typeRC->SetUniformCols(True); Widget unixTB = XmCreateToggleButton(*typeRC, "unixTB", 0,0); Widget mhTB = XmCreateToggleButton(*typeRC, "mhTB", 0,0); Widget mmdfTB = XmCreateToggleButton(*typeRC, "mmdfTB", 0,0); Widget noneTB = XmCreateToggleButton(*typeRC, "noneTB", 0,0); AddValueChanged(noneTB, AutoDeselect, unixTB); AddValueChanged(noneTB, AutoDeselect, mhTB); AddValueChanged(noneTB, AutoDeselect, mmdfTB); AddValueChanged(unixTB, AutoDeselect, noneTB); AddValueChanged(mmdfTB, AutoDeselect, noneTB); AddValueChanged(mhTB, AutoDeselect, noneTB); typeRC->AddChild(unixTB); typeRC->AddChild(mhTB); typeRC->AddChild(mmdfTB); if ( pub->appPrefs->usingImap ) typeRC->AddChild(noneTB); typeRC->Defer(False); XtManageChild(*typeRC); XtManageChild(typeFrame);//// Display the appropriate message// StringC msgStr; if ( pub->appPrefs->usingImap ) msgStr = get_string(dialog, "imapMessageString", "Which folder type(s) will you be using on your local machine?"); else msgStr = get_string(dialog, "messageString", "Which folder type(s) will you be using?"); WXmString wstr = (char*)msgStr; XtVaSetValues(dialog, XmNmessageString, (XmString)wstr, NULL); XtManageChild(dialog); XMapRaised(halApp->display, XtWindow(XtParent(dialog)));//// Loop until at least one type is selected// int typeCount = 0; while ( typeCount == 0 ) {//// Simulate the main event loop and wait for the answer// answer = QUERY_NONE; while ( answer == QUERY_NONE ) { XtAppProcessEvent(halApp->context, XtIMXEvent); XSync(halApp->display, False); } Boolean usingUnix = XmToggleButtonGetState(unixTB); Boolean usingMh = XmToggleButtonGetState(mhTB); Boolean usingMmdf = XmToggleButtonGetState(mmdfTB); typeCount = (usingMh ? 1 : 0) + (usingUnix ? 1 : 0) + (usingMmdf ? 1 : 0) + (pub->appPrefs->usingImap ? 1 : 0); if ( typeCount == 0 ) pub->PopupMessage("Please select at least one folder type."); else { pub->folderPrefs->usingUnix = usingUnix; pub->folderPrefs->usingMh = usingMh; pub->folderPrefs->usingMmdf = usingMmdf; } } // End while not done XtUnmanageChild(dialog); XSync(halApp->display, False); XmUpdateDisplay(dialog);//// Delete the dialog// delete typeRC; XtDestroyWidget(dialog);//// If there was more than one type selected, find out which one will be// the default type// if ( typeCount > 1 ) { Widget unixTB = NULL; Widget mhTB = NULL; Widget mmdfTB = NULL; Widget imapTB = NULL; args.Reset(); args.DialogStyle(XmDIALOG_FULL_APPLICATION_MODAL); args.AutoUnmanage(False); if ( halApp->questionPM ) args.SymbolPixmap(halApp->questionPM); dialog = XmCreateQuestionDialog(*halApp, "defFolderTypeWin", ARGS);//// Add buttons for folder type// Widget frame = XmCreateFrame (dialog, "typeFrame", 0,0); Widget radio = XmCreateRadioBox(frame, "typeRadio", 0,0); if ( pub->appPrefs->usingImap ) { imapTB = XmCreateToggleButton(radio, "imapTB", 0,0); XtManageChild(imapTB); } if ( pub->folderPrefs->usingUnix ) { unixTB = XmCreateToggleButton(radio, "unixTB", 0,0); XtManageChild(unixTB); if ( pub->appPrefs->usingImap ) msgStr = get_string(unixTB, "imapLabelString", "Unix on local machine"); else msgStr = get_string(unixTB, "labelString", "Unix"); wstr = (char*)msgStr; XtVaSetValues(unixTB, XmNlabelString, (XmString)wstr, NULL); } if ( pub->folderPrefs->usingMh ) { mhTB = XmCreateToggleButton(radio, "mhTB", 0,0); XtManageChild(mhTB); if ( pub->appPrefs->usingImap ) msgStr = get_string(mhTB, "imapLabelString", "MH on local machine"); else msgStr = get_string(mhTB, "labelString", "MH"); wstr = (char*)msgStr; XtVaSetValues(mhTB, XmNlabelString, (XmString)wstr, NULL); } if ( pub->folderPrefs->usingMmdf ) { mmdfTB = XmCreateToggleButton(radio, "mmdfTB", 0,0); XtManageChild(mmdfTB); if ( pub->appPrefs->usingImap ) msgStr = get_string(mmdfTB, "imapLabelString", "MMDF on local machine"); else msgStr = get_string(mmdfTB, "labelString", "MMDF"); wstr = (char*)msgStr; XtVaSetValues(mmdfTB, XmNlabelString, (XmString)wstr, NULL); } if ( pub->appPrefs->usingImap ) XmToggleButtonSetState(imapTB, True, True); else if ( pub->folderPrefs->usingUnix ) XmToggleButtonSetState(unixTB, True, True); else if ( pub->folderPrefs->usingMh ) XmToggleButtonSetState(mhTB, True, True); else XmToggleButtonSetState(mmdfTB, True, True); XtManageChild(radio); XtManageChild(frame); XtAddCallback(dialog, XmNokCallback, (XtCallbackProc)AnswerQuery, (XtPointer)&answer); XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_CANCEL_BUTTON)); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)HalAppC::DoHelp, (char *) "helpcard");//// Trap window manager close function// XmAddWMProtocolCallback(XtParent(dialog), halApp->delWinAtom, (XtCallbackProc)WmClose, (caddr_t)&answer);//// Show the dialog// XtManageChild(dialog); XMapRaised(halApp->display, XtWindow(XtParent(dialog)));//// Loop until a type is selected// Boolean done = False; while ( !done ) {//// Simulate the main event loop and wait for the answer// answer = QUERY_NONE; while ( answer == QUERY_NONE ) { XtAppProcessEvent(halApp->context, XtIMXEvent); XSync(halApp->display, False); } Boolean useImap = imapTB && XmToggleButtonGetState(imapTB); Boolean useUnix = unixTB && XmToggleButtonGetState(unixTB); Boolean useMh = mhTB && XmToggleButtonGetState(mhTB); Boolean useMmdf = mmdfTB && XmToggleButtonGetState(mmdfTB); done = True; if ( pub->folderPrefs->usingMh && useMh ) pub->folderPrefs->defFolderType = MH_FOLDER; else if ( pub->folderPrefs->usingUnix && useUnix ) pub->folderPrefs->defFolderType = UNIX_FOLDER; else if ( pub->folderPrefs->usingMmdf && useMmdf ) pub->folderPrefs->defFolderType = MMDF_FOLDER; else if ( pub->appPrefs->usingImap && useImap ) pub->folderPrefs->defFolderType = IMAP_FOLDER; else { pub->PopupMessage("Please select a folder type."); done = False; } } // End while not done XtUnmanageChild(dialog); XSync(halApp->display, False); XmUpdateDisplay(dialog); XtDestroyWidget(dialog); } // End if we need to ask for the default folder type else { if ( pub->appPrefs->usingImap ) pub->folderPrefs->defFolderType = IMAP_FOLDER; else if ( pub->folderPrefs->usingMh ) pub->folderPrefs->defFolderType = MH_FOLDER; else if ( pub->folderPrefs->usingMmdf ) pub->folderPrefs->defFolderType = MMDF_FOLDER; else pub->folderPrefs->defFolderType = UNIX_FOLDER; } pub->folderPrefs->WriteDatabase(); pub->folderPrefs->WriteFile();} // End QueryFolderType/*--------------------------------------------------------------- * Method to return a usable reading window */ReadWinC*IshAppP::GetReadWin(){//// First look for a displayed, unpinned window// ReadWinC *readWin = NULL; unsigned count = pub->readWinList.size(); Boolean found = False; int i=0; for (i=0; !found && i<count; i++) { readWin = (ReadWinC*)*pub->readWinList[i]; if ( readWin->IsShown() && !readWin->Pinned() ) { if ( !readWin->IsIconified() ) readWin->HalTopLevelC::Show(); // Pop it to the top found = True; } } // End for each existing composition window//// Then look for an undisplayed window// for (i=0; !found && i<count; i++) { readWin = (ReadWinC*)*pub->readWinList[i]; found = !readWin->IsShown(); }//// If we didn't find a window, we need to create a new one// if ( !found ) { pub->BusyCursor(True); if ( debuglev > 0 ) cout <<"Creating reading window" NL; readWin = new ReadWinC("readWin", *halApp); void *tmp = (void*)readWin; pub->readWinList.add(tmp); pub->BusyCursor(False); } return readWin;} // End GetReadWin/*--------------------------------------------------------------- * Method to see if the user want's to restart any crashed edits. */voidIshAppP::EditSavedCompositions(){ int count = compFileList.size(); if ( count < 1 ) return; WArgList args; args.DialogStyle(XmDIALOG_FULL_APPLICATION_MODAL); args.AutoUnmanage(True); if ( halApp->questionPM ) args.SymbolPixmap(halApp->questionPM); Widget dialog = XmCreateQuestionDialog(*pub, "queryEditCompWin", ARGS); XtAddCallback(dialog, XmNokCallback, (XtCallbackProc)FinishEditSavedComp, this); XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)DeleteSavedComp, this); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)HalAppC::DoHelp, (char *) "helpcard"); Widget noPB = XmCreatePushButton(dialog, "noPB", 0,0); AddActivate(noPB, CancelEditSavedComp, this); XtManageChild(noPB); StringC label = get_string(dialog, XmNmessageString, "Resume edit of composition(s) in progress?"); StringC countStr; countStr += (int)compFileList.size(); label.Replace("$COUNT", countStr); WXmString wstr = (char*)label; XtVaSetValues(dialog, XmNmessageString, (XmString)wstr, NULL); XtManageChild(dialog);} // End EditSavedCompositions/*--------------------------------------------------------------- * Callback to reopen user's crashed edits. */voidIshAppP::FinishEditSavedComp(Widget dialog, IshAppP *This, XtPointer){ u_int count = This->compFileList.size(); StringC file; int i=0; for (i=0; i<count; i++) { file = ishApp->compPrefs->AutoSaveDir(); if ( !file.EndsWith('/') ) file += '/'; file += *This->compFileList[i]; SendWinC *win = This->pub->GetSendWin(); win->LoadFile(file); win->SetAutoSaveFile(file); win->Show(); } This->compFileList.removeAll(); XtDestroyWidget(dialog);} // End FinishEditSavedComp/*--------------------------------------------------------------- * Callback to deleted user's crashed edits. */voidIshAppP::DeleteSavedComp(Widget dialog, IshAppP *This, XtPointer){ u_int count = This->compFileList.size(); StringC file; int i=0; for (i=0; i<count; i++) { file = ishApp->compPrefs->AutoSaveDir(); if ( !file.EndsWith('/') ) file += '/'; file += *This->compFileList[i]; unlink(file); } This->compFileList.removeAll(); XtDestroyWidget(dialog);} // End DeleteSavedComp/*--------------------------------------------------------------- * Callback to delay user's crashed edits. */voidIshAppP::CancelEditSavedComp(Widget dialog, IshAppP*, XtPointer){ XtDestroyWidget(dialog);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -