1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// copyright : (C) 2008 by Eran Ifrah
// file name : newworkspacedlg.cpp
//
// -------------------------------------------------------------------------
// A
// _____ _ _ _ _
// / __ \ | | | | (_) |
// | / \/ ___ __| | ___| | _| |_ ___
// | | / _ \ / _ |/ _ \ | | | __/ _ )
// | \__/\ (_) | (_| | __/ |___| | || __/
// \____/\___/ \__,_|\___\_____/_|\__\___|
//
// F i l e
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#include "cl_config.h"
#include "cl_standard_paths.h"
#include "globals.h"
#include "newworkspacedlg.h"
#include "windowattrmanager.h"
#include "wx/dirdlg.h"
#include "wx/filename.h"
#include "wx/msgdlg.h"
NewWorkspaceDlg::NewWorkspaceDlg(wxWindow* parent)
: NewWorkspaceBase(parent)
{
wxArrayString history;
history = clConfig::Get().Read("C++NewWorkspace/Paths", history);
wxString defaultPath =
clConfig::Get().Read("C++NewWorkspace/DefaultLocation", clStandardPaths::Get().GetDocumentsDir());
m_comboBoxPath->SetValue(defaultPath);
m_comboBoxPath->Append(history);
m_textCtrlWorkspaceName->SetFocus();
::clSetSmallDialogBestSizeAndPosition(this);
}
NewWorkspaceDlg::~NewWorkspaceDlg()
{
// store the recent locations, we keep up to 20 locations
wxArrayString history = m_comboBoxPath->GetStrings();
history.Insert(m_comboBoxPath->GetValue(),
0); // Place the current value at the top so we make sure it gets stored in the history
wxArrayString uniqueArr;
for(size_t i = 0; i < history.size(); ++i) {
if(uniqueArr.Index(history.Item(i)) == wxNOT_FOUND && (uniqueArr.size() < 20)) {
uniqueArr.Add(history.Item(i));
}
}
clConfig::Get().Write("C++NewWorkspace/Paths", uniqueArr);
clConfig::Get().Write("C++NewWorkspace/DefaultLocation", m_comboBoxPath->GetValue());
}
void NewWorkspaceDlg::OnWorkspacePathUpdated(wxCommandEvent& event)
{
wxUnusedVar(event);
// set the workspace name to the last directory part
// but only if the user did not set the name manually
if(!m_manualNameTyped) {
wxFileName fnPath(m_comboBoxPath->GetValue(), "");
if(fnPath.GetDirCount()) { m_textCtrlWorkspaceName->ChangeValue(fnPath.GetDirs().Last()); }
}
DoUpdateFilePath();
}
void NewWorkspaceDlg::OnWorkspaceDirPicker(wxCommandEvent& event)
{
const wxString& dir = ::wxDirSelector(_("Choose a folder:"), m_comboBoxPath->GetValue());
if(!dir.empty()) {
static wxString INVALID_CHARS = " ,'()";
if(dir.find_first_of(INVALID_CHARS) != wxString::npos) {
int answer = ::wxMessageBox(wxString() << _("The selected project path '") << dir
<< _("'\nContains some invalid characters\nContinue anyways?"),
"CodeLite", wxYES_NO | wxCANCEL | wxICON_WARNING, this);
if(answer != wxYES) { return; }
}
// Use SetValue to ensure that an TEXT_UPDATE event is fired
m_comboBoxPath->SetValue(dir);
}
}
void NewWorkspaceDlg::OnButtonCreate(wxCommandEvent& event)
{
// validate that the path part is valid
m_workspacePath = m_staticTextWorkspaceFileName->GetLabel();
wxFileName fn(m_workspacePath);
if(m_checkBoxCreateSeparateDir->IsChecked()) {
// dont test the result
fn.Mkdir(fn.GetPath(), 0777, wxPATH_MKDIR_FULL);
}
if(!wxDirExists(fn.GetPath())) {
wxMessageBox(_("Invalid path: ") + fn.GetPath(), _("Error"), wxOK | wxICON_HAND);
return;
}
EndModal(wxID_OK);
}
void NewWorkspaceDlg::OnOKUI(wxUpdateUIEvent& event)
{
wxFileName fnWspFile(m_staticTextWorkspaceFileName->GetLabel());
event.Enable(fnWspFile.IsOk() && !fnWspFile.FileExists());
}
void NewWorkspaceDlg::OnWorkspaceNameUpdated(wxCommandEvent& event)
{
wxUnusedVar(event);
DoUpdateFilePath();
m_manualNameTyped = true;
}
void NewWorkspaceDlg::DoUpdateFilePath()
{
// update the static text control with the actual path
wxString workspacePath;
workspacePath << m_comboBoxPath->GetValue();
workspacePath = workspacePath.Trim().Trim(false);
wxString tmpSep(wxFileName::GetPathSeparator());
if(!workspacePath.EndsWith(tmpSep) && workspacePath.IsEmpty() == false) {
workspacePath << wxFileName::GetPathSeparator();
}
if(m_textCtrlWorkspaceName->GetValue().Trim().Trim(false).IsEmpty()) {
m_staticTextWorkspaceFileName->SetLabel(wxEmptyString);
return;
}
if(m_checkBoxCreateSeparateDir->IsChecked()) {
workspacePath << m_textCtrlWorkspaceName->GetValue();
workspacePath << wxFileName::GetPathSeparator();
}
workspacePath << m_textCtrlWorkspaceName->GetValue();
workspacePath << wxT(".workspace");
m_staticTextWorkspaceFileName->SetLabel(workspacePath);
if(wxFileName::FileExists(workspacePath)) {
m_infobar->ShowMessage(_("A workspace file with this name already exists"), wxICON_WARNING);
} else {
m_infobar->Hide();
}
SendSizeEvent();
}
|