~ubuntu-branches/ubuntu/hardy/codeblocks/hardy-backports

« back to all changes in this revision

Viewing changes to src/plugins/scriptedwizard/filepathpanel.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Michael Casadevall
  • Date: 2008-07-17 04:39:23 UTC
  • Revision ID: james.westby@ubuntu.com-20080717043923-gmsy5cwkdjswghkm
Tags: upstream-8.02
ImportĀ upstreamĀ versionĀ 8.02

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
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
 
4
 *
 
5
 * $Revision$
 
6
 * $Id$
 
7
 * $HeadURL$
 
8
 */
 
9
 
 
10
#include <sdk.h>
 
11
#ifndef CB_PRECOMP
 
12
    #include <wx/filedlg.h>
 
13
    #include <wx/intl.h>
 
14
    #include <cbproject.h>
 
15
    #include <projectbuildtarget.h>
 
16
    #include <projectmanager.h>
 
17
    #include <manager.h>
 
18
#endif
 
19
#include <wx/filefn.h>
 
20
#include "filepathpanel.h"
 
21
 
 
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();
 
34
//*)
 
35
 
 
36
BEGIN_EVENT_TABLE(FilePathPanel,wxPanel)
 
37
    //(*EventTable(FilePathPanel)
 
38
    //*)
 
39
END_EVENT_TABLE()
 
40
 
 
41
FilePathPanel::FilePathPanel(wxWindow* parent,wxWindowID id) :
 
42
    txtFilename(0),
 
43
    btnBrowse(0),
 
44
    lblGuard(0),
 
45
    txtGuard(0),
 
46
    chkAddToProject(0),
 
47
    clbTargets(0),
 
48
                btnAll(0),
 
49
                btnNone(0),
 
50
                m_ExtFilter(_T("")),
 
51
                m_Selection(-1)
 
52
{
 
53
        //(*Initialize(FilePathPanel)
 
54
        wxBoxSizer* BoxSizer1;
 
55
        wxStaticText* StaticText1;
 
56
        wxStaticText* StaticText2;
 
57
        wxStaticText* StaticText4;
 
58
 
 
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"));
 
92
        btnAll->Disable();
 
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"));
 
95
        btnNone->Disable();
 
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);
 
101
        SetSizer(BoxSizer1);
 
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);
 
109
        //*)
 
110
 
 
111
    txtFilename->SetValue(wxEmptyString);
 
112
    txtGuard->SetValue(wxEmptyString);
 
113
 
 
114
    // fill targets list
 
115
    cbProject* prj = Manager::Get()->GetProjectManager()->GetActiveProject();
 
116
    if (prj)
 
117
    {
 
118
        clbTargets->Clear();
 
119
        for (int i = 0; i < prj->GetBuildTargetsCount(); ++i)
 
120
        {
 
121
            ProjectBuildTarget* bt = prj->GetBuildTarget(i);
 
122
            if (bt)
 
123
                clbTargets->Append(bt->GetTitle());
 
124
        }
 
125
        clbTargets->SetSelection(clbTargets->FindString(prj->GetActiveBuildTarget()));
 
126
        chkAddToProject->SetValue(true);
 
127
        ToggleVisibility(true);
 
128
    }
 
129
    else
 
130
    {
 
131
        chkAddToProject->SetValue(false);
 
132
        ToggleVisibility(false);
 
133
    }
 
134
}
 
135
 
 
136
FilePathPanel::~FilePathPanel()
 
137
{
 
138
}
 
139
 
 
140
void FilePathPanel::SetAddToProject(bool add)
 
141
{
 
142
    cbProject* prj = Manager::Get()->GetProjectManager()->GetActiveProject();
 
143
    add = add && prj;
 
144
    chkAddToProject->SetValue(add);
 
145
 
 
146
    ToggleVisibility(add);
 
147
}
 
148
 
 
149
// note : design not so nice because the function is not const !!!
 
150
int FilePathPanel::GetTargetIndex()
 
151
{
 
152
    int selection = -1;
 
153
 
 
154
    if (m_Selection > static_cast<int>(clbTargets->GetCount()) - 2) // (m_Selection >= clbTargets->GetCount()-1)
 
155
    {
 
156
        m_Selection = -1; // Reset -> notify about "last item" with -1
 
157
        return m_Selection;
 
158
    }
 
159
 
 
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)
 
162
    {
 
163
        if (clbTargets->IsChecked(selection))
 
164
            break; // selection found. break for-loop to save item's index
 
165
    }
 
166
 
 
167
    m_Selection = selection; // return current selected items index (-1 if nothing selected)
 
168
 
 
169
    return m_Selection;
 
170
}
 
171
 
 
172
void FilePathPanel::OntxtFilenameText(wxCommandEvent& event)
 
173
{
 
174
    if (!txtFilename || txtFilename->GetValue().IsEmpty())
 
175
        return;
 
176
    wxString name = wxFileNameFromPath(txtFilename->GetValue());
 
177
    while (name.Replace(_T(" "), _T("_")))
 
178
        ;
 
179
    while (name.Replace(_T("\t"), _T("_")))
 
180
        ;
 
181
    while (name.Replace(_T("."), _T("_")))
 
182
        ;
 
183
    name.MakeUpper();
 
184
    name << _T("_INCLUDED");
 
185
    txtGuard->SetValue(name);
 
186
}
 
187
 
 
188
void FilePathPanel::OnbtnBrowseClick(wxCommandEvent& event)
 
189
{
 
190
    cbProject* prj = Manager::Get()->GetProjectManager()->GetActiveProject();
 
191
    wxFileDialog* dlg = new wxFileDialog(this,
 
192
                            _("Select filename"),
 
193
                            prj ? prj->GetBasePath() : _T(""),
 
194
                            txtFilename->GetValue(),
 
195
                            m_ExtFilter,
 
196
                            wxSAVE | wxOVERWRITE_PROMPT);
 
197
    PlaceWindow(dlg);
 
198
    if (dlg->ShowModal() == wxID_OK)
 
199
        txtFilename->SetValue(dlg->GetPath());
 
200
    dlg->Destroy();
 
201
}
 
202
 
 
203
void FilePathPanel::OnchkAddToProjectChange(wxCommandEvent& event)
 
204
{
 
205
    SetAddToProject(event.IsChecked());
 
206
}
 
207
 
 
208
void FilePathPanel::OnbtnAllClick(wxCommandEvent& event)
 
209
{
 
210
    for (int i = 0; i < static_cast<int>(clbTargets->GetCount()); ++i)
 
211
    {
 
212
        clbTargets->Check(i, true);
 
213
    }
 
214
} // end of OnbtnAllClick
 
215
 
 
216
void FilePathPanel::OnbtnNoneClick(wxCommandEvent& event)
 
217
{
 
218
    for (int i = 0; i < static_cast<int>(clbTargets->GetCount()); ++i)
 
219
    {
 
220
        clbTargets->Check(i, false);
 
221
    }
 
222
} // end of OnbtnNoneClick
 
223
 
 
224
void FilePathPanel::ToggleVisibility(bool on)
 
225
{
 
226
    clbTargets->Enable(on);
 
227
    btnAll->Enable(on);
 
228
    btnNone->Enable(on);
 
229
}