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

📄 mailbox.pas

📁 siMail, siMail, siMail, siMail
💻 PAS
📖 第 1 页 / 共 5 页
字号:
(*
# (C) Copyright 2003
# Miha Vrhovnik, miha.vrhovnik@guest.arnes.si
#
# 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.
#
# 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
#
# The Initial Developer of the Original Code is Miha Vrhovnik (Slovenia).
# Portions created by Miha Vrhovnik are Copyright (c)2000-2003.
# All Rights Reserved.
#==============================================================================
# Contributor(s):
#==============================================================================
# History: see whats new.txt from distribution package
#==============================================================================
*)

//because a lot of internal changes somebody should clean up a little this unit

unit mailBox;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, VirtualTrees, ImgList, gnugettext, Menus, ExtCtrls, GPanel, account,
  StdCtrls, ActnList, ActiveX, signatures, OmniXMLConf, addrBk, defFldrs, Registry,
  TB2Item, TBX, JvComponent, TB2Dock, TB2ToolWindow, TBXDkPanels, Math, StrUtils,
  JclFileUtils;

type TSelectedNodeType = (sntUser, sntAccount, sntMailbox, sntFolder);

type
  TfrmMailbox = class(TForm)
    trMailbox: TVirtualStringTree;
    ActionList: TActionList;
    actAccountNew: TAction;
    actAccountRename: TAction;
    actAccountManageRules: TAction;
    actAccountFetchMessagesThis: TAction;
    actAccountComposeMessageThis: TAction;
    actAccountServerProperties: TAction;
    actAccountNewFolder: TAction;
    actMailboxNew: TAction;
    actColumnsUnreadMessages: TAction;
    actColumnsTotalMessages: TAction;
    actUsersSwitch: TAction;
    actUsersManage: TAction;
    actMailboxRename: TAction;
    actMailboxCompress: TAction;
    actMailboxPack: TAction;
    actMailboxPasswordProtect: TAction;
    actMailboxEmpty: TAction;
    actMailboxProperties: TAction;
    actMailboxPackAll: TAction;
    actMailboxCompressAll: TAction;
    actAccountFetchMessagesAll: TAction;
    actMailobxFilterManager: TAction;
    actMailboxEmptyJunk: TAction;
    actMailboxEmptyTrash: TAction;
    actAccountPreviewThis: TAction;
    actAccountPreviewAll: TAction;
    actAccountSendThis: TAction;
    actAccountRefreshTot: TAction;
    popUser: TTBXPopupMenu;
    popAccount: TTBXPopupMenu;
    popMbox: TTBXPopupMenu;
    MenuItem10: TTBXItem;
    NewUser1: TTBXSubmenuItem;
    Switch1: TTBXItem;
    Manage1: TTBXItem;
    MenuItem16: TTBXSeparatorItem;
    Fetchmessagesonallaccounts2: TTBXItem;
    N5: TTBXSeparatorItem;
    MenuItem17: TTBXSubmenuItem;
    MenuItem18: TTBXItem;
    MenuItem19: TTBXItem;
    MenuItem1: TTBXItem;
    MenuItem3: TTBXItem;
    Fetchmessagesonallaccounts1: TTBXItem;
    Previewmailonthisaccount1: TTBXItem;
    Previewmailonallaccounts1: TTBXItem;
    Sendunsentmessages1: TTBXItem;
    MenuItem4: TTBXItem;
    Serverproperties1: TTBXItem;
    Rename1: TTBXItem;
    Delete1: TTBXItem;
    Refreshtotals1: TTBXItem;
    N2: TTBXSeparatorItem;
    NewAccount1: TTBXItem;
    NewFolder1: TTBXItem;
    mnuNewMailbox1: TTBXItem;
    MenuItem6: TTBXSeparatorItem;
    MenuItem7: TTBXSubmenuItem;
    MenuItem8: TTBXItem;
    MenuItem9: TTBXItem;
    mnuNewMailbox: TTBXItem;
    Edit1: TTBXItem;
    actMailboxDelete1: TTBXItem;
    Compress1: TTBXItem;
    Pack1: TTBXItem;
    PasswordProtect1: TTBXItem;
    Filtermanager1: TTBXItem;
    Empty1: TTBXItem;
    N4: TTBXSeparatorItem;
    Packall1: TTBXItem;
    Compressall1: TTBXItem;
    N6: TTBXSeparatorItem;
    Mailboxemptytrash1: TTBXItem;
    Emptyjunkmail1: TTBXItem;
    N1: TTBXSeparatorItem;
    Properties1: TTBXItem;
    mnuColumns: TTBXSubmenuItem;
    mnuUnread: TTBXItem;
    mnuTotal: TTBXItem;
    TBXItem1: TTBXItem;
    TBXSeparatorItem1: TTBXSeparatorItem;
    actAccountPackAll: TAction;
    TBXItem2: TTBXItem;
    TBXItem3: TTBXItem;
    actAccountSendAll: TAction;
    TBXItem4: TTBXItem;
    actAccountSendFetchThis: TAction;
    actAccountSendFetchAll: TAction;
    TBXItem5: TTBXItem;
    TBXItem6: TTBXItem;
    TBXToolWindow1: TTBXToolWindow;
    Label1: TLabel;
    lblJustFontLabel: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure trMailboxGetImageIndex(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
      var Ghosted: Boolean; var ImageIndex: Integer);
    procedure trMailboxGetText(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: WideString);
    procedure trMailboxGetNodeDataSize(Sender: TBaseVirtualTree;
      var NodeDataSize: Integer);
    procedure trMailboxInitNode(Sender: TBaseVirtualTree; ParentNode,
      Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
    procedure trMailboxInitChildren(Sender: TBaseVirtualTree;
      Node: PVirtualNode; var ChildCount: Cardinal);
    procedure actMailboxNewExecute(Sender: TObject);
    procedure actMailboxRenameExecute(Sender: TObject);
    procedure actMailboxRenameUpdate(Sender: TObject);
    procedure actAccountNewExecute(Sender: TObject);
    procedure actMailboxNewUpdate(Sender: TObject);
    procedure trMailboxChange(Sender: TBaseVirtualTree;
      Node: PVirtualNode);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure trMailboxDragOver(Sender: TBaseVirtualTree; Source: TObject;
      Shift: TShiftState; State: TDragState; Pt: TPoint; Mode: TDropMode;
      var Effect: Integer; var Accept: Boolean);
    procedure trMailboxDragDrop(Sender: TBaseVirtualTree; Source: TObject;
      DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState;
      Pt: TPoint; var Effect: Integer; Mode: TDropMode);
    procedure actMailboxPackExecute(Sender: TObject);
    procedure actMailboxPropertiesExecute(Sender: TObject);
    procedure trMailboxGetPopupMenu(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; const P: TPoint;
      var AskParent: Boolean; var PopupMenu: TPopupMenu);
    procedure actMailboxEmptyExecute(Sender: TObject);
    procedure actMailboxEmptyUpdate(Sender: TObject);
    procedure actMailboxEmptyJunkUpdate(Sender: TObject);
    procedure actMailboxEmptyTrashExecute(Sender: TObject);
    procedure actMailboxEmptyTrashUpdate(Sender: TObject);
    procedure actMailboxEmptyJunkExecute(Sender: TObject);
    procedure actMailboxPackUpdate(Sender: TObject);
    procedure actAccountFetchMessagesThisExecute(Sender: TObject);
    procedure actAccountFetchMessagesThisUpdate(Sender: TObject);
    procedure actAccountComposeMessageThisExecute(Sender: TObject);
    procedure actMailboxPasswordProtectExecute(Sender: TObject);
    procedure actMailboxPasswordProtectUpdate(Sender: TObject);
    procedure actAccountPreviewThisExecute(Sender: TObject);
    procedure actColumnsUnreadMessagesExecute(Sender: TObject);
    procedure actColumnsTotalMessagesExecute(Sender: TObject);
    procedure actColumnsTotalMessagesUpdate(Sender: TObject);
    procedure actColumnsUnreadMessagesUpdate(Sender: TObject);
    procedure actUsersManageExecute(Sender: TObject);
    procedure actUsersSwitchExecute(Sender: TObject);
    procedure actUsersSwitchUpdate(Sender: TObject);
    procedure actAccountRenameExecute(Sender: TObject);
    procedure actAccountRenameUpdate(Sender: TObject);
    procedure actAccountServerPropertiesExecute(Sender: TObject);
    procedure trMailboxPaintText(Sender: TBaseVirtualTree;
      const TargetCanvas: TCanvas; Node: PVirtualNode;
      Column: TColumnIndex; TextType: TVSTTextType);
    procedure actAccountFetchMessagesAllExecute(Sender: TObject);
    procedure actAccountFetchMessagesAllUpdate(Sender: TObject);
    procedure actAccountServerPropertiesUpdate(Sender: TObject);
    procedure actAccountSendThisUpdate(Sender: TObject);
    procedure actAccountSendThisExecute(Sender: TObject);
    procedure actUsersManageUpdate(Sender: TObject);
    procedure actAccountRefreshTotExecute(Sender: TObject);
    procedure actAccountRefreshTotUpdate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure trMailboxCompareNodes(Sender: TBaseVirtualTree; Node1,
      Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
    procedure actMailboxPackAllExecute(Sender: TObject);
    procedure actMailboxPackAllUpdate(Sender: TObject);
    procedure actAccountPackAllExecute(Sender: TObject);
    procedure actAccountPackAllUpdate(Sender: TObject);
    procedure actAccountSendAllExecute(Sender: TObject);
    procedure actAccountSendAllUpdate(Sender: TObject);
    procedure actAccountSendFetchAllUpdate(Sender: TObject);
    procedure actAccountSendFetchAllExecute(Sender: TObject);
    procedure actAccountSendFetchThisExecute(Sender: TObject);
    procedure actAccountSendFetchThisUpdate(Sender: TObject);
  private
    { Private declarations }
    str: String;
    FSelectedAccount: Integer;
    FSelectedMailbox: Integer;
    FScheduleNewAccount: Boolean;
    FSelectedNodeType: TSelectedNodeType;
    FShowProfileNode: Boolean;
    FtmrList: TList;
    defaultExpanded: Boolean;
    FAutoCompleteList: TStringList;
    FSelectedTheme: Integer;
    function addUser(const user: TUser): PVirtualNode;
    function addAccount(const account: TAccount): PVirtualNode;
    function addMailbox(const mboxID: Integer; const accountNode: PVirtualNode): Integer;
    function addFolder(const name: String; const mailboxId: Integer): Integer;
    function getMailboxFromNode(const node: PVirtualNode): TMailbox;
    function getAccountFromNode(const node: PVirtualNode): TAccount;
    function findAccountID(const Node: PVirtualNode): Integer;
    procedure emptyMailbox(mbox: TMailbox);
    procedure unlockProfile;
    procedure checkIfDefaultClient;
    procedure tmrCheckAccount(Sender: TObject);
    procedure packAllMailboxes(accountNo: Integer);
    function  findMailboxID(const Node: PVirtualNode): Integer;
    procedure CMDialogKey(Var Msg: TWMKey); message CM_DIALOGKEY;
  public
    { Public declarations }
    Profiles: TUserList;
    Profile: TUser;
    PublicAddressBook: TAddressBooks;
    procedure LoadUsers;
    property SelectedAccount: Integer read FSelectedAccount;
    property SelectedMailbox: Integer read FSelectedMailbox;
    property SelectedNodeType: TSelectedNodeType read FSelectedNodeType;
    function GetMailbox(accountID, mailboxID: Integer): TMailbox;
    function FindMailbox(accountID, internalID: Integer): TMailbox;
    procedure SetProfile(profileID: Integer);
    function  actMailboxDeleteF: Boolean;
    procedure actMailboxDeleteUpdate;
    procedure UpdateCheckTimer(accountNo: Integer);
    procedure CreateCheckTimer;
    procedure DeleteCheckTimer(accountNo: Integer);
    procedure RegisterAsDefault;
    procedure AddNewMailboxTo(accountNo: Integer);
    procedure RefreshTotals(accountNo: Integer);
    procedure LoadTheme(themeIndex: Integer; size: Integer);
    procedure LoadToolbar(imgList: TImageList; FileName: String);
    procedure LoadBackgrounds(themeIndex: Integer);
    property  AutoCompleteList: TStringList read FAutoCompleteList;
    property  SelectedTheme: Integer read FSelectedTheme write FSelectedTheme;
  end;

var
  frmMailbox: TfrmMailbox;

implementation

uses fNewAccountWizard, maillist, fMailboxInfo, fMain, fMyInputBox, task, tasks,
  fProfiles, fAccountProperties, addressBook, fDefaultClient, fSettings, dImages,
  fMailView, fSplash, fThemes, uThemes, addrBk_frm, fPreview;

{$R *.dfm}

//tree type data
type TTreeMailbox = record
    id: Integer;         //user id=0/account id = 1/mailbox id=2/folder id=3
    iconID: Integer;
    data: Pointer;         //if id=user_id then there is pointer to user
           //if id=account_id then there is pointer to account
          //if id=mailbox_id then there is pointer to mailbox
    text: WideString;        //folder name
  end;

type PTreeMailbox = ^TTreeMailbox;

const cIDUser = 1;
const cIDAccount = 2;
const cIDMailbox = 3;
const cIDFolder = 4;

const cIconUser = 0;
const cIconAccount = 1;
const cIconMailbox = 11;

//adds new mailbox to list and returns its id

function TfrmMailbox.addFolder(const name: String; const mailboxId: Integer): Integer;
begin

end;

function TfrmMailbox.addMailbox(const mboxID: Integer;
  const accountNode: PVirtualNode): Integer;
var folder: PVirtualNode;
begin
    //add new mailbox and build default folders
  folder := trMailbox.AddChild(accountNode);

    //we don't need this it node is initialized in OnInitNode
    (*with PTreeMailbox(trMailbox.GetNodeData(folder))^ do begin
        id:=cIDMailbox;
        text:='';
        total:=0;
        unread:=0;
        iconID:= cIconMailbox;
        data:=frmMain.Profile.Accounts[accountNode.Index].Mailboxes[mboxID];
    end;*)
end;

procedure TfrmMailbox.FormCreate(Sender: TObject);
begin
  Profile := nil;
  trMailbox.Align := alClient;
  FSelectedAccount := -1;
  PublicAddressBook := TAddressBooks.Create(df.Profiles +
    'Address Book\address book.xml');
  PublicAddressBook.Load;
  FtmrList := TList.Create;
  FAutoCompleteList := TStringList.Create;
  with FAutoCompleteList do begin
    Sorted := True;
    CaseSensitive := False;
    Duplicates := dupIgnore;
  end;
end;

procedure TfrmMailbox.trMailboxGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);

begin
    //return correct folder image
  with PTreeMailbox((Sender as TVirtualStringTree).GetNodeData(Node))^ do begin
    if (Column = 0) and (Kind in [ikNormal, ikSelected]) then ImageIndex := iconId;
  end;
end;

procedure TfrmMailbox.trMailboxGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
begin
    //return each column's text
  with PTreeMailbox((Sender as TVirtualStringTree).GetNodeData(Node))^ do begin
    case id of
      cIDUser:
      begin
        case Column of
          0:
            CellText := TUser(data).UserName;
          1, 2:
            CellText := '';
        end;
      end;
      cIDAccount:
      begin
        case Column of
          0:
            CellText := TAccount(data).AccountName;
          1:
            CellText := IntToStr(TAccount(data).UnreadMessageCount);
          2:
            CellText := IntToStr(TAccount(data).TotalMessageCount);
        end;
      end;
      cIDMailbox:

⌨️ 快捷键说明

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