* Copyright (C) 2010 Stephan Aßmus <superstippi@gmx.de>
*
* All rights reserved. Distributed under the terms of the MIT License.
*/
#ifndef TAB_CONTAINER_VIEW_H
#define TAB_CONTAINER_VIEW_H
#include <GroupView.h>
class TabView;
class TabContainerView : public BGroupView {
public:
class Controller {
public:
virtual void UpdateSelection(int32 index) = 0;
virtual bool HasFrames() = 0;
virtual TabView* CreateTabView() = 0;
virtual void DoubleClickOutsideTabs() = 0;
virtual void UpdateTabScrollability(bool canScrollLeft,
bool canScrollRight) = 0;
virtual void SetToolTip(const BString& text) = 0;
};
public:
TabContainerView(Controller* controller);
virtual ~TabContainerView();
virtual BSize MinSize();
virtual void MessageReceived(BMessage*);
virtual void Draw(BRect updateRect);
virtual void MouseDown(BPoint where);
virtual void MouseUp(BPoint where);
virtual void MouseMoved(BPoint where, uint32 transit,
const BMessage* dragMessage);
virtual void DoLayout();
void AddTab(const char* label, int32 index = -1);
void AddTab(TabView* tab, int32 index = -1);
TabView* RemoveTab(int32 index);
TabView* TabAt(int32 index) const;
int32 IndexOf(TabView* tab) const;
int32 FirstTabIndex() { return 0; };
int32 LastTabIndex()
{ return GroupLayout() == NULL ? -1
: GroupLayout()->CountItems() - 1; };
int32 SelectedTabIndex()
{ return fSelectedTab == NULL ? -1
: IndexOf(fSelectedTab); };
TabView* SelectedTab() { return fSelectedTab; };
void SelectTab(int32 tabIndex);
void SelectTab(TabView* tab);
void SetTabLabel(int32 tabIndex, const char* label);
void SetFirstVisibleTabIndex(int32 index);
int32 FirstVisibleTabIndex() const;
int32 MaxFirstVisibleTabIndex() const;
bool CanScrollLeft() const;
bool CanScrollRight() const;
private:
TabView* _TabAt(const BPoint& where) const;
void _MouseMoved(BPoint where, uint32 transit,
const BMessage* dragMessage);
void _ValidateTabVisibility();
void _UpdateTabVisibility();
float _AvailableWidthForTabs() const;
void _SendFakeMouseMoved();
private:
TabView* fLastMouseEventTab;
bool fMouseDown;
uint32 fClickCount;
TabView* fSelectedTab;
Controller* fController;
int32 fFirstVisibleTabIndex;
};
#endif