///////////////////////////////////////////////////////////////////////////////
-// Name: dbgrid.cpp
+// Name: src/common/dbgrid.cpp
// Purpose: Displays a wxDbTable in a wxGrid.
// Author: Roger Gammans, Paul Gammans
-// Modified by:
-// Created:
+// Modified by:
+// Created:
// RCS-ID: $Id$
// Copyright: (c) 1999 The Computer Surgery (roger@computer-surgery.co.uk)
// Licence: wxWindows licence
// Branched From : dbgrid.cpp,v 1.18 2000/12/19 13:00:58
///////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
- #pragma implementation "dbgrid.h"
-#endif
-
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
-
-#if wxUSE_ODBC
-#if wxUSE_NEW_GRID
+#if wxUSE_ODBC && wxUSE_GRID
#ifndef WX_PRECOMP
#include "wx/textctrl.h"
#include "wx/dc.h"
+ #include "wx/app.h"
#endif // WX_PRECOMP
#include "wx/generic/gridctrl.h"
#include "wx/dbgrid.h"
+// DLL options compatibility check:
+WX_CHECK_BUILD_OPTIONS("wxDbGrid")
+
wxDbGridCellAttrProvider::wxDbGridCellAttrProvider()
{
break;
}
}
-
+
}
return attr;
}
wxDbGridTableBase::wxDbGridTableBase(wxDbTable *tab, wxDbGridColInfo* ColInfo,
int count, bool takeOwnership) :
- m_keys(),
+ m_keys(),
m_data(tab),
m_dbowner(takeOwnership),
m_rowmodified(false)
if (i < m_nocols)
{
wxLogDebug(wxT("NoCols under length after traversing %i items"),i);
- }
+ }
#endif
}
}
{
wxDbGridCellAttrProvider *provider;
- //Can't check for update here as
+ //Can't check for update here as
//FIXME: should i remove m_ColInfo and m_data from m_attrProvider if a wxDbGridAttrProvider
// if ((provider = dynamic_cast<wxDbGridCellAttrProvider *>(GetAttrProvider())))
- // Using C casting for now until we can support dynamic_cast with wxWindows
- if ((provider = (wxDbGridCellAttrProvider *)(GetAttrProvider())))
+ // Using C casting for now until we can support dynamic_cast with wxWidgets
+ provider = (wxDbGridCellAttrProvider *)(GetAttrProvider());
+ if (provider)
{
provider->AssignDbTable(NULL);
}
delete [] m_ColInfo;
-
+
Writeback();
if (m_dbowner)
{
{
wxDbGridCellAttrProvider *provider;
+ wxGridUpdateLocker locker(GetView());
+
//Remove Information from grid about old data
if (GetView())
{
wxGrid *grid = GetView();
- grid->BeginBatch();
grid->ClearSelection();
if (grid->IsCellEditControlEnabled())
{
}
m_keys.Empty();
m_data = tab;
- //FIXME: Remove dynamic_cast before sumision to wxwin
+ //FIXME: Remove dynamic_cast before sumision to wxwin
// if ((provider = dynamic_cast<wxDbGridCellAttrProvider *> (GetAttrProvider())))
- // Using C casting for now until we can support dynamic_cast with wxWindows
- if ((provider = (wxDbGridCellAttrProvider *)(GetAttrProvider())))
+ // Using C casting for now until we can support dynamic_cast with wxWidgets
+ provider = (wxDbGridCellAttrProvider *)(GetAttrProvider());
+ if (provider)
{
provider->AssignDbTable(m_data);
}
-
+
if (count == wxUSE_QUERY)
{
m_rowtotal = m_data ? m_data->Count() : 0;
wxGrid * grid = GetView();
wxGridTableMessage msg(this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, m_rowtotal);
grid->ProcessTableMessage(msg);
- grid->EndBatch();
}
m_dbowner = takeOwnership;
m_rowmodified = false;
return true;
}
-wxString wxDbGridTableBase::GetTypeName(int row, int col)
+wxString wxDbGridTableBase::GetTypeName(int WXUNUSED(row), int col)
{
- if (col == 8)
- int breakpoint = 1;
-
if (GetNumberCols() > col)
{
if (m_ColInfo[col].wxtypename == wxGRID_VALUE_DBAUTO)
switch(m_data->GetColDefs()[(m_ColInfo[col].DbCol)].SqlCtype)
{
case SQL_C_CHAR:
+#ifdef SQL_C_WCHAR
+ case SQL_C_WCHAR:
+#endif
return wxGRID_VALUE_STRING;
- break;
+ case SQL_C_SHORT:
case SQL_C_SSHORT:
return wxGRID_VALUE_NUMBER;
- break;
case SQL_C_USHORT:
return wxGRID_VALUE_NUMBER;
- break;
+ case SQL_C_LONG:
case SQL_C_SLONG:
return wxGRID_VALUE_NUMBER;
- break;
case SQL_C_ULONG:
return wxGRID_VALUE_NUMBER;
- break;
case SQL_C_FLOAT:
return wxGRID_VALUE_FLOAT;
- break;
case SQL_C_DOUBLE:
return wxGRID_VALUE_FLOAT;
- break;
case SQL_C_DATE:
return wxGRID_VALUE_DATETIME;
- break;
case SQL_C_TIME:
return wxGRID_VALUE_DATETIME;
- break;
case SQL_C_TIMESTAMP:
return wxGRID_VALUE_DATETIME;
- break;
default:
return wxGRID_VALUE_STRING;
- break;
}
}
else
return true;
}
- if (m_data->IsColNull(m_ColInfo[col].DbCol))
+ if (m_data->IsColNull((UWORD)m_ColInfo[col].DbCol))
{
return false;
}
if (m_data->GetNumberOfColumns() <= m_ColInfo[col].DbCol)
{
- //If a virtual column then we can't find it's type. we have to
+ //If a virtual column then we can't find it's type. we have to
// return false to get using wxVariant.
return false;
}
int sqltype = m_data->GetColDefs()[(m_ColInfo[col].DbCol)].SqlCtype;
-
+
if (typeName == wxGRID_VALUE_DATETIME)
{
if ((sqltype == SQL_C_DATE) ||
- (sqltype == SQL_C_TIME) ||
+ (sqltype == SQL_C_TIME) ||
(sqltype == SQL_C_TIMESTAMP))
{
return true;
if (typeName == wxGRID_VALUE_NUMBER)
{
if ((sqltype == SQL_C_SSHORT) ||
- (sqltype == SQL_C_USHORT) ||
+ (sqltype == SQL_C_USHORT) ||
(sqltype == SQL_C_SLONG) ||
(sqltype == SQL_C_ULONG))
{
if (typeName == wxGRID_VALUE_FLOAT)
{
if ((sqltype == SQL_C_SSHORT) ||
- (sqltype == SQL_C_USHORT) ||
+ (sqltype == SQL_C_USHORT) ||
(sqltype == SQL_C_SLONG) ||
(sqltype == SQL_C_ULONG) ||
(sqltype == SQL_C_FLOAT) ||
return false;
}
-bool wxDbGridTableBase::CanSetValueAs(int row, int col, const wxString& typeName)
+bool wxDbGridTableBase::CanSetValueAs(int WXUNUSED(row), int col, const wxString& typeName)
{
- //Is this needed? As will be validated on SetValueAsXXXX
- ValidateRow(row);
-
- if (m_data->IsColNull(m_ColInfo[col].DbCol))
- {
- return false;
- }
-
if (typeName == wxGRID_VALUE_STRING)
{
//FIXME ummm What about blob field etc.
if (m_data->GetNumberOfColumns() <= m_ColInfo[col].DbCol)
{
- //If a virtual column then we can't find it's type. we have to faulse to
+ //If a virtual column then we can't find it's type. we have to faulse to
//get using wxVairent.
return false;
}
if (typeName == wxGRID_VALUE_DATETIME)
{
if ((sqltype == SQL_C_DATE) ||
- (sqltype == SQL_C_TIME) ||
+ (sqltype == SQL_C_TIME) ||
(sqltype == SQL_C_TIMESTAMP))
{
return true;
if (typeName == wxGRID_VALUE_NUMBER)
{
if ((sqltype == SQL_C_SSHORT) ||
- (sqltype == SQL_C_USHORT) ||
+ (sqltype == SQL_C_USHORT) ||
(sqltype == SQL_C_SLONG) ||
(sqltype == SQL_C_ULONG))
{
if (typeName == wxGRID_VALUE_FLOAT)
{
if ((sqltype == SQL_C_SSHORT) ||
- (sqltype == SQL_C_USHORT) ||
+ (sqltype == SQL_C_USHORT) ||
(sqltype == SQL_C_SLONG) ||
(sqltype == SQL_C_ULONG) ||
(sqltype == SQL_C_FLOAT) ||
}
int sqltype = m_data->GetColDefs()[(m_ColInfo[col].DbCol)].SqlCtype;
if ((sqltype == SQL_C_SSHORT) ||
- (sqltype == SQL_C_USHORT) ||
+ (sqltype == SQL_C_USHORT) ||
(sqltype == SQL_C_SLONG) ||
(sqltype == SQL_C_ULONG))
{
- wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol);
+ wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol);
return val.GetLong();
}
wxFAIL_MSG (_T("unknown column, "));
}
int sqltype = m_data->GetColDefs()[(m_ColInfo[col].DbCol)].SqlCtype;
if ((sqltype == SQL_C_SSHORT) ||
- (sqltype == SQL_C_USHORT) ||
+ (sqltype == SQL_C_USHORT) ||
(sqltype == SQL_C_SLONG) ||
(sqltype == SQL_C_ULONG) ||
(sqltype == SQL_C_FLOAT) ||
(sqltype == SQL_C_DOUBLE))
{
- wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol);
+ wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol);
return val.GetDouble();
}
wxFAIL_MSG (_T("unknown column"));
}
int sqltype = m_data->GetColDefs()[(m_ColInfo[col].DbCol)].SqlCtype;
if ((sqltype == SQL_C_SSHORT) ||
- (sqltype == SQL_C_USHORT) ||
+ (sqltype == SQL_C_USHORT) ||
(sqltype == SQL_C_SLONG) ||
(sqltype == SQL_C_ULONG))
{
- wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol);
+ wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol);
return val.GetBool();
}
wxFAIL_MSG (_T("unknown column, "));
{
wxLogDebug(wxT("GetValueAsCustom() on %i,%i"),row,col);
ValidateRow(row);
-
+
if (m_data->GetNumberOfColumns() <= m_ColInfo[col].DbCol)
{
wxFAIL_MSG (_T("You can not use GetValueAsCustom for virtual columns"));
return NULL;
}
- if (m_data->IsColNull(m_ColInfo[col].DbCol))
+ if (m_data->IsColNull((UWORD)m_ColInfo[col].DbCol))
return NULL;
if (typeName == wxGRID_VALUE_DATETIME)
(sqltype == SQL_C_TIME) ||
(sqltype == SQL_C_TIMESTAMP))
{
- wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol);
+ wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol);
return new wxDateTime(val.GetDateTime());
}
}
}
wxVariant val(date);
m_rowmodified = true;
- m_data->SetCol(m_ColInfo[col].DbCol,val);
+ m_data->SetColumn(m_ColInfo[col].DbCol,val);
}
}
wxFAIL_MSG (_T("unknown column data type"));
wxLogDebug(wxT("IsEmtpyCell on %i,%i"),row,col);
ValidateRow(row);
- return m_data->IsColNull(m_ColInfo[col].DbCol);
+ return m_data->IsColNull((UWORD)m_ColInfo[col].DbCol);
}
wxString wxDbGridTableBase::GetValue(int row, int col)
{
wxLogDebug(wxT("GetValue() on %i,%i"),row,col);
-
+
ValidateRow(row);
- wxVariant val = m_data->GetCol(m_ColInfo[col].DbCol);
+ wxVariant val = m_data->GetColumn(m_ColInfo[col].DbCol);
wxLogDebug(wxT("\tReturning \"%s\"\n"),val.GetString().c_str());
-
- return val.GetString();
+
+ return val.GetString();
}
wxVariant val(value);
m_rowmodified = true;
- m_data->SetCol(m_ColInfo[col].DbCol,val);
+ m_data->SetColumn(m_ColInfo[col].DbCol,val);
}
wxVariant val(value);
m_rowmodified = true;
- m_data->SetCol(m_ColInfo[col].DbCol,val);
+ m_data->SetColumn(m_ColInfo[col].DbCol,val);
}
wxVariant val(value);
m_rowmodified = true;
- m_data->SetCol(m_ColInfo[col].DbCol,val);
+ m_data->SetColumn(m_ColInfo[col].DbCol,val);
}
wxVariant val(value);
m_rowmodified = true;
- m_data->SetCol(m_ColInfo[col].DbCol,val);
+ m_data->SetColumn(m_ColInfo[col].DbCol,val);
}
void wxDbGridTableBase::ValidateRow(int row)
{
- wxLogDebug(wxT("ValidateRow(%i) currently on row (%i). Array count = %i"),row,m_row,m_keys.GetCount());
+ wxLogDebug(wxT("ValidateRow(%i) currently on row (%i). Array count = %lu"),
+ row, m_row, (unsigned long)m_keys.GetCount());
if (row == m_row)
return;
m_data->SetKey(k);
if (!m_data->QueryOnKeyFields())
{
- wxDbLogExtendedErrorMsg("ODBC error during Query()\n\n", m_data->GetDb(),__FILE__,__LINE__);
+ wxDbLogExtendedErrorMsg(_T("ODBC error during Query()\n\n"), m_data->GetDb(),__TFILE__,__LINE__);
}
m_data->GetNext();
bool result=true;
wxLogDebug(wxT("\trow key unknown"));
-// FIXME: this code requires dbtable support for record status
+// FIXME: this code requires dbtable support for record status
#if 0
switch (m_data->get_ModifiedStatus())
{
return result;
}
-#include <wx/arrimpl.cpp>
-
-WX_DEFINE_OBJARRAY(keyarray);
+#include "wx/arrimpl.cpp"
-#endif // #if wxUSE_NEW_GRID
-#endif // #if wxUSE_ODBC
+WX_DEFINE_EXPORTED_OBJARRAY(keyarray)
+#endif // wxUSE_GRID && wxUSE_ODBC