mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-07 08:38:09 +02:00
230 lines
7.1 KiB
ObjectPascal
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.
|