Exemple #1
0
bool UIListViewTest_Vertical::init()
{
    if (UIScene::init())
    {
        Size widgetSize = _widget->getContentSize();
        
        _displayValueLabel = Text::create("Move by vertical direction", "fonts/Marker Felt.ttf", 32);
        _displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
        _displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f,
                                              widgetSize.height / 2.0f + _displayValueLabel->getContentSize().height * 1.5f));
        _uiLayer->addChild(_displayValueLabel);
        
        
        Text* alert = Text::create("ListView vertical", "fonts/Marker Felt.ttf", 30);
        alert->setColor(Color3B(159, 168, 176));
        alert->setPosition(Vec2(widgetSize.width / 2.0f,
                                 widgetSize.height / 2.0f - alert->getContentSize().height * 3.075f));
        _uiLayer->addChild(alert);
        
        Layout* root = static_cast<Layout*>(_uiLayer->getChildByTag(81));
        
        Layout* background = dynamic_cast<Layout*>(root->getChildByName("background_Panel"));
        Size backgroundSize = background->getContentSize();
        
        
        // create list view ex data
       
        for (int i = 0; i < 20; ++i)
        {
            std::string ccstr = StringUtils::format("listview_item_%d", i);
            _array.push_back(ccstr);
        }
        
        
        // Create the list view ex
        ListView* listView = ListView::create();
        // set list view ex direction
        listView->setDirection(ui::ScrollView::Direction::VERTICAL);
        listView->setBounceEnabled(true);
        listView->setBackGroundImage("cocosui/green_edit.png");
        listView->setBackGroundImageScale9Enabled(true);
        listView->setContentSize(Size(240, 130));
        listView->setPosition(Vec2((widgetSize.width - backgroundSize.width) / 2.0f +
                                    (backgroundSize.width - listView->getContentSize().width) / 2.0f,
                                    (widgetSize.height - backgroundSize.height) / 2.0f +
                                    (backgroundSize.height - listView->getContentSize().height) / 2.0f));
        listView->addEventListener((ui::ListView::ccListViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEvent, this));
        listView->addEventListener((ui::ListView::ccScrollViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEventScrollView,this));
        
        _uiLayer->addChild(listView);
        
        
        // create model
        Button* default_button = Button::create("cocosui/backtotoppressed.png", "cocosui/backtotopnormal.png");
        default_button->setName("Title Button");
        
        Layout* default_item = Layout::create();
        default_item->setTouchEnabled(true);
        default_item->setContentSize(default_button->getContentSize());
        default_button->setPosition(Vec2(default_item->getContentSize().width / 2.0f,
                                          default_item->getContentSize().height / 2.0f));
        default_item->addChild(default_button);
        
        // set model
        listView->setItemModel(default_item);
        
        // add default item
        ssize_t count = _array.size();
        for (int i = 0; i < count / 4; ++i)
        {
            listView->pushBackDefaultItem();
        }
        // insert default item
        for (int i = 0; i < count / 4; ++i)
        {
            listView->insertDefaultItem(0);
        }
        
        listView->removeAllChildren();
        
        Sprite* testSprite = Sprite::create("cocosui/backtotoppressed.png");
        testSprite->setPosition(Vec2(200,200));
        listView->addChild(testSprite);
        
        // add custom item
        for (int i = 0; i < count / 4; ++i)
        {
            Button* custom_button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
            custom_button->setName("Title Button");
            custom_button->setScale9Enabled(true);
            custom_button->setContentSize(default_button->getContentSize());
            
            Layout *custom_item = Layout::create();
            custom_item->setContentSize(custom_button->getContentSize());
            custom_button->setPosition(Vec2(custom_item->getContentSize().width / 2.0f, custom_item->getContentSize().height / 2.0f));
            custom_item->addChild(custom_button);
            
            listView->addChild(custom_item);
        }
        // insert custom item
        Vector<Widget*>& items = listView->getItems();
        ssize_t items_count = items.size();
        for (int i = 0; i < count / 4; ++i)
        {
            Button* custom_button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
            custom_button->setName("Title Button");
            custom_button->setScale9Enabled(true);
            custom_button->setContentSize(default_button->getContentSize());
            
            Layout *custom_item = Layout::create();
            custom_item->setContentSize(custom_button->getContentSize());
            custom_button->setPosition(Vec2(custom_item->getContentSize().width / 2.0f, custom_item->getContentSize().height / 2.0f));
            custom_item->addChild(custom_button);
            custom_item->setTag(1);
            
            listView->insertCustomItem(custom_item, items_count);
        }
        
        // set item data
        items_count = items.size();
        for (int i = 0; i < items_count; ++i)
        {
            Widget* item = listView->getItem(i);
            Button* button = static_cast<Button*>(item->getChildByName("Title Button"));
            ssize_t index = listView->getIndex(item);
            button->setTitleText(_array[index]);
        }
        
        // remove last item
        listView->removeChildByTag(1);
        
        // remove item by index
        items_count = items.size();
        listView->removeItem(items_count - 1);
        
        // set all items layout gravity
        listView->setGravity(ListView::Gravity::CENTER_VERTICAL);
        
        // set items margin
        listView->setItemsMargin(2.0f);
        
        return true;
    }
    
    return false;
}
bool UIListViewTest_Vertical::init()
{
    if (UIScene::init())
    {
        Size widgetSize = _widget->getContentSize();
        
        _displayValueLabel = Text::create("Move by vertical direction", "fonts/Marker Felt.ttf", 32);
        _displayValueLabel->setAnchorPoint(Vec2(0.5f, -1.0f));
        _displayValueLabel->setPosition(Vec2(widgetSize.width / 2.0f,
                                              widgetSize.height / 2.0f + _displayValueLabel->getContentSize().height * 1.5f));
        _uiLayer->addChild(_displayValueLabel);
        
        
        Text* alert = Text::create("ListView vertical", "fonts/Marker Felt.ttf", 30);
        alert->setColor(Color3B(159, 168, 176));
        alert->setPosition(Vec2(widgetSize.width / 2.0f,
                                 widgetSize.height / 2.0f - alert->getContentSize().height * 3.075f));
        _uiLayer->addChild(alert);
        
        Layout* root = static_cast<Layout*>(_uiLayer->getChildByTag(81));
        
        Layout* background = dynamic_cast<Layout*>(root->getChildByName("background_Panel"));
        Size backgroundSize = background->getContentSize();
        
        
        // create list view ex data
       
        for (int i = 0; i < 20; ++i)
        {
            std::string ccstr = StringUtils::format("listview_item_%d", i);
            _array.push_back(ccstr);
        }
        
        
        // Create the list view ex
        ListView* listView = ListView::create();
        // set list view ex direction
        listView->setDirection(ui::ScrollView::Direction::VERTICAL);
        listView->setBounceEnabled(true);
        listView->setBackGroundImage("cocosui/green_edit.png");
        listView->setBackGroundImageScale9Enabled(true);
        listView->setContentSize(Size(240, 130));
		listView->setPosition(Vec2((widgetSize - listView->getContentSize()) / 2.0f));
        listView->addEventListener((ui::ListView::ccListViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEvent, this));
        listView->addEventListener((ui::ListView::ccScrollViewCallback)CC_CALLBACK_2(UIListViewTest_Vertical::selectedItemEventScrollView,this));
		listView->setScrollBarPositionFromCorner(Vec2(7, 7));
        _uiLayer->addChild(listView);
        
        
        // create model
        Button* default_button = Button::create("cocosui/backtotoppressed.png", "cocosui/backtotopnormal.png");
        default_button->setName("Title Button");
        
        Layout* default_item = Layout::create();
        default_item->setTouchEnabled(true);
        default_item->setContentSize(default_button->getContentSize());
		default_button->setPosition(Vec2(default_item->getContentSize() / 2.0f));
        default_item->addChild(default_button);
        
        // set model
        listView->setItemModel(default_item);
        
        // add default item
        ssize_t count = _array.size();
        for (int i = 0; i < count / 4; ++i)
        {
            listView->pushBackDefaultItem();
        }
        // insert default item
        for (int i = 0; i < count / 4; ++i)
        {
            listView->insertDefaultItem(0);
        }
        
        listView->removeAllChildren();
        
        Sprite* testSprite = Sprite::create("cocosui/backtotoppressed.png");
        testSprite->setPosition(Vec2(200,200));
        listView->addChild(testSprite);
        
        // add custom item
        for (int i = 0; i < count / 4; ++i)
        {
            Button* custom_button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
            custom_button->setName("Title Button");
            custom_button->setScale9Enabled(true);
            custom_button->setContentSize(default_button->getContentSize());
            
            Layout *custom_item = Layout::create();
            custom_item->setContentSize(custom_button->getContentSize());
            custom_button->setPosition(Vec2(custom_item->getContentSize().width / 2.0f, custom_item->getContentSize().height / 2.0f));
            custom_item->addChild(custom_button);
            
            listView->addChild(custom_item);
        }
        // insert custom item
        Vector<Widget*>& items = listView->getItems();
        ssize_t items_count = items.size();
        for (int i = 0; i < count / 4; ++i)
        {
            Button* custom_button = Button::create("cocosui/button.png", "cocosui/buttonHighlighted.png");
            custom_button->setName("Title Button");
            custom_button->setScale9Enabled(true);
            custom_button->setContentSize(default_button->getContentSize());
            
            Layout *custom_item = Layout::create();
            custom_item->setContentSize(custom_button->getContentSize());
            custom_button->setPosition(Vec2(custom_item->getContentSize().width / 2.0f, custom_item->getContentSize().height / 2.0f));
            custom_item->addChild(custom_button);
            custom_item->setTag(1);
            
            listView->insertCustomItem(custom_item, items_count);
        }
        
        // set item data
        items_count = items.size();
        for (int i = 0; i < items_count; ++i)
        {
            Widget* item = listView->getItem(i);
            Button* button = static_cast<Button*>(item->getChildByName("Title Button"));
            ssize_t index = listView->getIndex(item);
            button->setTitleText(_array[index]);
        }
        
        // remove last item
        listView->removeChildByTag(1);
        
        // remove item by index
        items_count = items.size();
        listView->removeItem(items_count - 1);
        
        // set all items layout gravity
        listView->setGravity(ListView::Gravity::CENTER_VERTICAL);
        
        // set items margin
        listView->setItemsMargin(2.0f);

        // Show the indexes of items on each boundary.
        {
            float position = 75;
            // Labels
            _indexLabels[0] = Text::create(" ", "fonts/Marker Felt.ttf", 12);
            _indexLabels[0]->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
            _indexLabels[0]->setPosition(_uiLayer->getContentSize() / 2 + Size(0, position));
            _uiLayer->addChild(_indexLabels[0]);
            _indexLabels[1] = Text::create("  ", "fonts/Marker Felt.ttf", 12);
            _indexLabels[1]->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
            _indexLabels[1]->setPosition(_uiLayer->getContentSize() / 2 + Size(140, 0));
            _uiLayer->addChild(_indexLabels[1]);
            _indexLabels[2] = Text::create(" ", "fonts/Marker Felt.ttf", 12);
            _indexLabels[2]->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
            _indexLabels[2]->setPosition(_uiLayer->getContentSize() / 2 + Size(0, -position));
            _uiLayer->addChild(_indexLabels[2]);
            
            // Callback
            listView->ScrollView::addEventListener([this](Ref* ref, ScrollView::EventType eventType) {
                ListView* listView = dynamic_cast<ListView*>(ref);
                if(listView == nullptr || eventType != ScrollView::EventType::CONTAINER_MOVED)
                {
                    return;
                }
                auto bottom = listView->getBottommostItemInCurrentView();
                auto center = listView->getCenterItemInCurrentView();
                auto top = listView->getTopmostItemInCurrentView();
                
                _indexLabels[0]->setString(StringUtils::format("Top index=%zd", listView->getIndex(top)));
                _indexLabels[1]->setString(StringUtils::format("Center\nindex=%zd", listView->getIndex(center)));
                _indexLabels[2]->setString(StringUtils::format("Bottom index=%zd", listView->getIndex(bottom)));
            });
        }
        
        return true;
    }
    
    return false;
}
void MainScene2::refresh_listview()
{


	//listview
	ListView * answerlist = static_cast<ListView*>(rootNode->getChildByName("ListView"));
	answerlist->removeAllChildren();

	if (searchState == "N")//当在查看某个用户的回答时,不显示问题
	{
		//问题详情放入listview
		Node * question_and_contentNode = CSLoader::createNode("question_and_content.csb");
		question_and_contentNode->setTag(0);
		//关注提问者按钮
		Button * btn_focus2 = static_cast<Button*>(question_and_contentNode->getChildByName("Button_focus"));
		if (AppDelegate::this_user_is_focus == "1")//提问用户已经是“我”的关注对象了
		{
			btn_focus2->setBright(false);
			btn_focus2->setEnabled(false);
		}
		else
		{
			btn_focus2->addClickEventListener(CC_CALLBACK_1(MainScene2::Add_focus_ClickCallback, this, -1));
		}

		//提问者名字显示
		Text * ask_user_name = static_cast<Text *>(question_and_contentNode->getChildByName("Text_user"));
		ask_user_name->setText(AppDelegate::this_question_username);

		//问题标题显示
		Text * question_title = static_cast<Text *>(question_and_contentNode->getChildByName("Text_question_title"));
		question_title->setText(AppDelegate::this_question_title);

		//问题内容显示
		Text * question_content = static_cast<Text *>(question_and_contentNode->getChildByName("Text_question_content"));
		question_content->setText(this_question_content);

		Widget * question_and_contentWidget = Widget::create();
		question_and_contentWidget->setSize(Size(620, 380));
		question_and_contentWidget->addChild(question_and_contentNode);
		answerlist->pushBackCustomItem(question_and_contentWidget);
	}

	//回答列表放入listview
	for (int i = 0; i < this_page_answer_num; i++)
	{
		Node * answerNode = CSLoader::createNode("answer.csb");
		answerNode->setTag(0);

		Text * userText = static_cast<Text*>(answerNode->getChildByName("Text_user"));
		userText->setText(name[i]);

		//回答者的关注按钮
		Button * focusBtn = static_cast<Button*>(answerNode->getChildByName("Button_focus"));
		if (is_focus[i]=="1")//回答这个问题的用户已经是“我”的关注对象了
		{
			focusBtn->setBright(false);
			focusBtn->setEnabled(false);
		}
		else
		{
			focusBtn->addClickEventListener(CC_CALLBACK_1(MainScene2::Add_focus_ClickCallback, this, i));
		}

		//回答的内容
		Text * answerText = static_cast<Text*>(answerNode->getChildByName("Text_answer"));
		answerText->setText(A_content[i]);

		Text * timeText = static_cast<Text*>(answerNode->getChildByName("Text_time"));//时间
		timeText->setText(A_createtime[i]);

		//赞的次数显示
		Text * praiseText = static_cast<Text*>(answerNode->getChildByName("Text_praise_num"));;
		praiseText->setText(A_praisenum[i]);

		//点赞按钮
		Button * praiseBtn = static_cast<Button*>(answerNode->getChildByName("Button_praise"));
		if (is_praise[i]=="1")//我已经赞过
		{
			praiseBtn->setBright(false);
			praiseBtn->setEnabled(false);
		}
		else
		{
			praiseBtn->addClickEventListener(CC_CALLBACK_1(MainScene2::Praise_button_ClickCallback, this, i));
		}

		Widget * answerWidget = Widget::create();
		answerWidget->setSize(Size(620, 170));
		answerWidget->addChild(answerNode);//Node放入Widget中
		answerlist->pushBackCustomItem(answerWidget);//Widget放入listview
	}

	if (searchState == "N")//当查看某个用户的答案时,不能回答
	{
		//回答问题模块
		Node * my_answer_Node = CSLoader::createNode("my_answer.csb");
		my_answer_Node->setTag(0);
		Button * btn_up_answer = static_cast<Button*>(my_answer_Node->getChildByName("Button_up_answer"));
		btn_up_answer->addClickEventListener(CC_CALLBACK_1(MainScene2::Up_answer_ClickCallback, this));

		TextField * answer_content_TF = static_cast<TextField *>(my_answer_Node->getChildByName("TextField_answer"));
		answer_content_TF->ignoreContentAdaptWithSize(false);//设置换行


		Widget * my_answer_Widget = Widget::create();
		my_answer_Widget->setSize(Size(620, 290));
		my_answer_Widget->addChild(my_answer_Node);//Node放入Widget中
		answerlist->pushBackCustomItem(my_answer_Widget);//Widget放入listview
	}
}
Exemple #4
0
//itemVect 物品 与数量 direction 左:true 右: false
void HoldBuildUI::ShowItemList(vector<pair<int, int>>* itemVect, bool direction)
{
    auto layout_Template = m_RootWidget->getChildByName<Layout*>("Layout_Template");
    auto layout_Center = m_RootWidget->getChildByName<Layout*>("Layout_Center");
    auto Layout_BtnItem = layout_Template->getChildByName<Layout*>("Layout_BtnItem");
    
    
    ListView* lview;
    if (direction)
    {
        lview = layout_Center->getChildByName<ListView*>("LView_Bag");
    }else
    {
        lview = layout_Center->getChildByName<ListView*>("LView_DropOut");
    }
    lview->removeAllChildren();
    for (auto iter = itemVect->begin(); iter != itemVect->end(); iter++)
    {
        auto itemId = iter->first;
        auto itemNum = iter->second;
        
        auto layout_BtnItem = Layout_BtnItem->clone();
        auto btn_Item = layout_BtnItem->getChildByName<Button*>("Btn_Item");
        btn_Item->addClickEventListener([this, direction, itemId](Ref* sender)
        {
            if (direction)
            {
                // 不占据背包空间物品不能丢弃
                if (CfgDataRow(itemId).GetValue(CfgField::NonSpace)->asInt() == 0) {
                    return;
                }
                auto iter = m_BagItem->begin();
                while (iter != m_BagItem->end())
                {
                    if(iter->first == itemId)
                    {
                        break;
                    }
                    iter++;
                }
                if (iter != m_BagItem->end())
                {
                    
                    iter->second -= 1;
                    if(iter->second == 0)
                    {
                       m_BagItem->erase(iter);
                    }
                    
                    iter = m_DropItem->begin();
                    while (iter != m_DropItem->end())
                    {
                        if(iter->first == itemId)
                        {
                            break;
                        }
                        iter++;
                    }
                    if(iter == m_DropItem->end())
                    {
                        m_DropItem->push_back(pair<int, int>( itemId, 1));
                    }else
                    {
                        iter->second += 1;
                    }
                }
            
            }else
            {
                //判断是否金币
                if (itemId == (int)CfgIdEnum::GoldId)
                {
                    SaveGold();
                }else
                {
                    auto iter = m_DropItem->begin();
                    while (iter != m_DropItem->end())
                    {
                        if(iter->first == itemId)
                        {
                            break;
                        }
                        iter++;
                    }
                    if (iter != m_DropItem->end())
                    {
                        if (IsSaveBag(itemId))
                        {
                            iter->second -= 1;
                            if(iter->second == 0)
                            {
                                m_DropItem->erase(iter);
                            }
                        }
                    }
                }
            }
            ShowItemList(m_BagItem, true);
            ShowItemList(m_DropItem, false);
        });
        
        auto text_Name = layout_BtnItem->getChildByName<Text*>("Text_ItemName");
        CfgDataRow dataRow(itemId);
        auto langId = dataRow.GetValue(CfgField::Name)->asInt();
        auto langText = MultiLanguage::getInstance()->GetText(langId);
        text_Name->setString(langText);
        
        auto text_Num = layout_BtnItem->getChildByName<Text*>("Text_ItemNum");
        text_Num->setString(StringUtils::format("x%d", itemNum));
        lview->addChild(layout_BtnItem);
        UpdateBagItemNum();
    }
}