LCOV - code coverage report
Current view: top level - solver/unxlngi6.pro/inc/svtools - tabbar.hxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 6 14 42.9 %
Date: 2012-08-25 Functions: 5 13 38.5 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : #ifndef _TABBAR_HXX
      30                 :            : #define _TABBAR_HXX
      31                 :            : 
      32                 :            : #include "svtools/svtdllapi.h"
      33                 :            : #include <tools/link.hxx>
      34                 :            : #include <vcl/window.hxx>
      35                 :            : #include <vector>
      36                 :            : 
      37                 :            : class MouseEvent;
      38                 :            : class TrackingEvent;
      39                 :            : class DataChangedEvent;
      40                 :            : class ImplTabButton;
      41                 :            : class ImplTabSizer;
      42                 :            : class TabBarEdit;
      43                 :            : 
      44                 :            : struct ImplTabBarItem;
      45                 :            : typedef ::std::vector< ImplTabBarItem* > ImplTabBarList;
      46                 :            : 
      47                 :            : // -----------------
      48                 :            : // - Dokumentation -
      49                 :            : // -----------------
      50                 :            : 
      51                 :            : /*
      52                 :            : 
      53                 :            : Erlaubte StyleBits
      54                 :            : ------------------
      55                 :            : 
      56                 :            : WB_SCROLL       - Die Tabs koennen ueber ein Extra-Feld gescrollt werden
      57                 :            : WB_MINSCROLL    - Die Tabs koennen ueber 2 zusaetzliche Buttons gescrollt werden
      58                 :            : WB_RANGESELECT  - Zusammenhaengende Bereiche koennen selektiert werden
      59                 :            : WB_MULTISELECT  - Einzelne Tabs koennen selektiert werden
      60                 :            : WB_BORDER       - Oben und unten wird ein Strich gezeichnet
      61                 :            : WB_TOPBORDER    - Oben wird ein Border gezeichnet
      62                 :            : WB_3DTAB        - Die Tabs und der Border werden in 3D gezeichnet
      63                 :            : WB_DRAG         - Vom TabBar wird ein StartDrag-Handler gerufen, wenn
      64                 :            :                   Drag and Drop gestartet werden soll. Es wird ausserdem
      65                 :            :                   im TabBar mit EnableDrop() Drag and Drop eingeschaltet.
      66                 :            : WB_SIZEABLE     - Vom TabBar wird ein Split-Handler gerufen, wenn der Anwender
      67                 :            :                   den TabBar in der Breite aendern will
      68                 :            : WB_STDTABBAR    - WB_BORDER
      69                 :            : 
      70                 :            : Wenn man den TabBar zum Beispiel als Property-Bar benutzen moechte, sollten
      71                 :            : die WinBits WB_TOPBORDER und WB_3DTAB anstatt WB_BORDER gesetzt werden.
      72                 :            : 
      73                 :            : 
      74                 :            : Erlaubte PageBits
      75                 :            : -----------------
      76                 :            : 
      77                 :            : TPB_SPECIAL     - Andere Darstellung des TabTextes, zum Beispiel fuer
      78                 :            :                   Szenario-Seiten.
      79                 :            : 
      80                 :            : 
      81                 :            : Handler
      82                 :            : -------
      83                 :            : 
      84                 :            : Select          - Wird gerufen, wenn eine Tab selektiert oder
      85                 :            :                   deselektiert wird
      86                 :            : DoubleClick     - Wird gerufen, wenn ein DoubleClick im TabBar ausgeloest
      87                 :            :                   wurde. Innerhalb des Handlers liefert GetCurPageId() die
      88                 :            :                   angeklickte Tab zurueck oder 0, wenn keine Tab angeklickt
      89                 :            :                   wurde
      90                 :            : ActivatePage    - Wird gerufen, wenn eine andere Seite aktiviert wird.
      91                 :            :                   GetCurPageId() gibt die aktivierte Seite zurueck.
      92                 :            : DeactivatePage  - Wird gerufen, wenn eine Seite deaktiviert wird. Wenn
      93                 :            :                   eine andere Seite aktiviert werden darf, muss sal_True
      94                 :            :                   zurueckgegeben werden, wenn eine andere Seite von
      95                 :            :                   der Aktivierung ausgeschlossen werden soll, muss
      96                 :            :                   sal_False zurueckgegeben werden. GetCurPageId() gibt die
      97                 :            :                   zu deaktivierende Seite zurueck.
      98                 :            : 
      99                 :            : 
     100                 :            : 
     101                 :            : Drag and Drop
     102                 :            : -------------
     103                 :            : 
     104                 :            : Fuer Drag and Drop muss das WinBit WB_DRAG gesetzt werden. Ausserdem
     105                 :            : muss der Command-, QueryDrop-Handler und der Drop-Handler ueberlagert
     106                 :            : werden. Dabei muss in den Handlern folgendes implementiert werden:
     107                 :            : 
     108                 :            : Command         - Wenn in diesem Handler das Dragging gestartet werden
     109                 :            :                   soll, muss StartDrag() gerufen werden. Diese Methode
     110                 :            :                   selektiert dann den entsprechenden Eintrag oder gibt
     111                 :            :                   sal_False zurueck, wenn das Dragging nicht durchgefuhert
     112                 :            :                   werden kann.
     113                 :            : 
     114                 :            : QueryDrop       - Dieser Handler wird von StarView immer dann gerufen, wenn
     115                 :            :                   bei einem Drag-Vorgang die Maus ueber das Fenster gezogen
     116                 :            :                   wird (siehe dazu auch SV-Doku). In diesem Handler muss
     117                 :            :                   festgestellt werden, ob ein Drop moeglich ist. Die
     118                 :            :                   Drop-Position kann im TabBar mit ShowDropPos() angezeigt
     119                 :            :                   werden. Beim Aufruf muss die Position vom Event uebergeben
     120                 :            :                   werden. Wenn sich die Position am linken oder rechten
     121                 :            :                   Rand befindet, wird automatisch im TabBar gescrollt.
     122                 :            :                   Diese Methode gibt auch die entsprechende Drop-Position
     123                 :            :                   zurueck, die auch fuer ein Drop gebraucht wird. Wenn das
     124                 :            :                   Fenster beim Drag verlassen wird, kann mit HideDropPos()
     125                 :            :                   die DropPosition wieder weggenommen werden. Es ist dadurch
     126                 :            :                   auch moeglich, ein von ausserhalb des TabBars ausgeloestes
     127                 :            :                   Drag zu verarbeiten.
     128                 :            : 
     129                 :            : Drop            - Im Drop-Handler muessen dann die Pages verschoben werden,
     130                 :            :                   oder die neuen Pages eingefuegt werden. Die entsprechende
     131                 :            :                   Drop-Postion kann mit ShowDropPos() ermittelt werden.
     132                 :            : 
     133                 :            : Folgende Methoden werden fuer Drag and Drop gebraucht und muessen von
     134                 :            : den Handlern gerufen werden:
     135                 :            : 
     136                 :            : StartDrag       - Muss aus dem Commnad-Handler gerufen werden. Als Parameter
     137                 :            :                   muss der CommandEvent uebergeben werden und eine Referenz
     138                 :            :                   auf eine Region. Diese Region muss dann bei ExecuteDrag()
     139                 :            :                   uebergeben werden, wenn der Rueckgabewert sagt, das
     140                 :            :                   ExecuteDrag durchgefuehrt werden soll. Falls der Eintrag
     141                 :            :                   nicht selektiert ist, wird er vorher als aktueller
     142                 :            :                   Eintrag gesetzt. Es ist daher darauf zu achten, das aus
     143                 :            :                   dieser Methode heraus der Select-Handler gerufen werden
     144                 :            :                   kann.
     145                 :            : 
     146                 :            : ShowDropPos     - Diese Methode muss vom QueryDrop-Handler gerufen werden,
     147                 :            :                   damit der TabBar anzeigt, wo die Tabs eingefuegt werden.
     148                 :            :                   Diese Methode kann auch im Drop-Handler benutzt werden,
     149                 :            :                   um die Position zu ermitteln wo die Tabs eingefuegt werden
     150                 :            :                   sollen. In der Methode muss die Position vom Event
     151                 :            :                   uebergeben werden. Diese Methode gibt die Position zurueck,
     152                 :            :                   wo die Tabs eingefuegt werden sollen.
     153                 :            : 
     154                 :            : HideDropPos     - Diese Methode nimmt die vorher mit ShowDropPos() angezeigte
     155                 :            :                   DropPosition wieder zurueck. Diese Methode sollte dann
     156                 :            :                   gerufen werden, wenn bei QueryDrop() das Fenster verlassen
     157                 :            :                   wird oder der Dragvorgang beendet wurde.
     158                 :            : 
     159                 :            : Folgende Methoden koennen eingesetzt werden, wenn bei D&D die Seiten
     160                 :            : umgeschaltet werden sollen:
     161                 :            : 
     162                 :            : SwitchPage      - Diese Methode muss vom QueryDrop-Handler gerufen werden,
     163                 :            :                   wenn die Seite ueber der sich der Mousepointer befindet,
     164                 :            :                   umgeschaltet werden soll. Diese Methode sollte jedesmal
     165                 :            :                   gerufen werden, wenn der QueryDrop-Handler gerufen wird.
     166                 :            :                   Das umschalten der Seite passiert zeitverzoegert (500 ms)
     167                 :            :                   und wird automatisch von dieser Methode verwaltet.
     168                 :            :                   In der Methode muss die Position vom Event uebergeben
     169                 :            :                   werden. Diese Methode gibt sal_True zurueck, wenn die Page
     170                 :            :                   umgeschaltet wurde.
     171                 :            : 
     172                 :            : EndSwitchPage   - Diese Methode setzt die Daten fuer das umschalten der
     173                 :            :                   Seiten zurueck. Diese Methode sollte dann gerufen werden,
     174                 :            :                   wenn bei QueryDrop() das Fenster verlassen wird oder
     175                 :            :                   der Dragvorgang beendet wurde.
     176                 :            : 
     177                 :            : IsInSwitching   - Mit dieser Methode kann im ActivatePage()/DeactivatePage()
     178                 :            :                   abgefragt werden, ob dies durch SwitchPage() veranlasst
     179                 :            :                   wurde. So kann dann beispielsweise in DeactivatePage()
     180                 :            :                   das Umschalten ohne eine Fehlerbox verhindert werden.
     181                 :            : 
     182                 :            : 
     183                 :            : Fenster-Resize
     184                 :            : --------------
     185                 :            : 
     186                 :            : Wenn das Fenster vom Anwender in der Breite geaendert werden kann, dann
     187                 :            : muss das WinBit WB_SIZEABLE gesetzt werden. In diesem Fall muss noch
     188                 :            : folgender Handler ueberlagert werden:
     189                 :            : 
     190                 :            : Split           - Wenn dieser Handler gerufen wird, sollte das Fenster
     191                 :            :                   auf die Breite angepasst werden, die von GetSplitSize()
     192                 :            :                   zurueckgegeben wird. Dabei wird keine minimale und
     193                 :            :                   maximale Breite beruecksichtig. Eine minimale Breite
     194                 :            :                   kann mit GetMinSize() abgefragt werden und die maximale
     195                 :            :                   Breite muss von der Anwendung selber berechnet werden.
     196                 :            :                   Da nur Online-Resize unterstuetzt wird, muss das Fenster
     197                 :            :                   innerhalb dieses Handlers in der Breite geaendert
     198                 :            :                   werden und eventuell abhaengige Fenster ebenfalls. Fuer
     199                 :            :                   diesen Handler kann auch mit SetSplitHdl() ein
     200                 :            :                   Link gesetzt werden.
     201                 :            : 
     202                 :            : Folgende Methoden liefern beim Splitten weitere Informationen:
     203                 :            : 
     204                 :            : GetSplitSize()  - Liefert die Breite des TabBars zurueck, auf die der
     205                 :            :                   Anwender das Fenster resizen will. Dabei wird keine
     206                 :            :                   minimale oder maximale Breite beruecksichtigt. Es wird
     207                 :            :                   jedoch nie eine Breite < 5 zurueckgeliefert. Diese Methode
     208                 :            :                   liefert nur solange richtige Werte, wie Splitten aktiv
     209                 :            :                   ist.
     210                 :            : 
     211                 :            : GetMinSize()    - Mit dieser Methode kann eine minimale Fensterbreite
     212                 :            :                   abgefragt werden, so das min. etwas eines Tabs sichtbar
     213                 :            :                   ist. Jedoch kann der TabBar immer noch schmaler gesetzt
     214                 :            :                   werden, als die Breite, die diese Methode zurueckliefert.
     215                 :            :                   Diese Methode kann auch aufgerufen werden, wenn kein
     216                 :            :                   Splitten aktiv ist.
     217                 :            : 
     218                 :            : 
     219                 :            : Edit-Modus
     220                 :            : ----------
     221                 :            : 
     222                 :            : Der Tabbar bietet auch Moeglichkeiten, das der Anwender in den Tabreitern
     223                 :            : die Namen aendern kann.
     224                 :            : 
     225                 :            : EnableEditMode  - Damit kann eingestellt werden, das bei Alt+LeftClick
     226                 :            :                   StartEditMode() automatisch vom TabBar gerufen wird.
     227                 :            :                   Im StartRenaming()-Handler kann dann das Umbenennen
     228                 :            :                   noch abgelehnt werden.
     229                 :            : StartEditMode   - Mit dieser Methode wird der EditModus auf einem
     230                 :            :                   Tab gestartet. sal_False wird zurueckgegeben, wenn
     231                 :            :                   der Editmodus schon aktiv ist, mit StartRenaming()
     232                 :            :                   der Modus abgelehnt wurde oder kein Platz zum
     233                 :            :                   Editieren vorhanden ist.
     234                 :            : EndEditMode     - Mit dieser Methode wird der EditModus beendet.
     235                 :            : SetEditText     - Mit dieser Methode kann der Text im AllowRenaming()-
     236                 :            :                   Handler noch durch einen anderen Text ersetzt werden.
     237                 :            : GetEditText     - Mit dieser Methode kann im AllowRenaming()-Handler
     238                 :            :                   der Text abgefragt werden, den der Anwender eingegeben
     239                 :            :                   hat.
     240                 :            : IsInEditMode    - Mit dieser Methode kann abgefragt werden, ob der
     241                 :            :                   Editmodus aktiv ist.
     242                 :            : IsEditModeCanceled      - Mit dieser Methode kann im EndRenaming()-
     243                 :            :                           Handler abgefragt werden, ob die Umbenenung
     244                 :            :                           abgebrochen wurde.
     245                 :            : GetEditPageId   - Mit dieser Methode wird in den Renaming-Handlern
     246                 :            :                   abgefragt, welcher Tab umbenannt wird/wurde.
     247                 :            : 
     248                 :            : StartRenaming() - Dieser Handler wird gerufen, wenn ueber StartEditMode()
     249                 :            :                   der Editmodus gestartet wurde. Mit GetEditPageId()
     250                 :            :                   kann abgefragt werden, welcher Tab umbenannt werden
     251                 :            :                   soll. sal_False sollte zurueckgegeben werden, wenn
     252                 :            :                   der Editmodus nicht gestartet werden soll.
     253                 :            : AllowRenaming() - Dieser Handler wird gerufen, wenn der Editmodus
     254                 :            :                   beendet wird (nicht bei Cancel). In diesem Handler
     255                 :            :                   kann dann getestet werden, ob der Text OK ist.
     256                 :            :                   Mit GetEditPageId() kann abgefragt werden, welcher Tab
     257                 :            :                   umbenannt wurde.
     258                 :            :                   Es sollte einer der folgenden Werte zurueckgegeben
     259                 :            :                   werden:
     260                 :            :                   TAB_RENAMING_YES
     261                 :            :                   Der Tab wird umbenannt.
     262                 :            :                   TAB_RENAMING_NO
     263                 :            :                   Der Tab wird nicht umbenannt, der Editmodus bleibt
     264                 :            :                   jedoch aktiv, so das der Anwender den Namen
     265                 :            :                   entsprechent anpassen kann.
     266                 :            :                   TAB_RENAMING_CANCEL
     267                 :            :                   Der Editmodus wird abgebrochen und der alte
     268                 :            :                   Text wieder hergestellt.
     269                 :            : EndRenaming()   - Dieser Handler wird gerufen, wenn der Editmodus
     270                 :            :                   beendet wurde. Mit GetEditPageId() kann abgefragt
     271                 :            :                   werden, welcher Tab umbenannt wurde. Mit
     272                 :            :                   IsEditModeCanceled() kann abgefragt werden, ob der
     273                 :            :                   Modus abgebrochen wurde und der Name dadurch nicht
     274                 :            :                   geaendert wurde.
     275                 :            : 
     276                 :            : 
     277                 :            : Maximale Pagebreite
     278                 :            : -------------------
     279                 :            : 
     280                 :            : Die Pagebreite der Tabs kann begrenzt werden, damit ein einfacheres
     281                 :            : Navigieren ueber diese moeglich ist. Wenn der Text dann nicht komplett
     282                 :            : angezeigt werden kann, wird er mit ... abgekuerzt und in der Tip-
     283                 :            : oder der aktiven Hilfe (wenn kein Hilfetext gesetzt ist) wird dann der
     284                 :            : ganze Text angezeigt. Mit EnableAutoMaxPageWidth() kann eingestellt
     285                 :            : werden, ob die maximale Pagebreite sich nach der gerade sichtbaren
     286                 :            : Breite richten soll (ist der default). Ansonsten kann auch die
     287                 :            : maximale Pagebreite mit SetMaxPageWidth() (in Pixeln) gesetzt werden
     288                 :            : (die AutoMaxPageWidth wird dann ignoriert).
     289                 :            : 
     290                 :            : 
     291                 :            : KontextMenu
     292                 :            : -----------
     293                 :            : 
     294                 :            : Wenn ein kontextsensitives PopupMenu anzeigt werden soll, muss der
     295                 :            : Command-Handler ueberlagert werden. Mit GetPageId() und bei
     296                 :            : Uebergabe der Mausposition kann ermittelt werden, ob der Mausclick
     297                 :            : ueber einem bzw. ueber welchem Item durchgefuehrt wurde.
     298                 :            : */
     299                 :            : 
     300                 :            : // -----------
     301                 :            : // - WinBits -
     302                 :            : // -----------
     303                 :            : 
     304                 :            : #define WB_RANGESELECT      ((WinBits)0x00200000)
     305                 :            : #define WB_MULTISELECT      ((WinBits)0x00400000)
     306                 :            : #define WB_TOPBORDER        ((WinBits)0x04000000)
     307                 :            : #define WB_3DTAB            ((WinBits)0x08000000)
     308                 :            : #define WB_MINSCROLL        ((WinBits)0x20000000)
     309                 :            : #define WB_INSERTTAB        ((WinBits)0x40000000)
     310                 :            : #define WB_STDTABBAR        WB_BORDER
     311                 :            : 
     312                 :            : // ------------------
     313                 :            : // - TabBarPageBits -
     314                 :            : // ------------------
     315                 :            : 
     316                 :            : typedef sal_uInt16 TabBarPageBits;
     317                 :            : 
     318                 :            : // -------------------------
     319                 :            : // - Bits fuer TabBarPages -
     320                 :            : // -------------------------
     321                 :            : 
     322                 :            : #define TPB_SPECIAL         ((TabBarPageBits)0x0001)
     323                 :            : 
     324                 :            : // ----------------
     325                 :            : // - TabBar-Types -
     326                 :            : // ----------------
     327                 :            : 
     328                 :            : #define TABBAR_RENAMING_YES    ((long)sal_True)
     329                 :            : #define TABBAR_RENAMING_NO     ((long)sal_False)
     330                 :            : #define TABBAR_RENAMING_CANCEL ((long)2)
     331                 :            : 
     332                 :            : // ----------
     333                 :            : // - TabBar -
     334                 :            : // ----------
     335                 :            : struct TabBar_Impl;
     336                 :            : struct ImplTabBarItem;
     337                 :            : 
     338                 :            : class SVT_DLLPUBLIC TabBar : public Window
     339                 :            : {
     340                 :            :     friend class    ImplTabButton;
     341                 :            :     friend class    ImplTabSizer;
     342                 :            : 
     343                 :            : private:
     344                 :            :     ImplTabBarList* mpItemList;
     345                 :            :     ImplTabButton*  mpFirstBtn;
     346                 :            :     ImplTabButton*  mpPrevBtn;
     347                 :            :     ImplTabButton*  mpNextBtn;
     348                 :            :     ImplTabButton*  mpLastBtn;
     349                 :            :     TabBar_Impl*    mpImpl;
     350                 :            :     TabBarEdit*     mpEdit;
     351                 :            :     XubString       maEditText;
     352                 :            :     Color           maSelColor;
     353                 :            :     Color           maSelTextColor;
     354                 :            :     Size            maWinSize;
     355                 :            :     long            mnMaxPageWidth;
     356                 :            :     long            mnCurMaxWidth;
     357                 :            :     long            mnOffX;
     358                 :            :     long            mnOffY;
     359                 :            :     long            mnLastOffX;
     360                 :            :     long            mnSplitSize;
     361                 :            :     sal_uLong           mnSwitchTime;
     362                 :            :     WinBits         mnWinStyle;
     363                 :            :     sal_uInt16          mnCurPageId;
     364                 :            :     sal_uInt16          mnFirstPos;
     365                 :            :     sal_uInt16          mnDropPos;
     366                 :            :     sal_uInt16          mnSwitchId;
     367                 :            :     sal_uInt16          mnEditId;
     368                 :            :     sal_Bool            mbFormat;
     369                 :            :     sal_Bool            mbFirstFormat;
     370                 :            :     sal_Bool            mbSizeFormat;
     371                 :            :     sal_Bool            mbAutoMaxWidth;
     372                 :            :     sal_Bool            mbInSwitching;
     373                 :            :     sal_Bool            mbAutoEditMode;
     374                 :            :     sal_Bool            mbEditCanceled;
     375                 :            :     sal_Bool            mbDropPos;
     376                 :            :     sal_Bool            mbInSelect;
     377                 :            :     sal_Bool            mbSelColor;
     378                 :            :     sal_Bool            mbSelTextColor;
     379                 :            :     bool            mbMirrored;
     380                 :            :     bool            mbHasInsertTab; // if true, the tab bar has an extra tab at the end.
     381                 :            :     Link            maSelectHdl;
     382                 :            :     Link            maDoubleClickHdl;
     383                 :            :     Link            maSplitHdl;
     384                 :            :     Link            maActivatePageHdl;
     385                 :            :     Link            maDeactivatePageHdl;
     386                 :            :     Link            maStartRenamingHdl;
     387                 :            :     Link            maAllowRenamingHdl;
     388                 :            :     Link            maEndRenamingHdl;
     389                 :            :     size_t          maCurrentItemList;
     390                 :            : 
     391                 :            :     using Window::ImplInit;
     392                 :            :     SVT_DLLPRIVATE void            ImplInit( WinBits nWinStyle );
     393                 :            :     SVT_DLLPRIVATE void            ImplInitSettings( sal_Bool bFont, sal_Bool bBackground );
     394                 :            :     SVT_DLLPRIVATE void            ImplGetColors( Color& rFaceColor, Color& rFaceTextColor,
     395                 :            :                                    Color& rSelectColor, Color& rSelectTextColor );
     396                 :            :     SVT_DLLPRIVATE void            ImplShowPage( sal_uInt16 nPos );
     397                 :            :     SVT_DLLPRIVATE sal_Bool            ImplCalcWidth();
     398                 :            :     SVT_DLLPRIVATE void            ImplFormat();
     399                 :            :     SVT_DLLPRIVATE sal_uInt16          ImplGetLastFirstPos();
     400                 :            :     SVT_DLLPRIVATE void            ImplInitControls();
     401                 :            :     SVT_DLLPRIVATE void            ImplEnableControls();
     402                 :            :     SVT_DLLPRIVATE void         ImplSelect();
     403                 :            :     SVT_DLLPRIVATE void         ImplActivatePage();
     404                 :            :     SVT_DLLPRIVATE long         ImplDeactivatePage();
     405                 :            :     SVT_DLLPRIVATE void            ImplPrePaint();
     406                 :            :     SVT_DLLPRIVATE ImplTabBarItem* ImplGetLastTabBarItem( sal_uInt16 nItemCount );
     407                 :            :     SVT_DLLPRIVATE Rectangle       ImplGetInsertTabRect(ImplTabBarItem* pItem) const;
     408                 :            :                     DECL_DLLPRIVATE_LINK( ImplClickHdl, ImplTabButton* );
     409                 :            : 
     410                 :            :     ImplTabBarItem* seek( size_t i );
     411                 :            :     ImplTabBarItem* prev();
     412                 :            :     ImplTabBarItem* next();
     413                 :            : 
     414                 :            : public:
     415                 :            :     static const sal_uInt16 APPEND;
     416                 :            :     static const sal_uInt16 PAGE_NOT_FOUND;
     417                 :            :     static const sal_uInt16 INSERT_TAB_POS;
     418                 :            : 
     419                 :            :                     TabBar( Window* pParent, WinBits nWinStyle = WB_STDTABBAR );
     420                 :            :     virtual         ~TabBar();
     421                 :            : 
     422                 :            :     virtual void    MouseMove( const MouseEvent& rMEvt );
     423                 :            :     virtual void    MouseButtonDown( const MouseEvent& rMEvt );
     424                 :            :     virtual void    MouseButtonUp( const MouseEvent& rMEvt );
     425                 :            :     virtual void    Paint( const Rectangle& rRect );
     426                 :            :     virtual void    Resize();
     427                 :            :     virtual void    RequestHelp( const HelpEvent& rHEvt );
     428                 :            :     virtual void    StateChanged( StateChangedType nStateChange );
     429                 :            :     virtual void    DataChanged( const DataChangedEvent& rDCEvt );
     430                 :            : 
     431                 :            :     virtual void    Select();
     432                 :            :     virtual void    DoubleClick();
     433                 :            :     virtual void    Split();
     434                 :            :     virtual void    ActivatePage();
     435                 :            :     virtual long    DeactivatePage();
     436                 :            :     virtual long    StartRenaming();
     437                 :            :     virtual long    AllowRenaming();
     438                 :            :     virtual void    EndRenaming();
     439                 :            :     virtual void    Mirror();
     440                 :            : 
     441                 :            :     void            InsertPage( sal_uInt16 nPageId, const XubString& rText,
     442                 :            :                                 TabBarPageBits nBits = 0,
     443                 :            :                                 sal_uInt16 nPos = TabBar::APPEND );
     444                 :            :     void            RemovePage( sal_uInt16 nPageId );
     445                 :            :     void            MovePage( sal_uInt16 nPageId, sal_uInt16 nNewPos );
     446                 :            : 
     447                 :            :     Color           GetTabBgColor( sal_uInt16 nPageId ) const;
     448                 :            :     void            SetTabBgColor( sal_uInt16 nPageId, const Color& aTabBgColor );
     449                 :            :     sal_Bool        IsDefaultTabBgColor( sal_uInt16 nPageId );
     450                 :            : 
     451                 :            :     void            Clear();
     452                 :            : 
     453                 :            :     sal_Bool            IsPageEnabled( sal_uInt16 nPageId ) const;
     454                 :            : 
     455                 :            :     void            SetPageBits( sal_uInt16 nPageId, TabBarPageBits nBits = 0 );
     456                 :            :     TabBarPageBits  GetPageBits( sal_uInt16 nPageId ) const;
     457                 :            : 
     458                 :            :     sal_uInt16          GetPageCount() const;
     459                 :            :     sal_uInt16          GetPageId( sal_uInt16 nPos ) const;
     460                 :            :     sal_uInt16          GetPagePos( sal_uInt16 nPageId ) const;
     461                 :            :     sal_uInt16          GetPageId( const Point& rPos, bool bCheckInsTab = false ) const;
     462                 :            :     Rectangle       GetPageRect( sal_uInt16 nPageId ) const;
     463                 :            :     // returns the rectangle in which page tabs are drawn
     464                 :            :     Rectangle       GetPageArea() const;
     465                 :            : 
     466                 :            :     void            SetCurPageId( sal_uInt16 nPageId );
     467                 :       2608 :     sal_uInt16          GetCurPageId() const { return mnCurPageId; }
     468                 :            : 
     469                 :            :     void            SetFirstPageId( sal_uInt16 nPageId );
     470                 :            :     sal_uInt16          GetFirstPageId() const { return GetPageId( mnFirstPos ); }
     471                 :            :     void            MakeVisible( sal_uInt16 nPageId );
     472                 :            : 
     473                 :            :     void            SelectPage( sal_uInt16 nPageId, sal_Bool bSelect = sal_True );
     474                 :            :     sal_uInt16          GetSelectPageCount() const;
     475                 :            :     sal_Bool            IsPageSelected( sal_uInt16 nPageId ) const;
     476                 :            : 
     477                 :            :     void            EnableAutoMaxPageWidth( sal_Bool bEnable = sal_True ) { mbAutoMaxWidth = bEnable; }
     478                 :            :     sal_Bool            IsAutoMaxPageWidthEnabled() const { return mbAutoMaxWidth; }
     479                 :            :     void            SetMaxPageWidth( long nMaxWidth );
     480                 :            :     long            GetMaxPageWidth() const { return mnMaxPageWidth; }
     481                 :            :     void            ResetMaxPageWidth() { SetMaxPageWidth( 0 ); }
     482                 :            :     sal_Bool            IsMaxPageWidth() const { return mnMaxPageWidth != 0; }
     483                 :            : 
     484                 :        463 :     void            EnableEditMode( sal_Bool bEnable = sal_True ) { mbAutoEditMode = bEnable; }
     485                 :            :     sal_Bool            IsEditModeEnabled() const { return mbAutoEditMode; }
     486                 :            :     sal_Bool            StartEditMode( sal_uInt16 nPageId );
     487                 :            :     void            EndEditMode( sal_Bool bCancel = sal_False );
     488                 :          0 :     void            SetEditText( const XubString& rText ) { maEditText = rText; }
     489                 :          0 :     const XubString& GetEditText() const { return maEditText; }
     490                 :          0 :     sal_Bool            IsInEditMode() const { return (mpEdit != NULL); }
     491                 :          0 :     sal_Bool            IsEditModeCanceled() const { return mbEditCanceled; }
     492                 :          0 :     sal_uInt16          GetEditPageId() const { return mnEditId; }
     493                 :            : 
     494                 :            :     /** Mirrors the entire control including position of buttons and splitter.
     495                 :            :         Mirroring is done relative to the current direction of the GUI.
     496                 :            :         @param bMirrored  sal_True = the control will draw itself RTL in LTR GUI,
     497                 :            :             and vice versa; sal_False = the control behaves according to the
     498                 :            :             current direction of the GUI. */
     499                 :            :     void            SetMirrored(bool bMirrored = true);
     500                 :            :     /** Returns sal_True, if the control is set to mirrored mode (see SetMirrored()). */
     501                 :          0 :     bool            IsMirrored() const { return mbMirrored; }
     502                 :            : 
     503                 :            :     /** Sets the control to LTR or RTL mode regardless of the GUI direction.
     504                 :            :         @param bRTL  sal_False = the control will draw from left to right;
     505                 :            :             sal_True = the control will draw from right to left. */
     506                 :            :     void            SetEffectiveRTL( bool bRTL );
     507                 :            :     /** Returns true, if the control draws from right to left (see SetEffectiveRTL()). */
     508                 :            :     bool            IsEffectiveRTL() const;
     509                 :            : 
     510                 :            :     sal_Bool            StartDrag( const CommandEvent& rCEvt, Region& rRegion );
     511                 :            :     sal_uInt16          ShowDropPos( const Point& rPos );
     512                 :            :     void            HideDropPos();
     513                 :            :     sal_Bool            SwitchPage( const Point& rPos );
     514                 :            :     void            EndSwitchPage();
     515                 :            :     sal_Bool            IsInSwitching() { return mbInSwitching; }
     516                 :            : 
     517                 :            :     const Color&    GetSelectColor() const { return maSelColor; }
     518                 :            :     sal_Bool            IsSelectColor() const { return mbSelColor; }
     519                 :            :     const Color&    GetSelectTextColor() const { return maSelTextColor; }
     520                 :            :     sal_Bool            IsSelectTextColor() const { return mbSelTextColor; }
     521                 :            : 
     522                 :            :     void            SetPageText( sal_uInt16 nPageId, const XubString& rText );
     523                 :            :     XubString       GetPageText( sal_uInt16 nPageId ) const;
     524                 :            :     XubString       GetHelpText( sal_uInt16 nPageId ) const;
     525                 :            :     rtl::OString    GetHelpId( sal_uInt16 nPageId ) const;
     526                 :            : 
     527                 :          0 :     long            GetSplitSize() const { return mnSplitSize; }
     528                 :            : 
     529                 :            :     void            SetHelpText( const XubString& rText )
     530                 :            :                         { Window::SetHelpText( rText ); }
     531                 :            :     XubString       GetHelpText() const
     532                 :            :                         { return Window::GetHelpText(); };
     533                 :        234 :     void            SetHelpId( const rtl::OString& rId )
     534                 :        234 :                         { Window::SetHelpId( rId ); }
     535                 :            :     const rtl::OString& GetHelpId() const
     536                 :            :                         { return Window::GetHelpId(); }
     537                 :            : 
     538                 :            :     void            SetStyle( WinBits nStyle );
     539                 :       1206 :     WinBits         GetStyle() const { return mnWinStyle; }
     540                 :            : 
     541                 :            :     Size            CalcWindowSizePixel() const;
     542                 :            : 
     543                 :          0 :     void            SetSelectHdl( const Link& rLink ) { maSelectHdl = rLink; }
     544                 :            :     const Link&     GetSelectHdl() const { return maSelectHdl; }
     545                 :            :     void            SetDoubleClickHdl( const Link& rLink ) { maDoubleClickHdl = rLink; }
     546                 :            :     const Link&     GetDoubleClickHdl() const { return maDoubleClickHdl; }
     547                 :        463 :     void            SetSplitHdl( const Link& rLink ) { maSplitHdl = rLink; }
     548                 :            :     const Link&     GetSplitHdl() const { return maSplitHdl; }
     549                 :            :     void            SetActivatePageHdl( const Link& rLink ) { maActivatePageHdl = rLink; }
     550                 :            :     const Link&     GetActivatePageHdl() const { return maActivatePageHdl; }
     551                 :            :     void            SetDeactivatePageHdl( const Link& rLink ) { maDeactivatePageHdl = rLink; }
     552                 :            :     const Link&     GetDeactivatePageHdl() const { return maDeactivatePageHdl; }
     553                 :            :     void            SetStartRenamingHdl( const Link& rLink ) { maStartRenamingHdl = rLink; }
     554                 :            :     const Link&     GetStartRenamingHdl() const { return maStartRenamingHdl; }
     555                 :            :     void            SetAllowRenamingHdl( const Link& rLink ) { maAllowRenamingHdl = rLink; }
     556                 :            :     const Link&     GetAllowRenamingHdl() const { return maAllowRenamingHdl; }
     557                 :            :     void            SetEndRenamingHdl( const Link& rLink ) { maEndRenamingHdl = rLink; }
     558                 :            :     const Link&     GetEndRenamingHdl() const { return maEndRenamingHdl; }
     559                 :            : 
     560                 :            :     // accessibility
     561                 :            :     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
     562                 :            : };
     563                 :            : 
     564                 :            : #endif  // _TABBAR_HXX
     565                 :            : 
     566                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10