xref: /haiku/src/apps/webpositive/tabview/TabManager.h (revision 1026b0a1a76dc88927bb8175c470f638dc5464ee)
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 
28 #ifndef TAB_MANAGER_H
29 #define TAB_MANAGER_H
30 
31 #include <Messenger.h>
32 #include <TabView.h>
33 
34 enum {
35     TAB_CHANGED = 'tcha',
36     CLOSE_TAB = 'cltb'
37 };
38 
39 class BBitmap;
40 class BCardLayout;
41 class BGroupView;
42 class BMenu;
43 class TabContainerGroup;
44 class TabContainerView;
45 class TabManagerController;
46 
47 class TabManager {
48 public:
49     							TabManager(const BMessenger& target,
50     								BMessage* newTabMessage);
51 	virtual						~TabManager();
52 
53 			void				SetTarget(const BMessenger& target);
54 			const BMessenger&	Target() const;
55 
56 #if INTEGRATE_MENU_INTO_TAB_BAR
57 			BMenu*				Menu() const;
58 #endif
59 
60 			BView*				TabGroup() const;
61 			BView*				GetTabContainerView() const;
62 			BView*				ContainerView() const;
63 
64 			BView*				ViewForTab(int32 tabIndex) const;
65 			int32				TabForView(const BView* containedView) const;
66 			bool				HasView(const BView* containedView) const;
67 
68 			void				SelectTab(int32 tabIndex);
69 			void				SelectTab(const BView* containedView);
70 			int32				SelectedTabIndex() const;
71 			void				CloseTab(int32 tabIndex);
72 
73 			void				AddTab(BView* view, const char* label,
74 									int32 index = -1);
75 			BView*				RemoveTab(int32 index);
76 			int32				CountTabs() const;
77 
78 			void				SetTabLabel(int32 tabIndex, const char* label);
79 	const	BString&			TabLabel(int32);
80 			void				SetTabIcon(const BView* containedView,
81 									const BBitmap* icon);
82 			void				SetCloseButtonsAvailable(bool available);
83 
84 private:
85 #if INTEGRATE_MENU_INTO_TAB_BAR
86 			BMenu*				fMenu;
87 #endif
88 			TabContainerGroup*	fTabContainerGroup;
89 			TabContainerView*	fTabContainerView;
90 			BView*				fContainerView;
91 			BCardLayout*		fCardLayout;
92 			TabManagerController* fController;
93 
94 			BMessenger			fTarget;
95 };
96 
97 #endif // TAB_MANAGER_H
98