void TreeInspector::addTreeItem(ds::ui::Sprite* sprid, const int indent){ if(!mLayout) return; TreeItem* treeItem = new TreeItem(mGlobals, sprid); treeItem->mLayoutFudge.x = (float)(indent)* 15.0f; mLayout->addChildPtr(treeItem); mTreeItems.push_back(treeItem); mEngine.addToDragDestinationList(treeItem); treeItem->setDragDestinationCallback([this, treeItem](ds::ui::Sprite* sp, const ds::ui::DragDestinationInfo& di){ if(di.mPhase == ds::ui::DragDestinationInfo::Entered){ sp->setColor(ci::Color(0.6f, 0.2f, 0.2f)); } else if(di.mPhase == ds::ui::DragDestinationInfo::Exited){ sp->setColor(ci::Color(0.1f, 0.1f, 0.1f)); } if(di.mPhase == ds::ui::DragDestinationInfo::Released){ TreeItem* ti = dynamic_cast<TreeItem*>(di.mSprite); TreeItem* dest = dynamic_cast<TreeItem*>(sp); if(ti){ ti->setColor(ci::Color(0.1f, 0.1f, 0.1f)); } if(dest){ dest->setColor(ci::Color(0.1f, 0.1f, 0.1f)); } if(treeItem == dest) return; if(ti && dest){ if(ti == dest) return; if(dest->getLinkedSprite() == ti->getLinkedSprite()){ return; } // If the drag destination is already the parent of this sprite, then just move it to the end if(dest->getLinkedSprite() == ti->getLinkedSprite()->getParent()){ ti->getLinkedSprite()->sendToFront(); } else { dest->getLinkedSprite()->addChildPtr(ti->getLinkedSprite()); } callAfterDelay([this]{ inspectTree(mTreeRoot); mEngine.getNotifier().notify(LayoutLayoutRequest()); }, 0.01f); } } }); treeItem->setProcessTouchCallback([this](ds::ui::Sprite* sp, const ds::ui::TouchInfo& ti){ if(ti.mPhase == ds::ui::TouchInfo::Removed && ti.mNumberFingers == 0){ callAfterDelay([this]{ layout(); }, 0.05f); } }); }
void MediaSlideshow::setMediaSlideshow(const std::vector<ds::Resource>& resources){ clearSlideshow(); mCurItemIndex = 0; for(auto it = resources.begin(); it < resources.end(); ++it){ MediaViewer* mv = new MediaViewer(mEngine, (*it)); mv->setSettings(mMediaViewerSettings); mv->setDefaultBounds(getWidth(), getHeight()); mv->setDefaultSize(ci::Vec2f(getWidth(), getHeight())); mHolder->addChildPtr(mv); mv->setSwipeCallback([this](ds::ui::Sprite* spr, const ci::Vec3f& amount){ // don't advance if we're zoomed in if(spr->getWidth() <= getWidth()){ if(amount.x > 20.0f){ gotoPrev(false); } else if(amount.x < -20.0f){ gotoNext(false); } } }); mv->setAnimateDuration(mAnimateDuration); mv->setDoubleTapCallback([this, mv](ds::ui::Sprite* bs, const ci::Vec3f& pos){ callAfterDelay([this]{recenterSlides(); }, 0.01f); }); mViewers.push_back(mv); } loadCurrentAndAdjacent(); layout(); recenterSlides(); }
TreeItem::TreeItem(Globals& g, ds::ui::Sprite* linkedItem) : ds::ui::Sprite(g.mEngine) , mGlobals(g) , mLinkedSprite(linkedItem) , mNameText(nullptr) , mLabelTextTwo(nullptr) { ds::ui::ImageButton* deleteButton = new ds::ui::ImageButton(mEngine, "%APP%/data/images/ui/close_button.png", "%APP%/data/images/ui/close_button.png", 10.0f); deleteButton->setScale(0.25f, 0.25f); deleteButton->getHighImage().setColor(ci::Color(0.7f, 0.2f, 0.2f)); addChildPtr(deleteButton); deleteButton->setClickFn([this]{ callAfterDelay([this]{ mEngine.getNotifier().notify(DeleteSpriteRequest(mLinkedSprite)); }, 0.01f); }); float paddin = 10.0f; mLayoutLPad = paddin / 2.0f; mLayoutRPad = paddin/2.0f; float theWiddy = 0.0f; float theHiddy = 0.0f; mNameText = mGlobals.getText("tree:item").create(mEngine, this); mNameText->setText(mLinkedSprite->getSpriteName()); mNameText->setPosition(deleteButton->getScaleWidth(), paddin / 2.0f); theWiddy += mNameText->getWidth() + paddin / 2.0f + deleteButton->getScaleWidth(); theHiddy = mNameText->getFontSize() + paddin; mLabelTextTwo = mGlobals.getText("tree:item_two").create(mEngine, this); mLabelTextTwo->setText(ds::ui::XmlImporter::getSpriteTypeForSprite(mLinkedSprite)); mLabelTextTwo->setPosition(theWiddy, paddin / 2.0f); theWiddy += mLabelTextTwo->getWidth() + paddin / 2.0f; if(mLabelTextTwo->getFontSize() + paddin > theHiddy){ theHiddy = mLabelTextTwo->getFontSize() + paddin; } setTransparent(false); setColor(ci::Color(0.1f, 0.1f, 0.1f)); setSize(theWiddy, theHiddy); enable(true); enableMultiTouch(ds::ui::MULTITOUCH_CAN_POSITION); setTapCallback([this](ds::ui::Sprite* bs, const ci::Vec3f& pos){ if(mLinkedSprite){ mEngine.getNotifier().notify(InspectSpriteRequest(mLinkedSprite)); } }); }