44#include < QLayout>
55#include < qfontdatabase.h>
66
7+ #include " TicInterface.h"
8+
9+ // Forward declaration of TreeItem_FindItem from TreeItem.cpp
10+ TIC_CALL SharedTreeItem TreeItem_FindItem (const TreeItem* searchLoc, TokenID id);
11+
712FindTextWindow::FindTextWindow (QWidget* parent)
813 : QWidget(parent)
914{
@@ -16,6 +21,7 @@ FindTextWindow::FindTextWindow(QWidget* parent)
1621 match_case = new QCheckBox (" Match case" , this );
1722 previous = new QPushButton (" Previous" , this );
1823 next = new QPushButton (" Next" , this );
24+
1925 QWidget* spacer = new QWidget (this );
2026 spacer->setSizePolicy (QSizePolicy::Minimum, QSizePolicy::Expanding);
2127 spacer->setFocusPolicy (Qt::FocusPolicy::NoFocus);
@@ -37,6 +43,68 @@ FindTextWindow::FindTextWindow(QWidget* parent)
3743 setLayout (layout);
3844}
3945
46+ void FindTextWindow::findInTreeView ()
47+ {
48+ auto search_text = find_text->text ();
49+ if (search_text.isEmpty ())
50+ {
51+ result_info->setText (" Please enter search text" );
52+ return ;
53+ }
54+
55+ auto main_window = MainWindow::TheOne ();
56+ if (!main_window)
57+ {
58+ result_info->setText (" Main window not available" );
59+ return ;
60+ }
61+
62+ auto current_item = main_window->getCurrentTreeItem ();
63+ if (!current_item)
64+ {
65+ result_info->setText (" No current item" );
66+ return ;
67+ }
68+
69+ try {
70+ TokenID search_token = GetTokenID_mt (search_text.toUtf8 ().constData ());
71+ auto found_item = TreeItem_FindItem (current_item, search_token);
72+
73+ if (found_item)
74+ {
75+ main_window->setCurrentTreeItem (const_cast <TreeItem*>(found_item.get ()));
76+ result_info->setText (QString (" Found: %1" ).arg (found_item->GetFullName ().c_str ()));
77+ }
78+ else
79+ {
80+ result_info->setText (" Item not found" );
81+ }
82+ }
83+ catch (...)
84+ {
85+ result_info->setText (" Error during search" );
86+ }
87+ }
88+
89+ void FindTextWindow::setSearchMode (bool treeViewMode)
90+ {
91+ m_treeViewMode = treeViewMode;
92+ if (treeViewMode)
93+ {
94+ match_whole_word->setChecked (false );
95+ match_case->setChecked (false );
96+ match_whole_word->setEnabled (false );
97+ match_case->setEnabled (false );
98+ previous->setEnabled (false );
99+ }
100+ else
101+ {
102+ match_whole_word->setEnabled (true );
103+ match_case->setEnabled (true );
104+ previous->setEnabled (true );
105+ }
106+ }
107+
40108void FindTextWindow::findInQTextBrowser (bool backwards)
41109{
42110 auto * updatable_text_browser = dynamic_cast <QTextBrowser*>(parent ());
@@ -56,16 +124,23 @@ void FindTextWindow::findInText(bool backwards)
56124{
57125 if (find_text->text ().isEmpty ())
58126 return ;
59-
60- auto * current_parent = parent ();
61- auto * updatable_text_browser = dynamic_cast <QTextBrowser*>(current_parent);
62- MG_CHECK (updatable_text_browser);
63- findInQTextBrowser (backwards);
127+
128+ if (m_treeViewMode)
129+ {
130+ findInTreeView ();
131+ }
132+ else
133+ {
134+ auto * current_parent = parent ();
135+ auto * updatable_text_browser = dynamic_cast <QTextBrowser*>(current_parent);
136+ MG_CHECK (updatable_text_browser);
137+ findInQTextBrowser (backwards);
138+ }
64139}
65140
66141void FindTextWindow::nextClicked (bool checked)
67142{
68- findInText ();
143+ findInText (false );
69144}
70145
71146void FindTextWindow::previousClicked (bool checked)
0 commit comments