162
163
LOGIT( _T("ThreadSearch Plugin Logging Started"));
167
ThreadSearchViewManagerBase::eManagerTypes mgrType;
168
wxArrayString searchPatterns;
170
// Loads configuration from default.conf
171
LoadConfig(showPanel, sashPosition, mgrType, searchPatterns);
173
// Adds window to the manager
174
m_pThreadSearchView = new ThreadSearchView(*this);
175
m_pThreadSearchView->SetSearchHistory(searchPatterns);
178
m_pViewManager = ThreadSearchViewManagerBase::BuildThreadSearchViewManagerBase(m_pThreadSearchView, true, mgrType);
180
// Ensure view is shown or hidden
181
m_pViewManager->ShowView(showPanel);
183
// Sets splitter sash in the middle of the width of the window
184
// and creates columns as it is not managed in ctor on Linux
186
m_pThreadSearchView->GetSize(&x, &y);
187
m_pThreadSearchView->SetSashPosition(x/2);
188
m_pThreadSearchView->Update();
168
ThreadSearchViewManagerBase::eManagerTypes mgrType;
169
wxArrayString searchPatterns;
171
// Loads configuration from default.conf
172
LoadConfig(showPanel, sashPosition, mgrType, searchPatterns);
174
// Adds window to the manager
175
m_pThreadSearchView = new ThreadSearchView(*this);
176
m_pThreadSearchView->SetSearchHistory(searchPatterns);
179
m_pViewManager = ThreadSearchViewManagerBase::BuildThreadSearchViewManagerBase(m_pThreadSearchView, true, mgrType);
181
// Ensure view is shown or hidden
182
m_pViewManager->ShowView(showPanel);
184
// Sets splitter sash in the middle of the width of the window
185
// and creates columns as it is not managed in ctor on Linux
187
m_pThreadSearchView->GetSize(&x, &y);
188
m_pThreadSearchView->SetSashPosition(x/2);
189
m_pThreadSearchView->Update();
190
191
// Set the splitter posn from the config
191
192
if (sashPosition != 0)
192
193
m_pThreadSearchView->SetSashPosition(sashPosition);
194
// Shows/Hides search widgets on the Messages notebook ThreadSearch panel
195
m_pThreadSearchView->ShowSearchControls(m_ShowSearchControls);
195
// Shows/Hides search widgets on the Messages notebook ThreadSearch panel
196
m_pThreadSearchView->ShowSearchControls(m_ShowSearchControls);
197
// true if it enters in OnRelease for the first time
198
m_OnReleased = false;
198
// true if it enters in OnRelease for the first time
199
m_OnReleased = false;
201
202
void ThreadSearch::OnRelease(bool appShutDown)
203
// do de-initialization for your plugin
204
// if appShutDown is false, the plugin is unloaded because Code::Blocks is being shut down,
205
// which means you must not use any of the SDK Managers
206
// NOTE: after this function, the inherited member variable
207
// m_IsAttached will be FALSE...
204
// do de-initialization for your plugin
205
// if appShutDown is false, the plugin is unloaded because Code::Blocks is being shut down,
206
// which means you must not use any of the SDK Managers
207
// NOTE: after this function, the inherited member variable
208
// m_IsAttached will be FALSE...
209
// --------------------------------------------------------------
210
// Carefull! This routine can be entered consecutive times
211
// --------------------------------------------------------------
212
if ( m_OnReleased ) return;
210
// --------------------------------------------------------------
211
// Carefull! This routine can be entered consecutive times
212
// --------------------------------------------------------------
213
if ( m_OnReleased ) return;
213
214
m_OnReleased = true;
215
// Removes Thread search menu item from the View menu
220
if ( m_pThreadSearchView != NULL )
222
m_pViewManager->RemoveViewFromManager();
223
m_pThreadSearchView->Destroy();
226
delete m_pViewManager;
227
m_pViewManager = NULL;
216
// Removes Thread search menu item from the View menu
221
if ( m_pThreadSearchView != 0 )
223
m_pViewManager->RemoveViewFromManager();
224
m_pThreadSearchView->Destroy();
227
delete m_pViewManager;
231
232
void ThreadSearch::OnThreadSearchViewDestruction()
233
// Method is called from view destructor.
234
// Destruction is either made by plugin or
235
// Messages Notebook.
237
// We show code preview to save a consistent
238
// value of splitter sash position.
239
m_pThreadSearchView->ApplySplitterSettings(m_ShowCodePreview, m_SplitterMode);
241
// Saves configuration to default.conf
242
SaveConfig(m_pViewManager->IsViewShown(),
243
m_pThreadSearchView->GetSashPosition(),
244
m_pViewManager->GetManagerType(),
245
m_pThreadSearchView->GetSearchHistory());
247
// Reset of the pointer as view is being deleted
248
m_pThreadSearchView = NULL;
234
// Method is called from view destructor.
235
// Destruction is either made by plugin or
236
// Messages Notebook.
238
// We show code preview to save a consistent
239
// value of splitter sash position.
240
m_pThreadSearchView->ApplySplitterSettings(m_ShowCodePreview, m_SplitterMode);
242
// Saves configuration to default.conf
243
SaveConfig(m_pViewManager->IsViewShown(),
244
m_pThreadSearchView->GetSashPosition(),
245
m_pViewManager->GetManagerType(),
246
m_pThreadSearchView->GetSearchHistory());
248
// Reset of the pointer as view is being deleted
249
m_pThreadSearchView = NULL;
252
253
int ThreadSearch::Configure()
257
// Creates and displays the configuration dialog for the plugin
258
cbConfigurationDialog dlg(Manager::Get()->GetAppWindow(), wxID_ANY, wxT("Thread search"));
259
cbConfigurationPanel* panel = GetConfigurationPanel(&dlg);
262
dlg.AttachConfigurationPanel(panel);
264
return dlg.ShowModal() == wxID_OK ? 0 : -1;
258
// Creates and displays the configuration dialog for the plugin
259
cbConfigurationDialog dlg(Manager::Get()->GetAppWindow(), wxID_ANY, wxT("Thread search"));
260
cbConfigurationPanel* panel = GetConfigurationPanel(&dlg);
263
dlg.AttachConfigurationPanel(panel);
265
return dlg.ShowModal() == wxID_OK ? 0 : -1;
269
270
void ThreadSearch::BuildMenu(wxMenuBar* menuBar)
271
//The application is offering its menubar for your plugin,
272
//to add any menu items you want...
273
//Append any items you need in the menu...
274
//NOTE: Be careful in here... The application's menubar is at your disposal.
276
int idx = menuBar->FindMenu(wxT("View"));
277
if (idx != wxNOT_FOUND)
279
wxMenu* menu = menuBar->GetMenu(idx);
280
wxMenuItemList& items = menu->GetMenuItems();
282
// find the first separator and insert before it
283
for (i = 0; i < items.GetCount(); ++i)
285
if (items[i]->IsSeparator())
287
menu->InsertCheckItem(i, idMenuViewThreadSearch, wxT("Thread search"),
288
wxT("Toggle displaying the 'Thread search' panel"));
293
if ( i == items.GetCount() )
295
// not found, just append
296
menu->AppendCheckItem(idMenuViewThreadSearch, wxT("Thread search"),
297
wxT("Toggle displaying the 'Thread search' panel"));
301
idx = menuBar->FindMenu(wxT("Search"));
302
if (idx != wxNOT_FOUND)
304
wxMenu* menu = menuBar->GetMenu(idx);
305
wxMenuItemList& items = menu->GetMenuItems();
307
// find the first separator and insert separator + entry before it
308
for (i = 0; i < items.GetCount(); ++i)
310
if (items[i]->IsSeparator())
312
menu->Insert(i, idMenuSearchThreadSearch, wxT("Thread search"),
313
wxT("Perform a Threaded search with the current word"));
314
menu->InsertSeparator(i);
319
if ( i == items.GetCount() )
321
// not found, just append
322
menu->Append(idMenuSearchThreadSearch, wxT("Thread search"),
323
wxT("Perform a Threaded search with the current word"));
324
menu->AppendSeparator();
272
//The application is offering its menubar for your plugin,
273
//to add any menu items you want...
274
//Append any items you need in the menu...
275
//NOTE: Be careful in here... The application's menubar is at your disposal.
277
int idx = menuBar->FindMenu(_("&View"));
278
if (idx != wxNOT_FOUND)
280
wxMenu* menu = menuBar->GetMenu(idx);
281
wxMenuItemList& items = menu->GetMenuItems();
283
// find the first separator and insert before it
284
for (i = 0; i < items.GetCount(); ++i)
286
if (items[i]->IsSeparator())
288
menu->InsertCheckItem(i, idMenuViewThreadSearch, _("Thread search"),
289
_("Toggle displaying the 'Thread search' panel"));
294
if ( i == items.GetCount() )
296
// not found, just append
297
menu->AppendCheckItem(idMenuViewThreadSearch, _("Thread search"),
298
_("Toggle displaying the 'Thread search' panel"));
302
idx = menuBar->FindMenu(_("Sea&rch"));
303
if (idx != wxNOT_FOUND)
305
wxMenu* menu = menuBar->GetMenu(idx);
306
wxMenuItemList& items = menu->GetMenuItems();
308
// find the first separator and insert separator + entry before it
309
for (i = 0; i < items.GetCount(); ++i)
311
if (items[i]->IsSeparator())
313
menu->Insert(i, idMenuSearchThreadSearch, _("Thread search"),
314
_("Perform a Threaded search with the current word"));
315
menu->InsertSeparator(i);
320
if ( i == items.GetCount() )
322
// not found, just append
323
menu->Append(idMenuSearchThreadSearch, _("Thread search"),
324
_("Perform a Threaded search with the current word"));
325
menu->AppendSeparator();
329
330
void ThreadSearch::RemoveMenuItems()
331
// Removes 'Thread search' item from View and Search menu
332
wxMenuBar* menuBar = Manager::Get()->GetAppFrame()->GetMenuBar();
333
int idx = menuBar->FindMenu(wxT("View"));
334
if (idx != wxNOT_FOUND)
336
wxMenu* viewMenu = menuBar->GetMenu(idx);
337
if ( viewMenu != NULL )
339
viewMenu->Remove(idMenuViewThreadSearch);
332
// Removes 'Thread search' item from View and Search menu
333
wxMenuBar* menuBar = Manager::Get()->GetAppFrame()->GetMenuBar();
334
int idx = menuBar->FindMenu(_("&View"));
335
if (idx != wxNOT_FOUND)
337
wxMenu* viewMenu = menuBar->GetMenu(idx);
340
viewMenu->Remove(idMenuViewThreadSearch);
343
idx = menuBar->FindMenu(wxT("Search"));
344
if (idx != wxNOT_FOUND)
346
wxMenu* searchMenu = menuBar->GetMenu(idx);
347
if ( searchMenu != NULL )
349
searchMenu->Remove(idMenuSearchThreadSearch);
344
idx = menuBar->FindMenu(_("Sea&rch"));
345
if (idx != wxNOT_FOUND)
347
wxMenu* searchMenu = menuBar->GetMenu(idx);
348
if ( searchMenu != 0 )
350
searchMenu->Remove(idMenuSearchThreadSearch);
355
356
void ThreadSearch::OnMnuViewThreadSearch(wxCommandEvent& event)
360
m_pViewManager->ShowView(event.IsChecked());
361
m_pViewManager->ShowView(event.IsChecked());
364
365
void ThreadSearch::OnMnuSearchThreadSearch(wxCommandEvent& event)
369
// Need to get the cursor word first and ensure it is consistent.
370
if ( (GetCursorWord(m_SearchedWord) == true) && (m_SearchedWord.IsEmpty() == false) )
372
// m_SearchedWord is Ok => Search
373
RunThreadSearch(m_SearchedWord, true);
377
// Word is KO, just show the panel
378
m_pViewManager->ShowView(true);
370
// Need to get the cursor word first and ensure it is consistent.
371
if ( (GetCursorWord(m_SearchedWord) == true) && (m_SearchedWord.IsEmpty() == false) )
373
// m_SearchedWord is Ok => Search
374
RunThreadSearch(m_SearchedWord, true);
378
// Word is KO, just show the panel
379
m_pViewManager->ShowView(true);
383
384
void ThreadSearch::OnCtxThreadSearch(wxCommandEvent& event)
388
// m_SearchedWord was set in BuildModuleMenu
389
RunThreadSearch(m_SearchedWord, true);
389
// m_SearchedWord was set in BuildModuleMenu
390
RunThreadSearch(m_SearchedWord, true);
393
394
void ThreadSearch::OnMnuViewThreadSearchUpdateUI(wxUpdateUIEvent& event)
398
Manager::Get()->GetAppFrame()->GetMenuBar()->Check(idMenuViewThreadSearch, m_pViewManager->IsViewShown());
399
Manager::Get()->GetAppFrame()->GetMenuBar()->Check(idMenuViewThreadSearch, m_pViewManager->IsViewShown());
402
403
void ThreadSearch::OnMnuSearchThreadSearchUpdateUI(wxUpdateUIEvent& event)
407
event.Enable(m_pThreadSearchView->IsSearchRunning() == false);
408
event.Enable(m_pThreadSearchView->IsSearchRunning() == false);
411
412
void ThreadSearch::BuildModuleMenu(const ModuleType type, wxMenu* pMenu, const FileTreeData* data)
413
wxMenuItem* pMenuItem = NULL;
414
if (!pMenu || !IsAttached())
417
// Triggs editor events if 'Find occurrences' is integrated in context menu
418
if ( (type == mtEditorManager) && (m_CtxMenuIntegration == true) )
421
if ( GetCursorWord(m_SearchedWord) == true )
423
wxString sText = wxT("Find occurrences of: '") + m_SearchedWord + wxT("'");
425
// Tries to find the 'Find implementation' item to adds the
426
// 'Find occurrences' item just after or appends it at the end
427
int dIndex = GetInsertionMenuIndex(pMenu);
430
pMenuItem = pMenu->Insert(dIndex, idMenuCtxThreadSearch, sText);
434
pMenu->AppendSeparator();
435
pMenuItem = pMenu->Append(idMenuCtxThreadSearch, sText);
438
// Disables item if a threaded search is running
439
pMenuItem->Enable(!m_pThreadSearchView->IsSearchRunning());
414
wxMenuItem* pMenuItem = NULL;
415
if (!pMenu || !IsAttached())
418
// Triggs editor events if 'Find occurrences' is integrated in context menu
419
if ( (type == mtEditorManager) && (m_CtxMenuIntegration == true) )
422
if ( GetCursorWord(m_SearchedWord) == true )
424
wxString sText = _("Find occurrences of: '") + m_SearchedWord + wxT("'");
426
// Tries to find the 'Find implementation' item to adds the
427
// 'Find occurrences' item just after or appends it at the end
428
int dIndex = GetInsertionMenuIndex(pMenu);
431
pMenuItem = pMenu->Insert(dIndex, idMenuCtxThreadSearch, sText);
435
pMenu->AppendSeparator();
436
pMenuItem = pMenu->Append(idMenuCtxThreadSearch, sText);
439
// Disables item if a threaded search is running
440
pMenuItem->Enable(!m_pThreadSearchView->IsSearchRunning());
445
446
int ThreadSearch::GetInsertionMenuIndex(const wxMenu* const pCtxMenu)
450
// Looks after the "Find implementation of:" menu item
451
const wxMenuItemList ItemsList = pCtxMenu->GetMenuItems();
452
for (int i = 0; i < (int)ItemsList.GetCount(); ++i)
454
if (ItemsList[i]->GetLabel().StartsWith(_T("Find implementation of:")) )
451
// Looks after the "Find implementation of:" menu item
452
const wxMenuItemList ItemsList = pCtxMenu->GetMenuItems();
453
for (int i = 0; i < (int)ItemsList.GetCount(); ++i)
455
#if wxCHECK_VERSION(2, 9, 0)
456
if (ItemsList[i]->GetItemLabelText().StartsWith(_("Find implementation of:")) )
458
if (ItemsList[i]->GetLabel().StartsWith(_("Find implementation of:")) )
463
468
cbConfigurationPanel* ThreadSearch::GetConfigurationPanel(wxWindow* parent)
468
return new ThreadSearchConfPanel(*this, parent);
473
return new ThreadSearchConfPanel(*this, parent);
472
477
void ThreadSearch::Notify()
477
m_pThreadSearchView->Update();
478
SaveConfig(m_pViewManager->IsViewShown(),
479
m_pThreadSearchView->GetSashPosition(),
480
m_pViewManager->GetManagerType(),
481
m_pThreadSearchView->GetSearchHistory());
482
m_pThreadSearchView->Update();
483
SaveConfig(m_pViewManager->IsViewShown(),
484
m_pThreadSearchView->GetSashPosition(),
485
m_pViewManager->GetManagerType(),
486
m_pThreadSearchView->GetSearchHistory());
485
490
void ThreadSearch::LoadConfig(bool& showPanel, int& sashPosition,
486
ThreadSearchViewManagerBase::eManagerTypes& mgrType,
487
wxArrayString& searchPatterns)
491
ThreadSearchViewManagerBase::eManagerTypes& mgrType,
492
wxArrayString& searchPatterns)
492
497
ConfigManager* pCfg = Manager::Get()->GetConfigManager(_T("ThreadSearch"));
494
m_FindData.SetMatchWord (pCfg->ReadBool(wxT("/MatchWord"), true));
495
m_FindData.SetStartWord (pCfg->ReadBool(wxT("/StartWord"), false));
496
m_FindData.SetMatchCase (pCfg->ReadBool(wxT("/MatchCase"), true));
497
m_FindData.SetRegEx (pCfg->ReadBool(wxT("/RegEx"), false));
498
m_FindData.SetHiddenSearch (pCfg->ReadBool(wxT("/HiddenSearch"), true));
499
m_FindData.SetRecursiveSearch (pCfg->ReadBool(wxT("/RecursiveSearch"), true));
501
m_CtxMenuIntegration = pCfg->ReadBool(wxT("/CtxMenuIntegration"), true);
502
m_UseDefValsForThreadSearch = pCfg->ReadBool(wxT("/UseDefaultValues"), true);
503
m_ShowSearchControls = pCfg->ReadBool(wxT("/ShowSearchControls"), true);
504
m_ShowDirControls = pCfg->ReadBool(wxT("/ShowDirControls"), false);
505
m_ShowCodePreview = pCfg->ReadBool(wxT("/ShowCodePreview"), true);
506
m_DisplayLogHeaders = pCfg->ReadBool(wxT("/DisplayLogHeaders"), true);
507
m_DrawLogLines = pCfg->ReadBool(wxT("/DrawLogLines"), false);
509
showPanel = pCfg->ReadBool(wxT("/ShowPanel"), true);
511
m_FindData.SetScope (pCfg->ReadInt (wxT("/Scope"), ScopeProjectFiles));
513
m_FindData.SetSearchPath (pCfg->Read (wxT("/DirPath"), wxEmptyString));
514
m_FindData.SetSearchMask (pCfg->Read (wxT("/Mask"), wxT("*.cpp;*.c;*.h")));
516
sashPosition = pCfg->ReadInt(wxT("/SplitterPosn"), 0);
517
int splitterMode = pCfg->ReadInt(wxT("/SplitterMode"), wxSPLIT_VERTICAL);
499
m_FindData.SetMatchWord (pCfg->ReadBool(wxT("/MatchWord"), true));
500
m_FindData.SetStartWord (pCfg->ReadBool(wxT("/StartWord"), false));
501
m_FindData.SetMatchCase (pCfg->ReadBool(wxT("/MatchCase"), true));
502
m_FindData.SetRegEx (pCfg->ReadBool(wxT("/RegEx"), false));
503
m_FindData.SetHiddenSearch (pCfg->ReadBool(wxT("/HiddenSearch"), true));
504
m_FindData.SetRecursiveSearch (pCfg->ReadBool(wxT("/RecursiveSearch"), true));
506
m_CtxMenuIntegration = pCfg->ReadBool(wxT("/CtxMenuIntegration"), true);
507
m_UseDefValsForThreadSearch = pCfg->ReadBool(wxT("/UseDefaultValues"), true);
508
m_ShowSearchControls = pCfg->ReadBool(wxT("/ShowSearchControls"), true);
509
m_ShowDirControls = pCfg->ReadBool(wxT("/ShowDirControls"), false);
510
m_ShowCodePreview = pCfg->ReadBool(wxT("/ShowCodePreview"), true);
511
m_DeletePreviousResults = pCfg->ReadBool(wxT("/DeletePreviousResults"), true);
512
m_DisplayLogHeaders = pCfg->ReadBool(wxT("/DisplayLogHeaders"), true);
513
m_DrawLogLines = pCfg->ReadBool(wxT("/DrawLogLines"), false);
515
showPanel = pCfg->ReadBool(wxT("/ShowPanel"), true);
517
m_FindData.SetScope (pCfg->ReadInt (wxT("/Scope"), ScopeProjectFiles));
519
m_FindData.SetSearchPath (pCfg->Read (wxT("/DirPath"), wxEmptyString));
520
m_FindData.SetSearchMask (pCfg->Read (wxT("/Mask"), wxT("*.cpp;*.c;*.h")));
522
sashPosition = pCfg->ReadInt(wxT("/SplitterPosn"), 0);
523
int splitterMode = pCfg->ReadInt(wxT("/SplitterMode"), wxSPLIT_VERTICAL);
518
524
m_SplitterMode = wxSPLIT_VERTICAL;
519
525
if ( splitterMode == wxSPLIT_HORIZONTAL )
521
m_SplitterMode = wxSPLIT_HORIZONTAL;
527
m_SplitterMode = wxSPLIT_HORIZONTAL;
524
int managerType = pCfg->ReadInt(wxT("/ViewManagerType"), ThreadSearchViewManagerBase::TypeMessagesNotebook);
525
mgrType = ThreadSearchViewManagerBase::TypeMessagesNotebook;
530
int managerType = pCfg->ReadInt(wxT("/ViewManagerType"), ThreadSearchViewManagerBase::TypeMessagesNotebook);
531
mgrType = ThreadSearchViewManagerBase::TypeMessagesNotebook;
526
532
if ( managerType == ThreadSearchViewManagerBase::TypeLayout )
528
mgrType = ThreadSearchViewManagerBase::TypeLayout;
534
mgrType = ThreadSearchViewManagerBase::TypeLayout;
531
int loggerType = pCfg->ReadInt(wxT("/LoggerType"), ThreadSearchLoggerBase::TypeList);
532
m_LoggerType = ThreadSearchLoggerBase::TypeList;
537
int loggerType = pCfg->ReadInt(wxT("/LoggerType"), ThreadSearchLoggerBase::TypeList);
538
m_LoggerType = ThreadSearchLoggerBase::TypeList;
533
539
if ( loggerType == ThreadSearchLoggerBase::TypeTree )
535
m_LoggerType = ThreadSearchLoggerBase::TypeTree;
541
m_LoggerType = ThreadSearchLoggerBase::TypeTree;
538
544
searchPatterns = pCfg->ReadArrayString(wxT("/SearchPatterns"));
542
548
void ThreadSearch::SaveConfig(bool showPanel, int sashPosition,
543
ThreadSearchViewManagerBase::eManagerTypes mgrType,
544
const wxArrayString& searchPatterns)
549
ThreadSearchViewManagerBase::eManagerTypes mgrType,
550
const wxArrayString& searchPatterns)
546
552
ConfigManager* pCfg = Manager::Get()->GetConfigManager(_T("ThreadSearch"));
548
pCfg->Write(wxT("/MatchWord"), m_FindData.GetMatchWord());
549
pCfg->Write(wxT("/StartWord"), m_FindData.GetStartWord());
550
pCfg->Write(wxT("/MatchCase"), m_FindData.GetMatchCase());
551
pCfg->Write(wxT("/RegEx"), m_FindData.GetRegEx());
552
pCfg->Write(wxT("/HiddenSearch"), m_FindData.GetHiddenSearch());
553
pCfg->Write(wxT("/RecursiveSearch"), m_FindData.GetRecursiveSearch());
555
pCfg->Write(wxT("/CtxMenuIntegration"), m_CtxMenuIntegration);
556
pCfg->Write(wxT("/UseDefaultValues"), m_UseDefValsForThreadSearch);
557
pCfg->Write(wxT("/ShowSearchControls"), m_ShowSearchControls);
558
pCfg->Write(wxT("/ShowDirControls"), m_ShowDirControls);
559
pCfg->Write(wxT("/ShowCodePreview"), m_ShowCodePreview);
560
pCfg->Write(wxT("/DisplayLogHeaders"), m_DisplayLogHeaders);
561
pCfg->Write(wxT("/DrawLogLines"), m_DrawLogLines);
563
pCfg->Write(wxT("/ShowPanel"), showPanel);
565
pCfg->Write(wxT("/Scope"), m_FindData.GetScope());
567
pCfg->Write(wxT("/DirPath"), m_FindData.GetSearchPath());
568
pCfg->Write(wxT("/Mask"), m_FindData.GetSearchMask());
570
pCfg->Write(wxT("/SplitterPosn"), sashPosition);
571
pCfg->Write(wxT("/SplitterMode"), (int)m_SplitterMode);
572
pCfg->Write(wxT("/ViewManagerType"), m_pViewManager->GetManagerType());
573
pCfg->Write(wxT("/LoggerType"), m_LoggerType);
574
pCfg->Write(wxT("/FileSorting"), m_FileSorting);
576
pCfg->Write(wxT("/SearchPatterns"), searchPatterns);
554
pCfg->Write(wxT("/MatchWord"), m_FindData.GetMatchWord());
555
pCfg->Write(wxT("/StartWord"), m_FindData.GetStartWord());
556
pCfg->Write(wxT("/MatchCase"), m_FindData.GetMatchCase());
557
pCfg->Write(wxT("/RegEx"), m_FindData.GetRegEx());
558
pCfg->Write(wxT("/HiddenSearch"), m_FindData.GetHiddenSearch());
559
pCfg->Write(wxT("/RecursiveSearch"), m_FindData.GetRecursiveSearch());
561
pCfg->Write(wxT("/CtxMenuIntegration"), m_CtxMenuIntegration);
562
pCfg->Write(wxT("/UseDefaultValues"), m_UseDefValsForThreadSearch);
563
pCfg->Write(wxT("/ShowSearchControls"), m_ShowSearchControls);
564
pCfg->Write(wxT("/ShowDirControls"), m_ShowDirControls);
565
pCfg->Write(wxT("/ShowCodePreview"), m_ShowCodePreview);
566
pCfg->Write(wxT("/DeletePreviousResults"), m_DeletePreviousResults);
567
pCfg->Write(wxT("/DisplayLogHeaders"), m_DisplayLogHeaders);
568
pCfg->Write(wxT("/DrawLogLines"), m_DrawLogLines);
570
pCfg->Write(wxT("/ShowPanel"), showPanel);
572
pCfg->Write(wxT("/Scope"), m_FindData.GetScope());
574
pCfg->Write(wxT("/DirPath"), m_FindData.GetSearchPath());
575
pCfg->Write(wxT("/Mask"), m_FindData.GetSearchMask());
577
pCfg->Write(wxT("/SplitterPosn"), sashPosition);
578
pCfg->Write(wxT("/SplitterMode"), (int)m_SplitterMode);
579
pCfg->Write(wxT("/ViewManagerType"), m_pViewManager->GetManagerType());
580
pCfg->Write(wxT("/LoggerType"), m_LoggerType);
581
pCfg->Write(wxT("/FileSorting"), m_FileSorting);
583
pCfg->Write(wxT("/SearchPatterns"), searchPatterns);
580
587
bool ThreadSearch::BuildToolBar(wxToolBar* toolBar)
582
if ( !IsAttached() || !toolBar )
585
m_pToolbar = toolBar;
586
m_pThreadSearchView->SetToolBar(toolBar);
588
wxString prefix = ConfigManager::GetDataFolder() + _T("/images/ThreadSearch/");
589
m_pCboSearchExpr = new wxComboBox (toolBar, idCboSearchExpr, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);
590
wxBitmapButton* pBtnSearch = new wxBitmapButton(toolBar, idBtnSearch, wxBitmap(prefix + wxT("findf.png"), wxBITMAP_TYPE_PNG));
591
wxBitmapButton* pBtnOptions = new wxBitmapButton(toolBar, idBtnOptions, wxBitmap(prefix + wxT("options.png"), wxBITMAP_TYPE_PNG));
593
m_pCboSearchExpr->SetToolTip(wxT("Text to search"));
594
pBtnSearch->SetToolTip(wxT("Run search"));
595
pBtnOptions->SetToolTip(wxT("Show options window"));
597
pBtnSearch->SetBitmapDisabled(wxBitmap(prefix + wxT("findfdisabled.png"), wxBITMAP_TYPE_PNG));
598
pBtnOptions->SetBitmapDisabled(wxBitmap(prefix + wxT("optionsdisabled.png"), wxBITMAP_TYPE_PNG));
600
toolBar->AddControl(m_pCboSearchExpr);
601
toolBar->AddControl(pBtnSearch);
602
toolBar->AddControl(pBtnOptions);
605
#if wxCHECK_VERSION(2, 8, 0)
606
toolBar->SetInitialSize();
608
toolBar->SetBestFittingSize();
589
if ( !IsAttached() || !toolBar )
592
m_pToolbar = toolBar;
593
m_pThreadSearchView->SetToolBar(toolBar);
596
ConfigManager *cfg = Manager::Get()->GetConfigManager(_T("app"));
597
if (cfg->ReadBool(_T("/environment/toolbar_size"),true))
599
prefix = ConfigManager::GetDataFolder() + _T("/images/ThreadSearch/16x16/");
600
m_pToolbar->SetToolBitmapSize(wxSize(16,16));
604
prefix = ConfigManager::GetDataFolder() + _T("/images/ThreadSearch/22x22/");
605
m_pToolbar->SetToolBitmapSize(wxSize(22,22));
607
m_pCboSearchExpr = new wxComboBox (toolBar, idCboSearchExpr, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN);
609
m_pCboSearchExpr->SetToolTip(_("Text to search"));
612
toolBar->AddControl(m_pCboSearchExpr);
613
toolBar->AddTool(idBtnSearch,_(""),wxBitmap(prefix + wxT("findf.png"), wxBITMAP_TYPE_PNG),wxBitmap(prefix + wxT("findfdisabled.png"), wxBITMAP_TYPE_PNG),wxITEM_NORMAL,_("Run search")); //Control(pBtnSearch);
614
toolBar->AddTool(idBtnOptions,_(""),wxBitmap(prefix + wxT("options.png"), wxBITMAP_TYPE_PNG),wxBitmap(prefix + wxT("optionsdisabled.png"), wxBITMAP_TYPE_PNG),wxITEM_NORMAL,_("Show options window")); //Control(pBtnSearch);
617
#if wxCHECK_VERSION(2, 8, 0)
618
toolBar->SetInitialSize();
620
toolBar->SetBestFittingSize();
615
627
void ThreadSearch::OnBtnOptionsClick(wxCommandEvent &event)
620
m_pThreadSearchView->ProcessEvent(event);
632
m_pThreadSearchView->OnBtnOptionsClick(event);
624
636
void ThreadSearch::OnBtnSearchClick(wxCommandEvent &event)
629
// Behaviour differs if a search is running.
630
if ( m_pThreadSearchView->IsSearchRunning() )
632
// In this case, user wants to stops search,
633
// we just transmit event
634
m_pThreadSearchView->ProcessEvent(event);
639
// User wants to search for a word.
640
// Forwarding the event would search for the view combo text whereas we want
641
// to look for the toolbar combo text.
642
wxComboBox* pCboBox = static_cast<wxComboBox*>(m_pToolbar->FindControl(idCboSearchExpr));
643
wxASSERT(pCboBox != NULL);
644
RunThreadSearch(pCboBox->GetValue());
641
// Behaviour differs if a search is running.
642
if ( m_pThreadSearchView->IsSearchRunning() )
644
// In this case, user wants to stops search,
645
// we just transmit event
646
m_pThreadSearchView->OnBtnSearchClick(event);
651
// User wants to search for a word.
652
// Forwarding the event would search for the view combo text whereas we want
653
// to look for the toolbar combo text.
654
wxComboBox* pCboBox = static_cast<wxComboBox*>(m_pToolbar->FindControl(idCboSearchExpr));
655
wxASSERT(pCboBox != NULL);
656
RunThreadSearch(pCboBox->GetValue());
648
660
void ThreadSearch::RunThreadSearch(const wxString& text, bool isCtxSearch/*=false*/)
653
ThreadSearchFindData findData = m_FindData;
655
// User may prefer to set default options for contextual search
656
if ( (isCtxSearch == true) && (m_UseDefValsForThreadSearch == true) )
658
findData.SetMatchCase(true);
659
findData.SetMatchWord(true);
660
findData.SetStartWord(false);
661
findData.SetRegEx (false);
664
// m_SearchedWord was set in BuildModuleMenu
665
findData.SetFindText(text);
667
// Displays m_pThreadSearchView in manager
668
m_pViewManager->ShowView(true);
670
// Runs the search through a worker thread
671
m_pThreadSearchView->ThreadedSearch(findData);
665
ThreadSearchFindData findData = m_FindData;
667
// User may prefer to set default options for contextual search
668
if ( (isCtxSearch == true) && (m_UseDefValsForThreadSearch == true) )
670
findData.SetMatchCase(true);
671
findData.SetMatchWord(true);
672
findData.SetStartWord(false);
673
findData.SetRegEx (false);
676
// m_SearchedWord was set in BuildModuleMenu
677
findData.SetFindText(text);
679
// Displays m_pThreadSearchView in manager
680
m_pViewManager->ShowView(true);
682
// Runs the search through a worker thread
683
m_pThreadSearchView->ThreadedSearch(findData);
675
687
void ThreadSearch::OnCboSearchExprEnter(wxCommandEvent &event)
680
// Event handler used when user clicks on enter after typing
681
// in combo box text control.
682
// Runs a multi threaded search with combo text
683
wxComboBox* pCboBox = static_cast<wxComboBox*>(m_pToolbar->FindControl(idCboSearchExpr));
684
wxASSERT(pCboBox != NULL);
685
if ( event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER )
692
// Event handler used when user clicks on enter after typing
693
// in combo box text control.
694
// Runs a multi threaded search with combo text
695
wxComboBox* pCboBox = static_cast<wxComboBox*>(m_pToolbar->FindControl(idCboSearchExpr));
696
wxASSERT(pCboBox != NULL);
697
if ( event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER )
686
698
RunThreadSearch(pCboBox->GetValue());
690
702
void ThreadSearch::ShowToolBar(bool show)
695
bool isShown = IsWindowReallyShown(m_pToolbar);
697
if ( show != isShown )
699
CodeBlocksDockEvent evt(show ? cbEVT_SHOW_DOCK_WINDOW : cbEVT_HIDE_DOCK_WINDOW);
700
evt.pWindow = (wxWindow*)m_pToolbar;
702
Manager::Get()->ProcessEvent(evt);
707
bool isShown = IsWindowReallyShown(m_pToolbar);
709
if ( show != isShown )
711
CodeBlocksDockEvent evt(show ? cbEVT_SHOW_DOCK_WINDOW : cbEVT_HIDE_DOCK_WINDOW);
712
evt.pWindow = (wxWindow*)m_pToolbar;
714
Manager::Get()->ProcessEvent(evt);
707
719
bool ThreadSearch::IsToolbarVisible()
712
return IsWindowReallyShown(m_pToolbar);
724
return IsWindowReallyShown(m_pToolbar);
716
728
bool ThreadSearch::GetCursorWord(wxString& sWord)
718
bool wordFound = false;
719
sWord = wxEmptyString;
721
// Gets active editor
722
cbEditor* ed = Manager::Get()->GetEditorManager()->GetBuiltinActiveEditor();
725
cbStyledTextCtrl* control = ed->GetControl();
727
// Gets word under cursor
728
int pos = control->GetCurrentPos();
729
int ws = control->WordStartPosition(pos, true);
730
int we = control->WordEndPosition(pos, true);
731
if ( ws < we ) // Avoid empty strings
733
// m_SearchedWord will be used if 'Find occurrences' ctx menu is clicked
734
sWord = control->GetTextRange(ws, we);
730
bool wordFound = false;
731
sWord = wxEmptyString;
733
// Gets active editor
734
cbEditor* ed = Manager::Get()->GetEditorManager()->GetBuiltinActiveEditor();
737
cbStyledTextCtrl* control = ed->GetControl();
739
// Gets word under cursor
740
int pos = control->GetCurrentPos();
741
int ws = control->WordStartPosition(pos, true);
742
int we = control->WordEndPosition(pos, true);
743
if ( ws < we ) // Avoid empty strings
745
// m_SearchedWord will be used if 'Find occurrences' ctx menu is clicked
746
sWord = control->GetTextRange(ws, we);
743
755
void ThreadSearch::OnMnuEditCopy(wxCommandEvent& event)
751
763
wxWindow* pFocused = wxWindow::FindFocus();