mirror of https://github.com/axmolengine/axmol.git
issue #5057, refactor Listview
This commit is contained in:
parent
e1fe26543d
commit
43eb75fb1a
|
@ -2020,7 +2020,7 @@ void WidgetPropertiesReader0300::setPropsForListViewFromJsonDictionary(Widget* w
|
|||
int direction = DICTOOL->getFloatValue_json(options, "direction");
|
||||
listView->setDirection((SCROLLVIEW_DIR)direction);
|
||||
|
||||
ListViewGravity gravity = (ListViewGravity)DICTOOL->getIntValue_json(options, "gravity");
|
||||
ListView::Gravity gravity = (ListView::Gravity)DICTOOL->getIntValue_json(options, "gravity");
|
||||
listView->setGravity(gravity);
|
||||
|
||||
float itemMargin = DICTOOL->getFloatValue_json(options, "itemMargin");
|
||||
|
|
|
@ -41,7 +41,7 @@ namespace cocostudio
|
|||
int direction = DICTOOL->getFloatValue_json(options, "direction");
|
||||
listView->setDirection((SCROLLVIEW_DIR)direction);
|
||||
|
||||
ListViewGravity gravity = (ListViewGravity)DICTOOL->getIntValue_json(options, "gravity");
|
||||
ListView::Gravity gravity = (ListView::Gravity)DICTOOL->getIntValue_json(options, "gravity");
|
||||
listView->setGravity(gravity);
|
||||
|
||||
float itemMargin = DICTOOL->getFloatValue_json(options, "itemMargin");
|
||||
|
|
|
@ -115,6 +115,12 @@ CC_DEPRECATED_ATTRIBUTE const RelativeLayoutParameter::RelativeAlign RELATIVE_LO
|
|||
CC_DEPRECATED_ATTRIBUTE const RelativeLayoutParameter::RelativeAlign RELATIVE_LOCATION_BELOW_RIGHTALIGN
|
||||
= RelativeLayoutParameter::RelativeAlign::LOCATION_BELOW_RIGHTALIGN;
|
||||
|
||||
CC_DEPRECATED_ATTRIBUTE const ListView::Gravity LISTVIEW_GRAVITY_LEFT = ListView::Gravity::LEFT;
|
||||
CC_DEPRECATED_ATTRIBUTE const ListView::Gravity LISTVIEW_GRAVITY_RIGHT = ListView::Gravity::RIGHT;
|
||||
CC_DEPRECATED_ATTRIBUTE const ListView::Gravity LISTVIEW_GRAVITY_CENTER_HORIZONTAL = ListView::Gravity::CENTER_HORIZONTAL;
|
||||
CC_DEPRECATED_ATTRIBUTE const ListView::Gravity LISTVIEW_GRAVITY_TOP = ListView::Gravity::TOP;
|
||||
CC_DEPRECATED_ATTRIBUTE const ListView::Gravity LISTVIEW_GRAVITY_BOTTOM = ListView::Gravity::BOTTOM;
|
||||
CC_DEPRECATED_ATTRIBUTE const ListView::Gravity LISTVIEW_GRAVITY_CENTER_VERTICAL = ListView::Gravity::CENTER_VERTICAL;
|
||||
|
||||
CC_DEPRECATED_ATTRIBUTE typedef Widget::TextureResType TextureResType;
|
||||
CC_DEPRECATED_ATTRIBUTE typedef Widget::PositionType PositionType;
|
||||
|
@ -127,6 +133,7 @@ CC_DEPRECATED_ATTRIBUTE typedef Layout::BackGroundColorType LayoutBackGroundColo
|
|||
CC_DEPRECATED_ATTRIBUTE typedef LayoutParameter::Type LayoutParameterType;
|
||||
CC_DEPRECATED_ATTRIBUTE typedef LinearLayoutParameter::LinearGravity LinearGravity;
|
||||
CC_DEPRECATED_ATTRIBUTE typedef RelativeLayoutParameter::RelativeAlign RelativeAlign;
|
||||
CC_DEPRECATED_ATTRIBUTE typedef ListView::Gravity ListViewGravity;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -34,12 +34,13 @@ IMPLEMENT_CLASS_GUI_INFO(ListView)
|
|||
|
||||
ListView::ListView():
|
||||
_model(nullptr),
|
||||
_gravity(LISTVIEW_GRAVITY_CENTER_HORIZONTAL),
|
||||
_gravity(Gravity::CENTER_VERTICAL),
|
||||
_itemsMargin(0.0f),
|
||||
_listViewEventListener(nullptr),
|
||||
_listViewEventSelector(nullptr),
|
||||
_curSelectedIndex(0),
|
||||
_refreshViewDirty(true)
|
||||
_refreshViewDirty(true),
|
||||
_eventCallback(nullptr)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -134,13 +135,13 @@ void ListView::remedyLayoutParameter(Widget *item)
|
|||
{
|
||||
LinearLayoutParameter* defaultLp = LinearLayoutParameter::create();
|
||||
switch (_gravity) {
|
||||
case LISTVIEW_GRAVITY_LEFT:
|
||||
case Gravity::LEFT:
|
||||
defaultLp->setGravity(LinearLayoutParameter::LinearGravity::LEFT);
|
||||
break;
|
||||
case LISTVIEW_GRAVITY_RIGHT:
|
||||
case Gravity::RIGHT:
|
||||
defaultLp->setGravity(LinearLayoutParameter::LinearGravity::RIGHT);
|
||||
break;
|
||||
case LISTVIEW_GRAVITY_CENTER_HORIZONTAL:
|
||||
case Gravity::CENTER_HORIZONTAL:
|
||||
defaultLp->setGravity(LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL);
|
||||
break;
|
||||
default:
|
||||
|
@ -167,13 +168,13 @@ void ListView::remedyLayoutParameter(Widget *item)
|
|||
llp->setMargin(Margin(0.0f, _itemsMargin, 0.0f, 0.0f));
|
||||
}
|
||||
switch (_gravity) {
|
||||
case LISTVIEW_GRAVITY_LEFT:
|
||||
case Gravity::LEFT:
|
||||
llp->setGravity(LinearLayoutParameter::LinearGravity::LEFT);
|
||||
break;
|
||||
case LISTVIEW_GRAVITY_RIGHT:
|
||||
case Gravity::RIGHT:
|
||||
llp->setGravity(LinearLayoutParameter::LinearGravity::RIGHT);
|
||||
break;
|
||||
case LISTVIEW_GRAVITY_CENTER_HORIZONTAL:
|
||||
case Gravity::CENTER_HORIZONTAL:
|
||||
llp->setGravity(LinearLayoutParameter::LinearGravity::CENTER_HORIZONTAL);
|
||||
break;
|
||||
default:
|
||||
|
@ -189,13 +190,13 @@ void ListView::remedyLayoutParameter(Widget *item)
|
|||
{
|
||||
LinearLayoutParameter* defaultLp = LinearLayoutParameter::create();
|
||||
switch (_gravity) {
|
||||
case LISTVIEW_GRAVITY_TOP:
|
||||
case Gravity::TOP:
|
||||
defaultLp->setGravity(LinearLayoutParameter::LinearGravity::TOP);
|
||||
break;
|
||||
case LISTVIEW_GRAVITY_BOTTOM:
|
||||
case Gravity::BOTTOM:
|
||||
defaultLp->setGravity(LinearLayoutParameter::LinearGravity::BOTTOM);
|
||||
break;
|
||||
case LISTVIEW_GRAVITY_CENTER_VERTICAL:
|
||||
case Gravity::CENTER_VERTICAL:
|
||||
defaultLp->setGravity(LinearLayoutParameter::LinearGravity::CENTER_VERTICAL);
|
||||
break;
|
||||
default:
|
||||
|
@ -222,13 +223,13 @@ void ListView::remedyLayoutParameter(Widget *item)
|
|||
llp->setMargin(Margin(_itemsMargin, 0.0f, 0.0f, 0.0f));
|
||||
}
|
||||
switch (_gravity) {
|
||||
case LISTVIEW_GRAVITY_TOP:
|
||||
case Gravity::TOP:
|
||||
llp->setGravity(LinearLayoutParameter::LinearGravity::TOP);
|
||||
break;
|
||||
case LISTVIEW_GRAVITY_BOTTOM:
|
||||
case Gravity::BOTTOM:
|
||||
llp->setGravity(LinearLayoutParameter::LinearGravity::BOTTOM);
|
||||
break;
|
||||
case LISTVIEW_GRAVITY_CENTER_VERTICAL:
|
||||
case Gravity::CENTER_VERTICAL:
|
||||
llp->setGravity(LinearLayoutParameter::LinearGravity::CENTER_VERTICAL);
|
||||
break;
|
||||
default:
|
||||
|
@ -331,7 +332,7 @@ ssize_t ListView::getIndex(Widget *item) const
|
|||
return _items.getIndex(item);
|
||||
}
|
||||
|
||||
void ListView::setGravity(ListViewGravity gravity)
|
||||
void ListView::setGravity(Gravity gravity)
|
||||
{
|
||||
if (_gravity == gravity)
|
||||
{
|
||||
|
@ -408,22 +409,37 @@ void ListView::addEventListenerListView(Ref *target, SEL_ListViewEvent selector)
|
|||
_listViewEventSelector = selector;
|
||||
}
|
||||
|
||||
void ListView::addEventListener(ccListViewCallback callback)
|
||||
{
|
||||
_eventCallback = callback;
|
||||
}
|
||||
|
||||
void ListView::selectedItemEvent(int state)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
if (_listViewEventListener && _listViewEventSelector)
|
||||
{
|
||||
(_listViewEventListener->*_listViewEventSelector)(this, LISTVIEW_ONSELECTEDITEM_START);
|
||||
}
|
||||
break;
|
||||
if (_eventCallback) {
|
||||
_eventCallback(this,EventType::ON_SELECTED_ITEM_START);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
if (_listViewEventListener && _listViewEventSelector)
|
||||
{
|
||||
(_listViewEventListener->*_listViewEventSelector)(this, LISTVIEW_ONSELECTEDITEM_END);
|
||||
}
|
||||
break;
|
||||
if (_eventCallback) {
|
||||
_eventCallback(this, EventType::ON_SELECTED_ITEM_END);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,25 +31,14 @@ THE SOFTWARE.
|
|||
NS_CC_BEGIN
|
||||
|
||||
namespace ui{
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LISTVIEW_GRAVITY_LEFT,
|
||||
LISTVIEW_GRAVITY_RIGHT,
|
||||
LISTVIEW_GRAVITY_CENTER_HORIZONTAL,
|
||||
|
||||
LISTVIEW_GRAVITY_TOP,
|
||||
LISTVIEW_GRAVITY_BOTTOM,
|
||||
LISTVIEW_GRAVITY_CENTER_VERTICAL,
|
||||
}ListViewGravity;
|
||||
|
||||
typedef enum
|
||||
CC_DEPRECATED_ATTRIBUTE typedef enum
|
||||
{
|
||||
LISTVIEW_ONSELECTEDITEM_START,
|
||||
LISTVIEW_ONSELECTEDITEM_END
|
||||
}ListViewEventType;
|
||||
|
||||
typedef void (Ref::*SEL_ListViewEvent)(Ref*,ListViewEventType);
|
||||
CC_DEPRECATED_ATTRIBUTE typedef void (Ref::*SEL_ListViewEvent)(Ref*,ListViewEventType);
|
||||
#define listvieweventselector(_SELECTOR) (SEL_ListViewEvent)(&_SELECTOR)
|
||||
|
||||
class ListView : public ScrollView
|
||||
|
@ -58,6 +47,23 @@ class ListView : public ScrollView
|
|||
DECLARE_CLASS_GUI_INFO
|
||||
|
||||
public:
|
||||
enum class Gravity
|
||||
{
|
||||
LEFT,
|
||||
RIGHT,
|
||||
CENTER_HORIZONTAL,
|
||||
TOP,
|
||||
BOTTOM,
|
||||
CENTER_VERTICAL
|
||||
};
|
||||
|
||||
enum class EventType
|
||||
{
|
||||
ON_SELECTED_ITEM_START,
|
||||
ON_SELECTED_ITEM_END
|
||||
};
|
||||
|
||||
typedef std::function<void(Ref*, EventType)> ccListViewCallback;
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
|
@ -144,7 +150,7 @@ public:
|
|||
* Changes the gravity of listview.
|
||||
* @see ListViewGravity
|
||||
*/
|
||||
void setGravity(ListViewGravity gravity);
|
||||
void setGravity(Gravity gravity);
|
||||
|
||||
/**
|
||||
* Changes the margin between each item.
|
||||
|
@ -159,7 +165,8 @@ public:
|
|||
|
||||
ssize_t getCurSelectedIndex() const;
|
||||
|
||||
void addEventListenerListView(Ref* target, SEL_ListViewEvent selector);
|
||||
CC_DEPRECATED_ATTRIBUTE void addEventListenerListView(Ref* target, SEL_ListViewEvent selector);
|
||||
void addEventListener(ccListViewCallback callback);
|
||||
|
||||
/**
|
||||
* Changes scroll direction of scrollview.
|
||||
|
@ -203,10 +210,24 @@ protected:
|
|||
|
||||
Widget* _model;
|
||||
Vector<Widget*> _items;
|
||||
ListViewGravity _gravity;
|
||||
Gravity _gravity;
|
||||
float _itemsMargin;
|
||||
|
||||
Ref* _listViewEventListener;
|
||||
#if defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
|
||||
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
#elif _MSC_VER >= 1400 //vs 2005 or higher
|
||||
#pragma warning (push)
|
||||
#pragma warning (disable: 4996)
|
||||
#endif
|
||||
SEL_ListViewEvent _listViewEventSelector;
|
||||
#if defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
|
||||
#pragma GCC diagnostic warning "-Wdeprecated-declarations"
|
||||
#elif _MSC_VER >= 1400 //vs 2005 or higher
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
ccListViewCallback _eventCallback;
|
||||
|
||||
ssize_t _curSelectedIndex;
|
||||
bool _refreshViewDirty;
|
||||
};
|
||||
|
|
|
@ -66,7 +66,7 @@ bool UIListViewTest_Vertical::init()
|
|||
(backgroundSize.width - listView->getSize().width) / 2.0f,
|
||||
(widgetSize.height - backgroundSize.height) / 2.0f +
|
||||
(backgroundSize.height - listView->getSize().height) / 2.0f));
|
||||
listView->addEventListenerListView(this, listvieweventselector(UIListViewTest_Vertical::selectedItemEvent));
|
||||
listView->addEventListener(CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEvent, this));
|
||||
_uiLayer->addChild(listView);
|
||||
|
||||
|
||||
|
@ -147,7 +147,7 @@ bool UIListViewTest_Vertical::init()
|
|||
listView->removeItem(items_count - 1);
|
||||
|
||||
// set all items layout gravity
|
||||
listView->setGravity(LISTVIEW_GRAVITY_CENTER_VERTICAL);
|
||||
listView->setGravity(ListView::Gravity::CENTER_VERTICAL);
|
||||
|
||||
// set items margin
|
||||
listView->setItemsMargin(2.0f);
|
||||
|
@ -158,18 +158,18 @@ bool UIListViewTest_Vertical::init()
|
|||
return false;
|
||||
}
|
||||
|
||||
void UIListViewTest_Vertical::selectedItemEvent(Ref *pSender, ListViewEventType type)
|
||||
void UIListViewTest_Vertical::selectedItemEvent(Ref *pSender, ListView::EventType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case cocos2d::ui::LISTVIEW_ONSELECTEDITEM_START:
|
||||
case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_START:
|
||||
{
|
||||
ListView* listView = static_cast<ListView*>(pSender);
|
||||
CC_UNUSED_PARAM(listView);
|
||||
CCLOG("select child start index = %ld", listView->getCurSelectedIndex());
|
||||
break;
|
||||
}
|
||||
case cocos2d::ui::LISTVIEW_ONSELECTEDITEM_END:
|
||||
case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_END:
|
||||
{
|
||||
ListView* listView = static_cast<ListView*>(pSender);
|
||||
CC_UNUSED_PARAM(listView);
|
||||
|
@ -243,7 +243,7 @@ bool UIListViewTest_Horizontal::init()
|
|||
(backgroundSize.width - listView->getSize().width) / 2.0f,
|
||||
(widgetSize.height - backgroundSize.height) / 2.0f +
|
||||
(backgroundSize.height - listView->getSize().height) / 2.0f));
|
||||
listView->addEventListenerListView(this, listvieweventselector(UIListViewTest_Horizontal::selectedItemEvent));
|
||||
listView->addEventListener(CC_CALLBACK_2(UIListViewTest_Horizontal::selectedItemEvent, this));
|
||||
_uiLayer->addChild(listView);
|
||||
|
||||
|
||||
|
@ -323,7 +323,7 @@ bool UIListViewTest_Horizontal::init()
|
|||
listView->removeItem(items_count - 1);
|
||||
|
||||
// set all items layout gravity
|
||||
listView->setGravity(LISTVIEW_GRAVITY_CENTER_VERTICAL);
|
||||
listView->setGravity(ListView::Gravity::CENTER_VERTICAL);
|
||||
|
||||
// set items margin
|
||||
listView->setItemsMargin(2);
|
||||
|
@ -334,18 +334,18 @@ bool UIListViewTest_Horizontal::init()
|
|||
return false;
|
||||
}
|
||||
|
||||
void UIListViewTest_Horizontal::selectedItemEvent(Ref *pSender, ListViewEventType type)
|
||||
void UIListViewTest_Horizontal::selectedItemEvent(Ref *pSender, ListView::EventType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case cocos2d::ui::LISTVIEW_ONSELECTEDITEM_START:
|
||||
case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_START:
|
||||
{
|
||||
ListView* listView = static_cast<ListView*>(pSender);
|
||||
CC_UNUSED_PARAM(listView);
|
||||
CCLOG("select child start index = %ld", listView->getCurSelectedIndex());
|
||||
break;
|
||||
}
|
||||
case cocos2d::ui::LISTVIEW_ONSELECTEDITEM_END:
|
||||
case cocos2d::ui::ListView::EventType::ON_SELECTED_ITEM_END:
|
||||
{
|
||||
ListView* listView = static_cast<ListView*>(pSender);
|
||||
CC_UNUSED_PARAM(listView);
|
||||
|
|
|
@ -33,7 +33,7 @@ public:
|
|||
UIListViewTest_Vertical();
|
||||
~UIListViewTest_Vertical();
|
||||
bool init();
|
||||
void selectedItemEvent(Ref* pSender, ListViewEventType type);
|
||||
void selectedItemEvent(Ref* pSender, ListView::EventType type);
|
||||
|
||||
protected:
|
||||
UI_SCENE_CREATE_FUNC(UIListViewTest_Vertical)
|
||||
|
@ -48,7 +48,7 @@ public:
|
|||
UIListViewTest_Horizontal();
|
||||
~UIListViewTest_Horizontal();
|
||||
bool init();
|
||||
void selectedItemEvent(Ref* pSender, ListViewEventType type);
|
||||
void selectedItemEvent(Ref* pSender, ListView::EventType type);
|
||||
|
||||
protected:
|
||||
UI_SCENE_CREATE_FUNC(UIListViewTest_Horizontal)
|
||||
|
|
|
@ -33,7 +33,7 @@ public:
|
|||
UIListViewTest_Vertical_Editor();
|
||||
~UIListViewTest_Vertical_Editor();
|
||||
bool init();
|
||||
void selectedItemEvent(Ref* pSender, ListViewEventType type);
|
||||
void selectedItemEvent(Ref* pSender, ListView::EventType type);
|
||||
|
||||
protected:
|
||||
UI_SCENE_EDITOR_CREATE_FUNC(UIListViewTest_Vertical_Editor)
|
||||
|
@ -49,7 +49,7 @@ public:
|
|||
UIListViewTest_Horizontal_Editor();
|
||||
~UIListViewTest_Horizontal_Editor();
|
||||
bool init();
|
||||
void selectedItemEvent(Ref* pSender, ListViewEventType type);
|
||||
void selectedItemEvent(Ref* pSender, ListView::EventType type);
|
||||
|
||||
protected:
|
||||
UI_SCENE_EDITOR_CREATE_FUNC(UIListViewTest_Horizontal_Editor)
|
||||
|
|
Loading…
Reference in New Issue