1#include "LabelManager.h"
6#include "../editors/Workspace.h"
8LabelManager::LabelManager(wxWindow* parent,
Workspace* workspace)
9 : LabelManagerBase(parent), m_workspace(workspace)
11 std::vector<wxString> branchOptions = { _(L
"Name"),
12 _(L
"Active power (i → j)"), _(L
"Active power (j → i)"),
13 _(L
"Rective power (i → j)"), _(L
"Rective power (j → i)"),
15 _(L
"Current (i → j)"), _(L
"Current (j → i)"),
16 _(L
"Fault current (i → j)"), _(L
"Fault current (j → i)") };
18 m_checkListBoxLine->Append(branchOptions);
19 m_checkListBoxTransformer->Append(branchOptions);
21 m_textCtrlPrecision->SetValue(wxString::Format(
"%d", m_precision));
24 SetSize(GetBestSize());
27LabelManager::~LabelManager()
31void LabelManager::OnCheckListSelected(wxCommandEvent& event)
34 UpdatePreview(m_choicebook->GetSelection());
39void LabelManager::UpdatePreview(
int selection)
41 std::vector<wxCheckListBox*> checkListBoxes = { m_checkListBoxBus, m_checkListBoxGenerator,
42 m_checkListBoxLoad, m_checkListBoxLine, m_checkListBoxTransformer, m_checkListBoxCapacitor,
43 m_checkListBoxInductor, m_checkListBoxIndMotor, m_checkListBoxSyncMotor };
45 m_richTextCtrlPreview->Clear();
46 for (
auto* checkListBox : checkListBoxes) {
47 SetPreviewText(checkListBox);
51wxString LabelManager::GetBusPreviewText(
int dataID)
59 switch (m_radioBoxVoltage->GetSelection())
62 return wxString::Format(
"%.*f p.u.\n", m_precision, 1.0);
65 return wxString::Format(
"%.*f V\n", m_precision, 13800.0);
68 return wxString::Format(
"%.*f kV\n", m_precision, 13.8);
75 switch (m_radioBoxAngle->GetSelection())
78 return wxString::Format(
"%.*f°\n", m_precision, 30.0);
81 return wxString::Format(
"%.*f rad\n", m_precision, 0.5235987756);
88 return GetCurrent3fText({ 25.54, 0.0, 0.0 });
91 switch (m_radioBoxVoltage->GetSelection())
94 return wxString::Format(
"Va = %.*f p.u.\t Vb = %.*f p.u.\t Vc = %.*f p.u.\n", m_precision, 0.0, m_precision, 1.0404, m_precision, 1.0246);
97 return wxString::Format(
"Va = %.*f V\t Vb = %.*f V\t Vc = %.*f V\n", m_precision, 0.0, m_precision, 14356.91, m_precision, 14140.11);
100 return wxString::Format(
"Va = %.*f kV\t Vb = %.*f kV\t Vc = %.*f kV\n", m_precision, 0.0, m_precision, 14.35691, m_precision, 14.14011);
107 return GetPowerText(_(
"VA"), 5.0);
110 return wxString::Format(_(
"THD = %.*f%%\n"), m_precision, 5.36);
118wxString LabelManager::GetGeneratorPreviewText(
int dataID)
123 return _(
"Generator 1\n");
126 return GetPowerText(_(
"W"), 1.0);
129 return GetPowerText(_(
"var"), 0.3);
132 return GetCurrent3fText({ 22.54, 0.0, 0.0 });
140wxString LabelManager::GetPowerText(wxString unit,
double puValue)
142 switch (m_radioBoxPower->GetSelection()) {
144 return wxString::Format(
"%.*f p.u.\n", m_precision, puValue);
147 return wxString::Format(
"%.*f %s\n", m_precision, puValue * 1.0e8, unit);
150 return wxString::Format(
"%.*f k%s\n", m_precision, puValue * 1.0e5, unit);
153 return wxString::Format(
"%.*f M%s\n", m_precision, puValue * 1.0e2, unit);
161wxString LabelManager::GetCurrent3fText(
const std::array<double, 3>& puCurrents)
163 switch (m_radioBoxCurrent->GetSelection())
166 return wxString::Format(
"Ia = %.*f p.u.\t Ib = %.*f p.u.\t Ic = %.*f p.u.\n", m_precision, puCurrents[0], m_precision, puCurrents[1], m_precision, puCurrents[2]);
169 return wxString::Format(
"Ia = %.*f A\t Ib = %.*f A\t Ic = %.*f A\n", m_precision, puCurrents[0] * 1e3, m_precision, puCurrents[1] * 1e3, m_precision, puCurrents[2] * 1e3);
172 return wxString::Format(
"Ia = %.*f kA\t Ib = %.*f kA\t Ic = %.*f kA\n", m_precision, puCurrents[0], m_precision, puCurrents[1], m_precision, puCurrents[2]);
180wxString LabelManager::GetCurrentOrVoltageText(wxString unit,
double puValue)
184 switch (m_radioBoxVoltage->GetSelection())
187 return wxString::Format(
"%.*f p.u.\n", m_precision, puValue);
190 return wxString::Format(
"%.*f V\n", m_precision, puValue * 13800.0);
193 return wxString::Format(
"%.*f kV\n", m_precision, puValue * 13.8);
199 else if (unit == _(
"A"))
201 switch (m_radioBoxCurrent->GetSelection())
204 return wxString::Format(
"%.*f p.u.\n", m_precision, puValue);
207 return wxString::Format(
"%.*f A\n", m_precision, puValue * 1e3);
210 return wxString::Format(
"%.*f kA\n", m_precision, puValue);
220void LabelManager::SetPreviewText(wxCheckListBox* checkListBox)
222 int id = checkListBox->GetId();
226 checkListBox->GetCheckedItems(checked);
230 name = _(
"Bus label");
231 for (
int i : checked) {
232 text += GetBusPreviewText(i);
235 case ID_CL_GENERATOR: {
236 name = _(
"Generator label");
237 for (
int i : checked) {
238 text += GetGeneratorPreviewText(i);
242 name = _(
"Load label");
243 for (
int i : checked) {
244 text += GetLoadPreviewText(i);
248 name = _(
"Line label");
249 for (
int i : checked) {
250 text += GetLinePreviewText(i);
253 case ID_CL_TRANSFORMER: {
254 name = _(
"Transformer label");
255 for (
int i : checked) {
256 text += GetTransformerPreviewText(i);
259 case ID_CL_CAPACITOR: {
260 name = _(
"Capacitor label");
261 for (
int i : checked) {
262 text += GetCapacitorPreviewText(i);
265 case ID_CL_INDUCTOR: {
266 name = _(
"Inductor label");
267 for (
int i : checked) {
268 text += GetInductorPreviewText(i);
271 case ID_CL_INDMOTOR: {
272 name = _(
"Induction motor label");
273 for (
int i : checked) {
274 text += GetIndMotorPreviewText(i);
277 case ID_CL_SYNCMOTOR: {
278 name = _(
"Synchronous motor label");
279 for (
int i : checked) {
280 text += GetSyncMotorPreviewText(i);
287 if (!checked.IsEmpty()) {
288 m_richTextCtrlPreview->BeginUnderline();
289 m_richTextCtrlPreview->BeginBold();
290 m_richTextCtrlPreview->WriteText(name);
291 m_richTextCtrlPreview->EndBold();
292 m_richTextCtrlPreview->EndUnderline();
293 m_richTextCtrlPreview->Newline();
294 m_richTextCtrlPreview->BeginLeftIndent(60);
295 m_richTextCtrlPreview->WriteText(text);
296 m_richTextCtrlPreview->EndLeftIndent();
297 m_richTextCtrlPreview->Newline();
301wxString LabelManager::GetLoadPreviewText(
int dataID)
306 return _(
"Load 1\n");
309 return GetPowerText(_(
"W"), 1.0);
312 return GetPowerText(_(
"var"), 0.3);
321wxString LabelManager::GetLinePreviewText(
int dataID)
326 return _(
"Line 1\n");
329 return GetPowerText(_(
"W"), 1.0);
332 return GetPowerText(_(
"W"), -1.0);
335 return GetPowerText(_(
"var"), 0.3);
338 return GetPowerText(_(
"var"), -0.3);
341 return GetPowerText(_(
"W"), 0.02);
344 return GetCurrentOrVoltageText(_(
"A"), 0.5);
347 return GetCurrentOrVoltageText(_(
"A"), -0.5);
350 return GetCurrent3fText({ 25.56, 0.0, 0.0 });
353 return GetCurrent3fText({ -25.56, 0.0, 0.0 });
361wxString LabelManager::GetTransformerPreviewText(
int dataID)
366 return _(
"Transformer 1\n");
369 return GetPowerText(_(
"W"), 1.0);
372 return GetPowerText(_(
"W"), -1.0);
375 return GetPowerText(_(
"var"), 0.3);
378 return GetPowerText(_(
"var"), -0.3);
381 return GetPowerText(_(
"W"), 0.02);
384 return GetCurrentOrVoltageText(_(
"A"), 0.5);
387 return GetCurrentOrVoltageText(_(
"A"), -0.5);
390 return GetCurrent3fText({ 25.56, 0.0, 0.0 });
393 return GetCurrent3fText({ -25.56, 0.0, 0.0 });
401wxString LabelManager::GetCapacitorPreviewText(
int dataID)
406 return _(
"Capacitor 1\n");
409 return GetPowerText(_(
"var"), 1.0);
418wxString LabelManager::GetInductorPreviewText(
int dataID)
423 return _(
"Inductor 1\n");
426 return GetPowerText(_(
"var"), 1.0);
435wxString LabelManager::GetIndMotorPreviewText(
int dataID)
440 return _(
"Induction Motor 1\n");
443 return GetPowerText(_(
"W"), 1.0);
446 return GetPowerText(_(
"var"), 0.3);
455wxString LabelManager::GetSyncMotorPreviewText(
int dataID)
460 return _(
"Synchronous Compensator 1\n");
463 return GetPowerText(_(
"W"), 0.01);
466 return GetPowerText(_(
"var"), 1.0);
475void LabelManager::OnChoicebookChanged(wxChoicebookEvent& event)
477 UpdatePreview(m_choicebook->GetSelection());
481void LabelManager::OnUnitChanged(wxCommandEvent& event)
483 UpdatePreview(m_choicebook->GetSelection());
487void LabelManager::OnPrecisionTextUpdate(wxCommandEvent& event)
490 if (m_textCtrlPrecision->GetValue().ToLong(&precision) && precision >= 0) {
491 m_precision =
static_cast<size_t>(precision);
492 UpdatePreview(m_choicebook->GetSelection());
497void LabelManager::OnApplyButtonClick(wxCommandEvent& event)
499 if (m_checkBoxReplace->GetValue()) {
500 m_workspace->RemoveAllTextElements();
509 ElectricalUnit voltageUnit = voltageUnitList[m_radioBoxVoltage->GetSelection()];
510 ElectricalUnit currentUnit = currentUnitList[m_radioBoxCurrent->GetSelection()];
511 ElectricalUnit sUnit = sUnitList[m_radioBoxPower->GetSelection()];
512 ElectricalUnit pUnit = pUnitList[m_radioBoxPower->GetSelection()];
513 ElectricalUnit qUnit = qUnitList[m_radioBoxPower->GetSelection()];
514 ElectricalUnit angleUnit = angleUnitList[m_radioBoxAngle->GetSelection()];
516 auto elementList = m_workspace->GetElementList();
517 int numTxtElements = 0;
518 for (
auto* element : elementList) {
519 ElementType elementType = element->GetElementType();
524 TextID textOptions[7] = { ID_TXT_NAME, ID_TXT_VOLTAGE, ID_TXT_ANGLE, ID_TXT_FAULTCURRENT, ID_TXT_FAULTVOLTAGE, ID_TXT_SCC, ID_TXT_THD };
525 ElectricalUnit textUnits[7] = { ElectricalUnit::UNIT_NONE, voltageUnit, angleUnit, currentUnit, voltageUnit, sUnit, ElectricalUnit::UNIT_NONE };
526 m_checkListBoxBus->GetCheckedItems(checked);
527 for (
int i : checked) {
528 m_workspace->InsertTextElement(textOptions[i], element, textUnits[i], m_precision);
532 case TYPE_CAPACITOR: {
533 TextID textOptions[2] = { ID_TXT_NAME, ID_TXT_REACTIVE_POWER };
534 ElectricalUnit textUnits[2] = { ElectricalUnit::UNIT_NONE, qUnit };
535 m_checkListBoxCapacitor->GetCheckedItems(checked);
536 for (
int i : checked) {
537 m_workspace->InsertTextElement(textOptions[i], element, textUnits[i], m_precision);
541 case TYPE_IND_MOTOR: {
542 TextID textOptions[3] = { ID_TXT_NAME, ID_TXT_ACTIVE_POWER, ID_TXT_REACTIVE_POWER };
543 ElectricalUnit textUnits[3] = { ElectricalUnit::UNIT_NONE, pUnit, qUnit };
544 m_checkListBoxIndMotor->GetCheckedItems(checked);
545 for (
int i : checked) {
546 m_workspace->InsertTextElement(textOptions[i], element, textUnits[i], m_precision);
550 case TYPE_INDUCTOR: {
551 TextID textOptions[2] = { ID_TXT_NAME, ID_TXT_REACTIVE_POWER };
552 ElectricalUnit textUnits[2] = { ElectricalUnit::UNIT_NONE, qUnit };
553 m_checkListBoxInductor->GetCheckedItems(checked);
554 for (
int i : checked) {
555 m_workspace->InsertTextElement(textOptions[i], element, textUnits[i], m_precision);
560 TextID lineTextOptions[10] = { ID_TXT_NAME, ID_TXT_BRANCH_ACTIVE_POWER_1_2, ID_TXT_BRANCH_ACTIVE_POWER_2_1,
561 ID_TXT_BRANCH_REACTIVE_POWER_1_2, ID_TXT_BRANCH_REACTIVE_POWER_2_1, ID_TXT_BRANCH_LOSSES,
562 ID_TXT_BRANCH_CURRENT_1_2, ID_TXT_BRANCH_CURRENT_2_1, ID_TXT_BRANCH_FAULT_CURRENT_1_2, ID_TXT_BRANCH_FAULT_CURRENT_2_1 };
563 ElectricalUnit textUnits[10] = { ElectricalUnit::UNIT_NONE, pUnit, pUnit, qUnit, qUnit, pUnit, currentUnit, currentUnit, currentUnit, currentUnit };
564 m_checkListBoxLine->GetCheckedItems(checked);
565 for (
int i : checked) {
566 m_workspace->InsertTextElement(lineTextOptions[i], element, textUnits[i], m_precision);
571 TextID textOptions[3] = { ID_TXT_NAME, ID_TXT_ACTIVE_POWER, ID_TXT_REACTIVE_POWER };
572 ElectricalUnit textUnits[3] = { ElectricalUnit::UNIT_NONE, pUnit, qUnit };
573 m_checkListBoxLoad->GetCheckedItems(checked);
574 for (
int i : checked) {
575 m_workspace->InsertTextElement(textOptions[i], element, textUnits[i], m_precision);
579 case TYPE_SYNC_GENERATOR: {
580 TextID textOptions[4] = { ID_TXT_NAME, ID_TXT_ACTIVE_POWER, ID_TXT_REACTIVE_POWER, ID_TXT_FAULTCURRENT };
581 ElectricalUnit textUnits[4] = { ElectricalUnit::UNIT_NONE, pUnit, qUnit, currentUnit };
582 m_checkListBoxGenerator->GetCheckedItems(checked);
583 for (
int i : checked) {
584 m_workspace->InsertTextElement(textOptions[i], element, textUnits[i], m_precision);
588 case TYPE_SYNC_MOTOR: {
589 TextID textOptions[3] = { ID_TXT_NAME, ID_TXT_ACTIVE_POWER, ID_TXT_REACTIVE_POWER };
590 ElectricalUnit textUnits[3] = { ElectricalUnit::UNIT_NONE, pUnit, qUnit };
591 m_checkListBoxSyncMotor->GetCheckedItems(checked);
592 for (
int i : checked) {
593 m_workspace->InsertTextElement(textOptions[i], element, textUnits[i], m_precision);
597 case TYPE_TRANSFORMER: {
598 TextID lineTextOptions[10] = { ID_TXT_NAME, ID_TXT_BRANCH_ACTIVE_POWER_1_2, ID_TXT_BRANCH_ACTIVE_POWER_2_1,
599 ID_TXT_BRANCH_REACTIVE_POWER_1_2, ID_TXT_BRANCH_REACTIVE_POWER_2_1, ID_TXT_BRANCH_LOSSES,
600 ID_TXT_BRANCH_CURRENT_1_2, ID_TXT_BRANCH_CURRENT_2_1, ID_TXT_BRANCH_FAULT_CURRENT_1_2, ID_TXT_BRANCH_FAULT_CURRENT_2_1 };
601 ElectricalUnit textUnits[10] = { ElectricalUnit::UNIT_NONE, pUnit, pUnit, qUnit, qUnit, pUnit, currentUnit, currentUnit, currentUnit, currentUnit };
602 m_checkListBoxTransformer->GetCheckedItems(checked);
603 for (
int i : checked) {
604 m_workspace->InsertTextElement(lineTextOptions[i], element, textUnits[i], m_precision);
612 if (numTxtElements != 0) {
613 m_workspace->SaveCurrentState();
614 m_workspace->UpdateTextElements();
619void LabelManager::OnCancelButtonClick(wxCommandEvent& event)
621 EndModal(wxID_CANCEL);
ElectricalUnit
Electrical units.
This class manages the graphical and power elements. It is responsible for handling the user's intera...