1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: taskbar.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
34 #include "svtools/svtdllapi.h"
35 #include <tools/time.hxx>
36 #ifndef _TOOLS_LIST_HXX
37 #include <tools/list.hxx>
39 #include <vcl/timer.hxx>
40 #include <vcl/toolbox.hxx>
41 #include <vcl/status.hxx>
44 class TaskStatusFieldItem
;
45 class ImplTaskItemList
;
46 class ImplTaskSBItemList
;
47 class ImplTaskBarFloat
;
48 struct ImplTaskSBFldItem
;
59 StartUpdateTask()/UpdateTask()/EndUpdateTask()
60 Diese muessen gerufen werden, wenn die Task upgedatet werden muessen.
61 Dann muss StartUpdateTask() gerufen werden, dann UpdateTask() fuer alle
62 Task's und danach EndUpdateTask() wo dann die TaskButtons entsprechend
63 neu angeordnet werden.
66 Handler der gerufen wird, wenn ein Task aktiviert werden muss. Mit
67 GetTaskItem() kann abgefragt werden, welcher Task aktiviert werden muss.
70 Dieser Handler wird gerufen, wenn ein ContextMenu angezeigt werden soll.
71 Mit GetTaskMode() kann abgefragt werden, ob fuer einen Task oder ein
75 Diese Methode liefert das Item zurueck, welches bei UpdateTask an der
76 entsprechenden Position eingefuegt wurde.
79 Liefert die Position zurueck, wo das Contextmenu angezeigt werden soll.
85 InsertStatusField()/RemoveStatusField()
86 Fuegt ein Statusfeld ein, wo die aktuelle Uhrzeit angezeigt wird. In
87 dieses Feld koennen dann mit AddStatusFielItem(), ModifyStatusFielItem()
88 und RemoveStatusFielItem() Status-Items eingefuegt werden. Bei diesen
89 muss man ein Image angeben, welches dann angezeigt wird. Ausserdem kann
90 man bei diesen noch Hilfe-Texte angeben oder sagen, ob sie blinken
91 sollen und ein Notify-Object, worueber man informiert wird, wenn ein
92 Kontextmenu angezeigt wird oder das Item angeklickt wird. Am
93 TaskStatusBar kann auch ein Notify-Object gesetzt werden, wenn man
94 benachrichtigt werden will, wenn die Uhrzeit oder die TaskStatusBar
95 angeklickt wird. Wenn der Notify fuer die Uhrzeit kommt, ist die
96 Id TASKSTATUSBAR_CLOCKID, wenn er fuer die TaskStatusBar kommt, ist
97 die Id 0. Mit SetFieldFlags() kann am TaskStatusBar auch die Flags
98 hinterher umgesetzt werden, um zum Beispiel die Uhrzeit ein- und
108 WB_BORDER - Border an der oberen Kante
109 WB_SIZEABLE - Zwischen TaskToolBox und TaskStatusBar kann der Anwender
112 Wenn WB_SIZEABLE gesetzt ist, kann die Breite des StatusBars gesetzt und
113 abgefragt werden. Dazu kann man SetStatusSize()/GetStatusSize() aufrufen.
114 0 steht dabei fuer optimale Groesse, was auch der Default ist. Bei einem
115 Doppelklick auf den Trenner kann der Anwender auch wieder die optimale
121 virtual TaskToolBox* TaskBar::CreateButtonBar();
122 virtual TaskToolBox* TaskBar::CreateTaskToolBox();
123 virtual TaskStatusBar* TaskBar::CreateTaskStatusBar();
125 Diese Methoden muesste man ueberladen, wenn man eine eigene Klasse anlegen
128 void TaskBar::ShowStatusText( const String& rText );
129 void TaskBar::HideStatusText();
131 Blendet den ButtonBar und die TaskBar ein bzw. aus um den Hilfetexte in der
132 gesammten Zeile anzuzeigen.
139 class TaskButtonBar
: public ToolBox
141 friend class TaskBar
;
144 TaskBar
* mpNotifyTaskBar
;
151 TaskButtonBar( Window
* pParent
, WinBits nWinStyle
= 0 );
154 virtual void RequestHelp( const HelpEvent
& rHEvt
);
156 void InsertButton( USHORT nItemId
,
157 const Image
& rImage
, const String
& rText
,
158 USHORT nPos
= TOOLBOX_APPEND
)
159 { InsertItem( nItemId
, rImage
, rText
, TIB_LEFT
| TIB_AUTOSIZE
, nPos
); }
160 void RemoveButton( USHORT nItemId
)
161 { RemoveItem( nItemId
); }
164 // ---------------------
165 // - TaskToolBox-Types -
166 // ---------------------
168 #define TASKTOOLBOX_TASK_NOTFOUND ((USHORT)0xFFFF)
174 class SVT_DLLPUBLIC TaskToolBox
: public ToolBox
176 friend class TaskBar
;
179 ImplTaskItemList
* mpItemList
;
180 TaskBar
* mpNotifyTaskBar
;
181 Point maContextMenuPos
;
182 ULONG mnOldItemCount
;
186 USHORT mnUpdateNewPos
;
187 USHORT mnActiveItemId
;
188 USHORT mnNewActivePos
;
194 Link maActivateTaskHdl
;
195 Link maContextMenuHdl
;
198 SVT_DLLPRIVATE
void ImplFormatTaskToolBox();
201 // Forbidden and not implemented.
202 TaskToolBox (const TaskToolBox
&);
203 TaskToolBox
& operator= (const TaskToolBox
&);
206 TaskToolBox( Window
* pParent
, WinBits nWinStyle
= 0 );
209 void ActivateTaskItem( USHORT nItemId
,
210 BOOL bMinActivate
= FALSE
);
211 USHORT
GetTaskItem( const Point
& rPos
) const;
213 virtual void ActivateTask();
214 virtual void ContextMenu();
216 virtual void Select();
218 virtual void MouseButtonDown( const MouseEvent
& rMEvt
);
219 virtual void Resize();
220 virtual void Command( const CommandEvent
& rCEvt
);
221 virtual void RequestHelp( const HelpEvent
& rHEvt
);
223 void StartUpdateTask();
224 void UpdateTask( const Image
& rImage
, const String
& rText
,
225 BOOL bActive
= FALSE
);
226 void EndUpdateTask();
228 const Point
& GetContextMenuPos() const { return maContextMenuPos
; }
229 USHORT
GetTaskItem() const { return mnTaskItem
; }
230 BOOL
IsMinActivate() const { return mbMinActivate
; }
232 void SetActivateTaskHdl( const Link
& rLink
) { maActivateTaskHdl
= rLink
; }
233 const Link
& GetActivateTaskHdl() const { return maActivateTaskHdl
; }
234 void SetContextMenuHdl( const Link
& rLink
) { maContextMenuHdl
= rLink
; }
235 const Link
& GetContextMenuHdl() const { return maContextMenuHdl
; }
238 inline USHORT
TaskToolBox::GetTaskItem( const Point
& rPos
) const
240 USHORT nId
= GetItemId( rPos
);
244 return TASKTOOLBOX_TASK_NOTFOUND
;
247 // ---------------------
248 // - ITaskStatusNotify -
249 // ---------------------
251 class ITaskStatusNotify
254 virtual BOOL
MouseButtonDown( USHORT nItemd
, const MouseEvent
& rMEvt
);
255 virtual BOOL
MouseButtonUp( USHORT nItemd
, const MouseEvent
& rMEvt
);
256 virtual BOOL
MouseMove( USHORT nItemd
, const MouseEvent
& rMEvt
);
257 virtual BOOL
Command( USHORT nItemd
, const CommandEvent
& rCEvt
);
258 virtual BOOL
UpdateHelp( USHORT nItemd
);
261 // -----------------------
262 // - TaskStatusFieldItem -
263 // -----------------------
265 #define TASKSTATUSFIELDITEM_FLASH ((USHORT)0x0001)
267 class TaskStatusFieldItem
270 ITaskStatusNotify
* mpNotify
;
272 XubString maQuickHelpText
;
273 XubString maHelpText
;
278 TaskStatusFieldItem();
279 TaskStatusFieldItem( const TaskStatusFieldItem
& rItem
);
280 TaskStatusFieldItem( ITaskStatusNotify
* pNotify
,
282 const XubString
& rQuickHelpText
,
283 const XubString
& rHelpText
,
285 ~TaskStatusFieldItem();
287 void SetNotifyObject( ITaskStatusNotify
* pNotify
) { mpNotify
= pNotify
; }
288 ITaskStatusNotify
* GetNotifyObject() const { return mpNotify
; }
289 void SetImage( const Image
& rImage
) { maImage
= rImage
; }
290 const Image
& GetImage() const { return maImage
; }
291 void SetQuickHelpText( const XubString
& rStr
) { maQuickHelpText
= rStr
; }
292 const XubString
& GetQuickHelpText() const { return maQuickHelpText
; }
293 void SetHelpText( const XubString
& rStr
) { maHelpText
= rStr
; }
294 const XubString
& GetHelpText() const { return maHelpText
; }
295 void SetHelpId( ULONG nHelpId
) { mnHelpId
= nHelpId
; }
296 ULONG
GetHelpId() const { return mnHelpId
; }
297 void SetFlags( USHORT nFlags
) { mnFlags
= nFlags
; }
298 USHORT
GetFlags() const { return mnFlags
; }
300 const TaskStatusFieldItem
& operator=( const TaskStatusFieldItem
& rItem
);
307 #define TASKSTATUSBAR_STATUSFIELDID ((USHORT)61000)
309 #define TASKSTATUSBAR_CLOCKID ((USHORT)61000)
310 #define TASKSTATUSFIELD_CLOCK ((USHORT)0x0001)
312 class SVT_DLLPUBLIC TaskStatusBar
: public StatusBar
314 friend class TaskBar
;
317 ImplTaskSBItemList
* mpFieldItemList
;
318 TaskBar
* mpNotifyTaskBar
;
319 ITaskStatusNotify
* mpNotify
;
321 XubString maTimeText
;
334 SVT_DLLPRIVATE ImplTaskSBFldItem
* ImplGetFieldItem( USHORT nItemId
) const;
335 SVT_DLLPRIVATE ImplTaskSBFldItem
* ImplGetFieldItem( const Point
& rPos
, BOOL
& rFieldRect
) const;
336 SVT_DLLPRIVATE BOOL
ImplUpdateClock();
337 SVT_DLLPRIVATE BOOL
ImplUpdateFlashItems();
338 SVT_DLLPRIVATE
void ImplUpdateField( BOOL bItems
);
339 DECL_DLLPRIVATE_LINK( ImplTimerHdl
, Timer
* );
343 TaskStatusBar( Window
* pParent
, WinBits nWinStyle
= WB_LEFT
);
346 virtual void MouseButtonDown( const MouseEvent
& rMEvt
);
347 virtual void MouseButtonUp( const MouseEvent
& rMEvt
);
348 virtual void MouseMove( const MouseEvent
& rMEvt
);
349 virtual void Command( const CommandEvent
& rCEvt
);
350 virtual void RequestHelp( const HelpEvent
& rHEvt
);
351 virtual void UserDraw( const UserDrawEvent
& rUDEvt
);
353 void InsertStatusField( long nOffset
= STATUSBAR_OFFSET
,
354 USHORT nPos
= STATUSBAR_APPEND
,
355 USHORT nFlags
= TASKSTATUSFIELD_CLOCK
);
356 void RemoveStatusField()
357 { maTimer
.Stop(); RemoveItem( TASKSTATUSBAR_STATUSFIELDID
); }
358 void SetFieldFlags( USHORT nFlags
);
359 USHORT
GetFieldFlags() const { return mnFieldFlags
; }
360 void SetNotifyObject( ITaskStatusNotify
* pNotify
) { mpNotify
= pNotify
; }
361 ITaskStatusNotify
* GetNotifyObject() const { return mpNotify
; }
363 void AddStatusFieldItem( USHORT nItemId
, const TaskStatusFieldItem
& rItem
,
364 USHORT nPos
= 0xFFFF );
365 void ModifyStatusFieldItem( USHORT nItemId
, const TaskStatusFieldItem
& rItem
);
366 void RemoveStatusFieldItem( USHORT nItemId
);
367 BOOL
GetStatusFieldItem( USHORT nItemId
, TaskStatusFieldItem
& rItem
) const;
374 class SVT_DLLPUBLIC TaskBar
: public Window
377 ImplTaskBarFloat
* mpAutoHideBar
;
378 TaskButtonBar
* mpButtonBar
;
379 TaskToolBox
* mpTaskToolBox
;
380 TaskStatusBar
* mpStatusBar
;
388 long mnOldStatusWidth
;
403 Link maTaskResizeHdl
;
406 SVT_DLLPRIVATE
void ImplInitSettings();
407 SVT_DLLPRIVATE
void ImplNewHeight( long nNewHeight
);
411 TaskBar( Window
* pParent
, WinBits nWinStyle
= WB_BORDER
| WB_SIZEABLE
);
414 virtual void TaskResize();
416 virtual TaskButtonBar
* CreateButtonBar();
417 virtual TaskToolBox
* CreateTaskToolBox();
418 virtual TaskStatusBar
* CreateTaskStatusBar();
420 virtual void MouseMove( const MouseEvent
& rMEvt
);
421 virtual void MouseButtonDown( const MouseEvent
& rMEvt
);
422 virtual void Tracking( const TrackingEvent
& rMEvt
);
423 virtual void Paint( const Rectangle
& rRect
);
424 virtual void Resize();
425 virtual void StateChanged( StateChangedType nType
);
426 virtual void DataChanged( const DataChangedEvent
& rDCEvt
);
430 void SetLines( USHORT nLines
);
431 USHORT
GetLines() const { return mnLines
; }
432 void EnableAutoHide( BOOL bAutoHide
= TRUE
);
433 BOOL
IsAutoHideEnabled() const { return mbAutoHide
; }
435 void ShowStatusText( const String
& rText
);
436 void HideStatusText();
438 void SetStatusSize( long nNewSize
)
439 { mnStatusWidth
=nNewSize
; Resize(); }
440 long GetStatusSize() const { return mnStatusWidth
; }
442 Size
CalcWindowSizePixel() const;
444 TaskButtonBar
* GetButtonBar() const;
445 TaskToolBox
* GetTaskToolBox() const;
446 TaskStatusBar
* GetStatusBar() const;
448 void SetTaskResizeHdl( const Link
& rLink
) { maTaskResizeHdl
= rLink
; }
449 const Link
& GetTaskResizeHdl() const { return maTaskResizeHdl
; }
452 // -----------------------
453 // - WindowArrange-Types -
454 // -----------------------
456 #define WINDOWARRANGE_TILE 1
457 #define WINDOWARRANGE_HORZ 2
458 #define WINDOWARRANGE_VERT 3
459 #define WINDOWARRANGE_CASCADE 4
461 class ImplWindowArrangeList
;
463 // -----------------------
464 // - class WindowArrange -
465 // -----------------------
467 class SVT_DLLPUBLIC WindowArrange
475 SVT_DLLPRIVATE
void ImplTile( const Rectangle
& rRect
);
476 SVT_DLLPRIVATE
void ImplHorz( const Rectangle
& rRect
);
477 SVT_DLLPRIVATE
void ImplVert( const Rectangle
& rRect
);
478 SVT_DLLPRIVATE
void ImplCascade( const Rectangle
& rRect
);
485 void AddWindow( Window
* pWindow
, ULONG nPos
= LIST_APPEND
)
486 { mpWinList
->Insert( (void*)pWindow
, nPos
); }
487 void RemoveAllWindows()
488 { mpWinList
->Clear(); }
490 void Arrange( USHORT nType
, const Rectangle
& rRect
);
493 #endif // _TASKBAR_HXX