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

📄 savemgrc.c

📁 linux下的E_MAIL客户端源码
💻 C
📖 第 1 页 / 共 2 页
字号:
      return;   }   Boolean move = XtIsManaged(This->folderOpFrame) &&		  XmToggleButtonGetState(This->folderMoveTB);   if ( This->saveMsg )      This->SaveMsgToFolder(This->saveMsg, name, move);   else      This->SaveMsgsToFolder(*This->saveItemList, name, move);} // End FinishSaveFolder/*------------------------------------------------------------------------ * Method to save a single message to an unnamed file */voidSaveMgrC::SaveMsgToFile(MsgC* msg, Widget dialogParent, Boolean moveOk){   halApp->BusyCursor(True);   if ( !saveFileWin ) BuildSaveFileWin(dialogParent);//// See if Move/Copy buttons are displayed//   if ( moveOk ) {      XtManageChild(fileOpFrame);//// Set move or copy depending on whether saved messages are automatically//    deleted (save == move)//      if ( ishApp->appPrefs->deleteSaved )	 XmToggleButtonSetState(fileMoveTB, True, True);      else	 XmToggleButtonSetState(fileCopyTB, True, True);   }   else {      XtUnmanageChild(fileOpFrame);   }//// Display dialog//   saveMsg = msg;   saveItemList->removeAll();   saveFileWin->Show(dialogParent);   halApp->BusyCursor(False);} // End SaveMsgToFile/*------------------------------------------------------------------------ * Method to save several messages to an unnamed file */voidSaveMgrC::SaveMsgsToFile(VItemListC& msgList, Widget dialogParent,			 Boolean moveOk){   halApp->BusyCursor(True);   if ( !saveFileWin ) BuildSaveFileWin(dialogParent);//// See if Move/Copy buttons are displayed//   if ( moveOk ) {      XtManageChild(fileOpFrame);//// Set move or copy depending on whether saved messages are automatically//    deleted (save == move)//      if ( ishApp->appPrefs->deleteSaved )	 XmToggleButtonSetState(fileMoveTB, True, True);      else	 XmToggleButtonSetState(fileCopyTB, True, True);   }   else {      XtUnmanageChild(fileOpFrame);   }//// Display dialog//   saveMsg       = NULL;   *saveItemList = msgList;   saveFileWin->Show(dialogParent);   halApp->BusyCursor(False);} // End SaveMsgsToFile/*------------------------------------------------------------------------ * Method to build the save-to-file dialog */voidSaveMgrC::BuildSaveFileWin(Widget parent){   if ( saveFileWin ) return;//// Create dialog//   saveFileWin = new FileChooserWinC(parent, "saveFileWin");//// Add pane for header saving query.  Put it in the first position//   WArgList	args;   args.PositionIndex(0);   args.AllowResize(True);   Widget headFrame = XmCreateFrame(saveFileWin->PanedWin(), "saveHdrFrame",				    ARGS);   Widget headRadio = XmCreateRadioBox(headFrame, "saveHdrRadio", 0,0);   headAllTB  = XmCreateToggleButton(headRadio, "saveHdrAllTB",  0,0);   headDispTB = XmCreateToggleButton(headRadio, "saveHdrDispTB", 0,0);   headNoneTB = XmCreateToggleButton(headRadio, "saveHdrNoneTB", 0,0);   XtManageChild(headAllTB);   XtManageChild(headDispTB);   XtManageChild(headNoneTB);   XtManageChild(headRadio);	// headFrame children   XtManageChild(headFrame);	// panedWin children   saveFileWin->HandleHelp(headAllTB);   saveFileWin->HandleHelp(headDispTB);   saveFileWin->HandleHelp(headNoneTB);   XmToggleButtonSetState(headNoneTB, True, True);//// Add pane for Move/Copy choices in the last position//   Cardinal	childCount;   XtVaGetValues(saveFileWin->PanedWin(), XmNnumChildren, &childCount, NULL);   args.Reset();   args.PositionIndex(childCount+1);   args.ShadowThickness(0);   args.AllowResize(True);   fileOpFrame = XmCreateFrame(saveFileWin->PanedWin(), "opFrame", ARGS);   args.Reset();   args.ChildType(XmFRAME_TITLE_CHILD);   args.ChildHorizontalAlignment(XmALIGNMENT_CENTER);   Widget	radioFrame = XmCreateFrame(fileOpFrame, "radioFrame", ARGS);   args.Reset();   args.Orientation(XmHORIZONTAL);   args.Packing(XmPACK_TIGHT);   Widget radio = XmCreateRadioBox(radioFrame, "opRadio", ARGS);   fileMoveTB = XmCreateToggleButton(radio, "moveTB", 0,0);   fileCopyTB = XmCreateToggleButton(radio, "copyTB", 0,0);   XtManageChild(fileMoveTB);   XtManageChild(fileCopyTB);   XtManageChild(radio);	// radioFrame children   XtManageChild(radioFrame);	// fileOpFrame children   saveFileWin->HandleHelp(fileMoveTB);   saveFileWin->HandleHelp(fileCopyTB);   saveFileWin->SingleSelect(True);   saveFileWin->AddVerifyCallback((CallbackFn*)VerifySaveFiles, this);   saveFileWin->AddOkCallback    ((CallbackFn*)FinishSaveFile,  this);   saveFileWin->HideList();   saveFileWin->SetDirectory(".");   saveFileWin->SetDefaultDir(".");   saveFileWin->ShowDirsInFileList(False);   saveFileWin->ShowFilesInFileList(True);} // End BuildSaveFileWin/*--------------------------------------------------------------- *  Callbacks to handle selection of file name for save */voidSaveMgrC::FinishSaveFile(StringListC *list, SaveMgrC *This){   StringC	name = *((*list)[0]);   if ( name.size() == 0 ) {      StringC	msg = "Please enter a file name.";      set_invalid(This->saveFileWin->SelectTF(), True, True);      halApp->PopupMessage(msg);      This->saveFileWin->HideOk(False);      return;   }//// If the file already exists, see if they want it replaced or appended//   if ( access(name, F_OK) == 0 ) {//// Make sure name is not a directory//      if ( IsDir(name) ) {	 StringC errmsg(name);	 errmsg += " is a directory.";	 halApp->PopupMessage(errmsg);	 return;      }//// See whether they want to replace or append//      switch ( This->SaveToFileQuery(name) ) {	 case (QUERY_YES):	// Means APPEND	    break;	 case (QUERY_NO): {	// Means REPLACE	    int	fd = open(name, O_WRONLY|O_TRUNC, 0);	    if ( fd > 0 ) close(fd);	 } break;	 case (QUERY_CANCEL):	 case (QUERY_NONE):	 default:	    return;      }   } // End if file already exists   else if ( !MakeFile(name) )      return;   Boolean move = XtIsManaged(This->fileOpFrame) &&		  XmToggleButtonGetState(This->fileMoveTB);   Boolean	copyHead = !XmToggleButtonGetState(This->headNoneTB);   Boolean	allHead  =  XmToggleButtonGetState(This->headAllTB);   if ( This->saveMsg )      This->SaveMsgToFile(This->saveMsg, name, move, copyHead, allHead);   else      This->SaveMsgsToFile(*This->saveItemList, name, move, copyHead, allHead);} // End FinishSaveFile/*--------------------------------------------------------------- *  Callback routines to double check file list in file chooser */voidSaveMgrC::VerifySaveFolders(StringListC *list, SaveMgrC *This){   This->VerifySaveList(*list, This->saveFolderWin);}voidSaveMgrC::VerifySaveFiles(StringListC *list, SaveMgrC *This){   This->VerifySaveList(*list, This->saveFileWin);}voidSaveMgrC::VerifySaveList(StringListC& list, FileChooserWinC *win){   StringC	dname = win->Directory();   if ( !win->UsingImap() ) {      chdir(dname);//// Remove lock files and unwritable files//      unsigned	count = list.size();      for (int i=count-1; i>=0; i--) {	 StringC	*name = list[i];	 if ( name->EndsWith(".lock") || access(*name, W_OK) != 0 )	    list.remove(i);      }      chdir(ishApp->startupDir);   }//// Remove the current folder//   if ( !dname.EndsWith("/") ) dname += "/";   int		dlen = dname.size();   StringC	name = ishApp->mainWin->curFolder->name;//// See if folder is in same directory as file chooser//   if ( name.StartsWith(dname) ) {      name.CutBeg(dname.size());      int	index = list.indexOf(name);      if ( index != list.NULL_INDEX ) list.remove(index);   }} // End VerifySaveList/*------------------------------------------------------------------------ * Method to save a single message to a named file */voidSaveMgrC::SaveMsgToFile(MsgC* msg, const char *name, Boolean delAfter,			Boolean copyHead, Boolean allHead){   ishApp->BusyCursor(True);//// Save the message//   StringC	msgStr("Message ");   msgStr += msg->Number();   Boolean deleted = False;   Boolean copied = msg->WriteFile(name, copyHead, allHead, /*statHead=*/False,				   /*addBlank*/False, /*protectFrom*/False);   if ( copied ) {      msg->SetSaved();//// Delete if requested//      deleted = delAfter && ishApp->mainWin->DeleteMsg(msg);//// Display status//      msgStr += " saved to ";      msgStr += name;      if ( deleted ) msgStr += " and deleted.";   } // End if copied   else {      msgStr = " NOT saved.";   }   ishApp->Broadcast(msgStr);   if ( msg->folder && msg->folder->active && msg->icon )      ishApp->mainWin->MsgVBox().Refresh();   ishApp->mainWin->UpdateTitle();   ishApp->BusyCursor(False);} // End SaveMsgToFile/*------------------------------------------------------------------------ * Method to save several messages to an open folder */voidSaveMgrC::SaveMsgsToFile(VItemListC& list, const char *name, Boolean delAfter,			 Boolean copyHead, Boolean allHead){   ishApp->BusyCursor(True);//// Save the messages//   VItemListC	saveList;   unsigned	count = list.size();   CharC	nl("\n");   int	i;   for (i=0; i<count; i++) {      MsgItemC	*item = (MsgItemC*)list[i];      MsgC	*msg = item->msg;      Boolean	copied = msg->WriteFile(name, copyHead, allHead,      					/*statHead=*/False,      					/*addBlank*/True, /*protectFrom*/False);      if ( copied ) {	 msg->SetSaved();	 saveList.add((VItemC*)item);      }   } // End for each message   count = saveList.size();//// Delete saved messages if requested//   Boolean deleted = (delAfter && count>0 &&		      ishApp->mainWin->DeleteItems(saveList));   ishApp->mainWin->MsgVBox().Refresh();//// Build status message//   StringC	msgStr;   if ( count > 0 ) {      msgStr = "Message";      if ( count > 1 ) msgStr += 's';      msgStr += ' ';      for (i=0; i<count; i++) {	 if ( i>0 ) msgStr += ", ";	 MsgItemC	*item = (MsgItemC*)saveList[i];	 msgStr += item->msg->Number();      }      msgStr += " saved to ";      msgStr += name;      if ( deleted ) msgStr += " and deleted.";   }   else {      msgStr = "NO messages saved";   }   ishApp->Broadcast(msgStr);   ishApp->mainWin->UpdateTitle();   ishApp->BusyCursor(False);} // End SaveMsgsToFile/*--------------------------------------------------------------- *  Method to query for replace or append during save-to-file */QueryAnswerTSaveMgrC::SaveToFileQuery(const char *file){   static QueryAnswerT	answer;//// Create the dialog if necessary//   if ( !saveToFileQueryWin ) {      halApp->BusyCursor(True);      WArgList	args;      args.DialogStyle(XmDIALOG_FULL_APPLICATION_MODAL);      if ( halApp->questionPM ) args.SymbolPixmap(halApp->questionPM);      Widget w = XmCreateQuestionDialog(*halApp, "saveToFileQueryWin", ARGS);      XtAddCallback(w, XmNokCallback, (XtCallbackProc)AnswerQuery,		    (XtPointer)&answer);      XtAddCallback(w, XmNcancelCallback, (XtCallbackProc)AnswerQuery,		    (XtPointer)&answer);      XtAddCallback(w, XmNhelpCallback, (XtCallbackProc)HalAppC::DoHelp,      		    (char *) "helpcard");      Widget replacePB = XmCreatePushButton(w, "replacePB", 0,0);      XtManageChild(replacePB);      XtAddCallback(replacePB, XmNactivateCallback, (XtCallbackProc)AnswerQuery,     		    (XtPointer)&answer);//// Trap window manager close function//      XmAddWMProtocolCallback(XtParent(w), halApp->delWinAtom,			      (XtCallbackProc)WmClose,			      (caddr_t)&answer);      saveToFileQueryWin = w;      halApp->BusyCursor(False);   } // End if save query dialog not created//// Add the file name to the message string//   StringC	msg = get_string(saveToFileQueryWin, "messageString",				 "$FILE exists.");   msg.Replace("$FILE", file);   WXmString	wstr = (char *)msg;   XtVaSetValues(saveToFileQueryWin, XmNmessageString, (XmString)wstr, NULL);   XtManageChild(saveToFileQueryWin);   XMapRaised(halApp->display, XtWindow(XtParent(saveToFileQueryWin)));//// 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);   }   XtUnmanageChild(saveToFileQueryWin);   XSync(halApp->display, False);   XmUpdateDisplay(saveToFileQueryWin);   return answer;} // End SaveToFileQuery

⌨️ 快捷键说明

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