diff options
author | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2017-09-19 21:14:46 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-19 21:14:46 -0300 |
commit | fa2776e9a939a793a9e46a0cc5880dda868e7028 (patch) | |
tree | 302f16d6d9af20a293d18d8a553ba2eac19a0fae /Project | |
parent | 3be51dc6e55414c76e7059a8dffa74a99268a7c8 (diff) | |
parent | 011fe58b631f66b715b0ba0d3f8be58277b355b2 (diff) | |
download | PSP.git-fa2776e9a939a793a9e46a0cc5880dda868e7028.tar.gz PSP.git-fa2776e9a939a793a9e46a0cc5880dda868e7028.tar.xz PSP.git-fa2776e9a939a793a9e46a0cc5880dda868e7028.zip |
Merge pull request #38 from Thales1330/wip/open-dot-psp
Wip open dot psp
Diffstat (limited to 'Project')
-rw-r--r-- | Project/AboutForm.cpp | 4 | ||||
-rw-r--r-- | Project/AboutForm.h | 1 | ||||
-rw-r--r-- | Project/ControlEditor.cpp | 36 | ||||
-rw-r--r-- | Project/Element.cpp | 9 | ||||
-rw-r--r-- | Project/Element.h | 9 | ||||
-rw-r--r-- | Project/Line.cpp | 27 | ||||
-rw-r--r-- | Project/MainFrame.cpp | 24 | ||||
-rw-r--r-- | Project/MainFrame.h | 24 | ||||
-rw-r--r-- | Project/Project.mk | 2 | ||||
-rw-r--r-- | Project/PropertiesForm.cpp | 2 | ||||
-rw-r--r-- | Project/PropertiesForm.wxcp | 2 | ||||
-rw-r--r-- | Project/Workspace.cpp | 2 | ||||
-rw-r--r-- | Project/Workspace.h | 31 | ||||
-rw-r--r-- | Project/main.cpp | 22 |
14 files changed, 138 insertions, 57 deletions
diff --git a/Project/AboutForm.cpp b/Project/AboutForm.cpp index 191d9e4..b9d4f88 100644 --- a/Project/AboutForm.cpp +++ b/Project/AboutForm.cpp @@ -60,7 +60,9 @@ void AboutForm::Init() // Load license file wxString licenseStr = ""; wxTextFile file; - if(!file.Open("../data/LICENSE")) { + wxFileName fn(wxStandardPaths::Get().GetExecutablePath()); + wxString licensePath = fn.GetPath() + "\\..\\data\\LICENSE"; + if(!file.Open(licensePath)) { // Error message } else { licenseStr += file.GetFirstLine() + "\n"; diff --git a/Project/AboutForm.h b/Project/AboutForm.h index ba64324..abba7f4 100644 --- a/Project/AboutForm.h +++ b/Project/AboutForm.h @@ -3,6 +3,7 @@ #include "PropertiesForm.h" #include <wx/textfile.h> +#include <wx/stdpaths.h> class AboutForm : public AboutFormBase { diff --git a/Project/ControlEditor.cpp b/Project/ControlEditor.cpp index c86477d..b72f6dd 100644 --- a/Project/ControlEditor.cpp +++ b/Project/ControlEditor.cpp @@ -132,48 +132,54 @@ void ControlEditor::BuildControlElementPanel() wxWrapSizer* wrapSizer = new wxWrapSizer(); m_panelControlElements->SetSizer(wrapSizer); - ControlElementButton* ioButton = new ControlElementButton(m_panelControlElements, _("In/Out"), - wxImage("..\\data\\images\\control\\io.png"), ID_IO); + wxFileName exeFileName(wxStandardPaths::Get().GetExecutablePath()); + wxString exePath = exeFileName.GetPath(); + + ControlElementButton* ioButton = new ControlElementButton( + m_panelControlElements, _("In/Out"), wxImage(exePath + "\\..\\data\\images\\control\\io.png"), ID_IO); wrapSizer->Add(ioButton, 0, wxALL, 5); ioButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this); - ControlElementButton* tfButton = new ControlElementButton( - m_panelControlElements, _("Transfer fcn"), wxImage("..\\data\\images\\control\\transferFunc.png"), ID_TF); + ControlElementButton* tfButton = + new ControlElementButton(m_panelControlElements, _("Transfer fcn"), + wxImage(exePath + "\\..\\data\\images\\control\\transferFunc.png"), ID_TF); wrapSizer->Add(tfButton, 0, wxALL, 5); tfButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this); - ControlElementButton* sumButton = new ControlElementButton(m_panelControlElements, _("Sum"), - wxImage("..\\data\\images\\control\\sum.png"), ID_SUM); + ControlElementButton* sumButton = new ControlElementButton( + m_panelControlElements, _("Sum"), wxImage(exePath + "\\..\\data\\images\\control\\sum.png"), ID_SUM); wrapSizer->Add(sumButton, 0, wxALL, 5); sumButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this); ControlElementButton* constButton = new ControlElementButton( - m_panelControlElements, _("Constant"), wxImage("..\\data\\images\\control\\value.png"), ID_CONST); + m_panelControlElements, _("Constant"), wxImage(exePath + "\\..\\data\\images\\control\\value.png"), ID_CONST); wrapSizer->Add(constButton, 0, wxALL, 5); constButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this); - ControlElementButton* limButton = new ControlElementButton( - m_panelControlElements, _("Limiter"), wxImage("..\\data\\images\\control\\limiter.png"), ID_LIMITER); + ControlElementButton* limButton = + new ControlElementButton(m_panelControlElements, _("Limiter"), + wxImage(exePath + "\\..\\data\\images\\control\\limiter.png"), ID_LIMITER); wrapSizer->Add(limButton, 0, wxALL, 5); limButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this); ControlElementButton* gainButton = new ControlElementButton( - m_panelControlElements, _("Gain"), wxImage("..\\data\\images\\control\\gain.png"), ID_GAIN); + m_panelControlElements, _("Gain"), wxImage(exePath + "\\..\\data\\images\\control\\gain.png"), ID_GAIN); wrapSizer->Add(gainButton, 0, wxALL, 5); gainButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this); ControlElementButton* multButton = new ControlElementButton( - m_panelControlElements, _("Multiplier"), wxImage("..\\data\\images\\control\\mult.png"), ID_MULT); + m_panelControlElements, _("Multiplier"), wxImage(exePath + "\\..\\data\\images\\control\\mult.png"), ID_MULT); wrapSizer->Add(multButton, 0, wxALL, 5); multButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this); - ControlElementButton* satButton = new ControlElementButton(m_panelControlElements, _("Exponential"), - wxImage("..\\data\\images\\control\\sat.png"), ID_EXP); + ControlElementButton* satButton = new ControlElementButton( + m_panelControlElements, _("Exponential"), wxImage(exePath + "\\..\\data\\images\\control\\sat.png"), ID_EXP); wrapSizer->Add(satButton, 0, wxALL, 5); satButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this); - ControlElementButton* rateLimButton = new ControlElementButton( - m_panelControlElements, _("Rate limiter"), wxImage("..\\data\\images\\control\\rateLimiter.png"), ID_RATELIM); + ControlElementButton* rateLimButton = + new ControlElementButton(m_panelControlElements, _("Rate limiter"), + wxImage(exePath + "\\..\\data\\images\\control\\rateLimiter.png"), ID_RATELIM); wrapSizer->Add(rateLimButton, 0, wxALL, 5); rateLimButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this); } diff --git a/Project/Element.cpp b/Project/Element.cpp index 381be00..0b6202e 100644 --- a/Project/Element.cpp +++ b/Project/Element.cpp @@ -227,16 +227,19 @@ bool Element::SetOnline(bool online) void Element::GeneralMenuItens(wxMenu& menu) { + wxFileName exeFileName(wxStandardPaths::Get().GetExecutablePath()); + wxString exePath = exeFileName.GetPath(); + wxMenuItem* clockItem = new wxMenuItem(&menu, ID_ROTATE_CLOCK, _("Rotate clockwise")); - clockItem->SetBitmap(wxImage("..\\data\\images\\menu\\rotateClock16.png")); + clockItem->SetBitmap(wxImage(exePath + "\\..\\data\\images\\menu\\rotateClock16.png")); menu.Append(clockItem); wxMenuItem* counterClockItem = new wxMenuItem(&menu, ID_ROTATE_COUNTERCLOCK, _("Rotate counter-clockwise")); - counterClockItem->SetBitmap(wxImage("..\\data\\images\\menu\\rotateCounterClock16.png")); + counterClockItem->SetBitmap(wxImage(exePath + "\\..\\data\\images\\menu\\rotateCounterClock16.png")); menu.Append(counterClockItem); wxMenuItem* deleteItem = new wxMenuItem(&menu, ID_DELETE, _("Delete")); - deleteItem->SetBitmap(wxImage("..\\data\\images\\menu\\delete16.png")); + deleteItem->SetBitmap(wxImage(exePath + "\\..\\data\\images\\menu\\delete16.png")); menu.Append(deleteItem); } diff --git a/Project/Element.h b/Project/Element.h index 08fdfe9..2cd7392 100644 --- a/Project/Element.h +++ b/Project/Element.h @@ -5,6 +5,8 @@ #include <wx/geometry.h> #include <wx/cursor.h> #include <wx/menu.h> +#include <wx/stdpaths.h> +#include <wx/filename.h> #include <GL/gl.h> #include <complex> @@ -85,6 +87,13 @@ protected: GLdouble rgba[4]; }; +/** + * @class Element + * @author Thales Lima Oliveira <thales@ufu.br> + * @date 19/09/2017 + * @file Element.h + * @brief Base class of all elements of the program. This class is responsible for manage graphical and his data. + */ class Element { public: diff --git a/Project/Line.cpp b/Project/Line.cpp index 1277361..540d844 100644 --- a/Project/Line.cpp +++ b/Project/Line.cpp @@ -271,18 +271,21 @@ void Line::MoveNode(Element* parent, wxPoint2DDouble position) bool Line::GetContextMenu(wxMenu& menu) { + wxFileName exeFileName(wxStandardPaths::Get().GetExecutablePath()); + wxString exePath = exeFileName.GetPath(); + menu.Append(ID_EDIT_ELEMENT, _("Edit line")); if(m_activePickboxID == ID_PB_NONE) { wxMenuItem* addNodeItem = new wxMenuItem(&menu, ID_LINE_ADD_NODE, _("Insert node")); - addNodeItem->SetBitmap(wxImage("..\\data\\images\\menu\\addNode16.png")); + addNodeItem->SetBitmap(wxImage(exePath + "\\..\\data\\images\\menu\\addNode16.png")); menu.Append(addNodeItem); } else { wxMenuItem* addNodeItem = new wxMenuItem(&menu, ID_LINE_REMOVE_NODE, _("Remove node")); - addNodeItem->SetBitmap(wxImage("..\\data\\images\\menu\\removeNode16.png")); + addNodeItem->SetBitmap(wxImage(exePath + "\\..\\data\\images\\menu\\removeNode16.png")); menu.Append(addNodeItem); } wxMenuItem* deleteItem = new wxMenuItem(&menu, ID_DELETE, _("Delete")); - deleteItem->SetBitmap(wxImage("..\\data\\images\\menu\\delete16.png")); + deleteItem->SetBitmap(wxImage(exePath + "\\..\\data\\images\\menu\\delete16.png")); menu.Append(deleteItem); return true; } @@ -557,16 +560,16 @@ LineElectricalData Line::GetPUElectricalData(double systemBasePower) // Zero seq. cap. susceptance double b0 = data.zeroCapSusceptance; if(data.useLinePower) data.zeroCapSusceptance = (b0 * lineBaseImpedance) / systemBaseImpedance; - + if(!m_online) { - data.powerFlow[0] = std::complex<double>(0,0); - data.powerFlow[1] = std::complex<double>(0,0); - data.faultCurrent[0][0] = std::complex<double>(0,0); - data.faultCurrent[0][1] = std::complex<double>(0,0); - data.faultCurrent[0][2] = std::complex<double>(0,0); - data.faultCurrent[1][0] = std::complex<double>(0,0); - data.faultCurrent[1][1] = std::complex<double>(0,0); - data.faultCurrent[1][2] = std::complex<double>(0,0); + data.powerFlow[0] = std::complex<double>(0, 0); + data.powerFlow[1] = std::complex<double>(0, 0); + data.faultCurrent[0][0] = std::complex<double>(0, 0); + data.faultCurrent[0][1] = std::complex<double>(0, 0); + data.faultCurrent[0][2] = std::complex<double>(0, 0); + data.faultCurrent[1][0] = std::complex<double>(0, 0); + data.faultCurrent[1][1] = std::complex<double>(0, 0); + data.faultCurrent[1][2] = std::complex<double>(0, 0); } return data; diff --git a/Project/MainFrame.cpp b/Project/MainFrame.cpp index 9477e13..436f1fd 100644 --- a/Project/MainFrame.cpp +++ b/Project/MainFrame.cpp @@ -19,12 +19,34 @@ #include "AboutForm.h" MainFrame::MainFrame() : MainFrameBase(NULL) {} -MainFrame::MainFrame(wxWindow* parent, wxLocale* locale, PropertiesData* initProperties) : MainFrameBase(parent) +MainFrame::MainFrame(wxWindow* parent, wxLocale* locale, PropertiesData* initProperties, wxString openPath) + : MainFrameBase(parent) { m_locale = locale; m_generalProperties = initProperties; Init(); + + if(openPath != "") { + EnableCurrentProjectRibbon(); + Workspace* newWorkspace = new Workspace(this, _("Open project"), this->GetStatusBar()); + + FileHanding fileHandling(newWorkspace); + if(fileHandling.OpenProject(openPath)) { + newWorkspace->SetSavedPath(openPath); + + m_workspaceList.push_back(newWorkspace); + + m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_DISABLESOL, true); + m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_ENABLESOL, false); + + m_auiNotebook->AddPage(newWorkspace, newWorkspace->GetName(), true); + m_auiNotebook->Layout(); + newWorkspace->Redraw(); + newWorkspace->SetJustOpened(true); + m_projectNumber++; + } + } } MainFrame::~MainFrame() diff --git a/Project/MainFrame.h b/Project/MainFrame.h index 876b57c..2b91b20 100644 --- a/Project/MainFrame.h +++ b/Project/MainFrame.h @@ -30,11 +30,32 @@ enum { ID_ADDMENU_SYNCCOMP }; +/** + * @class MainFrame + * @author Thales Lima Oliveira <thales@ufu.br> + * @date 19/09/2017 + * @file MainFrame.h + * @brief Main frame of the program. This class manage the ribbon menu and the notebook behavior. + */ class MainFrame : public MainFrameBase { public: + /** + * @brief Default constructor. + */ + MainFrame(); - MainFrame(wxWindow* parent, wxLocale* locale, PropertiesData* initProperties); + /** + * @brief Main frame contructor. + * @param parent Parent window. + * @param locale Locale settings. + * @param initProperties Initial properties. + */ + MainFrame(wxWindow* parent, wxLocale* locale, PropertiesData* initProperties, wxString openPath = ""); + + /** + * @brief Default destructor. + */ ~MainFrame(); protected: @@ -73,7 +94,6 @@ class MainFrame : public MainFrameBase virtual void OnUndoClick(wxRibbonButtonBarEvent& event); virtual void OnNewClick(wxRibbonButtonBarEvent& event); - protected: std::vector<Workspace*> m_workspaceList; int m_projectNumber = 1; diff --git a/Project/Project.mk b/Project/Project.mk index 40c7916..922d62d 100644 --- a/Project/Project.mk +++ b/Project/Project.mk @@ -13,7 +13,7 @@ CurrentFileName := CurrentFilePath := CurrentFileFullPath := User :=NDSE-69 -Date :=18/09/2017 +Date :=19/09/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/PropertiesForm.cpp b/Project/PropertiesForm.cpp index d63c659..af7fcc2 100644 --- a/Project/PropertiesForm.cpp +++ b/Project/PropertiesForm.cpp @@ -532,7 +532,7 @@ AboutFormBase::AboutFormBase(wxWindow* parent, wxWindowID id, const wxString& ti flexGridSizer247->Add(m_staticTextVersionLabel, 0, wxALL, WXC_FROM_DIP(5)); - m_staticTextVersion = new wxStaticText(this, wxID_ANY, _("Alpha 2017w37a"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0); + m_staticTextVersion = new wxStaticText(this, wxID_ANY, _("Alpha 2017w38b"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0); flexGridSizer247->Add(m_staticTextVersion, 0, wxALL, WXC_FROM_DIP(5)); diff --git a/Project/PropertiesForm.wxcp b/Project/PropertiesForm.wxcp index 56284bb..72d0a53 100644 --- a/Project/PropertiesForm.wxcp +++ b/Project/PropertiesForm.wxcp @@ -5801,7 +5801,7 @@ }, { "type": "multi-string", "m_label": "Label:", - "m_value": "Alpha 2017w37a" + "m_value": "Alpha 2017w38b" }, { "type": "string", "m_label": "Wrap:", diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index ddbf470..70bd345 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -725,7 +725,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } // Tests - Ctrl + Shift + L if(event.ControlDown() && event.ShiftDown()) { - UpdateTextElements(); + // Nothing... } } break; case 'T': // Insert a transformer. diff --git a/Project/Workspace.h b/Project/Workspace.h index 5a36106..09b94e5 100644 --- a/Project/Workspace.h +++ b/Project/Workspace.h @@ -53,9 +53,17 @@ enum ElementID { NUM_ELEMENTS }; +/** + * @class Workspace + * @author Thales Lima Oliveira <thales@ufu.br> + * @date 19/09/2017 + * @file Workspace.h + * @brief This class manages the graphical and power elements. It is responsible for handling the user's interaction + * with the elements. + */ class Workspace : public WorkspaceBase { -public: + public: enum WorkspaceMode { MODE_EDIT = 0, MODE_MOVE_ELEMENT, @@ -81,12 +89,10 @@ public: std::vector<Element*> GetAllElements() const; WorkspaceMode GetWorkspaceMode() const { return m_mode; } Camera* GetCamera() const { return m_camera; } - void CopySelection(); bool Paste(); wxFileName GetSavedPath() const { return m_savedPath; } - void SetName(wxString name) { m_name = name; } void SetElementList(std::vector<Element*> elementList); void SetTextList(std::vector<Text*> textList); @@ -94,13 +100,12 @@ public: void SetWorkspaceMode(WorkspaceMode mode) { m_mode = mode; } void SetSavedPath(wxFileName savedPath) { m_savedPath = savedPath; } void SetJustOpened(bool justOpened) { m_justOpened = justOpened; } - void Redraw() { m_glCanvas->Refresh(); } void RotateSelectedElements(bool clockwise = true); void DeleteSelectedElements(); bool GetElementsCorners(wxPoint2DDouble& leftUpCorner, - wxPoint2DDouble& rightDownCorner, - std::vector<Element*> elementList); + wxPoint2DDouble& rightDownCorner, + std::vector<Element*> elementList); void Fit(); void UnselectAll(); @@ -112,21 +117,17 @@ public: int GetElementNumber(ElementID elementID) { return m_elementNumber[elementID]; } void IncrementElementNumber(ElementID elementID) { m_elementNumber[elementID]++; } - PropertiesData* GetProperties() const { return m_properties; } - std::vector<double> GetStabilityTimeVector() const { return m_stabilityTimeVector; } - bool IsContinuousCalculationActive() const { return m_continuousCalc; } void SetContinuousCalculationActive(bool value = true) { m_continuousCalc = value; } - bool RunPowerFlow(); bool RunFault(); bool RunSCPower(); bool RunStaticStudies(); bool RunStability(); -protected: + protected: virtual void OnMiddleDoubleClick(wxMouseEvent& event); virtual void OnIdle(wxIdleEvent& event); virtual void OnTimer(wxTimerEvent& event); @@ -162,14 +163,14 @@ protected: wxRect2DDouble m_selectionRect; wxPoint2DDouble m_startSelRect; - + PropertiesData* m_properties = NULL; - + std::vector<double> m_stabilityTimeVector; - + bool m_continuousCalc = false; bool m_disconnectedElement = false; bool m_justOpened = false; }; -#endif // WORKSPACE_H +#endif // WORKSPACE_H diff --git a/Project/main.cpp b/Project/main.cpp index a138a63..de8cac3 100644 --- a/Project/main.cpp +++ b/Project/main.cpp @@ -3,6 +3,7 @@ #include <wx/image.h> #include <wx/stdpaths.h> #include <wx/textfile.h> +#include <wx/cmdline.h> #include "MainFrame.h" #include "PropertiesData.h" @@ -15,12 +16,13 @@ class MainApp : public wxApp virtual ~MainApp() {} bool LoadInitFile(PropertiesData* propertiesData) { - wxTextFile file("config.ini"); + wxFileName fn(wxStandardPaths::Get().GetExecutablePath()); + wxTextFile file(fn.GetPath() + "\\config.ini"); auto data = propertiesData->GetGeneralPropertiesData(); if(!file.Create()) { if(!file.Open()) return false; - + wxString line; for(line = file.GetFirstLine(); !file.Eof(); line = file.GetNextLine()) { wxString tag = ""; @@ -53,7 +55,7 @@ class MainApp : public wxApp } } file.Close(); - } else { // Create default init file. + } else { // Create default init file. if(!file.Open()) return false; // Default parameters. @@ -95,7 +97,19 @@ class MainApp : public wxApp wxLocale* locale = new wxLocale(); LoadCatalogs(locale, propertiesData); - MainFrame* mainFrame = new MainFrame(NULL, locale, propertiesData); + wxString openFilePath = ""; + + wxCmdLineParser cmdLineParser(wxApp::argc, wxApp::argv); + cmdLineParser.AddParam("", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL); + if(cmdLineParser.Parse() == 0) { + wxCmdLineArgs args = cmdLineParser.GetArguments(); + for(auto it = args.begin(), itEnd = args.end(); it != itEnd; ++it) { + if(it->GetKind() == wxCMD_LINE_PARAM) { + openFilePath = it->GetStrVal(); + } + } + } + MainFrame* mainFrame = new MainFrame(NULL, locale, propertiesData, openFilePath); mainFrame->SetIcon(wxICON(aaaaprogicon)); SetTopWindow(mainFrame); return GetTopWindow()->Show(); |