1 /*! 2 @file 3 @author Albert Semenov 4 @date 05/2008 5 */ 6 #include "Precompiled.h" 7 #include "DemoKeeper.h" 8 #include "CellView.h" 9 #include "Base/Main.h" 10 11 namespace demo 12 { 13 DemoKeeper()14 DemoKeeper::DemoKeeper() : 15 mToolTip(nullptr), 16 mItemBoxV(nullptr), 17 mItemBoxH(nullptr) 18 { 19 } 20 notifyStartDrop(wraps::BaseLayout * _sender,wraps::DDItemInfo _info,bool & _result)21 void DemoKeeper::notifyStartDrop(wraps::BaseLayout* _sender, wraps::DDItemInfo _info, bool& _result) 22 { 23 if (_info.sender_index != MyGUI::ITEM_NONE) 24 { 25 ItemData* data = *static_cast<ItemBox*>(_info.sender)->getItemDataAt<ItemData*>(_info.sender_index); 26 _result = !data->isEmpty(); 27 } 28 } 29 notifyRequestDrop(wraps::BaseLayout * _sender,wraps::DDItemInfo _info,bool & _result)30 void DemoKeeper::notifyRequestDrop(wraps::BaseLayout* _sender, wraps::DDItemInfo _info, bool& _result) 31 { 32 // не на айтем кидаем 33 if (_info.receiver_index == MyGUI::ITEM_NONE) 34 { 35 _result = false; 36 return; 37 } 38 39 // на себя и на тотже айтем 40 if ((_info.sender == _info.receiver) && (_info.sender_index == _info.receiver_index)) 41 { 42 _result = false; 43 return; 44 } 45 46 ItemData* sender_data = *static_cast<ItemBox*>(_info.sender)->getItemDataAt<ItemData*>(_info.sender_index); 47 ItemData* receiver_data = *static_cast<ItemBox*>(_info.receiver)->getItemDataAt<ItemData*>(_info.receiver_index); 48 49 _result = receiver_data->isEmpty() || receiver_data->compare(sender_data); 50 } 51 notifyEndDrop(wraps::BaseLayout * _sender,wraps::DDItemInfo _info,bool _result)52 void DemoKeeper::notifyEndDrop(wraps::BaseLayout* _sender, wraps::DDItemInfo _info, bool _result) 53 { 54 if (_result) 55 { 56 ItemData* sender_data = *static_cast<ItemBox*>(_info.sender)->getItemDataAt<ItemData*>(_info.sender_index); 57 ItemData* receiver_data = *static_cast<ItemBox*>(_info.receiver)->getItemDataAt<ItemData*>(_info.receiver_index); 58 59 receiver_data->add(sender_data); 60 sender_data->clear(); 61 62 static_cast<ItemBox*>(_info.receiver)->setItemData(_info.receiver_index, receiver_data); 63 static_cast<ItemBox*>(_info.sender)->setItemData(_info.sender_index, sender_data); 64 } 65 } 66 notifyNotifyItem(wraps::BaseLayout * _sender,const MyGUI::IBNotifyItemData & _info)67 void DemoKeeper::notifyNotifyItem(wraps::BaseLayout* _sender, const MyGUI::IBNotifyItemData& _info) 68 { 69 /*if (_info.index != MyGUI::ITEM_NONE) 70 { 71 if (_info.notify == MyGUI::NotifyItem::NOTIFY_MOUSE_RELEASED) 72 { 73 MyGUI::ItemBox* sender = ((BaseItemBox<CellView>*)_sender)->getItemBox(); 74 //sender-> 75 sender->setPosition(sender->getCoord()); 76 } 77 }*/ 78 } 79 notifyDropState(wraps::BaseLayout * _sender,MyGUI::DDItemState _state)80 void DemoKeeper::notifyDropState(wraps::BaseLayout* _sender, MyGUI::DDItemState _state) 81 { 82 /*if (_state == MyGUI::DDItemState::Refuse) MyGUI::PointerManager::getInstance().setPointer("drop_refuse", _sender->mainWidget()); 83 else if (_state == MyGUI::DDItemState::Accept) MyGUI::PointerManager::getInstance().setPointer("drop_accept", _sender->mainWidget()); 84 else if (_state == MyGUI::DDItemState::Miss) MyGUI::PointerManager::getInstance().setPointer("drop", _sender->mainWidget()); 85 else if (_state == MyGUI::DDItemState::Start) MyGUI::PointerManager::getInstance().setPointer("drop", _sender->mainWidget()); 86 else if (_state == MyGUI::DDItemState::End) MyGUI::PointerManager::getInstance().setDefaultPointer();*/ 87 } 88 setupResources()89 void DemoKeeper::setupResources() 90 { 91 base::BaseManager::setupResources(); 92 addResourceLocation(getRootMedia() + "/Demos/Demo_ItemBox"); 93 addResourceLocation(getRootMedia() + "/Icons"); 94 addResourceLocation(getRootMedia() + "/Common/Demos"); 95 } 96 createScene()97 void DemoKeeper::createScene() 98 { 99 base::BaseDemoManager::createScene(); 100 MyGUI::LayoutManager::getInstance().loadLayout("Wallpaper.layout"); 101 const MyGUI::VectorWidgetPtr& root = MyGUI::LayoutManager::getInstance().loadLayout("HelpPanel.layout"); 102 if (root.size() == 1) 103 root.at(0)->findWidget("Text")->castType<MyGUI::TextBox>()->setCaption("You can drag and drop items from one ItemBox to another. Hold mouse over item to see tool tip. Resize windows to see vertical and horizontal ItebBox alignments."); 104 105 // регестрируем тип нашего ресурса 106 std::string resourceCategory = MyGUI::ResourceManager::getInstance().getCategoryName(); 107 MyGUI::FactoryManager::getInstance().registerFactory<ResourceItemInfo>(resourceCategory); 108 109 MyGUI::ResourceManager::getInstance().load("Resources.xml"); 110 //MyGUI::ResourceManager::getInstance().load("ItemBox_skin.xml"); 111 112 mToolTip = new ToolTip(); 113 mToolTip->hide(); 114 115 mItemBoxV = new ItemBoxWindow("ItemBoxV.layout"); 116 mItemBoxV->getItemBox()->addItem(new ItemData()); 117 mItemBoxV->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item1", 5)); 118 mItemBoxV->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item2", 5)); 119 mItemBoxV->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item3", 5)); 120 mItemBoxV->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item4", 5)); 121 mItemBoxV->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item5", 5)); 122 mItemBoxV->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item6", 5)); 123 mItemBoxV->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item7", 5)); 124 mItemBoxV->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item8", 5)); 125 mItemBoxV->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item9", 5)); 126 127 mItemBoxV->getItemBox()->eventStartDrag = MyGUI::newDelegate(this, &DemoKeeper::notifyStartDrop); 128 mItemBoxV->getItemBox()->eventRequestDrop = MyGUI::newDelegate(this, &DemoKeeper::notifyRequestDrop); 129 mItemBoxV->getItemBox()->eventDropResult = MyGUI::newDelegate(this, &DemoKeeper::notifyEndDrop); 130 mItemBoxV->getItemBox()->eventChangeDDState = newDelegate(this, &DemoKeeper::notifyDropState); 131 mItemBoxV->getItemBox()->eventNotifyItem = newDelegate(this, &DemoKeeper::notifyNotifyItem); 132 mItemBoxV->getItemBox()->eventToolTip = newDelegate(this, &DemoKeeper::notifyToolTip); 133 134 mItemBoxH = new ItemBoxWindow("ItemBoxH.layout"); 135 mItemBoxH->getItemBox()->addItem(new ItemData()); 136 mItemBoxH->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item1", 5)); 137 mItemBoxH->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item2", 5)); 138 mItemBoxH->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item3", 5)); 139 mItemBoxH->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item4", 5)); 140 mItemBoxH->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item5", 5)); 141 mItemBoxH->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item6", 5)); 142 mItemBoxH->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item7", 5)); 143 mItemBoxH->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item8", 5)); 144 mItemBoxH->getItemBox()->addItem(new ItemData("info_Crystal_Clear_Item9", 5)); 145 146 mItemBoxH->getItemBox()->eventStartDrag = MyGUI::newDelegate(this, &DemoKeeper::notifyStartDrop); 147 mItemBoxH->getItemBox()->eventRequestDrop = MyGUI::newDelegate(this, &DemoKeeper::notifyRequestDrop); 148 mItemBoxH->getItemBox()->eventDropResult = MyGUI::newDelegate(this, &DemoKeeper::notifyEndDrop); 149 mItemBoxH->getItemBox()->eventChangeDDState = newDelegate(this, &DemoKeeper::notifyDropState); 150 mItemBoxH->getItemBox()->eventNotifyItem = newDelegate(this, &DemoKeeper::notifyNotifyItem); 151 mItemBoxH->getItemBox()->eventToolTip = newDelegate(this, &DemoKeeper::notifyToolTip); 152 } 153 destroyScene()154 void DemoKeeper::destroyScene() 155 { 156 // тип нашего ресурса 157 std::string resourceCategory = MyGUI::ResourceManager::getInstance().getCategoryName(); 158 MyGUI::FactoryManager::getInstance().unregisterFactory<ResourceItemInfo>(resourceCategory); 159 160 delete mItemBoxH; 161 mItemBoxH = nullptr; 162 delete mItemBoxV; 163 mItemBoxV = nullptr; 164 delete mToolTip; 165 mToolTip = nullptr; 166 } 167 notifyToolTip(wraps::BaseLayout * _sender,const MyGUI::ToolTipInfo & _info,ItemData * _data)168 void DemoKeeper::notifyToolTip(wraps::BaseLayout* _sender, const MyGUI::ToolTipInfo& _info, ItemData* _data) 169 { 170 if (_info.type == MyGUI::ToolTipInfo::Show) 171 { 172 mToolTip->show(_data); 173 mToolTip->move(_info.point); 174 } 175 else if (_info.type == MyGUI::ToolTipInfo::Hide) 176 { 177 mToolTip->hide(); 178 } 179 else if (_info.type == MyGUI::ToolTipInfo::Move) 180 { 181 mToolTip->move(_info.point); 182 } 183 } 184 185 } // namespace demo 186 187 MYGUI_APP(demo::DemoKeeper) 188