blob: 443784a0d1115e07151ea68c21cd0740d0ca41aa [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _TABBAR_HXX
#define _TABBAR_HXX
#include "svtools/svtdllapi.h"
#include <tools/link.hxx>
#include <vcl/window.hxx>
class MouseEvent;
class TrackingEvent;
class DataChangedEvent;
class ImplTabBarList;
class ImplTabButton;
class ImplTabSizer;
class TabBarEdit;
// -----------------
// - Dokumentation -
// -----------------
/*
Erlaubte StyleBits
------------------
WB_SCROLL - Die Tabs koennen ueber ein Extra-Feld gescrollt werden
WB_MINSCROLL - Die Tabs koennen ueber 2 zusaetzliche Buttons gescrollt werden
WB_RANGESELECT - Zusammenhaengende Bereiche koennen selektiert werden
WB_MULTISELECT - Einzelne Tabs koennen selektiert werden
WB_BORDER - Oben und unten wird ein Strich gezeichnet
WB_TOPBORDER - Oben wird ein Border gezeichnet
WB_3DTAB - Die Tabs und der Border werden in 3D gezeichnet
WB_DRAG - Vom TabBar wird ein StartDrag-Handler gerufen, wenn
Drag and Drop gestartet werden soll. Es wird ausserdem
im TabBar mit EnableDrop() Drag and Drop eingeschaltet.
WB_SIZEABLE - Vom TabBar wird ein Split-Handler gerufen, wenn der Anwender
den TabBar in der Breite aendern will
WB_STDTABBAR - WB_BORDER
Wenn man den TabBar zum Beispiel als Property-Bar benutzen moechte, sollten
die WinBits WB_TOPBORDER und WB_3DTAB anstatt WB_BORDER gesetzt werden.
Erlaubte PageBits
-----------------
TPB_SPECIAL - Andere Darstellung des TabTextes, zum Beispiel fuer
Szenario-Seiten.
Handler
-------
Select - Wird gerufen, wenn eine Tab selektiert oder
deselektiert wird
DoubleClick - Wird gerufen, wenn ein DoubleClick im TabBar ausgeloest
wurde. Innerhalb des Handlers liefert GetCurPageId() die
angeklickte Tab zurueck oder 0, wenn keine Tab angeklickt
wurde
ActivatePage - Wird gerufen, wenn eine andere Seite aktiviert wird.
GetCurPageId() gibt die aktivierte Seite zurueck.
DeactivatePage - Wird gerufen, wenn eine Seite deaktiviert wird. Wenn
eine andere Seite aktiviert werden darf, muss sal_True
zurueckgegeben werden, wenn eine andere Seite von
der Aktivierung ausgeschlossen werden soll, muss
sal_False zurueckgegeben werden. GetCurPageId() gibt die
zu deaktivierende Seite zurueck.
Drag and Drop
-------------
Fuer Drag and Drop muss das WinBit WB_DRAG gesetzt werden. Ausserdem
muss der Command-, QueryDrop-Handler und der Drop-Handler ueberlagert
werden. Dabei muss in den Handlern folgendes implementiert werden:
Command - Wenn in diesem Handler das Dragging gestartet werden
soll, muss StartDrag() gerufen werden. Diese Methode
selektiert dann den entsprechenden Eintrag oder gibt
sal_False zurueck, wenn das Dragging nicht durchgefuhert
werden kann.
QueryDrop - Dieser Handler wird von StarView immer dann gerufen, wenn
bei einem Drag-Vorgang die Maus ueber das Fenster gezogen
wird (siehe dazu auch SV-Doku). In diesem Handler muss
festgestellt werden, ob ein Drop moeglich ist. Die
Drop-Position kann im TabBar mit ShowDropPos() angezeigt
werden. Beim Aufruf muss die Position vom Event uebergeben
werden. Wenn sich die Position am linken oder rechten
Rand befindet, wird automatisch im TabBar gescrollt.
Diese Methode gibt auch die entsprechende Drop-Position
zurueck, die auch fuer ein Drop gebraucht wird. Wenn das
Fenster beim Drag verlassen wird, kann mit HideDropPos()
die DropPosition wieder weggenommen werden. Es ist dadurch
auch moeglich, ein von ausserhalb des TabBars ausgeloestes
Drag zu verarbeiten.
Drop - Im Drop-Handler muessen dann die Pages verschoben werden,
oder die neuen Pages eingefuegt werden. Die entsprechende
Drop-Postion kann mit ShowDropPos() ermittelt werden.
Folgende Methoden werden fuer Drag and Drop gebraucht und muessen von
den Handlern gerufen werden:
StartDrag - Muss aus dem Commnad-Handler gerufen werden. Als Parameter
muss der CommandEvent uebergeben werden und eine Referenz
auf eine Region. Diese Region muss dann bei ExecuteDrag()
uebergeben werden, wenn der Rueckgabewert sagt, das
ExecuteDrag durchgefuehrt werden soll. Falls der Eintrag
nicht selektiert ist, wird er vorher als aktueller
Eintrag gesetzt. Es ist daher darauf zu achten, das aus
dieser Methode heraus der Select-Handler gerufen werden
kann.
ShowDropPos - Diese Methode muss vom QueryDrop-Handler gerufen werden,
damit der TabBar anzeigt, wo die Tabs eingefuegt werden.
Diese Methode kann auch im Drop-Handler benutzt werden,
um die Position zu ermitteln wo die Tabs eingefuegt werden
sollen. In der Methode muss die Position vom Event
uebergeben werden. Diese Methode gibt die Position zurueck,
wo die Tabs eingefuegt werden sollen.
HideDropPos - Diese Methode nimmt die vorher mit ShowDropPos() angezeigte
DropPosition wieder zurueck. Diese Methode sollte dann
gerufen werden, wenn bei QueryDrop() das Fenster verlassen
wird oder der Dragvorgang beendet wurde.
Folgende Methoden koennen eingesetzt werden, wenn bei D&D die Seiten
umgeschaltet werden sollen:
SwitchPage - Diese Methode muss vom QueryDrop-Handler gerufen werden,
wenn die Seite ueber der sich der Mousepointer befindet,
umgeschaltet werden soll. Diese Methode sollte jedesmal
gerufen werden, wenn der QueryDrop-Handler gerufen wird.
Das umschalten der Seite passiert zeitverzoegert (500 ms)
und wird automatisch von dieser Methode verwaltet.
In der Methode muss die Position vom Event uebergeben
werden. Diese Methode gibt sal_True zurueck, wenn die Page
umgeschaltet wurde.
EndSwitchPage - Diese Methode setzt die Daten fuer das umschalten der
Seiten zurueck. Diese Methode sollte dann gerufen werden,
wenn bei QueryDrop() das Fenster verlassen wird oder
der Dragvorgang beendet wurde.
IsInSwitching - Mit dieser Methode kann im ActivatePage()/DeactivatePage()
abgefragt werden, ob dies durch SwitchPage() veranlasst
wurde. So kann dann beispielsweise in DeactivatePage()
das Umschalten ohne eine Fehlerbox verhindert werden.
Fenster-Resize
--------------
Wenn das Fenster vom Anwender in der Breite geaendert werden kann, dann
muss das WinBit WB_SIZEABLE gesetzt werden. In diesem Fall muss noch
folgender Handler ueberlagert werden:
Split - Wenn dieser Handler gerufen wird, sollte das Fenster
auf die Breite angepasst werden, die von GetSplitSize()
zurueckgegeben wird. Dabei wird keine minimale und
maximale Breite beruecksichtig. Eine minimale Breite
kann mit GetMinSize() abgefragt werden und die maximale
Breite muss von der Anwendung selber berechnet werden.
Da nur Online-Resize unterstuetzt wird, muss das Fenster
innerhalb dieses Handlers in der Breite geaendert
werden und eventuell abhaengige Fenster ebenfalls. Fuer
diesen Handler kann auch mit SetSplitHdl() ein
Link gesetzt werden.
Folgende Methoden liefern beim Splitten weitere Informationen:
GetSplitSize() - Liefert die Breite des TabBars zurueck, auf die der
Anwender das Fenster resizen will. Dabei wird keine
minimale oder maximale Breite beruecksichtigt. Es wird
jedoch nie eine Breite < 5 zurueckgeliefert. Diese Methode
liefert nur solange richtige Werte, wie Splitten aktiv
ist.
GetMinSize() - Mit dieser Methode kann eine minimale Fensterbreite
abgefragt werden, so das min. etwas eines Tabs sichtbar
ist. Jedoch kann der TabBar immer noch schmaler gesetzt
werden, als die Breite, die diese Methode zurueckliefert.
Diese Methode kann auch aufgerufen werden, wenn kein
Splitten aktiv ist.
Edit-Modus
----------
Der Tabbar bietet auch Moeglichkeiten, das der Anwender in den Tabreitern
die Namen aendern kann.
EnableEditMode - Damit kann eingestellt werden, das bei Alt+LeftClick
StartEditMode() automatisch vom TabBar gerufen wird.
Im StartRenaming()-Handler kann dann das Umbenennen
noch abgelehnt werden.
StartEditMode - Mit dieser Methode wird der EditModus auf einem
Tab gestartet. sal_False wird zurueckgegeben, wenn
der Editmodus schon aktiv ist, mit StartRenaming()
der Modus abgelehnt wurde oder kein Platz zum
Editieren vorhanden ist.
EndEditMode - Mit dieser Methode wird der EditModus beendet.
SetEditText - Mit dieser Methode kann der Text im AllowRenaming()-
Handler noch durch einen anderen Text ersetzt werden.
GetEditText - Mit dieser Methode kann im AllowRenaming()-Handler
der Text abgefragt werden, den der Anwender eingegeben
hat.
IsInEditMode - Mit dieser Methode kann abgefragt werden, ob der
Editmodus aktiv ist.
IsEditModeCanceled - Mit dieser Methode kann im EndRenaming()-
Handler abgefragt werden, ob die Umbenenung
abgebrochen wurde.
GetEditPageId - Mit dieser Methode wird in den Renaming-Handlern
abgefragt, welcher Tab umbenannt wird/wurde.
StartRenaming() - Dieser Handler wird gerufen, wenn ueber StartEditMode()
der Editmodus gestartet wurde. Mit GetEditPageId()
kann abgefragt werden, welcher Tab umbenannt werden
soll. sal_False sollte zurueckgegeben werden, wenn
der Editmodus nicht gestartet werden soll.
AllowRenaming() - Dieser Handler wird gerufen, wenn der Editmodus
beendet wird (nicht bei Cancel). In diesem Handler
kann dann getestet werden, ob der Text OK ist.
Mit GetEditPageId() kann abgefragt werden, welcher Tab
umbenannt wurde.
Es sollte einer der folgenden Werte zurueckgegeben
werden:
TAB_RENAMING_YES
Der Tab wird umbenannt.
TAB_RENAMING_NO
Der Tab wird nicht umbenannt, der Editmodus bleibt
jedoch aktiv, so das der Anwender den Namen
entsprechent anpassen kann.
TAB_RENAMING_CANCEL
Der Editmodus wird abgebrochen und der alte
Text wieder hergestellt.
EndRenaming() - Dieser Handler wird gerufen, wenn der Editmodus
beendet wurde. Mit GetEditPageId() kann abgefragt
werden, welcher Tab umbenannt wurde. Mit
IsEditModeCanceled() kann abgefragt werden, ob der
Modus abgebrochen wurde und der Name dadurch nicht
geaendert wurde.
Maximale Pagebreite
-------------------
Die Pagebreite der Tabs kann begrenzt werden, damit ein einfacheres
Navigieren ueber diese moeglich ist. Wenn der Text dann nicht komplett
angezeigt werden kann, wird er mit ... abgekuerzt und in der Tip-
oder der aktiven Hilfe (wenn kein Hilfetext gesetzt ist) wird dann der
ganze Text angezeigt. Mit EnableAutoMaxPageWidth() kann eingestellt
werden, ob die maximale Pagebreite sich nach der gerade sichtbaren
Breite richten soll (ist der default). Ansonsten kann auch die
maximale Pagebreite mit SetMaxPageWidth() (in Pixeln) gesetzt werden
(die AutoMaxPageWidth wird dann ignoriert).
KontextMenu
-----------
Wenn ein kontextsensitives PopupMenu anzeigt werden soll, muss der
Command-Handler ueberlagert werden. Mit GetPageId() und bei
Uebergabe der Mausposition kann ermittelt werden, ob der Mausclick
ueber einem bzw. ueber welchem Item durchgefuehrt wurde.
*/
// -----------
// - WinBits -
// -----------
#define WB_RANGESELECT ((WinBits)0x00200000)
#define WB_MULTISELECT ((WinBits)0x00400000)
#define WB_TOPBORDER ((WinBits)0x04000000)
#define WB_3DTAB ((WinBits)0x08000000)
#define WB_MINSCROLL ((WinBits)0x20000000)
#define WB_STDTABBAR WB_BORDER
// ------------------
// - TabBarPageBits -
// ------------------
typedef sal_uInt16 TabBarPageBits;
// -------------------------
// - Bits fuer TabBarPages -
// -------------------------
#define TPB_SPECIAL ((TabBarPageBits)0x0001)
// ----------------
// - TabBar-Types -
// ----------------
#define TABBAR_RENAMING_YES ((long)sal_True)
#define TABBAR_RENAMING_NO ((long)sal_False)
#define TABBAR_RENAMING_CANCEL ((long)2)
// ----------
// - TabBar -
// ----------
struct TabBar_Impl;
class SVT_DLLPUBLIC TabBar : public Window
{
friend class ImplTabButton;
friend class ImplTabSizer;
private:
ImplTabBarList* mpItemList;
ImplTabButton* mpFirstBtn;
ImplTabButton* mpPrevBtn;
ImplTabButton* mpNextBtn;
ImplTabButton* mpLastBtn;
TabBar_Impl* mpImpl;
TabBarEdit* mpEdit;
XubString maEditText;
Color maSelColor;
Color maSelTextColor;
Size maWinSize;
long mnMaxPageWidth;
long mnCurMaxWidth;
long mnOffX;
long mnOffY;
long mnLastOffX;
long mnSplitSize;
sal_uLong mnSwitchTime;
WinBits mnWinStyle;
sal_uInt16 mnCurPageId;
sal_uInt16 mnFirstPos;
sal_uInt16 mnDropPos;
sal_uInt16 mnSwitchId;
sal_uInt16 mnEditId;
sal_Bool mbFormat;
sal_Bool mbFirstFormat;
sal_Bool mbSizeFormat;
sal_Bool mbAutoMaxWidth;
sal_Bool mbInSwitching;
sal_Bool mbAutoEditMode;
sal_Bool mbEditCanceled;
sal_Bool mbDropPos;
sal_Bool mbInSelect;
sal_Bool mbSelColor;
sal_Bool mbSelTextColor;
sal_Bool mbMirrored;
Link maSelectHdl;
Link maDoubleClickHdl;
Link maSplitHdl;
Link maActivatePageHdl;
Link maDeactivatePageHdl;
Link maStartRenamingHdl;
Link maAllowRenamingHdl;
Link maEndRenamingHdl;
using Window::ImplInit;
SVT_DLLPRIVATE void ImplInit( WinBits nWinStyle );
SVT_DLLPRIVATE void ImplInitSettings( sal_Bool bFont, sal_Bool bBackground );
SVT_DLLPRIVATE void ImplGetColors( Color& rFaceColor, Color& rFaceTextColor,
Color& rSelectColor, Color& rSelectTextColor );
SVT_DLLPRIVATE void ImplShowPage( sal_uInt16 nPos );
SVT_DLLPRIVATE sal_Bool ImplCalcWidth();
SVT_DLLPRIVATE void ImplFormat();
SVT_DLLPRIVATE sal_uInt16 ImplGetLastFirstPos();
SVT_DLLPRIVATE void ImplInitControls();
SVT_DLLPRIVATE void ImplEnableControls();
SVT_DLLPRIVATE void ImplSelect();
SVT_DLLPRIVATE void ImplActivatePage();
SVT_DLLPRIVATE long ImplDeactivatePage();
DECL_DLLPRIVATE_LINK( ImplClickHdl, ImplTabButton* );
public:
static const sal_uInt16 APPEND;
static const sal_uInt16 PAGE_NOT_FOUND;
TabBar( Window* pParent, WinBits nWinStyle = WB_STDTABBAR );
virtual ~TabBar();
virtual void MouseMove( const MouseEvent& rMEvt );
virtual void MouseButtonDown( const MouseEvent& rMEvt );
virtual void MouseButtonUp( const MouseEvent& rMEvt );
virtual void Paint( const Rectangle& rRect );
virtual void Resize();
virtual void RequestHelp( const HelpEvent& rHEvt );
virtual void StateChanged( StateChangedType nStateChange );
virtual void DataChanged( const DataChangedEvent& rDCEvt );
virtual void Select();
virtual void DoubleClick();
virtual void Split();
virtual void ActivatePage();
virtual long DeactivatePage();
virtual long StartRenaming();
virtual long AllowRenaming();
virtual void EndRenaming();
virtual void Mirror();
void InsertPage( sal_uInt16 nPageId, const XubString& rText,
TabBarPageBits nBits = 0,
sal_uInt16 nPos = TabBar::APPEND );
void RemovePage( sal_uInt16 nPageId );
void MovePage( sal_uInt16 nPageId, sal_uInt16 nNewPos );
Color GetTabBgColor( sal_uInt16 nPageId ) const;
void SetTabBgColor( sal_uInt16 nPageId, const Color& aTabBgColor );
sal_Bool IsDefaultTabBgColor( sal_uInt16 nPageId );
void Clear();
void EnablePage( sal_uInt16 nPageId, sal_Bool bEnable = sal_True );
sal_Bool IsPageEnabled( sal_uInt16 nPageId ) const;
void SetPageBits( sal_uInt16 nPageId, TabBarPageBits nBits = 0 );
TabBarPageBits GetPageBits( sal_uInt16 nPageId ) const;
sal_uInt16 GetPageCount() const;
sal_uInt16 GetPageId( sal_uInt16 nPos ) const;
sal_uInt16 GetPagePos( sal_uInt16 nPageId ) const;
sal_uInt16 GetPageId( const Point& rPos ) const;
Rectangle GetPageRect( sal_uInt16 nPageId ) const;
// returns the rectangle in which page tabs are drawn
Rectangle GetPageArea() const;
void SetCurPageId( sal_uInt16 nPageId );
sal_uInt16 GetCurPageId() const { return mnCurPageId; }
void SetFirstPageId( sal_uInt16 nPageId );
sal_uInt16 GetFirstPageId() const { return GetPageId( mnFirstPos ); }
void MakeVisible( sal_uInt16 nPageId );
void SelectPage( sal_uInt16 nPageId, sal_Bool bSelect = sal_True );
void SelectPageRange( sal_Bool bSelect = sal_False,
sal_uInt16 nStartPos = 0,
sal_uInt16 nEndPos = TabBar::APPEND );
sal_uInt16 GetSelectPage( sal_uInt16 nSelIndex = 0 ) const;
sal_uInt16 GetSelectPageCount() const;
sal_Bool IsPageSelected( sal_uInt16 nPageId ) const;
void EnableAutoMaxPageWidth( sal_Bool bEnable = sal_True ) { mbAutoMaxWidth = bEnable; }
sal_Bool IsAutoMaxPageWidthEnabled() const { return mbAutoMaxWidth; }
void SetMaxPageWidth( long nMaxWidth );
long GetMaxPageWidth() const { return mnMaxPageWidth; }
void ResetMaxPageWidth() { SetMaxPageWidth( 0 ); }
sal_Bool IsMaxPageWidth() const { return mnMaxPageWidth != 0; }
void EnableEditMode( sal_Bool bEnable = sal_True ) { mbAutoEditMode = bEnable; }
sal_Bool IsEditModeEnabled() const { return mbAutoEditMode; }
sal_Bool StartEditMode( sal_uInt16 nPageId );
void EndEditMode( sal_Bool bCancel = sal_False );
void SetEditText( const XubString& rText ) { maEditText = rText; }
const XubString& GetEditText() const { return maEditText; }
sal_Bool IsInEditMode() const { return (mpEdit != NULL); }
sal_Bool IsEditModeCanceled() const { return mbEditCanceled; }
sal_uInt16 GetEditPageId() const { return mnEditId; }
/** Mirrors the entire control including position of buttons and splitter.
Mirroring is done relative to the current direction of the GUI.
@param bMirrored sal_True = the control will draw itself RTL in LTR GUI,
and vice versa; sal_False = the control behaves according to the
current direction of the GUI. */
void SetMirrored( sal_Bool bMirrored = sal_True );
/** Returns sal_True, if the control is set to mirrored mode (see SetMirrored()). */
sal_Bool IsMirrored() const { return mbMirrored; }
/** Sets the control to LTR or RTL mode regardless of the GUI direction.
@param bRTL sal_False = the control will draw from left to right;
sal_True = the control will draw from right to left. */
void SetEffectiveRTL( sal_Bool bRTL );
/** Returns sal_True, if the control draws from right to left (see SetEffectiveRTL()). */
sal_Bool IsEffectiveRTL() const;
sal_Bool StartDrag( const CommandEvent& rCEvt, Region& rRegion );
sal_uInt16 ShowDropPos( const Point& rPos );
void HideDropPos();
sal_Bool SwitchPage( const Point& rPos );
void EndSwitchPage();
sal_Bool IsInSwitching() { return mbInSwitching; }
void SetSelectColor();
void SetSelectColor( const Color& rColor );
const Color& GetSelectColor() const { return maSelColor; }
sal_Bool IsSelectColor() const { return mbSelColor; }
void SetSelectTextColor();
void SetSelectTextColor( const Color& rColor );
const Color& GetSelectTextColor() const { return maSelTextColor; }
sal_Bool IsSelectTextColor() const { return mbSelTextColor; }
void SetPageText( sal_uInt16 nPageId, const XubString& rText );
XubString GetPageText( sal_uInt16 nPageId ) const;
void SetHelpText( sal_uInt16 nPageId, const XubString& rText );
XubString GetHelpText( sal_uInt16 nPageId ) const;
void SetHelpId( sal_uInt16 nPageId, const rtl::OString& nHelpId );
rtl::OString GetHelpId( sal_uInt16 nPageId ) const;
long GetSplitSize() const { return mnSplitSize; }
long GetMinSize() const;
void SetHelpText( const XubString& rText )
{ Window::SetHelpText( rText ); }
XubString GetHelpText() const
{ return Window::GetHelpText(); };
void SetHelpId( const rtl::OString& rId )
{ Window::SetHelpId( rId ); }
const rtl::OString& GetHelpId() const
{ return Window::GetHelpId(); }
void SetStyle( WinBits nStyle );
WinBits GetStyle() const { return mnWinStyle; }
Size CalcWindowSizePixel() const;
void SetSelectHdl( const Link& rLink ) { maSelectHdl = rLink; }
const Link& GetSelectHdl() const { return maSelectHdl; }
void SetDoubleClickHdl( const Link& rLink ) { maDoubleClickHdl = rLink; }
const Link& GetDoubleClickHdl() const { return maDoubleClickHdl; }
void SetSplitHdl( const Link& rLink ) { maSplitHdl = rLink; }
const Link& GetSplitHdl() const { return maSplitHdl; }
void SetActivatePageHdl( const Link& rLink ) { maActivatePageHdl = rLink; }
const Link& GetActivatePageHdl() const { return maActivatePageHdl; }
void SetDeactivatePageHdl( const Link& rLink ) { maDeactivatePageHdl = rLink; }
const Link& GetDeactivatePageHdl() const { return maDeactivatePageHdl; }
void SetStartRenamingHdl( const Link& rLink ) { maStartRenamingHdl = rLink; }
const Link& GetStartRenamingHdl() const { return maStartRenamingHdl; }
void SetAllowRenamingHdl( const Link& rLink ) { maAllowRenamingHdl = rLink; }
const Link& GetAllowRenamingHdl() const { return maAllowRenamingHdl; }
void SetEndRenamingHdl( const Link& rLink ) { maEndRenamingHdl = rLink; }
const Link& GetEndRenamingHdl() const { return maEndRenamingHdl; }
// accessibility
virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
};
#endif // _TABBAR_HXX