2
* This file is part of the Code::Blocks IDE and licensed under the GNU General Public License, version 3
3
* http://www.gnu.org/licenses/gpl-3.0.html
10
#include "projectpathpanel.h"
12
#include <filefilters.h>
13
#include <wx/filename.h>
16
//(*IdInit(ProjectPathPanel)
17
const long ProjectPathPanel::ID_STATICTEXT1 = wxNewId();
18
const long ProjectPathPanel::ID_STATICTEXT4 = wxNewId();
19
const long ProjectPathPanel::ID_TEXTCTRL3 = wxNewId();
20
const long ProjectPathPanel::ID_STATICTEXT2 = wxNewId();
21
const long ProjectPathPanel::ID_TEXTCTRL1 = wxNewId();
22
const long ProjectPathPanel::ID_BUTTON1 = wxNewId();
23
const long ProjectPathPanel::ID_STATICTEXT3 = wxNewId();
24
const long ProjectPathPanel::ID_TEXTCTRL2 = wxNewId();
25
const long ProjectPathPanel::ID_STATICTEXT5 = wxNewId();
26
const long ProjectPathPanel::ID_TEXTCTRL4 = wxNewId();
29
BEGIN_EVENT_TABLE(ProjectPathPanel,wxPanel)
30
//(*EventTable(ProjectPathPanel)
34
ProjectPathPanel::ProjectPathPanel(wxWindow* parent,wxWindowID id)
35
: m_LockUpdates(false),
40
//(*Initialize(ProjectPathPanel)
41
wxStaticText* StaticText1;
42
wxStaticText* StaticText4;
43
wxStaticText* StaticText2;
44
wxStaticText* StaticText3;
45
wxStaticText* StaticText5;
47
Create(parent,id,wxDefaultPosition,wxDefaultSize,wxTAB_TRAVERSAL,_T("wxPanel"));
48
BoxSizer1 = new wxBoxSizer(wxVERTICAL);
49
StaticText1 = new wxStaticText(this,ID_STATICTEXT1,_("Please select the folder where you want the new project\nto be created as well as its title."),wxDefaultPosition,wxDefaultSize,0,_T("ID_STATICTEXT1"));
50
BoxSizer1->Add(StaticText1,0,wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
51
StaticText4 = new wxStaticText(this,ID_STATICTEXT4,_("Project title:"),wxDefaultPosition,wxDefaultSize,0,_T("ID_STATICTEXT4"));
52
BoxSizer1->Add(StaticText4,0,wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
53
txtPrjTitle = new wxTextCtrl(this,ID_TEXTCTRL3,wxEmptyString,wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("ID_TEXTCTRL3"));
54
BoxSizer1->Add(txtPrjTitle,0,wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
55
StaticText2 = new wxStaticText(this,ID_STATICTEXT2,_("Folder to create project in:"),wxDefaultPosition,wxDefaultSize,0,_T("ID_STATICTEXT2"));
56
BoxSizer1->Add(StaticText2,0,wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
57
BoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
58
txtPrjPath = new wxTextCtrl(this,ID_TEXTCTRL1,_("Text"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("ID_TEXTCTRL1"));
59
BoxSizer2->Add(txtPrjPath,1,wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL,5);
60
btnPrjPathBrowse = new wxButton(this,ID_BUTTON1,_("..."),wxDefaultPosition,wxSize(22,22),0,wxDefaultValidator,_T("ID_BUTTON1"));
61
BoxSizer2->Add(btnPrjPathBrowse,0,wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL,5);
62
BoxSizer1->Add(BoxSizer2,0,wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
63
StaticText3 = new wxStaticText(this,ID_STATICTEXT3,_("Project filename:"),wxDefaultPosition,wxDefaultSize,0,_T("ID_STATICTEXT3"));
64
BoxSizer1->Add(StaticText3,0,wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
65
txtPrjName = new wxTextCtrl(this,ID_TEXTCTRL2,wxEmptyString,wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("ID_TEXTCTRL2"));
66
BoxSizer1->Add(txtPrjName,0,wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
67
StaticText5 = new wxStaticText(this,ID_STATICTEXT5,_("Resulting filename:"),wxDefaultPosition,wxDefaultSize,0,_T("ID_STATICTEXT5"));
68
BoxSizer1->Add(StaticText5,0,wxLEFT|wxRIGHT|wxALIGN_LEFT|wxALIGN_TOP,8);
69
txtFinalDir = new wxTextCtrl(this,ID_TEXTCTRL4,wxEmptyString,wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("ID_TEXTCTRL4"));
70
BoxSizer1->Add(txtFinalDir,0,wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
73
BoxSizer1->SetSizeHints(this);
74
Connect(ID_TEXTCTRL3,wxEVT_COMMAND_TEXT_UPDATED,(wxObjectEventFunction)&ProjectPathPanel::OntxtPrjTitleText);
75
Connect(ID_TEXTCTRL1,wxEVT_COMMAND_TEXT_UPDATED,(wxObjectEventFunction)&ProjectPathPanel::OnFullPathChanged);
76
Connect(ID_TEXTCTRL2,wxEVT_COMMAND_TEXT_UPDATED,(wxObjectEventFunction)&ProjectPathPanel::OnFullPathChanged);
77
Connect(ID_TEXTCTRL4,wxEVT_COMMAND_TEXT_UPDATED,(wxObjectEventFunction)&ProjectPathPanel::OntxtFinalDirText);
81
ProjectPathPanel::~ProjectPathPanel()
85
void ProjectPathPanel::UpdateFromResulting()
87
if (m_LockUpdates || !txtPrjPath || !txtPrjName || !txtFinalDir || txtFinalDir->GetValue().IsEmpty())
88
return; // not ready yet
91
wxFileName fn = txtFinalDir->GetValue();
92
txtPrjPath->SetValue(fn.GetPath(wxPATH_GET_VOLUME));
93
txtPrjName->SetValue(fn.GetName());
94
m_LockUpdates = false;
97
void ProjectPathPanel::Update()
99
if (m_LockUpdates || !txtPrjPath || !txtPrjName || !txtFinalDir)
100
return; // not ready yet
102
wxString final = txtPrjPath->GetValue();
103
if (!final.IsEmpty())
105
wxFileName fname(txtPrjName->GetValue());
106
wxFileName prjpath(final, wxEmptyString);
107
fname.MakeAbsolute(prjpath.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR) + fname.GetName());
108
final = fname.GetFullPath();
110
if (final.IsEmpty() || txtPrjName->GetValue().IsEmpty())
111
final = _("<invalid path>");
113
m_LockUpdates = true;
114
txtFinalDir->SetValue(final);
115
m_LockUpdates = false;
118
void ProjectPathPanel::OnFullPathChanged(wxCommandEvent& event)
123
void ProjectPathPanel::OntxtFinalDirText(wxCommandEvent& event)
125
if (!txtPrjName->GetValue().StartsWith(_("<invalid path>")))
126
UpdateFromResulting();
129
void ProjectPathPanel::OntxtPrjTitleText(wxCommandEvent& event)
131
wxString prjtitle = txtPrjTitle->GetValue();
132
// Make a check if the project title has any extension or not
133
if (!prjtitle.IsEmpty() &&
134
!prjtitle.Right(4).IsSameAs(FileFilters::CODEBLOCKS_DOT_EXT))
135
prjtitle = prjtitle + FileFilters::CODEBLOCKS_DOT_EXT;
136
txtPrjName->SetValue(prjtitle);
138
// FIXME (Biplab#1#): In Linux, text update event is not thrown
139
if (!platform::windows)