summaryrefslogtreecommitdiff
path: root/gui/panel.inc
diff options
context:
space:
mode:
Diffstat (limited to 'gui/panel.inc')
-rw-r--r--gui/panel.inc126
1 files changed, 126 insertions, 0 deletions
diff --git a/gui/panel.inc b/gui/panel.inc
new file mode 100644
index 00000000..4fd3b2d5
--- /dev/null
+++ b/gui/panel.inc
@@ -0,0 +1,126 @@
+{
+ fpGUI - Free Pascal Graphical User Interface
+ Copyright (C) 2006 by Graeme Geldenhuys
+ member of the fpGUI development team.
+
+ Panel class declarations
+
+ See the file COPYING.fpGUI, 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.
+
+ **********************************************************************}
+
+
+{%mainunit fpgui.pp}
+
+{
+ Panel implementation. I mixture of Delphi's TPanel and TBevel. The class
+ name might change to Frame.
+}
+
+{$IFDEF read_interface}
+
+ TCustomPanel = class(TBinWidget)
+ private
+ FBevelStyle: TBevelStyle;
+ procedure SetBevelStyle(const AValue: TBevelStyle);
+ protected
+ procedure Paint(Canvas: TFCanvas); override;
+ procedure CalcSizes; override;
+ procedure Resized; override;
+ property BevelStyle: TBevelStyle read FBevelStyle write SetBevelStyle;
+ {$Note Still outstanding is the Shape and Color properties for starters }
+ public
+ constructor Create(const pText: string; pOwner: TComponent); overload;
+ end;
+
+
+ TPanel = class(TCustomPanel)
+ published
+ property CanExpandWidth;
+ property CanExpandHeight;
+ property Enabled;
+ property Text;
+ property BevelStyle;
+ end;
+
+{$ENDIF read_interface}
+
+
+
+{$IFDEF read_implementation}
+
+procedure TCustomPanel.SetBevelStyle(const AValue: TBevelStyle);
+begin
+ if FBevelStyle = AValue then exit;
+ FBevelStyle := AValue;
+ Redraw;
+end;
+
+procedure TCustomPanel.Paint(Canvas: TFCanvas);
+var
+ Pt: TPoint;
+begin
+ Style.DrawPanel(Canvas, Rect(0, 0, Width, Height), FBevelStyle);
+
+ if Text <> '' then
+ begin
+ Canvas.SetColor(Style.GetUIColor(clBtnText));
+ Pt.x := (BoundsSize.cx - Canvas.TextWidth(Text)) div 2;
+ Pt.y := (BoundsSize.cy - Canvas.FontCellHeight) div 2;
+ Style.DrawText(Canvas, Pt, Text, WidgetState);
+ end;
+end;
+
+procedure TCustomPanel.CalcSizes;
+var
+ Borders: TRect;
+ LabelWidth: Integer;
+begin
+ Borders := Style.GetGroupBoxBorders(TFCanvas(FindForm.Wnd.Canvas), Text, LabelWidth);
+ FMinSize.cx := Borders.Left + Borders.Right + LabelWidth;
+ FMinSize.cy := Borders.Top + Borders.Bottom;
+ if Assigned(Child) then
+ begin
+ if Child.MinSize.cx > LabelWidth then
+ FMinSize.cx := Borders.Left + Borders.Right + Child.MinSize.cx;
+ Inc(FMinSize.cy, Child.MinSize.cy);
+ if Child.DefSize.cx > LabelWidth then
+ FDefSize.cx := Borders.Left + Borders.Right + Child.MinSize.cx;
+ Inc(FDefSize.cy, Child.DefSize.cy);
+ if Child.MaxSize.cx > LabelWidth then
+ FMaxSize.cx := Min(Borders.Left + Borders.Right + Child.MaxSize.cx, InfiniteSize);
+ FMaxSize.cy := Min(MaxSize.cy + Child.MaxSize.cy, InfiniteSize);
+ end;
+end;
+
+procedure TCustomPanel.Resized;
+var
+ LabelWidth: Integer;
+ Borders: TRect;
+begin
+ LabelWidth := 0;
+ if Assigned(Child) then
+ begin
+ Borders := Style.GetGroupBoxBorders(TFCanvas(FindForm.Wnd.Canvas), Text, LabelWidth);
+ Child.SetBounds(Borders.TopLeft, Size(Width - Borders.Left - Borders.Right,
+ Height - Borders.Top - Borders.Bottom));
+ end;
+end;
+
+constructor TCustomPanel.Create(const pText: string; pOwner: TComponent);
+begin
+ Create(pOwner);
+ FCanExpandWidth := True;
+ FCanExpandHeight := True;
+ Text := pText;
+ FBevelStyle := bsRaised;
+end;
+
+
+{$ENDIF read_implementation}
+