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

📄 readwinp.c

📁 linux下的E_MAIL客户端源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* *  $Id: ReadWinP.C,v 1.5 2000/08/07 11:05:17 evgeny Exp $ *   *  Copyright (c) 1994 HAL Computer Systems International, Ltd. *  *          HAL COMPUTER SYSTEMS INTERNATIONAL, LTD. *                  1315 Dell Avenue *                  Campbell, CA  95008 * * Author: Greg Hilton * Contributors: Tom Lang, Frank Bieser, and others * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * http://www.gnu.org/copyleft/gpl.html * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */#include <config.h>#include "ReadWinP.h"#include "ReadWinC.h"#include "QuickMenu.h"#include "IshAppC.h"#include "AppPrefC.h"#include "FolderPrefC.h"#include "ReadPrefC.h"#include "ReplyPrefC.h"#include "SaveMgrC.h"#include "HeaderC.h"#include "HeaderValC.h"#include "HeadPrefC.h"#include "MsgC.h"#include "MainWinC.h"#include "FolderC.h"#include "ButtonMgrC.h"#include "MsgPartC.h"#include "ReadIconC.h"#include "Mailcap.h"#include "ParamC.h"#include "LocalTextWinC.h"#include "PipeWinC.h"#include "PrintWinC.h"#include "LoginWinC.h"#include "MsgItemC.h"#include "FileChooserWinC.h"#include "SortMgrC.h"#include "SendWinC.h"#include "reading.xpm"#include <hgl/WArgList.h>#include <hgl/rsrc.h>#include <hgl/WXmString.h>#include <hgl/MimeRichTextC.h>#include <hgl/CharC.h>#include <hgl/PixmapC.h>#include <hgl/VBoxC.h>#include <Xm/CascadeB.h>#include <Xm/PushB.h>#include <Xm/RowColumn.h>#include <Xm/Separator.h>#include <Xm/ToggleB.h>#include <Xm/Form.h>#include <Xm/Label.h>#include <Xm/PanedW.h>#include <Xm/AtomMgr.h>#include <signal.h>	// For kill#define CreatePB	XmCreatePushButtonPtrListC	*ReadWinP::displayPixmaps = NULL;PtrListC	*ReadWinP::fetchDataList  = NULL;PtrListC	*ReadWinP::fetchPixmaps   = NULL;/*--------------------------------------------------------------- *  Constructor */ReadWinP::ReadWinP(ReadWinC *rw){   pub = rw;   msgHeadText    = NULL;   msgBodyText    = NULL;   readIcon       = NULL;   viewType       = ishApp->readPrefs->viewType;   recentMenuTime = 0;   pipeWin	  = NULL;   printWin	  = NULL;   loginWin	  = NULL;   savePartWin    = NULL;   editWin	  = NULL;   if ( !displayPixmaps ) {      displayPixmaps = new PtrListC;      fetchDataList  = new PtrListC;      fetchPixmaps   = new PtrListC;   }}/*--------------------------------------------------------------- *  Destructor */ReadWinP::~ReadWinP(){//// Kill any display processes still running//   u_int	count = displayDataList.size();   int	i;   for (i=0; i<count; i++) {      DisplayDataT	*data = (DisplayDataT*)*displayDataList[i];      if ( kill(-data->pid, 0) == 0 ) kill(-data->pid, SIGKILL);   }//// Delete local text windows//   count = textWinList.size();   for (i=0; i<count; i++) {      LocalTextWinC	*tw = (LocalTextWinC*)*textWinList[i];      delete tw;   }//// Delete local message windows//   count = msgWinList.size();   for (i=0; i<count; i++) {      ReadWinC	*rw = (ReadWinC*)*msgWinList[i];      delete rw;   }   delete pipeWin;   delete printWin;   delete loginWin;   delete savePartWin;   delete editWin;   delete msgHeadText;   delete msgBodyText;   delete readIcon;   if ( ishApp->exiting ) {//// Kill any retrieval processes still running//      count = fetchDataList->size();      for (i=count-1; i>=0; i--) {	 FetchDataT	*data = (FetchDataT*)*(*fetchDataList)[i];	 if ( kill(-data->pid, 0) == 0 ) kill(-data->pid, SIGKILL);      }      count = displayPixmaps->size();      for (i=0; i<count; i++) {	 PixmapC	*pm = (PixmapC*)*(*displayPixmaps)[i];	 delete pm;      }      count = fetchPixmaps->size();      for (i=0; i<count; i++) {	 PixmapC	*pm = (PixmapC*)*(*fetchPixmaps)[i];	 delete pm;      }   } // End if exiting} // End destructor/*--------------------------------------------------------------- *  Method to build menu hierarchy */voidReadWinP::BuildMenus(){   pub->AddMenuBar();   BuildFileMenu();   BuildReplyMenu();   BuildOptMenu();   if ( pub->fullFunction ) pub->AddHelpMenu();}/*--------------------------------------------------------------- *  Method to build file menu hierarchy */voidReadWinP::BuildFileMenu(){   Cardinal	wcount;   Widget	wlist[16];   WArgList	args;//// Create filePD hierarchy//// filePD//    CascadeButton     fileNextCB//    PulldownMenu      fileNextPD//    CascadeButton     filePrevCB//    PulldownMenu      filePrevPD//    CascadeButton     fileSaveCB//    PulldownMenu      fileSavePD//    PushButton	filePrintPB//    CascadeButton     fileFilterCB//    PulldownMenu      fileFilterPD//    Separator		fileSep1//    PushButton	fileUndeletePB//    PushButton	fileDeletePB//    PushButton	fileDelClosePB//    Separator		fileSep2//    PushButton	fileClosePB//   Widget fileNextCB;   Widget filePrevCB;   if ( pub->fullFunction ) {      fileNextCB = XmCreateCascadeButton(pub->filePD, "fileNextCB", 0,0);      filePrevCB = XmCreateCascadeButton(pub->filePD, "filePrevCB", 0,0);   }   else {      fileNextPB = XmCreatePushButton(pub->filePD, "fileNextPB", 0,0);      filePrevPB = XmCreatePushButton(pub->filePD, "filePrevPB", 0,0);   }   Widget fileSaveCB = XmCreateCascadeButton(pub->filePD, "fileSaveCB",   0,0);   filePrintPB       = XmCreatePushButton   (pub->filePD, "filePrintPB",  0,0);   Widget fileFilterCB = XmCreateCascadeButton(pub->filePD, "fileFilterCB",0,0);   Widget fileSep1   = XmCreateSeparator    (pub->filePD, "fileSep1",    0,0);   Widget fileSep2;   if ( pub->fullFunction ) {      fileUndeletePB = XmCreatePushButton(pub->filePD, "fileUndeletePB", 0,0);      fileDeletePB   = XmCreatePushButton(pub->filePD, "fileDeletePB",   0,0);      fileDelClosePB = XmCreatePushButton(pub->filePD, "fileDelClosePB", 0,0);      fileSep2       = XmCreateSeparator (pub->filePD, "fileSep2",       0,0);   }   Widget fileClosePB = XmCreatePushButton(pub->filePD, "fileClosePB",  0,0);   wcount = 0;   wlist[wcount++] = fileSaveCB;   wlist[wcount++] = filePrintPB;   wlist[wcount++] = fileFilterCB;   wlist[wcount++] = fileSep1;   if ( pub->fullFunction ) {      wlist[wcount++] = fileNextCB;      wlist[wcount++] = filePrevCB;      wlist[wcount++] = fileUndeletePB;      wlist[wcount++] = fileDeletePB;      wlist[wcount++] = fileDelClosePB;      wlist[wcount++] = fileSep2;   }   else {      wlist[wcount++] = fileNextPB;      wlist[wcount++] = filePrevPB;   }   wlist[wcount++] = fileClosePB;   XtManageChildren(wlist, wcount);//// Create fileNextPD hierarchy////    fileNextPD//       PushButton	   fileNextPB//       PushButton	   fileNextUnreadPB//       PushButton	   fileNextSenderPB//       PushButton	   fileNextSubjectPB//   if ( pub->fullFunction ) {      Widget fileNextPD = XmCreatePulldownMenu (pub->filePD, "fileNextPD", 0,0);      fileNextPB        = CreatePB(fileNextPD, "fileNextPB",        0,0);      fileNextUnreadPB  = CreatePB(fileNextPD, "fileNextUnreadPB",  0,0);      fileNextSenderPB  = CreatePB(fileNextPD, "fileNextSenderPB",  0,0);      fileNextSubjectPB = CreatePB(fileNextPD, "fileNextSubjectPB", 0,0);      wcount = 0;      wlist[wcount++] = fileNextPB;      wlist[wcount++] = fileNextUnreadPB;      wlist[wcount++] = fileNextSenderPB;      wlist[wcount++] = fileNextSubjectPB;      XtManageChildren(wlist, wcount);	// fileNextPD children      XtVaSetValues(fileNextCB, XmNsubMenuId, fileNextPD, NULL);   }//// Create filePrevPD hierarchy////    filePrevPD//       PushButton	   filePrevPB//       PushButton	   filePrevUnreadPB//       PushButton	   filePrevSenderPB//       PushButton	   filePrevSubjectPB//   if ( pub->fullFunction ) {      Widget filePrevPD = XmCreatePulldownMenu (pub->filePD, "filePrevPD", 0,0);      filePrevPB        = CreatePB(filePrevPD, "filePrevPB",        0,0);      filePrevUnreadPB  = CreatePB(filePrevPD, "filePrevUnreadPB",  0,0);      filePrevSenderPB  = CreatePB(filePrevPD, "filePrevSenderPB",  0,0);      filePrevSubjectPB = CreatePB(filePrevPD, "filePrevSubjectPB", 0,0);      wlist[0] = filePrevPB;      wlist[1] = filePrevUnreadPB;      wlist[2] = filePrevSenderPB;      wlist[3] = filePrevSubjectPB;      XtManageChildren(wlist, 4);	// filePrevPD children      XtVaSetValues(filePrevCB, XmNsubMenuId, filePrevPD, NULL);   }//// Create fileSavePD hierarchy////    fileSavePD//       PushButton        fileSavePB//       CascadeButton     fileSaveRecentCB//       CascadeButton     fileSaveQuickCB//       PushButton        fileSaveSelPB//       PushButton        fileSaveToPB//       PushButton        fileSaveToFilePB//   Widget fileSavePD = XmCreatePulldownMenu(pub->filePD, "fileSavePD",  0,0);   fileSavePB        = XmCreatePushButton(fileSavePD, "fileSavePB",    0,0);   fileSaveRecentCB  =      XmCreateCascadeButton(fileSavePD, "fileSaveRecentCB", 0,0);   fileSaveRecentPD = XmCreatePulldownMenu(fileSavePD, "fileSaveRecentPD", 0,0);   XtVaSetValues(fileSaveRecentCB, XmNsubMenuId, fileSaveRecentPD, NULL);//// Add a data structure and a pulldown menu for the quick function//   QuickInfoT	*cbData = new QuickInfoT;   if ( (!ishApp->appPrefs->usingImap) ||	(!ishApp->folderPrefs->UsingLocal()) )       cbData->dir = ishApp->appPrefs->FolderDir();   else       cbData->dir = "";   cbData->menu = XmCreatePulldownMenu(fileSavePD, "quickPD", 0,0);   cbData->menuTime = 0;   args.Reset();   args.UserData(cbData);   args.SubMenuId(cbData->menu);   fileSaveQuickCB   =      XmCreateCascadeButton(fileSavePD, "fileSaveQuickCB",  ARGS);   fileSaveSelPB    = XmCreatePushButton(fileSavePD, "fileSaveSelPB",    0,0);   fileSaveToPB     = XmCreatePushButton(fileSavePD, "fileSaveToPB",     0,0);   fileSaveToFilePB = XmCreatePushButton(fileSavePD, "fileSaveToFilePB", 0,0);   wcount = 0;   wlist[wcount++] = fileSavePB;   wlist[wcount++] = fileSaveRecentCB;   wlist[wcount++] = fileSaveQuickCB;   wlist[wcount++] = fileSaveSelPB;   wlist[wcount++] = fileSaveToPB;   wlist[wcount++] = fileSaveToFilePB;   XtManageChildren(wlist, wcount);	// fileSavePD children   XtVaSetValues(fileSaveCB, XmNsubMenuId, fileSavePD, NULL);//// Create fileFilterPD hierarchy////    fileFilterPD//       PushButton	fileMimePB//       PushButton	fileDecryptPB//       PushButton	fileAuthPB//       PushButton	fileEditPB//       PushButton	filePipePB//   Widget fileFilterPD = XmCreatePulldownMenu(pub->filePD, "fileFilterPD", 0,0);   if ( pub->fullFunction )      fileMimePB = XmCreatePushButton       (fileFilterPD, "fileMimePB",   0,0);   Widget fileDecryptPB = XmCreatePushButton(fileFilterPD, "fileDecryptPB",0,0);   Widget fileAuthPB    = XmCreatePushButton(fileFilterPD, "fileAuthPB",   0,0);   Widget fileEditPB;   if ( pub->fullFunction )      fileEditPB = XmCreatePushButton       (fileFilterPD, "fileEditPB",   0,0);   filePipePB           = XmCreatePushButton(fileFilterPD, "filePipePB",   0,0);   wcount = 0;   wlist[wcount++] = fileDecryptPB;   wlist[wcount++] = fileAuthPB;   wlist[wcount++] = filePipePB;   if ( pub->fullFunction ) {      wlist[wcount++] = fileMimePB;      wlist[wcount++] = fileEditPB;   }   XtManageChildren(wlist, wcount);   XtVaSetValues(fileFilterCB, XmNsubMenuId, fileFilterPD, NULL);//// Set initial sensitivities//   XtSetSensitive(fileSavePB,       False);   XtSetSensitive(fileSaveSelPB,    False);   XtSetSensitive(fileSaveToPB,     False);   XtSetSensitive(fileSaveToFilePB, False);   XtSetSensitive(fileSaveRecentCB, False);   XtSetSensitive(fileSaveQuickCB,  False);   XtSetSensitive(filePrintPB,      False);   XtSetSensitive(filePipePB,       False);   if ( pub->fullFunction ) {      XtSetSensitive(fileMimePB,     False);      XtSetSensitive(fileUndeletePB, False);      XtSetSensitive(fileDeletePB,   False);      XtSetSensitive(fileDelClosePB, False);   }//// Add callbacks//   //AddCascading(fileSaveRecentCB, PrepareRecentMenu, this);   AddCascading(fileSaveQuickCB,  PrepareQuickMenu,  this);   AddActivate(fileNextPB, DoNext, this);   AddActivate(filePrevPB, DoPrev, this);   if ( pub->fullFunction ) {      AddActivate(fileNextUnreadPB,  DoNextUnread,  this);      AddActivate(fileNextSenderPB,  DoNextSender,  this);      AddActivate(fileNextSubjectPB, DoNextSubject, this);      AddActivate(filePrevUnreadPB,  DoPrevUnread,  this);      AddActivate(filePrevSenderPB,  DoPrevSender,  this);      AddActivate(filePrevSubjectPB, DoPrevSubject, this);   }   AddActivate(fileSavePB,       DoSave,       this);   AddActivate(fileSaveSelPB,    DoSaveSel,    this);   AddActivate(fileSaveToPB,     DoSaveTo,     this);   AddActivate(fileSaveToFilePB, DoSaveToFile, this);   AddActivate(filePrintPB,      DoPrint,      this);   AddActivate(filePipePB,       DoPipe,       this);   AddActivate(fileDecryptPB,	 DoDecrypt,    this);   AddActivate(fileAuthPB,	 DoAuth,       this);   if ( pub->fullFunction ) {      AddActivate(fileMimePB,     DoSunToMime, this);      AddActivate(fileEditPB,	  DoEdit,      this);      AddActivate(fileUndeletePB, DoUndelete,  this);      AddActivate(fileDeletePB,   DoDelete,    this);      AddActivate(fileDelClosePB, DoDelClose,  this);   }   AddActivate(fileClosePB, DoClose, this);   pub->AddHideCallback((CallbackFn*)DoHide, NULL);} // End BuildFileMenu/*--------------------------------------------------------------- *  Method to build reply menu hierarchy */voidReadWinP::BuildReplyMenu(){   Cardinal	wcount;   Widget	wlist[10];//// Create cascade button and pulldown menu//          replyCB = XmCreateCascadeButton(pub->menuBar, "replyCB", 0,0);   Widget replyPD = XmCreatePulldownMenu (pub->menuBar, "replyPD", 0,0);   XtVaSetValues(replyCB, XmNsubMenuId, replyPD, NULL);   XtManageChild(replyCB);   XtSetSensitive(replyCB, False);//// Create replyPD hierarchy//// replyPD//    PushButton	replyPB//    PushButton	replyIncPB//    PushButton	replyAllPB//    PushButton	replyAllIncPB//    Separator		replySep1//    PushButton	forwardPB//    PushButton	forward822PB//    PushButton	resendPB//   Widget replyPB       = XmCreatePushButton(replyPD, "replyPB",       0,0);   Widget replyIncPB    = XmCreatePushButton(replyPD, "replyIncPB",    0,0);   Widget replyAllPB    = XmCreatePushButton(replyPD, "replyAllPB",    0,0);   Widget replyAllIncPB = XmCreatePushButton(replyPD, "replyAllIncPB", 0,0);   Widget replySep1     = XmCreateSeparator (replyPD, "replySep1",     0,0);   Widget forwardPB     = XmCreatePushButton(replyPD, "forwardPB",     0,0);

⌨️ 快捷键说明

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