lazarus-ccr/components/orpheus/myovctbpe1.pas

351 lines
11 KiB
ObjectPascal

{*********************************************************}
{* myovctbpe1.pas *}
{*********************************************************}
{* ***** BEGIN LICENSE BLOCK ***** *}
{* Version: MPL 1.1 *}
{* *}
{* The contents of this file are subject to the Mozilla Public License *}
{* Version 1.1 (the "License"); you may not use this file except in *}
{* compliance with the License. You may obtain a copy of the License at *}
{* http://www.mozilla.org/MPL/ *}
{* *}
{* Software distributed under the License is distributed on an "AS IS" basis, *}
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
{* for the specific language governing rights and limitations under the *}
{* License. *}
{* *}
{* The Original Code is TurboPower Orpheus *}
{* *}
{* The Initial Developer of the Original Code is TurboPower Software *}
{* *}
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
{* TurboPower Software Inc. All Rights Reserved. *}
{* *}
{* Contributor(s): *}
{* *}
{* Phil Hess - adapted ovctbpe1.pas to eliminate TOvcSimpleField. *}
{* *}
{* ***** END LICENSE BLOCK ***** *}
{$I OVC.INC}
{$B-} {Complete Boolean Evaluation}
{$I+} {Input/Output-Checking}
{$P+} {Open Parameters}
{$T-} {Typed @ Operator}
{.W-} {Windows Stack Frame}
{$X+} {Extended Syntax}
unit MyOvcTbPE1;
{Lazarus-specific Rows property editor for the table component.}
interface
uses
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, LResources, {$ENDIF}
Classes, Graphics, Controls,
{$IFNDEF LCL} {$IFDEF VERSION6} DesignIntf, DesignEditors, {$ELSE} DsgnIntf, {$ENDIF} {$ELSE} PropEdits, {$ENDIF}
SysUtils, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls,
OvcBase, OvcTCmmn, OvcTable, OvcTbRws, OvcSc;
type
TOvcfrmRowEditor = class(TForm)
ctlHidden: TCheckBox;
ctlUseDefHeight: TRadioButton;
ctlUseCustHeight: TRadioButton;
DoneButton: TBitBtn;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
Label1: TLabel;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Reset: TBitBtn;
ctlHeight: TEdit;
ctlDefaultHeight: TEdit;
ctlRowLimit: TEdit;
ctlRowNumber: TEdit;
ApplyButton: TBitBtn;
OvcSpinner1: TOvcSpinner;
OvcSpinner2: TOvcSpinner;
OvcSpinner3: TOvcSpinner;
OvcSpinner4: TOvcSpinner;
procedure ctlUseDefHeightClick(Sender: TObject);
procedure ctlUseCustHeightClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure ctlRowNumberExit(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ResetClick(Sender: TObject);
procedure ApplyButtonClick(Sender: TObject);
procedure DoneButtonClick(Sender: TObject);
procedure ctlRowNumberChange(Sender: TObject);
private
{ Private declarations }
FRows : TOvcTableRows;
FRowNum : TRowNum;
CurDefHt : boolean;
FormShowCalled : Boolean;
protected
procedure RefreshRowData;
procedure SetRowNum(R : TRowNum);
public
{ Public declarations }
procedure SetRows(RS : TOvcTableRows);
property Rows : TOvcTableRows
read FRows
write SetRows;
property RowNum : TRowNum
read FRowNum
write SetRowNum;
end;
{-A table row property editor}
TOvcTableRowProperty = class(TClassProperty)
public
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
end;
implementation
{$IFNDEF LCL}
{$R *.DFM}
{$ENDIF}
{===TOvcTableRowProperty=============================================}
procedure TOvcTableRowProperty.Edit;
var
RowEditor : TOvcfrmRowEditor;
begin
RowEditor := TOvcfrmRowEditor.Create(Application);
try
RowEditor.SetRows(TOvcTableRows(GetOrdValue));
RowEditor.ShowModal;
{$IFNDEF LCL}
Designer.Modified;
{$ELSE}
Modified;
{$ENDIF}
finally
RowEditor.Free;
end;{try..finally}
end;
{--------}
function TOvcTableRowProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paMultiSelect, paDialog, paReadOnly];
end;
{====================================================================}
{===TRowEditor=======================================================}
procedure TOvcfrmRowEditor.ApplyButtonClick(Sender: TObject);
var
NewRowLimit : Integer;
NewDefHeight : Integer;
NewHeight : Integer;
RS : TRowStyle;
begin
{20070204 workaround for recent change to Lazarus where
ctlRowNumberChange gets called by ShowModal for some reason
(thus calling this method) before FormShow event handler
which initializes things.}
if not FormShowCalled then
Exit;
NewRowLimit := StrToIntDef(ctlRowLimit.Text, FRows.Limit);
if (NewRowLimit < 1) or (NewRowLimit > MaxInt) then {Out of range?}
NewRowLimit := FRows.Limit; {Restore previous row limit}
FRows.Limit := NewRowLimit;
ctlRowLimit.Text := IntToStr(NewRowLimit);
if FRowNum >= FRows.Limit then
RowNum := pred(FRows.Limit);
NewDefHeight := StrToIntDef(ctlDefaultHeight.Text, FRows.DefaultHeight);
if (NewDefHeight < 5) or (NewDefHeight > 32767) then {Out of range?}
NewDefHeight := FRows.DefaultHeight; {Restore previous default height}
FRows.DefaultHeight := NewDefHeight;
ctlDefaultHeight.Text := IntToStr(NewDefHeight);
with RS do
begin
if ctlUseDefHeight.Checked then
Height := StrToIntDef(ctlDefaultHeight.Text, Height)
else
begin
NewHeight := StrToIntDef(ctlHeight.Text, Height);
if (NewHeight < 5) or (NewHeight > 32767) then {Out of range?}
NewHeight := Height; {Restore previous row height}
Height := NewHeight;
ctlHeight.Text := IntToStr(NewHeight);
if (Height = FRows.DefaultHeight) then
ctlUseDefHeight.Checked := true;
end;
Hidden := ctlHidden.Checked;
FRows[RowNum] := RS;
end;
end;
{--------}
procedure TOvcfrmRowEditor.ctlRowNumberExit(Sender: TObject);
begin
RowNum := StrToInt(ctlRowNumber.Text);
end;
{--------}
procedure TOvcfrmRowEditor.ctlUseCustHeightClick(Sender: TObject);
begin
CurDefHt := false;
ctlHeight.Enabled := true;
end;
{--------}
procedure TOvcfrmRowEditor.ctlUseDefHeightClick(Sender: TObject);
begin
CurDefHt := true;
ctlHeight.Text := IntToStr(FRows.DefaultHeight);
ctlHeight.Enabled := false;
end;
{--------}
procedure TOvcfrmRowEditor.FormShow(Sender: TObject);
begin
ctlDefaultHeight.Text := IntToStr(FRows.DefaultHeight);
ctlRowLimit.Text := IntToStr(FRows.Limit);
RefreshRowData;
FormShowCalled := True;
end;
{--------}
procedure TOvcfrmRowEditor.RefreshRowData;
begin
CurDefHt := FRows.Height[RowNum] = FRows.DefaultHeight;
ctlHidden.Checked := FRows.Hidden[RowNum];
ctlHeight.Text := IntToStr(FRows.Height[RowNum]);
if CurDefHt then
begin
ctlUseDefHeight.Checked := true;
ctlHeight.Enabled := false;
end
else
begin
ctlUseCustHeight.Checked := true;
ctlHeight.Enabled := true;
end;
ctlRowLimit.Text := IntToStr(FRows.Limit);
end;
{--------}
procedure TOvcfrmRowEditor.ResetClick(Sender: TObject);
begin
FRows.Clear;
ctlDefaultHeight.Text := IntToStr(FRows.DefaultHeight);
RefreshRowData;
end;
{--------}
procedure TOvcfrmRowEditor.SetRowNum(R : TRowNum);
begin
if (FRowNum <> R) then
begin
FRowNum := R;
RefreshRowData;
ctlRowNumber.Text := IntToStr(R); //Do this after refresh
end;
end;
{--------}
procedure TOvcfrmRowEditor.SetRows(RS : TOvcTableRows);
begin
if Assigned(FRows) then
FRows.Free;
FRows := RS;
FRowNum := 0;
ctlRowNumber.Text := '0';
CurDefHt := FRows.Height[RowNum] = FRows.DefaultHeight;
end;
{--------}
procedure TOvcfrmRowEditor.SpeedButton1Click(Sender: TObject);
begin
ApplyButtonClick(Self);
if (RowNum > 0) then
RowNum := RowNum - 1;
end;
{--------}
procedure TOvcfrmRowEditor.SpeedButton2Click(Sender: TObject);
begin
ApplyButtonClick(Self);
if (RowNum < pred(FRows.Limit)) then
RowNum := RowNum + 1;
end;
{--------}
procedure TOvcfrmRowEditor.SpeedButton3Click(Sender: TObject);
begin
ApplyButtonClick(Self);
RowNum := 0;
end;
{--------}
procedure TOvcfrmRowEditor.SpeedButton4Click(Sender: TObject);
begin
ApplyButtonClick(Self);
RowNum := pred(FRows.Limit);
end;
{--------}
procedure TOvcfrmRowEditor.SpeedButton5Click(Sender: TObject);
var
RS : TRowStyle;
begin
RS.Hidden := false;
RS.Height := FRows.DefaultHeight;
FRows.Insert(FRowNum, RS);
RefreshRowData;
end;
{--------}
procedure TOvcfrmRowEditor.SpeedButton6Click(Sender: TObject);
begin
FRows.Delete(FRowNum);
RefreshRowData;
end;
{====================================================================}
procedure TOvcfrmRowEditor.DoneButtonClick(Sender: TObject);
begin
ApplyButtonClick(Self);
end;
procedure TOvcfrmRowEditor.ctlRowNumberChange(Sender: TObject);
var
NewRowNum : Integer;
begin
ApplyButtonClick(Self);
if not TryStrToInt(ctlRowNumber.Text, NewRowNum) then {Invalid?}
ctlRowNumber.Text := IntToStr(RowNum) {Restore previous row number}
else if NewRowNum = -1 then {Wrap around to last row?}
ctlRowNumber.Text := IntToStr(Pred(FRows.Limit))
else if NewRowNum = FRows.Limit then {Wrap around to first row?}
ctlRowNumber.Text := '0'
else if not (NewRowNum in [0..Pred(FRows.Limit)]) then {Out of range?}
ctlRowNumber.Text := IntToStr(RowNum); {Restore previous row number}
RowNum := StrToInt(ctlRowNumber.Text);
end;
initialization
{$IFDEF LCL}
{$I myovctbpe1.lrs} {Include form's resource file}
{$ENDIF}
end.