1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
/*
* This file is part of the Code::Blocks IDE and licensed under the GNU Lesser General Public License, version 3
* http://www.gnu.org/licenses/lgpl-3.0.html
*
* $Revision: 9203 $
* $Id: searchresultslog.cpp 9203 2013-07-08 23:07:22Z fuscated $
* $HeadURL: http://svn.code.sf.net/p/codeblocks/code/branches/release-16.xx/src/sdk/searchresultslog.cpp $
*/
#include "sdk_precomp.h"
#ifndef CB_PRECOMP
#include <wx/arrstr.h>
#include <wx/filename.h>
#include <wx/listctrl.h>
#include "manager.h"
#include "editormanager.h"
#include "cbeditor.h"
#endif
#include "cbstyledtextctrl.h"
#include "searchresultslog.h"
namespace
{
const int ID_List = wxNewId();
}
BEGIN_EVENT_TABLE(cbSearchResultsLog, wxEvtHandler)
//
END_EVENT_TABLE()
cbSearchResultsLog::cbSearchResultsLog(const wxArrayString& titles_in, wxArrayInt& widths_in)
: ListCtrlLogger(titles_in, widths_in)
{
//ctor
}
cbSearchResultsLog::~cbSearchResultsLog()
{
//dtor
}
wxWindow* cbSearchResultsLog::CreateControl(wxWindow* parent)
{
ListCtrlLogger::CreateControl(parent);
control->SetId(ID_List);
Connect(ID_List, -1, wxEVT_COMMAND_LIST_ITEM_ACTIVATED,
(wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
&cbSearchResultsLog::OnDoubleClick);
Manager::Get()->GetAppWindow()->PushEventHandler(this);
return control;
}
void cbSearchResultsLog::FocusEntry(size_t index)
{
if (index < (size_t)control->GetItemCount())
{
control->SetItemState(index, wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED, wxLIST_STATE_FOCUSED | wxLIST_STATE_SELECTED);
control->EnsureVisible(index);
SyncEditor(index);
}
}
void cbSearchResultsLog::SyncEditor(int selIndex)
{
wxFileName filename(control->GetItemText(selIndex));
wxString file;
if (!filename.IsAbsolute())
filename.MakeAbsolute(m_Base);
file = filename.GetFullPath();
wxListItem li;
li.m_itemId = selIndex;
li.m_col = 1;
li.m_mask = wxLIST_MASK_TEXT;
control->GetItem(li);
long line = 0;
li.m_text.ToLong(&line);
cbEditor* ed = Manager::Get()->GetEditorManager()->Open(file);
if (!line || !ed)
return;
line -= 1;
ed->Activate();
ed->GotoLine(line);
if (cbStyledTextCtrl* ctrl = ed->GetControl()) {
ctrl->EnsureVisible(line);
}
}
void cbSearchResultsLog::OnDoubleClick(cb_unused wxCommandEvent& event)
{
// go to the relevant file/line
if (control->GetSelectedItemCount() == 0)
return;
// find selected item index
int index = control->GetNextItem(-1,
wxLIST_NEXT_ALL,
wxLIST_STATE_SELECTED);
SyncEditor(index);
} // end of OnDoubleClick
|