summaryrefslogtreecommitdiff
path: root/LiteEditor/implement_parent_virtual_functions.cpp
blob: 35767c43bd72292453244ba950519fb56e7395b7 (plain)
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
115
#include "implement_parent_virtual_functions.h"
#include "editor_config.h"
#include "implparentvirtualfunctionsdata.h"
#include <wx/tokenzr.h>
#include "ctags_manager.h"
#include "cpp_comment_creator.h"
#include "windowattrmanager.h"
#include "context_cpp.h"

ImplementParentVirtualFunctionsDialog::ImplementParentVirtualFunctionsDialog( wxWindow* parent, const wxString &scopeName, const std::vector<TagEntryPtr> &tags, wxChar doxyPrefix, ContextCpp *contextCpp )
		: ImplementParentVirtualFunctionsBase(parent    )
		, m_tags                             (tags      )
		, m_doxyPrefix                       (doxyPrefix)
		, m_contextCpp                       (contextCpp)
		, m_scope                            (scopeName )
{
	WindowAttrManager::Load(this, wxT("ImplementParentVirtualFunctionsDialog"), NULL);
	ImplParentVirtualFunctionsData data;
	EditorConfigST::Get()->ReadObject(wxT("ImplParentVirtualFunctionsData"), &data);

	m_checkBoxFormat->SetValue(data.GetFlags() & ImplParentVirtualFunctionsData::FormatText);
	m_checkBoxAddDoxy->SetValue(data.GetFlags() & ImplParentVirtualFunctionsData::InsertDoxygenComment);
	DoInitialize(false);
}

ImplementParentVirtualFunctionsDialog::~ImplementParentVirtualFunctionsDialog()
{
	ImplParentVirtualFunctionsData data;

	size_t flags(0);
	if(m_checkBoxAddDoxy->IsChecked())
		flags |= ImplParentVirtualFunctionsData::InsertDoxygenComment;

	if(m_checkBoxFormat->IsChecked())
		flags |= ImplParentVirtualFunctionsData::FormatText;

	data.SetFlags(flags);
	EditorConfigST::Get()->WriteObject(wxT("ImplParentVirtualFunctionsData"), &data);
	WindowAttrManager::Save(this, wxT("ImplementParentVirtualFunctionsDialog"), NULL);
}

void ImplementParentVirtualFunctionsDialog::OnAddDoxy(wxCommandEvent& event)
{
	wxUnusedVar(event);
	DoInitialize(true);
}

void ImplementParentVirtualFunctionsDialog::DoInitialize(bool updateDoxyOnly)
{
	m_textCtrlProtos->Clear();

	wxString decl;
	bool addComments = m_checkBoxAddDoxy->IsChecked();

	// Add declration
	//////////////////////////////////////////////////////
	for (size_t i=0; i<m_tags.size(); i++) {
		TagEntryPtr tag = m_tags.at(i);
		if (addComments) {
			// Add doxygen comment
			CppCommentCreator commentCreator(tag, m_doxyPrefix);
			DoxygenComment dc;
			dc.comment = commentCreator.CreateComment();
			dc.name    = tag->GetName();
			m_contextCpp->DoMakeDoxyCommentString( dc );

			// Format the comment
			wxString textComment = dc.comment;
			textComment.Replace(wxT("\r"), wxT("\n"));
			wxArrayString lines = wxStringTokenize(textComment, wxT("\n"), wxTOKEN_STRTOK);
			textComment.Clear();

			for (size_t i=0; i<lines.GetCount(); i++)
				textComment << lines.Item(i) << wxT("\n");

			if(decl.EndsWith(wxT("\n")) == false)
				decl << wxT("\n");

			decl << textComment;
		}

		tag->SetScope(m_scope);
		decl << TagsManagerST::Get()->FormatFunction(tag, false) << wxT("\n");
	}

	m_textCtrlProtos->SetValue(decl);

	if ( !updateDoxyOnly ) {
		// Add Implementations
		//////////////////////////////////////////////////////
		wxString impl;
		m_textCtrlImpl->Clear();
		for (size_t i=0; i<m_tags.size(); i++) {
			TagEntryPtr tag = m_tags.at(i);
			tag->SetScope(m_scope);
			impl << TagsManagerST::Get()->FormatFunction(tag, true) << wxT("\n");
		}
		m_textCtrlImpl->SetValue(impl);

	}
}

wxString ImplementParentVirtualFunctionsDialog::GetDecl()
{
	wxString decl ( m_textCtrlProtos->GetValue() );
	decl.Trim().Trim();
	decl.Prepend(wxT("\n"));
	decl.Append(wxT("\n"));
	return decl;
}

wxString ImplementParentVirtualFunctionsDialog::GetImpl()
{
	return m_textCtrlImpl->GetValue();
}