Index: selecttargetdlg.cpp
===================================================================
--- selecttargetdlg.cpp (revision 4934)
+++ selecttargetdlg.cpp (working copy)
@@ -21,18 +21,30 @@
#include "cbproject.h"
#endif
#include <wx/filedlg.h>
+#include <wx/valgen.h>
#include "selecttargetdlg.h"
+struct SelectTargetStruct
+{
+ wxString txtBuildTarget;
+ bool isSetAsDefaultExec;
+ wxString txtParams;
+ wxString txtHostApp;
+};
+
+
+#include <wx/arrimpl.cpp>
+WX_DEFINE_OBJARRAY(ArrayOfSelectTargetStruct);
+
+
BEGIN_EVENT_TABLE(SelectTargetDlg, wxDialog)
- EVT_CHECKBOX(XRCID("chkSetAsDefaultExec"), SelectTargetDlg::OnCheckboxSelection)
EVT_LISTBOX(XRCID("lstItems"), SelectTargetDlg::OnListboxSelection)
- EVT_LISTBOX_DCLICK(XRCID("lstItems"), SelectTargetDlg::OnListboxDClick)
+ EVT_LISTBOX_DCLICK(XRCID("lstItems"), SelectTargetDlg::OnListboxSelection)
EVT_BUTTON(XRCID("btnHostApplication"), SelectTargetDlg::OnHostApplicationButtonClick)
END_EVENT_TABLE()
SelectTargetDlg::SelectTargetDlg(wxWindow* parent, cbProject* project, int selected)
- : m_pProject(project),
- m_Selected(selected)
+ : m_Selected(-1), m_pProject(project)
{
//ctor
wxXmlResource::Get()->LoadDialog(this, parent, _T("dlgSelectTarget"));
@@ -43,14 +55,20 @@
{
ProjectBuildTarget* target = m_pProject->GetBuildTarget(i);
list->Append(target->GetTitle());
+ //Add project param to array
+ SelectTargetStruct t;
+ t.txtBuildTarget = target->GetTitle();
+ t.isSetAsDefaultExec = (target->GetTitle() == m_pProject->GetDefaultExecuteTarget());
+ t.txtParams = target->GetExecutionParameters();
+ t.txtHostApp = target->GetHostApplication();
+ m_ProjectParam.Add(t);
}
- if (selected != -1)
- list->SetSelection(selected);
+ if (!m_pProject->GetDefaultExecuteTarget().IsEmpty())
+ list->SetStringSelection(m_pProject->GetDefaultExecuteTarget());
else
- list->SetSelection(list->FindString(m_pProject->GetDefaultExecuteTarget()));
+ list->SetStringSelection(project->GetActiveBuildTarget());
UpdateSelected();
- XRCCTRL(*this, "wxID_OK", wxButton)->MoveBeforeInTabOrder (XRCCTRL(*this, "lstItems", wxListBox));
}
SelectTargetDlg::~SelectTargetDlg()
@@ -60,22 +78,41 @@
void SelectTargetDlg::UpdateSelected()
{
- wxString name = XRCCTRL(*this, "lstItems", wxListBox)->GetStringSelection();
- ProjectBuildTarget* target = m_pProject->GetBuildTarget(name);
- if (target)
+ //Save data in m_ProjectParam array
+ TransferDataFromWindow();
+
+ //Remove default check from other target
+ if (m_Selected != -1 && m_ProjectParam[m_Selected].isSetAsDefaultExec)
{
- XRCCTRL(*this, "chkSetAsDefaultExec", wxCheckBox)->SetValue(name == m_pProject->GetDefaultExecuteTarget());
- XRCCTRL(*this, "txtParams", wxTextCtrl)->SetValue(target->GetExecutionParameters());
- XRCCTRL(*this, "txtHostApp", wxTextCtrl)->SetValue(target->GetHostApplication());
+ //Uncheck all options except selected
+ for (size_t i = 0; i < m_ProjectParam.Count(); ++i)
+ {
+ if ((int)i != m_Selected)
+ m_ProjectParam[i].isSetAsDefaultExec = false;
+ }
}
- XRCCTRL(*this, "wxID_OK", wxButton)->Enable(target);
+
+ //Check list for empty (if this dialog show on empty project)
+ if (m_ProjectParam.Count() == 0)
+ return;
+
+ //Get current elem
+ m_Selected = XRCCTRL(*this, "lstItems", wxListBox)->GetSelection();
+ if (m_Selected==wxNOT_FOUND)
+ {
+ XRCCTRL(*this, "lstItems", wxListBox)->SetSelection(0);
+ m_Selected = 0;
+ }
+
+ //Set new validator
+ XRCCTRL(*this, "chkSetAsDefaultExec", wxCheckBox)->SetValidator(wxGenericValidator(&m_ProjectParam[m_Selected].isSetAsDefaultExec));
+ XRCCTRL(*this, "txtParams", wxTextCtrl)->SetValidator(wxGenericValidator(&m_ProjectParam[m_Selected].txtParams));
+ XRCCTRL(*this, "txtHostApp", wxTextCtrl)->SetValidator(wxGenericValidator(&m_ProjectParam[m_Selected].txtHostApp));
+
+ //Update data
+ TransferDataToWindow();
} // end of UpdateSelected
-ProjectBuildTarget* SelectTargetDlg::GetSelectionTarget()
-{
- return m_pProject->GetBuildTarget(m_Selected);
-}
-
// events
void SelectTargetDlg::OnListboxSelection(wxCommandEvent& /*event*/)
@@ -83,21 +120,6 @@
UpdateSelected();
} // end of OnListboxSelection
-void SelectTargetDlg::OnListboxDClick(wxCommandEvent& /*event*/)
-{
- UpdateSelected();
- EndModal(wxID_OK);
-} // end of OnListboxDClick
-
-void SelectTargetDlg::OnCheckboxSelection(wxCommandEvent& /*event*/)
-{
- if (XRCCTRL(*this, "chkSetAsDefaultExec", wxCheckBox)->GetValue())
- {
- wxString name = XRCCTRL(*this, "lstItems", wxListBox)->GetStringSelection();
- m_pProject->SetDefaultExecuteTarget(name);
- }
-} // end of OnCheckboxSelection
-
void SelectTargetDlg::OnHostApplicationButtonClick(wxCommandEvent& /*event*/)
{
if(wxTextCtrl* obj = XRCCTRL(*this, "txtHostApp", wxTextCtrl))
@@ -111,7 +133,7 @@
#else
_("All files (*)|*"),
#endif
- wxOPEN | wxFILE_MUST_EXIST | compatibility::wxHideReadonly);
+ wxOPEN | wxFILE_MUST_EXIST);
dlg->SetFilterIndex(0);
PlaceWindow(dlg);
if (dlg->ShowModal() != wxID_OK)
@@ -123,26 +145,26 @@
void SelectTargetDlg::EndModal(int retCode)
{
+ UpdateSelected();
if (retCode == wxID_OK)
{
- m_Selected = XRCCTRL(*this, "lstItems", wxListBox)->GetSelection();
- ProjectBuildTarget* target = m_pProject->GetBuildTarget(m_Selected);
- if (target)
- {
- // Search all '\n' in the program-parameters and replace them by
- // ' '. This is necessary because a multiline text control may add
- // '\n' to the text but these characters must not be part of the
- // parameters when executing the program.
- wxString execution_parameters = XRCCTRL(*this, "txtParams", wxTextCtrl)->GetValue();
- wxString::size_type pos = 0;
+ m_pProject->SetDefaultExecuteTarget(wxEmptyString);
+ for (size_t i = 0; i < m_ProjectParam.Count(); ++i)
+ {
+ ProjectBuildTarget* target = m_pProject->GetBuildTarget(i);
+ // Search all '\n' in the program-parameters and replace them by
+ // ' '. This is necessary because a multiline text control may add
+ // '\n' to the text but these characters must not be part of the
+ // parameters when executing the program.
+ m_ProjectParam[i].txtParams.Replace(wxT("\n"), wxT(" "));
- while ((pos = execution_parameters.find('\n', pos)) != wxString::npos)
- {
- execution_parameters[pos] = ' ';
- }
- target->SetExecutionParameters(execution_parameters);
- target->SetHostApplication(XRCCTRL(*this, "txtHostApp", wxTextCtrl)->GetValue());
- }
+ target->SetExecutionParameters(m_ProjectParam[i].txtParams);
+ target->SetHostApplication(m_ProjectParam[i].txtHostApp);
+ if (m_ProjectParam[i].isSetAsDefaultExec)
+ {
+ m_pProject->SetDefaultExecuteTarget(m_ProjectParam[i].txtBuildTarget);
+ }
+ }
}
wxDialog::EndModal(retCode);
} // end of EndModal
Index: src/include/selecttargetdlg.h
===================================================================
--- src/include/selecttargetdlg.h (revision 4921)
+++ src/include/selecttargetdlg.h (working copy)
@@ -7,10 +7,17 @@
#define SELECTTARGETDLG_H
#include <wx/dialog.h>
+#include <wx/dynarray.h>
class cbProject;
class ProjectBuildTarget;
+//Forward declaration for internal class storage
+class SelectTargetStruct;
+
+WX_DECLARE_OBJARRAY(SelectTargetStruct, ArrayOfSelectTargetStruct);
+
+//Dialog class for "Set program argument" menu item
class SelectTargetDlg : public wxDialog
{
public:
@@ -19,15 +26,14 @@
void EndModal(int retCode);
int GetSelection() const { return m_Selected; }
- ProjectBuildTarget* GetSelectionTarget();
private:
void OnListboxSelection(wxCommandEvent& event);
- void OnListboxDClick(wxCommandEvent& event);
- void OnCheckboxSelection(wxCommandEvent& event);
void OnHostApplicationButtonClick(wxCommandEvent& event);
void UpdateSelected();
+
+ int m_Selected;
cbProject* m_pProject;
- int m_Selected;
+ ArrayOfSelectTargetStruct m_ProjectParam;
DECLARE_EVENT_TABLE()
};
Index: projectmanager.cpp
===================================================================
--- projectmanager.cpp (revision 4934)
+++ projectmanager.cpp (working copy)
@@ -1402,7 +1402,7 @@
for (int i = 0; i < count; ++i)
array.Add(prj->GetBuildTarget(i)->GetTitle());
- MultiSelectDlg dlg(0, array, false, _("Select the targets this file should belong to:"));
+ MultiSelectDlg dlg(0, array, true, _("Select the targets this file should belong to:"));
PlaceWindow(&dlg);
if (dlg.ShowModal() == wxID_OK)
indices = dlg.GetSelectedIndices();
@@ -2021,7 +2021,7 @@
}
wxString msg;
msg.Printf(_("Select files to remove from %s:"), prj->GetTitle().c_str());
- MultiSelectDlg dlg(0, files, false, msg);
+ MultiSelectDlg dlg(0, files, true, msg);
PlaceWindow(&dlg);
if (dlg.ShowModal() == wxID_OK)
{
??? This has nothing to do with what you have in mind. And (inf fact) it introduced an UI "bug" on certain systems.Code- wxOPEN | wxFILE_MUST_EXIST | compatibility::wxHideReadonly);
+ wxOPEN | wxFILE_MUST_EXIST);
Probably I should just apply the patch once to see in more detail.Dammed. I cannot apply this patch. When looking into the first patch of your last post than it is obvious why: You have selecttargetdlg.cpp there directly, so you require to be into the src/sdk folder and later comes src/include/selecttargetdlg.h which requires to be in the root folder... will try to fix that on my machine...
Index: src/sdk/selecttargetdlg.cpp
===================================================================
--- src/sdk/selecttargetdlg.cpp (revision 4934)
+++ src/sdk/selecttargetdlg.cpp (working copy)
@@ -21,18 +21,30 @@
#include "cbproject.h"
#endif
#include <wx/filedlg.h>
+#include <wx/valgen.h>
#include "selecttargetdlg.h"
+struct SelectTargetStruct
+{
+ wxString txtBuildTarget;
+ bool isSetAsDefaultExec;
+ wxString txtParams;
+ wxString txtHostApp;
+};
+
+
+#include <wx/arrimpl.cpp>
+WX_DEFINE_OBJARRAY(ArrayOfSelectTargetStruct);
+
+
BEGIN_EVENT_TABLE(SelectTargetDlg, wxDialog)
- EVT_CHECKBOX(XRCID("chkSetAsDefaultExec"), SelectTargetDlg::OnCheckboxSelection)
EVT_LISTBOX(XRCID("lstItems"), SelectTargetDlg::OnListboxSelection)
- EVT_LISTBOX_DCLICK(XRCID("lstItems"), SelectTargetDlg::OnListboxDClick)
+ EVT_LISTBOX_DCLICK(XRCID("lstItems"), SelectTargetDlg::OnListboxSelection)
EVT_BUTTON(XRCID("btnHostApplication"), SelectTargetDlg::OnHostApplicationButtonClick)
END_EVENT_TABLE()
SelectTargetDlg::SelectTargetDlg(wxWindow* parent, cbProject* project, int selected)
- : m_pProject(project),
- m_Selected(selected)
+ : m_Selected(-1), m_pProject(project)
{
//ctor
wxXmlResource::Get()->LoadDialog(this, parent, _T("dlgSelectTarget"));
@@ -43,14 +55,20 @@
{
ProjectBuildTarget* target = m_pProject->GetBuildTarget(i);
list->Append(target->GetTitle());
+ //Add project param to array
+ SelectTargetStruct t;
+ t.txtBuildTarget = target->GetTitle();
+ t.isSetAsDefaultExec = (target->GetTitle() == m_pProject->GetDefaultExecuteTarget());
+ t.txtParams = target->GetExecutionParameters();
+ t.txtHostApp = target->GetHostApplication();
+ m_ProjectParam.Add(t);
}
- if (selected != -1)
- list->SetSelection(selected);
+ if (!m_pProject->GetDefaultExecuteTarget().IsEmpty())
+ list->SetStringSelection(m_pProject->GetDefaultExecuteTarget());
else
- list->SetSelection(list->FindString(m_pProject->GetDefaultExecuteTarget()));
+ list->SetStringSelection(project->GetActiveBuildTarget());
UpdateSelected();
- XRCCTRL(*this, "wxID_OK", wxButton)->MoveBeforeInTabOrder (XRCCTRL(*this, "lstItems", wxListBox));
}
SelectTargetDlg::~SelectTargetDlg()
@@ -60,22 +78,41 @@
void SelectTargetDlg::UpdateSelected()
{
- wxString name = XRCCTRL(*this, "lstItems", wxListBox)->GetStringSelection();
- ProjectBuildTarget* target = m_pProject->GetBuildTarget(name);
- if (target)
+ //Save data in m_ProjectParam array
+ TransferDataFromWindow();
+
+ //Remove default check from other target
+ if (m_Selected != -1 && m_ProjectParam[m_Selected].isSetAsDefaultExec)
{
- XRCCTRL(*this, "chkSetAsDefaultExec", wxCheckBox)->SetValue(name == m_pProject->GetDefaultExecuteTarget());
- XRCCTRL(*this, "txtParams", wxTextCtrl)->SetValue(target->GetExecutionParameters());
- XRCCTRL(*this, "txtHostApp", wxTextCtrl)->SetValue(target->GetHostApplication());
+ //Uncheck all options except selected
+ for (size_t i = 0; i < m_ProjectParam.Count(); ++i)
+ {
+ if ((int)i != m_Selected)
+ m_ProjectParam[i].isSetAsDefaultExec = false;
+ }
}
- XRCCTRL(*this, "wxID_OK", wxButton)->Enable(target);
+
+ //Check list for empty (if this dialog show on empty project)
+ if (m_ProjectParam.Count() == 0)
+ return;
+
+ //Get current elem
+ m_Selected = XRCCTRL(*this, "lstItems", wxListBox)->GetSelection();
+ if (m_Selected==wxNOT_FOUND)
+ {
+ XRCCTRL(*this, "lstItems", wxListBox)->SetSelection(0);
+ m_Selected = 0;
+ }
+
+ //Set new validator
+ XRCCTRL(*this, "chkSetAsDefaultExec", wxCheckBox)->SetValidator(wxGenericValidator(&m_ProjectParam[m_Selected].isSetAsDefaultExec));
+ XRCCTRL(*this, "txtParams", wxTextCtrl)->SetValidator(wxGenericValidator(&m_ProjectParam[m_Selected].txtParams));
+ XRCCTRL(*this, "txtHostApp", wxTextCtrl)->SetValidator(wxGenericValidator(&m_ProjectParam[m_Selected].txtHostApp));
+
+ //Update data
+ TransferDataToWindow();
} // end of UpdateSelected
-ProjectBuildTarget* SelectTargetDlg::GetSelectionTarget()
-{
- return m_pProject->GetBuildTarget(m_Selected);
-}
-
// events
void SelectTargetDlg::OnListboxSelection(wxCommandEvent& /*event*/)
@@ -83,21 +120,6 @@
UpdateSelected();
} // end of OnListboxSelection
-void SelectTargetDlg::OnListboxDClick(wxCommandEvent& /*event*/)
-{
- UpdateSelected();
- EndModal(wxID_OK);
-} // end of OnListboxDClick
-
-void SelectTargetDlg::OnCheckboxSelection(wxCommandEvent& /*event*/)
-{
- if (XRCCTRL(*this, "chkSetAsDefaultExec", wxCheckBox)->GetValue())
- {
- wxString name = XRCCTRL(*this, "lstItems", wxListBox)->GetStringSelection();
- m_pProject->SetDefaultExecuteTarget(name);
- }
-} // end of OnCheckboxSelection
-
void SelectTargetDlg::OnHostApplicationButtonClick(wxCommandEvent& /*event*/)
{
if(wxTextCtrl* obj = XRCCTRL(*this, "txtHostApp", wxTextCtrl))
@@ -111,7 +133,7 @@
#else
_("All files (*)|*"),
#endif
- wxOPEN | wxFILE_MUST_EXIST | compatibility::wxHideReadonly);
+ wxOPEN | wxFILE_MUST_EXIST);
dlg->SetFilterIndex(0);
PlaceWindow(dlg);
if (dlg->ShowModal() != wxID_OK)
@@ -123,26 +145,26 @@
void SelectTargetDlg::EndModal(int retCode)
{
+ UpdateSelected();
if (retCode == wxID_OK)
{
- m_Selected = XRCCTRL(*this, "lstItems", wxListBox)->GetSelection();
- ProjectBuildTarget* target = m_pProject->GetBuildTarget(m_Selected);
- if (target)
- {
- // Search all '\n' in the program-parameters and replace them by
- // ' '. This is necessary because a multiline text control may add
- // '\n' to the text but these characters must not be part of the
- // parameters when executing the program.
- wxString execution_parameters = XRCCTRL(*this, "txtParams", wxTextCtrl)->GetValue();
- wxString::size_type pos = 0;
+ m_pProject->SetDefaultExecuteTarget(wxEmptyString);
+ for (size_t i = 0; i < m_ProjectParam.Count(); ++i)
+ {
+ ProjectBuildTarget* target = m_pProject->GetBuildTarget(i);
+ // Search all '\n' in the program-parameters and replace them by
+ // ' '. This is necessary because a multiline text control may add
+ // '\n' to the text but these characters must not be part of the
+ // parameters when executing the program.
+ m_ProjectParam[i].txtParams.Replace(wxT("\n"), wxT(" "));
- while ((pos = execution_parameters.find('\n', pos)) != wxString::npos)
- {
- execution_parameters[pos] = ' ';
- }
- target->SetExecutionParameters(execution_parameters);
- target->SetHostApplication(XRCCTRL(*this, "txtHostApp", wxTextCtrl)->GetValue());
- }
+ target->SetExecutionParameters(m_ProjectParam[i].txtParams);
+ target->SetHostApplication(m_ProjectParam[i].txtHostApp);
+ if (m_ProjectParam[i].isSetAsDefaultExec)
+ {
+ m_pProject->SetDefaultExecuteTarget(m_ProjectParam[i].txtBuildTarget);
+ }
+ }
}
wxDialog::EndModal(retCode);
} // end of EndModal
Index: src/include/selecttargetdlg.h
===================================================================
--- src/include/selecttargetdlg.h (revision 4934)
+++ src/include/selecttargetdlg.h (working copy)
@@ -7,10 +7,17 @@
#define SELECTTARGETDLG_H
#include <wx/dialog.h>
+#include <wx/dynarray.h>
class cbProject;
class ProjectBuildTarget;
+//Forward declaration for internal class storage
+class SelectTargetStruct;
+
+WX_DECLARE_OBJARRAY(SelectTargetStruct, ArrayOfSelectTargetStruct);
+
+//Dialog class for "Set program argument" menu item
class SelectTargetDlg : public wxDialog
{
public:
@@ -19,15 +26,14 @@
void EndModal(int retCode);
int GetSelection() const { return m_Selected; }
- ProjectBuildTarget* GetSelectionTarget();
private:
void OnListboxSelection(wxCommandEvent& event);
- void OnListboxDClick(wxCommandEvent& event);
- void OnCheckboxSelection(wxCommandEvent& event);
- void OnHostApplicationButtonClick(wxCommandEvent& event);
+ void OnHostApplicationButtonClick(wxCommandEvent& event);
void UpdateSelected();
+
+ int m_Selected;
cbProject* m_pProject;
- int m_Selected;
+ ArrayOfSelectTargetStruct m_ProjectParam;
DECLARE_EVENT_TABLE()
};
Index: src/plugins/compilergcc/compilergcc.cpp
===================================================================
--- src/plugins/compilergcc/compilergcc.cpp (revision 4934)
+++ src/plugins/compilergcc/compilergcc.cpp (working copy)
@@ -3279,7 +3279,14 @@
{
// add build message
wxArrayString errors;
- errors.Add(filename);
+
+ //Remove project path from filename (in this case filname be shorter)
+ wxString shortname;
+ if (filename.StartsWith(m_Project->GetBasePath(), &shortname))
+ errors.Add(shortname);
+ else
+ errors.Add(filename);
+
errors.Add(line);
errors.Add(msg);
Also I made another patch...I think better for files inside project show only relative path and name. For file not in project .. show full name...
Now this is something id like in 8.02.1Won't happen as february 2008 is over. ;-)
Is any of this patches is applied?No. This is what makes me refusing it currently:
SelectTargetDlg::SelectTargetDlg(wxWindow* parent, cbProject* project, int selected)
: m_Selected(-1), m_pProject(project)
In most case (~95%) when user add new file or class to project he want add it to all targets.This is simply not true. Take the C::B project itself as an example. You definitely do *not* want new files to all targets. What you say is usually true for users coming from the MS VS world. But definitely not for the majority. So my personal feeling is: Post this at BerliOS so that everybody who feels like needing this feature can add it, but I wouldn't add it to C::B generally. The big boss would definitely kill me if I do so.
In most case (~95%) when user add new file or class to project he want add it to all targets.Funny, I never wanted that... must be that I'm still in the 5% that are left over.
Index: src/sdk/projectmanager.cpp
===================================================================
--- src/sdk/projectmanager.cpp (revision 4921)
+++ src/sdk/projectmanager.cpp (working copy)
@@ -1736,7 +1736,15 @@
void ProjectManager::OnExecParameters(wxCommandEvent& event)
{
if (m_pActiveProject)
- m_pActiveProject->SelectTarget(0, true);
+ {
+ //Get target name
+ wxString target;
+ if (!m_pActiveProject->GetDefaultExecuteTarget().IsEmpty())
+ target = m_pActiveProject->GetDefaultExecuteTarget();
+ else
+ target = m_pActiveProject->GetActiveBuildTarget();
+ m_pActiveProject->SelectTarget(m_pActiveProject->IndexOfBuildTargetName(target), true);
+ }
}
void ProjectManager::OnRightClick(wxCommandEvent& event)
Index: src/sdk/selecttargetdlg.cpp
===================================================================
--- src/sdk/selecttargetdlg.cpp (revision 4921)
+++ src/sdk/selecttargetdlg.cpp (working copy)
@@ -21,18 +21,29 @@
#include "cbproject.h"
#endif
#include <wx/filedlg.h>
+#include <wx/valgen.h>
+#include <wx/arrimpl.cpp>
#include "selecttargetdlg.h"
+struct SelectTargetStruct
+{
+ wxString txtBuildTarget;
+ bool isSetAsDefaultExec;
+ wxString txtParams;
+ wxString txtHostApp;
+};
+
+
+WX_DEFINE_OBJARRAY(ArrayOfSelectTargetStruct);
+
BEGIN_EVENT_TABLE(SelectTargetDlg, wxDialog)
- EVT_CHECKBOX(XRCID("chkSetAsDefaultExec"), SelectTargetDlg::OnCheckboxSelection)
EVT_LISTBOX(XRCID("lstItems"), SelectTargetDlg::OnListboxSelection)
- EVT_LISTBOX_DCLICK(XRCID("lstItems"), SelectTargetDlg::OnListboxDClick)
+ EVT_LISTBOX_DCLICK(XRCID("lstItems"), SelectTargetDlg::OnListboxSelection)
EVT_BUTTON(XRCID("btnHostApplication"), SelectTargetDlg::OnHostApplicationButtonClick)
END_EVENT_TABLE()
SelectTargetDlg::SelectTargetDlg(wxWindow* parent, cbProject* project, int selected)
- : m_pProject(project),
- m_Selected(selected)
+ : m_pProject(project), m_Selected(-1)
{
//ctor
wxXmlResource::Get()->LoadDialog(this, parent, _T("dlgSelectTarget"));
@@ -43,14 +54,20 @@
{
ProjectBuildTarget* target = m_pProject->GetBuildTarget(i);
list->Append(target->GetTitle());
+ //Add project param to array
+ SelectTargetStruct t;
+ t.txtBuildTarget = target->GetTitle();
+ t.isSetAsDefaultExec = (target->GetTitle() == m_pProject->GetDefaultExecuteTarget());
+ t.txtParams = target->GetExecutionParameters();
+ t.txtHostApp = target->GetHostApplication();
+ m_ProjectParam.Add(t);
}
- if (selected != -1)
- list->SetSelection(selected);
- else
- list->SetSelection(list->FindString(m_pProject->GetDefaultExecuteTarget()));
+ // Check selection value
+ if (selected<0 || selected>=list->GetCount()) selected = 0;
+
+ list->SetSelection(selected);
UpdateSelected();
- XRCCTRL(*this, "wxID_OK", wxButton)->MoveBeforeInTabOrder (XRCCTRL(*this, "lstItems", wxListBox));
}
SelectTargetDlg::~SelectTargetDlg()
@@ -60,22 +77,41 @@
void SelectTargetDlg::UpdateSelected()
{
- wxString name = XRCCTRL(*this, "lstItems", wxListBox)->GetStringSelection();
- ProjectBuildTarget* target = m_pProject->GetBuildTarget(name);
- if (target)
+ //Save data in m_ProjectParam array
+ TransferDataFromWindow();
+
+ //Remove default check from other target
+ if (m_Selected != -1 && m_ProjectParam[m_Selected].isSetAsDefaultExec)
{
- XRCCTRL(*this, "chkSetAsDefaultExec", wxCheckBox)->SetValue(name == m_pProject->GetDefaultExecuteTarget());
- XRCCTRL(*this, "txtParams", wxTextCtrl)->SetValue(target->GetExecutionParameters());
- XRCCTRL(*this, "txtHostApp", wxTextCtrl)->SetValue(target->GetHostApplication());
+ //Uncheck all options except selected
+ for (size_t i = 0; i < m_ProjectParam.Count(); ++i)
+ {
+ if ((int)i != m_Selected)
+ m_ProjectParam[i].isSetAsDefaultExec = false;
+ }
}
- XRCCTRL(*this, "wxID_OK", wxButton)->Enable(target);
+
+ //Check list for empty (if this dialog show on empty project)
+ if (m_ProjectParam.Count() == 0)
+ return;
+
+ //Get current elem
+ m_Selected = XRCCTRL(*this, "lstItems", wxListBox)->GetSelection();
+ if (m_Selected==wxNOT_FOUND)
+ {
+ XRCCTRL(*this, "lstItems", wxListBox)->SetSelection(0);
+ m_Selected = 0;
+ }
+
+ //Set new validator
+ XRCCTRL(*this, "chkSetAsDefaultExec", wxCheckBox)->SetValidator(wxGenericValidator(&m_ProjectParam[m_Selected].isSetAsDefaultExec));
+ XRCCTRL(*this, "txtParams", wxTextCtrl)->SetValidator(wxGenericValidator(&m_ProjectParam[m_Selected].txtParams));
+ XRCCTRL(*this, "txtHostApp", wxTextCtrl)->SetValidator(wxGenericValidator(&m_ProjectParam[m_Selected].txtHostApp));
+
+ //Update data
+ TransferDataToWindow();
} // end of UpdateSelected
-ProjectBuildTarget* SelectTargetDlg::GetSelectionTarget()
-{
- return m_pProject->GetBuildTarget(m_Selected);
-}
-
// events
void SelectTargetDlg::OnListboxSelection(wxCommandEvent& /*event*/)
@@ -83,21 +119,6 @@
UpdateSelected();
} // end of OnListboxSelection
-void SelectTargetDlg::OnListboxDClick(wxCommandEvent& /*event*/)
-{
- UpdateSelected();
- EndModal(wxID_OK);
-} // end of OnListboxDClick
-
-void SelectTargetDlg::OnCheckboxSelection(wxCommandEvent& /*event*/)
-{
- if (XRCCTRL(*this, "chkSetAsDefaultExec", wxCheckBox)->GetValue())
- {
- wxString name = XRCCTRL(*this, "lstItems", wxListBox)->GetStringSelection();
- m_pProject->SetDefaultExecuteTarget(name);
- }
-} // end of OnCheckboxSelection
-
void SelectTargetDlg::OnHostApplicationButtonClick(wxCommandEvent& /*event*/)
{
if(wxTextCtrl* obj = XRCCTRL(*this, "txtHostApp", wxTextCtrl))
@@ -123,26 +144,26 @@
void SelectTargetDlg::EndModal(int retCode)
{
+ UpdateSelected();
if (retCode == wxID_OK)
{
- m_Selected = XRCCTRL(*this, "lstItems", wxListBox)->GetSelection();
- ProjectBuildTarget* target = m_pProject->GetBuildTarget(m_Selected);
- if (target)
- {
- // Search all '\n' in the program-parameters and replace them by
- // ' '. This is necessary because a multiline text control may add
- // '\n' to the text but these characters must not be part of the
- // parameters when executing the program.
- wxString execution_parameters = XRCCTRL(*this, "txtParams", wxTextCtrl)->GetValue();
- wxString::size_type pos = 0;
+ m_pProject->SetDefaultExecuteTarget(wxEmptyString);
+ for (size_t i = 0; i < m_ProjectParam.Count(); ++i)
+ {
+ ProjectBuildTarget* target = m_pProject->GetBuildTarget(i);
+ // Search all '\n' in the program-parameters and replace them by
+ // ' '. This is necessary because a multiline text control may add
+ // '\n' to the text but these characters must not be part of the
+ // parameters when executing the program.
+ m_ProjectParam[i].txtParams.Replace(wxT("\n"), wxT(" "));
- while ((pos = execution_parameters.find('\n', pos)) != wxString::npos)
- {
- execution_parameters[pos] = ' ';
- }
- target->SetExecutionParameters(execution_parameters);
- target->SetHostApplication(XRCCTRL(*this, "txtHostApp", wxTextCtrl)->GetValue());
- }
+ target->SetExecutionParameters(m_ProjectParam[i].txtParams);
+ target->SetHostApplication(m_ProjectParam[i].txtHostApp);
+ if (m_ProjectParam[i].isSetAsDefaultExec)
+ {
+ m_pProject->SetDefaultExecuteTarget(m_ProjectParam[i].txtBuildTarget);
+ }
+ }
}
wxDialog::EndModal(retCode);
} // end of EndModal
Index: src/include/selecttargetdlg.h
===================================================================
--- src/include/selecttargetdlg.h (revision 4921)
+++ src/include/selecttargetdlg.h (working copy)
@@ -7,10 +7,17 @@
#define SELECTTARGETDLG_H
#include <wx/dialog.h>
+#include <wx/dynarray.h>
class cbProject;
class ProjectBuildTarget;
+//Forward declaration for internal class storage
+class SelectTargetStruct;
+
+WX_DECLARE_OBJARRAY(SelectTargetStruct, ArrayOfSelectTargetStruct);
+
+//Dialog class for "Set program argument" menu item
class SelectTargetDlg : public wxDialog
{
public:
@@ -19,15 +26,14 @@
void EndModal(int retCode);
int GetSelection() const { return m_Selected; }
- ProjectBuildTarget* GetSelectionTarget();
private:
void OnListboxSelection(wxCommandEvent& event);
- void OnListboxDClick(wxCommandEvent& event);
- void OnCheckboxSelection(wxCommandEvent& event);
void OnHostApplicationButtonClick(wxCommandEvent& event);
void UpdateSelected();
+
cbProject* m_pProject;
int m_Selected;
+ ArrayOfSelectTargetStruct m_ProjectParam;
DECLARE_EVENT_TABLE()
};
Index: src/include/cbproject.h
===================================================================
--- src/include/cbproject.h (revision 4921)
+++ src/include/cbproject.h (working copy)
@@ -666,13 +666,17 @@
*/
virtual void ProjectFileRenamed(ProjectFile* pf);
+ /** Get index for target with name "targetName"
+ * @param targetName The name of the build target for search.
+ * @return Index of build target or -1 if not found.
+ */
+ int IndexOfBuildTargetName(const wxString& targetName) const;
private:
void Open();
void ExpandVirtualBuildTargetGroup(const wxString& alias, wxArrayString& result) const;
wxTreeItemId AddTreeNode(wxTreeCtrl* tree, const wxString& text, const wxTreeItemId& parent, bool useFolders, FileTreeData::FileTreeDataKind folders_kind, bool compiles, int image, FileTreeData* data = 0L);
wxTreeItemId FindNodeToInsertAfter(wxTreeCtrl* tree, const wxString& text, const wxTreeItemId& parent, bool in_folders); // alphabetical sorting
ProjectBuildTarget* AddDefaultBuildTarget();
- int IndexOfBuildTargetName(const wxString& targetName) const;
wxString CreateUniqueFilename();
void NotifyPlugins(wxEventType type, const wxString& targetName = wxEmptyString, const wxString& oldTargetName = wxEmptyString);
void CopyTreeNodeRecursively(wxTreeCtrl* tree, const wxTreeItemId& item, const wxTreeItemId& new_parent);
+ : m_pProject(project), m_Selected(-1)
+ list->SetSelection(selected);
Funny, I never wanted that... must be that I'm still in the 5% that are left over.
Developers, hi again. Is last "Execution parameters" patch applyed? If not, what wrong with it again?I haven' had time to look into yet. But don't you worry - it's on my list and USB stick... so it won't get lost. ;-)