diff options
-rw-r--r-- | Project/ControlEditor.h | 2 | ||||
-rw-r--r-- | Project/ControlElementContainer.cpp | 63 | ||||
-rw-r--r-- | Project/ControlElementContainer.h | 50 | ||||
-rw-r--r-- | Project/IOControlForm.cpp | 44 | ||||
-rw-r--r-- | Project/Project.mk | 2 | ||||
-rw-r--r-- | Project/Project.project | 2 | ||||
-rw-r--r-- | Project/Workspace.cpp | 2 |
7 files changed, 141 insertions, 24 deletions
diff --git a/Project/ControlEditor.h b/Project/ControlEditor.h index 982aeca..0b9304c 100644 --- a/Project/ControlEditor.h +++ b/Project/ControlEditor.h @@ -80,6 +80,8 @@ class ControlEditor : public ControlEditorBase virtual void RotateSelectedElements(bool clockwise); virtual void DeleteSelectedElements(); virtual void CheckConnections(); + virtual std::vector<ConnectionLine*> GetConnectionLineList() { return m_connectionList; } + virtual std::vector<ControlElement*> GetControlElementList() { return m_elementList; } protected: virtual void OnKeyDown(wxKeyEvent& event); diff --git a/Project/ControlElementContainer.cpp b/Project/ControlElementContainer.cpp new file mode 100644 index 0000000..062807a --- /dev/null +++ b/Project/ControlElementContainer.cpp @@ -0,0 +1,63 @@ +#include "ControlElementContainer.h" +#include "ControlEditor.h"; +#include "ControlElement.h"; +#include "ConnectionLine.h"; +#include "Constant.h"; +#include "Exponential.h"; +#include "Gain.h"; +#include "IOControl.h"; +#include "Limiter.h"; +#include "Multiplier.h"; +#include "RateLimiter.h"; +#include "Sum.h"; +#include "TransferFunction.h"; + +ControlElementContainer::ControlElementContainer() +{ +} + +ControlElementContainer::~ControlElementContainer() +{ +} + +void ControlElementContainer::FillContainer(ControlEditor* editor) +{ + ClearContainer(); + m_cLineList = editor->GetConnectionLineList(); + auto cElementList = editor->GetControlElementList(); + for(auto it = cElementList.begin(), itEnd = cElementList.end(); it != itEnd; ++it) { + if(Constant* constant = dynamic_cast<Constant*>(*it)) { + m_constantList.push_back(constant); + } else if(Exponential* exponential = dynamic_cast<Exponential*>(*it)) { + m_exponentialList.push_back(exponential); + } else if(Gain* gain = dynamic_cast<Gain*>(*it)) { + m_gainList.push_back(gain); + } else if(IOControl* ioControl = dynamic_cast<IOControl*>(*it)) { + m_ioControlList.push_back(IOControl); + } else if(Limiter* limiter = dynamic_cast<Limiter*>(*it)) { + m_limiterList.push_back(limiter); + } else if(Multiplier* multiplier = dynamic_cast<Multiplier*>(*it)) { + m_multiplierList.push_back(limiter); + } else if(RateLimiter* rateLimiter = dynamic_cast<RateLimiter*>(*it)) { + m_rateLimiterList.push_back(rateLimiter); + } else if(Sum* sum = dynamic_cast<Sum*>(*it)) { + m_sumList.push_back(sum); + } else if(TransferFunction* tf = dynamic_cast<TransferFunction*>(*it)) { + m_tfList.push_back(tf); + } + } +} + +void ControlElementContainer::ClearContainer() +{ + m_cLineList.clear(); + m_constantList.clear(); + m_exponentialList.clear(); + m_gainList.clear(); + m_ioControlList.clear(); + m_limiterList.clear(); + m_multiplierList.clear(); + m_rateLimiterList.clear(); + m_sumList.clear(); + m_tfList.clear(); +} diff --git a/Project/ControlElementContainer.h b/Project/ControlElementContainer.h new file mode 100644 index 0000000..0e2adc0 --- /dev/null +++ b/Project/ControlElementContainer.h @@ -0,0 +1,50 @@ +#ifndef CONTROLELEMENTCONTAINER_H +#define CONTROLELEMENTCONTAINER_H + +class ControlEditor; + +class ControlElement; +class ConnectionLine; +class Constant; +class Exponential; +class Gain; +class IOControl; +class Limiter; +class Multiplier; +class RateLimiter; +class Sum; +class TransferFunction; + +class ControlElementContainer +{ + public: + ControlElementContainer(); + ~ControlElementContainer(); + + virtual void FillContainer(ControlEditor* editor); + virtual void ClearContainer(); + + std::vector<ConnectionLine*> GetConnectionLineList() const { return m_cLineList; } + std::vector<Constant*> GetConstantList() const { return m_constantList; } + std::vector<Exponential*> GetExponentialList() const { return m_exponentialList; } + std::vector<Gain*> GetGainList() const { return m_gainList; } + std::vector<IOControl*> GetIOControlList() const { return m_ioControlList; } + std::vector<Limiter*> GetLimiterList() const { return m_limiterList; } + std::vector<Multiplier*> GetMultiplierList() const { return m_multiplierList; } + std::vector<RateLimiter*> GetRateLimiterList() const { return m_rateLimiterList; } + std::vector<Sum*> GetSumList() const { return m_sumList; } + std::vector<TransferFunction*> GetTFList() const { return m_tfList; } + protected: + std::vector<ConnectionLine*> m_cLineList; + std::vector<Constant*> m_constantList; + std::vector<Exponential*> m_exponentialList; + std::vector<Gain*> m_gainList; + std::vector<IOControl*> m_ioControlList; + std::vector<Limiter*> m_limiterList; + std::vector<Multiplier*> m_multiplierList; + std::vector<RateLimiter*> m_rateLimiterList; + std::vector<Sum*> m_sumList; + std::vector<TransferFunction*> m_tfList; +}; + +#endif // CONTROLELEMENTCONTAINER_H diff --git a/Project/IOControlForm.cpp b/Project/IOControlForm.cpp index 374ce27..8a848d9 100644 --- a/Project/IOControlForm.cpp +++ b/Project/IOControlForm.cpp @@ -1,69 +1,59 @@ #include "IOControlForm.h" -IOControlForm::IOControlForm(wxWindow* parent, IOControl* ioControl) - : IOControlFormBase(parent) +IOControlForm::IOControlForm(wxWindow* parent, IOControl* ioControl) : IOControlFormBase(parent) { m_parent = parent; m_ioControl = ioControl; - + int ioFlags = m_ioControl->GetIOFlags(); int inChoiceNumber = -1; int outChoiceNumber = -1; - + if(ioFlags & IOControl::IN_TERMINAL_VOLTAGE) { m_choiceInput->Append(_("Terminal voltage")); m_inputFlags.push_back(IOControl::IN_TERMINAL_VOLTAGE); - if(m_ioControl->GetValue() == IOControl::IN_TERMINAL_VOLTAGE) - inChoiceNumber = (int)m_inputFlags.size() - 1; + if(m_ioControl->GetValue() == IOControl::IN_TERMINAL_VOLTAGE) inChoiceNumber = (int)m_inputFlags.size() - 1; } if(ioFlags & IOControl::IN_VELOCITY) { m_choiceInput->Append(_("Velocity")); m_inputFlags.push_back(IOControl::IN_VELOCITY); - if(m_ioControl->GetValue() == IOControl::IN_VELOCITY) - inChoiceNumber = (int)m_inputFlags.size() - 1; + if(m_ioControl->GetValue() == IOControl::IN_VELOCITY) inChoiceNumber = (int)m_inputFlags.size() - 1; } if(ioFlags & IOControl::IN_ACTIVE_POWER) { m_choiceInput->Append(_("Active power")); m_inputFlags.push_back(IOControl::IN_ACTIVE_POWER); - if(m_ioControl->GetValue() == IOControl::IN_ACTIVE_POWER) - inChoiceNumber = (int)m_inputFlags.size() - 1; + if(m_ioControl->GetValue() == IOControl::IN_ACTIVE_POWER) inChoiceNumber = (int)m_inputFlags.size() - 1; } if(ioFlags & IOControl::IN_REACTIVE_POWER) { m_choiceInput->Append(_("Reactive power")); m_inputFlags.push_back(IOControl::IN_REACTIVE_POWER); - if(m_ioControl->GetValue() == IOControl::IN_REACTIVE_POWER) - inChoiceNumber = (int)m_inputFlags.size() - 1; + if(m_ioControl->GetValue() == IOControl::IN_REACTIVE_POWER) inChoiceNumber = (int)m_inputFlags.size() - 1; } if(ioFlags & IOControl::OUT_FIELD_VOLTAGE) { m_choiceOutput->Append(_("Field voltage")); m_outputFlags.push_back(IOControl::OUT_FIELD_VOLTAGE); - if(m_ioControl->GetValue() == IOControl::OUT_MEC_POWER) - outChoiceNumber = (int)m_outputFlags.size() - 1; + if(m_ioControl->GetValue() == IOControl::OUT_FIELD_VOLTAGE) outChoiceNumber = (int)m_outputFlags.size() - 1; } if(ioFlags & IOControl::OUT_MEC_POWER) { m_choiceOutput->Append(_("Mechanical power")); m_outputFlags.push_back(IOControl::OUT_MEC_POWER); - if(m_ioControl->GetValue() == IOControl::OUT_MEC_POWER) - outChoiceNumber = (int)m_outputFlags.size() - 1; + if(m_ioControl->GetValue() == IOControl::OUT_MEC_POWER) outChoiceNumber = (int)m_outputFlags.size() - 1; } - + if(inChoiceNumber != -1) { m_choiceInput->SetSelection(inChoiceNumber); m_checkBoxInput->SetValue(true); m_checkBoxOutput->SetValue(false); m_choiceOutput->Enable(false); } else { - m_choiceInput->SetSelection(outChoiceNumber); + m_choiceOutput->SetSelection(outChoiceNumber); m_checkBoxInput->SetValue(false); m_checkBoxOutput->SetValue(true); m_choiceInput->Enable(false); } - } -IOControlForm::~IOControlForm() -{ -} +IOControlForm::~IOControlForm() {} void IOControlForm::OnOKButtonClick(wxCommandEvent& event) { if(ValidateData()) EndModal(wxID_OK); @@ -71,11 +61,20 @@ void IOControlForm::OnOKButtonClick(wxCommandEvent& event) bool IOControlForm::ValidateData() { + if(m_checkBoxInput->GetValue() && m_choiceInput->GetSelection() != -1) { + m_ioControl->SetValue(m_inputFlags[m_choiceInput->GetSelection()]); + return true; + } else if(m_checkBoxOutput->GetValue() && m_choiceOutput->GetSelection() != -1) { + m_ioControl->SetValue(m_outputFlags[m_choiceOutput->GetSelection()]); + return true; + } + return false; } void IOControlForm::OnInputChecked(wxCommandEvent& event) { + m_checkBoxInput->SetValue(true); m_checkBoxOutput->SetValue(false); m_choiceOutput->Enable(false); m_choiceInput->Enable(true); @@ -83,6 +82,7 @@ void IOControlForm::OnInputChecked(wxCommandEvent& event) void IOControlForm::OnOutputChecked(wxCommandEvent& event) { + m_checkBoxOutput->SetValue(true); m_checkBoxInput->SetValue(false); m_choiceOutput->Enable(true); m_choiceInput->Enable(false); diff --git a/Project/Project.mk b/Project/Project.mk index 26bc19e..6d159b9 100644 --- a/Project/Project.mk +++ b/Project/Project.mk @@ -13,7 +13,7 @@ CurrentFileName := CurrentFilePath := CurrentFileFullPath := User :=NDSE-69 -Date :=06/04/2017 +Date :=07/04/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/Project.project b/Project/Project.project index f9a261d..2191c9e 100644 --- a/Project/Project.project +++ b/Project/Project.project @@ -48,6 +48,7 @@ <File Name="Constant.cpp"/> <File Name="Gain.cpp"/> <File Name="IOControl.cpp"/> + <File Name="ControlElementContainer.cpp"/> </VirtualDirectory> </VirtualDirectory> <VirtualDirectory Name="view"> @@ -133,6 +134,7 @@ <File Name="Constant.h"/> <File Name="Gain.h"/> <File Name="IOControl.h"/> + <File Name="ControlElementContainer.h"/> </VirtualDirectory> </VirtualDirectory> <VirtualDirectory Name="view"> diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index f7bdf5f..5575764 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -696,7 +696,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } // Tests - Ctrl + Shift + L if(event.ControlDown() && event.ShiftDown()) { - ControlEditor* ce = new ControlEditor(this); + ControlEditor* ce = new ControlEditor(this, IOControl::IN_TERMINAL_VOLTAGE | IOControl::OUT_FIELD_VOLTAGE); ce->Show(); } } break; |