Index: plugins/classwizard/classwizarddlg.cpp
===================================================================
--- plugins/classwizard/classwizarddlg.cpp (revision 4787)
+++ plugins/classwizard/classwizarddlg.cpp (working copy)
@@ -23,7 +23,6 @@
* $Id$
* $HeadURL$
*/
-
#include <sdk.h>
#ifndef CB_PRECOMP
#include <wx/arrstr.h>
@@ -73,6 +72,7 @@
EVT_TEXT(XRCID("txtInheritance"), ClassWizardDlg::OnAncestorChange)
EVT_BUTTON(XRCID("btnIncludeDir"), ClassWizardDlg::OnIncludeDirClick)
EVT_BUTTON(XRCID("btnImplDir"), ClassWizardDlg::OnImplDirClick)
+ EVT_BUTTON(XRCID("btnCommonDir"), ClassWizardDlg::OnCommonDirClick)
END_EVENT_TABLE()
@@ -85,15 +85,19 @@
if (prj)
{
XRCCTRL(*this, "txtIncludeDir", wxTextCtrl)->SetValue(prj->GetCommonTopLevelPath() + _T("include"));
- XRCCTRL(*this, "txtImplDir", wxTextCtrl)->SetValue(prj->GetCommonTopLevelPath() + _T("src"));\
+ XRCCTRL(*this, "txtImplDir", wxTextCtrl)->SetValue(prj->GetCommonTopLevelPath() + _T("src"));
+ XRCCTRL(*this, "txtCommonDir", wxTextCtrl)->SetValue(prj->GetCommonTopLevelPath());
}
else
{
XRCCTRL(*this, "txtIncludeDir", wxTextCtrl)->SetValue(::wxGetCwd());
XRCCTRL(*this, "txtImplDir", wxTextCtrl)->SetValue(::wxGetCwd());
+ XRCCTRL(*this, "txtCommonDir", wxTextCtrl)->SetValue(::wxGetCwd());
+
}
XRCCTRL(*this, "txtInheritanceFilename", wxTextCtrl)->SetValue(_T("<>"));
XRCCTRL(*this, "cmbInheritanceScope", wxComboBox)->SetSelection(0);
+ XRCCTRL(*this, "txtHeaderInclude", wxTextCtrl)->SetValue(_T("\"\""));
}
@@ -126,6 +130,7 @@
;
XRCCTRL(*this, "txtHeader", wxTextCtrl)->SetValue(name + _T(".h"));
XRCCTRL(*this, "txtImplementation", wxTextCtrl)->SetValue(name + _T(".cpp"));
+ XRCCTRL(*this, "txtHeaderInclude", wxTextCtrl)->SetValue(_T("\"")+name + _T(".h\""));
DoGuardBlock();
}
@@ -151,10 +156,22 @@
XRCCTRL(*this, "txtInheritanceFilename", wxTextCtrl)->Enable(inherits);
XRCCTRL(*this, "cmbInheritanceScope", wxComboBox)->Enable(inherits);
+ bool hasdestructor = XRCCTRL(*this, "chkHasDestructor", wxCheckBox)->GetValue();
+ XRCCTRL(*this, "chkVirtualDestructor", wxCheckBox)->Enable(hasdestructor);
+
bool genimpl = XRCCTRL(*this, "chkImplementation", wxCheckBox)->GetValue();
XRCCTRL(*this, "txtImplementation", wxTextCtrl)->Enable(genimpl);
- XRCCTRL(*this, "txtImplDir", wxTextCtrl)->Enable(genimpl);
+ XRCCTRL(*this, "txtHeaderInclude", wxTextCtrl)->Enable(genimpl);
+ bool commonDir = XRCCTRL(*this, "chkCommonDir", wxCheckBox)->GetValue();
+ XRCCTRL(*this, "txtImplDir", wxTextCtrl)->Enable(genimpl && !commonDir);
+ XRCCTRL(*this, "btnImplDir", wxButton)->Enable(genimpl && !commonDir);
+ XRCCTRL(*this, "txtIncludeDir", wxTextCtrl)->Enable(!commonDir);
+ XRCCTRL(*this, "btnIncludeDir", wxButton)->Enable(!commonDir);
+ XRCCTRL(*this, "txtCommonDir", wxTextCtrl)->Enable(commonDir);
+ XRCCTRL(*this, "btnCommonDir", wxButton)->Enable(commonDir);
+
+
bool genguard = XRCCTRL(*this, "chkGuardBlock", wxCheckBox)->GetValue();
XRCCTRL(*this, "txtGuardBlock", wxTextCtrl)->Enable(genguard);
}
@@ -177,12 +194,28 @@
Name = tkz.GetNextToken();
}
- wxString includeDir = XRCCTRL(*this, "txtIncludeDir", wxTextCtrl)->GetValue();
- wxString implDir = XRCCTRL(*this, "txtImplDir", wxTextCtrl)->GetValue();
+ wxString includeDir;
+ wxString implDir;
+
+ bool CommonDir=XRCCTRL(*this, "chkCommonDir", wxCheckBox)->GetValue();
+ if (CommonDir)
+ {
+ includeDir = XRCCTRL(*this, "txtCommonDir", wxTextCtrl)->GetValue();
+ implDir = XRCCTRL(*this, "txtCommonDir", wxTextCtrl)->GetValue();
+ }
+ else
+ {
+ includeDir = XRCCTRL(*this, "txtIncludeDir", wxTextCtrl)->GetValue();
+ implDir = XRCCTRL(*this, "txtImplDir", wxTextCtrl)->GetValue();
+ }
//wxSetWorkingDirectory(baseDir);
-
wxString Constructor = XRCCTRL(*this, "txtConstructor", wxTextCtrl)->GetValue();
bool VirtualDestructor = XRCCTRL(*this, "chkVirtualDestructor", wxCheckBox)->GetValue();
+ bool HasDestructor = XRCCTRL(*this, "chkHasDestructor", wxCheckBox)->GetValue();
+ if (!HasDestructor)
+ {
+ VirtualDestructor = false;
+ }
wxString Ancestor = XRCCTRL(*this, "txtInheritance", wxTextCtrl)->GetValue();
wxString AncestorFilename = XRCCTRL(*this, "txtInheritanceFilename", wxTextCtrl)->GetValue();
@@ -191,6 +224,7 @@
m_Header = XRCCTRL(*this, "txtHeader", wxTextCtrl)->GetValue();
m_Implementation = XRCCTRL(*this, "txtImplementation", wxTextCtrl)->GetValue();
+ wxString headerInclude = XRCCTRL(*this, "txtHeaderInclude", wxTextCtrl)->GetValue();
bool GenerateImplementation = XRCCTRL(*this, "chkImplementation", wxCheckBox)->GetValue();
bool GuardBlock = XRCCTRL(*this, "chkGuardBlock", wxCheckBox)->GetValue();
wxString GuardWord = XRCCTRL(*this, "txtGuardBlock", wxTextCtrl)->GetValue();
@@ -198,7 +232,6 @@
{
DoGuardBlock();
}
-
wxFileName headerFname(UnixFilename(m_Header));
wxFileName implementationFname(UnixFilename(m_Implementation));
headerFname.MakeAbsolute(includeDir);
@@ -225,7 +258,6 @@
{
eolstr = _T("\r\n");
}
-
// actual creation starts here
// let's start with the header file
if (GuardBlock)
@@ -258,13 +290,17 @@
buffer << tabstr << _T("public:") << eolstr;
buffer << tabstr << tabstr << Name << _T("(") << Constructor << _T(")");
buffer << (!GenerateImplementation ? _T(" {}") : _T(";")) << eolstr;
- buffer << tabstr << tabstr;
- if (VirtualDestructor)
+
+ if (HasDestructor)
{
- buffer << _T("virtual ");
+ buffer << tabstr << tabstr;
+ if (VirtualDestructor)
+ {
+ buffer << _T("virtual ");
+ }
+ buffer << _T('~') << Name << _T("()");
+ buffer << (!GenerateImplementation ? _T(" {}") : _T(";")) << eolstr;
}
- buffer << _T('~') << Name << _T("()");
- buffer << (!GenerateImplementation ? _T(" {}") : _T(";")) << eolstr;
buffer << tabstr << _T("protected:") << eolstr;
buffer << tabstr << _T("private:") << eolstr;
buffer << _T("};") << eolstr;
@@ -300,12 +336,11 @@
return;
}
// now the implementation file
-
ForceDirectory(implementationFname);
new_ed = Manager::Get()->GetEditorManager()->New(implementationFname.GetFullPath());
buffer = new_ed->GetControl()->GetText();
- buffer << _T("#include \"") << m_Header << _T("\"") << eolstr;
+ buffer << _T("#include ") << headerInclude << eolstr;
buffer << eolstr;
for (unsigned int i=0; i<NameSpaces.GetCount(); ++i)
{
@@ -317,12 +352,16 @@
buffer << _T("{") << eolstr;
buffer << tabstr << _T("//ctor") << eolstr;
buffer << _T("}") << eolstr;
- buffer << eolstr;
- buffer << Name << _T("::~") << Name << _T("()") << eolstr;
- buffer << _T("{") << eolstr;
- buffer << tabstr << _T("//dtor") << eolstr;
- buffer << _T("}") << eolstr;
+ if (HasDestructor)
+ {
+ buffer << eolstr;
+ buffer << Name << _T("::~") << Name << _T("()") << eolstr;
+ buffer << _T("{") << eolstr;
+ buffer << tabstr << _T("//dtor") << eolstr;
+ buffer << _T("}") << eolstr;
+ }
+
buffer << eolstr;
for (int i=NameSpaces.GetCount(); i>0; --i)
{
@@ -338,7 +377,6 @@
cbMessageBox(msg, _("Error"), wxICON_ERROR);
return;
}
-
m_Header= headerFname.GetFullPath();
m_Implementation= implementationFname.GetFullPath();
@@ -368,6 +406,17 @@
}
}
+void ClassWizardDlg::OnCommonDirClick(wxCommandEvent& WXUNUSED(event))
+{
+ wxString path = XRCCTRL(*this, "txtCommonDir", wxTextCtrl)->GetValue();
+ wxDirDialog dlg (this, _T("Choose a directory"), path);
+ if (dlg.ShowModal()==wxID_OK)
+ {
+ path = dlg.GetPath();
+ XRCCTRL(*this, "txtCommonDir", wxTextCtrl)->SetValue(path);
+ }
+}
+
void ClassWizardDlg::OnCancelClick(wxCommandEvent& WXUNUSED(event))
{
EndModal(wxID_CANCEL);
Index: plugins/classwizard/classwizarddlg.h
===================================================================
--- plugins/classwizard/classwizarddlg.h (revision 4787)
+++ plugins/classwizard/classwizarddlg.h (working copy)
@@ -22,6 +22,7 @@
void OnAncestorChange(wxCommandEvent& event);
void OnIncludeDirClick(wxCommandEvent& event);
void OnImplDirClick(wxCommandEvent& event);
+ void OnCommonDirClick(wxCommandEvent& event);
void DoGuardBlock();
wxString m_Header;
Index: plugins/classwizard/resources/new_class.xrc
===================================================================
--- plugins/classwizard/resources/new_class.xrc (revision 4787)
+++ plugins/classwizard/resources/new_class.xrc (working copy)
@@ -2,6 +2,7 @@
<object class="wxDialog" name="dlgNewClass">
<title>Create new class</title>
<centered>1</centered>
+ <style>wxRESIZE_BORDER|wxSTATIC_BORDER</style>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
@@ -14,7 +15,7 @@
<object class="wxStaticText" name="ID_STATICTEXT1">
<label>Class name:</label>
</object>
- <flag>wxTOP|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
</object>
<object class="sizeritem">
@@ -25,7 +26,7 @@
<object class="wxStaticText" name="ID_STATICTEXT2">
<label>Constructor arguments:</label>
</object>
- <flag>wxTOP|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
</object>
<object class="sizeritem">
@@ -37,11 +38,23 @@
<size>0,0</size>
</object>
<object class="sizeritem">
+ <object class="wxCheckBox" name="chkHasDestructor">
+ <label>Has destructor</label>
+ <checked>1</checked>
+ </object>
+ <flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ </object>
+ <object class="spacer">
+ <flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <size>0,0</size>
+ </object>
+ <object class="sizeritem">
<object class="wxCheckBox" name="chkVirtualDestructor">
<label>Virtual destructor</label>
<checked>1</checked>
</object>
<flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>5</border>
</object>
</object>
<flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
@@ -71,7 +84,7 @@
<object class="wxStaticText" name="ID_STATICTEXT3">
<label>Ancestor:</label>
</object>
- <flag>wxTOP|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
</object>
<object class="sizeritem">
@@ -82,7 +95,7 @@
<object class="wxStaticText" name="ID_STATICTEXT4">
<label>Ancestor's include filename:</label>
</object>
- <flag>wxTOP|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
</object>
<object class="sizeritem">
@@ -93,7 +106,7 @@
<object class="wxStaticText" name="ID_STATICTEXT5">
<label>Scope:</label>
</object>
- <flag>wxTOP|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
</object>
<object class="sizeritem">
@@ -118,6 +131,58 @@
</object>
<object class="sizeritem">
<object class="wxStaticBoxSizer">
+ <label>File policy</label>
+ <orient>wxVERTICAL</orient>
+ <object class="sizeritem">
+ <object class="wxCheckBox" name="chkCommonDir">
+ <label>Header and Implementation in same folder</label>
+ </object>
+ <flag>wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>5</border>
+ </object>
+ <object class="sizeritem">
+ <object class="wxFlexGridSizer">
+ <cols>2</cols>
+ <growablecols>1</growablecols>
+ <object class="sizeritem">
+ <object class="wxStaticText" name="ID_STATICTEXT11">
+ <label>Folder:</label>
+ </object>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>4</border>
+ <option>1</option>
+ </object>
+ <object class="sizeritem">
+ <object class="wxBoxSizer">
+ <object class="sizeritem">
+ <object class="wxTextCtrl" name="txtCommonDir">
+ <value>Text</value>
+ </object>
+ <flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <option>1</option>
+ </object>
+ <object class="sizeritem">
+ <object class="wxButton" name="btnCommonDir">
+ <label>...</label>
+ <size>23,24</size>
+ </object>
+ <flag>wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>5</border>
+ </object>
+ </object>
+ <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ </object>
+ </object>
+ <flag>wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>5</border>
+ <option>1</option>
+ </object>
+ </object>
+ <flag>wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>5</border>
+ </object>
+ <object class="sizeritem">
+ <object class="wxStaticBoxSizer">
<label>Header file</label>
<orient>wxVERTICAL</orient>
<object class="sizeritem">
@@ -130,14 +195,14 @@
<object class="wxStaticText" name="ID_STATICTEXT9">
<label>Folder:</label>
</object>
- <flag>wxALL|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>4</border>
</object>
<object class="sizeritem">
<object class="wxBoxSizer">
<object class="sizeritem">
<object class="wxTextCtrl" name="txtIncludeDir">
<value>Text</value>
- <size>115,23</size>
</object>
<flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
<option>1</option>
@@ -156,7 +221,7 @@
<object class="wxStaticText" name="ID_STATICTEXT6">
<label>Filename:</label>
</object>
- <flag>wxTOP|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
</object>
<object class="sizeritem">
@@ -178,7 +243,7 @@
<object class="wxStaticText" name="ID_STATICTEXT8">
<label>Guard block:</label>
</object>
- <flag>wxTOP|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
</object>
<object class="sizeritem">
@@ -216,7 +281,8 @@
<object class="wxStaticText" name="ID_STATICTEXT29">
<label>Folder:</label>
</object>
- <flag>wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>4</border>
</object>
<object class="sizeritem">
<object class="wxBoxSizer">
@@ -242,13 +308,28 @@
<object class="wxStaticText" name="ID_STATICTEXT7">
<label>Filename:</label>
</object>
- <flag>wxTOP|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>4</border>
</object>
<object class="sizeritem">
<object class="wxTextCtrl" name="txtImplementation" />
<flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
</object>
+ <object class="sizeritem">
+ <object class="wxStaticText" name="ID_STATICTEXT10">
+ <label>Header include:</label>
+ </object>
+ <flag>wxTOP|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <border>4</border>
+ <option>1</option>
+ </object>
+ <object class="sizeritem">
+ <object class="wxTextCtrl" name="txtHeaderInclude">
+ <value>""</value>
+ </object>
+ <flag>wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP</flag>
+ <option>1</option>
+ </object>
</object>
<flag>wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
OK, this is my patch.
I must say I like the structure of C::B, that allows you to change small things in the plugins or creating new ones, using easy interfaces to the rest of the code. You really don't have to care about how the rest is implemented!
edit: I can only test it for Windows XP. I don't expect it will be very different on other platforms, but you never know...