home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 October
/
Chip_2001-10_cd1.bin
/
zkuste
/
delphi
/
nastroje
/
d3456
/
KBMWABD.ZIP
/
WABD_FormEditor.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-07-15
|
16KB
|
583 lines
unit WABD_FormEditor;
{$I kbmWABD.inc}
{$IFDEF VER100}
{$ASSERTIONS ON}
{$ENDIF}
interface
uses
{$ifdef LEVEL6}
DesignEditors, DesignIntf,
{$else}
DsgnIntf,
{$endif}
WABD_FormSecEditor,
WABD_Reg,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
WABD_Objects, StdCtrls, ExtCtrls, Menus, Buttons,
ShellAPI
;
type
TWABDFormEditor = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Label1: TLabel;
AddButton: TButton;
DeleteBut: TButton;
AddCombo: TComboBox;
PreviewBut: TButton;
Panel6: TPanel;
UpBut: TSpeedButton;
DownBut: TSpeedButton;
ToolPanel: TPanel;
ToolMenu: TPopupMenu;
FlatButtons1: TMenuItem;
TopButPanel: TPanel;
HeaderSpeed: TSpeedButton;
FormSecSpeed: TSpeedButton;
TableSpeed: TSpeedButton;
DataTableSpeed: TSpeedButton;
HiddenSpeed: TSpeedButton;
SecButPanel: TPanel;
AnchorSpeed: TSpeedButton;
ImageSpeed: TSpeedButton;
LabelSpeed: TSpeedButton;
MemoSpeed: TSpeedButton;
ButtonSpeed: TSpeedButton;
EditSpeed: TSpeedButton;
ComboSpeed: TSpeedButton;
RadioSpeed: TSpeedButton;
ListSpeed: TSpeedButton;
CheckSpeed: TSpeedButton;
ChildrenBox: TListBox;
FSPanel: TPanel;
Label2: TLabel;
AddSectionBut: TButton;
DeleteSecBut: TButton;
AddSectionCombo: TComboBox;
SectionCombo: TListBox;
ShowFormSecBut: TButton;
LiveImageSpeed: TSpeedButton;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
procedure AddButtonClick(Sender: TObject);
procedure AddSectionButClick(Sender: TObject);
procedure ChildrenBoxChange(Sender: TObject);
procedure DeleteButClick(Sender: TObject);
procedure SectionComboChange(Sender: TObject);
procedure DeleteSecButClick(Sender: TObject);
procedure AddComboChange(Sender: TObject);
procedure AddSectionComboChange(Sender: TObject);
procedure FlatButtons1Click(Sender: TObject);
procedure SecLevelSpeedClick(Sender: TObject);
procedure UpButClick(Sender: TObject);
procedure DownButClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ShowFormSecButClick(Sender: TObject);
procedure PreviewButClick(Sender: TObject);
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure FormDestroy(Sender: TObject);
procedure FormSecSpeedClick(Sender: TObject);
procedure HeaderSpeedClick(Sender: TObject);
procedure TableSpeedClick(Sender: TObject);
procedure DataTableSpeedClick(Sender: TObject);
procedure HiddenSpeedClick(Sender: TObject);
private
FWABDForm : TWABD_Form;
FSEditor : TFormSectionEditor;
procedure SetWABDForm(NewForm: TWABD_Form);
public
{$ifdef LEVEL6}
MyDesigner : IDesigner;
{$else}
{$ifdef LEVEL5}
MyDesigner : IFormDesigner;
{$else}
{$ifdef LEVEL4}
MyDesigner : IFormDesigner;
{$else}
{$ifdef LEVEL3}
MyDesigner : TFormDesigner; // Delphi 3, C++ Builder 3
{$endif}
{$endif}
{$endif}
{$endif}
fs : TWABD_FormSection;
property WABDForm: TWABD_Form read FWABDForm write SetWABDForm;
procedure ReflectedNotify(Sender: TObject; AComponent: TComponent; Operation: TOperation);
procedure ChildNameChanged(Sender: TObject; const OldName, NewName: string);
procedure Initialize;
procedure InitializeSection;
procedure AddTopLevelClass(newc: TComponentClass);
procedure AddTopLevel(Index: integer);
function AddSectionLevel(Index: integer): TWABD_SectionObject;
procedure EnableSectionButs(b: boolean);
end;
var
WABDFormEditor: TWABDFormEditor;
implementation
{$R *.DFM}
function MaxInt(a, b: integer): integer;
begin
if a < b then Result := a
else Result := b;
end;
procedure TWABDFormEditor.SetWABDForm(NewForm: TWABD_Form);
begin
FWABDForm := NewForm;
end;
procedure TWABDFormEditor.AddTopLevelClass(newc: TComponentClass);
var
c : TWABD_Object;
ni : integer;
begin
if newc = nil then exit;
c := MyDesigner.CreateComponent(newc, WABDForm, 0, 0, 0, 0) as TWABD_Object;
if c=nil then exit;
c.Parent := WABDForm;
MyDesigner.Modified;
ni := ChildrenBox.Items.Add(c.Name);
ChildrenBox.ItemIndex := ni;
ChildrenBoxChange(Self);
end;
procedure TWABDFormEditor.AddTopLevel(Index: integer);
var
newc : TComponentClass;
begin
newc := GetWABDClassListItem(Index);
AddTopLevelClass(newc);
end;
procedure TWABDFormEditor.AddButtonClick(Sender: TObject);
var
pc : TPersistentClass;
begin
pc := GetClass(AddCombo.Items[AddCombo.ItemIndex]);
Assert(pc<>nil, 'Can not find class name: ' + AddCombo.Items[AddCombo.ItemIndex]);
AddTopLevel(AddCombo.ItemIndex);
end;
function TWABDFormEditor.AddSectionLevel(Index: integer): TWABD_SectionObject;
var
newc : TComponentClass;
c : TWABD_Object;
ni : integer;
begin
newc := nil;
case Index of
0 : newc := TWABD_Anchor;
1 : newc := TWABD_Image;
2 : newc := TWABD_Label;
3 : newc := TWABD_Memo;
4 : newc := TWABD_Button;
5 : newc := TWABD_Edit;
6 : newc := TWABD_ComboBox;
7 : newc := TWABD_RadioButton;
8 : newc := TWABD_ListBox;
9 : newc := TWABD_CheckBox;
10 : newc := TWABD_LiveImage;
11 : newc := TWABD_Chart;
12 : newc := TWABD_HTMLEmbed;
13 : newc := TWABD_HTMLFileEmbed;
14 : newc := TWABD_UploadFile;
end;
Result := nil;
if newc = nil then exit;
Assert(fs<>nil, 'c = nil');
c := MyDesigner.CreateComponent(newc, fs, 0, 0, 0, 0) as TWABD_Object;
Assert(c<>nil, 'c = nil');
c.Parent := fs;
MyDesigner.Modified;
ni := SectionCombo.Items.Add(c.Name);
SectionCombo.ItemIndex := ni;
SectionComboChange(Self);
if FSEditor.Visible then FSEditor.Init;
Result := c as TWABD_SectionObject;
end;
procedure TWABDFormEditor.AddSectionButClick(Sender: TObject);
begin
AddSectionLevel(AddSectionCombo.ItemIndex);
end;
procedure TWABDFormEditor.Initialize;
var
i : integer;
c : TWABD_Object;
begin
Caption := 'WABD Form Designer - ' + WABDForm.Name;
Assert(MyDesigner<>nil, 'Designer = nil');
WABDForm.RefNotify := ReflectedNotify;
WABDForm.OnChildNameChanged := ChildNameChanged;
// WABDForm.FreeNotification(Self);
ChildrenBox.Items.Clear;
SectionCombo.Items.Clear;
Assert(WABDForm<>nil, 'WABDForm = nil');
for i := 0 to WABDForm.ChildCount-1 do begin
c := WABDForm.Children[i];
Assert(c<>nil, 'c = nil');
ChildrenBox.Items.Add(c.Name);
end;
ChildrenBoxChange(Self);
AddCombo.ItemIndex := 0;
AddComboChange(Self);
AddSectionCombo.ItemIndex := 0;
AddSectionComboChange(Self);
SectionComboChange(Self);
end;
procedure TWABDFormEditor.ChildrenBoxChange(Sender: TObject);
var
c : TWABD_Object;
ni : integer;
HaveSect : boolean;
begin
HaveSect := False;
ni := ChildrenBox.ItemIndex;
DeleteBut.Enabled := ni<>-1;
UpBut.Enabled := ni<>-1;
DownBut.Enabled := ni<>-1;
if ni = -1 then begin
FSPanel.Visible := False;
FSEditor.Visible := False;
EnableSectionButs(False);
exit;
end;
if ni<>-1 then begin
c := WABDForm.ChildByName(ChildrenBox.Items[ni]);
Assert(c<>nil, 'c = nil');
MyDesigner.SelectComponent(c);
FSPanel.Visible := c is TWABD_FormSection;
if (c is TWABD_FormSection) then begin
HaveSect := True;
fs := c as TWABD_FormSection;
InitializeSection;
FSEditor.FS := fs;
FSEditor.Init;
FSPanel.Invalidate;
end;
end;
FSPanel.Visible := HaveSect;
if not FSPanel.Visible then
FSEditor.Visible := False;
EnableSectionButs(HaveSect);
end;
procedure TWABDFormEditor.DeleteButClick(Sender: TObject);
var
c : TWABD_Object;
ni : integer;
begin
ni := ChildrenBox.ItemIndex;
if ni=-1 then exit;
c := WABDForm.ChildByName(ChildrenBox.Items[ni]);
Assert(c<>nil, 'c = nil');
c.Free;
MyDesigner.SelectComponent(nil);
// ChildrenBox.Items.Delete(ni); // No need for this, ReflectedNotify removes it automatically
ni := MaxInt(ni, ChildrenBox.Items.Count-1);
ChildrenBox.ItemIndex := ni;
if ChildrenBox.Items.Count=0 then ChildrenBox.Items.Clear; // ComboBox Bug
ChildrenBoxChange(Self);
end;
procedure TWABDFormEditor.InitializeSection;
var
i : integer;
c : TWABD_Object;
begin
SectionCombo.Items.Clear;
for i := 0 to fs.ChildCount-1 do begin
c := fs.Children[i];
Assert(c<>nil, 'c = nil');
SectionCombo.Items.Add(c.Name);
end;
end;
procedure TWABDFormEditor.SectionComboChange(Sender: TObject);
var
ni : integer;
c : TWABD_Object;
begin
ni := SectionCombo.ItemIndex;
DeleteSecBut.Enabled := ni<>-1;
if ni=-1 then exit;
c := fs.ChildByName(SectionCombo.Items[ni]) as TWABD_Object;
Assert(c<>nil, 'c = nil');
MyDesigner.SelectComponent(c);
end;
procedure TWABDFormEditor.DeleteSecButClick(Sender: TObject);
var
ni : integer;
c : TWABD_Object;
begin
ni := SectionCombo.ItemIndex;
if ni=-1 then exit;
c := fs.ChildByName(SectionCombo.Items[ni]) as TWABD_Object;
Assert(c<>nil, 'c = nil');
c.Free;
MyDesigner.SelectComponent(nil);
// SectionCombo.Items.Delete(ni); // No need for this, ReflectedNotify removes it automatically
ni := MaxInt(ni, SectionCombo.Items.Count-1);
SectionCombo.ItemIndex := ni;
if SectionCombo.Items.Count=0 then SectionCombo.Items.Clear; // ComboBox Bug
SectionComboChange(Self);
end;
procedure TWABDFormEditor.AddComboChange(Sender: TObject);
begin
AddButton.Enabled := AddCombo.ItemIndex <> -1;
end;
procedure TWABDFormEditor.AddSectionComboChange(Sender: TObject);
begin
AddSectionBut.Enabled := AddSectionCombo.ItemIndex <> -1;
end;
// I had to do this hack because Delphi 3 won't let me compile with
// the DsgnWnds unit.
procedure TWABDFormEditor.ReflectedNotify(Sender: TObject; AComponent: TComponent; Operation: TOperation);
var
i : integer;
begin
// Pass it on to the Form Section Editor
FSEditor.ReflectedNotify(Sender, AComponent, Operation);
if (Operation <> opRemove) then exit;
if AComponent=WABDForm then begin
WABDForm.RefNotify := nil;
WABDForm := nil;
Visible := False;
FSEditor.Visible := False;
end;
i := ChildrenBox.Items.IndexOf(AComponent.Name);
if i<>-1 then begin
ChildrenBox.Items.Delete(i);
if ChildrenBox.Items.Count=0 then ChildrenBox.Items.Clear; // ComboBox Bug
ChildrenBoxChange(Self);
end;
i := SectionCombo.Items.IndexOf(AComponent.Name);
if i<>-1 then begin
SectionCombo.Items.Delete(i);
if SectionCombo.Items.Count=0 then SectionCombo.Items.Clear; // ComboBox Bug
SectionComboChange(Self);
end;
end;
procedure TWABDFormEditor.FlatButtons1Click(Sender: TObject);
var
i : integer;
c : TControl;
begin
FlatButtons1.Checked := not FlatButtons1.Checked;
for i := 0 to TopButPanel.ControlCount-1 do begin
c := TopButPanel.Controls[i];
if (c is TSpeedButton) then begin
{$IFDEF VER100}
(c as TSpeedButton).Flat := FlatButtons1.Checked;
{$ENDIF}
end;
end;
for i := 0 to SecButPanel.ControlCount-1 do begin
c := SecButPanel.Controls[i];
if (c is TSpeedButton) then begin
{$IFDEF VER100}
(c as TSpeedButton).Flat := FlatButtons1.Checked;
{$ENDIF}
end;
end;
end;
procedure TWABDFormEditor.SecLevelSpeedClick(Sender: TObject);
begin
AddSectionLevel((Sender as TSpeedButton).Tag);
end;
procedure TWABDFormEditor.EnableSectionButs(b: boolean);
var
i : integer;
c : TControl;
begin
for i := 0 to SecButPanel.ControlCount-1 do begin
c := SecButPanel.Controls[i];
if (c is TSpeedButton) then
(c as TSpeedButton).Enabled := b;
end;
end;
procedure TWABDFormEditor.UpButClick(Sender: TObject);
var
c : TWABD_Object;
ni : integer;
n : string;
begin
ni := ChildrenBox.ItemIndex;
if ni=-1 then exit;
c := WABDForm.ChildByName(ChildrenBox.Items[ni]);
Assert(c<>nil, 'c = nil');
n := c.Name;
c.Order := c.Order-1;
MyDesigner.Modified;
Initialize;
ChildrenBox.ItemIndex := ChildrenBox.Items.IndexOf(n);
ChildrenBoxChange(Self);
end;
procedure TWABDFormEditor.DownButClick(Sender: TObject);
var
c : TWABD_Object;
ni : integer;
n : string;
begin
ni := ChildrenBox.ItemIndex;
if ni=-1 then exit;
c := WABDForm.ChildByName(ChildrenBox.Items[ni]);
Assert(c<>nil, 'c = nil');
n := c.Name;
c.Order := c.Order+1;
MyDesigner.Modified;
Initialize;
ChildrenBox.ItemIndex := ChildrenBox.Items.IndexOf(n);
ChildrenBoxChange(Self);
end;
procedure TWABDFormEditor.FormCreate(Sender: TObject);
var
i : integer;
begin
FSEditor := TFormSectionEditor.Create(Self);
AddCombo.Items.Clear;
for i := 0 to GetWABDClassListCount-1 do begin
AddCombo.Items.Add(GetWABDClassListItem(i).ClassName);
end;
end;
procedure TWABDFormEditor.ShowFormSecButClick(Sender: TObject);
begin
FSEditor.MyDesigner:=MyDesigner;
FSEditor.FS := FS;
FSEditor.Init;
FSEditor.Show;
end;
procedure TWABDFormEditor.PreviewButClick(Sender: TObject);
var
f : string;
h : string;
fstm : TFileStream;
rc : integer;
begin
f := 'LocalTemp.htm';
h := WABDForm.Object_To_HTML;
fstm := TFileStream.Create(f, fmCreate or fmOpenWrite or fmShareDenyWrite);
fstm.Write(h[1], Length(h));
fstm.Free;
rc := ShellExecute(Handle, 'open', PChar(f), nil, nil, SW_SHOWNORMAL);
if (rc <= 32) then ShowMessage('Unable to execute: ' + f + #13#10 + 'Browser not installed?');
end;
procedure TWABDFormEditor.Notification(AComponent: TComponent; Operation: TOperation);
begin
if (Operation = opRemove) and (AComponent = WABDForm) then begin
WABDForm := nil;
Hide;
FSEditor.Hide;
end;
end;
procedure TWABDFormEditor.FormDestroy(Sender: TObject);
begin
if WABDForm<>nil then WABDForm.RefNotify := nil;
end;
procedure TWABDFormEditor.FormSecSpeedClick(Sender: TObject);
begin
AddTopLevelClass(TWABD_FormSection);
end;
procedure TWABDFormEditor.HeaderSpeedClick(Sender: TObject);
begin
AddTopLevelClass(TWABD_Header);
end;
procedure TWABDFormEditor.TableSpeedClick(Sender: TObject);
begin
AddTopLevelClass(TWABD_Table);
end;
procedure TWABDFormEditor.DataTableSpeedClick(Sender: TObject);
begin
AddTopLevelClass(TWABD_DataTable);
end;
procedure TWABDFormEditor.HiddenSpeedClick(Sender: TObject);
begin
AddTopLevelClass(TWABD_Hidden);
end;
procedure TWABDFormEditor.ChildNameChanged(Sender: TObject; const OldName, NewName: string);
var
i : integer;
begin
i := ChildrenBox.Items.IndexOf(OldName);
if i<>-1 then begin
ChildrenBox.Items[i] := NewName;
end;
i := SectionCombo.Items.IndexOf(OldName);
if i<>-1 then begin
SectionCombo.Items[i] := NewName;
end;
end;
end.