52{
53 wxString signalStr = "";
54 for(int i = 0; i < (int)m_textCtrlSigns->GetValue().length(); ++i) {
55 if(m_textCtrlSigns->GetValue()[i] != ' ') signalStr += m_textCtrlSigns->GetValue()[i];
56 }
57 if(signalStr.size() < 2) {
58 wxMessageDialog msg(this, _("You must assign at least two signals."), _("Error"),
59 wxOK | wxCENTRE | wxICON_ERROR);
60 msg.ShowModal();
61 return false;
62 }
63
64 std::vector<Sum::Signal> signalList;
65 for(int i = 0; i < (int)signalStr.length(); ++i) {
66 switch(signalStr[i].GetValue()) {
67 case '+': {
68 signalList.push_back(Sum::SIGNAL_POSITIVE);
69 } break;
70 case '-': {
71 signalList.push_back(Sum::SIGNAL_NEGATIVE);
72 } break;
73 default: {
74 wxMessageDialog msg(this, _("Value entered incorrectly in the field \"Signs\"."), _("Error"),
75 wxOK | wxCENTRE | wxICON_ERROR);
76 msg.ShowModal();
77 return false;
78 }
79 }
80 }
81
82 int diff = (int)signalList.size() - (int)m_sum->GetSignalList().size();
83
84 if(diff < 0) {
85 diff = std::abs(diff);
86 for(int i = 0; i < diff; ++i) {
87 m_sum->RemoveInNode();
88 }
89 } else if(diff > 0) {
90 for(int i = 0; i < diff; ++i) {
91 m_sum->AddInNode();
92 }
93 }
94 m_sum->SetSignalList(signalList);
95 m_sum->UpdatePoints();
96 return true;
97}