lazarus/ldockctrledit.pas

230 lines
7.1 KiB
ObjectPascal

{ $Id: ldocktree.pas 8153 2005-11-14 21:53:06Z mattias $ }
{
/***************************************************************************
LDockCtrlEdit.pas
-----------------
***************************************************************************/
*****************************************************************************
* *
* This file is part of the Lazarus Component Library (LCL) *
* *
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
* for details about the copyright. *
* *
* 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. *
* *
*****************************************************************************
Author: Mattias Gaertner
Abstract:
This unit contains a dialog to dock or undock a control to another.
}
unit LDockCtrlEdit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Buttons,
StdCtrls;
type
TLazDockControlEditorDlgResult = (
ldcedrNone,
ldcedrUndock,
ldcedrDockLeft,
ldcedrDockRight,
ldcedrDockTop,
ldcedrDockBottom,
ldcedrDockPage,
ldcedrEnlargeLeft,
ldcedrEnlargeTop,
ldcedrEnlargeRight,
ldcedrEnlargeBottom
);
{ TLazDockControlEditorDlg }
TLazDockControlEditorDlg = class(TForm)
CancelButton: TButton;
DockControlComboBox: TComboBox;
DockPageButton: TSpeedButton;
DockBottomButton: TSpeedButton;
DockTopButton: TSpeedButton;
DockRightButton: TSpeedButton;
DockLeftButton: TSpeedButton;
DockGroupBox: TGroupBox;
DockControlLabel: TLabel;
EnlargeGroupBox: TGroupBox;
EnlargeLeftSpeedButton: TSpeedButton;
EnlargeRightSpeedButton: TSpeedButton;
EnlargeTopSpeedButton: TSpeedButton;
EnlargeBottomSpeedButton: TSpeedButton;
UndockButton: TButton;
UndockGroupBox: TGroupBox;
procedure DockBottomButtonClick(Sender: TObject);
procedure DockControlComboBoxEditingDone(Sender: TObject);
procedure DockLeftButtonClick(Sender: TObject);
procedure DockPageButtonClick(Sender: TObject);
procedure DockRightButtonClick(Sender: TObject);
procedure DockTopButtonClick(Sender: TObject);
procedure EnlargeBottomSpeedButtonClick(Sender: TObject);
procedure EnlargeLeftSpeedButtonClick(Sender: TObject);
procedure EnlargeRightSpeedButtonClick(Sender: TObject);
procedure EnlargeTopSpeedButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure UndockButtonClick(Sender: TObject);
private
FCurrentControlName: string;
FDlgResult: TLazDockControlEditorDlgResult;
procedure CheckSetDlgResult(NewDlgResult: TLazDockControlEditorDlgResult);
procedure SetCurrentControlName(const AValue: string);
procedure UpdateButtonEnabled;
public
property DlgResult: TLazDockControlEditorDlgResult read FDlgResult write FDlgResult;
property CurrentControlName: string read FCurrentControlName write SetCurrentControlName;
end;
implementation
{ TLazDockControlEditorDlg }
procedure TLazDockControlEditorDlg.FormCreate(Sender: TObject);
begin
Caption := 'Docking';
UndockGroupBox.Caption := 'Undock';
UndockButton.Caption := 'Undock (make it a single, normal window)';
DockPageButton.Hint := 'Dock as page';
DockBottomButton.Hint := 'Dock to bottom';
DockTopButton.Hint := 'Dock to top';
DockRightButton.Hint := 'Dock to right';
DockLeftButton.Hint := 'Dock to left';
DockPageButton.LoadGlyphFromLazarusResource('lcl_dock_to_page');
DockBottomButton.LoadGlyphFromLazarusResource('lcl_dock_to_bottom');
DockTopButton.LoadGlyphFromLazarusResource('lcl_dock_to_top');
DockRightButton.LoadGlyphFromLazarusResource('lcl_dock_to_right');
DockLeftButton.LoadGlyphFromLazarusResource('lcl_dock_to_left');
DockGroupBox.Caption := 'Dock to control';
DockControlLabel.Caption := 'To control';
EnlargeGroupBox.Caption := 'Enlarge one side';
EnlargeLeftSpeedButton.Hint := 'Left';
EnlargeTopSpeedButton.Hint := 'Top';
EnlargeRightSpeedButton.Hint := 'Right';
EnlargeBottomSpeedButton.Hint := 'Bottom';
CancelButton.Caption := 'Cancel';
UpdateButtonEnabled;
end;
procedure TLazDockControlEditorDlg.DockLeftButtonClick(Sender: TObject);
begin
CheckSetDlgResult(ldcedrDockLeft);
end;
procedure TLazDockControlEditorDlg.DockPageButtonClick(Sender: TObject);
begin
CheckSetDlgResult(ldcedrDockPage);
end;
procedure TLazDockControlEditorDlg.DockBottomButtonClick(Sender: TObject);
begin
CheckSetDlgResult(ldcedrDockBottom);
end;
procedure TLazDockControlEditorDlg.DockControlComboBoxEditingDone(
Sender: TObject);
begin
UpdateButtonEnabled;
end;
procedure TLazDockControlEditorDlg.DockRightButtonClick(Sender: TObject);
begin
CheckSetDlgResult(ldcedrDockRight);
end;
procedure TLazDockControlEditorDlg.DockTopButtonClick(Sender: TObject);
begin
CheckSetDlgResult(ldcedrDockTop);
end;
procedure TLazDockControlEditorDlg.EnlargeBottomSpeedButtonClick(Sender: TObject
);
begin
CheckSetDlgResult(ldcedrEnlargeBottom);
end;
procedure TLazDockControlEditorDlg.EnlargeLeftSpeedButtonClick(Sender: TObject);
begin
CheckSetDlgResult(ldcedrEnlargeLeft);
end;
procedure TLazDockControlEditorDlg.EnlargeRightSpeedButtonClick(Sender: TObject
);
begin
CheckSetDlgResult(ldcedrEnlargeRight);
end;
procedure TLazDockControlEditorDlg.EnlargeTopSpeedButtonClick(Sender: TObject);
begin
CheckSetDlgResult(ldcedrEnlargeTop);
end;
procedure TLazDockControlEditorDlg.UndockButtonClick(Sender: TObject);
begin
CheckSetDlgResult(ldcedrUndock);
end;
procedure TLazDockControlEditorDlg.CheckSetDlgResult(
NewDlgResult: TLazDockControlEditorDlgResult);
begin
if NewDlgResult in [ldcedrDockLeft,ldcedrDockRight,ldcedrDockTop,
ldcedrDockBottom,ldcedrDockPage] then
begin
if DockControlComboBox.Items.IndexOf(DockControlComboBox.Text)<0 then
begin
MessageDlg('Incomplete','Please select first a control,'
+' to which '+CurrentControlName+' should be docked.',mtError,
[mbCancel],0);
exit;
end;
end;
DlgResult:=NewDlgResult;
ModalResult:=mrOk;
end;
procedure TLazDockControlEditorDlg.SetCurrentControlName(const AValue: string);
begin
if FCurrentControlName=AValue then exit;
FCurrentControlName:=AValue;
end;
procedure TLazDockControlEditorDlg.UpdateButtonEnabled;
var
SelectionValid: Boolean;
begin
SelectionValid:=DockControlComboBox.Items.IndexOf(DockControlComboBox.Text)>=0;
DockPageButton.Enabled:=SelectionValid;
DockBottomButton.Enabled:=SelectionValid;
DockTopButton.Enabled:=SelectionValid;
DockRightButton.Enabled:=SelectionValid;
DockLeftButton.Enabled:=SelectionValid;
end;
initialization
{$I ldockctrledit.lrs}
{$I lcl_dock_to_images.lrs}
end.