summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThales1330 <thaleslima.ufu@gmail.com>2017-03-08 18:26:37 -0300
committerThales1330 <thaleslima.ufu@gmail.com>2017-03-08 18:26:37 -0300
commita1890bd024e0baea393480810709f43208825b9a (patch)
tree5eeb60b0e9d3085bbe2d2ba0c1939f26aa574f27
parent009849e49967af659354a94a16c51cab5eb8b5a4 (diff)
downloadPSP.git-a1890bd024e0baea393480810709f43208825b9a.tar.gz
PSP.git-a1890bd024e0baea393480810709f43208825b9a.tar.xz
PSP.git-a1890bd024e0baea393480810709f43208825b9a.zip
Sum form implementation start
-rw-r--r--Project/ElementForm.cpp7
-rw-r--r--Project/ElementForm.h2
-rw-r--r--Project/ElementForm.wxcp18
-rw-r--r--Project/Project.mk2
-rw-r--r--Project/Sum.cpp18
-rw-r--r--Project/Sum.h5
-rw-r--r--Project/SumForm.cpp60
-rw-r--r--Project/SumForm.h4
8 files changed, 109 insertions, 7 deletions
diff --git a/Project/ElementForm.cpp b/Project/ElementForm.cpp
index a718f26..ea7a3d8 100644
--- a/Project/ElementForm.cpp
+++ b/Project/ElementForm.cpp
@@ -2963,8 +2963,15 @@ SumFormBase::SumFormBase(wxWindow* parent, wxWindowID id, const wxString& title,
wxPersistenceManager::Get().Restore(this);
}
#endif
+ // Connect events
+ m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SumFormBase::OnOKClick), NULL, this);
+ m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SumFormBase::OnCancelClick), NULL, this);
+
}
SumFormBase::~SumFormBase()
{
+ m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SumFormBase::OnOKClick), NULL, this);
+ m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SumFormBase::OnCancelClick), NULL, this);
+
}
diff --git a/Project/ElementForm.h b/Project/ElementForm.h
index ed9d0b8..2e5b235 100644
--- a/Project/ElementForm.h
+++ b/Project/ElementForm.h
@@ -813,6 +813,8 @@ protected:
wxButton* m_ButtonCancel;
protected:
+ virtual void OnOKClick(wxCommandEvent& event) { event.Skip(); }
+ virtual void OnCancelClick(wxCommandEvent& event) { event.Skip(); }
public:
wxStaticText* GetStaticTextSigns() { return m_staticTextSigns; }
diff --git a/Project/ElementForm.wxcp b/Project/ElementForm.wxcp
index d7cc05a..385d30d 100644
--- a/Project/ElementForm.wxcp
+++ b/Project/ElementForm.wxcp
@@ -30823,7 +30823,14 @@
"m_label": "Margins:",
"m_value": "2,2"
}],
- "m_events": [],
+ "m_events": [{
+ "m_eventName": "wxEVT_COMMAND_BUTTON_CLICKED",
+ "m_eventClass": "wxCommandEvent",
+ "m_eventHandler": "wxCommandEventHandler",
+ "m_functionNameAndSignature": "OnOKClick(wxCommandEvent& event)",
+ "m_description": "Process a wxEVT_COMMAND_BUTTON_CLICKED event, when the button is clicked.",
+ "m_noBody": false
+ }],
"m_children": []
}, {
"m_type": 4400,
@@ -30911,7 +30918,14 @@
"m_label": "Margins:",
"m_value": "2,2"
}],
- "m_events": [],
+ "m_events": [{
+ "m_eventName": "wxEVT_COMMAND_BUTTON_CLICKED",
+ "m_eventClass": "wxCommandEvent",
+ "m_eventHandler": "wxCommandEventHandler",
+ "m_functionNameAndSignature": "OnCancelClick(wxCommandEvent& event)",
+ "m_description": "Process a wxEVT_COMMAND_BUTTON_CLICKED event, when the button is clicked.",
+ "m_noBody": false
+ }],
"m_children": []
}]
}]
diff --git a/Project/Project.mk b/Project/Project.mk
index 81349c0..3cf1d99 100644
--- a/Project/Project.mk
+++ b/Project/Project.mk
@@ -13,7 +13,7 @@ CurrentFileName :=
CurrentFilePath :=
CurrentFileFullPath :=
User :=Thales
-Date :=07/03/2017
+Date :=08/03/2017
CodeLitePath :="C:/Program Files/CodeLite"
LinkerName :=C:/TDM-GCC-64/bin/g++.exe
SharedObjectLinkerName :=C:/TDM-GCC-64/bin/g++.exe -shared -fPIC
diff --git a/Project/Sum.cpp b/Project/Sum.cpp
index e0951db..4d4303f 100644
--- a/Project/Sum.cpp
+++ b/Project/Sum.cpp
@@ -18,6 +18,8 @@ Sum::Sum()
m_nodeList.push_back(nodeOut);
m_signalList.push_back(SIGNAL_POSITIVE);
m_signalList.push_back(SIGNAL_NEGATIVE);
+
+ UpdatePoints();
}
Sum::~Sum() {}
@@ -49,8 +51,8 @@ void Sum::Draw(wxPoint2DDouble translation, double scale) const
DrawLine(vLine);
}
}
-
- //Plot sigma.
+
+ // Plot sigma.
std::vector<wxPoint2DDouble> sigma;
sigma.push_back(m_position + wxPoint2DDouble(10, 9));
sigma.push_back(m_position + wxPoint2DDouble(0, 9));
@@ -59,7 +61,7 @@ void Sum::Draw(wxPoint2DDouble translation, double scale) const
sigma.push_back(m_position + wxPoint2DDouble(10, -9));
glColor4d(0.0, 0.3, 1.0, 1.0);
DrawLine(sigma);
-
+
glColor4d(0.0, 0.0, 0.0, 1.0);
DrawNodes();
}
@@ -74,3 +76,13 @@ bool Sum::ShowForm(wxWindow* parent, Element* element)
sumForm->Destroy();
return false;
}
+
+void Sum::UpdatePoints()
+{
+ m_height = 18.0 * (m_nodeList.size() - 1);
+ for(int i = 0; i < (int)m_nodeList.size() - 1; ++i) {
+ m_nodeList[i]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 9 + 18 * i - m_height / 2));
+ m_nodeList[i]->StartMove(m_position);
+ }
+ SetPosition(m_position); // Update rect.
+}
diff --git a/Project/Sum.h b/Project/Sum.h
index 682effb..4b12653 100644
--- a/Project/Sum.h
+++ b/Project/Sum.h
@@ -16,6 +16,11 @@ public:
virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
virtual bool ShowForm(wxWindow* parent, Element* element);
+
+ virtual std::vector<Signal> GetSignalList() const { return m_signalList; }
+ virtual void SetSignalList(std::vector<Signal> signalList) { m_signalList = signalList; }
+
+ virtual void UpdatePoints();
protected:
std::vector<Signal> m_signalList;
diff --git a/Project/SumForm.cpp b/Project/SumForm.cpp
index d257771..4742eaa 100644
--- a/Project/SumForm.cpp
+++ b/Project/SumForm.cpp
@@ -6,9 +6,67 @@ SumForm::SumForm(wxWindow* parent, Sum* sum)
{
m_parent = parent;
m_sum = sum;
+
+ wxString signalStr = "";
+ auto signalList = m_sum->GetSignalList();
+ for(auto it = signalList.begin(), itEnd = signalList.end(); it != itEnd; ++it) {
+ Sum::Signal signal = *it;
+ switch(signal) {
+ case Sum::SIGNAL_POSITIVE: {
+ signalStr += "+";
+ } break;
+ case Sum::SIGNAL_NEGATIVE: {
+ signalStr += "-";
+ } break;
+ }
+ if(it != itEnd - 1) signalStr += " ";
+ }
+ m_textCtrlSigns->SetValue(signalStr);
}
-SumForm::~SumForm()
+SumForm::~SumForm() {}
+
+void SumForm::OnOKClick(wxCommandEvent& event)
{
+ if(ValidateData()) EndModal(wxID_OK);
}
+bool SumForm::ValidateData()
+{
+ wxString signalStr = "";
+ for(int i = 0; i < (int)m_textCtrlSigns->GetValue().length(); ++i) {
+ if(m_textCtrlSigns->GetValue()[i] != ' ') signalStr += m_textCtrlSigns->GetValue()[i];
+ }
+ if(signalStr.size() < 2) return false;
+
+ std::vector<Sum::Signal> signalList;
+ for(int i = 0; i < (int)signalStr.length(); ++i) {
+ switch(signalStr[i].GetValue()) {
+ case '+': {
+ signalList.push_back(Sum::SIGNAL_POSITIVE);
+ } break;
+ case '-': {
+ signalList.push_back(Sum::SIGNAL_NEGATIVE);
+ } break;
+ default: {
+ return false;
+ }
+ }
+ }
+
+ int diff = (int)signalList.size() - (int)m_sum->GetSignalList().size();
+
+ if(diff < 0) {
+
+ } else if(diff > 0) {
+ auto nodeList = m_sum->GetNodeList();
+ for(int i = 0; i < diff; ++i) {
+ Node* newNode = new Node();
+ nodeList.insert(nodeList.end() - 1, newNode);
+ }
+ m_sum->SetNodeList(nodeList);
+ }
+ m_sum->SetSignalList(signalList);
+ m_sum->UpdatePoints();
+ return true;
+}
diff --git a/Project/SumForm.h b/Project/SumForm.h
index 11d9a51..cf29421 100644
--- a/Project/SumForm.h
+++ b/Project/SumForm.h
@@ -11,7 +11,11 @@ public:
SumForm(wxWindow* parent, Sum* sum);
virtual ~SumForm();
+ bool ValidateData();
+
protected:
+ virtual void OnCancelClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
+ virtual void OnOKClick(wxCommandEvent& event);
wxWindow* m_parent = NULL;
Sum* m_sum = NULL;
};