News:

The new Release 25.03 is out! You can download binaries for Windows and many major Linux distros here .

Main Menu

Patch #1

Started by AlekseyT, March 03, 2008, 06:33:04 AM

Previous topic - Next topic

AlekseyT

#15
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);


I write constructor's initialization as

+ : m_pProject(project), m_Selected(-1)

because bellow

+ list->SetSelection(selected);


DrewBoo

Quote from: thomas on March 13, 2008, 08:37:36 PM
Funny, I never wanted that... must be that I'm still in the 5% that are left over.

For what it's worth, I find that feature unusual as AlekseyT does.

I've worked on large projects that have certainly had files that were unique to a particular build, but I've always made that the exception and not the norm.  After all, code that is unique to a particular build will always make testing more difficult.

Perhaps -- at the very least -- there could be a checkbox to make the current build selection the default.

Currently, the default is that a newly added file belongs to none of my build options.  By comparison, that has never been what I want.

I have had experience with MS VS projects, as Morten mentions.  Perhaps someone could explain why that is undesirable?

AlekseyT

Developers, hi again. Is last "Execution parameters" patch applyed? If not, what wrong with it again?

MortenMacFly

Quote from: AlekseyT on March 18, 2008, 02:39:30 PM
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. ;-)
Compiler logging: Settings->Compiler & Debugger->tab "Other"->Compiler logging="Full command line"
C::B Manual: [url="https://www.codeblocks.org/docs/main_codeblocks_en.html"]https://www.codeblocks.org/docs/main_codeblocks_en.html[/url]
C::B FAQ: [url="https://wiki.codeblocks.org/index.php?title=FAQ"]https://wiki.codeblocks.org/index.php?title=FAQ[/url]

AlekseyT