1#include "../elements/powerElement/HarmCurrent.h"
2#include "HarmCurrentForm.h"
4HarmCurrentForm::HarmCurrentForm(wxWindow* parent,
HarmCurrent* harmCurrent) : HarmCurrentFormBase(parent)
7 m_harmCurrent = harmCurrent;
9 m_listCtrlHarmCurrentList->AppendColumn(_(
"Order"));
10 m_listCtrlHarmCurrentList->AppendColumn(_(
"Current"));
11 m_listCtrlHarmCurrentList->AppendColumn(_(
"Unit"));
12 m_listCtrlHarmCurrentList->AppendColumn(_(
"Angle"));
14 auto data = m_harmCurrent->GetElectricalData();
15 m_textCtrlName->SetValue(data.name);
16 for(
unsigned int i = 0; i < data.harmonicOrder.size(); ++i) {
17 long item = m_listCtrlHarmCurrentList->InsertItem(m_maxID, wxString::Format(
"%d", data.harmonicOrder[i]));
18 m_listCtrlHarmCurrentList->SetItem(item, 1, m_harmCurrent->StringFromDouble(data.injHarmCurrent[i], 1));
19 m_listCtrlHarmCurrentList->SetItem(item, 2, data.injHarmCurrentUnit[i] ==
ElectricalUnit::UNIT_A ? _(
"A") : _(
"p.u."));
20 m_listCtrlHarmCurrentList->SetItem(item, 3, m_harmCurrent->StringFromDouble(data.injHarmAngle[i], 1));
24 SetSize(GetBestSize());
28HarmCurrentForm::~HarmCurrentForm() {}
30void HarmCurrentForm::OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
31void HarmCurrentForm::OnOKButtonClick(wxCommandEvent& event)
33 if(ValidateData()) EndModal(wxID_OK);
36bool HarmCurrentForm::ValidateData()
38 wxString name = m_textCtrlName->GetValue();
39 std::vector<int> harmonicOrder;
40 std::vector<double> injHarmCurrent;
41 std::vector<ElectricalUnit> injHarmCurrentUnit;
42 std::vector<double> injHarmAngle;
46 item = m_listCtrlHarmCurrentList->GetNextItem(item, wxLIST_NEXT_ALL);
48 harmonicOrder.push_back(wxAtoi(m_listCtrlHarmCurrentList->GetItemText(item, 0)));
49 double injCurrent = 0.0;
50 if(!m_listCtrlHarmCurrentList->GetItemText(item, 1).ToDouble(&injCurrent)) {
return false; }
51 injHarmCurrent.push_back(injCurrent);
52 if(m_listCtrlHarmCurrentList->GetItemText(item, 2) ==
"A")
56 double injCAngle = 0.0;
57 if(!m_listCtrlHarmCurrentList->GetItemText(item, 3).ToDouble(&injCAngle)) {
return false; }
58 injHarmAngle.push_back(injCAngle);
61 auto data = m_harmCurrent->GetElectricalData();
63 data.harmonicOrder = harmonicOrder;
64 data.injHarmCurrent = injHarmCurrent;
65 data.injHarmCurrentUnit = injHarmCurrentUnit;
66 data.injHarmAngle = injHarmAngle;
67 m_harmCurrent->SetElectricalData(data);
71void HarmCurrentForm::OnAddButtonClick(wxCommandEvent& event)
73 wxString order = m_pgPropHarmOrder->GetValue().GetString();
76 bool findOrder =
false;
78 item = m_listCtrlHarmCurrentList->GetNextItem(item, wxLIST_NEXT_ALL);
80 if(m_listCtrlHarmCurrentList->GetItemText(item, 0) == order) {
86 if(!findOrder) item = m_listCtrlHarmCurrentList->InsertItem(m_maxID, m_pgPropHarmOrder->GetValue().GetString());
87 m_listCtrlHarmCurrentList->SetItem(item, 1, m_pgPropHarmCurrent->GetValue().GetString());
88 m_listCtrlHarmCurrentList->SetItem(item, 2, m_pgPropUnit->GetValue().GetInteger() == 0 ? _(
"A") : _(
"p.u."));
89 m_listCtrlHarmCurrentList->SetItem(item, 3, m_pgPropHarmAngle->GetValue().GetString());
90 if(!findOrder) m_maxID++;
94void HarmCurrentForm::OnRemoveButtonClick(wxCommandEvent& event)
96 std::vector<long> itemList;
99 item = m_listCtrlHarmCurrentList->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
100 if(item == -1)
break;
101 itemList.push_back(item);
103 for(
int i =
static_cast<int>(itemList.size()) - 1; i >= 0; --i) {
104 m_listCtrlHarmCurrentList->DeleteItem(itemList[i]);
108void HarmCurrentForm::SortList()
112 std::vector<int> harmonicOrder;
113 std::vector<double> injHarmCurrent;
114 std::vector<ElectricalUnit> injHarmCurrentUnit;
115 std::vector<double> injHarmAngle;
120 item = m_listCtrlHarmCurrentList->GetNextItem(item, wxLIST_NEXT_ALL);
121 if(item == -1)
break;
122 harmonicOrder.push_back(wxAtoi(m_listCtrlHarmCurrentList->GetItemText(item, 0)));
123 double injCurrent = 0.0;
124 if(!m_listCtrlHarmCurrentList->GetItemText(item, 1).ToDouble(&injCurrent))
return;
125 injHarmCurrent.push_back(injCurrent);
126 if(m_listCtrlHarmCurrentList->GetItemText(item, 2) ==
"A")
130 double injCAngle = 0.0;
131 if(!m_listCtrlHarmCurrentList->GetItemText(item, 3).ToDouble(&injCAngle))
return;
132 injHarmAngle.push_back(injCAngle);
136 for(
unsigned int i = 0; i < harmonicOrder.size(); ++i) {
137 for(
unsigned int j = 0; j < harmonicOrder.size(); ++j) {
138 if(harmonicOrder[i] < harmonicOrder[j]) {
139 int h = harmonicOrder[j];
140 harmonicOrder[j] = harmonicOrder[i];
141 harmonicOrder[i] = h;
143 double current = injHarmCurrent[j];
144 injHarmCurrent[j] = injHarmCurrent[i];
145 injHarmCurrent[i] = current;
147 auto unit = injHarmCurrentUnit[j];
148 injHarmCurrentUnit[j] = injHarmCurrentUnit[i];
149 injHarmCurrentUnit[i] = unit;
151 double angle = injHarmAngle[j];
152 injHarmAngle[j] = injHarmAngle[i];
153 injHarmAngle[i] = angle;
159 m_listCtrlHarmCurrentList->ClearAll();
160 m_listCtrlHarmCurrentList->AppendColumn(_(
"Order"));
161 m_listCtrlHarmCurrentList->AppendColumn(_(
"Current"));
162 m_listCtrlHarmCurrentList->AppendColumn(_(
"Unit"));
163 m_listCtrlHarmCurrentList->AppendColumn(_(
"Angle"));
165 for(
unsigned int i = 0; i < harmonicOrder.size(); ++i) {
166 long item = m_listCtrlHarmCurrentList->InsertItem(m_maxID, wxString::Format(
"%d", harmonicOrder[i]));
167 m_listCtrlHarmCurrentList->SetItem(item, 1, m_harmCurrent->
StringFromDouble(injHarmCurrent[i], 1));
168 m_listCtrlHarmCurrentList->SetItem(item, 2, injHarmCurrentUnit[i] ==
ElectricalUnit::UNIT_A ? _(
"A") : _(
"p.u."));
169 m_listCtrlHarmCurrentList->SetItem(item, 3, m_harmCurrent->
StringFromDouble(injHarmAngle[i], 1));
static wxString StringFromDouble(double value, int minDecimal=1, int maxDecimals=13)
Convert a double value to string.
Shunt Harmonic Corrent Source.