diff options
Diffstat (limited to 'svtools/source/control/roadmap.cxx')
-rw-r--r-- | svtools/source/control/roadmap.cxx | 1022 |
1 files changed, 0 insertions, 1022 deletions
diff --git a/svtools/source/control/roadmap.cxx b/svtools/source/control/roadmap.cxx deleted file mode 100644 index 012c664456..0000000000 --- a/svtools/source/control/roadmap.cxx +++ /dev/null @@ -1,1022 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_svtools.hxx" -#include <svtools/roadmap.hxx> - -#ifndef _STRING_HXX -#define _STRING_HXX -#endif - -#include <vector> -#include <algorithm> -#include <vcl/bitmap.hxx> -#include <tools/color.hxx> -#include <rtl/ustring.hxx> -#include <memory> - -#define ROADMAP_INDENT_X 4 -#define ROADMAP_INDENT_Y 27 -#define ROADMAP_ITEM_DISTANCE_Y 6 -#define RMINCOMPLETE -1 -#define NADDITEM 1 -#define INCOMPLETELABEL ::String::CreateFromAscii("...") // TODO: Cast to String - -//......................................................................... -namespace svt -{ -//......................................................................... - - typedef std::vector< ::rtl::OUString > S_Vector; - typedef std::vector< RoadmapItem* > HL_Vector; - - //===================================================================== - //= ColorChanger - //===================================================================== - class IDLabel : public FixedText - { - public: - IDLabel( Window* _pParent, WinBits _nWinStyle = 0 ); - ~IDLabel( ); - virtual void DataChanged( const DataChangedEvent& rDCEvt ); - }; - - //===================================================================== - //= ColorChanger - //===================================================================== - class ColorChanger - { - protected: - OutputDevice* m_pDev; - - public: - ColorChanger( OutputDevice* _pDev, const Color& _rNewLineColor, const Color& _rNewFillColor ) - :m_pDev( _pDev ) - { - m_pDev->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR ); - m_pDev->SetLineColor( _rNewLineColor ); - m_pDev->SetFillColor( _rNewFillColor ); - } - - ~ColorChanger() - { - m_pDev->Pop(); - } - }; - - //===================================================================== - //= RoadmapItem - //===================================================================== - class RoadmapItem : public RoadmapTypes - { - private: - IDLabel* mpID; - HyperLabel* mpDescription; - const Size m_aItemPlayground; - - public: - RoadmapItem( ORoadmap& _rParent, const Size& _rItemPlayground ); - ~RoadmapItem( ); - - void SetID( sal_Int16 _ID ); - sal_Int16 GetID() const; - - void SetIndex( ItemIndex _Index ); - ItemIndex GetIndex() const; - - void SetLabel( const ::rtl::OUString& _rText ); - ::rtl::OUString GetLabel( ); - - void Update( ItemIndex _RMIndex, const ::rtl::OUString& _rText ); - - void SetPosition( RoadmapItem* OldHyperLabel ); - - void ToggleBackgroundColor( const Color& _rGBColor ); - void SetInteractive( sal_Bool _bInteractive ); - - void SetClickHdl( const Link& rLink ); - const Link& GetClickHdl() const; - void SetZOrder( RoadmapItem* pRefRoadmapHyperLabel, sal_uInt16 nFlags ); - void Enable( sal_Bool bEnable = sal_True); - sal_Bool IsEnabled() const; - void GrabFocus(); - - bool Contains( const Window* _pWindow ) const; - - HyperLabel* GetDescriptionHyperLabel() const { return mpDescription; } - - private: - void ImplUpdateIndex( const ItemIndex _nIndex ); - void ImplUpdatePosSize(); - }; - - //===================================================================== - //= RoadmapImpl - //===================================================================== - class RoadmapImpl : public RoadmapTypes - { - protected: - const ORoadmap& m_rAntiImpl; - Link m_aSelectHdl; - BitmapEx m_aPicture; - HL_Vector m_aRoadmapSteps; - ItemId m_iCurItemID; - sal_Bool m_bInteractive; - sal_Bool m_bComplete; - Size m_aItemSizePixel; - - public: - RoadmapImpl( const ORoadmap& _rAntiImpl ) - :m_rAntiImpl( _rAntiImpl ) - ,m_iCurItemID( -1 ) - ,m_bInteractive( sal_True ) - ,m_bComplete( sal_True ) - { - } - - RoadmapItem* InCompleteHyperLabel; - - void addHyperLabel( RoadmapItem* _rRoadmapStep ) { m_aRoadmapSteps.push_back(_rRoadmapStep); } - - HL_Vector& getHyperLabels() { return m_aRoadmapSteps; } - const HL_Vector& getHyperLabels() const { return m_aRoadmapSteps; } - - void insertHyperLabel( ItemIndex _Index, RoadmapItem* _rRoadmapStep ) { m_aRoadmapSteps.insert( m_aRoadmapSteps.begin() + _Index, _rRoadmapStep ); } - - ItemIndex getItemCount() const { return m_aRoadmapSteps.size();} - - void setCurItemID( ItemId i ) {m_iCurItemID = i; } - ItemId getCurItemID() const { return m_iCurItemID; } - - void setInteractive(const sal_Bool _bInteractive) {m_bInteractive = _bInteractive; } - sal_Bool isInteractive() const { return m_bInteractive; }; - - void setComplete(const sal_Bool _bComplete) {m_bComplete = _bComplete; } - sal_Bool isComplete() const { return m_bComplete; }; - - void setPicture( const BitmapEx& _rPic ) { m_aPicture = _rPic; } - const BitmapEx& getPicture( ) const { return m_aPicture; } - - void setSelectHdl( const Link& _rHdl ) { m_aSelectHdl = _rHdl; } - const Link& getSelectHdl( ) const { return m_aSelectHdl; } - - void initItemSize(); - const Size& getItemSize() const { return m_aItemSizePixel; } - - void removeHyperLabel( ItemIndex _Index ) - { - if ( ( _Index > -1 ) && ( _Index < getItemCount() ) ) - { - delete m_aRoadmapSteps[_Index]; - m_aRoadmapSteps.erase( m_aRoadmapSteps.begin() + _Index); - } - } - }; - - - //===================================================================== - //= Roadmap - //===================================================================== - //--------------------------------------------------------------------- - void RoadmapImpl::initItemSize() - { - Size aLabelSize( m_rAntiImpl.GetOutputSizePixel() ); - aLabelSize.Height() = m_rAntiImpl.LogicToPixel( Size( 0, LABELBASEMAPHEIGHT ), MAP_APPFONT ).Height(); - aLabelSize.Width() -= m_rAntiImpl.LogicToPixel( Size( 2 * ROADMAP_INDENT_X, 0 ), MAP_APPFONT ).Width(); - m_aItemSizePixel = aLabelSize; - } - - //===================================================================== - //= Roadmap - //===================================================================== - //--------------------------------------------------------------------- - ORoadmap::ORoadmap( Window* _pParent, const ResId& _rId ) - :Control( _pParent, _rId ) - ,m_pImpl( new RoadmapImpl( *this ) ) - { - implInit(); - } - - //--------------------------------------------------------------------- - ORoadmap::ORoadmap( Window* _pParent, WinBits _nWinStyle ) - :Control( _pParent, _nWinStyle ) - ,m_pImpl( new RoadmapImpl( *this ) ) - - { - implInit(); - } - - //--------------------------------------------------------------------- - void ORoadmap::implInit() - { - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - Color aTextColor = rStyleSettings.GetFieldTextColor(); - Font aFont = GetFont( ); - aFont.SetColor( aTextColor ); - aFont.SetWeight( WEIGHT_BOLD ); - aFont.SetUnderline( UNDERLINE_SINGLE ); - SetFont( aFont ); - SetBackground( Wallpaper( rStyleSettings.GetFieldColor() ) ); - m_pImpl->InCompleteHyperLabel = NULL; - m_pImpl->setCurItemID(-1 ); - m_pImpl->setComplete( sal_True ); - - // Roadmap control should be reachable as one unit with a Tab key - // the next Tab key should spring out of the control. - // To reach it the control itself should get focus and set it - // on entries. The entries themself should not be reachable with - // the Tab key directly. So each entry should have WB_NOTABSTOP. - // - // In other words the creator should create the control with the following - // flags: - // SetStyle( ( GetStyle() | WB_TABSTOP ) & ~WB_DIALOGCONTROL ); - -// TODO: if somebody sets a new font from outside (OutputDevice::SetFont), we would have to react -// on this with calculating a new bold font. -// Unfortunately, the OutputDevice does not offer a notify mechanism for a changed font. -// So settings the font from outside is simply a forbidded scenario at the moment - EnableMapMode( sal_False ); - } - - //--------------------------------------------------------------------- - ORoadmap::~ORoadmap( ) - { - HL_Vector aItemsCopy = m_pImpl->getHyperLabels(); - m_pImpl->getHyperLabels().clear(); - for ( HL_Vector::iterator i = aItemsCopy.begin(); i< aItemsCopy.end(); ++i ) - { - delete *i; - } - if ( ! m_pImpl->isComplete() ) - delete m_pImpl->InCompleteHyperLabel; - delete m_pImpl; - m_pImpl = NULL; - } - - - RoadmapTypes::ItemId ORoadmap::GetCurrentRoadmapItemID() const - { - return m_pImpl->getCurItemID(); - } - - - RoadmapItem* ORoadmap::GetPreviousHyperLabel( ItemIndex _Index) - { - RoadmapItem* pOldItem = NULL; - if ( _Index > 0 ) - pOldItem = m_pImpl->getHyperLabels().at( _Index - 1 ); - return pOldItem; - } - - - //--------------------------------------------------------------------- - - RoadmapItem* ORoadmap::InsertHyperLabel( ItemIndex _Index, const ::rtl::OUString& _sLabel, ItemId _RMID, sal_Bool _bEnabled) - { - if ( m_pImpl->getItemCount() == 0 ) - m_pImpl->initItemSize(); - - RoadmapItem* pItem = NULL; - RoadmapItem* pOldItem = GetPreviousHyperLabel( _Index ); - - pItem = new RoadmapItem( *this, m_pImpl->getItemSize() ); - if ( _RMID != RMINCOMPLETE ) - { - pItem->SetInteractive( m_pImpl->isInteractive() ); - m_pImpl->insertHyperLabel( _Index, pItem ); - } - else - { - pItem->SetInteractive( sal_False ); - } - pItem->SetPosition( pOldItem ); - pItem->Update( _Index, _sLabel ); - pItem->SetClickHdl(LINK( this, ORoadmap, ImplClickHdl ) ); - pItem->SetID( _RMID ); - pItem->SetIndex( _Index ); - if (!_bEnabled) - pItem->Enable( _bEnabled ); - return pItem; - } - - //--------------------------------------------------------------------- - void ORoadmap::SetRoadmapBitmap( const BitmapEx& _rBmp, sal_Bool _bInvalidate ) - { - m_pImpl->setPicture( _rBmp ); - if ( _bInvalidate ) - Invalidate( ); - } - - //--------------------------------------------------------------------- - const BitmapEx& ORoadmap::GetRoadmapBitmap( ) const - { - return m_pImpl->getPicture( ); - } - - //--------------------------------------------------------------------- - void ORoadmap::SetRoadmapInteractive( sal_Bool _bInteractive ) - { - m_pImpl->setInteractive( _bInteractive ); - - const HL_Vector& rItems = m_pImpl->getHyperLabels(); - for ( HL_Vector::const_iterator i = rItems.begin(); - i < rItems.end(); - ++i - ) - { - (*i)->SetInteractive( _bInteractive ); - } - } - - //--------------------------------------------------------------------- - sal_Bool ORoadmap::IsRoadmapInteractive() - { - return m_pImpl->isInteractive(); - } - - //--------------------------------------------------------------------- - void ORoadmap::SetRoadmapComplete( sal_Bool _bComplete ) - { - sal_Bool bWasComplete = m_pImpl->isComplete(); - m_pImpl->setComplete( _bComplete ); - if ( _bComplete ) - { - if ( m_pImpl->InCompleteHyperLabel != NULL) - { - delete m_pImpl->InCompleteHyperLabel; - m_pImpl->InCompleteHyperLabel = NULL; - } - } - else if ( bWasComplete ) - m_pImpl->InCompleteHyperLabel = InsertHyperLabel( m_pImpl->getItemCount(), ::String::CreateFromAscii( "..." ), RMINCOMPLETE ); - } - - //--------------------------------------------------------------------- - void ORoadmap::UpdatefollowingHyperLabels( ItemIndex _nIndex ) - { - const HL_Vector& rItems = m_pImpl->getHyperLabels(); - if ( _nIndex < (ItemIndex)rItems.size() ) - { - RoadmapItem* pItem = NULL; - for ( HL_Vector::const_iterator i = rItems.begin() + _nIndex; - i< rItems.end(); - ++i, ++_nIndex - ) - { - pItem = *i; - - pItem->SetIndex( _nIndex ); - pItem->SetPosition( GetPreviousHyperLabel( _nIndex ) ); - } - } - if ( ! m_pImpl->isComplete() ) - { - RoadmapItem* pOldItem = GetPreviousHyperLabel( m_pImpl->getItemCount() ); - m_pImpl->InCompleteHyperLabel->SetPosition( pOldItem ); - m_pImpl->InCompleteHyperLabel->Update( m_pImpl->getItemCount(), ::String::CreateFromAscii("...") ); - } - } - - //--------------------------------------------------------------------- - void ORoadmap::ReplaceRoadmapItem( ItemIndex _Index, const ::rtl::OUString& _RoadmapItem, ItemId _RMID, sal_Bool _bEnabled ) - { - RoadmapItem* pItem = GetByIndex( _Index); - if ( pItem != NULL ) - { - pItem->Update( _Index, _RoadmapItem ); - pItem->SetID( _RMID ); - pItem->Enable( _bEnabled ); - } - } - - //--------------------------------------------------------------------- - RoadmapTypes::ItemIndex ORoadmap::GetItemCount() const - { - return m_pImpl->getItemCount(); - } - - //--------------------------------------------------------------------- - RoadmapTypes::ItemId ORoadmap::GetItemID( ItemIndex _nIndex ) const - { - const RoadmapItem* pHyperLabel = GetByIndex( _nIndex ); - if ( pHyperLabel ) - return pHyperLabel->GetID(); - return -1; - } - - //--------------------------------------------------------------------- - RoadmapTypes::ItemIndex ORoadmap::GetItemIndex( ItemId _nID ) const - { - ItemId nLocID = 0; - const HL_Vector& rItems = m_pImpl->getHyperLabels(); - for ( HL_Vector::const_iterator i = rItems.begin(); - i < rItems.end(); - ++i - ) - { - nLocID = (*i)->GetID(); - if ( nLocID == _nID ) - return ItemIndex( i - rItems.begin() ); - } - return -1; - } - - //--------------------------------------------------------------------- - void ORoadmap::InsertRoadmapItem( ItemIndex _Index, const ::rtl::OUString& _RoadmapItem, ItemId _nUniqueId, sal_Bool _bEnabled ) - { - InsertHyperLabel( _Index, _RoadmapItem, _nUniqueId, _bEnabled ); - // Todo: YPos is superfluous, if items are always appended - UpdatefollowingHyperLabels( _Index + 1 ); - } - - //--------------------------------------------------------------------- - void ORoadmap::DeleteRoadmapItem( ItemIndex _Index ) - { - if ( m_pImpl->getItemCount() > 0 && ( _Index > -1) && ( _Index < m_pImpl->getItemCount() ) ) - { - m_pImpl->removeHyperLabel( _Index ); - UpdatefollowingHyperLabels( _Index ); - } - } - - //--------------------------------------------------------------------- - sal_Bool ORoadmap::IsRoadmapComplete( ) const - { - return m_pImpl->isComplete(); - } - - //--------------------------------------------------------------------- - sal_Bool ORoadmap::IsRoadmapItemEnabled( ItemId _nItemId, ItemIndex _nStartIndex ) const - { - const RoadmapItem* _pLabelItem = GetByID( _nItemId, _nStartIndex ); - return _pLabelItem ? _pLabelItem->IsEnabled() : sal_False; - } - - //--------------------------------------------------------------------- - void ORoadmap::EnableRoadmapItem( ItemId _nItemId, sal_Bool _bEnable, ItemIndex _nStartIndex ) - { - RoadmapItem* pItem = GetByID( _nItemId, _nStartIndex ); - if ( pItem != NULL ) - pItem->Enable( _bEnable ); - } - - //--------------------------------------------------------------------- - void ORoadmap::ChangeRoadmapItemLabel( ItemId _nID, const ::rtl::OUString& _sLabel, ItemIndex _nStartIndex ) - { - RoadmapItem* pItem = GetByID( _nID, _nStartIndex ); - if ( pItem != NULL ) - { - pItem->Update( pItem->GetIndex(), _sLabel ); - - const HL_Vector& rItems = m_pImpl->getHyperLabels(); - for ( HL_Vector::const_iterator i = rItems.begin() + _nStartIndex; - i < rItems.end(); - ++i - ) - { - (*i)->SetPosition( GetPreviousHyperLabel( i - rItems.begin() ) ); - } - } - } - - //--------------------------------------------------------------------- - - ::rtl::OUString ORoadmap::GetRoadmapItemLabel( ItemId _nID, ItemIndex _nStartIndex ) - { - RoadmapItem* pItem = GetByID( _nID, _nStartIndex ); - if ( pItem != NULL ) - return pItem->GetLabel(); - else - return ::rtl::OUString(); - } - - //--------------------------------------------------------------------- - void ORoadmap::ChangeRoadmapItemID( ItemId _nID, ItemId _NewID, ItemIndex _nStartIndex ) - { - RoadmapItem* pItem = GetByID( _nID, _nStartIndex ); - if ( pItem != NULL ) - pItem->SetID( _NewID ); - } - - //--------------------------------------------------------------------- - RoadmapItem* ORoadmap::GetByID( ItemId _nID, ItemIndex _nStartIndex) - { - ItemId nLocID = 0; - const HL_Vector& rItems = m_pImpl->getHyperLabels(); - for ( HL_Vector::const_iterator i = rItems.begin() + _nStartIndex; - i < rItems.end(); - ++i - ) - { - nLocID = (*i)->GetID(); - if ( nLocID == _nID ) - return *i; - } - return NULL; - } - - //--------------------------------------------------------------------- - const RoadmapItem* ORoadmap::GetByID( ItemId _nID, ItemIndex _nStartIndex ) const - { - return const_cast< ORoadmap* >( this )->GetByID( _nID, _nStartIndex ); - } - - //--------------------------------------------------------------------- - RoadmapItem* ORoadmap::GetByIndex( ItemIndex _nItemIndex) - { - const HL_Vector& rItems = m_pImpl->getHyperLabels(); - if ( ( _nItemIndex > -1 ) && ( _nItemIndex < (ItemIndex)rItems.size() ) ) - { - return rItems.at( _nItemIndex ); - } - return NULL; - } - - //--------------------------------------------------------------------- - const RoadmapItem* ORoadmap::GetByIndex( ItemIndex _nItemIndex ) const - { - return const_cast< ORoadmap* >( this )->GetByIndex( _nItemIndex ); - } - - //--------------------------------------------------------------------- - RoadmapTypes::ItemId ORoadmap::GetNextAvailableItemId( ItemIndex _nNewIndex ) - { - RoadmapItem* pItem = NULL; - - ItemIndex searchIndex = ++_nNewIndex; - while ( searchIndex < m_pImpl->getItemCount() ) - { - pItem = GetByIndex( searchIndex ); - if ( pItem->IsEnabled() ) - return pItem->GetID( ); - - ++searchIndex; - } - return -1; - } - - //--------------------------------------------------------------------- - RoadmapTypes::ItemId ORoadmap::GetPreviousAvailableItemId( ItemIndex _nNewIndex ) - { - RoadmapItem* pItem = NULL; - ItemIndex searchIndex = --_nNewIndex; - while ( searchIndex > -1 ) - { - pItem = GetByIndex( searchIndex ); - if ( pItem->IsEnabled() ) - return pItem->GetID( ); - - searchIndex--; - } - return -1; - } - - //--------------------------------------------------------------------- - void ORoadmap::DeselectOldRoadmapItems() - { - const HL_Vector& rItems = m_pImpl->getHyperLabels(); - for ( HL_Vector::const_iterator i = rItems.begin(); - i < rItems.end(); - ++i - ) - { - (*i)->ToggleBackgroundColor( COL_TRANSPARENT ); - } - } - - //--------------------------------------------------------------------- - void ORoadmap::SetItemSelectHdl( const Link& _rHdl ) - { - m_pImpl->setSelectHdl( _rHdl ); - } - - //--------------------------------------------------------------------- - Link ORoadmap::GetItemSelectHdl( ) const - { - return m_pImpl->getSelectHdl(); - } - - //--------------------------------------------------------------------- - void ORoadmap::Select() - { - GetItemSelectHdl().Call( this ); - CallEventListeners( VCLEVENT_ROADMAP_ITEMSELECTED ); - } - - //--------------------------------------------------------------------- - void ORoadmap::GetFocus() - { - RoadmapItem* pCurHyperLabel = GetByID( GetCurrentRoadmapItemID() ); - if ( pCurHyperLabel != NULL ) - pCurHyperLabel->GrabFocus(); - } - - //--------------------------------------------------------------------- - sal_Bool ORoadmap::SelectRoadmapItemByID( ItemId _nNewID ) - { - DeselectOldRoadmapItems(); - RoadmapItem* pItem = GetByID( _nNewID ); - if ( pItem != NULL ) - { - if ( pItem->IsEnabled() ) - { - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - pItem->ToggleBackgroundColor( rStyleSettings.GetHighlightColor() ); //HighlightColor - - pItem->GrabFocus(); - m_pImpl->setCurItemID(_nNewID); - - Select(); - return sal_True; - } - } - return sal_False; - } - - //--------------------------------------------------------------------- - void ORoadmap::Paint( const Rectangle& _rRect ) - { - Control::Paint( _rRect ); - - - // draw the bitmap - if ( !!m_pImpl->getPicture() ) - { - Size aBitmapSize = m_pImpl->getPicture().GetSizePixel(); - Size aMySize = GetOutputSizePixel(); - - Point aBitmapPos( aMySize.Width() - aBitmapSize.Width(), aMySize.Height() - aBitmapSize.Height() ); - - // draw it - DrawBitmapEx( aBitmapPos, m_pImpl->getPicture() ); - } - - //................................................................. - // draw the headline - DrawHeadline(); - } - - //--------------------------------------------------------------------- - void ORoadmap::DrawHeadline() - { - Point aTextPos = LogicToPixel( Point( ROADMAP_INDENT_X, 8 ), MAP_APPFONT ); - - Size aOutputSize( GetOutputSizePixel() ); - - // draw it - DrawText( Rectangle( aTextPos, aOutputSize ), GetText(), TEXT_DRAW_LEFT | TEXT_DRAW_TOP | TEXT_DRAW_MULTILINE | TEXT_DRAW_WORDBREAK ); - DrawTextLine( aTextPos, aOutputSize.Width(), STRIKEOUT_NONE, UNDERLINE_SINGLE, UNDERLINE_NONE, sal_False ); - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - SetLineColor( rStyleSettings.GetFieldTextColor()); - SetTextColor(rStyleSettings.GetFieldTextColor()); - } - - //--------------------------------------------------------------------- - RoadmapItem* ORoadmap::GetByPointer(Window* pWindow) - { - const HL_Vector& rItems = m_pImpl->getHyperLabels(); - for ( HL_Vector::const_iterator i = rItems.begin(); - i < rItems.end(); - ++i - ) - { - if ( (*i)->Contains( pWindow ) ) - return *i; - } - return NULL; - } - - //--------------------------------------------------------------------- - long ORoadmap::PreNotify( NotifyEvent& _rNEvt ) - { - // capture KeyEvents for taskpane cycling - if ( _rNEvt.GetType() == EVENT_KEYINPUT ) - { - Window* pWindow = _rNEvt.GetWindow(); - RoadmapItem* pItem = GetByPointer( pWindow ); - if ( pItem != NULL ) - { - sal_Int16 nKeyCode = _rNEvt.GetKeyEvent()->GetKeyCode().GetCode(); - switch( nKeyCode ) - { - case KEY_UP: - { // Note: Performancewise this is not optimal, because we search for an ID in the labels - // and afterwards we search again for a label with the appropriate ID -> - // unnecessarily we search twice!!! - ItemId nPrevItemID = GetPreviousAvailableItemId( pItem->GetIndex() ); - if ( nPrevItemID != -1 ) - return SelectRoadmapItemByID( nPrevItemID ); - } - break; - case KEY_DOWN: - { - ItemId nNextItemID = GetNextAvailableItemId( pItem->GetIndex() ); - if ( nNextItemID != -1 ) - return SelectRoadmapItemByID( nNextItemID ); - } - break; - case KEY_SPACE: - return SelectRoadmapItemByID( pItem->GetID() ); - } - } - } - return Window::PreNotify( _rNEvt ); - } - - //--------------------------------------------------------------------- - IMPL_LINK(ORoadmap, ImplClickHdl, HyperLabel*, _CurHyperLabel) - { - return SelectRoadmapItemByID( _CurHyperLabel->GetID() ); - } - - - - //--------------------------------------------------------------------- - void ORoadmap::DataChanged( const DataChangedEvent& rDCEvt ) - { - if ((( rDCEvt.GetType() == DATACHANGED_SETTINGS ) || - ( rDCEvt.GetType() == DATACHANGED_DISPLAY )) && - ( rDCEvt.GetFlags() & SETTINGS_STYLE )) - { - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - SetBackground( Wallpaper( rStyleSettings.GetFieldColor() ) ); - Color aTextColor = rStyleSettings.GetFieldTextColor(); - Font aFont = GetFont(); - aFont.SetColor( aTextColor ); - SetFont( aFont ); - RoadmapTypes::ItemId curItemID = GetCurrentRoadmapItemID(); - RoadmapItem* pLabelItem = GetByID( curItemID ); - pLabelItem->ToggleBackgroundColor(rStyleSettings.GetHighlightColor()); - Invalidate(); - } - } - - - //--------------------------------------------------------------------- - RoadmapItem::RoadmapItem( ORoadmap& _rParent, const Size& _rItemPlayground ) - :m_aItemPlayground( _rItemPlayground ) - { - mpID = new IDLabel( &_rParent, WB_WORDBREAK ); - mpID->SetTextColor( mpID->GetSettings().GetStyleSettings().GetFieldTextColor( ) ); - mpID->Show(); - mpDescription = new HyperLabel( &_rParent, WB_NOTABSTOP | WB_WORDBREAK ); - mpDescription->Show(); - } - - //--------------------------------------------------------------------- - bool RoadmapItem::Contains( const Window* _pWindow ) const - { - return ( mpID == _pWindow ) || ( mpDescription == _pWindow ); - } - - //--------------------------------------------------------------------- - void RoadmapItem::GrabFocus() - { - if ( mpDescription ) - mpDescription->GrabFocus(); - } - - //--------------------------------------------------------------------- - void RoadmapItem::SetInteractive( sal_Bool _bInteractive ) - { - if ( mpDescription ) - mpDescription->SetInteractive(_bInteractive); - } - - //--------------------------------------------------------------------- - void RoadmapItem::SetID( sal_Int16 _ID ) - { - if ( mpDescription ) - mpDescription->SetID(_ID); - } - - //--------------------------------------------------------------------- - sal_Int16 RoadmapItem::GetID() const - { - return mpDescription ? mpDescription->GetID() : sal_Int16(-1); - } - - //--------------------------------------------------------------------- - void RoadmapItem::ImplUpdateIndex( const ItemIndex _nIndex ) - { - if ( mpDescription ) - mpDescription->SetIndex( _nIndex ); - - if ( mpID ) - { - ::rtl::OUString aIDText = ::rtl::OUString::valueOf( (sal_Int32)( _nIndex + 1 ) ) + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "." )); - mpID->SetText( aIDText ); - } - - // update the geometry of both controls - ImplUpdatePosSize(); - } - - //--------------------------------------------------------------------- - void RoadmapItem::SetIndex( ItemIndex _Index ) - { - ImplUpdateIndex( _Index ); - } - - //--------------------------------------------------------------------- - RoadmapTypes::ItemIndex RoadmapItem::GetIndex() const - { - return mpDescription ? mpDescription->GetIndex() : ItemIndex(-1); - } - - //--------------------------------------------------------------------- - void RoadmapItem::SetLabel( const ::rtl::OUString& _rText ) - { - if ( mpDescription ) - mpDescription->SetText(_rText); - } - - //--------------------------------------------------------------------- - ::rtl::OUString RoadmapItem::GetLabel( ) - { - return mpDescription ? mpDescription->GetText() : String(); - } - - //--------------------------------------------------------------------- - void RoadmapItem::SetPosition( RoadmapItem* _pOldItem ) - { - Point aIDPos; - if ( _pOldItem == NULL ) - { - aIDPos = mpID->LogicToPixel( Point( ROADMAP_INDENT_X, ROADMAP_INDENT_Y ), MAP_APPFONT ); - } - else - { - Size aOldSize = _pOldItem->GetDescriptionHyperLabel()->GetSizePixel(); - - aIDPos = _pOldItem->mpID->GetPosPixel(); - aIDPos.Y() += aOldSize.Height(); - aIDPos.Y() += mpID->GetParent()->LogicToPixel( Size( 0, ROADMAP_ITEM_DISTANCE_Y ) ).Height(); - } - mpID->SetPosPixel( aIDPos ); - - sal_Int32 nDescPos = aIDPos.X() + mpID->GetSizePixel().Width(); - mpDescription->SetPosPixel( Point( nDescPos, aIDPos.Y() ) ); - } - - //--------------------------------------------------------------------- - void RoadmapItem::SetZOrder( RoadmapItem* pRefRoadmapHyperLabel, sal_uInt16 nFlags ) - { - if (pRefRoadmapHyperLabel == NULL) - mpDescription->SetZOrder( NULL, nFlags); //WINDOW_ZORDER_FIRST ); - else - mpDescription->SetZOrder( pRefRoadmapHyperLabel->mpDescription, nFlags); //, WINDOW_ZORDER_BEHIND ); - } - - //--------------------------------------------------------------------- - void RoadmapItem::Enable( sal_Bool _bEnable) - { - mpID->Enable(_bEnable); - mpDescription->Enable(_bEnable); - } - - //--------------------------------------------------------------------- - sal_Bool RoadmapItem::IsEnabled() const - { - return mpID->IsEnabled(); - } - - //--------------------------------------------------------------------- - void RoadmapItem::ToggleBackgroundColor( const Color& _rGBColor ) - { - if (_rGBColor == COL_TRANSPARENT) - { - mpID->SetTextColor( mpID->GetSettings().GetStyleSettings().GetFieldTextColor( ) ); - mpID->SetControlBackground( COL_TRANSPARENT ); - } - else - { - mpID->SetControlBackground( mpID->GetSettings().GetStyleSettings().GetHighlightColor() ); - mpID->SetTextColor( mpID->GetSettings().GetStyleSettings().GetHighlightTextColor( ) ); - } - mpDescription->ToggleBackgroundColor(_rGBColor); - } - - //--------------------------------------------------------------------- - void RoadmapItem::ImplUpdatePosSize() - { - // calculate widths - long nIDWidth = mpID->GetTextWidth( mpID->GetText() ); - long nMaxIDWidth = mpID->GetTextWidth( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "100." )) ); - nIDWidth = ::std::min( nIDWidth, nMaxIDWidth ); - - // check how many space the description would need - Size aDescriptionSize = mpDescription->CalcMinimumSize( m_aItemPlayground.Width() - nIDWidth ); - - // position and size both controls - Size aIDSize( nIDWidth, aDescriptionSize.Height() ); - mpID->SetSizePixel( aIDSize ); - - Point aIDPos = mpID->GetPosPixel(); - mpDescription->SetPosPixel( Point( aIDPos.X() + nIDWidth, aIDPos.Y() ) ); - mpDescription->SetSizePixel( aDescriptionSize ); - } - - //--------------------------------------------------------------------- - void RoadmapItem::Update( ItemIndex _RMIndex, const ::rtl::OUString& _rText ) - { - // update description label - mpDescription->SetLabel( _rText ); - - // update the index in both controls, which triggers updating the geometry of both - ImplUpdateIndex( _RMIndex ); - } - - //--------------------------------------------------------------------- - RoadmapItem::~RoadmapItem( ) - { - { - ::std::auto_ptr<Control> aTemp(mpID); - mpID = NULL; - } - { - ::std::auto_ptr<Control> aTemp(mpDescription); - mpDescription = NULL; - } - } - - //--------------------------------------------------------------------- - void RoadmapItem::SetClickHdl( const Link& rLink ) - { - if ( mpDescription ) - mpDescription->SetClickHdl( rLink); - } - - //--------------------------------------------------------------------- - const Link& RoadmapItem::GetClickHdl( ) const - { - return mpDescription->GetClickHdl(); - } - - //--------------------------------------------------------------------- - IDLabel::IDLabel( Window* _pParent, WinBits _nWinStyle ) - :FixedText( _pParent, _nWinStyle ) - { - - } - - //--------------------------------------------------------------------- - IDLabel::~IDLabel( ) - { - } - - //--------------------------------------------------------------------- - void IDLabel::DataChanged( const DataChangedEvent& rDCEvt ) - { - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - FixedText::DataChanged( rDCEvt ); - if ((( rDCEvt.GetType() == DATACHANGED_SETTINGS ) || - ( rDCEvt.GetType() == DATACHANGED_DISPLAY )) && - ( rDCEvt.GetFlags() & SETTINGS_STYLE )) - { - const Color& rGBColor = GetControlBackground(); - if (rGBColor == COL_TRANSPARENT) - SetTextColor( rStyleSettings.GetFieldTextColor( ) ); - else - { - SetControlBackground(rStyleSettings.GetHighlightColor()); - SetTextColor( rStyleSettings.GetHighlightTextColor( ) ); - } - Invalidate(); - } - } - - - - -//......................................................................... -} // namespace svt -//......................................................................... - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |