📄 fexportmessageswizard.pas
字号:
(*
# (C) Copyright 2003
# Miha Vrhovnik, miha.vrhovnik@cordia.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)2003.
# All Rights Reserved.
#==============================================================================
# Contributor(s):
#==============================================================================
# History: see whats new.txt from distribution package
#==============================================================================
*)
unit fExportMessagesWizard;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, JvWizard, JvWizardRouteMapSteps, JvWizardRouteMapNodes, JvWaitingGradient, ExtCtrls,
StdCtrls, VirtualTrees, PluginManager, JvComponent, JvExControls, ActiveX,
BasePluginInterface, siMailPluginInterfaces, StrUtils, CheckLst, TB2Item,
Menus, TBX, account;
type
TfrmExportMessagesWizard = class(TForm)
wizard: TJvWizard;
KWizardRouteMapSteps1: TJvWizardRouteMapSteps;
wizWelcome: TJvWizardWelcomePage;
wizExport: TJvWizardInteriorPage;
wizExportFrom: TJvWizardInteriorPage;
Panel1: TPanel;
txtLog: TMemo;
Label1: TLabel;
lstFormats: TVirtualStringTree;
lblDescription: TLabel;
Label2: TLabel;
wizExportSettings: TJvWizardInteriorPage;
pnlPlugInContainer: TScrollBox;
Panel3: TPanel;
Label3: TLabel;
cmboxAccounts: TComboBox;
Label4: TLabel;
chklstMailboxes: TCheckListBox;
popSelect: TTBXPopupMenu;
mnuSelectAll: TTBItem;
mnuSelectNone: TTBItem;
mnuInvertSelection: TTBItem;
procedure wizardFinishButtonClick(Sender: TObject);
procedure wizardCancelButtonClick(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
procedure lstFormatsGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
procedure lstFormatsGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure lstFormatsChange(Sender: TBaseVirtualTree;
Node: PVirtualNode);
procedure lstFormatsFreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
procedure wizardSelectNextPage(Sender: TObject;
FromPage: TJvWizardCustomPage; var ToPage: TJvWizardCustomPage);
procedure wizWelcomeEnterPage(Sender: TObject;
const Page: TJvWizardCustomPage);
procedure mnuSelectAllClick(Sender: TObject);
procedure mnuSelectNoneClick(Sender: TObject);
procedure mnuInvertSelectionClick(Sender: TObject);
procedure cmboxAccountsChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
FPlugIns: TPluginManager;
exported: Boolean;
oldOffline: Boolean;
procedure AddNewFormatToList(plugIn: IsiMailMailboxExportPlugin_V1; no: Integer);
procedure Export;
procedure buildMessage(mbox: TMailbox; msgID: Integer;var str: String);
function readStringFromStream(len: Integer; stream: TStream): String;
public
{ Public declarations }
end;
var
frmExportMessagesWizard: TfrmExportMessagesWizard;
implementation
uses
mailBox, defFldrs, gnugettext, fMain, mimemess_siMail, mimepart, flatMime,
uExMbox;
{$R *.dfm}
type TTreeFormats = record
Caption: String;
pi: IsiMailMailboxExportPlugin_V1;
Format: Integer; //format no form plugin
end;
type PTreeFormats = ^TTreeFormats;
var SelectedPlugIn: TTreeFormats;
procedure TfrmExportMessagesWizard.wizardFinishButtonClick(Sender: TObject);
begin
if not exported then begin
Export;
exported := True;
end
else
Self.Close;
end;
procedure TfrmExportMessagesWizard.wizardCancelButtonClick(Sender: TObject);
begin
Self.Close;
end;
procedure TfrmExportMessagesWizard.FormHide(Sender: TObject);
begin
//write self position & size
frmMailbox.Profile.Config.WriteControlSettings(Self);
end;
procedure TfrmExportMessagesWizard.FormShow(Sender: TObject);
var i, j: Integer;
var ipi_V1: IsiMailMailboxExportPlugin_V1;
begin
//translate me
TranslateComponent(Self);
oldOffline := frmMain.Online;
frmMain.Online := False;
cmboxAccounts.Clear;
for i:= 0 to frmMailbox.Profile.Accounts.Count - 1 do
cmboxAccounts.Items.AddObject(frmMailbox.Profile.Accounts[i].AccountName, Pointer(i));
cmboxAccounts.ItemIndex := 0;
cmboxAccountsChange(cmboxAccounts);
lstFormats.Clear;
wizard.ActivePageIndex := 0;
//read self position & size
frmMailbox.Profile.Config.ReadControlSettings(Self);
lstFormats.Clear;
if FPlugIns.Count = 0 then begin
FPlugIns.AddCustomPlugin(uExMbox.RegisterPlugin);
//load dll plug-ins
FPlugIns.PluginFolder := df.piExportMessages;
FPlugIns.LoadPlugins;
end;
for i := 0 to FPlugIns.Count - 1 do begin
if FPlugIns.PlugIn[i].QueryInterface(IIsiMailMailboxExportPlugin_V1, ipi_V1) = S_OK then begin
FPlugIns.PlugIn[i].SetApplication(Application.Handle);
for j := 1 to ipi_V1.GetSupportedFormatCount do
AddNewFormatToList(ipi_V1, j);
end;
end;
txtLog.Clear;
end;
procedure TfrmExportMessagesWizard.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
if msg.CharCode = 27 then begin
Self.Close;
Handled := True;
end;
end;
procedure TfrmExportMessagesWizard.lstFormatsGetNodeDataSize(
Sender: TBaseVirtualTree; var NodeDataSize: Integer);
begin
NodeDataSize := SizeOf(TTreeFormats);
end;
procedure TfrmExportMessagesWizard.lstFormatsGetText(
Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType; var CellText: WideString);
begin
CellText := PTreeFormats(Sender.GetNodeData(Node)).Caption;
end;
procedure TfrmExportMessagesWizard.FormCreate(Sender: TObject);
begin
FPlugIns := TPluginManager.Create;
end;
procedure TfrmExportMessagesWizard.FormDestroy(Sender: TObject);
begin
if SelectedPlugIn.pi <> nil then begin
SelectedPlugIn.pi.SetParentHandle(0);
SelectedPlugIn.pi := nil;
end;
FreeAndNil(FPlugIns);
end;
procedure TfrmExportMessagesWizard.AddNewFormatToList(
plugIn: IsiMailMailboxExportPlugin_V1; no: Integer);
var nd: PTreeFormats;
var str: PChar;
begin
nd := lstFormats.GetNodeData(lstFormats.AddChild(nil));
nd^.Format := no;
nd^.pi := plugIn;
plugIn.GetSupportedFormat(no, str);
nd^.Caption := str;
end;
procedure TfrmExportMessagesWizard.lstFormatsChange(
Sender: TBaseVirtualTree; Node: PVirtualNode);
var nd: PTreeFormats;
var str: PChar;
begin
if Node = nil then
Exit;
nd := lstFormats.GetNodeData(Node);
nd^.pi.GetSupportedFormatDescription(nd^.Format, str);
lblDescription.Caption := str;
end;
procedure TfrmExportMessagesWizard.lstFormatsFreeNode(
Sender: TBaseVirtualTree; Node: PVirtualNode);
begin
//PTreeFormats(lstFormats.GetNodeData(Node))^.pi := nil;
end;
procedure TfrmExportMessagesWizard.wizardSelectNextPage(Sender: TObject;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -