1 /* 2 * Copyright (C) 2010 Stephan Aßmus <superstippi@gmx.de> 3 * 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 #ifndef TAB_VIEW_H 28 #define TAB_VIEW_H 29 30 #include <AbstractLayoutItem.h> 31 #include <Rect.h> 32 #include <String.h> 33 34 35 class BMessage; 36 class BView; 37 class TabContainerView; 38 class TabLayoutItem; 39 40 41 class TabView { 42 public: 43 TabView(); 44 virtual ~TabView(); 45 46 virtual BSize MinSize(); 47 virtual BSize PreferredSize(); 48 virtual BSize MaxSize(); 49 50 void Draw(BRect updateRect); 51 virtual void DrawBackground(BView* owner, BRect frame, 52 const BRect& updateRect, bool isFirst, 53 bool isLast, bool isFront); 54 virtual void DrawContents(BView* owner, BRect frame, 55 const BRect& updateRect, bool isFirst, 56 bool isLast, bool isFront); 57 58 virtual void MouseDown(BPoint where, uint32 buttons); 59 virtual void MouseUp(BPoint where); 60 virtual void MouseMoved(BPoint where, uint32 transit, 61 const BMessage* dragMessage); 62 63 void SetIsFront(bool isFront); 64 bool IsFront() const; 65 void SetIsLast(bool isLast); 66 virtual void Update(bool isFirst, bool isLast, 67 bool isFront); 68 69 BLayoutItem* LayoutItem() const; 70 void SetContainerView( 71 TabContainerView* containerView); 72 TabContainerView* ContainerView() const; 73 74 void SetLabel(const char* label); 75 const BString& Label() const; 76 77 BRect Frame() const; 78 79 private: 80 float _LabelHeight() const; 81 82 private: 83 TabContainerView* fContainerView; 84 TabLayoutItem* fLayoutItem; 85 86 BString fLabel; 87 88 bool fIsFirst; 89 bool fIsLast; 90 bool fIsFront; 91 }; 92 93 94 class TabLayoutItem : public BAbstractLayoutItem { 95 public: 96 TabLayoutItem(TabView* parent); 97 98 virtual bool IsVisible(); 99 virtual void SetVisible(bool visible); 100 101 virtual BRect Frame(); 102 virtual void SetFrame(BRect frame); 103 104 virtual BView* View(); 105 106 virtual BSize BaseMinSize(); 107 virtual BSize BaseMaxSize(); 108 virtual BSize BasePreferredSize(); 109 virtual BAlignment BaseAlignment(); 110 111 TabView* Parent() const; 112 void InvalidateContainer(); 113 void InvalidateContainer(BRect frame); 114 private: 115 TabView* fParent; 116 BRect fFrame; 117 bool fVisible; 118 }; 119 120 121 122 #endif // TAB_VIEW_H 123