{ $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.