Ok. I fixed patch with execution parameter (patch 1d "Execution parameters settings"). Now it use all of its parameters:
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);