diff options
author | Thales1330 <thaleslima.ufu@gmail.com> | 2017-03-08 18:26:37 -0300 |
---|---|---|
committer | Thales1330 <thaleslima.ufu@gmail.com> | 2017-03-08 18:26:37 -0300 |
commit | a1890bd024e0baea393480810709f43208825b9a (patch) | |
tree | 5eeb60b0e9d3085bbe2d2ba0c1939f26aa574f27 | |
parent | 009849e49967af659354a94a16c51cab5eb8b5a4 (diff) | |
download | PSP.git-a1890bd024e0baea393480810709f43208825b9a.tar.gz PSP.git-a1890bd024e0baea393480810709f43208825b9a.tar.xz PSP.git-a1890bd024e0baea393480810709f43208825b9a.zip |
Sum form implementation start
-rw-r--r-- | Project/ElementForm.cpp | 7 | ||||
-rw-r--r-- | Project/ElementForm.h | 2 | ||||
-rw-r--r-- | Project/ElementForm.wxcp | 18 | ||||
-rw-r--r-- | Project/Project.mk | 2 | ||||
-rw-r--r-- | Project/Sum.cpp | 18 | ||||
-rw-r--r-- | Project/Sum.h | 5 | ||||
-rw-r--r-- | Project/SumForm.cpp | 60 | ||||
-rw-r--r-- | Project/SumForm.h | 4 |
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; }; |