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 #include <svtools/roadmap.hxx> 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski #ifndef _STRING_HXX 29*b1cdbd2cSJim Jagielski #define _STRING_HXX 30*b1cdbd2cSJim Jagielski #endif 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski #include <vector> 33*b1cdbd2cSJim Jagielski #include <algorithm> 34*b1cdbd2cSJim Jagielski #include <vcl/bitmap.hxx> 35*b1cdbd2cSJim Jagielski #include <tools/color.hxx> 36*b1cdbd2cSJim Jagielski #include <memory> 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski #define ROADMAP_INDENT_X 4 39*b1cdbd2cSJim Jagielski #define ROADMAP_INDENT_Y 27 40*b1cdbd2cSJim Jagielski #define ROADMAP_ITEM_DISTANCE_Y 6 41*b1cdbd2cSJim Jagielski #define RMINCOMPLETE -1 42*b1cdbd2cSJim Jagielski #define NADDITEM 1 43*b1cdbd2cSJim Jagielski #define INCOMPLETELABEL ::String::CreateFromAscii("...") // TODO: Cast to String 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski //......................................................................... 46*b1cdbd2cSJim Jagielski namespace svt 47*b1cdbd2cSJim Jagielski { 48*b1cdbd2cSJim Jagielski //......................................................................... 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski typedef std::vector< ::rtl::OUString > S_Vector; 51*b1cdbd2cSJim Jagielski typedef std::vector< RoadmapItem* > HL_Vector; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski //===================================================================== 54*b1cdbd2cSJim Jagielski //= ColorChanger 55*b1cdbd2cSJim Jagielski //===================================================================== 56*b1cdbd2cSJim Jagielski class IDLabel : public FixedText 57*b1cdbd2cSJim Jagielski { 58*b1cdbd2cSJim Jagielski public: 59*b1cdbd2cSJim Jagielski IDLabel( Window* _pParent, WinBits _nWinStyle = 0 ); 60*b1cdbd2cSJim Jagielski ~IDLabel( ); 61*b1cdbd2cSJim Jagielski virtual void DataChanged( const DataChangedEvent& rDCEvt ); 62*b1cdbd2cSJim Jagielski }; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski //===================================================================== 65*b1cdbd2cSJim Jagielski //= ColorChanger 66*b1cdbd2cSJim Jagielski //===================================================================== 67*b1cdbd2cSJim Jagielski class ColorChanger 68*b1cdbd2cSJim Jagielski { 69*b1cdbd2cSJim Jagielski protected: 70*b1cdbd2cSJim Jagielski OutputDevice* m_pDev; 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski public: ColorChanger(OutputDevice * _pDev,const Color & _rNewLineColor,const Color & _rNewFillColor)73*b1cdbd2cSJim Jagielski ColorChanger( OutputDevice* _pDev, const Color& _rNewLineColor, const Color& _rNewFillColor ) 74*b1cdbd2cSJim Jagielski :m_pDev( _pDev ) 75*b1cdbd2cSJim Jagielski { 76*b1cdbd2cSJim Jagielski m_pDev->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR ); 77*b1cdbd2cSJim Jagielski m_pDev->SetLineColor( _rNewLineColor ); 78*b1cdbd2cSJim Jagielski m_pDev->SetFillColor( _rNewFillColor ); 79*b1cdbd2cSJim Jagielski } 80*b1cdbd2cSJim Jagielski ~ColorChanger()81*b1cdbd2cSJim Jagielski ~ColorChanger() 82*b1cdbd2cSJim Jagielski { 83*b1cdbd2cSJim Jagielski m_pDev->Pop(); 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski }; 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski //===================================================================== 88*b1cdbd2cSJim Jagielski //= RoadmapItem 89*b1cdbd2cSJim Jagielski //===================================================================== 90*b1cdbd2cSJim Jagielski class RoadmapItem : public RoadmapTypes 91*b1cdbd2cSJim Jagielski { 92*b1cdbd2cSJim Jagielski private: 93*b1cdbd2cSJim Jagielski IDLabel* mpID; 94*b1cdbd2cSJim Jagielski HyperLabel* mpDescription; 95*b1cdbd2cSJim Jagielski const Size m_aItemPlayground; 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski public: 98*b1cdbd2cSJim Jagielski RoadmapItem( ORoadmap& _rParent, const Size& _rItemPlayground ); 99*b1cdbd2cSJim Jagielski ~RoadmapItem( ); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski void SetID( sal_Int16 _ID ); 102*b1cdbd2cSJim Jagielski sal_Int16 GetID() const; 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski void SetIndex( ItemIndex _Index ); 105*b1cdbd2cSJim Jagielski ItemIndex GetIndex() const; 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski void SetLabel( const ::rtl::OUString& _rText ); 108*b1cdbd2cSJim Jagielski ::rtl::OUString GetLabel( ); 109*b1cdbd2cSJim Jagielski 110*b1cdbd2cSJim Jagielski void Update( ItemIndex _RMIndex, const ::rtl::OUString& _rText ); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski void SetPosition( RoadmapItem* OldHyperLabel ); 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski void ToggleBackgroundColor( const Color& _rGBColor ); 115*b1cdbd2cSJim Jagielski void SetInteractive( sal_Bool _bInteractive ); 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski void SetClickHdl( const Link& rLink ); 118*b1cdbd2cSJim Jagielski const Link& GetClickHdl() const; 119*b1cdbd2cSJim Jagielski void SetZOrder( RoadmapItem* pRefRoadmapHyperLabel, sal_uInt16 nFlags ); 120*b1cdbd2cSJim Jagielski void Enable( sal_Bool bEnable = sal_True); 121*b1cdbd2cSJim Jagielski sal_Bool IsEnabled() const; 122*b1cdbd2cSJim Jagielski void GrabFocus(); 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski bool Contains( const Window* _pWindow ) const; 125*b1cdbd2cSJim Jagielski GetDescriptionHyperLabel() const126*b1cdbd2cSJim Jagielski HyperLabel* GetDescriptionHyperLabel() const { return mpDescription; } 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski private: 129*b1cdbd2cSJim Jagielski void ImplUpdateIndex( const ItemIndex _nIndex ); 130*b1cdbd2cSJim Jagielski void ImplUpdatePosSize(); 131*b1cdbd2cSJim Jagielski }; 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski //===================================================================== 134*b1cdbd2cSJim Jagielski //= RoadmapImpl 135*b1cdbd2cSJim Jagielski //===================================================================== 136*b1cdbd2cSJim Jagielski class RoadmapImpl : public RoadmapTypes 137*b1cdbd2cSJim Jagielski { 138*b1cdbd2cSJim Jagielski protected: 139*b1cdbd2cSJim Jagielski const ORoadmap& m_rAntiImpl; 140*b1cdbd2cSJim Jagielski Link m_aSelectHdl; 141*b1cdbd2cSJim Jagielski BitmapEx m_aPicture; 142*b1cdbd2cSJim Jagielski HL_Vector m_aRoadmapSteps; 143*b1cdbd2cSJim Jagielski ItemId m_iCurItemID; 144*b1cdbd2cSJim Jagielski sal_Bool m_bInteractive; 145*b1cdbd2cSJim Jagielski sal_Bool m_bComplete; 146*b1cdbd2cSJim Jagielski Size m_aItemSizePixel; 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski public: RoadmapImpl(const ORoadmap & _rAntiImpl)149*b1cdbd2cSJim Jagielski RoadmapImpl( const ORoadmap& _rAntiImpl ) 150*b1cdbd2cSJim Jagielski :m_rAntiImpl( _rAntiImpl ) 151*b1cdbd2cSJim Jagielski ,m_iCurItemID( -1 ) 152*b1cdbd2cSJim Jagielski ,m_bInteractive( sal_True ) 153*b1cdbd2cSJim Jagielski ,m_bComplete( sal_True ) 154*b1cdbd2cSJim Jagielski { 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski RoadmapItem* InCompleteHyperLabel; 158*b1cdbd2cSJim Jagielski addHyperLabel(RoadmapItem * _rRoadmapStep)159*b1cdbd2cSJim Jagielski void addHyperLabel( RoadmapItem* _rRoadmapStep ) { m_aRoadmapSteps.push_back(_rRoadmapStep); } 160*b1cdbd2cSJim Jagielski getHyperLabels()161*b1cdbd2cSJim Jagielski HL_Vector& getHyperLabels() { return m_aRoadmapSteps; } getHyperLabels() const162*b1cdbd2cSJim Jagielski const HL_Vector& getHyperLabels() const { return m_aRoadmapSteps; } 163*b1cdbd2cSJim Jagielski insertHyperLabel(ItemIndex _Index,RoadmapItem * _rRoadmapStep)164*b1cdbd2cSJim Jagielski void insertHyperLabel( ItemIndex _Index, RoadmapItem* _rRoadmapStep ) { m_aRoadmapSteps.insert( m_aRoadmapSteps.begin() + _Index, _rRoadmapStep ); } 165*b1cdbd2cSJim Jagielski getItemCount() const166*b1cdbd2cSJim Jagielski ItemIndex getItemCount() const { return m_aRoadmapSteps.size();} 167*b1cdbd2cSJim Jagielski setCurItemID(ItemId i)168*b1cdbd2cSJim Jagielski void setCurItemID( ItemId i ) {m_iCurItemID = i; } getCurItemID() const169*b1cdbd2cSJim Jagielski ItemId getCurItemID() const { return m_iCurItemID; } 170*b1cdbd2cSJim Jagielski setInteractive(const sal_Bool _bInteractive)171*b1cdbd2cSJim Jagielski void setInteractive(const sal_Bool _bInteractive) {m_bInteractive = _bInteractive; } isInteractive() const172*b1cdbd2cSJim Jagielski sal_Bool isInteractive() const { return m_bInteractive; }; 173*b1cdbd2cSJim Jagielski setComplete(const sal_Bool _bComplete)174*b1cdbd2cSJim Jagielski void setComplete(const sal_Bool _bComplete) {m_bComplete = _bComplete; } isComplete() const175*b1cdbd2cSJim Jagielski sal_Bool isComplete() const { return m_bComplete; }; 176*b1cdbd2cSJim Jagielski setPicture(const BitmapEx & _rPic)177*b1cdbd2cSJim Jagielski void setPicture( const BitmapEx& _rPic ) { m_aPicture = _rPic; } getPicture() const178*b1cdbd2cSJim Jagielski const BitmapEx& getPicture( ) const { return m_aPicture; } 179*b1cdbd2cSJim Jagielski setSelectHdl(const Link & _rHdl)180*b1cdbd2cSJim Jagielski void setSelectHdl( const Link& _rHdl ) { m_aSelectHdl = _rHdl; } getSelectHdl() const181*b1cdbd2cSJim Jagielski const Link& getSelectHdl( ) const { return m_aSelectHdl; } 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski void initItemSize(); getItemSize() const184*b1cdbd2cSJim Jagielski const Size& getItemSize() const { return m_aItemSizePixel; } 185*b1cdbd2cSJim Jagielski removeHyperLabel(ItemIndex _Index)186*b1cdbd2cSJim Jagielski void removeHyperLabel( ItemIndex _Index ) 187*b1cdbd2cSJim Jagielski { 188*b1cdbd2cSJim Jagielski if ( ( _Index > -1 ) && ( _Index < getItemCount() ) ) 189*b1cdbd2cSJim Jagielski { 190*b1cdbd2cSJim Jagielski delete m_aRoadmapSteps[_Index]; 191*b1cdbd2cSJim Jagielski m_aRoadmapSteps.erase( m_aRoadmapSteps.begin() + _Index); 192*b1cdbd2cSJim Jagielski } 193*b1cdbd2cSJim Jagielski } 194*b1cdbd2cSJim Jagielski }; 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski //===================================================================== 198*b1cdbd2cSJim Jagielski //= Roadmap 199*b1cdbd2cSJim Jagielski //===================================================================== 200*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- initItemSize()201*b1cdbd2cSJim Jagielski void RoadmapImpl::initItemSize() 202*b1cdbd2cSJim Jagielski { 203*b1cdbd2cSJim Jagielski Size aLabelSize( m_rAntiImpl.GetOutputSizePixel() ); 204*b1cdbd2cSJim Jagielski aLabelSize.Height() = m_rAntiImpl.LogicToPixel( Size( 0, LABELBASEMAPHEIGHT ), MAP_APPFONT ).Height(); 205*b1cdbd2cSJim Jagielski aLabelSize.Width() -= m_rAntiImpl.LogicToPixel( Size( 2 * ROADMAP_INDENT_X, 0 ), MAP_APPFONT ).Width(); 206*b1cdbd2cSJim Jagielski m_aItemSizePixel = aLabelSize; 207*b1cdbd2cSJim Jagielski } 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski //===================================================================== 210*b1cdbd2cSJim Jagielski //= Roadmap 211*b1cdbd2cSJim Jagielski //===================================================================== 212*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ORoadmap(Window * _pParent,const ResId & _rId)213*b1cdbd2cSJim Jagielski ORoadmap::ORoadmap( Window* _pParent, const ResId& _rId ) 214*b1cdbd2cSJim Jagielski :Control( _pParent, _rId ) 215*b1cdbd2cSJim Jagielski ,m_pImpl( new RoadmapImpl( *this ) ) 216*b1cdbd2cSJim Jagielski { 217*b1cdbd2cSJim Jagielski implInit(); 218*b1cdbd2cSJim Jagielski } 219*b1cdbd2cSJim Jagielski 220*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ORoadmap(Window * _pParent,WinBits _nWinStyle)221*b1cdbd2cSJim Jagielski ORoadmap::ORoadmap( Window* _pParent, WinBits _nWinStyle ) 222*b1cdbd2cSJim Jagielski :Control( _pParent, _nWinStyle ) 223*b1cdbd2cSJim Jagielski ,m_pImpl( new RoadmapImpl( *this ) ) 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski { 226*b1cdbd2cSJim Jagielski implInit(); 227*b1cdbd2cSJim Jagielski } 228*b1cdbd2cSJim Jagielski 229*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- implInit()230*b1cdbd2cSJim Jagielski void ORoadmap::implInit() 231*b1cdbd2cSJim Jagielski { 232*b1cdbd2cSJim Jagielski const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 233*b1cdbd2cSJim Jagielski Color aTextColor = rStyleSettings.GetFieldTextColor(); 234*b1cdbd2cSJim Jagielski Font aFont = GetFont( ); 235*b1cdbd2cSJim Jagielski aFont.SetColor( aTextColor ); 236*b1cdbd2cSJim Jagielski aFont.SetWeight( WEIGHT_BOLD ); 237*b1cdbd2cSJim Jagielski aFont.SetUnderline( UNDERLINE_SINGLE ); 238*b1cdbd2cSJim Jagielski SetFont( aFont ); 239*b1cdbd2cSJim Jagielski SetBackground( Wallpaper( rStyleSettings.GetFieldColor() ) ); 240*b1cdbd2cSJim Jagielski m_pImpl->InCompleteHyperLabel = NULL; 241*b1cdbd2cSJim Jagielski m_pImpl->setCurItemID(-1 ); 242*b1cdbd2cSJim Jagielski m_pImpl->setComplete( sal_True ); 243*b1cdbd2cSJim Jagielski 244*b1cdbd2cSJim Jagielski // Roadmap control should be reachable as one unit with a Tab key 245*b1cdbd2cSJim Jagielski // the next Tab key should spring out of the control. 246*b1cdbd2cSJim Jagielski // To reach it the control itself should get focus and set it 247*b1cdbd2cSJim Jagielski // on entries. The entries themself should not be reachable with 248*b1cdbd2cSJim Jagielski // the Tab key directly. So each entry should have WB_NOTABSTOP. 249*b1cdbd2cSJim Jagielski // 250*b1cdbd2cSJim Jagielski // In other words the creator should create the control with the following 251*b1cdbd2cSJim Jagielski // flags: 252*b1cdbd2cSJim Jagielski // SetStyle( ( GetStyle() | WB_TABSTOP ) & ~WB_DIALOGCONTROL ); 253*b1cdbd2cSJim Jagielski 254*b1cdbd2cSJim Jagielski // TODO: if somebody sets a new font from outside (OutputDevice::SetFont), we would have to react 255*b1cdbd2cSJim Jagielski // on this with calculating a new bold font. 256*b1cdbd2cSJim Jagielski // Unfortunately, the OutputDevice does not offer a notify mechanism for a changed font. 257*b1cdbd2cSJim Jagielski // So settings the font from outside is simply a forbidded scenario at the moment 258*b1cdbd2cSJim Jagielski EnableMapMode( sal_False ); 259*b1cdbd2cSJim Jagielski } 260*b1cdbd2cSJim Jagielski 261*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ~ORoadmap()262*b1cdbd2cSJim Jagielski ORoadmap::~ORoadmap( ) 263*b1cdbd2cSJim Jagielski { 264*b1cdbd2cSJim Jagielski HL_Vector aItemsCopy = m_pImpl->getHyperLabels(); 265*b1cdbd2cSJim Jagielski m_pImpl->getHyperLabels().clear(); 266*b1cdbd2cSJim Jagielski for ( HL_Vector::iterator i = aItemsCopy.begin(); i< aItemsCopy.end(); ++i ) 267*b1cdbd2cSJim Jagielski { 268*b1cdbd2cSJim Jagielski delete *i; 269*b1cdbd2cSJim Jagielski } 270*b1cdbd2cSJim Jagielski if ( ! m_pImpl->isComplete() ) 271*b1cdbd2cSJim Jagielski delete m_pImpl->InCompleteHyperLabel; 272*b1cdbd2cSJim Jagielski delete m_pImpl; 273*b1cdbd2cSJim Jagielski m_pImpl = NULL; 274*b1cdbd2cSJim Jagielski } 275*b1cdbd2cSJim Jagielski 276*b1cdbd2cSJim Jagielski GetCurrentRoadmapItemID() const277*b1cdbd2cSJim Jagielski RoadmapTypes::ItemId ORoadmap::GetCurrentRoadmapItemID() const 278*b1cdbd2cSJim Jagielski { 279*b1cdbd2cSJim Jagielski return m_pImpl->getCurItemID(); 280*b1cdbd2cSJim Jagielski } 281*b1cdbd2cSJim Jagielski 282*b1cdbd2cSJim Jagielski GetPreviousHyperLabel(ItemIndex _Index)283*b1cdbd2cSJim Jagielski RoadmapItem* ORoadmap::GetPreviousHyperLabel( ItemIndex _Index) 284*b1cdbd2cSJim Jagielski { 285*b1cdbd2cSJim Jagielski RoadmapItem* pOldItem = NULL; 286*b1cdbd2cSJim Jagielski if ( _Index > 0 ) 287*b1cdbd2cSJim Jagielski pOldItem = m_pImpl->getHyperLabels().at( _Index - 1 ); 288*b1cdbd2cSJim Jagielski return pOldItem; 289*b1cdbd2cSJim Jagielski } 290*b1cdbd2cSJim Jagielski 291*b1cdbd2cSJim Jagielski 292*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- 293*b1cdbd2cSJim Jagielski InsertHyperLabel(ItemIndex _Index,const::rtl::OUString & _sLabel,ItemId _RMID,sal_Bool _bEnabled)294*b1cdbd2cSJim Jagielski RoadmapItem* ORoadmap::InsertHyperLabel( ItemIndex _Index, const ::rtl::OUString& _sLabel, ItemId _RMID, sal_Bool _bEnabled) 295*b1cdbd2cSJim Jagielski { 296*b1cdbd2cSJim Jagielski if ( m_pImpl->getItemCount() == 0 ) 297*b1cdbd2cSJim Jagielski m_pImpl->initItemSize(); 298*b1cdbd2cSJim Jagielski 299*b1cdbd2cSJim Jagielski RoadmapItem* pItem = NULL; 300*b1cdbd2cSJim Jagielski RoadmapItem* pOldItem = GetPreviousHyperLabel( _Index ); 301*b1cdbd2cSJim Jagielski 302*b1cdbd2cSJim Jagielski pItem = new RoadmapItem( *this, m_pImpl->getItemSize() ); 303*b1cdbd2cSJim Jagielski if ( _RMID != RMINCOMPLETE ) 304*b1cdbd2cSJim Jagielski { 305*b1cdbd2cSJim Jagielski pItem->SetInteractive( m_pImpl->isInteractive() ); 306*b1cdbd2cSJim Jagielski m_pImpl->insertHyperLabel( _Index, pItem ); 307*b1cdbd2cSJim Jagielski } 308*b1cdbd2cSJim Jagielski else 309*b1cdbd2cSJim Jagielski { 310*b1cdbd2cSJim Jagielski pItem->SetInteractive( sal_False ); 311*b1cdbd2cSJim Jagielski } 312*b1cdbd2cSJim Jagielski pItem->SetPosition( pOldItem ); 313*b1cdbd2cSJim Jagielski pItem->Update( _Index, _sLabel ); 314*b1cdbd2cSJim Jagielski pItem->SetClickHdl(LINK( this, ORoadmap, ImplClickHdl ) ); 315*b1cdbd2cSJim Jagielski pItem->SetID( _RMID ); 316*b1cdbd2cSJim Jagielski pItem->SetIndex( _Index ); 317*b1cdbd2cSJim Jagielski if (!_bEnabled) 318*b1cdbd2cSJim Jagielski pItem->Enable( _bEnabled ); 319*b1cdbd2cSJim Jagielski return pItem; 320*b1cdbd2cSJim Jagielski } 321*b1cdbd2cSJim Jagielski 322*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetRoadmapBitmap(const BitmapEx & _rBmp,sal_Bool _bInvalidate)323*b1cdbd2cSJim Jagielski void ORoadmap::SetRoadmapBitmap( const BitmapEx& _rBmp, sal_Bool _bInvalidate ) 324*b1cdbd2cSJim Jagielski { 325*b1cdbd2cSJim Jagielski m_pImpl->setPicture( _rBmp ); 326*b1cdbd2cSJim Jagielski if ( _bInvalidate ) 327*b1cdbd2cSJim Jagielski Invalidate( ); 328*b1cdbd2cSJim Jagielski } 329*b1cdbd2cSJim Jagielski 330*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetRoadmapBitmap() const331*b1cdbd2cSJim Jagielski const BitmapEx& ORoadmap::GetRoadmapBitmap( ) const 332*b1cdbd2cSJim Jagielski { 333*b1cdbd2cSJim Jagielski return m_pImpl->getPicture( ); 334*b1cdbd2cSJim Jagielski } 335*b1cdbd2cSJim Jagielski 336*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetRoadmapInteractive(sal_Bool _bInteractive)337*b1cdbd2cSJim Jagielski void ORoadmap::SetRoadmapInteractive( sal_Bool _bInteractive ) 338*b1cdbd2cSJim Jagielski { 339*b1cdbd2cSJim Jagielski m_pImpl->setInteractive( _bInteractive ); 340*b1cdbd2cSJim Jagielski 341*b1cdbd2cSJim Jagielski const HL_Vector& rItems = m_pImpl->getHyperLabels(); 342*b1cdbd2cSJim Jagielski for ( HL_Vector::const_iterator i = rItems.begin(); 343*b1cdbd2cSJim Jagielski i < rItems.end(); 344*b1cdbd2cSJim Jagielski ++i 345*b1cdbd2cSJim Jagielski ) 346*b1cdbd2cSJim Jagielski { 347*b1cdbd2cSJim Jagielski (*i)->SetInteractive( _bInteractive ); 348*b1cdbd2cSJim Jagielski } 349*b1cdbd2cSJim Jagielski } 350*b1cdbd2cSJim Jagielski 351*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- IsRoadmapInteractive()352*b1cdbd2cSJim Jagielski sal_Bool ORoadmap::IsRoadmapInteractive() 353*b1cdbd2cSJim Jagielski { 354*b1cdbd2cSJim Jagielski return m_pImpl->isInteractive(); 355*b1cdbd2cSJim Jagielski } 356*b1cdbd2cSJim Jagielski 357*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetRoadmapComplete(sal_Bool _bComplete)358*b1cdbd2cSJim Jagielski void ORoadmap::SetRoadmapComplete( sal_Bool _bComplete ) 359*b1cdbd2cSJim Jagielski { 360*b1cdbd2cSJim Jagielski sal_Bool bWasComplete = m_pImpl->isComplete(); 361*b1cdbd2cSJim Jagielski m_pImpl->setComplete( _bComplete ); 362*b1cdbd2cSJim Jagielski if ( _bComplete ) 363*b1cdbd2cSJim Jagielski { 364*b1cdbd2cSJim Jagielski if ( m_pImpl->InCompleteHyperLabel != NULL) 365*b1cdbd2cSJim Jagielski { 366*b1cdbd2cSJim Jagielski delete m_pImpl->InCompleteHyperLabel; 367*b1cdbd2cSJim Jagielski m_pImpl->InCompleteHyperLabel = NULL; 368*b1cdbd2cSJim Jagielski } 369*b1cdbd2cSJim Jagielski } 370*b1cdbd2cSJim Jagielski else if ( bWasComplete ) 371*b1cdbd2cSJim Jagielski m_pImpl->InCompleteHyperLabel = InsertHyperLabel( m_pImpl->getItemCount(), ::String::CreateFromAscii( "..." ), RMINCOMPLETE ); 372*b1cdbd2cSJim Jagielski } 373*b1cdbd2cSJim Jagielski 374*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- UpdatefollowingHyperLabels(ItemIndex _nIndex)375*b1cdbd2cSJim Jagielski void ORoadmap::UpdatefollowingHyperLabels( ItemIndex _nIndex ) 376*b1cdbd2cSJim Jagielski { 377*b1cdbd2cSJim Jagielski const HL_Vector& rItems = m_pImpl->getHyperLabels(); 378*b1cdbd2cSJim Jagielski if ( _nIndex < (ItemIndex)rItems.size() ) 379*b1cdbd2cSJim Jagielski { 380*b1cdbd2cSJim Jagielski RoadmapItem* pItem = NULL; 381*b1cdbd2cSJim Jagielski for ( HL_Vector::const_iterator i = rItems.begin() + _nIndex; 382*b1cdbd2cSJim Jagielski i< rItems.end(); 383*b1cdbd2cSJim Jagielski ++i, ++_nIndex 384*b1cdbd2cSJim Jagielski ) 385*b1cdbd2cSJim Jagielski { 386*b1cdbd2cSJim Jagielski pItem = *i; 387*b1cdbd2cSJim Jagielski 388*b1cdbd2cSJim Jagielski pItem->SetIndex( _nIndex ); 389*b1cdbd2cSJim Jagielski pItem->SetPosition( GetPreviousHyperLabel( _nIndex ) ); 390*b1cdbd2cSJim Jagielski } 391*b1cdbd2cSJim Jagielski } 392*b1cdbd2cSJim Jagielski if ( ! m_pImpl->isComplete() ) 393*b1cdbd2cSJim Jagielski { 394*b1cdbd2cSJim Jagielski RoadmapItem* pOldItem = GetPreviousHyperLabel( m_pImpl->getItemCount() ); 395*b1cdbd2cSJim Jagielski m_pImpl->InCompleteHyperLabel->SetPosition( pOldItem ); 396*b1cdbd2cSJim Jagielski m_pImpl->InCompleteHyperLabel->Update( m_pImpl->getItemCount(), ::String::CreateFromAscii("...") ); 397*b1cdbd2cSJim Jagielski } 398*b1cdbd2cSJim Jagielski } 399*b1cdbd2cSJim Jagielski 400*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ReplaceRoadmapItem(ItemIndex _Index,const::rtl::OUString & _RoadmapItem,ItemId _RMID,sal_Bool _bEnabled)401*b1cdbd2cSJim Jagielski void ORoadmap::ReplaceRoadmapItem( ItemIndex _Index, const ::rtl::OUString& _RoadmapItem, ItemId _RMID, sal_Bool _bEnabled ) 402*b1cdbd2cSJim Jagielski { 403*b1cdbd2cSJim Jagielski RoadmapItem* pItem = GetByIndex( _Index); 404*b1cdbd2cSJim Jagielski if ( pItem != NULL ) 405*b1cdbd2cSJim Jagielski { 406*b1cdbd2cSJim Jagielski pItem->Update( _Index, _RoadmapItem ); 407*b1cdbd2cSJim Jagielski pItem->SetID( _RMID ); 408*b1cdbd2cSJim Jagielski pItem->Enable( _bEnabled ); 409*b1cdbd2cSJim Jagielski } 410*b1cdbd2cSJim Jagielski } 411*b1cdbd2cSJim Jagielski 412*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetItemCount() const413*b1cdbd2cSJim Jagielski RoadmapTypes::ItemIndex ORoadmap::GetItemCount() const 414*b1cdbd2cSJim Jagielski { 415*b1cdbd2cSJim Jagielski return m_pImpl->getItemCount(); 416*b1cdbd2cSJim Jagielski } 417*b1cdbd2cSJim Jagielski 418*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetItemID(ItemIndex _nIndex) const419*b1cdbd2cSJim Jagielski RoadmapTypes::ItemId ORoadmap::GetItemID( ItemIndex _nIndex ) const 420*b1cdbd2cSJim Jagielski { 421*b1cdbd2cSJim Jagielski const RoadmapItem* pHyperLabel = GetByIndex( _nIndex ); 422*b1cdbd2cSJim Jagielski if ( pHyperLabel ) 423*b1cdbd2cSJim Jagielski return pHyperLabel->GetID(); 424*b1cdbd2cSJim Jagielski return -1; 425*b1cdbd2cSJim Jagielski } 426*b1cdbd2cSJim Jagielski 427*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetItemIndex(ItemId _nID) const428*b1cdbd2cSJim Jagielski RoadmapTypes::ItemIndex ORoadmap::GetItemIndex( ItemId _nID ) const 429*b1cdbd2cSJim Jagielski { 430*b1cdbd2cSJim Jagielski ItemId nLocID = 0; 431*b1cdbd2cSJim Jagielski const HL_Vector& rItems = m_pImpl->getHyperLabels(); 432*b1cdbd2cSJim Jagielski for ( HL_Vector::const_iterator i = rItems.begin(); 433*b1cdbd2cSJim Jagielski i < rItems.end(); 434*b1cdbd2cSJim Jagielski ++i 435*b1cdbd2cSJim Jagielski ) 436*b1cdbd2cSJim Jagielski { 437*b1cdbd2cSJim Jagielski nLocID = (*i)->GetID(); 438*b1cdbd2cSJim Jagielski if ( nLocID == _nID ) 439*b1cdbd2cSJim Jagielski return ItemIndex( i - rItems.begin() ); 440*b1cdbd2cSJim Jagielski } 441*b1cdbd2cSJim Jagielski return -1; 442*b1cdbd2cSJim Jagielski } 443*b1cdbd2cSJim Jagielski 444*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- InsertRoadmapItem(ItemIndex _Index,const::rtl::OUString & _RoadmapItem,ItemId _nUniqueId,sal_Bool _bEnabled)445*b1cdbd2cSJim Jagielski void ORoadmap::InsertRoadmapItem( ItemIndex _Index, const ::rtl::OUString& _RoadmapItem, ItemId _nUniqueId, sal_Bool _bEnabled ) 446*b1cdbd2cSJim Jagielski { 447*b1cdbd2cSJim Jagielski InsertHyperLabel( _Index, _RoadmapItem, _nUniqueId, _bEnabled ); 448*b1cdbd2cSJim Jagielski // Todo: YPos is superfluous, if items are always appended 449*b1cdbd2cSJim Jagielski UpdatefollowingHyperLabels( _Index + 1 ); 450*b1cdbd2cSJim Jagielski } 451*b1cdbd2cSJim Jagielski 452*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- DeleteRoadmapItem(ItemIndex _Index)453*b1cdbd2cSJim Jagielski void ORoadmap::DeleteRoadmapItem( ItemIndex _Index ) 454*b1cdbd2cSJim Jagielski { 455*b1cdbd2cSJim Jagielski if ( m_pImpl->getItemCount() > 0 && ( _Index > -1) && ( _Index < m_pImpl->getItemCount() ) ) 456*b1cdbd2cSJim Jagielski { 457*b1cdbd2cSJim Jagielski m_pImpl->removeHyperLabel( _Index ); 458*b1cdbd2cSJim Jagielski UpdatefollowingHyperLabels( _Index ); 459*b1cdbd2cSJim Jagielski } 460*b1cdbd2cSJim Jagielski } 461*b1cdbd2cSJim Jagielski 462*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- IsRoadmapComplete() const463*b1cdbd2cSJim Jagielski sal_Bool ORoadmap::IsRoadmapComplete( ) const 464*b1cdbd2cSJim Jagielski { 465*b1cdbd2cSJim Jagielski return m_pImpl->isComplete(); 466*b1cdbd2cSJim Jagielski } 467*b1cdbd2cSJim Jagielski 468*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- IsRoadmapItemEnabled(ItemId _nItemId,ItemIndex _nStartIndex) const469*b1cdbd2cSJim Jagielski sal_Bool ORoadmap::IsRoadmapItemEnabled( ItemId _nItemId, ItemIndex _nStartIndex ) const 470*b1cdbd2cSJim Jagielski { 471*b1cdbd2cSJim Jagielski const RoadmapItem* _pLabelItem = GetByID( _nItemId, _nStartIndex ); 472*b1cdbd2cSJim Jagielski return _pLabelItem ? _pLabelItem->IsEnabled() : sal_False; 473*b1cdbd2cSJim Jagielski } 474*b1cdbd2cSJim Jagielski 475*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- EnableRoadmapItem(ItemId _nItemId,sal_Bool _bEnable,ItemIndex _nStartIndex)476*b1cdbd2cSJim Jagielski void ORoadmap::EnableRoadmapItem( ItemId _nItemId, sal_Bool _bEnable, ItemIndex _nStartIndex ) 477*b1cdbd2cSJim Jagielski { 478*b1cdbd2cSJim Jagielski RoadmapItem* pItem = GetByID( _nItemId, _nStartIndex ); 479*b1cdbd2cSJim Jagielski if ( pItem != NULL ) 480*b1cdbd2cSJim Jagielski pItem->Enable( _bEnable ); 481*b1cdbd2cSJim Jagielski } 482*b1cdbd2cSJim Jagielski 483*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ChangeRoadmapItemLabel(ItemId _nID,const::rtl::OUString & _sLabel,ItemIndex _nStartIndex)484*b1cdbd2cSJim Jagielski void ORoadmap::ChangeRoadmapItemLabel( ItemId _nID, const ::rtl::OUString& _sLabel, ItemIndex _nStartIndex ) 485*b1cdbd2cSJim Jagielski { 486*b1cdbd2cSJim Jagielski RoadmapItem* pItem = GetByID( _nID, _nStartIndex ); 487*b1cdbd2cSJim Jagielski if ( pItem != NULL ) 488*b1cdbd2cSJim Jagielski { 489*b1cdbd2cSJim Jagielski pItem->Update( pItem->GetIndex(), _sLabel ); 490*b1cdbd2cSJim Jagielski 491*b1cdbd2cSJim Jagielski const HL_Vector& rItems = m_pImpl->getHyperLabels(); 492*b1cdbd2cSJim Jagielski for ( HL_Vector::const_iterator i = rItems.begin() + _nStartIndex; 493*b1cdbd2cSJim Jagielski i < rItems.end(); 494*b1cdbd2cSJim Jagielski ++i 495*b1cdbd2cSJim Jagielski ) 496*b1cdbd2cSJim Jagielski { 497*b1cdbd2cSJim Jagielski (*i)->SetPosition( GetPreviousHyperLabel( i - rItems.begin() ) ); 498*b1cdbd2cSJim Jagielski } 499*b1cdbd2cSJim Jagielski } 500*b1cdbd2cSJim Jagielski } 501*b1cdbd2cSJim Jagielski 502*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- 503*b1cdbd2cSJim Jagielski GetRoadmapItemLabel(ItemId _nID,ItemIndex _nStartIndex)504*b1cdbd2cSJim Jagielski ::rtl::OUString ORoadmap::GetRoadmapItemLabel( ItemId _nID, ItemIndex _nStartIndex ) 505*b1cdbd2cSJim Jagielski { 506*b1cdbd2cSJim Jagielski RoadmapItem* pItem = GetByID( _nID, _nStartIndex ); 507*b1cdbd2cSJim Jagielski if ( pItem != NULL ) 508*b1cdbd2cSJim Jagielski return pItem->GetLabel(); 509*b1cdbd2cSJim Jagielski else 510*b1cdbd2cSJim Jagielski return ::rtl::OUString(); 511*b1cdbd2cSJim Jagielski } 512*b1cdbd2cSJim Jagielski 513*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ChangeRoadmapItemID(ItemId _nID,ItemId _NewID,ItemIndex _nStartIndex)514*b1cdbd2cSJim Jagielski void ORoadmap::ChangeRoadmapItemID( ItemId _nID, ItemId _NewID, ItemIndex _nStartIndex ) 515*b1cdbd2cSJim Jagielski { 516*b1cdbd2cSJim Jagielski RoadmapItem* pItem = GetByID( _nID, _nStartIndex ); 517*b1cdbd2cSJim Jagielski if ( pItem != NULL ) 518*b1cdbd2cSJim Jagielski pItem->SetID( _NewID ); 519*b1cdbd2cSJim Jagielski } 520*b1cdbd2cSJim Jagielski 521*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetByID(ItemId _nID,ItemIndex _nStartIndex)522*b1cdbd2cSJim Jagielski RoadmapItem* ORoadmap::GetByID( ItemId _nID, ItemIndex _nStartIndex) 523*b1cdbd2cSJim Jagielski { 524*b1cdbd2cSJim Jagielski ItemId nLocID = 0; 525*b1cdbd2cSJim Jagielski const HL_Vector& rItems = m_pImpl->getHyperLabels(); 526*b1cdbd2cSJim Jagielski for ( HL_Vector::const_iterator i = rItems.begin() + _nStartIndex; 527*b1cdbd2cSJim Jagielski i < rItems.end(); 528*b1cdbd2cSJim Jagielski ++i 529*b1cdbd2cSJim Jagielski ) 530*b1cdbd2cSJim Jagielski { 531*b1cdbd2cSJim Jagielski nLocID = (*i)->GetID(); 532*b1cdbd2cSJim Jagielski if ( nLocID == _nID ) 533*b1cdbd2cSJim Jagielski return *i; 534*b1cdbd2cSJim Jagielski } 535*b1cdbd2cSJim Jagielski return NULL; 536*b1cdbd2cSJim Jagielski } 537*b1cdbd2cSJim Jagielski 538*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetByID(ItemId _nID,ItemIndex _nStartIndex) const539*b1cdbd2cSJim Jagielski const RoadmapItem* ORoadmap::GetByID( ItemId _nID, ItemIndex _nStartIndex ) const 540*b1cdbd2cSJim Jagielski { 541*b1cdbd2cSJim Jagielski return const_cast< ORoadmap* >( this )->GetByID( _nID, _nStartIndex ); 542*b1cdbd2cSJim Jagielski } 543*b1cdbd2cSJim Jagielski 544*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetByIndex(ItemIndex _nItemIndex)545*b1cdbd2cSJim Jagielski RoadmapItem* ORoadmap::GetByIndex( ItemIndex _nItemIndex) 546*b1cdbd2cSJim Jagielski { 547*b1cdbd2cSJim Jagielski const HL_Vector& rItems = m_pImpl->getHyperLabels(); 548*b1cdbd2cSJim Jagielski if ( ( _nItemIndex > -1 ) && ( _nItemIndex < (ItemIndex)rItems.size() ) ) 549*b1cdbd2cSJim Jagielski { 550*b1cdbd2cSJim Jagielski return rItems.at( _nItemIndex ); 551*b1cdbd2cSJim Jagielski } 552*b1cdbd2cSJim Jagielski return NULL; 553*b1cdbd2cSJim Jagielski } 554*b1cdbd2cSJim Jagielski 555*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetByIndex(ItemIndex _nItemIndex) const556*b1cdbd2cSJim Jagielski const RoadmapItem* ORoadmap::GetByIndex( ItemIndex _nItemIndex ) const 557*b1cdbd2cSJim Jagielski { 558*b1cdbd2cSJim Jagielski return const_cast< ORoadmap* >( this )->GetByIndex( _nItemIndex ); 559*b1cdbd2cSJim Jagielski } 560*b1cdbd2cSJim Jagielski 561*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetNextAvailableItemId(ItemIndex _nNewIndex)562*b1cdbd2cSJim Jagielski RoadmapTypes::ItemId ORoadmap::GetNextAvailableItemId( ItemIndex _nNewIndex ) 563*b1cdbd2cSJim Jagielski { 564*b1cdbd2cSJim Jagielski RoadmapItem* pItem = NULL; 565*b1cdbd2cSJim Jagielski 566*b1cdbd2cSJim Jagielski ItemIndex searchIndex = ++_nNewIndex; 567*b1cdbd2cSJim Jagielski while ( searchIndex < m_pImpl->getItemCount() ) 568*b1cdbd2cSJim Jagielski { 569*b1cdbd2cSJim Jagielski pItem = GetByIndex( searchIndex ); 570*b1cdbd2cSJim Jagielski if ( pItem->IsEnabled() ) 571*b1cdbd2cSJim Jagielski return pItem->GetID( ); 572*b1cdbd2cSJim Jagielski 573*b1cdbd2cSJim Jagielski ++searchIndex; 574*b1cdbd2cSJim Jagielski } 575*b1cdbd2cSJim Jagielski return -1; 576*b1cdbd2cSJim Jagielski } 577*b1cdbd2cSJim Jagielski 578*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetPreviousAvailableItemId(ItemIndex _nNewIndex)579*b1cdbd2cSJim Jagielski RoadmapTypes::ItemId ORoadmap::GetPreviousAvailableItemId( ItemIndex _nNewIndex ) 580*b1cdbd2cSJim Jagielski { 581*b1cdbd2cSJim Jagielski RoadmapItem* pItem = NULL; 582*b1cdbd2cSJim Jagielski ItemIndex searchIndex = --_nNewIndex; 583*b1cdbd2cSJim Jagielski while ( searchIndex > -1 ) 584*b1cdbd2cSJim Jagielski { 585*b1cdbd2cSJim Jagielski pItem = GetByIndex( searchIndex ); 586*b1cdbd2cSJim Jagielski if ( pItem->IsEnabled() ) 587*b1cdbd2cSJim Jagielski return pItem->GetID( ); 588*b1cdbd2cSJim Jagielski 589*b1cdbd2cSJim Jagielski searchIndex--; 590*b1cdbd2cSJim Jagielski } 591*b1cdbd2cSJim Jagielski return -1; 592*b1cdbd2cSJim Jagielski } 593*b1cdbd2cSJim Jagielski 594*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- DeselectOldRoadmapItems()595*b1cdbd2cSJim Jagielski void ORoadmap::DeselectOldRoadmapItems() 596*b1cdbd2cSJim Jagielski { 597*b1cdbd2cSJim Jagielski const HL_Vector& rItems = m_pImpl->getHyperLabels(); 598*b1cdbd2cSJim Jagielski for ( HL_Vector::const_iterator i = rItems.begin(); 599*b1cdbd2cSJim Jagielski i < rItems.end(); 600*b1cdbd2cSJim Jagielski ++i 601*b1cdbd2cSJim Jagielski ) 602*b1cdbd2cSJim Jagielski { 603*b1cdbd2cSJim Jagielski (*i)->ToggleBackgroundColor( COL_TRANSPARENT ); 604*b1cdbd2cSJim Jagielski } 605*b1cdbd2cSJim Jagielski } 606*b1cdbd2cSJim Jagielski 607*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetItemSelectHdl(const Link & _rHdl)608*b1cdbd2cSJim Jagielski void ORoadmap::SetItemSelectHdl( const Link& _rHdl ) 609*b1cdbd2cSJim Jagielski { 610*b1cdbd2cSJim Jagielski m_pImpl->setSelectHdl( _rHdl ); 611*b1cdbd2cSJim Jagielski } 612*b1cdbd2cSJim Jagielski 613*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetItemSelectHdl() const614*b1cdbd2cSJim Jagielski Link ORoadmap::GetItemSelectHdl( ) const 615*b1cdbd2cSJim Jagielski { 616*b1cdbd2cSJim Jagielski return m_pImpl->getSelectHdl(); 617*b1cdbd2cSJim Jagielski } 618*b1cdbd2cSJim Jagielski 619*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- Select()620*b1cdbd2cSJim Jagielski void ORoadmap::Select() 621*b1cdbd2cSJim Jagielski { 622*b1cdbd2cSJim Jagielski GetItemSelectHdl().Call( this ); 623*b1cdbd2cSJim Jagielski CallEventListeners( VCLEVENT_ROADMAP_ITEMSELECTED ); 624*b1cdbd2cSJim Jagielski } 625*b1cdbd2cSJim Jagielski 626*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetFocus()627*b1cdbd2cSJim Jagielski void ORoadmap::GetFocus() 628*b1cdbd2cSJim Jagielski { 629*b1cdbd2cSJim Jagielski RoadmapItem* pCurHyperLabel = GetByID( GetCurrentRoadmapItemID() ); 630*b1cdbd2cSJim Jagielski if ( pCurHyperLabel != NULL ) 631*b1cdbd2cSJim Jagielski pCurHyperLabel->GrabFocus(); 632*b1cdbd2cSJim Jagielski } 633*b1cdbd2cSJim Jagielski 634*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SelectRoadmapItemByID(ItemId _nNewID)635*b1cdbd2cSJim Jagielski sal_Bool ORoadmap::SelectRoadmapItemByID( ItemId _nNewID ) 636*b1cdbd2cSJim Jagielski { 637*b1cdbd2cSJim Jagielski DeselectOldRoadmapItems(); 638*b1cdbd2cSJim Jagielski RoadmapItem* pItem = GetByID( _nNewID ); 639*b1cdbd2cSJim Jagielski if ( pItem != NULL ) 640*b1cdbd2cSJim Jagielski { 641*b1cdbd2cSJim Jagielski if ( pItem->IsEnabled() ) 642*b1cdbd2cSJim Jagielski { 643*b1cdbd2cSJim Jagielski const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 644*b1cdbd2cSJim Jagielski pItem->ToggleBackgroundColor( rStyleSettings.GetHighlightColor() ); //HighlightColor 645*b1cdbd2cSJim Jagielski 646*b1cdbd2cSJim Jagielski pItem->GrabFocus(); 647*b1cdbd2cSJim Jagielski m_pImpl->setCurItemID(_nNewID); 648*b1cdbd2cSJim Jagielski 649*b1cdbd2cSJim Jagielski Select(); 650*b1cdbd2cSJim Jagielski return sal_True; 651*b1cdbd2cSJim Jagielski } 652*b1cdbd2cSJim Jagielski } 653*b1cdbd2cSJim Jagielski return sal_False; 654*b1cdbd2cSJim Jagielski } 655*b1cdbd2cSJim Jagielski 656*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- Paint(const Rectangle & _rRect)657*b1cdbd2cSJim Jagielski void ORoadmap::Paint( const Rectangle& _rRect ) 658*b1cdbd2cSJim Jagielski { 659*b1cdbd2cSJim Jagielski Control::Paint( _rRect ); 660*b1cdbd2cSJim Jagielski 661*b1cdbd2cSJim Jagielski 662*b1cdbd2cSJim Jagielski // draw the bitmap 663*b1cdbd2cSJim Jagielski if ( !!m_pImpl->getPicture() ) 664*b1cdbd2cSJim Jagielski { 665*b1cdbd2cSJim Jagielski Size aBitmapSize = m_pImpl->getPicture().GetSizePixel(); 666*b1cdbd2cSJim Jagielski Size aMySize = GetOutputSizePixel(); 667*b1cdbd2cSJim Jagielski 668*b1cdbd2cSJim Jagielski Point aBitmapPos( aMySize.Width() - aBitmapSize.Width(), aMySize.Height() - aBitmapSize.Height() ); 669*b1cdbd2cSJim Jagielski 670*b1cdbd2cSJim Jagielski // draw it 671*b1cdbd2cSJim Jagielski DrawBitmapEx( aBitmapPos, m_pImpl->getPicture() ); 672*b1cdbd2cSJim Jagielski } 673*b1cdbd2cSJim Jagielski 674*b1cdbd2cSJim Jagielski //................................................................. 675*b1cdbd2cSJim Jagielski // draw the headline 676*b1cdbd2cSJim Jagielski DrawHeadline(); 677*b1cdbd2cSJim Jagielski } 678*b1cdbd2cSJim Jagielski 679*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- DrawHeadline()680*b1cdbd2cSJim Jagielski void ORoadmap::DrawHeadline() 681*b1cdbd2cSJim Jagielski { 682*b1cdbd2cSJim Jagielski Point aTextPos = LogicToPixel( Point( ROADMAP_INDENT_X, 8 ), MAP_APPFONT ); 683*b1cdbd2cSJim Jagielski 684*b1cdbd2cSJim Jagielski Size aOutputSize( GetOutputSizePixel() ); 685*b1cdbd2cSJim Jagielski 686*b1cdbd2cSJim Jagielski // draw it 687*b1cdbd2cSJim Jagielski DrawText( Rectangle( aTextPos, aOutputSize ), GetText(), TEXT_DRAW_LEFT | TEXT_DRAW_TOP | TEXT_DRAW_MULTILINE | TEXT_DRAW_WORDBREAK ); 688*b1cdbd2cSJim Jagielski DrawTextLine( aTextPos, aOutputSize.Width(), STRIKEOUT_NONE, UNDERLINE_SINGLE, UNDERLINE_NONE, sal_False ); 689*b1cdbd2cSJim Jagielski const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 690*b1cdbd2cSJim Jagielski SetLineColor( rStyleSettings.GetFieldTextColor()); 691*b1cdbd2cSJim Jagielski SetTextColor(rStyleSettings.GetFieldTextColor()); 692*b1cdbd2cSJim Jagielski } 693*b1cdbd2cSJim Jagielski 694*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetByPointer(Window * pWindow)695*b1cdbd2cSJim Jagielski RoadmapItem* ORoadmap::GetByPointer(Window* pWindow) 696*b1cdbd2cSJim Jagielski { 697*b1cdbd2cSJim Jagielski const HL_Vector& rItems = m_pImpl->getHyperLabels(); 698*b1cdbd2cSJim Jagielski for ( HL_Vector::const_iterator i = rItems.begin(); 699*b1cdbd2cSJim Jagielski i < rItems.end(); 700*b1cdbd2cSJim Jagielski ++i 701*b1cdbd2cSJim Jagielski ) 702*b1cdbd2cSJim Jagielski { 703*b1cdbd2cSJim Jagielski if ( (*i)->Contains( pWindow ) ) 704*b1cdbd2cSJim Jagielski return *i; 705*b1cdbd2cSJim Jagielski } 706*b1cdbd2cSJim Jagielski return NULL; 707*b1cdbd2cSJim Jagielski } 708*b1cdbd2cSJim Jagielski 709*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- PreNotify(NotifyEvent & _rNEvt)710*b1cdbd2cSJim Jagielski long ORoadmap::PreNotify( NotifyEvent& _rNEvt ) 711*b1cdbd2cSJim Jagielski { 712*b1cdbd2cSJim Jagielski // capture KeyEvents for taskpane cycling 713*b1cdbd2cSJim Jagielski if ( _rNEvt.GetType() == EVENT_KEYINPUT ) 714*b1cdbd2cSJim Jagielski { 715*b1cdbd2cSJim Jagielski Window* pWindow = _rNEvt.GetWindow(); 716*b1cdbd2cSJim Jagielski RoadmapItem* pItem = GetByPointer( pWindow ); 717*b1cdbd2cSJim Jagielski if ( pItem != NULL ) 718*b1cdbd2cSJim Jagielski { 719*b1cdbd2cSJim Jagielski sal_Int16 nKeyCode = _rNEvt.GetKeyEvent()->GetKeyCode().GetCode(); 720*b1cdbd2cSJim Jagielski switch( nKeyCode ) 721*b1cdbd2cSJim Jagielski { 722*b1cdbd2cSJim Jagielski case KEY_UP: 723*b1cdbd2cSJim Jagielski { // Note: Performancewise this is not optimal, because we search for an ID in the labels 724*b1cdbd2cSJim Jagielski // and afterwards we search again for a label with the appropriate ID -> 725*b1cdbd2cSJim Jagielski // unnecessarily we search twice!!! 726*b1cdbd2cSJim Jagielski ItemId nPrevItemID = GetPreviousAvailableItemId( pItem->GetIndex() ); 727*b1cdbd2cSJim Jagielski if ( nPrevItemID != -1 ) 728*b1cdbd2cSJim Jagielski return SelectRoadmapItemByID( nPrevItemID ); 729*b1cdbd2cSJim Jagielski } 730*b1cdbd2cSJim Jagielski break; 731*b1cdbd2cSJim Jagielski case KEY_DOWN: 732*b1cdbd2cSJim Jagielski { 733*b1cdbd2cSJim Jagielski ItemId nNextItemID = GetNextAvailableItemId( pItem->GetIndex() ); 734*b1cdbd2cSJim Jagielski if ( nNextItemID != -1 ) 735*b1cdbd2cSJim Jagielski return SelectRoadmapItemByID( nNextItemID ); 736*b1cdbd2cSJim Jagielski } 737*b1cdbd2cSJim Jagielski break; 738*b1cdbd2cSJim Jagielski case KEY_SPACE: 739*b1cdbd2cSJim Jagielski return SelectRoadmapItemByID( pItem->GetID() ); 740*b1cdbd2cSJim Jagielski } 741*b1cdbd2cSJim Jagielski } 742*b1cdbd2cSJim Jagielski } 743*b1cdbd2cSJim Jagielski return Window::PreNotify( _rNEvt ); 744*b1cdbd2cSJim Jagielski } 745*b1cdbd2cSJim Jagielski 746*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- IMPL_LINK(ORoadmap,ImplClickHdl,HyperLabel *,_CurHyperLabel)747*b1cdbd2cSJim Jagielski IMPL_LINK(ORoadmap, ImplClickHdl, HyperLabel*, _CurHyperLabel) 748*b1cdbd2cSJim Jagielski { 749*b1cdbd2cSJim Jagielski return SelectRoadmapItemByID( _CurHyperLabel->GetID() ); 750*b1cdbd2cSJim Jagielski } 751*b1cdbd2cSJim Jagielski 752*b1cdbd2cSJim Jagielski 753*b1cdbd2cSJim Jagielski 754*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- DataChanged(const DataChangedEvent & rDCEvt)755*b1cdbd2cSJim Jagielski void ORoadmap::DataChanged( const DataChangedEvent& rDCEvt ) 756*b1cdbd2cSJim Jagielski { 757*b1cdbd2cSJim Jagielski if ((( rDCEvt.GetType() == DATACHANGED_SETTINGS ) || 758*b1cdbd2cSJim Jagielski ( rDCEvt.GetType() == DATACHANGED_DISPLAY )) && 759*b1cdbd2cSJim Jagielski ( rDCEvt.GetFlags() & SETTINGS_STYLE )) 760*b1cdbd2cSJim Jagielski { 761*b1cdbd2cSJim Jagielski const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 762*b1cdbd2cSJim Jagielski SetBackground( Wallpaper( rStyleSettings.GetFieldColor() ) ); 763*b1cdbd2cSJim Jagielski Color aTextColor = rStyleSettings.GetFieldTextColor(); 764*b1cdbd2cSJim Jagielski Font aFont = GetFont(); 765*b1cdbd2cSJim Jagielski aFont.SetColor( aTextColor ); 766*b1cdbd2cSJim Jagielski SetFont( aFont ); 767*b1cdbd2cSJim Jagielski RoadmapTypes::ItemId curItemID = GetCurrentRoadmapItemID(); 768*b1cdbd2cSJim Jagielski RoadmapItem* pLabelItem = GetByID( curItemID ); 769*b1cdbd2cSJim Jagielski if ( pLabelItem != NULL ) 770*b1cdbd2cSJim Jagielski pLabelItem->ToggleBackgroundColor(rStyleSettings.GetHighlightColor()); 771*b1cdbd2cSJim Jagielski Invalidate(); 772*b1cdbd2cSJim Jagielski } 773*b1cdbd2cSJim Jagielski } 774*b1cdbd2cSJim Jagielski 775*b1cdbd2cSJim Jagielski 776*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- RoadmapItem(ORoadmap & _rParent,const Size & _rItemPlayground)777*b1cdbd2cSJim Jagielski RoadmapItem::RoadmapItem( ORoadmap& _rParent, const Size& _rItemPlayground ) 778*b1cdbd2cSJim Jagielski :m_aItemPlayground( _rItemPlayground ) 779*b1cdbd2cSJim Jagielski { 780*b1cdbd2cSJim Jagielski mpID = new IDLabel( &_rParent, WB_WORDBREAK ); 781*b1cdbd2cSJim Jagielski mpID->SetTextColor( mpID->GetSettings().GetStyleSettings().GetFieldTextColor( ) ); 782*b1cdbd2cSJim Jagielski mpID->Show(); 783*b1cdbd2cSJim Jagielski mpDescription = new HyperLabel( &_rParent, WB_NOTABSTOP | WB_WORDBREAK ); 784*b1cdbd2cSJim Jagielski mpDescription->Show(); 785*b1cdbd2cSJim Jagielski } 786*b1cdbd2cSJim Jagielski 787*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- Contains(const Window * _pWindow) const788*b1cdbd2cSJim Jagielski bool RoadmapItem::Contains( const Window* _pWindow ) const 789*b1cdbd2cSJim Jagielski { 790*b1cdbd2cSJim Jagielski return ( mpID == _pWindow ) || ( mpDescription == _pWindow ); 791*b1cdbd2cSJim Jagielski } 792*b1cdbd2cSJim Jagielski 793*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GrabFocus()794*b1cdbd2cSJim Jagielski void RoadmapItem::GrabFocus() 795*b1cdbd2cSJim Jagielski { 796*b1cdbd2cSJim Jagielski if ( mpDescription ) 797*b1cdbd2cSJim Jagielski mpDescription->GrabFocus(); 798*b1cdbd2cSJim Jagielski } 799*b1cdbd2cSJim Jagielski 800*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetInteractive(sal_Bool _bInteractive)801*b1cdbd2cSJim Jagielski void RoadmapItem::SetInteractive( sal_Bool _bInteractive ) 802*b1cdbd2cSJim Jagielski { 803*b1cdbd2cSJim Jagielski if ( mpDescription ) 804*b1cdbd2cSJim Jagielski mpDescription->SetInteractive(_bInteractive); 805*b1cdbd2cSJim Jagielski } 806*b1cdbd2cSJim Jagielski 807*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetID(sal_Int16 _ID)808*b1cdbd2cSJim Jagielski void RoadmapItem::SetID( sal_Int16 _ID ) 809*b1cdbd2cSJim Jagielski { 810*b1cdbd2cSJim Jagielski if ( mpDescription ) 811*b1cdbd2cSJim Jagielski mpDescription->SetID(_ID); 812*b1cdbd2cSJim Jagielski } 813*b1cdbd2cSJim Jagielski 814*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetID() const815*b1cdbd2cSJim Jagielski sal_Int16 RoadmapItem::GetID() const 816*b1cdbd2cSJim Jagielski { 817*b1cdbd2cSJim Jagielski return mpDescription ? mpDescription->GetID() : sal_Int16(-1); 818*b1cdbd2cSJim Jagielski } 819*b1cdbd2cSJim Jagielski 820*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ImplUpdateIndex(const ItemIndex _nIndex)821*b1cdbd2cSJim Jagielski void RoadmapItem::ImplUpdateIndex( const ItemIndex _nIndex ) 822*b1cdbd2cSJim Jagielski { 823*b1cdbd2cSJim Jagielski if ( mpDescription ) 824*b1cdbd2cSJim Jagielski mpDescription->SetIndex( _nIndex ); 825*b1cdbd2cSJim Jagielski 826*b1cdbd2cSJim Jagielski if ( mpID ) 827*b1cdbd2cSJim Jagielski { 828*b1cdbd2cSJim Jagielski ::rtl::OUString aIDText = ::rtl::OUString::valueOf( (sal_Int32)( _nIndex + 1 ) ) + ::rtl::OUString::createFromAscii( "." ); 829*b1cdbd2cSJim Jagielski mpID->SetText( aIDText ); 830*b1cdbd2cSJim Jagielski } 831*b1cdbd2cSJim Jagielski 832*b1cdbd2cSJim Jagielski // update the geometry of both controls 833*b1cdbd2cSJim Jagielski ImplUpdatePosSize(); 834*b1cdbd2cSJim Jagielski } 835*b1cdbd2cSJim Jagielski 836*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetIndex(ItemIndex _Index)837*b1cdbd2cSJim Jagielski void RoadmapItem::SetIndex( ItemIndex _Index ) 838*b1cdbd2cSJim Jagielski { 839*b1cdbd2cSJim Jagielski ImplUpdateIndex( _Index ); 840*b1cdbd2cSJim Jagielski } 841*b1cdbd2cSJim Jagielski 842*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetIndex() const843*b1cdbd2cSJim Jagielski RoadmapTypes::ItemIndex RoadmapItem::GetIndex() const 844*b1cdbd2cSJim Jagielski { 845*b1cdbd2cSJim Jagielski return mpDescription ? mpDescription->GetIndex() : ItemIndex(-1); 846*b1cdbd2cSJim Jagielski } 847*b1cdbd2cSJim Jagielski 848*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetLabel(const::rtl::OUString & _rText)849*b1cdbd2cSJim Jagielski void RoadmapItem::SetLabel( const ::rtl::OUString& _rText ) 850*b1cdbd2cSJim Jagielski { 851*b1cdbd2cSJim Jagielski if ( mpDescription ) 852*b1cdbd2cSJim Jagielski mpDescription->SetText(_rText); 853*b1cdbd2cSJim Jagielski } 854*b1cdbd2cSJim Jagielski 855*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetLabel()856*b1cdbd2cSJim Jagielski ::rtl::OUString RoadmapItem::GetLabel( ) 857*b1cdbd2cSJim Jagielski { 858*b1cdbd2cSJim Jagielski return mpDescription ? mpDescription->GetText() : String(); 859*b1cdbd2cSJim Jagielski } 860*b1cdbd2cSJim Jagielski 861*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetPosition(RoadmapItem * _pOldItem)862*b1cdbd2cSJim Jagielski void RoadmapItem::SetPosition( RoadmapItem* _pOldItem ) 863*b1cdbd2cSJim Jagielski { 864*b1cdbd2cSJim Jagielski Point aIDPos; 865*b1cdbd2cSJim Jagielski if ( _pOldItem == NULL ) 866*b1cdbd2cSJim Jagielski { 867*b1cdbd2cSJim Jagielski aIDPos = mpID->LogicToPixel( Point( ROADMAP_INDENT_X, ROADMAP_INDENT_Y ), MAP_APPFONT ); 868*b1cdbd2cSJim Jagielski } 869*b1cdbd2cSJim Jagielski else 870*b1cdbd2cSJim Jagielski { 871*b1cdbd2cSJim Jagielski Size aOldSize = _pOldItem->GetDescriptionHyperLabel()->GetSizePixel(); 872*b1cdbd2cSJim Jagielski 873*b1cdbd2cSJim Jagielski aIDPos = _pOldItem->mpID->GetPosPixel(); 874*b1cdbd2cSJim Jagielski aIDPos.Y() += aOldSize.Height(); 875*b1cdbd2cSJim Jagielski aIDPos.Y() += mpID->GetParent()->LogicToPixel( Size( 0, ROADMAP_ITEM_DISTANCE_Y ) ).Height(); 876*b1cdbd2cSJim Jagielski } 877*b1cdbd2cSJim Jagielski mpID->SetPosPixel( aIDPos ); 878*b1cdbd2cSJim Jagielski 879*b1cdbd2cSJim Jagielski sal_Int32 nDescPos = aIDPos.X() + mpID->GetSizePixel().Width(); 880*b1cdbd2cSJim Jagielski mpDescription->SetPosPixel( Point( nDescPos, aIDPos.Y() ) ); 881*b1cdbd2cSJim Jagielski } 882*b1cdbd2cSJim Jagielski 883*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetZOrder(RoadmapItem * pRefRoadmapHyperLabel,sal_uInt16 nFlags)884*b1cdbd2cSJim Jagielski void RoadmapItem::SetZOrder( RoadmapItem* pRefRoadmapHyperLabel, sal_uInt16 nFlags ) 885*b1cdbd2cSJim Jagielski { 886*b1cdbd2cSJim Jagielski if (pRefRoadmapHyperLabel == NULL) 887*b1cdbd2cSJim Jagielski mpDescription->SetZOrder( NULL, nFlags); //WINDOW_ZORDER_FIRST ); 888*b1cdbd2cSJim Jagielski else 889*b1cdbd2cSJim Jagielski mpDescription->SetZOrder( pRefRoadmapHyperLabel->mpDescription, nFlags); //, WINDOW_ZORDER_BEHIND ); 890*b1cdbd2cSJim Jagielski } 891*b1cdbd2cSJim Jagielski 892*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- Enable(sal_Bool _bEnable)893*b1cdbd2cSJim Jagielski void RoadmapItem::Enable( sal_Bool _bEnable) 894*b1cdbd2cSJim Jagielski { 895*b1cdbd2cSJim Jagielski mpID->Enable(_bEnable); 896*b1cdbd2cSJim Jagielski mpDescription->Enable(_bEnable); 897*b1cdbd2cSJim Jagielski } 898*b1cdbd2cSJim Jagielski 899*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- IsEnabled() const900*b1cdbd2cSJim Jagielski sal_Bool RoadmapItem::IsEnabled() const 901*b1cdbd2cSJim Jagielski { 902*b1cdbd2cSJim Jagielski return mpID->IsEnabled(); 903*b1cdbd2cSJim Jagielski } 904*b1cdbd2cSJim Jagielski 905*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ToggleBackgroundColor(const Color & _rGBColor)906*b1cdbd2cSJim Jagielski void RoadmapItem::ToggleBackgroundColor( const Color& _rGBColor ) 907*b1cdbd2cSJim Jagielski { 908*b1cdbd2cSJim Jagielski if (_rGBColor == COL_TRANSPARENT) 909*b1cdbd2cSJim Jagielski { 910*b1cdbd2cSJim Jagielski mpID->SetTextColor( mpID->GetSettings().GetStyleSettings().GetFieldTextColor( ) ); 911*b1cdbd2cSJim Jagielski mpID->SetControlBackground( COL_TRANSPARENT ); 912*b1cdbd2cSJim Jagielski } 913*b1cdbd2cSJim Jagielski else 914*b1cdbd2cSJim Jagielski { 915*b1cdbd2cSJim Jagielski mpID->SetControlBackground( mpID->GetSettings().GetStyleSettings().GetHighlightColor() ); 916*b1cdbd2cSJim Jagielski mpID->SetTextColor( mpID->GetSettings().GetStyleSettings().GetHighlightTextColor( ) ); 917*b1cdbd2cSJim Jagielski } 918*b1cdbd2cSJim Jagielski mpDescription->ToggleBackgroundColor(_rGBColor); 919*b1cdbd2cSJim Jagielski } 920*b1cdbd2cSJim Jagielski 921*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ImplUpdatePosSize()922*b1cdbd2cSJim Jagielski void RoadmapItem::ImplUpdatePosSize() 923*b1cdbd2cSJim Jagielski { 924*b1cdbd2cSJim Jagielski // calculate widths 925*b1cdbd2cSJim Jagielski long nIDWidth = mpID->GetTextWidth( mpID->GetText() ); 926*b1cdbd2cSJim Jagielski long nMaxIDWidth = mpID->GetTextWidth( ::rtl::OUString::createFromAscii( "100." ) ); 927*b1cdbd2cSJim Jagielski nIDWidth = ::std::min( nIDWidth, nMaxIDWidth ); 928*b1cdbd2cSJim Jagielski 929*b1cdbd2cSJim Jagielski // check how many space the description would need 930*b1cdbd2cSJim Jagielski Size aDescriptionSize = mpDescription->CalcMinimumSize( m_aItemPlayground.Width() - nIDWidth ); 931*b1cdbd2cSJim Jagielski 932*b1cdbd2cSJim Jagielski // position and size both controls 933*b1cdbd2cSJim Jagielski Size aIDSize( nIDWidth, aDescriptionSize.Height() ); 934*b1cdbd2cSJim Jagielski mpID->SetSizePixel( aIDSize ); 935*b1cdbd2cSJim Jagielski 936*b1cdbd2cSJim Jagielski Point aIDPos = mpID->GetPosPixel(); 937*b1cdbd2cSJim Jagielski mpDescription->SetPosPixel( Point( aIDPos.X() + nIDWidth, aIDPos.Y() ) ); 938*b1cdbd2cSJim Jagielski mpDescription->SetSizePixel( aDescriptionSize ); 939*b1cdbd2cSJim Jagielski } 940*b1cdbd2cSJim Jagielski 941*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- Update(ItemIndex _RMIndex,const::rtl::OUString & _rText)942*b1cdbd2cSJim Jagielski void RoadmapItem::Update( ItemIndex _RMIndex, const ::rtl::OUString& _rText ) 943*b1cdbd2cSJim Jagielski { 944*b1cdbd2cSJim Jagielski // update description label 945*b1cdbd2cSJim Jagielski mpDescription->SetLabel( _rText ); 946*b1cdbd2cSJim Jagielski 947*b1cdbd2cSJim Jagielski // update the index in both controls, which triggers updating the geometry of both 948*b1cdbd2cSJim Jagielski ImplUpdateIndex( _RMIndex ); 949*b1cdbd2cSJim Jagielski } 950*b1cdbd2cSJim Jagielski 951*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ~RoadmapItem()952*b1cdbd2cSJim Jagielski RoadmapItem::~RoadmapItem( ) 953*b1cdbd2cSJim Jagielski { 954*b1cdbd2cSJim Jagielski { 955*b1cdbd2cSJim Jagielski ::std::auto_ptr<Control> aTemp(mpID); 956*b1cdbd2cSJim Jagielski mpID = NULL; 957*b1cdbd2cSJim Jagielski } 958*b1cdbd2cSJim Jagielski { 959*b1cdbd2cSJim Jagielski ::std::auto_ptr<Control> aTemp(mpDescription); 960*b1cdbd2cSJim Jagielski mpDescription = NULL; 961*b1cdbd2cSJim Jagielski } 962*b1cdbd2cSJim Jagielski } 963*b1cdbd2cSJim Jagielski 964*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- SetClickHdl(const Link & rLink)965*b1cdbd2cSJim Jagielski void RoadmapItem::SetClickHdl( const Link& rLink ) 966*b1cdbd2cSJim Jagielski { 967*b1cdbd2cSJim Jagielski if ( mpDescription ) 968*b1cdbd2cSJim Jagielski mpDescription->SetClickHdl( rLink); 969*b1cdbd2cSJim Jagielski } 970*b1cdbd2cSJim Jagielski 971*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- GetClickHdl() const972*b1cdbd2cSJim Jagielski const Link& RoadmapItem::GetClickHdl( ) const 973*b1cdbd2cSJim Jagielski { 974*b1cdbd2cSJim Jagielski return mpDescription->GetClickHdl(); 975*b1cdbd2cSJim Jagielski } 976*b1cdbd2cSJim Jagielski 977*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- IDLabel(Window * _pParent,WinBits _nWinStyle)978*b1cdbd2cSJim Jagielski IDLabel::IDLabel( Window* _pParent, WinBits _nWinStyle ) 979*b1cdbd2cSJim Jagielski :FixedText( _pParent, _nWinStyle ) 980*b1cdbd2cSJim Jagielski { 981*b1cdbd2cSJim Jagielski 982*b1cdbd2cSJim Jagielski } 983*b1cdbd2cSJim Jagielski 984*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- ~IDLabel()985*b1cdbd2cSJim Jagielski IDLabel::~IDLabel( ) 986*b1cdbd2cSJim Jagielski { 987*b1cdbd2cSJim Jagielski } 988*b1cdbd2cSJim Jagielski 989*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------- DataChanged(const DataChangedEvent & rDCEvt)990*b1cdbd2cSJim Jagielski void IDLabel::DataChanged( const DataChangedEvent& rDCEvt ) 991*b1cdbd2cSJim Jagielski { 992*b1cdbd2cSJim Jagielski const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 993*b1cdbd2cSJim Jagielski FixedText::DataChanged( rDCEvt ); 994*b1cdbd2cSJim Jagielski if ((( rDCEvt.GetType() == DATACHANGED_SETTINGS ) || 995*b1cdbd2cSJim Jagielski ( rDCEvt.GetType() == DATACHANGED_DISPLAY )) && 996*b1cdbd2cSJim Jagielski ( rDCEvt.GetFlags() & SETTINGS_STYLE )) 997*b1cdbd2cSJim Jagielski { 998*b1cdbd2cSJim Jagielski const Color& rGBColor = GetControlBackground(); 999*b1cdbd2cSJim Jagielski if (rGBColor == COL_TRANSPARENT) 1000*b1cdbd2cSJim Jagielski SetTextColor( rStyleSettings.GetFieldTextColor( ) ); 1001*b1cdbd2cSJim Jagielski else 1002*b1cdbd2cSJim Jagielski { 1003*b1cdbd2cSJim Jagielski SetControlBackground(rStyleSettings.GetHighlightColor()); 1004*b1cdbd2cSJim Jagielski SetTextColor( rStyleSettings.GetHighlightTextColor( ) ); 1005*b1cdbd2cSJim Jagielski } 1006*b1cdbd2cSJim Jagielski Invalidate(); 1007*b1cdbd2cSJim Jagielski } 1008*b1cdbd2cSJim Jagielski } 1009*b1cdbd2cSJim Jagielski 1010*b1cdbd2cSJim Jagielski 1011*b1cdbd2cSJim Jagielski 1012*b1cdbd2cSJim Jagielski 1013*b1cdbd2cSJim Jagielski //......................................................................... 1014*b1cdbd2cSJim Jagielski } // namespace svt 1015*b1cdbd2cSJim Jagielski //......................................................................... 1016