[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [5227] Use spincontrols for durations (VS)
From: |
Greg Chicares |
Subject: |
[lmi-commits] [5227] Use spincontrols for durations (VS) |
Date: |
Tue, 02 Aug 2011 15:41:17 +0000 |
Revision: 5227
http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=5227
Author: chicares
Date: 2011-08-02 15:41:16 +0000 (Tue, 02 Aug 2011)
Log Message:
-----------
Use spincontrols for durations (VS)
Modified Paths:
--------------
lmi/trunk/ChangeLog
lmi/trunk/input_sequence_entry.cpp
Modified: lmi/trunk/ChangeLog
===================================================================
--- lmi/trunk/ChangeLog 2011-08-02 15:17:20 UTC (rev 5226)
+++ lmi/trunk/ChangeLog 2011-08-02 15:41:16 UTC (rev 5227)
@@ -28119,3 +28119,9 @@
Replace wxListView with wxDataViewCtrl (VS). See:
http://lists.nongnu.org/archive/html/lmi/2011-02/msg00000.html
+20110802T1541Z <address@hidden> [637]
+
+ input_sequence_entry.cpp
+Use spincontrols for durations (VS). See:
+ http://lists.nongnu.org/archive/html/lmi/2011-03/msg00002.html
+
Modified: lmi/trunk/input_sequence_entry.cpp
===================================================================
--- lmi/trunk/input_sequence_entry.cpp 2011-08-02 15:17:20 UTC (rev 5226)
+++ lmi/trunk/input_sequence_entry.cpp 2011-08-02 15:41:16 UTC (rev 5227)
@@ -43,6 +43,7 @@
#include <wx/combobox.h>
#include <wx/dialog.h>
#include <wx/sizer.h>
+#include <wx/spinctrl.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/valtext.h>
@@ -234,9 +235,9 @@
return get_field<DurationModeChoice>(Col_DurationMode, row);
}
- wxTextCtrl& duration_num_field(int row)
+ wxSpinCtrl& duration_num_field(int row)
{
- return get_field<wxTextCtrl>(Col_DurationNum, row);
+ return get_field<wxSpinCtrl>(Col_DurationNum, row);
}
wxStaticText& then_field(int row)
@@ -260,6 +261,7 @@
int compute_duration_scalar(int row);
void adjust_duration_num(int row);
+ void adjust_duration_num_range(int row);
void update_diagnostics();
bool is_valid_value(wxString const& s);
@@ -357,7 +359,7 @@
duration_mode_field(i).value(data.end_mode);
- int dur_num;
+ int dur_num = 0;
switch(data.end_mode)
{
case e_number_of_years:
@@ -382,7 +384,7 @@
}
}
-
duration_num_field(i).SetValue(value_cast<std::string>(dur_num).c_str());
+ duration_num_field(i).SetValue(dur_num);
if(data.value_is_keyword)
{
@@ -423,19 +425,19 @@
case e_attained_age:
{
s.append(" @");
- s.append(duration_num_field(i).GetValue().c_str());
+
s.append(value_cast<std::string>(duration_num_field(i).GetValue()));
break;
}
case e_duration:
{
s.append(" ");
- s.append(duration_num_field(i).GetValue().c_str());
+
s.append(value_cast<std::string>(duration_num_field(i).GetValue()));
break;
}
case e_number_of_years:
{
s.append(" #");
- s.append(duration_num_field(i).GetValue().c_str());
+
s.append(value_cast<std::string>(duration_num_field(i).GetValue()));
break;
}
case e_maturity:
@@ -530,10 +532,9 @@
sizer_->wxSizer::Insert(insert_pos++, from_label, flags);
wxChoice* duration_mode = new(wx) DurationModeChoice(this);
sizer_->wxSizer::Insert(insert_pos++, duration_mode, flags);
- wxTextCtrl* duration_num = new(wx) wxTextCtrl(this, wxID_ANY, "",
wxDefaultPosition, wxDefaultSize, wxTE_RIGHT);
- duration_num->SetValidator(wxTextValidator(wxFILTER_DIGITS));
+ wxSpinCtrl* duration_num = new(wx) wxSpinCtrl(this, wxID_ANY, "");
sizer_->wxSizer::Insert(insert_pos++, duration_num, flags);
- SizeWinForText(duration_num, "999", 20);
+ SizeWinForText(duration_num, "9999", 20);
wxStaticText* then_label = new(wx) wxStaticText(this, wxID_ANY,
LARGEST_THEN_TEXT);
sizer_->wxSizer::Insert(insert_pos++, then_label, flags);
SizeWinForText(then_label, LARGEST_THEN_TEXT);
@@ -631,7 +632,7 @@
);
::Connect
(duration_num
- ,wxEVT_COMMAND_TEXT_UPDATED
+ ,wxEVT_COMMAND_SPINCTRL_UPDATED
,&InputSequenceEditor::UponDurationNumChange
,wxID_ANY
,this
@@ -745,8 +746,9 @@
// "maturity" should be an option only on the last row:
duration_mode_field(row).allow_maturity(is_last_row);
- // duration number visibility:
+ // duration number visibility and range:
duration_num_field(row).Show(duration_mode_field(row).needs_number());
+ adjust_duration_num_range(row);
if(duration_mode_field(row).value() == e_number_of_years)
{
@@ -796,13 +798,10 @@
}
duration_mode mode = duration_mode_field(row - 1).value();
- long num = 0;
+ int num = 0;
if(duration_mode_field(row - 1).needs_number())
{
- if(!duration_num_field(row - 1).GetValue().ToLong(&num))
- {
- return "";
- }
+ num = duration_num_field(row - 1).GetValue();
}
switch(mode)
@@ -813,25 +812,24 @@
}
case e_attained_age:
{
- return wxString::Format("from age %ld", num);
+ return wxString::Format("from age %d", num);
}
case e_duration:
{
- return wxString::Format("from duration %ld", num);
+ return wxString::Format("from duration %d", num);
}
case e_number_of_years:
{
- long yrs = 0;
+ int yrs = 0;
int i = row - 1;
while(0 <= i && duration_mode_field(i).value() ==
e_number_of_years)
{
- long num_i = 0;
- duration_num_field(i).GetValue().ToLong(&num_i);
+ int num_i = duration_num_field(i).GetValue();
yrs += num_i;
i--;
}
return wxString::Format
- ("%s + %ld years",
+ ("%s + %d years",
format_from_text(i + 1).c_str(),
yrs
);
@@ -870,17 +868,7 @@
int InputSequenceEditor::compute_duration_scalar(int row)
{
- long duration_num = -1;
- wxString const duration_num_str = duration_num_field(row).GetValue();
- if(duration_num_str.empty())
- {
- duration_num = 0;
- }
- else
- {
- duration_num_str.ToLong(&duration_num);
- }
- LMI_ASSERT(-1 != duration_num);
+ int duration_num = duration_num_field(row).GetValue();
switch(duration_mode_field(row).value())
{
@@ -923,6 +911,43 @@
throw "Unreachable--silences a compiler diagnostic.";
}
+void InputSequenceEditor::adjust_duration_num_range(int row)
+{
+ if(!duration_mode_field(row).needs_number())
+ return;
+
+ int const prev_duration = (row > 0) ? duration_scalars_[row - 1] : 0;
+ wxSpinCtrl& duration = duration_num_field(row);
+
+ switch(duration_mode_field(row).value())
+ {
+ case e_attained_age:
+ {
+ duration.SetRange(input_.issue_age() + 1 + prev_duration,
input_.maturity_age() - 1);
+ break;
+ }
+ case e_duration:
+ {
+ duration.SetRange(1 + prev_duration, input_.years_to_maturity() -
1);
+ break;
+ }
+ case e_number_of_years:
+ {
+ duration.SetRange(1, input_.years_to_maturity() - prev_duration -
1);
+ break;
+ }
+ case e_maturity:
+ case e_retirement:
+ case e_invalid_mode:
+ case e_inception:
+ case e_inforce:
+ {
+ fatal_error() << "unexpected duration_mode value" << LMI_FLUSH;
+ break;
+ }
+ }
+}
+
void InputSequenceEditor::adjust_duration_num(int row)
{
int const scalar = duration_scalars_[row];
@@ -963,7 +988,9 @@
}
}
- duration_num_field(row).SetValue(wxString::Format("%d", num));
+ adjust_duration_num_range(row);
+
+ duration_num_field(row).SetValue(num);
}
void InputSequenceEditor::update_diagnostics()
@@ -1009,9 +1036,6 @@
if(!is_valid_value(value))
return wxString::Format("Invalid keyword \"%s\" on row %d.",
value.c_str(), row);
-
- if(duration_mode_field(row).needs_number() &&
duration_num_field(row).GetValue().empty())
- return wxString::Format("Duration not entered on row %d.", row);
}
// As fallback, parse the sequence and check the diagnostics. This may be
@@ -1026,7 +1050,10 @@
,0
,keywords_
);
- return sequence.formatted_diagnostics().c_str();
+ wxString msg = sequence.formatted_diagnostics().c_str();
+ // formatted_diagnostics() returns newline-terminated string, fix it:
+ msg.Trim();
+ return msg;
}
void InputSequenceEditor::UponValueChange(wxCommandEvent&)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lmi-commits] [5227] Use spincontrols for durations (VS),
Greg Chicares <=