1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
/*!
@file
@author Albert Semenov
@date 07/2012
*/
#include "Precompiled.h"
#include "ChangeSkinSizeAction.h"
#include "DataManager.h"
#include "DataSelectorManager.h"
#include "FactoryManager.h"
#include "SkinDataUtility.h"
#include "PropertyUtility.h"
namespace tools
{
FACTORY_ITEM_ATTRIBUTE(ChangeSkinSizeAction)
void ChangeSkinSizeAction::doAction()
{
storeOldValues();
setNewValues();
}
void ChangeSkinSizeAction::undoAction()
{
PropertyUtility::restoreUniqueNameProperty(mOldValues);
}
bool ChangeSkinSizeAction::doMerge(Action* _action)
{
ChangeSkinSizeAction* action = dynamic_cast<ChangeSkinSizeAction*>(_action);
if (action != nullptr)
{
if (action->getProperty() == getProperty())
{
setValue(action->getValue());
setNewValues();
return true;
}
}
return false;
}
void ChangeSkinSizeAction::storeRegionValues(DataPtr _skinData, VectorPairProperty& _store)
{
const Data::VectorData& childs = _skinData->getChilds();
for (Data::VectorData::const_iterator child = childs.begin(); child != childs.end(); child++)
{
if ((*child)->getType()->getName() != "Region")
continue;
PropertyPtr property = (*child)->getProperty("Coord");
_store.push_back(std::make_pair(property, property->getValue()));
}
}
void ChangeSkinSizeAction::storeOldValues()
{
mOldValues.push_back(std::make_pair(getProperty(), getProperty()->getValue()));
DataPtr skinData = getProperty()->getOwner();
storeRegionValues(skinData, mOldValues);
}
void ChangeSkinSizeAction::setNewValues()
{
getProperty()->setValue(getValue());
DataPtr skinData = getProperty()->getOwner();
MyGUI::IntSize size = SkinDataUtility::getSkinSize(skinData);
MyGUI::IntRect separators = SkinDataUtility::getSeparatorsOffset(skinData);
SkinDataUtility::VectorCoord coords = SkinDataUtility::getRegions(size, separators);
SkinDataUtility::fillRegionCoords(skinData, coords);
}
}
|