From: <as...@us...> - 2002-08-07 23:05:32
|
Update of /cvsroot/decaldev/source/DecalControls In directory usw-pr-cvs1:/tmp/cvs-serv13489 Modified Files: List.h List.cpp Log Message: Updated to include cynica_l's fixes to the List control colouring Index: List.h =================================================================== RCS file: /cvsroot/decaldev/source/DecalControls/List.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** List.h 17 Feb 2002 04:42:01 -0000 1.6 --- List.h 7 Aug 2002 23:05:29 -0000 1.7 *************** *** 46,51 **** *m_pEndData; bool m_bInvalid; ! std::map<long, long> m_colors; ! explicit cRow( long nDataWidth ); cRow( const cRow &row ); --- 46,51 ---- *m_pEndData; bool m_bInvalid; ! mutable long *m_colors; /* cyn - 07/08/2002 */ ! explicit cRow( long nDataWidth ); cRow( const cRow &row ); Index: List.cpp =================================================================== RCS file: /cvsroot/decaldev/source/DecalControls/List.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** List.cpp 17 Feb 2002 04:42:01 -0000 1.15 --- List.cpp 7 Aug 2002 23:05:29 -0000 1.16 *************** *** 18,25 **** : m_pData( new VARIANT[ nDataWidth ] ), m_pEndData( m_pData + nDataWidth ), ! m_bInvalid( true ) { for( VARIANT *i_var = m_pData; i_var != m_pEndData; ++ i_var ) ::VariantInit( i_var ); } --- 18,27 ---- : m_pData( new VARIANT[ nDataWidth ] ), m_pEndData( m_pData + nDataWidth ), ! m_bInvalid( true ), ! m_colors( NULL ) /* cyn - 07/08/2002 */ { for( VARIANT *i_var = m_pData; i_var != m_pEndData; ++ i_var ) ::VariantInit( i_var ); + } *************** *** 27,31 **** : m_pData( row.m_pData ), m_pEndData( row.m_pEndData ), ! m_bInvalid( row.m_bInvalid ) { _ASSERTE( _CrtIsValidHeapPointer( m_pData ) ); --- 29,35 ---- : m_pData( row.m_pData ), m_pEndData( row.m_pEndData ), ! m_bInvalid( row.m_bInvalid ), ! m_colors( row.m_colors ) /* cyn - 07/08/2002 -- This is the real fix, the rest of */ ! /* the changes just make it faster */ { _ASSERTE( _CrtIsValidHeapPointer( m_pData ) ); *************** *** 46,54 **** delete[] m_pData; } } cList::cRow &cList::cRow::operator =( const cRow &row ) { ! // Clear out our current data - if any if( m_pData != NULL ) { --- 50,64 ---- delete[] m_pData; } + + if (m_colors) { /* cyn - 07/08/2002 */ + delete m_colors; + } } cList::cRow &cList::cRow::operator =( const cRow &row ) { ! ! ! // Clear out our current data - if any if( m_pData != NULL ) { *************** *** 69,75 **** m_pEndData = row.m_pEndData; m_bInvalid = row.m_bInvalid; m_colors = row.m_colors; ! row.m_pData = NULL; _ASSERTMEM( _CrtCheckMemory() ); --- 79,90 ---- m_pEndData = row.m_pEndData; m_bInvalid = row.m_bInvalid; + + if (m_colors) { /* cyn - 07/08/2002 */ + delete m_colors; + } m_colors = row.m_colors; + row.m_colors = NULL; ! row.m_pData = NULL; _ASSERTMEM( _CrtCheckMemory() ); *************** *** 500,510 **** STDMETHODIMP cList::get_Color(long nX, long nY, long *pVal) { cRow &rowData = m_rows[nY]; ! if (rowData.m_colors[nX]) { ! *pVal = rowData.m_colors[nX]; ! } else { ! *pVal = 0x00FFFFFF; ! } return S_OK; } --- 515,536 ---- STDMETHODIMP cList::get_Color(long nX, long nY, long *pVal) { + + if (!pVal) { /* cyn - 07/08/2002 */ + return E_FAIL; + } + + *pVal = 0x00FFFFFF; cRow &rowData = m_rows[nY]; ! if (nX >= m_cols.size()) { ! return E_FAIL; ! } ! ! if (rowData.m_colors) { ! if (rowData.m_colors[nX]) { ! *pVal = rowData.m_colors[nX]; ! } ! } ! return S_OK; } *************** *** 512,520 **** STDMETHODIMP cList::put_Color(long nX, long nY, long newVal) { cRow &rowData = m_rows[nY]; - m_pSite->Invalidate(); ! rowData.m_colors[nX] = newVal; ! rowData.m_bInvalid = true; return S_OK; --- 538,558 ---- STDMETHODIMP cList::put_Color(long nX, long nY, long newVal) { + if (nX >= m_cols.size()) { /* cyn - 07/08/2002 */ + return E_FAIL; + } + cRow &rowData = m_rows[nY]; ! if (!rowData.m_colors) { ! rowData.m_colors = new long[ m_cols.size() ]; ! if (!rowData.m_colors) { ! return E_OUTOFMEMORY; ! } ! } ! ! rowData.m_colors[nX] = newVal; ! ! m_pSite->Invalidate(); ! rowData.m_bInvalid = true; return S_OK; |