X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/df9fac6d214e7c88db5dec3d28e15f4db9eddce0..28f12ffb86b5a32c7eaa596a095f4b01890c9f46:/src/generic/gridctrl.cpp diff --git a/src/generic/gridctrl.cpp b/src/generic/gridctrl.cpp index 27c709e3ab..052dfbd49f 100644 --- a/src/generic/gridctrl.cpp +++ b/src/generic/gridctrl.cpp @@ -65,7 +65,8 @@ wxString wxGridCellDateTimeRenderer::GetString(const wxGrid& grid, int row, int { void * tempval = table->GetValueAsCustom(row, col,wxGRID_VALUE_DATETIME); - if (tempval){ + if (tempval) + { val = *((wxDateTime *)tempval); hasDatetime = true; delete (wxDateTime *)tempval; @@ -76,13 +77,14 @@ wxString wxGridCellDateTimeRenderer::GetString(const wxGrid& grid, int row, int if (!hasDatetime ) { text = table->GetValue(row, col); - hasDatetime = (val.ParseFormat( text, m_iformat, m_dateDef ) != (wxChar *)NULL) ; + const char * const end = val.ParseFormat(text, m_iformat, m_dateDef); + hasDatetime = end && !*end; } if ( hasDatetime ) text = val.Format(m_oformat, m_tz ); - //If we faild to parse string just show what we where given? + // If we failed to parse string just show what we where given? return text; } @@ -223,7 +225,7 @@ void wxGridCellEnumRenderer::SetParameters(const wxString& params) wxGridCellEnumEditor::wxGridCellEnumEditor(const wxString& choices) :wxGridCellChoiceEditor() { - m_startint = -1; + m_index = -1; if (!choices.empty()) SetParameters(choices); @@ -232,7 +234,7 @@ wxGridCellEnumEditor::wxGridCellEnumEditor(const wxString& choices) wxGridCellEditor *wxGridCellEnumEditor::Clone() const { wxGridCellEnumEditor *editor = new wxGridCellEnumEditor(); - editor->m_startint = m_startint; + editor->m_index = m_index; return editor; } @@ -245,40 +247,49 @@ void wxGridCellEnumEditor::BeginEdit(int row, int col, wxGrid* grid) if ( table->CanGetValueAs(row, col, wxGRID_VALUE_NUMBER) ) { - m_startint = table->GetValueAsLong(row, col); + m_index = table->GetValueAsLong(row, col); } else { wxString startValue = table->GetValue(row, col); if (startValue.IsNumber() && !startValue.empty()) { - startValue.ToLong(&m_startint); + startValue.ToLong(&m_index); } else { - m_startint=-1; + m_index = -1; } } - Combo()->SetSelection(m_startint); + Combo()->SetSelection(m_index); Combo()->SetInsertionPointEnd(); Combo()->SetFocus(); } -bool wxGridCellEnumEditor::EndEdit(int row, int col, wxGrid* grid) +bool wxGridCellEnumEditor::EndEdit(const wxString& WXUNUSED(oldval), + wxString *newval) { - int pos = Combo()->GetSelection(); - bool changed = (pos != m_startint); - if (changed) - { - if (grid->GetTable()->CanSetValueAs(row, col, wxGRID_VALUE_NUMBER)) - grid->GetTable()->SetValueAsLong(row, col, pos); - else - grid->GetTable()->SetValue(row, col,wxString::Format(wxT("%i"),pos)); - } + long idx = Combo()->GetSelection(); + if ( idx == m_index ) + return false; + + m_index = idx; + + if ( newval ) + newval->Printf("%ld", m_index); - return changed; + return true; +} + +void wxGridCellEnumEditor::ApplyEdit(int row, int col, wxGrid* grid) +{ + wxGridTableBase * const table = grid->GetTable(); + if ( table->CanSetValueAs(row, col, wxGRID_VALUE_NUMBER) ) + table->SetValueAsLong(row, col, m_index); + else + table->SetValue(row, col, wxString::Format("%ld", m_index)); } #endif // wxUSE_COMBOBOX @@ -292,12 +303,8 @@ wxGridCellAutoWrapStringEditor::Create(wxWindow* parent, wxWindowID id, wxEvtHandler* evtHandler) { - m_control = new wxTextCtrl(parent, id, wxEmptyString, - wxDefaultPosition, wxDefaultSize, - wxTE_MULTILINE | wxTE_RICH); - - - wxGridCellEditor::Create(parent, id, evtHandler); + wxGridCellTextEditor::DoCreate(parent, id, evtHandler, + wxTE_MULTILINE | wxTE_RICH); } void @@ -380,7 +387,10 @@ wxGridCellAutoWrapStringRenderer::GetBestSize(wxGrid& grid, wxDC& dc, int row, int col) { - wxCoord x,y, height , width = grid.GetColSize(col) -10; + wxCoord x,y, height , width = grid.GetColSize(col) -20; + // for width, subtract 20 because ColSize includes a magin of 10 pixels + // that we do not want here and because we always start with an increment + // by 10 in the loop below. int count = 250; //Limit iterations.. wxRect rect(0,0,width,10);