summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Project/ControlEditor.h2
-rw-r--r--Project/ControlElementContainer.cpp63
-rw-r--r--Project/ControlElementContainer.h50
-rw-r--r--Project/IOControlForm.cpp44
-rw-r--r--Project/Project.mk2
-rw-r--r--Project/Project.project2
-rw-r--r--Project/Workspace.cpp2
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;