Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement important Titanium.UI.ScrollableView functionality #31

Merged
merged 6 commits into from
May 9, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
87 changes: 84 additions & 3 deletions src/tibb/NativeControlObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ NativeControlObject::NativeControlObject(TiObject* tiObject, NATIVE_TYPE objType
layoutNode_.data = this;


if (objType == N_TYPE_VIEW || objType == N_TYPE_WEBVIEW || objType == N_TYPE_LIST_VIEW || objType == N_TYPE_SCROLL_VIEW) {
if (objType == N_TYPE_VIEW || objType == N_TYPE_WEBVIEW || objType == N_TYPE_LIST_VIEW || objType == N_TYPE_SCROLL_VIEW || objType == N_TYPE_SCROLLABLE_VIEW) {
layoutNode_.properties.width.valueType = Fill;
layoutNode_.properties.height.valueType = Fill;
}
Expand Down Expand Up @@ -987,6 +987,12 @@ int NativeControlObject::setAnnotations(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setViews)
int NativeControlObject::setViews(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}
//////////////////////

// Annotation properties
Expand Down Expand Up @@ -1119,12 +1125,72 @@ int NativeControlObject::getTabs(TiObject* obj)
return NATIVE_ERROR_NOTSUPPORTED;
}

// ScrollableView
PROP_SETGET(setCurrentPage)
int NativeControlObject::setCurrentPage(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setOverScrollMode)
int NativeControlObject::setOverScrollMode(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setOverlayEnabled)
int NativeControlObject::setOverlayEnabled(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setPagingControlAlpha)
int NativeControlObject::setPagingControlAlpha(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setPagingControlColor)
int NativeControlObject::setPagingControlColor(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setPagingControlHeight)
int NativeControlObject::setPagingControlHeight(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setPagingControlOnTop)
int NativeControlObject::setPagingControlOnTop(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setPagingControlTimeout)
int NativeControlObject::setPagingControlTimeout(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setScrollingEnabled)
int NativeControlObject::setScrollingEnabled(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

PROP_SETGET(setShowPagingControl)
int NativeControlObject::setShowPagingControl(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

// PROP_SETTING_FUNCTION resolves the static name of the function, e.g.,
// PROP_SETTING_FUNCTION(setBackgroundColor) resolves to "prop_setBackgroundColor"

const static NATIVE_PROPSETGET_SETTING g_propSetGet[] =
{
{N_PROP_DISABLE_BOUNCE, PROP_SETGET_FUNCTION(setDisableBounce), NULL},
{N_PROP_ENABLE_ZOOM_CONTROLS, PROP_SETGET_FUNCTION(setEnableZoomControls), NULL},
{N_PROP_HIDE_LOAD_INDICATOR, PROP_SETGET_FUNCTION(setHideLoadIndicator), NULL},
{N_PROP_HTML, PROP_SETGET_FUNCTION(setHtml), NULL},
Expand Down Expand Up @@ -1210,7 +1276,22 @@ const static NATIVE_PROPSETGET_SETTING g_propSetGet[] =

// TabGroup properties
{N_PROP_ACTIVE_TAB, PROP_SETGET_FUNCTION(setActiveTab), PROP_SETGET_FUNCTION(getActiveTab)},
{N_PROP_TABS, NULL, PROP_SETGET_FUNCTION(getTabs)}
{N_PROP_TABS, NULL, PROP_SETGET_FUNCTION(getTabs)},

// ScrollableView
{N_PROP_VIEWS, PROP_SETGET_FUNCTION(setViews), NULL},
{N_PROP_CURRENT_PAGE, PROP_SETGET_FUNCTION(setCurrentPage), NULL},
{N_PROP_DISABLE_BOUNCE, PROP_SETGET_FUNCTION(setDisableBounce), NULL},
{N_PROP_OVER_SCROLL_MODE, PROP_SETGET_FUNCTION(setOverScrollMode), NULL},
{N_PROP_OVERLAY_ENABLED, PROP_SETGET_FUNCTION(setOverlayEnabled), NULL},
{N_PROP_PAGING_CONTROL_ALPHA, PROP_SETGET_FUNCTION(setPagingControlAlpha), NULL},
{N_PROP_PAGING_CONTROL_COLOR, PROP_SETGET_FUNCTION(setPagingControlColor), NULL},
{N_PROP_PAGING_CONTROL_HEIGHT, PROP_SETGET_FUNCTION(setPagingControlHeight), NULL},
{N_PROP_PAGING_CONTROL_ON_TOP, PROP_SETGET_FUNCTION(setPagingControlOnTop), NULL},
{N_PROP_PAGING_CONTROL_TIMEOUT, PROP_SETGET_FUNCTION(setPagingControlTimeout), NULL},
{N_PROP_SCROLLING_ENABLED, PROP_SETGET_FUNCTION(setScrollingEnabled), NULL},
{N_PROP_SHOW_PAGING_CONTROL, PROP_SETGET_FUNCTION(setShowPagingControl), NULL},

};

static SetGetProperties g_props(g_propSetGet, GET_ARRAY_SIZE(g_propSetGet));
Expand Down
16 changes: 14 additions & 2 deletions src/tibb/NativeControlObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ class NativeControlObject : public NativeProxyObject
virtual int setContentHeight(TiObject* obj);
virtual int setContentWidth(TiObject* obj);
virtual int setData(TiObject* obj);
virtual int setDisableBounce(TiObject* obj);
virtual int setEnabled(TiObject* obj);
virtual int setEnableZoomControls(TiObject* obj);
virtual int setFont(TiObject* obj);
Expand Down Expand Up @@ -138,7 +137,7 @@ class NativeControlObject : public NativeProxyObject
virtual int setLeftView(TiObject* obj);
virtual int setRightView(TiObject* obj);
////////////////////////
// Media properties
// Media properties
virtual int getPlaying(TiObject* obj);
virtual int getPaused(TiObject* obj);
virtual int getProgress(TiObject* obj);
Expand Down Expand Up @@ -171,6 +170,19 @@ class NativeControlObject : public NativeProxyObject
virtual int setActiveTab(TiObject* obj);
virtual int getActiveTab(TiObject* obj);
virtual int getTabs(TiObject* obj);
// ScrollableView
virtual int setCurrentPage(TiObject* obj);
virtual int setDisableBounce(TiObject* obj);
virtual int setOverScrollMode(TiObject* obj);
virtual int setOverlayEnabled(TiObject* obj);
virtual int setPagingControlAlpha(TiObject* obj);
virtual int setPagingControlColor(TiObject* obj);
virtual int setPagingControlHeight(TiObject* obj);
virtual int setPagingControlOnTop(TiObject* obj);
virtual int setPagingControlTimeout(TiObject* obj);
virtual int setScrollingEnabled(TiObject* obj);
virtual int setShowPagingControl(TiObject* obj);
virtual int setViews(TiObject* obj);

bb::cascades::Container* container_;

Expand Down
16 changes: 15 additions & 1 deletion src/tibb/NativeObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ enum NATIVE_TYPE
, N_TYPE_UDPSOCKET
, N_TYPE_HTTPCLIENT
, N_TYPE_SCROLL_VIEW
, N_TYPE_SCROLLABLE_VIEW
, N_TYPE_TEXT_FIELD
, N_TYPE_TEXT_AREA
, N_TYPE_TOGGLEBUTTON
Expand All @@ -55,6 +56,7 @@ enum NATIVE_TYPE
, N_TYPE_WINDOW
, N_TYPE_DB
, N_TYPE_RESULTSET
// ScrollableView
};

enum NATIVE_PROP
Expand Down Expand Up @@ -165,7 +167,6 @@ enum NATIVE_PROP
, N_PROP_VOLUME
////////////////////////
//TODO: need to place alphabetically
, N_PROP_DISABLE_BOUNCE
, N_PROP_ENABLE_ZOOM_CONTROLS
, N_PROP_HIDE_LOAD_INDICATOR
, N_PROP_HTML
Expand All @@ -176,6 +177,19 @@ enum NATIVE_PROP
, N_PROP_SHOW_SCROLL_BARS
, N_PROP_USER_AGENT
, N_PROP_WILL_HANDLE_TOUCHES
// ScrollableView
, N_PROP_CURRENT_PAGE
, N_PROP_DISABLE_BOUNCE
, N_PROP_OVER_SCROLL_MODE
, N_PROP_OVERLAY_ENABLED
, N_PROP_PAGING_CONTROL_ALPHA
, N_PROP_PAGING_CONTROL_COLOR
, N_PROP_PAGING_CONTROL_HEIGHT
, N_PROP_PAGING_CONTROL_ON_TOP
, N_PROP_PAGING_CONTROL_TIMEOUT
, N_PROP_SCROLLING_ENABLED
, N_PROP_SHOW_PAGING_CONTROL
, N_PROP_VIEWS

/* This MUST be the last element */
, N_PROP_LAST
Expand Down
5 changes: 5 additions & 0 deletions src/tibb/NativeObjectFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "NativeDBObject.h"
#include "NativeResultSetObject.h"
#include "NativeScrollViewObject.h"
#include "NativeScrollableViewObject.h"
#include "NativeWebViewObject.h"
#include "NativeMapViewObject.h"
#include "NativeAnnotationObject.h"
Expand Down Expand Up @@ -160,6 +161,10 @@ NativeObject* NativeObjectFactory::createNativeObject(int type, TiObject* tiObj)
obj = NativeScrollViewObject::createScrollView(tiObj);
break;

case N_TYPE_SCROLLABLE_VIEW:
obj = NativeScrollableViewObject::createScrollableView(tiObj);
break;

case N_TYPE_DB:
obj = NativeDBObject::createDB(tiObj);
break;
Expand Down
1 change: 1 addition & 0 deletions src/tibb/NativeScrollViewObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,4 @@ void NativeScrollViewObject::setupEvents(TiEventContainerFactory* containerFacto
QObject::connect(button_, SIGNAL(clicked()), events_[tetCLICK]->handler(), SLOT(clicked(void)));
*/
}

173 changes: 173 additions & 0 deletions src/tibb/NativeScrollableViewObject.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
/**
* Appcelerator Titanium Mobile
* Copyright (c) 2009-2012 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Apache Public License
* Please see the LICENSE included with this distribution for details.
*/


#include "NativeScrollableViewObject.h"
#include "TiEvent.h"
#include "TiEventContainerFactory.h"
#include "TiScrollableView/TiScrollableView.h"
#include <v8.h>

NATIVE_TYPE NativeScrollableViewObject::getObjectType() const
{
return N_TYPE_SCROLLABLE_VIEW;
}

NativeScrollableViewObject::NativeScrollableViewObject(TiObject* tiObject)
: NativeControlObject(tiObject, N_TYPE_SCROLLABLE_VIEW)
{
scrollableView_ = NULL;
}

NativeScrollableViewObject::~NativeScrollableViewObject()
{
}

NativeScrollableViewObject* NativeScrollableViewObject::createScrollableView(TiObject* tiObject)
{
return new NativeScrollableViewObject(tiObject);
}

int NativeScrollableViewObject::initialize()
{
scrollableView_ = new TiScrollableView();
setControl(scrollableView_);
return NATIVE_ERROR_OK;
}

void NativeScrollableViewObject::updateLayout(QRectF rect)
{
NativeControlObject::updateLayout(rect);
float h = rect.height();
float w = rect.width();
scrollableView_->setPreferredSize(w, h);
}

int NativeScrollableViewObject::addChildNativeObject(NativeObject* obj)
{
addChildImpl(obj);
scrollableView_->addView((bb::cascades::Container*)obj->getNativeHandle());
allViews_.append(obj);
return NATIVE_ERROR_OK;
}

// Javascript methods:
int NativeScrollableViewObject::setViews(TiObject* obj)
{
QVector<NativeObject*> views_;
int error = NativeControlObject::getObjectArray(obj, views_);
if (error != NATIVE_ERROR_OK)
{
return error;
}

for (int i = 0, len = views_.size(); i < len; i++) {
NativeObject* view = (NativeObject*)views_[i];
addChildNativeObject(view);
}
return NATIVE_ERROR_OK;
}

void NativeScrollableViewObject::moveNext()
{
if(scrollableView_->currentIndex == scrollableView_->indexCount - 1) return;
scrollableView_->scrollToIndex(scrollableView_->currentIndex + 1, true);
}

void NativeScrollableViewObject::movePrevious()
{
if(scrollableView_->currentIndex == 0) return;
scrollableView_->scrollToIndex(scrollableView_->currentIndex - 1, true);
}

void NativeScrollableViewObject::scrollToView(NativeObject *view, bool animated)
{
if(allViews_.contains(view)) {
int index = allViews_.indexOf(view);
scrollToIndex(index, animated);
}
}

void NativeScrollableViewObject::scrollToIndex(int index, bool animated) {
scrollableView_->scrollToIndex(index, animated);
}

int NativeScrollableViewObject::setCurrentPage(TiObject* obj)
{
int index;
int error = NativeControlObject::getInteger(obj, &index);
if (error != NATIVE_ERROR_OK)
{
return error;
}
scrollableView_->startAt(index);
scrollToIndex(index, false);

return NATIVE_ERROR_OK;
}

int NativeScrollableViewObject::setDisableBounce(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

int NativeScrollableViewObject::setOverScrollMode(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

int NativeScrollableViewObject::setOverlayEnabled(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

int NativeScrollableViewObject::setPagingControlAlpha(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

int NativeScrollableViewObject::setPagingControlColor(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

int NativeScrollableViewObject::setPagingControlHeight(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

int NativeScrollableViewObject::setPagingControlOnTop(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

int NativeScrollableViewObject::setPagingControlTimeout(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

int NativeScrollableViewObject::setScrollingEnabled(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

int NativeScrollableViewObject::setShowPagingControl(TiObject*)
{
return NATIVE_ERROR_NOTSUPPORTED;
}

// TODO events
void NativeScrollableViewObject::setupEvents(TiEventContainerFactory* containerFactory)
{
NativeControlObject::setupEvents(containerFactory);
/*
TiEventContainer* eventClick = containerFactory->createEventContainer();
eventClick->setDataProperty("type", tetCLICK);
events_.insert(tetCLICK, EventPairSmartPtr(eventClick, new ScrollableViewEventHandler(eventClick)));
QObject::connect(button_, SIGNAL(clicked()), events_[tetCLICK]->handler(), SLOT(clicked(void)));
*/
}