From 275c4838b67be1dbaf2c7e7057b749a8ade8e9a2 Mon Sep 17 00:00:00 2001 From: mattias Date: Tue, 30 Apr 2013 12:20:18 +0000 Subject: [PATCH] IDE: mode matrix: started target editing git-svn-id: trunk@40951 - --- ide/frames/compiler_modematrix.lfm | 31 ++++++++++-- ide/frames/compiler_modematrix.pas | 22 ++++++-- ide/frames/modematrixctrl.pas | 80 ++++++++++++++++++------------ 3 files changed, 92 insertions(+), 41 deletions(-) diff --git a/ide/frames/compiler_modematrix.lfm b/ide/frames/compiler_modematrix.lfm index 1088020ae6..88bcc437e0 100644 --- a/ide/frames/compiler_modematrix.lfm +++ b/ide/frames/compiler_modematrix.lfm @@ -29,34 +29,55 @@ object Frame1: TFrame1 OnClick = BMMMoveDownToolButtonClick end object BMMUndoToolButton: TToolButton - Left = 70 + Left = 80 Top = 2 Caption = 'Undo' OnClick = BMMUndoToolButtonClick end object BMMRedoToolButton: TToolButton - Left = 111 + Left = 121 Top = 2 Caption = 'Redo' OnClick = BMMRedoToolButtonClick end object BMMNewTargetToolButton: TToolButton - Left = 151 + Left = 171 Top = 2 Caption = 'New Target' OnClick = BMMNewTargetToolButtonClick end object BMMNewOptionToolButton: TToolButton - Left = 231 + Left = 251 Top = 2 Caption = 'New Option' OnClick = BMMNewOptionToolButtonClick end object BMMDeleteToolButton: TToolButton - Left = 313 + Left = 343 Top = 2 Caption = 'Delete' OnClick = BMMDeleteToolButtonClick end + object ToolButton1: TToolButton + Left = 70 + Top = 2 + Width = 10 + Caption = 'ToolButton1' + Style = tbsSeparator + end + object ToolButton2: TToolButton + Left = 161 + Top = 2 + Width = 10 + Caption = 'ToolButton2' + Style = tbsSeparator + end + object ToolButton3: TToolButton + Left = 333 + Top = 2 + Width = 10 + Caption = 'ToolButton3' + Style = tbsSeparator + end end end diff --git a/ide/frames/compiler_modematrix.pas b/ide/frames/compiler_modematrix.pas index 8857e1db0d..7dd33ed112 100644 --- a/ide/frames/compiler_modematrix.pas +++ b/ide/frames/compiler_modematrix.pas @@ -42,6 +42,9 @@ type BMMNewTargetToolButton: TToolButton; BMMNewOptionToolButton: TToolButton; BMMDeleteToolButton: TToolButton; + ToolButton1: TToolButton; + ToolButton2: TToolButton; + ToolButton3: TToolButton; procedure BMMDeleteToolButtonClick(Sender: TObject); procedure BMMMoveDownToolButtonClick(Sender: TObject); procedure BMMMoveUpToolButtonClick(Sender: TObject); @@ -55,6 +58,7 @@ type FGrid: TGroupedMatrixControl; procedure MoveRow(Direction: integer); procedure UpdateButtons; + function AddTarget(StorageGroup: TGroupedMatrixGroup): TGroupedMatrixGroup; public constructor Create(TheOwner: TComponent); override; property Grid: TGroupedMatrixControl read FGrid; @@ -119,7 +123,7 @@ begin if Group.Group=nil then begin if Group.Count=0 then begin // storage group without target => add a target - Group:=Grid.Matrix.AddGroup(Group,'Target: *'); + Group:=AddTarget(Group); end; end; // add option as first item of Group @@ -160,12 +164,12 @@ begin if Group.Group=nil then begin // Group is a storage group // => add as first target of storage group - NewRow:=Grid.Matrix.AddGroup(Group,'Target: *'); + NewRow:=AddTarget(Group); Group.Move(Group.Count-1,0); end else begin // Group is a target // => add target behind current target - NewRow:=Grid.Matrix.AddGroup(Group.Group,'Target: *'); + NewRow:=AddTarget(Group.Group); Group.Group.Move(Group.Group.Count-1,Group.GetGroupIndex+1); end; Grid.Matrix.RebuildRows; @@ -222,6 +226,14 @@ begin and (MatRow.GetNextSkipChildren<>nil); end; +function TFrame1.AddTarget(StorageGroup: TGroupedMatrixGroup + ): TGroupedMatrixGroup; +begin + Result:=Grid.Matrix.AddGroup(StorageGroup,'Targets: '); + Result.Value:='*'; + Result.Writable:=true; +end; + procedure TFrame1.MoveRow(Direction: integer); var MatRow: TGroupedMatrixRow; @@ -264,7 +276,7 @@ begin TargetGroup:=TargetStorage[TargetStorage.Count-1] as TGroupedMatrixGroup; end else begin // add first target - TargetGroup:=Grid.Matrix.AddGroup(TargetStorage,'target: *'); + TargetGroup:=AddTarget(TargetStorage); end; end else begin // this is already the first target of the first storage @@ -300,7 +312,7 @@ begin TargetGroup:=TargetStorage[0] as TGroupedMatrixGroup; end else begin // add first target - TargetGroup:=Grid.Matrix.AddGroup(TargetStorage,'target: *'); + TargetGroup:=AddTarget(TargetStorage); end; end else begin // this is already the last target of the last storage diff --git a/ide/frames/modematrixctrl.pas b/ide/frames/modematrixctrl.pas index f26f2483c3..05bade7b4f 100644 --- a/ide/frames/modematrixctrl.pas +++ b/ide/frames/modematrixctrl.pas @@ -53,24 +53,26 @@ type FCaption: TCaption; FColor: TColor; FItems: TFPList; // list of TGroupedMatrixRow + FValue: string; + FWritable: boolean; function GetCount: integer; function GetItems(Index: integer): TGroupedMatrixRow; - procedure SetCaption(AValue: TCaption); - procedure SetColor(AValue: TColor); public procedure Assign(Source: TPersistent); override; constructor Create(aControl: TGroupedMatrix); override; destructor Destroy; override; procedure Clear; override; function Equals(Obj: TObject): boolean; override; - property Caption: TCaption read FCaption write SetCaption; + property Caption: TCaption read FCaption write FCaption; + property Value: string read FValue write FValue; + property Writable: boolean read FWritable write FWritable; property Count: integer read GetCount; property Items[Index: integer]: TGroupedMatrixRow read GetItems; default; function IndexOfRow(aRow: TGroupedMatrixRow): integer; procedure Move(CurIndex, NewIndex: integer); function GetNext: TGroupedMatrixRow; override; function GetLastLeaf: TGroupedMatrixRow; override; - property Color: TColor read FColor write SetColor; + property Color: TColor read FColor write FColor; function GetEffectiveColor: TColor; function AsString: string; override; end; @@ -160,7 +162,7 @@ type function GetTopLvlGroup(aCaption: TCaption): TGroupedMatrixGroup; function GetMaxLevel: integer; function AddGroup(ParentGroup: TGroupedMatrixGroup; - aCaption: TCaption): TGroupedMatrixGroup; + aCaption: TCaption; aValue: string = ''): TGroupedMatrixGroup; function AddValue(ParentGroup: TGroupedMatrixGroup; ModesAsText, aType, AValue: string): TGroupedMatrixValue; property Modes: TGroupedMatrixModes read FModes; @@ -523,10 +525,12 @@ begin end; function TGroupedMatrix.AddGroup(ParentGroup: TGroupedMatrixGroup; - aCaption: TCaption): TGroupedMatrixGroup; + aCaption: TCaption; aValue: string): TGroupedMatrixGroup; begin Result:=TGroupedMatrixGroup.Create(Self); Result.Caption:=aCaption; + Result.Value:=aValue; + Result.Writable:=aValue<>''; InternalAdd(ParentGroup,Result); end; @@ -646,18 +650,6 @@ begin Result:=TGroupedMatrixRow(FItems[Index]); end; -procedure TGroupedMatrixGroup.SetCaption(AValue: TCaption); -begin - if FCaption=AValue then Exit; - FCaption:=AValue; -end; - -procedure TGroupedMatrixGroup.SetColor(AValue: TColor); -begin - if FColor=AValue then Exit; - FColor:=AValue; -end; - procedure TGroupedMatrixGroup.Assign(Source: TPersistent); var SrcGroup: TGroupedMatrixGroup; @@ -672,6 +664,8 @@ begin SrcGroup:=TGroupedMatrixGroup(Source); FColor:=SrcGroup.FColor; FCaption:=SrcGroup.FCaption; + FValue:=SrcGroup.FValue; + FWritable:=SrcGroup.FWritable; Clear; for i:=0 to SrcGroup.Count-1 do begin SrcItem:=SrcGroup[i]; @@ -720,6 +714,8 @@ begin if SrcGroup.Count<>Count then exit; if SrcGroup.Color<>Color then exit; if SrcGroup.Caption<>Caption then exit; + if SrcGroup.Value<>Value then exit; + if SrcGroup.Writable<>Writable then exit; for i:=0 to Count-1 do if not SrcGroup[i].Equals(Items[i]) then exit; Result:=true; @@ -1077,7 +1073,7 @@ begin //Canvas.Brush.Color:=GroupRow.GetEffectiveColor; Canvas.GradientFill(Rect(x,aRect.Top-1,x+2*Indent,aRect.Bottom),GroupRow.GetEffectiveColor,Color,gdHorizontal); // draw group caption - Canvas.TextRect(aRect,constCellPadding+x,aRect.Top,GroupRow.Caption); + Canvas.TextRect(aRect,constCellPadding+x,aRect.Top,GroupRow.Caption+GroupRow.Value); // draw focus rect if aRow=Row then DrawFocusRect(0,aRow,Rect(x,aRect.Top,aRect.Right,aRect.Bottom)); @@ -1109,6 +1105,9 @@ begin if MatRow is TGroupedMatrixValue then begin if ACol<>ValueCol then exit; Result:=true; + end else if MatRow is TGroupedMatrixGroup then begin + if ACol<>ValueCol then exit; + Result:=TGroupedMatrixGroup(MatRow).Writable; end; end; @@ -1294,10 +1293,15 @@ begin end; function TGroupedMatrixControl.GetEditText(aCol, aRow: Longint): string; +var + MatRow: TGroupedMatrixRow; begin - if (aCol=ValueCol) and (aRow>0) and (Matrix[aRow-1] is TGroupedMatrixValue) - then begin - Result:=TGroupedMatrixValue(Matrix[aRow-1]).Value; + if (aCol=ValueCol) and (aRow>=FixedRows) then begin + MatRow:=Matrix[aRow-FixedRows]; + if MatRow is TGroupedMatrixValue then + Result:=TGroupedMatrixValue(MatRow).Value + else + Result:=TGroupedMatrixGroup(MatRow).Caption; exit; end; Result:=inherited GetEditText(aCol, aRow); @@ -1307,22 +1311,36 @@ procedure TGroupedMatrixControl.SetEditText(ACol, ARow: Longint; const Value: string); var ValueRow: TGroupedMatrixValue; + MatRow: TGroupedMatrixRow; + GroupRow: TGroupedMatrixGroup; begin - if (aCol=ValueCol) and (aRow>0) and (Matrix[aRow-1] is TGroupedMatrixValue) - then begin - ValueRow:=TGroupedMatrixValue(Matrix[aRow-1]); - if ValueRow.Value=Value then exit; - StoreUndo; - ValueRow.Value:=Value; + if (aCol=ValueCol) and (aRow>0) then begin + MatRow:=Matrix[aRow-FixedRows]; + if MatRow is TGroupedMatrixValue then begin + ValueRow:=TGroupedMatrixValue(MatRow); + if ValueRow.Value=Value then exit; + StoreUndo; + ValueRow.Value:=Value; + end else begin + GroupRow:=TGroupedMatrixGroup(MatRow); + if GroupRow.Value=Value then exit; + StoreUndo; + GroupRow.Value:=Value; + end; end; inherited SetEditText(ACol, ARow, Value); end; function TGroupedMatrixControl.GetCells(ACol, ARow: Integer): string; +var + MatRow: TGroupedMatrixRow; begin - if (aCol=ValueCol) and (aRow>0) and (Matrix[aRow-1] is TGroupedMatrixValue) - then begin - Result:=TGroupedMatrixValue(Matrix[aRow-1]).Value; + if (aCol=ValueCol) and (aRow>0) then begin + MatRow:=Matrix[ARow-FixedRows]; + if MatRow is TGroupedMatrixValue then + Result:=TGroupedMatrixValue(MatRow).Value + else + Result:=TGroupedMatrixGroup(MatRow).Value; exit; end; Result:=inherited GetCells(ACol, ARow);