File: csManager.cpp

package info (click to toggle)
codelite 17.0.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 136,244 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (114 lines) | stat: -rw-r--r-- 3,915 bytes parent folder | download | duplicates (3)
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
106
107
108
109
110
111
112
113
114
#include "csCodeCompleteHandler.h"
#include "csFindInFilesCommandHandler.h"
#include "csListCommandHandler.h"
#include "csManager.h"
#include "csNetworkThread.h"
#include "csParseFolderHandler.h"
#include "file_logger.h"
#include "JSON.h"
#include "search_thread.h"
#include <algorithm>
#include <iostream>
#include <wx/app.h>

csManager::csManager()
    : m_startupCalled(false)
    , m_exitNow(false)
{
    m_handlers.Register("list", csCommandHandlerBase::Ptr_t(new csListCommandHandler(this)));
    m_handlers.Register("find", csCommandHandlerBase::Ptr_t(new csFindInFilesCommandHandler(this)));
    m_handlers.Register("parse", csCommandHandlerBase::Ptr_t(new csParseFolderHandler(this)));
    m_handlers.Register("code-complete", csCommandHandlerBase::Ptr_t(new csCodeCompleteHandler(this)));

    SearchThreadST::Get()->Start();
    SearchThreadST::Get()->SetNotifyWindow(this);
    m_config.Load();
}

csManager::~csManager()
{
    // First unbind all the events
    if(m_startupCalled) {
        Unbind(wxEVT_COMMAND_PROCESSED, &csManager::OnCommandProcessedCompleted, this);
        // Search thread events
        Unbind(wxEVT_SEARCH_THREAD_MATCHFOUND, &csManager::OnSearchThreadMatch, this);
        Unbind(wxEVT_SEARCH_THREAD_SEARCHSTARTED, &csManager::OnSearchThreadStarted, this);
        Unbind(wxEVT_SEARCH_THREAD_SEARCHCANCELED, &csManager::OnSearchThreadCancelled, this);
        Unbind(wxEVT_SEARCH_THREAD_SEARCHEND, &csManager::OnSearchThreadEneded, this);
    }
    SearchThreadST::Get()->Stop();
}

bool csManager::Startup()
{
    if(m_exitNow) {
        CallAfter(&csManager::OnExit);
        return true;
    }

    Bind(wxEVT_COMMAND_PROCESSED, &csManager::OnCommandProcessedCompleted, this);
    // Search thread events
    Bind(wxEVT_SEARCH_THREAD_MATCHFOUND, &csManager::OnSearchThreadMatch, this);
    Bind(wxEVT_SEARCH_THREAD_SEARCHSTARTED, &csManager::OnSearchThreadStarted, this);
    Bind(wxEVT_SEARCH_THREAD_SEARCHCANCELED, &csManager::OnSearchThreadCancelled, this);
    Bind(wxEVT_SEARCH_THREAD_SEARCHEND, &csManager::OnSearchThreadEneded, this);

    m_startupCalled = true;

    clDEBUG() << "Command:" << GetCommand();
    clDEBUG() << "Options:" << GetOptions();

    // Make sure we know how to handle this command
    csCommandHandlerBase::Ptr_t handler = m_handlers.FindHandler(m_command);
    if(handler == nullptr) {
        clERROR() << "Don't know how to handle command:" << m_command;
        return false;
    }

    JSON root(m_options);
    JSONItem options = root.toElement();
    handler->Process(options);
    return true;
}

void csManager::OnCommandProcessedCompleted(clCommandEvent& event) { wxExit(); }

void csManager::OnSearchThreadMatch(wxCommandEvent& event)
{
    SearchResultList* res = reinterpret_cast<SearchResultList*>(event.GetClientData());
    SearchResultList::iterator iter = res->begin();
    JSONItem arr = m_findInFilesMatches->toElement();
    while(iter != res->end()) {
        arr.arrayAppend(iter->ToJSON());
        ++iter;
    }
    wxDELETE(res);
}

void csManager::OnSearchThreadStarted(wxCommandEvent& event)
{
    clDEBUG() << "Search started";
    m_findInFilesMatches.reset(new JSON(cJSON_Array));
}

void csManager::OnSearchThreadCancelled(wxCommandEvent& event) { OnSearchThreadEneded(event); }

void csManager::OnSearchThreadEneded(wxCommandEvent& event)
{
    SearchSummary* summary = reinterpret_cast<SearchSummary*>(event.GetClientData());
    m_findInFilesMatches->toElement().arrayAppend(summary->ToJSON());
    wxDELETE(summary);
    wxString output = m_findInFilesMatches->toElement().format(GetConfig().IsPrettyJSON());
    std::cout << output << std::endl;
    LOG_IF_TRACE { clDEBUG1() << output; }
    clDEBUG() << "Search completed";
    wxExit();
}

void csManager::LoadCommandFromINI()
{
    m_command = m_config.GetCommand();
    m_options = m_config.GetOptions();
}

void csManager::OnExit() { wxExit(); }