Developer forums (C::B DEVELOPMENT STRICTLY!) > Development

Patch #1

<< < (2/4) > >>

AlekseyT:
I remove flag "compatibility::wxHideReadonly" as I think, what user can execute program with read-only attribute. I can't found any comments about problems without wxHideReadonly flag in Google. If this flag solve some unknown for me problems, then you can simply don't change this line. :)

MortenMacFly:

--- Quote from: MortenMacFly on March 06, 2008, 08:28:13 am ---Probably I should just apply the patch once to see in more detail.

--- End quote ---
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...

Edit: Sorry, but these patches do not work for me ("failed hunk #21"). They re not based on a clean SVN revision I guess. Mind trying again, please?! ;-)

AlekseyT:
I am sorry. This is my error. Next patch I tested and applied successfully (patch #1c)

--- Code: ---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()
 };

--- End code ---

Also I made another patch. Ussually after compile CB write all warnings and errors in table ("Build messages"). Ussually all projects compiling in ditectory /very/very/long/path/to/project and width of first row not enough for show full path. I think better for files inside project show only relative path and name. For file not in project (for example for 3rd-party libraries) show full name. This patch do this (patch #3):

--- Code: ---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);

--- End code ---

Seronis:

--- Quote from: AlekseyT on March 07, 2008, 07:09:12 am ---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...

--- End quote ---

Now this is something id like in 8.02.1

MortenMacFly:

--- Quote from: Seronis on March 07, 2008, 03:56:28 pm ---Now this is something id like in 8.02.1

--- End quote ---
Won't happen as february 2008 is over. ;-)

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version