1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_svtools.hxx" 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "svtools/table/tablecontrol.hxx" 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski #include "tablegeometry.hxx" 30*b1cdbd2cSJim Jagielski #include "tablecontrol_impl.hxx" 31*b1cdbd2cSJim Jagielski #include "tabledatawindow.hxx" 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp> 34*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp> 35*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp> 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h> 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno; 40*b1cdbd2cSJim Jagielski using ::com::sun::star::accessibility::XAccessible; 41*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::accessibility; 42*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang; 43*b1cdbd2cSJim Jagielski using namespace utl; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski //...................................................................................................................... 46*b1cdbd2cSJim Jagielski namespace svt { namespace table 47*b1cdbd2cSJim Jagielski { 48*b1cdbd2cSJim Jagielski //...................................................................................................................... 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski namespace AccessibleEventId = ::com::sun::star::accessibility::AccessibleEventId; 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski //================================================================================================================== 53*b1cdbd2cSJim Jagielski //= TableControl 54*b1cdbd2cSJim Jagielski //================================================================================================================== 55*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- TableControl(Window * _pParent,WinBits _nStyle)56*b1cdbd2cSJim Jagielski TableControl::TableControl( Window* _pParent, WinBits _nStyle ) 57*b1cdbd2cSJim Jagielski :Control( _pParent, _nStyle ) 58*b1cdbd2cSJim Jagielski ,m_pImpl( new TableControl_Impl( *this ) ) 59*b1cdbd2cSJim Jagielski { 60*b1cdbd2cSJim Jagielski TableDataWindow& rDataWindow = m_pImpl->getDataWindow(); 61*b1cdbd2cSJim Jagielski rDataWindow.SetSelectHdl( LINK( this, TableControl, ImplSelectHdl ) ); 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski // by default, use the background as determined by the style settings 64*b1cdbd2cSJim Jagielski const Color aWindowColor( GetSettings().GetStyleSettings().GetFieldColor() ); 65*b1cdbd2cSJim Jagielski SetBackground( Wallpaper( aWindowColor ) ); 66*b1cdbd2cSJim Jagielski SetFillColor( aWindowColor ); 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski SetCompoundControl( true ); 69*b1cdbd2cSJim Jagielski } 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- ~TableControl()72*b1cdbd2cSJim Jagielski TableControl::~TableControl() 73*b1cdbd2cSJim Jagielski { 74*b1cdbd2cSJim Jagielski ImplCallEventListeners( VCLEVENT_OBJECT_DYING ); 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski m_pImpl->setModel( PTableModel() ); 77*b1cdbd2cSJim Jagielski m_pImpl->disposeAccessible(); 78*b1cdbd2cSJim Jagielski m_pImpl.reset(); 79*b1cdbd2cSJim Jagielski } 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- GetFocus()82*b1cdbd2cSJim Jagielski void TableControl::GetFocus() 83*b1cdbd2cSJim Jagielski { 84*b1cdbd2cSJim Jagielski if ( !m_pImpl->getInputHandler()->GetFocus( *m_pImpl ) ) 85*b1cdbd2cSJim Jagielski Control::GetFocus(); 86*b1cdbd2cSJim Jagielski } 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- LoseFocus()89*b1cdbd2cSJim Jagielski void TableControl::LoseFocus() 90*b1cdbd2cSJim Jagielski { 91*b1cdbd2cSJim Jagielski if ( !m_pImpl->getInputHandler()->LoseFocus( *m_pImpl ) ) 92*b1cdbd2cSJim Jagielski Control::LoseFocus(); 93*b1cdbd2cSJim Jagielski } 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- KeyInput(const KeyEvent & rKEvt)96*b1cdbd2cSJim Jagielski void TableControl::KeyInput( const KeyEvent& rKEvt ) 97*b1cdbd2cSJim Jagielski { 98*b1cdbd2cSJim Jagielski if ( !m_pImpl->getInputHandler()->KeyInput( *m_pImpl, rKEvt ) ) 99*b1cdbd2cSJim Jagielski Control::KeyInput( rKEvt ); 100*b1cdbd2cSJim Jagielski else 101*b1cdbd2cSJim Jagielski { 102*b1cdbd2cSJim Jagielski if ( m_pImpl->isAccessibleAlive() ) 103*b1cdbd2cSJim Jagielski { 104*b1cdbd2cSJim Jagielski m_pImpl->commitCellEvent( AccessibleEventId::STATE_CHANGED, 105*b1cdbd2cSJim Jagielski makeAny( AccessibleStateType::FOCUSED ), 106*b1cdbd2cSJim Jagielski Any() 107*b1cdbd2cSJim Jagielski ); 108*b1cdbd2cSJim Jagielski // Huh? What the heck? Why do we unconditionally notify a STATE_CHANGE/FOCUSED after each and every 109*b1cdbd2cSJim Jagielski // (handled) key stroke? 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski m_pImpl->commitTableEvent( AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, 112*b1cdbd2cSJim Jagielski Any(), 113*b1cdbd2cSJim Jagielski Any() 114*b1cdbd2cSJim Jagielski ); 115*b1cdbd2cSJim Jagielski // ditto: Why do we notify this unconditionally? We should find the right place to notify the 116*b1cdbd2cSJim Jagielski // ACTIVE_DESCENDANT_CHANGED event. 117*b1cdbd2cSJim Jagielski // Also, we should check if STATE_CHANGED/FOCUSED is really necessary: finally, the children are 118*b1cdbd2cSJim Jagielski // transient, aren't they? 119*b1cdbd2cSJim Jagielski } 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski } 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- StateChanged(StateChangedType i_nStateChange)125*b1cdbd2cSJim Jagielski void TableControl::StateChanged( StateChangedType i_nStateChange ) 126*b1cdbd2cSJim Jagielski { 127*b1cdbd2cSJim Jagielski Control::StateChanged( i_nStateChange ); 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski // forward certain settings to the data window 130*b1cdbd2cSJim Jagielski switch ( i_nStateChange ) 131*b1cdbd2cSJim Jagielski { 132*b1cdbd2cSJim Jagielski case STATE_CHANGE_CONTROL_FOCUS: 133*b1cdbd2cSJim Jagielski m_pImpl->invalidateSelectedRows(); 134*b1cdbd2cSJim Jagielski break; 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski case STATE_CHANGE_CONTROLBACKGROUND: 137*b1cdbd2cSJim Jagielski if ( IsControlBackground() ) 138*b1cdbd2cSJim Jagielski getDataWindow().SetControlBackground( GetControlBackground() ); 139*b1cdbd2cSJim Jagielski else 140*b1cdbd2cSJim Jagielski getDataWindow().SetControlBackground(); 141*b1cdbd2cSJim Jagielski break; 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski case STATE_CHANGE_CONTROLFOREGROUND: 144*b1cdbd2cSJim Jagielski if ( IsControlForeground() ) 145*b1cdbd2cSJim Jagielski getDataWindow().SetControlForeground( GetControlForeground() ); 146*b1cdbd2cSJim Jagielski else 147*b1cdbd2cSJim Jagielski getDataWindow().SetControlForeground(); 148*b1cdbd2cSJim Jagielski break; 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski case STATE_CHANGE_CONTROLFONT: 151*b1cdbd2cSJim Jagielski if ( IsControlFont() ) 152*b1cdbd2cSJim Jagielski getDataWindow().SetControlFont( GetControlFont() ); 153*b1cdbd2cSJim Jagielski else 154*b1cdbd2cSJim Jagielski getDataWindow().SetControlFont(); 155*b1cdbd2cSJim Jagielski break; 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski } 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- Resize()160*b1cdbd2cSJim Jagielski void TableControl::Resize() 161*b1cdbd2cSJim Jagielski { 162*b1cdbd2cSJim Jagielski Control::Resize(); 163*b1cdbd2cSJim Jagielski m_pImpl->onResize(); 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- SetModel(PTableModel _pModel)167*b1cdbd2cSJim Jagielski void TableControl::SetModel( PTableModel _pModel ) 168*b1cdbd2cSJim Jagielski { 169*b1cdbd2cSJim Jagielski m_pImpl->setModel( _pModel ); 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- GetModel() const173*b1cdbd2cSJim Jagielski PTableModel TableControl::GetModel() const 174*b1cdbd2cSJim Jagielski { 175*b1cdbd2cSJim Jagielski return m_pImpl->getModel(); 176*b1cdbd2cSJim Jagielski } 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- GetTopRow() const179*b1cdbd2cSJim Jagielski RowPos TableControl::GetTopRow() const 180*b1cdbd2cSJim Jagielski { 181*b1cdbd2cSJim Jagielski return m_pImpl->getTopRow(); 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- SetTopRow(RowPos _nRow)185*b1cdbd2cSJim Jagielski void TableControl::SetTopRow( RowPos _nRow ) 186*b1cdbd2cSJim Jagielski { 187*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "TableControl::SetTopRow: not implemented!" ); 188*b1cdbd2cSJim Jagielski OSL_UNUSED( _nRow ); 189*b1cdbd2cSJim Jagielski } 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- GetCurrentRow() const192*b1cdbd2cSJim Jagielski sal_Int32 TableControl::GetCurrentRow() const 193*b1cdbd2cSJim Jagielski { 194*b1cdbd2cSJim Jagielski return m_pImpl->getCurrentRow(); 195*b1cdbd2cSJim Jagielski } 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- GetCurrentColumn() const198*b1cdbd2cSJim Jagielski sal_Int32 TableControl::GetCurrentColumn() const 199*b1cdbd2cSJim Jagielski { 200*b1cdbd2cSJim Jagielski return m_pImpl->getCurrentColumn(); 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- GoTo(ColPos _nColumn,RowPos _nRow)204*b1cdbd2cSJim Jagielski bool TableControl::GoTo( ColPos _nColumn, RowPos _nRow ) 205*b1cdbd2cSJim Jagielski { 206*b1cdbd2cSJim Jagielski return m_pImpl->goTo( _nColumn, _nRow ); 207*b1cdbd2cSJim Jagielski } 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- GoToCell(sal_Int32 _nColPos,sal_Int32 _nRowPos)210*b1cdbd2cSJim Jagielski sal_Bool TableControl::GoToCell(sal_Int32 _nColPos, sal_Int32 _nRowPos) 211*b1cdbd2cSJim Jagielski { 212*b1cdbd2cSJim Jagielski return m_pImpl->goTo( _nColPos, _nRowPos ); 213*b1cdbd2cSJim Jagielski } 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetSelectedRowCount() const216*b1cdbd2cSJim Jagielski sal_Int32 TableControl::GetSelectedRowCount() const 217*b1cdbd2cSJim Jagielski { 218*b1cdbd2cSJim Jagielski return sal_Int32( m_pImpl->getSelectedRowCount() ); 219*b1cdbd2cSJim Jagielski } 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetSelectedRowIndex(sal_Int32 const i_selectionIndex) const222*b1cdbd2cSJim Jagielski sal_Int32 TableControl::GetSelectedRowIndex( sal_Int32 const i_selectionIndex ) const 223*b1cdbd2cSJim Jagielski { 224*b1cdbd2cSJim Jagielski return sal_Int32( m_pImpl->getSelectedRowIndex( i_selectionIndex ) ); 225*b1cdbd2cSJim Jagielski } 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ IsRowSelected(sal_Int32 const i_rowIndex) const228*b1cdbd2cSJim Jagielski bool TableControl::IsRowSelected( sal_Int32 const i_rowIndex ) const 229*b1cdbd2cSJim Jagielski { 230*b1cdbd2cSJim Jagielski return m_pImpl->isRowSelected( i_rowIndex ); 231*b1cdbd2cSJim Jagielski } 232*b1cdbd2cSJim Jagielski 233*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- SelectRow(RowPos const i_rowIndex,bool const i_select)234*b1cdbd2cSJim Jagielski void TableControl::SelectRow( RowPos const i_rowIndex, bool const i_select ) 235*b1cdbd2cSJim Jagielski { 236*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN_VOID( ( i_rowIndex >= 0 ) && ( i_rowIndex < m_pImpl->getModel()->getRowCount() ), 237*b1cdbd2cSJim Jagielski "TableControl::SelectRow: invalid row index!" ); 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski if ( i_select ) 240*b1cdbd2cSJim Jagielski { 241*b1cdbd2cSJim Jagielski if ( !m_pImpl->markRowAsSelected( i_rowIndex ) ) 242*b1cdbd2cSJim Jagielski // nothing to do 243*b1cdbd2cSJim Jagielski return; 244*b1cdbd2cSJim Jagielski } 245*b1cdbd2cSJim Jagielski else 246*b1cdbd2cSJim Jagielski { 247*b1cdbd2cSJim Jagielski m_pImpl->markRowAsDeselected( i_rowIndex ); 248*b1cdbd2cSJim Jagielski } 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski m_pImpl->invalidateRowRange( i_rowIndex, i_rowIndex ); 251*b1cdbd2cSJim Jagielski Select(); 252*b1cdbd2cSJim Jagielski } 253*b1cdbd2cSJim Jagielski 254*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- SelectAllRows(bool const i_select)255*b1cdbd2cSJim Jagielski void TableControl::SelectAllRows( bool const i_select ) 256*b1cdbd2cSJim Jagielski { 257*b1cdbd2cSJim Jagielski if ( i_select ) 258*b1cdbd2cSJim Jagielski { 259*b1cdbd2cSJim Jagielski if ( !m_pImpl->markAllRowsAsSelected() ) 260*b1cdbd2cSJim Jagielski // nothing to do 261*b1cdbd2cSJim Jagielski return; 262*b1cdbd2cSJim Jagielski } 263*b1cdbd2cSJim Jagielski else 264*b1cdbd2cSJim Jagielski { 265*b1cdbd2cSJim Jagielski if ( !m_pImpl->markAllRowsAsDeselected() ) 266*b1cdbd2cSJim Jagielski // nothing to do 267*b1cdbd2cSJim Jagielski return; 268*b1cdbd2cSJim Jagielski } 269*b1cdbd2cSJim Jagielski 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielski Invalidate(); 272*b1cdbd2cSJim Jagielski // TODO: can't we do better than this, and invalidate only the rows which changed? 273*b1cdbd2cSJim Jagielski Select(); 274*b1cdbd2cSJim Jagielski } 275*b1cdbd2cSJim Jagielski 276*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- getTableControlInterface()277*b1cdbd2cSJim Jagielski ITableControl& TableControl::getTableControlInterface() 278*b1cdbd2cSJim Jagielski { 279*b1cdbd2cSJim Jagielski return *m_pImpl; 280*b1cdbd2cSJim Jagielski } 281*b1cdbd2cSJim Jagielski 282*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- getSelEngine()283*b1cdbd2cSJim Jagielski SelectionEngine* TableControl::getSelEngine() 284*b1cdbd2cSJim Jagielski { 285*b1cdbd2cSJim Jagielski return m_pImpl->getSelEngine(); 286*b1cdbd2cSJim Jagielski } 287*b1cdbd2cSJim Jagielski 288*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- getDataWindow()289*b1cdbd2cSJim Jagielski Window& TableControl::getDataWindow() 290*b1cdbd2cSJim Jagielski { 291*b1cdbd2cSJim Jagielski return m_pImpl->getDataWindow(); 292*b1cdbd2cSJim Jagielski } 293*b1cdbd2cSJim Jagielski 294*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- CreateAccessible()295*b1cdbd2cSJim Jagielski Reference< XAccessible > TableControl::CreateAccessible() 296*b1cdbd2cSJim Jagielski { 297*b1cdbd2cSJim Jagielski Window* pParent = GetAccessibleParentWindow(); 298*b1cdbd2cSJim Jagielski ENSURE_OR_RETURN( pParent, "TableControl::CreateAccessible - parent not found", NULL ); 299*b1cdbd2cSJim Jagielski 300*b1cdbd2cSJim Jagielski return m_pImpl->getAccessible( *pParent ); 301*b1cdbd2cSJim Jagielski } 302*b1cdbd2cSJim Jagielski 303*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- CreateAccessibleControl(sal_Int32 _nIndex)304*b1cdbd2cSJim Jagielski Reference<XAccessible> TableControl::CreateAccessibleControl( sal_Int32 _nIndex ) 305*b1cdbd2cSJim Jagielski { 306*b1cdbd2cSJim Jagielski (void)_nIndex; 307*b1cdbd2cSJim Jagielski DBG_ASSERT( sal_False, "TableControl::CreateAccessibleControl: to be overwritten!" ); 308*b1cdbd2cSJim Jagielski return NULL; 309*b1cdbd2cSJim Jagielski } 310*b1cdbd2cSJim Jagielski 311*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------------------------- GetAccessibleObjectName(AccessibleTableControlObjType eObjType,sal_Int32 _nRow,sal_Int32 _nCol) const312*b1cdbd2cSJim Jagielski ::rtl::OUString TableControl::GetAccessibleObjectName( AccessibleTableControlObjType eObjType, sal_Int32 _nRow, sal_Int32 _nCol) const 313*b1cdbd2cSJim Jagielski { 314*b1cdbd2cSJim Jagielski ::rtl::OUString aRetText; 315*b1cdbd2cSJim Jagielski //Window* pWin; 316*b1cdbd2cSJim Jagielski switch( eObjType ) 317*b1cdbd2cSJim Jagielski { 318*b1cdbd2cSJim Jagielski case TCTYPE_GRIDCONTROL: 319*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Grid control" ) ); 320*b1cdbd2cSJim Jagielski break; 321*b1cdbd2cSJim Jagielski case TCTYPE_TABLE: 322*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Grid conrol" ) ); 323*b1cdbd2cSJim Jagielski break; 324*b1cdbd2cSJim Jagielski case TCTYPE_ROWHEADERBAR: 325*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RowHeaderBar" ) ); 326*b1cdbd2cSJim Jagielski break; 327*b1cdbd2cSJim Jagielski case TCTYPE_COLUMNHEADERBAR: 328*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ColumnHeaderBar" ) ); 329*b1cdbd2cSJim Jagielski break; 330*b1cdbd2cSJim Jagielski case TCTYPE_TABLECELL: 331*b1cdbd2cSJim Jagielski //the name of the cell constists of column name and row name if defined 332*b1cdbd2cSJim Jagielski //if the name is equal to cell content, it'll be read twice 333*b1cdbd2cSJim Jagielski if(GetModel()->hasColumnHeaders()) 334*b1cdbd2cSJim Jagielski { 335*b1cdbd2cSJim Jagielski aRetText = GetColumnName(_nCol); 336*b1cdbd2cSJim Jagielski aRetText += rtl::OUString::createFromAscii(" , "); 337*b1cdbd2cSJim Jagielski } 338*b1cdbd2cSJim Jagielski if(GetModel()->hasRowHeaders()) 339*b1cdbd2cSJim Jagielski { 340*b1cdbd2cSJim Jagielski aRetText += GetRowName(_nRow); 341*b1cdbd2cSJim Jagielski aRetText += rtl::OUString::createFromAscii(" , "); 342*b1cdbd2cSJim Jagielski } 343*b1cdbd2cSJim Jagielski //aRetText = GetAccessibleCellText(_nRow, _nCol); 344*b1cdbd2cSJim Jagielski break; 345*b1cdbd2cSJim Jagielski case TCTYPE_ROWHEADERCELL: 346*b1cdbd2cSJim Jagielski aRetText = GetRowName(_nRow); 347*b1cdbd2cSJim Jagielski break; 348*b1cdbd2cSJim Jagielski case TCTYPE_COLUMNHEADERCELL: 349*b1cdbd2cSJim Jagielski aRetText = GetColumnName(_nCol); 350*b1cdbd2cSJim Jagielski break; 351*b1cdbd2cSJim Jagielski default: 352*b1cdbd2cSJim Jagielski OSL_ENSURE(0,"GridControl::GetAccessibleName: invalid enum!"); 353*b1cdbd2cSJim Jagielski } 354*b1cdbd2cSJim Jagielski return aRetText; 355*b1cdbd2cSJim Jagielski } 356*b1cdbd2cSJim Jagielski 357*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetAccessibleObjectDescription(AccessibleTableControlObjType eObjType,sal_Int32) const358*b1cdbd2cSJim Jagielski ::rtl::OUString TableControl::GetAccessibleObjectDescription( AccessibleTableControlObjType eObjType, sal_Int32 ) const 359*b1cdbd2cSJim Jagielski { 360*b1cdbd2cSJim Jagielski ::rtl::OUString aRetText; 361*b1cdbd2cSJim Jagielski switch( eObjType ) 362*b1cdbd2cSJim Jagielski { 363*b1cdbd2cSJim Jagielski case TCTYPE_GRIDCONTROL: 364*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Grid control description" ) ); 365*b1cdbd2cSJim Jagielski break; 366*b1cdbd2cSJim Jagielski case TCTYPE_TABLE: 367*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "TABLE description" ) ); 368*b1cdbd2cSJim Jagielski break; 369*b1cdbd2cSJim Jagielski case TCTYPE_ROWHEADERBAR: 370*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ROWHEADERBAR description" ) ); 371*b1cdbd2cSJim Jagielski break; 372*b1cdbd2cSJim Jagielski case TCTYPE_COLUMNHEADERBAR: 373*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "COLUMNHEADERBAR description" ) ); 374*b1cdbd2cSJim Jagielski break; 375*b1cdbd2cSJim Jagielski case TCTYPE_TABLECELL: 376*b1cdbd2cSJim Jagielski // the description of the cell consists of column name and row name if defined 377*b1cdbd2cSJim Jagielski // if the name is equal to cell content, it'll be read twice 378*b1cdbd2cSJim Jagielski if ( GetModel()->hasColumnHeaders() ) 379*b1cdbd2cSJim Jagielski { 380*b1cdbd2cSJim Jagielski aRetText = GetColumnName( GetCurrentColumn() ); 381*b1cdbd2cSJim Jagielski aRetText += rtl::OUString::createFromAscii( " , " ); 382*b1cdbd2cSJim Jagielski } 383*b1cdbd2cSJim Jagielski if ( GetModel()->hasRowHeaders() ) 384*b1cdbd2cSJim Jagielski { 385*b1cdbd2cSJim Jagielski aRetText += GetRowName( GetCurrentRow() ); 386*b1cdbd2cSJim Jagielski } 387*b1cdbd2cSJim Jagielski break; 388*b1cdbd2cSJim Jagielski case TCTYPE_ROWHEADERCELL: 389*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ROWHEADERCELL description" ) ); 390*b1cdbd2cSJim Jagielski break; 391*b1cdbd2cSJim Jagielski case TCTYPE_COLUMNHEADERCELL: 392*b1cdbd2cSJim Jagielski aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "COLUMNHEADERCELL description" ) ); 393*b1cdbd2cSJim Jagielski break; 394*b1cdbd2cSJim Jagielski } 395*b1cdbd2cSJim Jagielski return aRetText; 396*b1cdbd2cSJim Jagielski } 397*b1cdbd2cSJim Jagielski 398*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetRowDescription(sal_Int32 _nRow) const399*b1cdbd2cSJim Jagielski ::rtl::OUString TableControl::GetRowDescription( sal_Int32 _nRow) const 400*b1cdbd2cSJim Jagielski { 401*b1cdbd2cSJim Jagielski (void)_nRow; 402*b1cdbd2cSJim Jagielski return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "row description" ) ); 403*b1cdbd2cSJim Jagielski } 404*b1cdbd2cSJim Jagielski 405*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetRowName(sal_Int32 _nIndex) const406*b1cdbd2cSJim Jagielski ::rtl::OUString TableControl::GetRowName( sal_Int32 _nIndex) const 407*b1cdbd2cSJim Jagielski { 408*b1cdbd2cSJim Jagielski ::rtl::OUString sRowName; 409*b1cdbd2cSJim Jagielski GetModel()->getRowHeading( _nIndex ) >>= sRowName; 410*b1cdbd2cSJim Jagielski return sRowName; 411*b1cdbd2cSJim Jagielski } 412*b1cdbd2cSJim Jagielski 413*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetColumnDescription(sal_uInt16 _nColumn) const414*b1cdbd2cSJim Jagielski ::rtl::OUString TableControl::GetColumnDescription( sal_uInt16 _nColumn) const 415*b1cdbd2cSJim Jagielski { 416*b1cdbd2cSJim Jagielski (void)_nColumn; 417*b1cdbd2cSJim Jagielski return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "col description" ) ); 418*b1cdbd2cSJim Jagielski } 419*b1cdbd2cSJim Jagielski 420*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetColumnName(sal_Int32 _nIndex) const421*b1cdbd2cSJim Jagielski ::rtl::OUString TableControl::GetColumnName( sal_Int32 _nIndex) const 422*b1cdbd2cSJim Jagielski { 423*b1cdbd2cSJim Jagielski return GetModel()->getColumnModel(_nIndex)->getName(); 424*b1cdbd2cSJim Jagielski } 425*b1cdbd2cSJim Jagielski 426*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetCellContent(sal_Int32 _nRowPos,sal_Int32 _nColPos) const427*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any TableControl::GetCellContent( sal_Int32 _nRowPos, sal_Int32 _nColPos ) const 428*b1cdbd2cSJim Jagielski { 429*b1cdbd2cSJim Jagielski Any aCellContent; 430*b1cdbd2cSJim Jagielski GetModel()->getCellContent( _nColPos, _nRowPos, aCellContent ); 431*b1cdbd2cSJim Jagielski return aCellContent; 432*b1cdbd2cSJim Jagielski } 433*b1cdbd2cSJim Jagielski 434*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetAccessibleCellText(sal_Int32 _nRowPos,sal_Int32 _nColPos) const435*b1cdbd2cSJim Jagielski ::rtl::OUString TableControl::GetAccessibleCellText( sal_Int32 _nRowPos, sal_Int32 _nColPos) const 436*b1cdbd2cSJim Jagielski { 437*b1cdbd2cSJim Jagielski return m_pImpl->getCellContentAsString( _nRowPos, _nColPos ); 438*b1cdbd2cSJim Jagielski } 439*b1cdbd2cSJim Jagielski 440*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ FillAccessibleStateSet(::utl::AccessibleStateSetHelper & rStateSet,AccessibleTableControlObjType eObjType) const441*b1cdbd2cSJim Jagielski void TableControl::FillAccessibleStateSet( 442*b1cdbd2cSJim Jagielski ::utl::AccessibleStateSetHelper& rStateSet, 443*b1cdbd2cSJim Jagielski AccessibleTableControlObjType eObjType ) const 444*b1cdbd2cSJim Jagielski { 445*b1cdbd2cSJim Jagielski switch( eObjType ) 446*b1cdbd2cSJim Jagielski { 447*b1cdbd2cSJim Jagielski case TCTYPE_GRIDCONTROL: 448*b1cdbd2cSJim Jagielski case TCTYPE_TABLE: 449*b1cdbd2cSJim Jagielski 450*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::FOCUSABLE ); 451*b1cdbd2cSJim Jagielski 452*b1cdbd2cSJim Jagielski if ( m_pImpl->getSelEngine()->GetSelectionMode() == MULTIPLE_SELECTION ) 453*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::MULTI_SELECTABLE); 454*b1cdbd2cSJim Jagielski 455*b1cdbd2cSJim Jagielski if ( HasChildPathFocus() ) 456*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::FOCUSED ); 457*b1cdbd2cSJim Jagielski 458*b1cdbd2cSJim Jagielski if ( IsActive() ) 459*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::ACTIVE ); 460*b1cdbd2cSJim Jagielski 461*b1cdbd2cSJim Jagielski if ( m_pImpl->getDataWindow().IsEnabled() ) 462*b1cdbd2cSJim Jagielski { 463*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::ENABLED ); 464*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::SENSITIVE ); 465*b1cdbd2cSJim Jagielski } 466*b1cdbd2cSJim Jagielski 467*b1cdbd2cSJim Jagielski if ( IsReallyVisible() ) 468*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::VISIBLE ); 469*b1cdbd2cSJim Jagielski 470*b1cdbd2cSJim Jagielski if ( eObjType == TCTYPE_TABLE ) 471*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::MANAGES_DESCENDANTS ); 472*b1cdbd2cSJim Jagielski break; 473*b1cdbd2cSJim Jagielski 474*b1cdbd2cSJim Jagielski case TCTYPE_ROWHEADERBAR: 475*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::VISIBLE ); 476*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::MANAGES_DESCENDANTS ); 477*b1cdbd2cSJim Jagielski break; 478*b1cdbd2cSJim Jagielski 479*b1cdbd2cSJim Jagielski case TCTYPE_COLUMNHEADERBAR: 480*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::VISIBLE ); 481*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::MANAGES_DESCENDANTS ); 482*b1cdbd2cSJim Jagielski break; 483*b1cdbd2cSJim Jagielski 484*b1cdbd2cSJim Jagielski case TCTYPE_TABLECELL: 485*b1cdbd2cSJim Jagielski { 486*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::FOCUSABLE ); 487*b1cdbd2cSJim Jagielski if ( HasChildPathFocus() ) 488*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::FOCUSED ); 489*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::ACTIVE ); 490*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::TRANSIENT ); 491*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::SELECTABLE); 492*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::VISIBLE ); 493*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::SHOWING ); 494*b1cdbd2cSJim Jagielski if ( IsRowSelected( GetCurrentRow() ) ) 495*b1cdbd2cSJim Jagielski // Hmm? Wouldn't we expect the affected row to be a parameter to this function? 496*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::SELECTED ); 497*b1cdbd2cSJim Jagielski } 498*b1cdbd2cSJim Jagielski break; 499*b1cdbd2cSJim Jagielski 500*b1cdbd2cSJim Jagielski case TCTYPE_ROWHEADERCELL: 501*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::VISIBLE ); 502*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::TRANSIENT ); 503*b1cdbd2cSJim Jagielski break; 504*b1cdbd2cSJim Jagielski 505*b1cdbd2cSJim Jagielski case TCTYPE_COLUMNHEADERCELL: 506*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::VISIBLE ); 507*b1cdbd2cSJim Jagielski break; 508*b1cdbd2cSJim Jagielski } 509*b1cdbd2cSJim Jagielski } 510*b1cdbd2cSJim Jagielski 511*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ commitCellEventIfAccessibleAlive(sal_Int16 const i_eventID,const Any & i_newValue,const Any & i_oldValue)512*b1cdbd2cSJim Jagielski void TableControl::commitCellEventIfAccessibleAlive( sal_Int16 const i_eventID, const Any& i_newValue, const Any& i_oldValue ) 513*b1cdbd2cSJim Jagielski { 514*b1cdbd2cSJim Jagielski if ( m_pImpl->isAccessibleAlive() ) 515*b1cdbd2cSJim Jagielski m_pImpl->commitCellEvent( i_eventID, i_newValue, i_oldValue ); 516*b1cdbd2cSJim Jagielski } 517*b1cdbd2cSJim Jagielski 518*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ commitTableEventIfAccessibleAlive(sal_Int16 const i_eventID,const Any & i_newValue,const Any & i_oldValue)519*b1cdbd2cSJim Jagielski void TableControl::commitTableEventIfAccessibleAlive( sal_Int16 const i_eventID, const Any& i_newValue, const Any& i_oldValue ) 520*b1cdbd2cSJim Jagielski { 521*b1cdbd2cSJim Jagielski if ( m_pImpl->isAccessibleAlive() ) 522*b1cdbd2cSJim Jagielski m_pImpl->commitTableEvent( i_eventID, i_newValue, i_oldValue ); 523*b1cdbd2cSJim Jagielski } 524*b1cdbd2cSJim Jagielski 525*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetWindowExtentsRelative(Window * pRelativeWindow) const526*b1cdbd2cSJim Jagielski Rectangle TableControl::GetWindowExtentsRelative( Window *pRelativeWindow ) const 527*b1cdbd2cSJim Jagielski { 528*b1cdbd2cSJim Jagielski return Control::GetWindowExtentsRelative( pRelativeWindow ); 529*b1cdbd2cSJim Jagielski } 530*b1cdbd2cSJim Jagielski 531*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GrabFocus()532*b1cdbd2cSJim Jagielski void TableControl::GrabFocus() 533*b1cdbd2cSJim Jagielski { 534*b1cdbd2cSJim Jagielski Control::GrabFocus(); 535*b1cdbd2cSJim Jagielski } 536*b1cdbd2cSJim Jagielski 537*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetAccessible(sal_Bool bCreate)538*b1cdbd2cSJim Jagielski Reference< XAccessible > TableControl::GetAccessible( sal_Bool bCreate ) 539*b1cdbd2cSJim Jagielski { 540*b1cdbd2cSJim Jagielski return Control::GetAccessible( bCreate ); 541*b1cdbd2cSJim Jagielski } 542*b1cdbd2cSJim Jagielski 543*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetAccessibleParentWindow() const544*b1cdbd2cSJim Jagielski Window* TableControl::GetAccessibleParentWindow() const 545*b1cdbd2cSJim Jagielski { 546*b1cdbd2cSJim Jagielski return Control::GetAccessibleParentWindow(); 547*b1cdbd2cSJim Jagielski } 548*b1cdbd2cSJim Jagielski 549*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetWindowInstance()550*b1cdbd2cSJim Jagielski Window* TableControl::GetWindowInstance() 551*b1cdbd2cSJim Jagielski { 552*b1cdbd2cSJim Jagielski return this; 553*b1cdbd2cSJim Jagielski } 554*b1cdbd2cSJim Jagielski 555*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ HasRowHeader()556*b1cdbd2cSJim Jagielski sal_Bool TableControl::HasRowHeader() 557*b1cdbd2cSJim Jagielski { 558*b1cdbd2cSJim Jagielski return GetModel()->hasRowHeaders(); 559*b1cdbd2cSJim Jagielski } 560*b1cdbd2cSJim Jagielski 561*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ HasColHeader()562*b1cdbd2cSJim Jagielski sal_Bool TableControl::HasColHeader() 563*b1cdbd2cSJim Jagielski { 564*b1cdbd2cSJim Jagielski return GetModel()->hasColumnHeaders(); 565*b1cdbd2cSJim Jagielski } 566*b1cdbd2cSJim Jagielski 567*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetAccessibleControlCount() const568*b1cdbd2cSJim Jagielski sal_Int32 TableControl::GetAccessibleControlCount() const 569*b1cdbd2cSJim Jagielski { 570*b1cdbd2cSJim Jagielski // TC_TABLE is always defined, no matter whether empty or not 571*b1cdbd2cSJim Jagielski sal_Int32 count = 1; 572*b1cdbd2cSJim Jagielski if ( GetModel()->hasRowHeaders() ) 573*b1cdbd2cSJim Jagielski ++count; 574*b1cdbd2cSJim Jagielski if ( GetModel()->hasColumnHeaders() ) 575*b1cdbd2cSJim Jagielski ++count; 576*b1cdbd2cSJim Jagielski return count; 577*b1cdbd2cSJim Jagielski } 578*b1cdbd2cSJim Jagielski 579*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ ConvertPointToControlIndex(sal_Int32 & _rnIndex,const Point & _rPoint)580*b1cdbd2cSJim Jagielski sal_Bool TableControl::ConvertPointToControlIndex( sal_Int32& _rnIndex, const Point& _rPoint ) 581*b1cdbd2cSJim Jagielski { 582*b1cdbd2cSJim Jagielski sal_Int32 nRow = m_pImpl->getRowAtPoint( _rPoint ); 583*b1cdbd2cSJim Jagielski sal_Int32 nCol = m_pImpl->getColAtPoint( _rPoint ); 584*b1cdbd2cSJim Jagielski _rnIndex = nRow * GetColumnCount() + nCol; 585*b1cdbd2cSJim Jagielski return nRow >= 0 ? sal_True : sal_False; 586*b1cdbd2cSJim Jagielski } 587*b1cdbd2cSJim Jagielski 588*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetRowCount() const589*b1cdbd2cSJim Jagielski long TableControl::GetRowCount() const 590*b1cdbd2cSJim Jagielski { 591*b1cdbd2cSJim Jagielski return GetModel()->getRowCount(); 592*b1cdbd2cSJim Jagielski } 593*b1cdbd2cSJim Jagielski 594*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetColumnCount() const595*b1cdbd2cSJim Jagielski long TableControl::GetColumnCount() const 596*b1cdbd2cSJim Jagielski { 597*b1cdbd2cSJim Jagielski return GetModel()->getColumnCount(); 598*b1cdbd2cSJim Jagielski } 599*b1cdbd2cSJim Jagielski 600*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ HasRowHeader() const601*b1cdbd2cSJim Jagielski sal_Bool TableControl::HasRowHeader() const 602*b1cdbd2cSJim Jagielski { 603*b1cdbd2cSJim Jagielski return GetModel()->hasRowHeaders(); 604*b1cdbd2cSJim Jagielski } 605*b1cdbd2cSJim Jagielski 606*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ ConvertPointToCellAddress(sal_Int32 & _rnRow,sal_Int32 & _rnColPos,const Point & _rPoint)607*b1cdbd2cSJim Jagielski sal_Bool TableControl::ConvertPointToCellAddress( sal_Int32& _rnRow, sal_Int32& _rnColPos, const Point& _rPoint ) 608*b1cdbd2cSJim Jagielski { 609*b1cdbd2cSJim Jagielski _rnRow = m_pImpl->getRowAtPoint( _rPoint ); 610*b1cdbd2cSJim Jagielski _rnColPos = m_pImpl->getColAtPoint( _rPoint ); 611*b1cdbd2cSJim Jagielski return _rnRow >= 0 ? sal_True : sal_False; 612*b1cdbd2cSJim Jagielski } 613*b1cdbd2cSJim Jagielski 614*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ FillAccessibleStateSetForCell(::utl::AccessibleStateSetHelper & _rStateSet,sal_Int32 _nRow,sal_uInt16 _nColumnPos) const615*b1cdbd2cSJim Jagielski void TableControl::FillAccessibleStateSetForCell( ::utl::AccessibleStateSetHelper& _rStateSet, sal_Int32 _nRow, sal_uInt16 _nColumnPos ) const 616*b1cdbd2cSJim Jagielski { 617*b1cdbd2cSJim Jagielski if ( IsRowSelected( _nRow ) ) 618*b1cdbd2cSJim Jagielski _rStateSet.AddState( AccessibleStateType::SELECTED ); 619*b1cdbd2cSJim Jagielski if ( HasChildPathFocus() ) 620*b1cdbd2cSJim Jagielski _rStateSet.AddState( AccessibleStateType::FOCUSED ); 621*b1cdbd2cSJim Jagielski else // only transient when column is not focused 622*b1cdbd2cSJim Jagielski _rStateSet.AddState( AccessibleStateType::TRANSIENT ); 623*b1cdbd2cSJim Jagielski 624*b1cdbd2cSJim Jagielski _rStateSet.AddState( AccessibleStateType::VISIBLE ); 625*b1cdbd2cSJim Jagielski _rStateSet.AddState( AccessibleStateType::SHOWING ); 626*b1cdbd2cSJim Jagielski _rStateSet.AddState( AccessibleStateType::ENABLED ); 627*b1cdbd2cSJim Jagielski _rStateSet.AddState( AccessibleStateType::SENSITIVE ); 628*b1cdbd2cSJim Jagielski _rStateSet.AddState( AccessibleStateType::ACTIVE ); 629*b1cdbd2cSJim Jagielski 630*b1cdbd2cSJim Jagielski (void)_nColumnPos; 631*b1cdbd2cSJim Jagielski } 632*b1cdbd2cSJim Jagielski 633*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetFieldCharacterBounds(sal_Int32 _nRow,sal_Int32 _nColumnPos,sal_Int32 nIndex)634*b1cdbd2cSJim Jagielski Rectangle TableControl::GetFieldCharacterBounds(sal_Int32 _nRow,sal_Int32 _nColumnPos,sal_Int32 nIndex) 635*b1cdbd2cSJim Jagielski { 636*b1cdbd2cSJim Jagielski (void)_nRow; 637*b1cdbd2cSJim Jagielski (void)_nColumnPos; 638*b1cdbd2cSJim Jagielski return GetCharacterBounds(nIndex); 639*b1cdbd2cSJim Jagielski } 640*b1cdbd2cSJim Jagielski 641*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetFieldIndexAtPoint(sal_Int32 _nRow,sal_Int32 _nColumnPos,const Point & _rPoint)642*b1cdbd2cSJim Jagielski sal_Int32 TableControl::GetFieldIndexAtPoint(sal_Int32 _nRow,sal_Int32 _nColumnPos,const Point& _rPoint) 643*b1cdbd2cSJim Jagielski { 644*b1cdbd2cSJim Jagielski (void)_nRow; 645*b1cdbd2cSJim Jagielski (void)_nColumnPos; 646*b1cdbd2cSJim Jagielski return GetIndexForPoint(_rPoint); 647*b1cdbd2cSJim Jagielski } 648*b1cdbd2cSJim Jagielski 649*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ calcHeaderRect(sal_Bool _bIsColumnBar,sal_Bool _bOnScreen)650*b1cdbd2cSJim Jagielski Rectangle TableControl::calcHeaderRect(sal_Bool _bIsColumnBar,sal_Bool _bOnScreen) 651*b1cdbd2cSJim Jagielski { 652*b1cdbd2cSJim Jagielski (void)_bOnScreen; 653*b1cdbd2cSJim Jagielski return m_pImpl->calcHeaderRect( _bIsColumnBar ? false : true ); 654*b1cdbd2cSJim Jagielski } 655*b1cdbd2cSJim Jagielski 656*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ calcHeaderCellRect(sal_Bool _bIsColumnBar,sal_Int32 nPos)657*b1cdbd2cSJim Jagielski Rectangle TableControl::calcHeaderCellRect( sal_Bool _bIsColumnBar, sal_Int32 nPos ) 658*b1cdbd2cSJim Jagielski { 659*b1cdbd2cSJim Jagielski return m_pImpl->calcHeaderCellRect( _bIsColumnBar, nPos ); 660*b1cdbd2cSJim Jagielski } 661*b1cdbd2cSJim Jagielski 662*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ calcTableRect(sal_Bool _bOnScreen)663*b1cdbd2cSJim Jagielski Rectangle TableControl::calcTableRect(sal_Bool _bOnScreen) 664*b1cdbd2cSJim Jagielski { 665*b1cdbd2cSJim Jagielski (void)_bOnScreen; 666*b1cdbd2cSJim Jagielski return m_pImpl->calcTableRect(); 667*b1cdbd2cSJim Jagielski } 668*b1cdbd2cSJim Jagielski 669*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ calcCellRect(sal_Int32 _nRowPos,sal_Int32 _nColPos)670*b1cdbd2cSJim Jagielski Rectangle TableControl::calcCellRect( sal_Int32 _nRowPos, sal_Int32 _nColPos ) 671*b1cdbd2cSJim Jagielski { 672*b1cdbd2cSJim Jagielski return m_pImpl->calcCellRect( _nRowPos, _nColPos ); 673*b1cdbd2cSJim Jagielski } 674*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ IMPL_LINK(TableControl,ImplSelectHdl,void *,EMPTYARG)675*b1cdbd2cSJim Jagielski IMPL_LINK( TableControl, ImplSelectHdl, void*, EMPTYARG ) 676*b1cdbd2cSJim Jagielski { 677*b1cdbd2cSJim Jagielski Select(); 678*b1cdbd2cSJim Jagielski return 1; 679*b1cdbd2cSJim Jagielski } 680*b1cdbd2cSJim Jagielski 681*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ Select()682*b1cdbd2cSJim Jagielski void TableControl::Select() 683*b1cdbd2cSJim Jagielski { 684*b1cdbd2cSJim Jagielski ImplCallEventListenersAndHandler( VCLEVENT_TABLEROW_SELECT, m_pImpl->getSelectHandler(), this ); 685*b1cdbd2cSJim Jagielski 686*b1cdbd2cSJim Jagielski if ( m_pImpl->isAccessibleAlive() ) 687*b1cdbd2cSJim Jagielski { 688*b1cdbd2cSJim Jagielski m_pImpl->commitAccessibleEvent( AccessibleEventId::SELECTION_CHANGED, Any(), Any() ); 689*b1cdbd2cSJim Jagielski 690*b1cdbd2cSJim Jagielski m_pImpl->commitTableEvent( AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, Any(), Any() ); 691*b1cdbd2cSJim Jagielski // TODO: why do we notify this when the *selection* changed? Shouldn't we find a better place for this, 692*b1cdbd2cSJim Jagielski // actually, when the active descendant, i.e. the current cell, *really* changed? 693*b1cdbd2cSJim Jagielski } 694*b1cdbd2cSJim Jagielski } 695*b1cdbd2cSJim Jagielski 696*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ SetSelectHdl(const Link & i_selectHandler)697*b1cdbd2cSJim Jagielski void TableControl::SetSelectHdl( const Link& i_selectHandler ) 698*b1cdbd2cSJim Jagielski { 699*b1cdbd2cSJim Jagielski m_pImpl->setSelectHandler( i_selectHandler ); 700*b1cdbd2cSJim Jagielski } 701*b1cdbd2cSJim Jagielski 702*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------------------------------------ GetSelectHdl() const703*b1cdbd2cSJim Jagielski const Link& TableControl::GetSelectHdl() const 704*b1cdbd2cSJim Jagielski { 705*b1cdbd2cSJim Jagielski return m_pImpl->getSelectHandler(); 706*b1cdbd2cSJim Jagielski } 707*b1cdbd2cSJim Jagielski 708*b1cdbd2cSJim Jagielski //...................................................................................................................... 709*b1cdbd2cSJim Jagielski }} // namespace svt::table 710*b1cdbd2cSJim Jagielski //...................................................................................................................... 711