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

« back to all changes in this revision

Viewing changes to src/plugins/scriptedwizard/projectpathpanel.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 "projectpathpanel.h"
 
11
#include <prep.h>
 
12
#include <filefilters.h>
 
13
#include <wx/filename.h>
 
14
#include <wx/intl.h>
 
15
 
 
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();
 
27
//*)
 
28
 
 
29
BEGIN_EVENT_TABLE(ProjectPathPanel,wxPanel)
 
30
        //(*EventTable(ProjectPathPanel)
 
31
        //*)
 
32
END_EVENT_TABLE()
 
33
 
 
34
ProjectPathPanel::ProjectPathPanel(wxWindow* parent,wxWindowID id)
 
35
    : m_LockUpdates(false),
 
36
    txtPrjPath(0),
 
37
    txtPrjName(0),
 
38
    txtFinalDir(0)
 
39
{
 
40
        //(*Initialize(ProjectPathPanel)
 
41
        wxStaticText* StaticText1;
 
42
        wxStaticText* StaticText4;
 
43
        wxStaticText* StaticText2;
 
44
        wxStaticText* StaticText3;
 
45
        wxStaticText* StaticText5;
 
46
 
 
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);
 
71
        SetSizer(BoxSizer1);
 
72
        BoxSizer1->Fit(this);
 
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);
 
78
        //*)
 
79
}
 
80
 
 
81
ProjectPathPanel::~ProjectPathPanel()
 
82
{
 
83
}
 
84
 
 
85
void ProjectPathPanel::UpdateFromResulting()
 
86
{
 
87
    if (m_LockUpdates || !txtPrjPath || !txtPrjName || !txtFinalDir || txtFinalDir->GetValue().IsEmpty())
 
88
        return; // not ready yet
 
89
 
 
90
    m_LockUpdates = true;
 
91
    wxFileName fn = txtFinalDir->GetValue();
 
92
    txtPrjPath->SetValue(fn.GetPath(wxPATH_GET_VOLUME));
 
93
    txtPrjName->SetValue(fn.GetName());
 
94
    m_LockUpdates = false;
 
95
}
 
96
 
 
97
void ProjectPathPanel::Update()
 
98
{
 
99
    if (m_LockUpdates || !txtPrjPath || !txtPrjName || !txtFinalDir)
 
100
        return; // not ready yet
 
101
 
 
102
    wxString final = txtPrjPath->GetValue();
 
103
    if (!final.IsEmpty())
 
104
    {
 
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();
 
109
    }
 
110
    if (final.IsEmpty() || txtPrjName->GetValue().IsEmpty())
 
111
        final = _("<invalid path>");
 
112
 
 
113
    m_LockUpdates = true;
 
114
    txtFinalDir->SetValue(final);
 
115
    m_LockUpdates = false;
 
116
}
 
117
 
 
118
void ProjectPathPanel::OnFullPathChanged(wxCommandEvent& event)
 
119
{
 
120
    Update();
 
121
}
 
122
 
 
123
void ProjectPathPanel::OntxtFinalDirText(wxCommandEvent& event)
 
124
{
 
125
    if (!txtPrjName->GetValue().StartsWith(_("<invalid path>")))
 
126
        UpdateFromResulting();
 
127
}
 
128
 
 
129
void ProjectPathPanel::OntxtPrjTitleText(wxCommandEvent& event)
 
130
{
 
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);
 
137
 
 
138
// FIXME (Biplab#1#): In Linux, text update event is not thrown
 
139
    if (!platform::windows)
 
140
        Update();
 
141
}