1 /*! 2 @file 3 @author Albert Semenov 4 @date 09/2010 5 */ 6 7 #include "Precompiled.h" 8 #include "SettingsResourcesControl.h" 9 #include "SettingsManager.h" 10 #include "Localise.h" 11 #include "FactoryManager.h" 12 13 namespace tools 14 { 15 FACTORY_ITEM_ATTRIBUTE(SettingsResourcesControl)16 FACTORY_ITEM_ATTRIBUTE(SettingsResourcesControl) 17 18 SettingsResourcesControl::SettingsResourcesControl() : 19 mResourceAdd(nullptr), 20 mResourceDelete(nullptr), 21 mResources(nullptr), 22 mTextFieldControl(nullptr) 23 { 24 } 25 ~SettingsResourcesControl()26 SettingsResourcesControl::~SettingsResourcesControl() 27 { 28 mResourceAdd->eventMouseButtonClick -= MyGUI::newDelegate(this, &SettingsResourcesControl::notifyClickAdd); 29 mResourceDelete->eventMouseButtonClick -= MyGUI::newDelegate(this, &SettingsResourcesControl::notifyClickDelete); 30 31 delete mTextFieldControl; 32 mTextFieldControl = nullptr; 33 } 34 OnInitialise(Control * _parent,MyGUI::Widget * _place,const std::string & _layoutName)35 void SettingsResourcesControl::OnInitialise(Control* _parent, MyGUI::Widget* _place, const std::string& _layoutName) 36 { 37 Control::OnInitialise(_parent, _place, _layoutName); 38 39 assignWidget(mResourceAdd, "ResourceAdd"); 40 assignWidget(mResourceDelete, "ResourceDelete"); 41 assignWidget(mResources, "Resources"); 42 43 mTextFieldControl = new TextFieldControl(); 44 mTextFieldControl->Initialise(); 45 mTextFieldControl->eventEndDialog.connect(this, &SettingsResourcesControl::notifyEndDialog); 46 47 mResourceAdd->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsResourcesControl::notifyClickAdd); 48 mResourceDelete->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsResourcesControl::notifyClickDelete); 49 } 50 loadSettings()51 void SettingsResourcesControl::loadSettings() 52 { 53 mResources->removeAllItems(); 54 SettingsManager::VectorString paths = SettingsManager::getInstance().getValueList("Resources/AdditionalResource.List"); 55 for (SettingsManager::VectorString::const_iterator item = paths.begin(); item != paths.end(); ++ item) 56 mResources->addItem(*item); 57 } 58 saveSettings()59 void SettingsResourcesControl::saveSettings() 60 { 61 SettingsManager::VectorString paths; 62 for (size_t index = 0; index < mResources->getItemCount(); ++ index) 63 paths.push_back(mResources->getItemNameAt(index)); 64 SettingsManager::getInstance().setValueList("Resources/AdditionalResource.List", paths); 65 } 66 notifyClickAdd(MyGUI::Widget * _sender)67 void SettingsResourcesControl::notifyClickAdd(MyGUI::Widget* _sender) 68 { 69 mResources->addItem(""); 70 mResources->beginToItemAt(mResources->getItemCount() - 1); 71 72 mTextFieldControl->setCaption(replaceTags("CaptionAddResource")); 73 mTextFieldControl->setTextField(""); 74 75 MyGUI::Widget* widget = mResources->getWidgetByIndex(mResources->getItemCount() - 1); 76 if (widget != nullptr) 77 mTextFieldControl->setCoord(MyGUI::IntCoord(widget->getAbsoluteLeft(), widget->getAbsoluteTop(), widget->getWidth(), widget->getHeight())); 78 79 mTextFieldControl->doModal(); 80 } 81 notifyClickDelete(MyGUI::Widget * _sender)82 void SettingsResourcesControl::notifyClickDelete(MyGUI::Widget* _sender) 83 { 84 size_t index = mResources->getIndexSelected(); 85 if (index != MyGUI::ITEM_NONE) 86 mResources->removeItemAt(index); 87 } 88 notifyEndDialog(Dialog * _sender,bool _result)89 void SettingsResourcesControl::notifyEndDialog(Dialog* _sender, bool _result) 90 { 91 mTextFieldControl->endModal(); 92 93 if (_result) 94 { 95 if (mTextFieldControl->getTextField() != "") 96 { 97 mResources->setItemNameAt(mResources->getItemCount() - 1, mTextFieldControl->getTextField()); 98 return; 99 } 100 } 101 102 mResources->removeItemAt(mResources->getItemCount() - 1); 103 } 104 OnCommand(const std::string & _command)105 void SettingsResourcesControl::OnCommand(const std::string& _command) 106 { 107 Control::OnCommand(_command); 108 109 if (_command == "Command_LoadSettings") 110 loadSettings(); 111 else if (_command == "Command_SaveSettings") 112 saveSettings(); 113 } 114 115 } 116