1*5900e8ecSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*5900e8ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*5900e8ecSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*5900e8ecSAndrew Rist * distributed with this work for additional information
6*5900e8ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*5900e8ecSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*5900e8ecSAndrew Rist * "License"); you may not use this file except in compliance
9*5900e8ecSAndrew Rist * with the License. You may obtain a copy of the License at
10*5900e8ecSAndrew Rist *
11*5900e8ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*5900e8ecSAndrew Rist *
13*5900e8ecSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*5900e8ecSAndrew Rist * software distributed under the License is distributed on an
15*5900e8ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5900e8ecSAndrew Rist * KIND, either express or implied. See the License for the
17*5900e8ecSAndrew Rist * specific language governing permissions and limitations
18*5900e8ecSAndrew Rist * under the License.
19*5900e8ecSAndrew Rist *
20*5900e8ecSAndrew Rist *************************************************************/
21*5900e8ecSAndrew Rist
22*5900e8ecSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svtools.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #define _TASKBAR_CXX
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include <tools/list.hxx>
30cdf0e10cSrcweir #include <tools/debug.hxx>
31cdf0e10cSrcweir #include <tools/date.hxx>
32cdf0e10cSrcweir #include <vcl/image.hxx>
33cdf0e10cSrcweir #include <vcl/help.hxx>
34cdf0e10cSrcweir #include <vcl/svapp.hxx>
35cdf0e10cSrcweir #include <unotools/calendarwrapper.hxx>
36cdf0e10cSrcweir #include <unotools/syslocale.hxx>
37cdf0e10cSrcweir #include <svtools/taskbar.hxx>
38cdf0e10cSrcweir
39cdf0e10cSrcweir // =======================================================================
40cdf0e10cSrcweir
41cdf0e10cSrcweir #define TASKSTATUSBAR_CLOCXOFFX 3
42cdf0e10cSrcweir #define TASKSTATUSBAR_IMAGEOFFX 1
43cdf0e10cSrcweir
44cdf0e10cSrcweir // =======================================================================
45cdf0e10cSrcweir
46cdf0e10cSrcweir struct ImplTaskSBFldItem
47cdf0e10cSrcweir {
48cdf0e10cSrcweir TaskStatusFieldItem maItem;
49cdf0e10cSrcweir sal_uInt16 mnId;
50cdf0e10cSrcweir long mnOffX;
51cdf0e10cSrcweir };
52cdf0e10cSrcweir
DECLARE_LIST(ImplTaskSBItemList,ImplTaskSBFldItem *)53cdf0e10cSrcweir DECLARE_LIST( ImplTaskSBItemList, ImplTaskSBFldItem* )
54cdf0e10cSrcweir
55cdf0e10cSrcweir // =======================================================================
56cdf0e10cSrcweir
57cdf0e10cSrcweir sal_Bool ITaskStatusNotify::MouseButtonDown( sal_uInt16, const MouseEvent& )
58cdf0e10cSrcweir {
59cdf0e10cSrcweir return sal_False;
60cdf0e10cSrcweir }
61cdf0e10cSrcweir
62cdf0e10cSrcweir // -----------------------------------------------------------------------
63cdf0e10cSrcweir
MouseButtonUp(sal_uInt16,const MouseEvent &)64cdf0e10cSrcweir sal_Bool ITaskStatusNotify::MouseButtonUp( sal_uInt16, const MouseEvent& )
65cdf0e10cSrcweir {
66cdf0e10cSrcweir return sal_False;
67cdf0e10cSrcweir }
68cdf0e10cSrcweir
69cdf0e10cSrcweir // -----------------------------------------------------------------------
70cdf0e10cSrcweir
MouseMove(sal_uInt16,const MouseEvent &)71cdf0e10cSrcweir sal_Bool ITaskStatusNotify::MouseMove( sal_uInt16, const MouseEvent& )
72cdf0e10cSrcweir {
73cdf0e10cSrcweir return sal_False;
74cdf0e10cSrcweir }
75cdf0e10cSrcweir
76cdf0e10cSrcweir // -----------------------------------------------------------------------
77cdf0e10cSrcweir
Command(sal_uInt16,const CommandEvent &)78cdf0e10cSrcweir sal_Bool ITaskStatusNotify::Command( sal_uInt16, const CommandEvent& )
79cdf0e10cSrcweir {
80cdf0e10cSrcweir return sal_False;
81cdf0e10cSrcweir }
82cdf0e10cSrcweir
83cdf0e10cSrcweir // -----------------------------------------------------------------------
84cdf0e10cSrcweir
UpdateHelp(sal_uInt16)85cdf0e10cSrcweir sal_Bool ITaskStatusNotify::UpdateHelp( sal_uInt16 )
86cdf0e10cSrcweir {
87cdf0e10cSrcweir return sal_False;
88cdf0e10cSrcweir }
89cdf0e10cSrcweir
90cdf0e10cSrcweir // =======================================================================
91cdf0e10cSrcweir
TaskStatusFieldItem()92cdf0e10cSrcweir TaskStatusFieldItem::TaskStatusFieldItem()
93cdf0e10cSrcweir {
94cdf0e10cSrcweir mpNotify = NULL;
95cdf0e10cSrcweir mnFlags = 0;
96cdf0e10cSrcweir }
97cdf0e10cSrcweir
98cdf0e10cSrcweir // -----------------------------------------------------------------------
99cdf0e10cSrcweir
TaskStatusFieldItem(const TaskStatusFieldItem & rItem)100cdf0e10cSrcweir TaskStatusFieldItem::TaskStatusFieldItem( const TaskStatusFieldItem& rItem ) :
101cdf0e10cSrcweir mpNotify( rItem.mpNotify ),
102cdf0e10cSrcweir maImage( rItem.maImage ),
103cdf0e10cSrcweir maQuickHelpText( rItem.maQuickHelpText ),
104cdf0e10cSrcweir maHelpText( rItem.maHelpText ),
105cdf0e10cSrcweir mnFlags( rItem.mnFlags )
106cdf0e10cSrcweir {
107cdf0e10cSrcweir }
108cdf0e10cSrcweir
109cdf0e10cSrcweir // -----------------------------------------------------------------------
110cdf0e10cSrcweir
TaskStatusFieldItem(ITaskStatusNotify * pNotify,const Image & rImage,const XubString & rQuickHelpText,const XubString & rHelpText,sal_uInt16 nFlags)111cdf0e10cSrcweir TaskStatusFieldItem::TaskStatusFieldItem( ITaskStatusNotify* pNotify,
112cdf0e10cSrcweir const Image& rImage,
113cdf0e10cSrcweir const XubString& rQuickHelpText,
114cdf0e10cSrcweir const XubString& rHelpText,
115cdf0e10cSrcweir sal_uInt16 nFlags ) :
116cdf0e10cSrcweir mpNotify( pNotify ),
117cdf0e10cSrcweir maImage( rImage ),
118cdf0e10cSrcweir maQuickHelpText( rQuickHelpText ),
119cdf0e10cSrcweir maHelpText( rHelpText ),
120cdf0e10cSrcweir mnFlags( nFlags )
121cdf0e10cSrcweir {
122cdf0e10cSrcweir }
123cdf0e10cSrcweir
124cdf0e10cSrcweir // -----------------------------------------------------------------------
125cdf0e10cSrcweir
~TaskStatusFieldItem()126cdf0e10cSrcweir TaskStatusFieldItem::~TaskStatusFieldItem()
127cdf0e10cSrcweir {
128cdf0e10cSrcweir }
129cdf0e10cSrcweir
130cdf0e10cSrcweir // -----------------------------------------------------------------------
131cdf0e10cSrcweir
operator =(const TaskStatusFieldItem & rItem)132cdf0e10cSrcweir const TaskStatusFieldItem& TaskStatusFieldItem::operator=( const TaskStatusFieldItem& rItem )
133cdf0e10cSrcweir {
134cdf0e10cSrcweir mpNotify = rItem.mpNotify;
135cdf0e10cSrcweir maImage = rItem.maImage;
136cdf0e10cSrcweir maQuickHelpText = rItem.maQuickHelpText;
137cdf0e10cSrcweir maHelpText = rItem.maHelpText;
138cdf0e10cSrcweir mnFlags = rItem.mnFlags;
139cdf0e10cSrcweir return *this;
140cdf0e10cSrcweir }
141cdf0e10cSrcweir
142cdf0e10cSrcweir // =======================================================================
143cdf0e10cSrcweir
TaskStatusBar(Window * pParent,WinBits nWinStyle)144cdf0e10cSrcweir TaskStatusBar::TaskStatusBar( Window* pParent, WinBits nWinStyle ) :
145cdf0e10cSrcweir StatusBar( pParent, nWinStyle | WB_3DLOOK ),
146cdf0e10cSrcweir maTime( 0, 0, 0 )
147cdf0e10cSrcweir {
148cdf0e10cSrcweir mpFieldItemList = NULL;
149cdf0e10cSrcweir mpNotifyTaskBar = NULL;
150cdf0e10cSrcweir mpNotify = NULL;
151cdf0e10cSrcweir mnClockWidth = 0;
152cdf0e10cSrcweir mnItemWidth = 0;
153cdf0e10cSrcweir mnFieldWidth = 0;
154cdf0e10cSrcweir mnFieldFlags = 0;
155cdf0e10cSrcweir mbFlashItems = sal_False;
156cdf0e10cSrcweir mbOutInterval = sal_False;
157cdf0e10cSrcweir
158cdf0e10cSrcweir maTimer.SetTimeoutHdl( LINK( this, TaskStatusBar, ImplTimerHdl ) );
159cdf0e10cSrcweir }
160cdf0e10cSrcweir
161cdf0e10cSrcweir // -----------------------------------------------------------------------
162cdf0e10cSrcweir
~TaskStatusBar()163cdf0e10cSrcweir TaskStatusBar::~TaskStatusBar()
164cdf0e10cSrcweir {
165cdf0e10cSrcweir if ( mpFieldItemList )
166cdf0e10cSrcweir {
167cdf0e10cSrcweir ImplTaskSBFldItem* pItem = mpFieldItemList->First();
168cdf0e10cSrcweir while ( pItem )
169cdf0e10cSrcweir {
170cdf0e10cSrcweir delete pItem;
171cdf0e10cSrcweir pItem = mpFieldItemList->Next();
172cdf0e10cSrcweir }
173cdf0e10cSrcweir
174cdf0e10cSrcweir delete mpFieldItemList;
175cdf0e10cSrcweir }
176cdf0e10cSrcweir }
177cdf0e10cSrcweir
178cdf0e10cSrcweir // -----------------------------------------------------------------------
179cdf0e10cSrcweir
IMPL_LINK(TaskStatusBar,ImplTimerHdl,Timer *,EMPTYARG)180cdf0e10cSrcweir IMPL_LINK( TaskStatusBar, ImplTimerHdl, Timer*, EMPTYARG )
181cdf0e10cSrcweir {
182cdf0e10cSrcweir sal_Bool bUpdate = ImplUpdateClock();
183cdf0e10cSrcweir if ( ImplUpdateFlashItems() )
184cdf0e10cSrcweir bUpdate = sal_True;
185cdf0e10cSrcweir if ( bUpdate )
186cdf0e10cSrcweir SetItemData( TASKSTATUSBAR_STATUSFIELDID, NULL );
187cdf0e10cSrcweir
188cdf0e10cSrcweir return 0;
189cdf0e10cSrcweir }
190cdf0e10cSrcweir
191cdf0e10cSrcweir // -----------------------------------------------------------------------
192cdf0e10cSrcweir
ImplGetFieldItem(sal_uInt16 nItemId) const193cdf0e10cSrcweir ImplTaskSBFldItem* TaskStatusBar::ImplGetFieldItem( sal_uInt16 nItemId ) const
194cdf0e10cSrcweir {
195cdf0e10cSrcweir if ( !mpFieldItemList )
196cdf0e10cSrcweir return NULL;
197cdf0e10cSrcweir
198cdf0e10cSrcweir ImplTaskSBFldItem* pItem = mpFieldItemList->First();
199cdf0e10cSrcweir while ( pItem )
200cdf0e10cSrcweir {
201cdf0e10cSrcweir if ( pItem->mnId == nItemId )
202cdf0e10cSrcweir return pItem;
203cdf0e10cSrcweir
204cdf0e10cSrcweir pItem = mpFieldItemList->Next();
205cdf0e10cSrcweir }
206cdf0e10cSrcweir
207cdf0e10cSrcweir return NULL;
208cdf0e10cSrcweir }
209cdf0e10cSrcweir
210cdf0e10cSrcweir // -----------------------------------------------------------------------
211cdf0e10cSrcweir
ImplGetFieldItem(const Point & rPos,sal_Bool & rFieldRect) const212cdf0e10cSrcweir ImplTaskSBFldItem* TaskStatusBar::ImplGetFieldItem( const Point& rPos, sal_Bool& rFieldRect ) const
213cdf0e10cSrcweir {
214cdf0e10cSrcweir if ( GetItemId( rPos ) == TASKSTATUSBAR_STATUSFIELDID )
215cdf0e10cSrcweir {
216cdf0e10cSrcweir rFieldRect = sal_True;
217cdf0e10cSrcweir
218cdf0e10cSrcweir if ( mpFieldItemList )
219cdf0e10cSrcweir {
220cdf0e10cSrcweir long nX = rPos.X()-GetItemRect( TASKSTATUSBAR_STATUSFIELDID ).Left();
221cdf0e10cSrcweir ImplTaskSBFldItem* pItem = mpFieldItemList->First();
222cdf0e10cSrcweir while ( pItem )
223cdf0e10cSrcweir {
224cdf0e10cSrcweir if ( nX < pItem->mnOffX+pItem->maItem.GetImage().GetSizePixel().Width() )
225cdf0e10cSrcweir return pItem;
226cdf0e10cSrcweir
227cdf0e10cSrcweir pItem = mpFieldItemList->Next();
228cdf0e10cSrcweir }
229cdf0e10cSrcweir }
230cdf0e10cSrcweir }
231cdf0e10cSrcweir else
232cdf0e10cSrcweir rFieldRect = sal_False;
233cdf0e10cSrcweir
234cdf0e10cSrcweir return NULL;
235cdf0e10cSrcweir }
236cdf0e10cSrcweir
237cdf0e10cSrcweir // -----------------------------------------------------------------------
238cdf0e10cSrcweir
ImplUpdateClock()239cdf0e10cSrcweir sal_Bool TaskStatusBar::ImplUpdateClock()
240cdf0e10cSrcweir {
241cdf0e10cSrcweir if ( mnFieldFlags & TASKSTATUSFIELD_CLOCK )
242cdf0e10cSrcweir {
243cdf0e10cSrcweir Time aTime;
244cdf0e10cSrcweir maTimer.SetTimeout( ((long)60000)-((aTime.GetSec()*1000)+(aTime.Get100Sec()*10)) );
245cdf0e10cSrcweir if ( (aTime.GetMin() != maTime.GetMin()) ||
246cdf0e10cSrcweir (aTime.GetHour() != maTime.GetHour()) )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir maTime = aTime;
249cdf0e10cSrcweir maTimeText = SvtSysLocale().GetLocaleData().getTime( aTime, sal_False, sal_False );
250cdf0e10cSrcweir return sal_True;
251cdf0e10cSrcweir }
252cdf0e10cSrcweir }
253cdf0e10cSrcweir
254cdf0e10cSrcweir return sal_False;
255cdf0e10cSrcweir }
256cdf0e10cSrcweir
257cdf0e10cSrcweir // -----------------------------------------------------------------------
258cdf0e10cSrcweir
ImplUpdateFlashItems()259cdf0e10cSrcweir sal_Bool TaskStatusBar::ImplUpdateFlashItems()
260cdf0e10cSrcweir {
261cdf0e10cSrcweir if ( mbFlashItems )
262cdf0e10cSrcweir {
263cdf0e10cSrcweir if ( mbOutInterval )
264cdf0e10cSrcweir {
265cdf0e10cSrcweir maTimer.SetTimeout( 900 );
266cdf0e10cSrcweir mbOutInterval = sal_False;
267cdf0e10cSrcweir }
268cdf0e10cSrcweir else
269cdf0e10cSrcweir {
270cdf0e10cSrcweir maTimer.SetTimeout( 700 );
271cdf0e10cSrcweir mbOutInterval = sal_True;
272cdf0e10cSrcweir }
273cdf0e10cSrcweir
274cdf0e10cSrcweir return sal_True;
275cdf0e10cSrcweir }
276cdf0e10cSrcweir
277cdf0e10cSrcweir return sal_False;
278cdf0e10cSrcweir }
279cdf0e10cSrcweir
280cdf0e10cSrcweir // -----------------------------------------------------------------------
281cdf0e10cSrcweir
ImplUpdateField(sal_Bool bItems)282cdf0e10cSrcweir void TaskStatusBar::ImplUpdateField( sal_Bool bItems )
283cdf0e10cSrcweir {
284cdf0e10cSrcweir maTimer.Stop();
285cdf0e10cSrcweir
286cdf0e10cSrcweir if ( bItems )
287cdf0e10cSrcweir {
288cdf0e10cSrcweir ImplTaskSBFldItem* pItem = mpFieldItemList->First();
289cdf0e10cSrcweir mnItemWidth = 0;
290cdf0e10cSrcweir mbFlashItems = sal_False;
291cdf0e10cSrcweir mbOutInterval = sal_False;
292cdf0e10cSrcweir while ( pItem )
293cdf0e10cSrcweir {
294cdf0e10cSrcweir mnItemWidth += TASKSTATUSBAR_IMAGEOFFX;
295cdf0e10cSrcweir pItem->mnOffX = mnItemWidth;
296cdf0e10cSrcweir mnItemWidth += pItem->maItem.GetImage().GetSizePixel().Width();
297cdf0e10cSrcweir if ( pItem->maItem.GetFlags() & TASKSTATUSFIELDITEM_FLASH )
298cdf0e10cSrcweir mbFlashItems = sal_True;
299cdf0e10cSrcweir
300cdf0e10cSrcweir pItem = mpFieldItemList->Next();
301cdf0e10cSrcweir }
302cdf0e10cSrcweir }
303cdf0e10cSrcweir else
304cdf0e10cSrcweir {
305cdf0e10cSrcweir if ( mnFieldFlags & TASKSTATUSFIELD_CLOCK )
306cdf0e10cSrcweir {
307cdf0e10cSrcweir XubString aStr = SvtSysLocale().GetLocaleData().getTime( Time( 23, 59, 59 ), sal_False, sal_False );
308cdf0e10cSrcweir mnClockWidth = GetTextWidth( aStr )+(TASKSTATUSBAR_CLOCXOFFX*2);
309cdf0e10cSrcweir }
310cdf0e10cSrcweir else
311cdf0e10cSrcweir mnClockWidth = 0;
312cdf0e10cSrcweir }
313cdf0e10cSrcweir
314cdf0e10cSrcweir long nNewWidth = mnItemWidth+mnClockWidth;
315cdf0e10cSrcweir if ( mnItemWidth && !mnClockWidth )
316cdf0e10cSrcweir nNewWidth += TASKSTATUSBAR_IMAGEOFFX;
317cdf0e10cSrcweir if ( nNewWidth != mnFieldWidth )
318cdf0e10cSrcweir {
319cdf0e10cSrcweir RemoveItem( TASKSTATUSBAR_STATUSFIELDID );
320cdf0e10cSrcweir
321cdf0e10cSrcweir if ( mnItemWidth || mnClockWidth )
322cdf0e10cSrcweir {
323cdf0e10cSrcweir mnFieldWidth = nNewWidth;
324cdf0e10cSrcweir long nOffset = GetItemOffset( TASKSTATUSBAR_STATUSFIELDID );
325cdf0e10cSrcweir sal_uInt16 nItemPos = GetItemPos( TASKSTATUSBAR_STATUSFIELDID );
326cdf0e10cSrcweir InsertItem( TASKSTATUSBAR_STATUSFIELDID, nNewWidth, SIB_RIGHT | SIB_IN | SIB_USERDRAW, nOffset, nItemPos );
327cdf0e10cSrcweir }
328cdf0e10cSrcweir else
329cdf0e10cSrcweir mnFieldWidth = 0;
330cdf0e10cSrcweir
331cdf0e10cSrcweir if ( mpNotifyTaskBar )
332cdf0e10cSrcweir mpNotifyTaskBar->Resize();
333cdf0e10cSrcweir }
334cdf0e10cSrcweir else
335cdf0e10cSrcweir SetItemData( TASKSTATUSBAR_STATUSFIELDID, NULL );
336cdf0e10cSrcweir
337cdf0e10cSrcweir if ( mbFlashItems || (mnFieldFlags & TASKSTATUSFIELD_CLOCK) )
338cdf0e10cSrcweir {
339cdf0e10cSrcweir ImplUpdateClock();
340cdf0e10cSrcweir mbOutInterval = sal_True;
341cdf0e10cSrcweir ImplUpdateFlashItems();
342cdf0e10cSrcweir maTimer.Start();
343cdf0e10cSrcweir }
344cdf0e10cSrcweir }
345cdf0e10cSrcweir
346cdf0e10cSrcweir // -----------------------------------------------------------------------
347cdf0e10cSrcweir
MouseButtonDown(const MouseEvent & rMEvt)348cdf0e10cSrcweir void TaskStatusBar::MouseButtonDown( const MouseEvent& rMEvt )
349cdf0e10cSrcweir {
350cdf0e10cSrcweir sal_Bool bFieldRect;
351cdf0e10cSrcweir sal_Bool bBaseClass = sal_False;
352cdf0e10cSrcweir ImplTaskSBFldItem* pItem = ImplGetFieldItem( rMEvt.GetPosPixel(), bFieldRect );
353cdf0e10cSrcweir
354cdf0e10cSrcweir ITaskStatusNotify* pNotify = mpNotify;
355cdf0e10cSrcweir sal_uInt16 nItemId = 0;
356cdf0e10cSrcweir
357cdf0e10cSrcweir if ( bFieldRect )
358cdf0e10cSrcweir nItemId = TASKSTATUSBAR_CLOCKID;
359cdf0e10cSrcweir
360cdf0e10cSrcweir if ( pItem )
361cdf0e10cSrcweir {
362cdf0e10cSrcweir pNotify = pItem->maItem.GetNotifyObject();
363cdf0e10cSrcweir nItemId = pItem->mnId;
364cdf0e10cSrcweir }
365cdf0e10cSrcweir
366cdf0e10cSrcweir if ( pNotify )
367cdf0e10cSrcweir bBaseClass = pNotify->MouseButtonDown( nItemId, rMEvt );
368cdf0e10cSrcweir
369cdf0e10cSrcweir if ( bBaseClass )
370cdf0e10cSrcweir StatusBar::MouseButtonDown( rMEvt );
371cdf0e10cSrcweir }
372cdf0e10cSrcweir
373cdf0e10cSrcweir // -----------------------------------------------------------------------
374cdf0e10cSrcweir
MouseButtonUp(const MouseEvent & rMEvt)375cdf0e10cSrcweir void TaskStatusBar::MouseButtonUp( const MouseEvent& rMEvt )
376cdf0e10cSrcweir {
377cdf0e10cSrcweir sal_Bool bFieldRect;
378cdf0e10cSrcweir sal_Bool bBaseClass = sal_False;
379cdf0e10cSrcweir ImplTaskSBFldItem* pItem = ImplGetFieldItem( rMEvt.GetPosPixel(), bFieldRect );
380cdf0e10cSrcweir
381cdf0e10cSrcweir ITaskStatusNotify* pNotify = mpNotify;
382cdf0e10cSrcweir sal_uInt16 nItemId = 0;
383cdf0e10cSrcweir
384cdf0e10cSrcweir if ( bFieldRect )
385cdf0e10cSrcweir nItemId = TASKSTATUSBAR_CLOCKID;
386cdf0e10cSrcweir
387cdf0e10cSrcweir if ( pItem )
388cdf0e10cSrcweir {
389cdf0e10cSrcweir pNotify = pItem->maItem.GetNotifyObject();
390cdf0e10cSrcweir nItemId = pItem->mnId;
391cdf0e10cSrcweir }
392cdf0e10cSrcweir
393cdf0e10cSrcweir if ( pNotify )
394cdf0e10cSrcweir bBaseClass = pNotify->MouseButtonUp( nItemId, rMEvt );
395cdf0e10cSrcweir
396cdf0e10cSrcweir if ( bBaseClass )
397cdf0e10cSrcweir StatusBar::MouseButtonUp( rMEvt );
398cdf0e10cSrcweir }
399cdf0e10cSrcweir
400cdf0e10cSrcweir // -----------------------------------------------------------------------
401cdf0e10cSrcweir
MouseMove(const MouseEvent & rMEvt)402cdf0e10cSrcweir void TaskStatusBar::MouseMove( const MouseEvent& rMEvt )
403cdf0e10cSrcweir {
404cdf0e10cSrcweir sal_Bool bFieldRect;
405cdf0e10cSrcweir sal_Bool bBaseClass = sal_False;
406cdf0e10cSrcweir ImplTaskSBFldItem* pItem = ImplGetFieldItem( rMEvt.GetPosPixel(), bFieldRect );
407cdf0e10cSrcweir
408cdf0e10cSrcweir ITaskStatusNotify* pNotify = mpNotify;
409cdf0e10cSrcweir sal_uInt16 nItemId = 0;
410cdf0e10cSrcweir
411cdf0e10cSrcweir if ( bFieldRect )
412cdf0e10cSrcweir nItemId = TASKSTATUSBAR_CLOCKID;
413cdf0e10cSrcweir
414cdf0e10cSrcweir if ( pItem )
415cdf0e10cSrcweir {
416cdf0e10cSrcweir pNotify = pItem->maItem.GetNotifyObject();
417cdf0e10cSrcweir nItemId = pItem->mnId;
418cdf0e10cSrcweir }
419cdf0e10cSrcweir
420cdf0e10cSrcweir if ( pNotify )
421cdf0e10cSrcweir bBaseClass = pNotify->MouseMove( nItemId, rMEvt );
422cdf0e10cSrcweir
423cdf0e10cSrcweir if ( bBaseClass )
424cdf0e10cSrcweir StatusBar::MouseMove( rMEvt );
425cdf0e10cSrcweir }
426cdf0e10cSrcweir
427cdf0e10cSrcweir // -----------------------------------------------------------------------
428cdf0e10cSrcweir
Command(const CommandEvent & rCEvt)429cdf0e10cSrcweir void TaskStatusBar::Command( const CommandEvent& rCEvt )
430cdf0e10cSrcweir {
431cdf0e10cSrcweir sal_Bool bFieldRect;
432cdf0e10cSrcweir sal_Bool bBaseClass = sal_False;
433cdf0e10cSrcweir ImplTaskSBFldItem* pItem = ImplGetFieldItem( rCEvt.GetMousePosPixel(), bFieldRect );
434cdf0e10cSrcweir
435cdf0e10cSrcweir ITaskStatusNotify* pNotify = mpNotify;
436cdf0e10cSrcweir sal_uInt16 nItemId = 0;
437cdf0e10cSrcweir
438cdf0e10cSrcweir if ( bFieldRect )
439cdf0e10cSrcweir nItemId = TASKSTATUSBAR_CLOCKID;
440cdf0e10cSrcweir
441cdf0e10cSrcweir if ( pItem )
442cdf0e10cSrcweir {
443cdf0e10cSrcweir pNotify = pItem->maItem.GetNotifyObject();
444cdf0e10cSrcweir nItemId = pItem->mnId;
445cdf0e10cSrcweir }
446cdf0e10cSrcweir
447cdf0e10cSrcweir if ( pNotify )
448cdf0e10cSrcweir bBaseClass = pNotify->Command( nItemId, rCEvt );
449cdf0e10cSrcweir
450cdf0e10cSrcweir if ( bBaseClass )
451cdf0e10cSrcweir StatusBar::Command( rCEvt );
452cdf0e10cSrcweir }
453cdf0e10cSrcweir
454cdf0e10cSrcweir // -----------------------------------------------------------------------
455cdf0e10cSrcweir
RequestHelp(const HelpEvent & rHEvt)456cdf0e10cSrcweir void TaskStatusBar::RequestHelp( const HelpEvent& rHEvt )
457cdf0e10cSrcweir {
458cdf0e10cSrcweir sal_Bool bFieldRect;
459cdf0e10cSrcweir ImplTaskSBFldItem* pItem = ImplGetFieldItem( ScreenToOutputPixel( rHEvt.GetMousePosPixel() ), bFieldRect );
460cdf0e10cSrcweir if ( bFieldRect )
461cdf0e10cSrcweir {
462cdf0e10cSrcweir ITaskStatusNotify* pNotify = mpNotify;
463cdf0e10cSrcweir sal_uInt16 nItemId = 0;
464cdf0e10cSrcweir
465cdf0e10cSrcweir if ( pItem )
466cdf0e10cSrcweir {
467cdf0e10cSrcweir pNotify = pItem->maItem.GetNotifyObject();
468cdf0e10cSrcweir nItemId = pItem->mnId;
469cdf0e10cSrcweir }
470cdf0e10cSrcweir
471cdf0e10cSrcweir if ( pNotify )
472cdf0e10cSrcweir pNotify->UpdateHelp( nItemId );
473cdf0e10cSrcweir
474cdf0e10cSrcweir if ( rHEvt.GetMode() & (HELPMODE_BALLOON | HELPMODE_QUICK) )
475cdf0e10cSrcweir {
476cdf0e10cSrcweir Rectangle aItemRect = GetItemRect( TASKSTATUSBAR_STATUSFIELDID );
477cdf0e10cSrcweir Point aPt = OutputToScreenPixel( aItemRect.TopLeft() );
478cdf0e10cSrcweir aItemRect.Left() = aPt.X();
479cdf0e10cSrcweir aItemRect.Top() = aPt.Y();
480cdf0e10cSrcweir aPt = OutputToScreenPixel( aItemRect.BottomRight() );
481cdf0e10cSrcweir aItemRect.Right() = aPt.X();
482cdf0e10cSrcweir aItemRect.Bottom() = aPt.Y();
483cdf0e10cSrcweir if ( pItem )
484cdf0e10cSrcweir {
485cdf0e10cSrcweir if ( rHEvt.GetMode() & HELPMODE_BALLOON )
486cdf0e10cSrcweir {
487cdf0e10cSrcweir XubString aStr = pItem->maItem.GetHelpText();
488cdf0e10cSrcweir if ( !aStr.Len() )
489cdf0e10cSrcweir aStr = pItem->maItem.GetQuickHelpText();
490cdf0e10cSrcweir Help::ShowBalloon( this, aItemRect.Center(), aItemRect, aStr );
491cdf0e10cSrcweir }
492cdf0e10cSrcweir else
493cdf0e10cSrcweir Help::ShowQuickHelp( this, aItemRect, pItem->maItem.GetQuickHelpText() );
494cdf0e10cSrcweir }
495cdf0e10cSrcweir else
496cdf0e10cSrcweir {
497cdf0e10cSrcweir SvtSysLocale aSL;
498cdf0e10cSrcweir const LocaleDataWrapper& rLDW = aSL.GetLocaleData();
499cdf0e10cSrcweir CalendarWrapper aCal( rLDW.getServiceFactory());
500cdf0e10cSrcweir aCal.loadDefaultCalendar( rLDW.getLoadedLocale());
501cdf0e10cSrcweir XubString aStr = rLDW.getLongDate( Date(), aCal );
502cdf0e10cSrcweir if ( rHEvt.GetMode() & HELPMODE_BALLOON )
503cdf0e10cSrcweir Help::ShowBalloon( this, aItemRect.Center(), aItemRect, aStr );
504cdf0e10cSrcweir else
505cdf0e10cSrcweir Help::ShowQuickHelp( this, aItemRect, aStr );
506cdf0e10cSrcweir }
507cdf0e10cSrcweir return;
508cdf0e10cSrcweir }
509cdf0e10cSrcweir else if ( rHEvt.GetMode() & HELPMODE_EXTENDED )
510cdf0e10cSrcweir {
511cdf0e10cSrcweir if ( pItem )
512cdf0e10cSrcweir {
513cdf0e10cSrcweir rtl::OUString aHelpId( rtl::OStringToOUString( pItem->maItem.GetHelpId(), RTL_TEXTENCODING_UTF8 ) );
514cdf0e10cSrcweir if ( aHelpId.getLength() )
515cdf0e10cSrcweir {
516cdf0e10cSrcweir // Wenn eine Hilfe existiert, dann ausloesen
517cdf0e10cSrcweir Help* pHelp = Application::GetHelp();
518cdf0e10cSrcweir if ( pHelp )
519cdf0e10cSrcweir pHelp->Start( aHelpId, this );
520cdf0e10cSrcweir return;
521cdf0e10cSrcweir }
522cdf0e10cSrcweir }
523cdf0e10cSrcweir }
524cdf0e10cSrcweir }
525cdf0e10cSrcweir
526cdf0e10cSrcweir StatusBar::RequestHelp( rHEvt );
527cdf0e10cSrcweir }
528cdf0e10cSrcweir
529cdf0e10cSrcweir // -----------------------------------------------------------------------
530cdf0e10cSrcweir
UserDraw(const UserDrawEvent & rUDEvt)531cdf0e10cSrcweir void TaskStatusBar::UserDraw( const UserDrawEvent& rUDEvt )
532cdf0e10cSrcweir {
533cdf0e10cSrcweir if ( rUDEvt.GetItemId() == TASKSTATUSBAR_STATUSFIELDID )
534cdf0e10cSrcweir {
535cdf0e10cSrcweir OutputDevice* pDev = rUDEvt.GetDevice();
536cdf0e10cSrcweir Rectangle aRect = rUDEvt.GetRect();
537cdf0e10cSrcweir
538cdf0e10cSrcweir if ( mpFieldItemList )
539cdf0e10cSrcweir {
540cdf0e10cSrcweir ImplTaskSBFldItem* pItem = mpFieldItemList->First();
541cdf0e10cSrcweir while ( pItem )
542cdf0e10cSrcweir {
543cdf0e10cSrcweir if ( !mbOutInterval || !(pItem->maItem.GetFlags() & TASKSTATUSFIELDITEM_FLASH) )
544cdf0e10cSrcweir {
545cdf0e10cSrcweir const Image& rImage = pItem->maItem.GetImage();
546cdf0e10cSrcweir Size aImgSize = rImage.GetSizePixel();
547cdf0e10cSrcweir pDev->DrawImage( Point( aRect.Left()+pItem->mnOffX,
548cdf0e10cSrcweir aRect.Top()+((aRect.GetHeight()-aImgSize.Width())/2) ),
549cdf0e10cSrcweir rImage );
550cdf0e10cSrcweir }
551cdf0e10cSrcweir
552cdf0e10cSrcweir pItem = mpFieldItemList->Next();
553cdf0e10cSrcweir }
554cdf0e10cSrcweir }
555cdf0e10cSrcweir
556cdf0e10cSrcweir if ( mnFieldFlags & TASKSTATUSFIELD_CLOCK )
557cdf0e10cSrcweir {
558cdf0e10cSrcweir long nX = mnItemWidth+TASKSTATUSBAR_CLOCXOFFX;
559cdf0e10cSrcweir Point aPos = GetItemTextPos( TASKSTATUSBAR_STATUSFIELDID );
560cdf0e10cSrcweir aPos.X() = aRect.Left()+nX;
561cdf0e10cSrcweir pDev->DrawText( aPos, maTimeText );
562cdf0e10cSrcweir }
563cdf0e10cSrcweir }
564cdf0e10cSrcweir else
565cdf0e10cSrcweir StatusBar::UserDraw( rUDEvt );
566cdf0e10cSrcweir }
567cdf0e10cSrcweir
568cdf0e10cSrcweir // -----------------------------------------------------------------------
569cdf0e10cSrcweir
InsertStatusField(long,sal_uInt16,sal_uInt16 nFlags)570cdf0e10cSrcweir void TaskStatusBar::InsertStatusField( long, sal_uInt16,
571cdf0e10cSrcweir sal_uInt16 nFlags )
572cdf0e10cSrcweir {
573cdf0e10cSrcweir mnFieldFlags = nFlags;
574cdf0e10cSrcweir ImplUpdateField( sal_False );
575cdf0e10cSrcweir }
576cdf0e10cSrcweir
577cdf0e10cSrcweir // -----------------------------------------------------------------------
578cdf0e10cSrcweir
SetFieldFlags(sal_uInt16 nFlags)579cdf0e10cSrcweir void TaskStatusBar::SetFieldFlags( sal_uInt16 nFlags )
580cdf0e10cSrcweir {
581cdf0e10cSrcweir if ( mnFieldFlags != nFlags )
582cdf0e10cSrcweir {
583cdf0e10cSrcweir mnFieldFlags = nFlags;
584cdf0e10cSrcweir ImplUpdateField( sal_False );
585cdf0e10cSrcweir }
586cdf0e10cSrcweir }
587cdf0e10cSrcweir
588cdf0e10cSrcweir // -----------------------------------------------------------------------
589cdf0e10cSrcweir
AddStatusFieldItem(sal_uInt16 nItemId,const TaskStatusFieldItem & rItem,sal_uInt16 nPos)590cdf0e10cSrcweir void TaskStatusBar::AddStatusFieldItem( sal_uInt16 nItemId, const TaskStatusFieldItem& rItem,
591cdf0e10cSrcweir sal_uInt16 nPos )
592cdf0e10cSrcweir {
593cdf0e10cSrcweir DBG_ASSERT( nItemId, "TaskStatusBar::AddStatusFieldItem() - Item is 0" );
594cdf0e10cSrcweir DBG_ASSERT( !ImplGetFieldItem( nItemId ), "TaskStatusBar::AddStatusFieldItem() - Item-Id already exist" );
595cdf0e10cSrcweir
596cdf0e10cSrcweir if ( !mpFieldItemList )
597cdf0e10cSrcweir mpFieldItemList = new ImplTaskSBItemList;
598cdf0e10cSrcweir
599cdf0e10cSrcweir ImplTaskSBFldItem* pItem = new ImplTaskSBFldItem;
600cdf0e10cSrcweir pItem->maItem = rItem;
601cdf0e10cSrcweir pItem->mnId = nItemId;
602cdf0e10cSrcweir pItem->mnOffX = 0;
603cdf0e10cSrcweir mpFieldItemList->Insert( pItem, (sal_uLong)nPos );
604cdf0e10cSrcweir
605cdf0e10cSrcweir ImplUpdateField( sal_True );
606cdf0e10cSrcweir }
607cdf0e10cSrcweir
608cdf0e10cSrcweir // -----------------------------------------------------------------------
609cdf0e10cSrcweir
ModifyStatusFieldItem(sal_uInt16 nItemId,const TaskStatusFieldItem & rItem)610cdf0e10cSrcweir void TaskStatusBar::ModifyStatusFieldItem( sal_uInt16 nItemId, const TaskStatusFieldItem& rItem )
611cdf0e10cSrcweir {
612cdf0e10cSrcweir ImplTaskSBFldItem* pItem = ImplGetFieldItem( nItemId );
613cdf0e10cSrcweir if ( pItem )
614cdf0e10cSrcweir {
615cdf0e10cSrcweir sal_Bool bUpdate = (pItem->maItem.GetImage() != rItem.GetImage()) ||
616cdf0e10cSrcweir (pItem->maItem.GetFlags() != rItem.GetFlags());
617cdf0e10cSrcweir pItem->maItem = rItem;
618cdf0e10cSrcweir if ( bUpdate )
619cdf0e10cSrcweir ImplUpdateField( sal_True );
620cdf0e10cSrcweir }
621cdf0e10cSrcweir }
622cdf0e10cSrcweir
623cdf0e10cSrcweir // -----------------------------------------------------------------------
624cdf0e10cSrcweir
RemoveStatusFieldItem(sal_uInt16 nItemId)625cdf0e10cSrcweir void TaskStatusBar::RemoveStatusFieldItem( sal_uInt16 nItemId )
626cdf0e10cSrcweir {
627cdf0e10cSrcweir ImplTaskSBFldItem* pItem = ImplGetFieldItem( nItemId );
628cdf0e10cSrcweir if ( pItem )
629cdf0e10cSrcweir {
630cdf0e10cSrcweir mpFieldItemList->Remove( pItem );
631cdf0e10cSrcweir delete pItem;
632cdf0e10cSrcweir ImplUpdateField( sal_True );
633cdf0e10cSrcweir }
634cdf0e10cSrcweir }
635cdf0e10cSrcweir
636cdf0e10cSrcweir // -----------------------------------------------------------------------
637cdf0e10cSrcweir
GetStatusFieldItem(sal_uInt16 nItemId,TaskStatusFieldItem & rItem) const638cdf0e10cSrcweir sal_Bool TaskStatusBar::GetStatusFieldItem( sal_uInt16 nItemId, TaskStatusFieldItem& rItem ) const
639cdf0e10cSrcweir {
640cdf0e10cSrcweir ImplTaskSBFldItem* pItem = ImplGetFieldItem( nItemId );
641cdf0e10cSrcweir if ( pItem )
642cdf0e10cSrcweir {
643cdf0e10cSrcweir rItem = pItem->maItem;
644cdf0e10cSrcweir return sal_True;
645cdf0e10cSrcweir }
646cdf0e10cSrcweir
647cdf0e10cSrcweir return sal_False;
648cdf0e10cSrcweir }
649cdf0e10cSrcweir
650