fpvviewer: Adds a nice search next option for searching in the DXF tokens tree

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2601 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2012-12-20 12:02:51 +00:00
parent 95ddacdc6a
commit 24535a5161
3 changed files with 96 additions and 18 deletions

View File

@ -46,9 +46,9 @@ object frmFPVViewer: TfrmFPVViewer
end end
object Label1: TLabel object Label1: TLabel
Left = 8 Left = 8
Height = 16 Height = 15
Top = 97 Top = 97
Width = 47 Width = 46
Caption = 'Scale by:' Caption = 'Scale by:'
ParentColor = False ParentColor = False
end end
@ -77,15 +77,32 @@ object frmFPVViewer: TfrmFPVViewer
object pageViewer: TPage object pageViewer: TPage
end end
object pageTreeData: TPage object pageTreeData: TPage
object DXFTreeView: TTreeView object TokensTreeView: TTreeView
Left = 0 Left = 0
Height = 410 Height = 378
Top = 0 Top = 32
Width = 485 Width = 485
Align = alClient Align = alBottom
DefaultItemHeight = 18 DefaultItemHeight = 18
TabOrder = 0 TabOrder = 0
end end
object editSearchInTokens: TEdit
Left = 4
Height = 23
Top = 0
Width = 156
TabOrder = 1
Text = 'editSearchInTokens'
end
object btnSearchInTokens: TButton
Left = 168
Height = 25
Top = 0
Width = 155
Caption = 'Search in Token Tree'
OnClick = btnSearchInTokensClick
TabOrder = 2
end
end end
end end
object buttonRenderingTest: TButton object buttonRenderingTest: TButton
@ -117,9 +134,9 @@ object frmFPVViewer: TfrmFPVViewer
end end
object Label2: TLabel object Label2: TLabel
Left = 8 Left = 8
Height = 16 Height = 15
Top = 72 Top = 72
Width = 74 Width = 73
Caption = 'Y adjustment:' Caption = 'Y adjustment:'
ParentColor = False ParentColor = False
end end
@ -145,9 +162,9 @@ object frmFPVViewer: TfrmFPVViewer
end end
object Label3: TLabel object Label3: TLabel
Left = 160 Left = 160
Height = 16 Height = 15
Top = 72 Top = 72
Width = 74 Width = 73
Caption = 'X adjustment:' Caption = 'X adjustment:'
ParentColor = False ParentColor = False
end end

View File

