Skip to content

Commit

Permalink
Extended node search capability to search all notes
Browse files Browse the repository at this point in the history
Now, Ctrl+F and F3 (or actual hotkeys) will call to 'Find...'/'Find Node...' or 'Find Next'/'Find Next Node' depending on the tree panel having or not the focus.
Also, the command 'Find Next Node' will search all the notes and/or all the hidden nodes depending of the options selected in the find tab of the Resource panel ("Search all notes" and "Search hidden nodes")

Closes issues #286 and relates to a minor enhancement indicated in #461 and #156

Signed-off-by: Daniel Prado Velasco <dpradov@users.noreply.github.com>
  • Loading branch information
dpradov committed Dec 1, 2015
1 parent ae79481 commit 4865483
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 22 deletions.
1 change: 0 additions & 1 deletion kn_Main.dfm
Expand Up @@ -3274,7 +3274,6 @@ object Form_Main: TForm_Main
object MMFindNodeNext: TTntMenuItem
Caption = 'Find N&ext Node'
Hint = 'Repeat last Find node command'
ShortCut = 8306
OnClick = MMFindNodeNextClick
end
end
Expand Down
109 changes: 88 additions & 21 deletions kn_Main.pas
Expand Up @@ -3859,15 +3859,23 @@ procedure TForm_Main.MMFormatPasteParaClick(Sender: TObject);

procedure TForm_Main.MMFindClick(Sender: TObject);
begin
RunFinder;
if assigned(ActiveNote) and ( ActiveNote.FocusMemory = focTree ) then
MMFindNodeClick(nil)
else
RunFinder;
end;

procedure TForm_Main.MMFindNextClick(Sender: TObject);
begin
if ( FindOptions.Pattern = '' ) then
RunFinder
else
RunFindNext;
if assigned(ActiveNote) and ( ActiveNote.FocusMemory = focTree ) then
MMFindNodeNextClick(nil)

else begin
if ( FindOptions.Pattern = '' ) then
RunFinder
else
RunFindNext;
end
end; // MMFindagainClick

procedure TForm_Main.MMFindReplaceClick(Sender: TObject);
Expand Down Expand Up @@ -5026,7 +5034,44 @@ procedure TForm_Main.MMFindNodeNextClick(Sender: TObject);
procedure TForm_Main.FindTreeNode;
var
myNode : TTreeNTNode;
found : boolean;
found : boolean;
myNote : TTabNote;
selectedNode : TTreeNTNode;
FindAllTabs: boolean;
FindHiddenNodes: boolean;

procedure GetFirstNode;
begin
myNode := TTreeNote(myNote).TV.Items.GetFirstNode;
if assigned( myNode ) and myNode.Hidden and (not FindHiddenNodes) then
myNode := myNode.GetNextNotHidden;
end;

procedure GetNextNode();
begin
if FindHiddenNodes then
myNode := myNode.GetNext
else
myNode := myNode.GetNextNotHidden;
end;


procedure GetNextNote();
var
tabidx : integer;
begin
if FindAllTabs and (Form_Main.Pages.PageCount > 1) then begin
tabidx := myNote.TabSheet.PageIndex;
if tabidx < pred(Form_Main.Pages.PageCount) then
inc(tabidx)
else
tabidx := 0;

myNote := TTabNote(Form_Main.Pages.Pages[tabidx].PrimaryObject);
if myNote.Kind = ntTree then
GetFirstNode;
end;
end;
begin

myNode := GetCurrentTreeNode;
Expand All @@ -5048,21 +5093,43 @@ procedure TForm_Main.FindTreeNode;
if ( SearchNode_Text = '' ) then exit;

found := false;
myNode := myNode.GetNext;
while assigned( myNode ) do
begin
if ( Pos( SearchNode_Text, wideLowercase( myNode.Text )) > 0 ) then // {N}
begin
found := true;
myNode.TreeView.Selected := myNode;
break;
end;
myNode := myNode.GetNext;
end;

if ( not found ) then
statusbar.panels[PANEL_HINT].Text := STR_68;

selectedNode:= myNode;
GetNextNode;
myNote := ActiveNote;

FindAllTabs := CB_ResFind_AllNotes.Checked;
FindHiddenNodes:= CB_ResFind_HiddenNodes.Checked;

repeat
while assigned( myNode ) do
begin
if ( Pos( SearchNode_Text, wideLowercase( myNode.Text )) > 0 ) then
begin
found := true;
if (myNote <> ActiveNote) then begin
Form_Main.Pages.ActivePage := myNote.TabSheet;
Form_Main.PagesChange(Pages);
TTreeNote( ActiveNote ).TV.SetFocus;
ActiveNote.FocusMemory := focTree;
end;
myNode.MakeVisible; // Could be hidden
myNode.TreeView.Selected := myNode;
break;
end;
GetNextNode;
end;

if not found then
repeat
GetNextNote();
if (myNote.Kind = ntTree) then
GetFirstNode();
until (myNote.Kind = ntTree) or (myNode = selectedNode);

until found or (myNode = selectedNode);

if ( not found ) or (myNode = selectedNode) then
statusbar.panels[PANEL_HINT].Text := STR_68;

end; // FindTreeNode

Expand Down

0 comments on commit 4865483

Please sign in to comment.