123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- unit TB2DsgnConverter;
- {
- Toolbar2000
- Copyright (C) 1998-2005 by Jordan Russell
- All rights reserved.
- The contents of this file are subject to the "Toolbar2000 License"; you may
- not use or distribute this file except in compliance with the
- "Toolbar2000 License". A copy of the "Toolbar2000 License" may be found in
- TB2k-LICENSE.txt or at:
- https://jrsoftware.org/files/tb2k/TB2k-LICENSE.txt
- Alternatively, the contents of this file may be used under the terms of the
- GNU General Public License (the "GPL"), in which case the provisions of the
- GPL are applicable instead of those in the "Toolbar2000 License". A copy of
- the GPL may be found in GPL-LICENSE.txt or at:
- https://jrsoftware.org/files/tb2k/GPL-LICENSE.txt
- If you wish to allow use of your version of this file only under the terms of
- the GPL and not to allow others to use your version of this file under the
- "Toolbar2000 License", indicate your decision by deleting the provisions
- above and replace them with the notice and other provisions required by the
- GPL. If you do not delete the provisions above, a recipient may use your
- version of this file under either the "Toolbar2000 License" or the GPL.
- $jrsoftware: tb2k/Source/TB2DsgnConverter.pas,v 1.16 2005/01/06 03:56:50 jr Exp $
- }
- interface
- {$I TB2Ver.inc}
- uses
- Windows, SysUtils, Classes, Controls, Forms, Menus, StdCtrls,
- TB2Item;
- type
- TTBConverterForm = class(TForm)
- MessageList: TListBox;
- CloseButton: TButton;
- CopyButton: TButton;
- procedure CloseButtonClick(Sender: TObject);
- procedure CopyButtonClick(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- end;
- procedure DoConvert(const ParentItem: TTBCustomItem; const Owner: TComponent);
- implementation
- {$R *.DFM}
- uses
- Clipbrd, TB2DsgnConvertOptions;
- procedure DoConvert(const ParentItem: TTBCustomItem; const Owner: TComponent);
- const
- SPropNotTransferred = 'Warning: %s property not transferred on ''%s''.';
- var
- ConverterForm: TTBConverterForm;
- procedure Log(const S: String);
- begin
- ConverterForm.MessageList.Items.Add(S);
- ConverterForm.MessageList.TopIndex := ConverterForm.MessageList.Items.Count-1;
- ConverterForm.Update;
- end;
- procedure Recurse(MenuItem: TMenuItem; TBItem: TTBCustomItem);
- var
- I: Integer;
- Src: TMenuItem;
- IsSep, IsSubmenu: Boolean;
- Dst: TTBCustomItem;
- N: String;
- begin
- for I := 0 to MenuItem.Count-1 do begin
- Src := MenuItem[I];
- IsSep := (Src.Caption = '-');
- IsSubmenu := False;
- if not IsSep then begin
- if Src.Count > 0 then
- IsSubmenu := True;
- if not IsSubmenu then
- Dst := TTBItem.Create(Owner)
- else
- Dst := TTBSubmenuItem.Create(Owner);
- Dst.Action := Src.Action;
- Dst.AutoCheck := Src.AutoCheck;
- Dst.Caption := Src.Caption;
- Dst.Checked := Src.Checked;
- if Src.Default then
- Dst.Options := Dst.Options + [tboDefault];
- Dst.Enabled := Src.Enabled;
- Dst.GroupIndex := Src.GroupIndex;
- Dst.HelpContext := Src.HelpContext;
- Dst.ImageIndex := Src.ImageIndex;
- Dst.RadioItem := Src.RadioItem;
- Dst.ShortCut := Src.ShortCut;
- Dst.SubMenuImages := Src.SubMenuImages;
- Dst.OnClick := Src.OnClick;
- end
- else begin
- Dst := TTBSeparatorItem.Create(Owner);
- end;
- Dst.Hint := Src.Hint;
- Dst.Tag := Src.Tag;
- Dst.Visible := Src.Visible;
- if not IsSep then
- { Temporarily clear the menu item's OnClick property, so that renaming
- the menu item doesn't cause the function name to change }
- Src.OnClick := nil;
- try
- N := Src.Name;
- Src.Name := N + '_OLD';
- Dst.Name := N;
- finally
- if not IsSep then
- Src.OnClick := Dst.OnClick;
- end;
- TBItem.Add(Dst);
- if @Src.OnAdvancedDrawItem <> nil then
- Log(Format(SPropNotTransferred, ['OnAdvancedDrawItem', Dst.Name]));
- if @Src.OnDrawItem <> nil then
- Log(Format(SPropNotTransferred, ['OnDrawItem', Dst.Name]));
- if @Src.OnMeasureItem <> nil then
- Log(Format(SPropNotTransferred, ['OnMeasureItem', Dst.Name]));
- if IsSubmenu then
- Recurse(Src, Dst);
- end;
- end;
- var
- OptionsForm: TTBConvertOptionsForm;
- I: Integer;
- C: TComponent;
- Menu: TMenu;
- begin
- OptionsForm := TTBConvertOptionsForm.Create(Application);
- try
- for I := 0 to Owner.ComponentCount-1 do begin
- C := Owner.Components[I];
- if (C is TMenu) and not(C is TTBPopupMenu) then
- OptionsForm.MenuCombo.Items.AddObject(C.Name, C);
- end;
- if OptionsForm.MenuCombo.Items.Count = 0 then
- raise Exception.Create('Could not find any menus on the form to convert');
- OptionsForm.MenuCombo.ItemIndex := 0;
- if (OptionsForm.ShowModal <> mrOK) or (OptionsForm.MenuCombo.ItemIndex < 0) then
- Exit;
- Menu := TMenu(OptionsForm.MenuCombo.Items.Objects[OptionsForm.MenuCombo.ItemIndex]);
- finally
- OptionsForm.Free;
- end;
- ParentItem.SubMenuImages := Menu.Images;
- ConverterForm := TTBConverterForm.Create(Application);
- ConverterForm.Show;
- ConverterForm.Update;
- Log(Format('Converting ''%s'', please wait...', [Menu.Name]));
- ParentItem.ViewBeginUpdate;
- try
- Recurse(Menu.Items, ParentItem);
- finally
- ParentItem.ViewEndUpdate;
- end;
- Log('Done!');
- ConverterForm.CloseButton.Enabled := True;
- ConverterForm.CopyButton.Enabled := True;
- end;
- { TTBConverterForm }
- procedure TTBConverterForm.FormClose(Sender: TObject;
- var Action: TCloseAction);
- begin
- Action := caFree;
- end;
- procedure TTBConverterForm.CloseButtonClick(Sender: TObject);
- begin
- Close;
- end;
- procedure TTBConverterForm.CopyButtonClick(Sender: TObject);
- begin
- Clipboard.AsText := MessageList.Items.Text;
- end;
- procedure FreeConverterForms;
- var
- I: Integer;
- Form: TCustomForm;
- label Restart;
- begin
- Restart:
- for I := 0 to Screen.CustomFormCount-1 do begin
- Form := Screen.CustomForms[I];
- if Form is TTBConverterForm then begin
- Form.Free;
- goto Restart;
- end;
- end;
- end;
- initialization
- finalization
- FreeConverterForms;
- end.
|