lmi-commits
[Top][All Lists]
Advanced

[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&)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]