Escher: TabViewController is working!

Change-Id: I4aa730abbf1d7034d2fcbc40416dcb84076a347b
This commit is contained in:
Romain Goyet
2016-05-26 11:33:42 +02:00
parent b79b7b5133
commit 095901a7ca
12 changed files with 278 additions and 72 deletions

View File

@@ -3,20 +3,33 @@ extern "C" {
}
#include <escher/tab_view_controller.h>
TabViewController::ContentView::ContentView(TabViewController * vc) :
TabViewController::ContentView::ContentView() :
View(),
m_tabView(TabView(vc)),
m_activeView(nullptr)
{
setSubview(&m_tabView, 0);
};
void TabViewController::ContentView::setActiveView(View * view) {
setSubview(view, 1);
layoutSubviews();
}
void TabViewController::ContentView::layoutSubviews() {
KDCoordinate tabHeight = 20;
m_tabView.setFrame({
0,
0,
this->bounds().width,
tabHeight
});
if (m_activeView) {
m_activeView->setFrame(this->bounds());
m_activeView->setFrame({
0,
tabHeight,
this->bounds().width,
(KDCoordinate)(this->bounds().height - tabHeight)
});
}
}
@@ -33,17 +46,20 @@ View * TabViewController::ContentView::subview(int index) {
}
}
void TabViewController::ContentView::ContentView::storeSubviewAtIndex(View * view, int index) {
assert(index == 1);
m_activeView = view;
void TabViewController::ContentView::storeSubviewAtIndex(View * view, int index) {
if (index == 1) {
m_activeView = view;
}
}
TabViewController::TabViewController(ViewController ** children) :
TabViewController::TabViewController(ViewController ** children, uint8_t numberOfChildren) :
m_children(children),
m_activeChildIndex(0),
m_view(ContentView(this))
m_numberOfChildren(numberOfChildren),
m_activeChildIndex(-1)
{
setActiveTab(0);
for (int i=0; i<numberOfChildren; i++) {
m_view.m_tabView.addTabNamed(children[i]->title());
}
}
void TabViewController::setActiveTab(uint8_t i) {
@@ -53,15 +69,27 @@ void TabViewController::setActiveTab(uint8_t i) {
//TODO assert(i <= m_numberOfchildren);
ViewController * activeVC = m_children[i];
m_view.setActiveView(activeVC->view());
m_view.m_tabView.setActiveIndex(i);
m_activeChildIndex = i;
m_view.redraw();
//m_tabView.redraw();
}
View * TabViewController::view() {
// We're asked for a view!
// Let's populate our tabview
setActiveTab(0);
return &m_view;
}
void TabViewController::handleKeyEvent(int key) {
// Switch tabs!
}
uint8_t TabViewController::numberOfTabs() {
return m_numberOfChildren;
}
const char * TabViewController::tabName(uint8_t index) {
return m_children[index]->title();
}