]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/grid.cpp
Ditribution script mods;
[wxWidgets.git] / src / generic / grid.cpp
index 846f80a8b03fee571132943cea79a14d0785b51a..d639a8254422db3a27e1767bf962901e006eb98e 100644 (file)
@@ -629,6 +629,7 @@ void wxGridCellTextEditor::DoBeginEdit(const wxString& startValue)
 {
     Text()->SetValue(startValue);
     Text()->SetInsertionPointEnd();
+    Text()->SetSelection(-1,-1);
     Text()->SetFocus();
 }
 
@@ -797,8 +798,9 @@ void wxGridCellNumberEditor::BeginEdit(int row, int col, wxGrid* grid)
     }
     else
     {
+        m_valueOld = 0;
         wxString sValue = table->GetValue(row, col);
-        if (! sValue.ToLong(&m_valueOld))
+        if (! sValue.ToLong(&m_valueOld) && ! sValue.IsEmpty())
         {
             wxFAIL_MSG( _T("this cell doesn't have numeric value") );
             return;
@@ -820,16 +822,20 @@ bool wxGridCellNumberEditor::EndEdit(int row, int col,
                                      wxGrid* grid)
 {
     bool changed;
-    long value;
+    long value = 0;
+    wxString text;
 
     if ( HasRange() )
     {
         value = Spin()->GetValue();
         changed = value != m_valueOld;
+        if (changed)
+            text = wxString::Format(wxT("%ld"), value);
     }
     else
     {
-        changed = Text()->GetValue().ToLong(&value) && (value != m_valueOld);
+        text = Text()->GetValue();
+        changed = (text.IsEmpty() || text.ToLong(&value)) && (value != m_valueOld);
     }
 
     if ( changed )
@@ -837,7 +843,7 @@ bool wxGridCellNumberEditor::EndEdit(int row, int col,
         if (grid->GetTable()->CanSetValueAs(row, col, wxGRID_VALUE_NUMBER))
             grid->GetTable()->SetValueAsLong(row, col, value);
         else
-            grid->GetTable()->SetValue(row, col, wxString::Format(wxT("%ld"), value));
+            grid->GetTable()->SetValue(row, col, text);
     }
 
     return changed;
@@ -965,8 +971,9 @@ void wxGridCellFloatEditor::BeginEdit(int row, int col, wxGrid* grid)
     }
     else
     {
+        m_valueOld = 0.0;
         wxString sValue = table->GetValue(row, col);
-        if (! sValue.ToDouble(&m_valueOld))
+        if (! sValue.ToDouble(&m_valueOld) && ! sValue.IsEmpty())
         {
             wxFAIL_MSG( _T("this cell doesn't have float value") );
             return;
@@ -979,13 +986,15 @@ void wxGridCellFloatEditor::BeginEdit(int row, int col, wxGrid* grid)
 bool wxGridCellFloatEditor::EndEdit(int row, int col,
                                      wxGrid* grid)
 {
-    double value;
-    if ( Text()->GetValue().ToDouble(&value) && (value != m_valueOld) )
+    double value = 0.0;
+    wxString text(Text()->GetValue());
+
+    if ( (text.IsEmpty() || text.ToDouble(&value)) && (value != m_valueOld) )
     {
         if (grid->GetTable()->CanSetValueAs(row, col, wxGRID_VALUE_FLOAT))
             grid->GetTable()->SetValueAsDouble(row, col, value);
         else
-            grid->GetTable()->SetValue(row, col, wxString::Format(wxT("%f"), value));
+            grid->GetTable()->SetValue(row, col, text);
 
         return TRUE;
     }
@@ -1049,16 +1058,16 @@ wxString wxGridCellFloatEditor::GetString() const
     if ( m_width == -1 )
     {
         // default width/precision
-        fmt = _T("%g");
+        fmt = _T("%f");
     }
     else if ( m_precision == -1 )
     {
         // default precision
-        fmt.Printf(_T("%%%d.g"), m_width);
+        fmt.Printf(_T("%%%d.f"), m_width);
     }
     else
     {
-        fmt.Printf(_T("%%%d.%dg"), m_width, m_precision);
+        fmt.Printf(_T("%%%d.%df"), m_width, m_precision);
     }
 
     return wxString::Format(fmt, m_valueOld);
@@ -3504,7 +3513,7 @@ void wxGridWindow::OnEraseBackground( wxEraseEvent& WXUNUSED(event) )
 
 // Internal Helper function for computing row or column from some
 // (unscrolled) coordinate value, using either
-// m_defaultRowHeight/m_defaultColWidth or binary search on array 
+// m_defaultRowHeight/m_defaultColWidth or binary search on array
 // of m_rowBottoms/m_ColRights to speed up the search!
 
 // Internal helper macros for simpler use of that function
@@ -4464,7 +4473,7 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
 
     if (m_isDragging)
     {
-        m_rowLabelWin->ReleaseMouse();
+        if (m_rowLabelWin->HasCapture()) m_rowLabelWin->ReleaseMouse();
         m_isDragging = FALSE;
     }
 
@@ -4671,7 +4680,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
 
     if (m_isDragging)
     {
-        m_colLabelWin->ReleaseMouse();
+        if (m_colLabelWin->HasCapture()) m_colLabelWin->ReleaseMouse();
         m_isDragging = FALSE;
     }
 
@@ -4881,7 +4890,7 @@ void wxGrid::ChangeCursorMode(CursorMode mode,
 
     if ( m_winCapture )
     {
-        m_winCapture->ReleaseMouse();
+        if (m_winCapture->HasCapture()) m_winCapture->ReleaseMouse();
         m_winCapture = (wxWindow *)NULL;
     }
 
@@ -5110,7 +5119,7 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
                         SetCurrentCell( coords );
                         if ( m_selection )
                         {
-                            if ( m_selection->GetSelectionMode() != 
+                            if ( m_selection->GetSelectionMode() !=
                                     wxGrid::wxGridSelectCells )
                             {
                                 HighlightBlock( coords, coords );
@@ -5151,7 +5160,7 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
             {
                 if (m_winCapture)
                 {
-                    m_winCapture->ReleaseMouse();
+                    if (m_winCapture->HasCapture()) m_winCapture->ReleaseMouse();
                     m_winCapture = NULL;
                 }
 
@@ -6822,7 +6831,7 @@ void wxGrid::ShowCellEditControl()
 
             // cell is shifted by one pixel
             // However, don't allow x or y to become negative
-            // since the SetSize() method interprets that as 
+            // since the SetSize() method interprets that as
             // "don't change."
             if (rect.x > 0)
                 rect.x--;
@@ -6932,7 +6941,7 @@ void wxGrid::XYToCell( int x, int y, wxGridCellCoords& coords )
 
 // Internal Helper function for computing row or column from some
 // (unscrolled) coordinate value, using either
-// m_defaultRowHeight/m_defaultColWidth or binary search on array 
+// m_defaultRowHeight/m_defaultColWidth or binary search on array
 // of m_rowBottoms/m_ColRights to speed up the search!
 
 static int CoordToRowOrCol(int coord, int defaultDist, int minDist,
@@ -6949,7 +6958,7 @@ static int CoordToRowOrCol(int coord, int defaultDist, int minDist,
 
     if ( i_max >= BorderArray.GetCount())
         i_max = BorderArray.GetCount() - 1;
-    else 
+    else
     {
         if ( coord >= BorderArray[i_max])
         {