summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Project/ChartView.cpp121
-rw-r--r--Project/ChartView.h22
-rw-r--r--Project/ChartView.wxcp18
-rw-r--r--Project/ChartViewBase.cpp6
-rw-r--r--Project/ChartViewBase.h2
-rw-r--r--Project/ControlEditor.cpp26
-rw-r--r--Project/ControlEditor.h1
-rw-r--r--Project/ElementPlotData.cpp4
-rw-r--r--Project/ElementPlotData.h10
-rw-r--r--Project/Project.mk2
10 files changed, 196 insertions, 16 deletions
diff --git a/Project/ChartView.cpp b/Project/ChartView.cpp
index 166cdac..a9ac2c6 100644
--- a/Project/ChartView.cpp
+++ b/Project/ChartView.cpp
@@ -1,7 +1,12 @@
#include "ChartView.h"
+#include "ElementPlotData.h"
-ChartView::ChartView(wxWindow* parent) : ChartViewBase(parent)
+ChartView::ChartView(wxWindow* parent, std::vector<ElementPlotData> epdList, std::vector<double> time)
+ : ChartViewBase(parent)
{
+ m_epdList = epdList;
+ m_time = time;
+
m_menuItemShowGrid->Check(m_hideGrid ? false : true);
m_menuItemShowLabel->Check(m_showLeg);
m_menuItemShowCoordinates->Check(m_showCoords);
@@ -20,8 +25,11 @@ ChartView::ChartView(wxWindow* parent) : ChartViewBase(parent)
SetMPWindow();
GetSizer()->Add(m_mpWindow, 1, wxEXPAND, WXC_FROM_DIP(5));
+ SetTreectrl();
Layout();
SetInitialSize();
+
+ BuildColourList();
}
ChartView::~ChartView() {}
@@ -58,10 +66,47 @@ void ChartView::SetMPWindow()
Fit();
}
+void ChartView::SetTreectrl()
+{
+ wxTreeItemId rootID = m_treeCtrl->AddRoot(wxT("root"));
+ m_treeTimeID = m_treeCtrl->AppendItem(rootID, _("Time"));
+ m_treeCtrl->SetItemTextColour(m_treeTimeID, *wxRED);
+
+ bool firstElement[ElementPlotData::NUM_ELEMENTS];
+ for(int i = 0; i < ElementPlotData::NUM_ELEMENTS; ++i) firstElement[i] = true;
+
+ wxString rootElementName[ElementPlotData::NUM_ELEMENTS];
+ rootElementName[ElementPlotData::CT_BUS] = _("Bus");
+ rootElementName[ElementPlotData::CT_IND_MOTOR] = _("Induction motor");
+ rootElementName[ElementPlotData::CT_LINE] = _("Line");
+ rootElementName[ElementPlotData::CT_LOAD] = _("Load");
+ rootElementName[ElementPlotData::CT_SHUNT_CAPACITOR] = _("Capacitor");
+ rootElementName[ElementPlotData::CT_SHUNT_INDUCTOR] = _("Inductor");
+ rootElementName[ElementPlotData::CT_SYNC_COMPENSATOR] = _("Synchronous compensator");
+ rootElementName[ElementPlotData::CT_SYNC_GENERATOR] = _("Synchronous generator");
+ rootElementName[ElementPlotData::CT_TRANSFORMER] = _("Transformer");
+
+ wxTreeItemId rootItemID[ElementPlotData::NUM_ELEMENTS];
+
+ for(auto it = m_epdList.begin(), itEnd = m_epdList.end(); it != itEnd; ++it) {
+ ElementPlotData data = *it;
+ ElementPlotData::CurveType curveType = data.GetCurveType();
+
+ if(firstElement[curveType]) {
+ rootItemID[curveType] = m_treeCtrl->AppendItem(rootID, rootElementName[curveType]);
+ firstElement[curveType] = false;
+ }
+ wxTreeItemId itemID = m_treeCtrl->AppendItem(rootItemID[curveType], data.GetName());
+ for(int i = 0; i < data.GetElementDataNumber(); ++i) {
+ m_treeCtrl->AppendItem(itemID, data.GetDataName(i), -1, -1, data.GetPlotData(i));
+ }
+ }
+}
+
void ChartView::OnPropertyGridChange(wxPropertyGridEvent& event)
{
bool fit = false;
-
+
if(event.GetPropertyName() == _("Margins")) {
m_mpWindow->SetMargins(m_pgPropMarginsUp->GetValue().GetLong(), m_pgPropMarginsRight->GetValue().GetLong(),
m_pgPropMarginsBot->GetValue().GetLong(), m_pgPropMarginsLeft->GetValue().GetLong());
@@ -173,3 +218,75 @@ void ChartView::UpdatePlot(bool fit)
m_coords->SetBrush(*wxWHITE_BRUSH);
}
}
+
+void ChartView::OnTreeItemActivated(wxTreeEvent& event)
+{
+ PlotData* data = dynamic_cast<PlotData*>(m_treeCtrl->GetItemData(event.GetItem()));
+
+ if(data) {
+ bool isPlotting = data->IsPlot() ? false : true;
+ data->SetPlot(isPlotting);
+ m_pgPropDraw->SetValue(data->IsPlot());
+ if(isPlotting) {
+ wxColour colour = GetNextColour();
+ wxVariant vColour;
+ vColour << colour;
+ //data->SetColour(colour);
+ m_pgPropColor->SetValue(vColour);
+ }
+ UpdatePlot(true);
+ }
+
+ if(event.GetItem() == m_treeTimeID) {
+ // AllToYAxis(treeCtrl_ChartSelection->GetRootItem());
+ m_treeCtrl->SetItemTextColour(m_treeTimeID, *wxRED);
+ // xAxisValues = time;
+ UpdatePlot(true);
+ }
+
+ event.Skip();
+}
+
+void ChartView::OnTreeItemSelectionChanged(wxTreeEvent& event)
+{
+ PlotData* data = dynamic_cast<PlotData*>(m_treeCtrl->GetItemData(event.GetItem()));
+ if(data) {
+ m_pgPropDraw->SetValue(data->IsPlot());
+ wxVariant colour;
+ colour << data->GetColour();
+ m_pgPropColor->SetValue(colour);
+ m_pgProplineThick->SetValue(data->GetThick());
+ m_pgProplineType->SetValue(data->GetPenType());
+ m_pgProplineAxis->SetValue(data->GetAxis());
+ }
+ event.Skip();
+}
+
+void ChartView::BuildColourList()
+{
+ m_colourList.push_back(wxColour(255, 0, 0));
+ m_colourList.push_back(wxColour(0, 0, 255));
+ m_colourList.push_back(wxColour(0, 255, 0));
+ m_colourList.push_back(wxColour(255, 128, 0));
+ m_colourList.push_back(wxColour(128, 0, 255));
+ m_colourList.push_back(wxColour(0, 255, 128));
+ m_colourList.push_back(wxColour(255, 255, 0));
+ m_colourList.push_back(wxColour(255, 0, 255));
+ m_colourList.push_back(wxColour(0, 255, 255));
+ m_colourList.push_back(wxColour(128, 255, 0));
+ m_colourList.push_back(wxColour(255, 0, 128));
+ m_colourList.push_back(wxColour(0, 128, 255));
+ m_colourList.push_back(wxColour(128, 128, 128));
+ m_colourList.push_back(wxColour(0, 0, 0));
+ m_itColourList = m_colourList.end();
+}
+
+wxColour ChartView::GetNextColour()
+{
+ if(*m_itColourList == *wxBLACK)
+ m_itColourList = m_colourList.begin();
+ else
+ ++m_itColourList;
+
+ return *m_itColourList;
+}
diff --git a/Project/ChartView.h b/Project/ChartView.h
index c586fbb..a219608 100644
--- a/Project/ChartView.h
+++ b/Project/ChartView.h
@@ -5,16 +5,20 @@
#include <wx/msgdlg.h>
+class ElementPlotData;
+
class ChartView : public ChartViewBase
{
public:
- ChartView(wxWindow* parent);
+ ChartView(wxWindow* parent, std::vector<ElementPlotData> epdList, std::vector<double> time);
virtual ~ChartView();
-
+
void Fit();
void UpdatePlot(bool fit = true);
protected:
+ virtual void OnTreeItemActivated(wxTreeEvent& event);
+ virtual void OnTreeItemSelectionChanged(wxTreeEvent& event);
virtual void OnMenuDarkThemeClick(wxCommandEvent& event);
virtual void OnMenuExitClick(wxCommandEvent& event) { Close(); }
virtual void OnMenuFitClick(wxCommandEvent& event) { Fit(); }
@@ -25,6 +29,17 @@ class ChartView : public ChartViewBase
virtual void OnMenuShowLabelClick(wxCommandEvent& event);
virtual void OnPropertyGridChange(wxPropertyGridEvent& event);
virtual void SetMPWindow();
+ virtual void SetTreectrl();
+ virtual void BuildColourList();
+ virtual wxColour GetNextColour();
+
+ wxPGProperty* m_pgPropColor = NULL;
+
+ wxTreeItemId m_treeTimeID;
+
+ std::vector<ElementPlotData> m_epdList;
+ std::vector<double> m_time;
+
mpWindow* m_mpWindow = NULL;
mpScaleX* m_xaxis = NULL;
mpScaleY* m_yaxis = NULL;
@@ -37,6 +52,7 @@ class ChartView : public ChartViewBase
bool m_showCoords = false;
bool m_darkTheme = false;
- wxPGProperty* m_pgPropColor = NULL;
+ std::vector<wxColour> m_colourList;
+ std::vector<wxColour>::iterator m_itColourList;
};
#endif // CHARTVIEW_H
diff --git a/Project/ChartView.wxcp b/Project/ChartView.wxcp
index 3fe03fd..2f590ee 100644
--- a/Project/ChartView.wxcp
+++ b/Project/ChartView.wxcp
@@ -790,7 +790,7 @@
"border": 5,
"gbSpan": "1,1",
"gbPosition": "0,0",
- "m_styles": ["wxTR_DEFAULT_STYLE"],
+ "m_styles": ["wxTR_DEFAULT_STYLE", "wxTR_HIDE_ROOT"],
"m_sizerFlags": [],
"m_properties": [{
"type": "winid",
@@ -849,7 +849,21 @@
"m_label": "Style:",
"m_value": ""
}],
- "m_events": [],
+ "m_events": [{
+ "m_eventName": "wxEVT_COMMAND_TREE_ITEM_ACTIVATED",
+ "m_eventClass": "wxTreeEvent",
+ "m_eventHandler": "wxTreeEventHandler",
+ "m_functionNameAndSignature": "OnTreeItemActivated(wxTreeEvent& event)",
+ "m_description": "An item has been activated (e.g. double clicked).",
+ "m_noBody": false
+ }, {
+ "m_eventName": "wxEVT_COMMAND_TREE_SEL_CHANGED",
+ "m_eventClass": "wxTreeEvent",
+ "m_eventHandler": "wxTreeEventHandler",
+ "m_functionNameAndSignature": "OnTreeItemSelectionChanged(wxTreeEvent& event)",
+ "m_description": "Selection has changed.",
+ "m_noBody": false
+ }],
"m_children": []
}, {
"m_type": 4485,
diff --git a/Project/ChartViewBase.cpp b/Project/ChartViewBase.cpp
index 22a650b..8c2bc32 100644
--- a/Project/ChartViewBase.cpp
+++ b/Project/ChartViewBase.cpp
@@ -67,7 +67,7 @@ ChartViewBase::ChartViewBase(wxWindow* parent, wxWindowID id, const wxString& ti
boxSizer_lvl1_1->Add(boxSizer_lvl2_1, 0, wxEXPAND, WXC_FROM_DIP(5));
- m_treeCtrl = new wxTreeCtrl(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxTR_DEFAULT_STYLE);
+ m_treeCtrl = new wxTreeCtrl(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT);
boxSizer_lvl2_1->Add(m_treeCtrl, 1, 0, WXC_FROM_DIP(5));
m_treeCtrl->SetMinSize(wxSize(250,-1));
@@ -183,6 +183,8 @@ ChartViewBase::ChartViewBase(wxWindow* parent, wxWindowID id, const wxString& ti
this->Connect(m_menuItemShowLabel->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowLabelClick), NULL, this);
this->Connect(m_menuItemShowCoordinates->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowCoordinatesClick), NULL, this);
this->Connect(m_menuItemDarkTheme->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuDarkThemeClick), NULL, this);
+ m_treeCtrl->Connect(wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler(ChartViewBase::OnTreeItemActivated), NULL, this);
+ m_treeCtrl->Connect(wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler(ChartViewBase::OnTreeItemSelectionChanged), NULL, this);
m_pgMgr->Connect(wxEVT_PG_CHANGED, wxPropertyGridEventHandler(ChartViewBase::OnPropertyGridChange), NULL, this);
}
@@ -197,6 +199,8 @@ ChartViewBase::~ChartViewBase()
this->Disconnect(m_menuItemShowLabel->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowLabelClick), NULL, this);
this->Disconnect(m_menuItemShowCoordinates->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowCoordinatesClick), NULL, this);
this->Disconnect(m_menuItemDarkTheme->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuDarkThemeClick), NULL, this);
+ m_treeCtrl->Disconnect(wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler(ChartViewBase::OnTreeItemActivated), NULL, this);
+ m_treeCtrl->Disconnect(wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler(ChartViewBase::OnTreeItemSelectionChanged), NULL, this);
m_pgMgr->Disconnect(wxEVT_PG_CHANGED, wxPropertyGridEventHandler(ChartViewBase::OnPropertyGridChange), NULL, this);
}
diff --git a/Project/ChartViewBase.h b/Project/ChartViewBase.h
index b7d6494..2c7af3c 100644
--- a/Project/ChartViewBase.h
+++ b/Project/ChartViewBase.h
@@ -83,6 +83,8 @@ protected:
virtual void OnMenuShowLabelClick(wxCommandEvent& event) { event.Skip(); }
virtual void OnMenuShowCoordinatesClick(wxCommandEvent& event) { event.Skip(); }
virtual void OnMenuDarkThemeClick(wxCommandEvent& event) { event.Skip(); }
+ virtual void OnTreeItemActivated(wxTreeEvent& event) { event.Skip(); }
+ virtual void OnTreeItemSelectionChanged(wxTreeEvent& event) { event.Skip(); }
virtual void OnPropertyGridChange(wxPropertyGridEvent& event) { event.Skip(); }
public:
diff --git a/Project/ControlEditor.cpp b/Project/ControlEditor.cpp
index 927654e..a3ab3d9 100644
--- a/Project/ControlEditor.cpp
+++ b/Project/ControlEditor.cpp
@@ -14,6 +14,7 @@
#include "Gain.h"
#include "ChartView.h"
+#include "ElementPlotData.h"
ControlElementButton::ControlElementButton(wxWindow* parent, wxString label, wxImage image, wxWindowID id)
: wxWindow(parent, id)
@@ -617,7 +618,30 @@ void ControlEditor::OnKeyDown(wxKeyEvent& event)
{
//tests
if(event.ControlDown() && event.ShiftDown()) {
- ChartView* cView = new ChartView(this);
+ std::vector<double> time, x2, x3;
+ for(int i=0; i<100; ++i) {
+ time.push_back(i);
+ x2.push_back(std::pow(static_cast<double>(i),2));
+ x3.push_back(std::pow(static_cast<double>(i),3));
+ }
+ std::vector<ElementPlotData> epdList;
+
+ ElementPlotData curve1Data(_("Func. polinomiais 1"), ElementPlotData::CT_BUS);
+ curve1Data.AddData(x2, _("x^2"));
+ curve1Data.AddData(x3, _("x^3"));
+ epdList.push_back(curve1Data);
+
+ ElementPlotData curve2Data(_("Func. polinomiais 2"), ElementPlotData::CT_BUS);
+ curve2Data.AddData(x2, _("x^2"));
+ curve2Data.AddData(x3, _("x^3"));
+ epdList.push_back(curve2Data);
+
+ ElementPlotData curve3Data(_("Func. polinomiais 3"), ElementPlotData::CT_SYNC_GENERATOR);
+ curve3Data.AddData(x2, _("x^2"));
+ curve3Data.AddData(x3, _("x^3"));
+ epdList.push_back(curve3Data);
+
+ ChartView* cView = new ChartView(this, epdList, time);
cView->Show();
}
}
diff --git a/Project/ControlEditor.h b/Project/ControlEditor.h
index e42b0c0..232ebd8 100644
--- a/Project/ControlEditor.h
+++ b/Project/ControlEditor.h
@@ -26,6 +26,7 @@ class Constant;
class Gain;
class ChartView;
+class ElementDataObject;
enum ControlElementButtonID { ID_IO = 0, ID_TF, ID_SUM, ID_CONST, ID_LIMITER, ID_GAIN, ID_MULT, ID_EXP, ID_RATELIM };
diff --git a/Project/ElementPlotData.cpp b/Project/ElementPlotData.cpp
index 6639802..0f406a8 100644
--- a/Project/ElementPlotData.cpp
+++ b/Project/ElementPlotData.cpp
@@ -1,9 +1,9 @@
#include "ElementPlotData.h"
-ElementPlotData::ElementPlotData(wxString name, CurveType type)
+ElementPlotData::ElementPlotData(wxString name, CurveType curveType)
{
m_name = name;
- m_curveType = type;
+ m_curveType = curveType;
}
ElementPlotData::~ElementPlotData() {}
diff --git a/Project/ElementPlotData.h b/Project/ElementPlotData.h
index 64bc03e..1434664 100644
--- a/Project/ElementPlotData.h
+++ b/Project/ElementPlotData.h
@@ -40,18 +40,20 @@ class ElementPlotData
{
public:
enum CurveType {
- CT_TIME = 0,
- CT_BUS,
+ CT_BUS = 0,
CT_SYNC_GENERATOR,
CT_SYNC_COMPENSATOR,
CT_TRANSFORMER,
CT_LINE,
CT_IND_MOTOR,
- CT_SHUNT_REACTOR,
+ CT_SHUNT_INDUCTOR,
CT_SHUNT_CAPACITOR,
CT_LOAD,
+ NUM_ELEMENTS,
+ CT_TIME
};
- ElementPlotData(wxString name, CurveType type);
+ ElementPlotData() {};
+ ElementPlotData(wxString name, CurveType curveType);
~ElementPlotData();
wxString GetName() const { return m_name; }
diff --git a/Project/Project.mk b/Project/Project.mk
index b374fd4..3125163 100644
--- a/Project/Project.mk
+++ b/Project/Project.mk
@@ -13,7 +13,7 @@ CurrentFileName :=
CurrentFilePath :=
CurrentFileFullPath :=
User :=NDSE-69
-Date :=26/04/2017
+Date :=27/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