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
12
#include <wx/filedlg.h>
14
#include <cbproject.h>
15
#include <projectbuildtarget.h>
16
#include <projectmanager.h>
19
#include <wx/filefn.h>
20
#include "filepathpanel.h"
22
//(*IdInit(FilePathPanel)
23
const long FilePathPanel::ID_STATICTEXT1 = wxNewId();
24
const long FilePathPanel::ID_STATICTEXT2 = wxNewId();
25
const long FilePathPanel::ID_TEXTCTRL1 = wxNewId();
26
const long FilePathPanel::ID_BUTTON1 = wxNewId();
27
const long FilePathPanel::ID_STATICTEXT3 = wxNewId();
28
const long FilePathPanel::ID_TEXTCTRL2 = wxNewId();
29
const long FilePathPanel::ID_CHECKBOX1 = wxNewId();
30
const long FilePathPanel::ID_STATICTEXT4 = wxNewId();
31
const long FilePathPanel::ID_CHECKLISTBOX2 = wxNewId();
32
const long FilePathPanel::ID_BUTTON2 = wxNewId();
33
const long FilePathPanel::ID_BUTTON3 = wxNewId();
36
BEGIN_EVENT_TABLE(FilePathPanel,wxPanel)
37
//(*EventTable(FilePathPanel)
41
FilePathPanel::FilePathPanel(wxWindow* parent,wxWindowID id) :
53
//(*Initialize(FilePathPanel)
54
wxBoxSizer* BoxSizer1;
55
wxStaticText* StaticText1;
56
wxStaticText* StaticText2;
57
wxStaticText* StaticText4;
59
Create(parent,id,wxDefaultPosition,wxDefaultSize,wxTAB_TRAVERSAL,_T("wxPanel"));
60
BoxSizer1 = new wxBoxSizer(wxVERTICAL);
61
StaticText1 = new wxStaticText(this,ID_STATICTEXT1,_("Please enter the file\'s location and name and\nwhether to add it to the active project."),wxDefaultPosition,wxDefaultSize,0,_T("ID_STATICTEXT1"));
62
BoxSizer1->Add(StaticText1,0,wxALL|wxALIGN_LEFT|wxALIGN_TOP,8);
63
StaticText2 = new wxStaticText(this,ID_STATICTEXT2,_("Filename with full path:"),wxDefaultPosition,wxDefaultSize,0,_T("ID_STATICTEXT2"));
64
BoxSizer1->Add(StaticText2,0,wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
65
BoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
66
txtFilename = new wxTextCtrl(this,ID_TEXTCTRL1,_("Text"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("ID_TEXTCTRL1"));
67
BoxSizer2->Add(txtFilename,1,wxALL|wxALIGN_LEFT|wxALIGN_TOP,0);
68
btnBrowse = new wxButton(this,ID_BUTTON1,_("..."),wxDefaultPosition,wxSize(22,22),0,wxDefaultValidator,_T("ID_BUTTON1"));
69
BoxSizer2->Add(btnBrowse,0,wxALL|wxALIGN_LEFT|wxALIGN_TOP,0);
70
BoxSizer1->Add(BoxSizer2,0,wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
71
lblGuard = new wxStaticText(this,ID_STATICTEXT3,_("Header guard word:"),wxDefaultPosition,wxDefaultSize,0,_T("ID_STATICTEXT3"));
72
BoxSizer1->Add(lblGuard,0,wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
73
txtGuard = new wxTextCtrl(this,ID_TEXTCTRL2,_("Text"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("ID_TEXTCTRL2"));
74
BoxSizer1->Add(txtGuard,0,wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
75
BoxSizer1->Add(-1,-1,0,wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,0);
76
chkAddToProject = new wxCheckBox(this,ID_CHECKBOX1,_("Add file to active project"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("ID_CHECKBOX1"));
77
chkAddToProject->SetValue(false);
78
BoxSizer1->Add(chkAddToProject,0,wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
79
FlexGridSizer1 = new wxFlexGridSizer(0,2,0,0);
80
FlexGridSizer1->AddGrowableCol(1);
81
FlexGridSizer1->AddGrowableRow(1);
82
FlexGridSizer1->Add(16,16,0,wxALL|wxALIGN_LEFT|wxALIGN_TOP,0);
83
StaticText4 = new wxStaticText(this,ID_STATICTEXT4,_("In build target(s):"),wxDefaultPosition,wxDefaultSize,0,_T("ID_STATICTEXT4"));
84
FlexGridSizer1->Add(StaticText4,0,wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,0);
85
FlexGridSizer1->Add(16,16,0,wxALL|wxALIGN_LEFT|wxALIGN_TOP,0);
86
clbTargets = new wxCheckListBox(this,ID_CHECKLISTBOX2,wxDefaultPosition,wxSize(222,111),0,NULL,wxLB_HSCROLL|wxLB_SINGLE,wxDefaultValidator,_T("ID_CHECKLISTBOX2"));
87
clbTargets->Disable();
88
FlexGridSizer1->Add(clbTargets,1,wxALL|wxEXPAND|wxFIXED_MINSIZE|wxALIGN_LEFT|wxALIGN_TOP,0);
89
FlexGridSizer1->Add(16,16,0,wxALL|wxALIGN_LEFT|wxALIGN_TOP,0);
90
BoxSizer6 = new wxBoxSizer(wxHORIZONTAL);
91
btnAll = new wxButton(this,ID_BUTTON2,_("All"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("ID_BUTTON2"));
93
BoxSizer6->Add(btnAll,0,wxRIGHT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL,4);
94
btnNone = new wxButton(this,ID_BUTTON3,_("None"),wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,_T("ID_BUTTON3"));
96
BoxSizer6->Add(btnNone,0,wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL,0);
97
FlexGridSizer1->Add(BoxSizer6,0,wxALL|wxALIGN_RIGHT|wxALIGN_TOP,0);
98
BoxSizer1->Add(FlexGridSizer1,1,wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL,8);
99
BoxSizer3 = new wxBoxSizer(wxVERTICAL);
100
BoxSizer1->Add(BoxSizer3,0,wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_TOP,8);
102
BoxSizer1->Fit(this);
103
BoxSizer1->SetSizeHints(this);
104
Connect(ID_TEXTCTRL1,wxEVT_COMMAND_TEXT_UPDATED,(wxObjectEventFunction)&FilePathPanel::OntxtFilenameText);
105
Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&FilePathPanel::OnbtnBrowseClick);
106
Connect(ID_CHECKBOX1,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&FilePathPanel::OnchkAddToProjectChange);
107
Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&FilePathPanel::OnbtnAllClick);
108
Connect(ID_BUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&FilePathPanel::OnbtnNoneClick);
111
txtFilename->SetValue(wxEmptyString);
112
txtGuard->SetValue(wxEmptyString);
115
cbProject* prj = Manager::Get()->GetProjectManager()->GetActiveProject();
119
for (int i = 0; i < prj->GetBuildTargetsCount(); ++i)
121
ProjectBuildTarget* bt = prj->GetBuildTarget(i);
123
clbTargets->Append(bt->GetTitle());
125
clbTargets->SetSelection(clbTargets->FindString(prj->GetActiveBuildTarget()));
126
chkAddToProject->SetValue(true);
127
ToggleVisibility(true);
131
chkAddToProject->SetValue(false);
132
ToggleVisibility(false);
136
FilePathPanel::~FilePathPanel()
140
void FilePathPanel::SetAddToProject(bool add)
142
cbProject* prj = Manager::Get()->GetProjectManager()->GetActiveProject();
144
chkAddToProject->SetValue(add);
146
ToggleVisibility(add);
149
// note : design not so nice because the function is not const !!!
150
int FilePathPanel::GetTargetIndex()
154
if (m_Selection > static_cast<int>(clbTargets->GetCount()) - 2) // (m_Selection >= clbTargets->GetCount()-1)
156
m_Selection = -1; // Reset -> notify about "last item" with -1
160
// start with next (x+1) or first (-1+1 = 0) item
161
for (selection = m_Selection + 1; selection < static_cast<int>(clbTargets->GetCount()); ++selection)
163
if (clbTargets->IsChecked(selection))
164
break; // selection found. break for-loop to save item's index
167
m_Selection = selection; // return current selected items index (-1 if nothing selected)
172
void FilePathPanel::OntxtFilenameText(wxCommandEvent& event)
174
if (!txtFilename || txtFilename->GetValue().IsEmpty())
176
wxString name = wxFileNameFromPath(txtFilename->GetValue());
177
while (name.Replace(_T(" "), _T("_")))
179
while (name.Replace(_T("\t"), _T("_")))
181
while (name.Replace(_T("."), _T("_")))
184
name << _T("_INCLUDED");
185
txtGuard->SetValue(name);
188
void FilePathPanel::OnbtnBrowseClick(wxCommandEvent& event)
190
cbProject* prj = Manager::Get()->GetProjectManager()->GetActiveProject();
191
wxFileDialog* dlg = new wxFileDialog(this,
192
_("Select filename"),
193
prj ? prj->GetBasePath() : _T(""),
194
txtFilename->GetValue(),
196
wxSAVE | wxOVERWRITE_PROMPT);
198
if (dlg->ShowModal() == wxID_OK)
199
txtFilename->SetValue(dlg->GetPath());
203
void FilePathPanel::OnchkAddToProjectChange(wxCommandEvent& event)
205
SetAddToProject(event.IsChecked());
208
void FilePathPanel::OnbtnAllClick(wxCommandEvent& event)
210
for (int i = 0; i < static_cast<int>(clbTargets->GetCount()); ++i)
212
clbTargets->Check(i, true);
214
} // end of OnbtnAllClick
216
void FilePathPanel::OnbtnNoneClick(wxCommandEvent& event)
218
for (int i = 0; i < static_cast<int>(clbTargets->GetCount()); ++i)
220
clbTargets->Check(i, false);
222
} // end of OnbtnNoneClick
224
void FilePathPanel::ToggleVisibility(bool on)
226
clbTargets->Enable(on);