📄 mailbox.pas
字号:
(*
# (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 + -