diff options
author | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2017-04-27 20:38:55 -0300 |
---|---|---|
committer | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2017-04-27 20:38:55 -0300 |
commit | 50f31898499d1d1e1ebc8ab9c9c26d3b4ec1b3c1 (patch) | |
tree | f4a509a9e20d6ece771a718638b9f31a2a268ef8 | |
parent | ee58faacaaaf83293ead87696847b018f9a1281d (diff) | |
download | PSP.git-50f31898499d1d1e1ebc8ab9c9c26d3b4ec1b3c1.tar.gz PSP.git-50f31898499d1d1e1ebc8ab9c9c26d3b4ec1b3c1.tar.xz PSP.git-50f31898499d1d1e1ebc8ab9c9c26d3b4ec1b3c1.zip |
More methods implemented
buggy
-rw-r--r-- | Project/ChartView.cpp | 121 | ||||
-rw-r--r-- | Project/ChartView.h | 22 | ||||
-rw-r--r-- | Project/ChartView.wxcp | 18 | ||||
-rw-r--r-- | Project/ChartViewBase.cpp | 6 | ||||
-rw-r--r-- | Project/ChartViewBase.h | 2 | ||||
-rw-r--r-- | Project/ControlEditor.cpp | 26 | ||||
-rw-r--r-- | Project/ControlEditor.h | 1 | ||||
-rw-r--r-- | Project/ElementPlotData.cpp | 4 | ||||
-rw-r--r-- | Project/ElementPlotData.h | 10 | ||||
-rw-r--r-- | Project/Project.mk | 2 |
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 |