@ -6,7 +6,7 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, EditBtn, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, EditBtn,
StdCtrls, Spin, ExtCtrls, ComCtrls, Grids, StdCtrls, Spin, ExtCtrls, ComCtrls, Grids, Math,
fpvv_drawer, fpimage, fpcanvas, coreconrec; fpvv_drawer, fpimage, fpcanvas, coreconrec;
type type
@ -19,7 +19,9 @@ type
Button1: TButton; Button1: TButton;
btnContourLines: TButton; btnContourLines: TButton;
Button2: TButton; Button2: TButton;
btnSearchInTokens: TButton;
buttonRenderingTest: TButton; buttonRenderingTest: TButton;
editSearchInTokens: TEdit;
editFileName: TFileNameEdit; editFileName: TFileNameEdit;
Label2: TLabel; Label2: TLabel;
Label3: TLabel; Label3: TLabel;
@ -30,8 +32,9 @@ type
spinAdjustX: TSpinEdit; spinAdjustX: TSpinEdit;
spinScale: TFloatSpinEdit; spinScale: TFloatSpinEdit;
Label1: TLabel; Label1: TLabel;
DXFTreeView: TTreeView; TokensTreeView: TTreeView;
procedure btnContourLinesClick(Sender: TObject); procedure btnContourLinesClick(Sender: TObject);
procedure btnSearchInTokensClick(Sender: TObject);
procedure btnVisualizeClick(Sender: TObject); procedure btnVisualizeClick(Sender: TObject);
procedure btnViewDXFTokensClick(Sender: TObject); procedure btnViewDXFTokensClick(Sender: TObject);
procedure Button1Click(Sender: TObject); procedure Button1Click(Sender: TObject);
@ -193,6 +196,46 @@ begin
Drawer.Invalidate; Drawer.Invalidate;
end; end;
procedure TfrmFPVViewer.btnSearchInTokensClick(Sender: TObject);
var
lTokenWithText, lCurNode: TTreeNode;
// minimal positions, based on the currently selected item to do "search next"
lSearchStart: Word = 0;
i, j: Integer;
lStr, lText: TCaption;
lNodesCount: Integer;
begin
lText := editSearchInTokens.Text;
// if something is selected, set this position as a minimum
if TokensTreeView.Selected <> nil then
lSearchStart := TokensTreeView.Selected.AbsoluteIndex;
// Now do the actual search
lTokenWithText := nil;
lNodesCount := TokensTreeView.Items.Count-1;
for i := 0 to lNodesCount do
begin
lCurNode := TokensTreeView.Items.Item[i];
if lCurNode = nil then Continue;
// Check the minimum level first
if lSearchStart >= lCurNode.AbsoluteIndex then Continue;
// Check the text
lStr := lCurNode.Text;
if System.Pos(lText, lStr) > 0 then
begin
lTokenWithText := lCurNode;
Break;
end;
end;
if lTokenWithText <> nil then
begin
TokensTreeView.Selected := lTokenWithText;
end;
end;
procedure TfrmFPVViewer.btnViewDXFTokensClick(Sender: TObject); procedure TfrmFPVViewer.btnViewDXFTokensClick(Sender: TObject);
var var
Reader: TvDXFVectorialReader; Reader: TvDXFVectorialReader;
@ -207,7 +250,7 @@ begin
Vec := TvVectorialDocument.Create; Vec := TvVectorialDocument.Create;
try try
Reader.ReadFromFile(editFileName.FileName, Vec); Reader.ReadFromFile(editFileName.FileName, Vec);
ConvertDXFTokensToTreeView(Reader.Tokenizer.Tokens, DXFTreeView); ConvertDXFTokensToTreeView(Reader.Tokenizer.Tokens, TokensTreeView);
finally finally
Reader.Free; Reader.Free;
Vec.Free; Vec.Free;
@ -243,7 +286,7 @@ begin
// Generate the positioning info // Generate the positioning info
TvFormula(Vec.GetPage(0).GetEntity(0)).PositionElements(Canvas, 0, 0); TvFormula(Vec.GetPage(0).GetEntity(0)).PositionElements(Canvas, 0, 0);
DXFTreeView.Items.Clear; TokensTreeView.Items.Clear;
Vec.GenerateDebugTree(@FPVDebugAddItemProc); Vec.GenerateDebugTree(@FPVDebugAddItemProc);
finally finally
Vec.Free; Vec.Free;
@ -326,7 +369,7 @@ function TfrmFPVViewer.FPVDebugAddItemProc(AStr: string; AParent: Pointer): Poin
var var
lTreeItem: TTreeNode; lTreeItem: TTreeNode;
begin begin
lTreeItem := DXFTreeView.Items.AddChild(TTreeNode(AParent), AStr); lTreeItem := TokensTreeView.Items.AddChild(TTreeNode(AParent), AStr);
Result := lTreeItem; Result := lTreeItem;
end; end;

View File

@ -14,9 +14,27 @@
<VersionInfo> <VersionInfo>
<StringTable ProductVersion=""/> <StringTable ProductVersion=""/>
</VersionInfo> </VersionInfo>
<BuildModes Count="2"> <BuildModes Count="3">
<Item1 Name="default" Default="True"/> <Item1 Name="default" Default="True"/>
<Item2 Name="qt"> <Item2 Name="win32-console">
<CompilerOptions>
<Version Value="11"/>
<Target>
<Filename Value="fpvviewer"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Other>
<CompilerMessages>
<UseMsgFile Value="True"/>
</CompilerMessages>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
</Item2>
<Item3 Name="qt">
<MacroValues Count="1"> <MacroValues Count="1">
<Macro1 Name="LCLWidgetType" Value="qt"/> <Macro1 Name="LCLWidgetType" Value="qt"/>
</MacroValues> </MacroValues>
@ -45,7 +63,7 @@
</Other> </Other>
<LCLWidgetType Value="qt"/> <LCLWidgetType Value="qt"/>
</CompilerOptions> </CompilerOptions>
</Item2> </Item3>
</BuildModes> </BuildModes>
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>