summaryrefslogtreecommitdiff
path: root/gui/edit.inc
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graemeg@users.sourceforge.net>2007-04-06 13:28:19 +0000
committerGraeme Geldenhuys <graemeg@users.sourceforge.net>2007-04-06 13:28:19 +0000
commit5f32ceb5c3c54d3bcd91afb30ae13580b0ab41bc (patch)
tree978bad6d9cb6e431162186b553b99f91c8fd2fbd /gui/edit.inc
parent77ff4e17ed90bbbc07f2fd80e729a76659b9cf32 (diff)
downloadfpGUI-5f32ceb5c3c54d3bcd91afb30ae13580b0ab41bc.tar.xz
Renamed all the inc files to have the fpgui prefex. This will minimize the namespace conflicts in Lazarus LCL.
Diffstat (limited to 'gui/edit.inc')
-rw-r--r--gui/edit.inc372
1 files changed, 0 insertions, 372 deletions
diff --git a/gui/edit.inc b/gui/edit.inc
deleted file mode 100644
index ce00f4d9..00000000
--- a/gui/edit.inc
+++ /dev/null
@@ -1,372 +0,0 @@
-{
- fpGUI - Free Pascal GUI Library
-
- Edit class declarations
-
- Copyright (C) 2000 - 2006 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.
-}
-
-{%mainunit fpgui.pas}
-
-{$IFDEF read_interface}
-
- { TCustomEdit }
-
- TCustomEdit = class(TWidget)
- private
- FFontColor: TColor;
- FSelStart: integer;
- FSelOffset: integer;
- FCursorPos: Integer;
- FPasswordChar: Char;
- FOnChange: TNotifyEvent;
- procedure SetFontColor(const AValue: TColor);
- procedure SetPasswordChar(APasswordChar: Char);
- procedure SetCursorPos(ACursorPos: Integer);
- procedure DoMousePressed(pEvent: TMousePressedEventObj);
- protected
- procedure Paint(Canvas: TFCanvas); override;
- function ProcessEvent(Event: TEventObj): Boolean; override;
- procedure CalcSizes; override;
- procedure EvKeyPressed(Key: Word; Shift: TShiftState); override;
- procedure EvKeyChar(KeyChar: Char); override;
- procedure EvTextChanged; override;
- property CanExpandWidth default True;
- property Cursor default crIBeam;
- property PasswordChar: Char read FPasswordChar write SetPasswordChar default #0;
- property CursorPos: Integer read FCursorPos write SetCursorPos;
- property OnChange: TNotifyEvent read FOnChange write FOnChange;
- property FontColor: TColor read FFontColor write SetFontColor;
- procedure SetText(const AText: String); override;
- public
- constructor Create(AOwner: TComponent); override;
- constructor Create(const pText: string; pOwner: TComponent); overload;
- end;
-
-
- TEdit = class(TCustomEdit)
- published
- property CanExpandWidth;
- property Enabled;
- property PasswordChar;
- property Text;
- property OnChange;
- property FontColor;
- end;
-
-{$ENDIF read_interface}
-
-
-
-{$IFDEF read_implementation}
-
-// ===================================================================
-// TCustomEdit
-// ===================================================================
-
-constructor TCustomEdit.Create(AOwner: TComponent);
-begin
- inherited Create(AOwner);
- WidgetStyle := WidgetStyle + [wsCaptureMouse, wsClickable, wsOpaque];
- FCanExpandWidth := True;
- FCursor := crIBeam;
- FFontColor := clWindowText;
- FCursorPos := 0;
-end;
-
-
-constructor TCustomEdit.Create(const pText: string; pOwner: TComponent);
-begin
- Create(pOwner);
- Text := pText;
-end;
-
-
-procedure TCustomEdit.Paint(Canvas: TFCanvas);
-var
- Borders: TRect;
- s: String;
- x: Integer;
- ItemRect: TRect;
- ItemFlags: TItemFlags;
-begin
- ItemFlags := [];
- Borders := Style.GetEditBoxBorders;
-
- Style.DrawEditBox(Canvas, Rect(0, 0, BoundsSize.cx, BoundsSize.cy));
-
- if not Canvas.IntersectClipRect(Rect(Borders.Left + 1, Borders.Top + 1,
- BoundsSize.cx - Borders.Right - 1, BoundsSize.cy - Borders.Bottom - 1)) then
- exit;
-
- if wsEnabled in WidgetState then
- Canvas.SetColor(Style.GetUIColor(FFontColor))
- else
- Canvas.SetColor(Style.GetUIColor(clGrayText));
-
- if PasswordChar = #0 then
- s := PChar(Text)
- else
- begin
- SetLength(s, Length(Text));
- if Length(Text) > 0 then
- FillChar(s[1], Length(Text), PasswordChar);
- end;
-
-
- // drawing selection
- if (FSelOffset <> 0) then
- begin
- if (wsHasFocus in WidgetState) and FindForm.IsActive then
- begin
- Include(ItemFlags, ifFocused);
- Include(ItemFlags, ifSelected);
- end;
-
- ItemRect.Left := Canvas.TextWidth(Copy(s, 1, CursorPos - FSelOffset));
- ItemRect.Top := 0;
- ItemRect.Right := Canvas.TextWidth(Copy(s, 1, CursorPos));
- ItemRect.Bottom := Height;
-{
- ItemRect := Rect(0, 0, Width, Height);
- ItemRect.TopLeft := ItemRect.TopLeft + 1;
- ItemRect.BottomRight := ItemRect.BottomRight - 2;
-}
-// InflateRect(ItemRect, -1, -1);
-
-// Style.SetUIColor(Canvas, clWindowText);
-
- {$Note Start here: Refine the selection rect}
- Style.DrawItemBefore(Canvas, ItemRect, ItemFlags);
- Style.DrawText(Canvas, (Borders.TopLeft + Point(1, 1)), s, WidgetState);
- Style.DrawItemAfter(Canvas, ItemRect, ItemFlags);
- end
- else
- Canvas.TextOut(Borders.TopLeft + Point(1, 1), s);
-
-
- if wsHasFocus in WidgetState then
- begin
- Canvas.SetColor(Style.GetUIColor(clWindowText));
- x := Borders.Left + 1 + Canvas.TextWidth(Copy(s, 1, CursorPos));
- Canvas.DrawLine(Point(x, Borders.Top), Point(x, BoundsSize.cy - Borders.Bottom));
- end;
-end;
-
-
-function TCustomEdit.ProcessEvent(Event: TEventObj): Boolean;
-begin
- if Event.InheritsFrom(TMousePressedEventObj) then
- begin
-// Result := True;
- DoMousePressed(TMousePressedEventObj(Event));
-// Writeln('>>> TMousePressedEventObj in ' + Classname);
- end;
- Result := inherited ProcessEvent(Event);
-end;
-
-
-procedure TCustomEdit.EvKeyPressed(Key: Word; Shift: TShiftState);
-begin
- if Shift * [ssShift, ssAlt, ssCtrl, ssMeta, ssSuper, ssHyper, ssAltGr] = [] then
- begin
-// Writeln('1');
- case Key of
- keyLeft, keyUp:
- if CursorPos > 0 then
- CursorPos := CursorPos - 1;
- keyRight, keyDown:
- if CursorPos < Length(Text) then
- CursorPos := CursorPos + 1;
- keyHome:
- CursorPos := 0;
- keyEnd:
- CursorPos := Length(Text);
- else
- inherited EvKeyPressed(Key, Shift);
- end;
- end
-{ else if Shift * [ssShift, ssAlt, ssCtrl, ssMeta, ssSuper, ssHyper, ssAltGr] = [ssShift] then
- begin
- Writeln('2');
- case Key of
- keyHome:
- begin
- FSelOffset := CursorPos;
- CursorPos := 0;
- end;
- keyEnd:
- begin
- FSelOffset := CursorPos;
- CursorPos := Length(Text);
- end;
- else
- EvKeyPressed(Key, Shift);
- end;
- end
-}
- else
- inherited EvKeyPressed(Key, Shift);
-end;
-
-
-procedure TCustomEdit.EvKeyChar(KeyChar: Char);
-begin
- case KeyChar of
- #8: { Backspace }
- if CursorPos > 0 then
- begin
- Text := Copy(Text, 1, CursorPos - 1) + Copy(Text, CursorPos + 1, Length(Text));
- CursorPos := CursorPos - 1;
- end;
- #127: { Del }
- if CursorPos < Length(Text) then
- begin
- Text := Copy(Text, 1, CursorPos) + Copy(Text, CursorPos + 2, Length(Text));
- Redraw;
- end;
- #32..#126, #128..#255:
- begin
- Text := Copy(Text, 1, CursorPos) + KeyChar + Copy(Text, CursorPos + 1, Length(Text));
- CursorPos := CursorPos + 1;
- end;
- else
- inherited EvKeyChar(KeyChar);
- end;
-end;
-
-
-procedure TCustomEdit.CalcSizes;
-var
- Borders: TRect;
-begin
- Borders := Style.GetEditBoxBorders;
- FMinSize := gfxbase.Size(50, Borders.Top + Borders.Bottom +
- FindForm.Wnd.Canvas.FontCellHeight + 2);
-end;
-
-
-procedure TCustomEdit.EvTextChanged;
-begin
- Redraw;
- if Assigned(OnChange) then
- OnChange(Self);
-end;
-
-
-procedure TCustomEdit.SetText(const AText: String);
-begin
- FSelOffset := 0;
- inherited SetText(AText);
-end;
-
-
-procedure TCustomEdit.SetPasswordChar(APasswordChar: Char);
-begin
- if APasswordChar <> PasswordChar then
- begin
- FPasswordChar := APasswordChar;
- Redraw;
- end;
-end;
-
-
-procedure TCustomEdit.SetFontColor(const AValue: TColor);
-begin
- if FFontColor = AValue then exit;
- FFontColor := AValue;
-end;
-
-
-procedure TCustomEdit.SetCursorPos(ACursorPos: Integer);
-begin
- if ACursorPos <> CursorPos then
- begin
- FCursorPos := ACursorPos;
- Redraw;
- end;
-end;
-
-
-procedure TCustomEdit.DoMousePressed(pEvent: TMousePressedEventObj);
-var
- Borders: TRect;
- cp: integer;
- cpx: integer;
- lSideMargin: integer;
- n: integer;
- cx: integer;
- lText: string;
-
- // replicates pStrValue a set of pRepCount times.
- function lReplicate(const pStrValue : string; pRepCount : Word) : string;
- var
- pResult, pValue: PChar;
- lenValue: cardinal;
- begin
- if (pRepCount = 0) or (Pointer(pStrValue) = nil) then
- exit;
-
- lenValue := Length(pStrValue);
- SetLength(Result, lenValue * pRepCount);
- pResult := Pointer(Result);
- pValue := Pointer(pStrValue);
-
- while pRepCount <> 0 do
- begin
- Move(pValue^, pResult^, lenValue);
- Inc(pResult, lenValue);
- Dec(pRepCount);
- end;
- end;
-
-begin
- if (pEvent.Button = mbLeft) then
- begin
- // searching for the appropriate character position
- Borders := Style.GetEditBoxBorders;
- lSideMargin := Borders.Left + 1;
- cp := CursorPos;
-
- // Make sure we work with the correct displayed text
- if FPasswordChar = #0 then
- lText := Text
- else
- lText := lReplicate(FPasswordChar, Length(Text));
-
- cpx := FindForm.Wnd.Canvas.TextWidth(Copy(lText, 1, CursorPos)) + lSideMargin;
-
- for n := 0 to Length(Text) do
- begin
- cx := FindForm.Wnd.Canvas.TextWidth(Copy(lText, 1, n)) + lSideMargin;
- if abs(cx - pEvent.Position.x) < abs(cpx - pEvent.Position.x) then
- begin
- cpx := cx;
- cp := n;
- end;
- end;
-
- FCursorPos := cp;
-
- if (ssShift in pEvent.Shift) then
- begin
- FSelOffset := FCursorPos - FSelStart;
- end
- else
- begin
- FSelStart := cp;
- FSelOffset := 0;
- end;
- end;
-end;
-
-{$ENDIF read_implementation}
-