diff options
author | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2008-09-27 21:30:19 +0000 |
---|---|---|
committer | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2008-09-27 21:30:19 +0000 |
commit | ea69f79199e862e1d7f298202d9130415145cf31 (patch) | |
tree | e489739892486333c6015656720661a80bf07801 /src/gui/gui_panel.pas | |
parent | e662c3d0202fc23ded7b8ff81b6bc35e554de485 (diff) | |
download | fpGUI-ea69f79199e862e1d7f298202d9130415145cf31.tar.xz |
* Phase 2 of the unit rename is complete. The gui units have now been renamed.
* UI Designer has been updated to reflect the new gui unit names.
Diffstat (limited to 'src/gui/gui_panel.pas')
-rw-r--r-- | src/gui/gui_panel.pas | 754 |
1 files changed, 0 insertions, 754 deletions
diff --git a/src/gui/gui_panel.pas b/src/gui/gui_panel.pas deleted file mode 100644 index 7b988a96..00000000 --- a/src/gui/gui_panel.pas +++ /dev/null @@ -1,754 +0,0 @@ -{ - fpGUI - Free Pascal GUI Toolkit - - Copyright (C) 2006 - 2008 See the file AUTHORS.txt, included in this - distribution, for details of the copyright. - - See the file COPYING.modifiedLGPL, included in this distribution, - for details about redistributing fpGUI. - - 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. - - Description: - Defines a Panel control. Also known as a Bevel or Frame control. - This control can also draw itself like a GroupBox component. -} - -unit gui_panel; - -{$mode objfpc}{$H+} - -interface - -uses - Classes, - SysUtils, - fpg_base, - fpg_main, - fpg_widget; - -type - - TPanelShape = (bsBox, bsFrame, bsTopLine, bsBottomLine, bsLeftLine, - bsRightLine, bsSpacer); - - TPanelStyle = (bsLowered, bsRaised); - - TPanelBorder = (bsSingle, bsDouble); - - - TfpgAbstractPanel = class(TfpgWidget) - private - FPanelShape: TPanelShape; - FPanelStyle: TPanelStyle; - FPanelBorder: TPanelBorder; - function GetClientRect: TfpgRect; override; - procedure SetPanelStyle(const AValue: TPanelStyle); - procedure SetPanelBorder(const AValue: TPanelBorder); - protected - property Style: TPanelStyle read FPanelStyle write SetPanelStyle default bsRaised; - property BorderStyle: TPanelBorder read FPanelBorder write SetPanelBorder default bsSingle; - public - constructor Create(AOwner: TComponent); override; - end; - - - TfpgBevel = class(TfpgAbstractPanel) - private - procedure SetPanelShape(const AValue: TPanelShape); - protected - procedure HandlePaint; override; - published - property BackgroundColor; - property BorderStyle; - property ParentShowHint; - property Shape: TPanelShape read FPanelShape write SetPanelShape default bsBox; - property ShowHint; - property Style; - property OnClick; - property OnDoubleClick; - property OnMouseDown; - property OnMouseUp; - property OnPaint; - end; - - - TfpgPanel = class(TfpgAbstractPanel) - private - FAlignment: TAlignment; - FLayout: TLayout; - FWrapText: boolean; - FLineSpace: integer; - FMargin: integer; - FText: string; - function GetAlignment: TAlignment; - procedure SetAlignment(const AValue: TAlignment); - function GetLayout: TLayout; - procedure SetLayout(const AValue: TLayout); - function GetText: string; - procedure SetText(const AValue: string); - function GetFontDesc: string; - procedure SetFontDesc(const AValue: string); - function GetLineSpace: integer; - procedure SetLineSpace(const AValue: integer); - function GetMargin: integer; - procedure SetMargin(const AValue: integer); - function GetWrapText: boolean; - procedure SetWrapText(const AValue: boolean); - protected - FFont: TfpgFont; - procedure HandlePaint; override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - property Font: TfpgFont read FFont; - published - property Alignment: TAlignment read GetAlignment write SetAlignment default taCenter; - property BackgroundColor; - property BorderStyle; - property FontDesc: string read GetFontDesc write SetFontDesc; - property Layout: TLayout read GetLayout write SetLayout default tlCenter; - property ParentShowHint; - property ShowHint; - property Style; - property Text: string read GetText write SetText; - property TextColor; - property LineSpace: integer read GetLineSpace write SetLineSpace default 2; - property Margin: integer read GetMargin write SetMargin default 2; - property WrapText: boolean read GetWrapText write SetWrapText default False; - property OnClick; - property OnDoubleClick; - end; - - - TfpgGroupBox = class(TfpgAbstractPanel) - private - FAlignment: TAlignment; - FMargin: integer; - FText: string; - function GetAlignment: TAlignment; - procedure SetAlignment(const AValue: TAlignment); - function GetText: string; - procedure SetText(const AValue: string); - function GetFontDesc: string; - procedure SetFontDesc(const AValue: string); - function GetMargin: integer; - procedure SetMargin(const AValue: integer); - protected - FFont: TfpgFont; - function GetClientRect: TfpgRect; override; - procedure HandlePaint; override; - public - constructor Create(AOwner: TComponent); override; - property Font: TfpgFont read FFont; - published - property Alignment: TAlignment read GetAlignment write SetAlignment default taCenter; - property BackgroundColor; - property BorderStyle; - property FontDesc: string read GetFontDesc write SetFontDesc; - property Style; - property Text: string read GetText write SetText; - property TextColor; - property Margin: integer read GetMargin write SetMargin default 2; - property OnClick; - property OnDoubleClick; - end; - - -function CreateBevel(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord; AShape: TPanelShape; - AStyle: TPanelStyle): TfpgBevel; - -function CreatePanel(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord; AText: string; - AStyle: TPanelStyle; AALignment: TAlignment= taCenter; ALayout: TLayout= tlCenter; - AMargin: integer= 2; ALineSpace: integer= 2): TfpgPanel; - -function CreateGroupBox(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord; AText: string; - AStyle: TPanelStyle; AALignment: TAlignment= taCenter; AMargin: integer= 2): TfpgGroupBox; - - -implementation - -function CreateBevel(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord; AShape: TPanelShape; - AStyle: TPanelStyle): TfpgBevel; -begin - Result := TfpgBevel.Create(AOwner); - Result.Left := ALeft; - Result.Top := ATop; - Result.Width := AWidth; - Result.Height := AHeight; - Result.Shape := AShape; - Result.Style := AStyle; -end; - -function CreatePanel(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord; AText: string; - AStyle: TPanelStyle; AALignment: TAlignment= taCenter; ALayout: TLayout= tlCenter; - AMargin: integer= 2; ALineSpace: integer= 2): TfpgPanel; -begin - Result := TfpgPanel.Create(AOwner); - Result.Left := ALeft; - Result.Top := ATop; - Result.Width := AWidth; - Result.Height := AHeight; - Result.FText := AText; - Result.Style := AStyle; - Result.FAlignment:= AAlignment; - Result.FLayout := ALayout; - Result.FMargin := AMargin; - Result.FLineSpace:= ALineSpace; -end; - -function CreateGroupBox(AOwner: TComponent; ALeft, ATop, AWidth, AHeight: TfpgCoord; AText: string; - AStyle: TPanelStyle; AALignment: TAlignment= taCenter; AMargin: integer= 2): TfpgGroupBox; -begin - Result := TfpgGroupBox.Create(AOwner); - Result.Left := ALeft; - Result.Top := ATop; - Result.Width := AWidth; - Result.Height := AHeight; - Result.FText := AText; - Result.Style := AStyle; - Result.FAlignment := AAlignment; - Result.FMargin := AMargin; -end; - - -{TfpgAbstractPanel} - -function TfpgAbstractPanel.GetClientRect: TfpgRect; -begin - Result.SetRect(2, 2, Width - 4, Height - 4); -end; - -procedure TfpgAbstractPanel.SetPanelStyle(const AValue: TPanelStyle); -begin - if FPanelStyle <> AValue then - begin - FPanelStyle := AValue; - Repaint; - end; -end; - -procedure TfpgAbstractPanel.SetPanelBorder(const AValue: TPanelBorder); -begin - if FPanelBorder <> AValue then - begin - FPanelBorder := AValue; - Repaint; - end; -end; - -constructor TfpgAbstractPanel.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - FPanelShape := bsBox; - FPanelStyle := bsRaised; - FPanelBorder := bsSingle; - FWidth := 80; - FHeight := 80; - FFocusable := True; // otherwise children can't get focus - FBackgroundColor := Parent.BackgroundColor; - FIsContainer := True; -end; - -{TfpgBevel} - -procedure TfpgBevel.SetPanelShape(const AValue: TPanelShape); -begin - if FPanelShape <> AValue then - begin - FPanelShape := AValue; - Repaint; - end; -end; - -procedure TfpgBevel.HandlePaint; -begin - inherited HandlePaint; - - Canvas.Clear(BackgroundColor); - - // Canvas.SetLineStyle(2, lsSolid); - // Canvas.SetColor(clWindowBackground); - // Canvas.DrawRectangle(1, 1, Width - 1, Height - 1); - if FPanelBorder = bsSingle then - Canvas.SetLineStyle(1, lsSolid) - else - Canvas.SetLineStyle(2, lsSolid); - - if Style = bsRaised then - Canvas.SetColor(clHilite2) - else - Canvas.SetColor(clShadow2); - - if Shape in [bsBox] then - if FPanelBorder = bsSingle then - Canvas.DrawLine(0, 0, Width - 1, 0) - else - Canvas.DrawLine(0, 1, Width - 1, 1); - if Shape in [bsFrame, bsTopLine] then - Canvas.DrawLine(0, 0, Width - 1, 0); - if Shape in [bsBox] then - if FPanelBorder = bsSingle then - Canvas.DrawLine(0, 1, 0, Height - 1) - else - Canvas.DrawLine(1, 1, 1, Height - 1); - if Shape in [bsFrame, bsLeftLine] then - Canvas.DrawLine(0, 1, 0, Height - 1); - if Shape in [bsFrame, bsRightLine] then - Canvas.DrawLine(Width - 2, 1, Width - 2, Height - 1); - if Shape in [bsFrame, bsBottomLine] then - Canvas.DrawLine(1, Height - 2, Width - 1, Height - 2); - - if Style = bsRaised then - Canvas.SetColor(clShadow2) - else - Canvas.SetColor(clHilite2); - - if Shape in [bsFrame, bsTopLine] then - Canvas.DrawLine(1, 1, Width - 2, 1); - if Shape in [bsFrame, bsLeftLine] then - Canvas.DrawLine(1, 2, 1, Height - 2); - if Shape in [bsBox, bsFrame, bsRightLine] then - Canvas.DrawLine(Width - 1, 0, Width - 1, Height - 1); - if Shape in [bsBox, bsFrame, bsBottomLine] then - Canvas.DrawLine(0, Height - 1, Width, Height - 1); - - // To make it more visible in the UI Designer - if csDesigning in ComponentState then - begin - if Shape in [bsSpacer] then - begin - Canvas.SetColor(clInactiveWgFrame); - Canvas.SetLineStyle(1, lsDash); - Canvas.DrawRectangle(0, 0, Width, Height); -// Canvas.SetTextColor(clText1); -// Canvas.DrawString(2, 2, Name + ': ' + Classname); - end; - end; -end; - -{TfpgPanel} - -function TfpgPanel.GetAlignment: TAlignment; -begin - Result := FAlignment; -end; - -procedure TfpgPanel.SetAlignment(const AValue: TAlignment); -begin - if FAlignment <> AValue then - begin - FAlignment := AValue; - Repaint; - end; -end; - -function TfpgPanel.GetLayout: TLayout; -begin - Result := FLayout; -end; - -procedure TfpgPanel.SetLayout(const AValue: TLayout); -begin - if FLayout <> AValue then - begin - FLayout := AValue; - Repaint; - end; -end; - -function TfpgPanel.GetText: string; -begin - Result := FText; -end; - -procedure TfpgPanel.SetText(const AValue: string); -begin - if FText <> AValue then - begin - FText := AValue; - Repaint; - end; -end; - -function TfpgPanel.GetFontDesc: string; -begin - Result := FFont.FontDesc; -end; - -procedure TfpgPanel.SetFontDesc(const AValue: string); -begin - FFont.Free; - FFont := fpgGetFont(AValue); - Repaint; -end; - -function TfpgPanel.GetLineSpace: integer; -begin - Result := FLineSpace; -end; - -procedure TfpgPanel.SetLineSpace(const AValue: integer); -begin - if FLineSpace <> AValue then - begin - FLineSpace := AValue; - Repaint; - end; -end; - -function TfpgPanel.GetMargin: integer; -begin - Result := FMargin; -end; - -procedure TfpgPanel.SetMargin(const AValue: integer); -begin - if FMargin <> AValue then - begin - FMargin := AValue; - Repaint; - end; -end; - -function Tfpgpanel.GetWrapText: boolean; -begin - Result := FWrapText; -end; - -procedure Tfpgpanel.SetWrapText(const AValue: boolean); -begin - if FWrapText <> AValue then - begin - FWrapText := AValue; - Repaint; - end; -end; -procedure TfpgPanel.HandlePaint; -var - lTxtFlags: TFTextFlags; -begin - inherited HandlePaint; - - Canvas.Clear(BackgroundColor); - - // Canvas.SetLineStyle(2, lsSolid); - // Canvas.SetColor(clWindowBackground); - // Canvas.DrawRectangle(1, 1, Width - 1, Height - 1); - if FPanelBorder = bsSingle then - Canvas.SetLineStyle(1, lsSolid) - else - Canvas.SetLineStyle(2, lsSolid); - - if Style = bsRaised then - Canvas.SetColor(clHilite2) - else - Canvas.SetColor(clShadow2); - - if FPanelBorder = bsSingle then - begin - Canvas.DrawLine(0, 0, Width - 1, 0); - Canvas.DrawLine(0, 1, 0, Height - 1); - end - else - begin - Canvas.DrawLine(0, 1, Width - 1, 1); - Canvas.DrawLine(1, 1, 1, Height - 1); - end; - - if Style = bsRaised then - Canvas.SetColor(clShadow2) - else - Canvas.SetColor(clHilite2); - - Canvas.DrawLine(Width - 1, 0, Width - 1, Height - 1); - Canvas.DrawLine(0, Height - 1, Width, Height - 1); - - Canvas.SetTextColor(FTextColor); - Canvas.SetFont(Font); - - lTxtFlags:= []; - if not Enabled then - Include(lTxtFlags, txtDisabled); - - if FWrapText then - Include(lTxtFlags, txtWrap); - case FAlignment of - taLeftJustify: - Include(lTxtFlags, txtLeft); - taRightJustify: - Include(lTxtFlags, txtRight); - taCenter: - Include(lTxtFlags, txtHCenter); - end; - case FLayout of - tlTop: - Include(lTxtFlags, txtTop); - tlBottom: - Include(lTxtFlags, txtBottom); - tlCenter: - Include(lTxtFlags, txtVCenter); - end; - Canvas.DrawText(FMargin, FMargin, Width - FMargin * 2, Height - FMargin * 2, FText, lTxtFlags, FLineSpace); -end; - -constructor TfpgPanel.Create(Aowner: TComponent); -begin - inherited Create(AOwner); - FText := 'Panel'; - FFont := fpgGetFont('#Label1'); - FPanelShape := bsBox; - FPanelStyle := bsRaised; - FWidth := 80; - FHeight := 80; - FFocusable := True; // otherwise children can't get focus - FBackgroundColor := Parent.BackgroundColor; - FAlignment := taCenter; - FLayout := tlCenter; - FWrapText := False; - FLineSpace := 2; - FMargin := 2; -end; - -destructor TfpgPanel.Destroy; -begin - FText := ''; - FFont.Free; - inherited Destroy; -end; - -{TfpgGroupBox} - -function TfpgGroupBox.GetAlignment: TAlignment; -begin - Result := FAlignment; -end; - -procedure TfpgGroupBox.SetAlignment(const AValue: TAlignment); -begin - if FAlignment <> AValue then - begin - FAlignment := AValue; - Repaint; - end; -end; - -function TfpgGroupBox.GetText: string; -begin - Result := FText; -end; - -procedure TfpgGroupBox.SetText(const AValue: string); -begin - if FText <> AValue then - begin - FText := AValue; - Repaint; - end; -end; - -function TfpgGroupBox.GetFontDesc: string; -begin - Result := FFont.FontDesc; -end; - -procedure TfpgGroupBox.SetFontDesc(const AValue: string); -begin - FFont.Free; - FFont := fpgGetFont(AValue); - Repaint; -end; - -function TfpgGroupBox.GetMargin: integer; -begin - Result := FMargin; -end; - -procedure TfpgGroupBox.SetMargin(const AValue: integer); -begin - if FMargin <> AValue then - begin - FMargin := AValue; - Repaint; - end; -end; - -function TfpgGroupBox.GetClientRect: TfpgRect; -var - h: integer; -begin - h := FFont.Height + 4; - Result.SetRect(2, h, Width - 4, Height - (h + 2)); -end; - -procedure TfpgGroupBox.HandlePaint; -var - r: TfpgRect; - w: integer; - lTxtFlags: TFTextFlags; -begin - inherited HandlePaint; - - Canvas.Clear(Parent.BackgroundColor); - Canvas.ClearClipRect; - r.SetRect(0, 5, Width, Height); - Canvas.SetClipRect(r); - Canvas.Clear(FBackgroundColor); - - lTxtFlags := TextFlagsDflt; - if not Enabled then - Include(lTxtFlags, txtDisabled); - -// Canvas.ClearClipRect; - - // Canvas.SetLineStyle(2, lsSolid); - // Canvas.SetColor(clWindowBackground); - // Canvas.DrawRectangle(1, 1, Width - 1, Height - 1); - if FPanelBorder = bsSingle then - Canvas.SetLineStyle(1, lsSolid) - else - Canvas.SetLineStyle(2, lsSolid); - - if Style = bsRaised then - Canvas.SetColor(clHilite2) - else - Canvas.SetColor(clShadow2); - - if FPanelBorder = bsSingle then - begin - Canvas.DrawLine(0, 5, Width - 1, 5); - Canvas.DrawLine(0, 6, 0, Height - 1); - end - else - begin - Canvas.DrawLine(0, 6, Width - 1, 6); - Canvas.DrawLine(1, 6, 1, Height - 1); - end; - - if Style = bsRaised then - Canvas.SetColor(clShadow2) - else - Canvas.SetColor(clHilite2); - - Canvas.DrawLine(Width - 1, 5, Width - 1, Height - 1); - Canvas.DrawLine(0, Height - 1, Width, Height - 1); - - Canvas.SetTextColor(FTextColor); - Canvas.SetFont(Font); - - case FAlignment of - taLeftJustify: - begin - w := FFont.TextWidth(FText) + FMargin * 2; - r.SetRect(5, 0, w, FFont.Height + FMargin); - Canvas.SetClipRect(r); - Canvas.Clear(FBackgroundColor); - - if Style = bsRaised then - Canvas.SetColor(clHilite2) - else - Canvas.SetColor(clShadow2); - - if FPanelBorder = bsSingle then - begin - Canvas.DrawLine(5, 0, w + 5, 0); - Canvas.DrawLine(5, 0, 5, 6); - end - else - begin - Canvas.DrawLine(5, 1, w + 5, 1); - Canvas.DrawLine(6, 0, 6, 7); - end; - - if Style = bsRaised then - Canvas.SetColor(clShadow2) - else - Canvas.SetColor(clHilite2); - - Canvas.DrawLine(w + 5, 0, w + 5, 6); - Canvas.DrawText(FMargin + 5, 0, FText, lTxtFlags); - end; - taRightJustify: - begin - w := Width - FFont.TextWidth(FText) - (FMargin * 2) - 5; - r.SetRect(w, 0, FFont.TextWidth(FText) + FMargin * 2, FFont.Height + FMargin); - Canvas.SetClipRect(r); - Canvas.Clear(FBackgroundColor); - - if Style = bsRaised then - Canvas.SetColor(clHilite2) - else - Canvas.SetColor(clShadow2); - - if FPanelBorder = bsSingle then - begin - Canvas.DrawLine(w, 0, Width - 5, 0); - Canvas.DrawLine(w, 0, w, 6); - end - else - begin - Canvas.DrawLine(w, 1, Width - 5, 1); - Canvas.DrawLine(w + 1, 0, w + 1, 7); - end; - - if Style = bsRaised then - Canvas.SetColor(clShadow2) - else - Canvas.SetColor(clHilite2); - - Canvas.DrawLine(Width - 6, 0, Width - 6, 6); - Canvas.DrawText(Width - FFont.TextWidth(FText) - FMargin - 5, 0, FText, lTxtFlags); - end; - taCenter: - begin - w := (Width - FFont.TextWidth(FText) - FMargin * 2) div 2; - r.SetRect(w, 0, FFont.TextWidth(FText) + FMargin * 2, FFont.Height + FMargin); - Canvas.SetClipRect(r); - Canvas.Clear(FBackgroundColor); - - if Style = bsRaised then - Canvas.SetColor(clHilite2) - else - Canvas.SetColor(clShadow2); - - if FPanelBorder = bsSingle then - begin - Canvas.DrawLine(w, 0, w + FFont.TextWidth(FText) + FMargin * 2, 0); - Canvas.DrawLine(w, 0, w, 6); - end - else - begin - Canvas.DrawLine(w, 1, w + FFont.TextWidth(FText) + FMargin * 2, 1); - Canvas.DrawLine(w + 1, 0, w + 1, 7); - end; - - if Style = bsRaised then - Canvas.SetColor(clShadow2) - else - Canvas.SetColor(clHilite2); - - Canvas.DrawLine(w + FFont.TextWidth(FText) + FMargin * 2 - 1, 0, w + FFont.TextWidth(FText) + FMargin * 2 - 1, 6); - Canvas.DrawText(w + FMargin, 0, FText, lTxtFlags); - end; - end; -end; - -constructor TfpgGroupBox.Create(Aowner: TComponent); -begin - inherited Create(AOwner); - FText := 'Group box'; - FFont := fpgGetFont('#Label1'); - FPanelShape := bsBox; - FPanelStyle := bsRaised; - FWidth := 80; - FHeight := 80; - FFocusable := True; // otherwise children can't get focus - FBackgroundColor := Parent.BackgroundColor; - FAlignment := taLeftJustify; - FMargin := 2; -end; - -end. - |