void WidgetCreatorManager::finishNewWidget(const MyGUI::IntPoint& _point)
{
    if (mNewWidget != nullptr)
    {
        MyGUI::IntCoord coord = getCoordNewWidget(_point);

        if (coord.width != 0 && coord.height != 0)
        {
            mNewWidget->setCoord(coord);

            // создали виджет, все счастливы
            WidgetContainer * widgetContainer = new WidgetContainer(mWidgetType, mWidgetSkin, mNewWidget);
            if (mPopupMode)
                widgetContainer->setStyle(mNewWidget->getWidgetStyle().print());
            mNewWidget = nullptr;

            EditorWidgets::getInstance().add(widgetContainer);
            UndoManager::getInstance().addValue();

            // чтобы выделился созданый виджет
            resetAllCreatorInfo();

            WidgetSelectorManager::getInstance().setSelectedWidget(widgetContainer->getWidget());
        }
        else
        {
            // не удалось создать, т.к. размер нулевой
            resetWidget();
        }
    }

    resetAllCreatorInfo();

    eventChangeSelector(false, MyGUI::IntCoord());
}
void WidgetCreatorManager::moveNewWidget(const MyGUI::IntPoint& _point)
{
    if (mNewWidget == nullptr)
    {
        // тип виджета может отсутсвовать
        if (!MyGUI::WidgetManager::getInstance().isFactoryExist(mWidgetType))
            return;

        // выделяем верний виджет
        if (!mPopupMode)
            WidgetSelectorManager::getInstance().selectWidget(mStartPoint);

        MyGUI::Widget* parent = WidgetSelectorManager::getInstance().getSelectedWidget();

        // пока не найдем ближайшего над нами способного быть родителем
        while (parent != nullptr && !WidgetTypes::getInstance().findWidgetStyle(parent->getTypeName())->parent)
            parent = parent->getParent();

        if (!WidgetTypes::getInstance().findWidgetStyle(mWidgetType)->child)
            parent = nullptr;

        if (parent != nullptr)
            mNewWidget = parent->createWidgetT(
                             mPopupMode ? MyGUI::WidgetStyle::Popup : MyGUI::WidgetStyle::Child,
                             mWidgetType,
                             EditorWidgets::getInstance().getSkinReplace(mWidgetSkin),
                             MyGUI::IntCoord(),
                             MyGUI::Align::Default,
                             DEFAULT_EDITOR_LAYER);
        else
            mNewWidget = MyGUI::Gui::getInstance().createWidgetT(
                             mWidgetType,
                             EditorWidgets::getInstance().getSkinReplace(mWidgetSkin),
                             MyGUI::IntCoord(),
                             MyGUI::Align::Default,
                             DEFAULT_EDITOR_LAYER);

        // переводим старт поинт в координаты отца
        if (parent != nullptr && !mNewWidget->isRootWidget())
        {
            if (parent->getClientWidget())
                mStartPoint -= parent->getClientWidget()->getAbsolutePosition();
            else
                mStartPoint -= parent->getAbsolutePosition();
        }

        if (!MyGUI::InputManager::getInstance().isShiftPressed())
        {
            mStartPoint.left = Grid::getInstance().toGrid(mStartPoint.left);
            mStartPoint.top = Grid::getInstance().toGrid(mStartPoint.top);
        }
    }

    MyGUI::IntCoord coord = getCoordNewWidget(_point);
    mNewWidget->setCoord(coord);

    eventChangeSelector(true, mNewWidget->getAbsoluteCoord());
}
void WidgetCreatorManager::createNewWidget(const MyGUI::IntPoint& _point)
{
    mStartNewWidget = true;
    mStartPoint = _point;

    resetWidget();

    eventChangeSelector(false, MyGUI::IntCoord());
}
	void WidgetCreatorManager::createNewWidget(const MyGUI::IntPoint& _point)
	{
		mStartNewWidget = true;
		mStartPoint = _point;
		if (!MyGUI::InputManager::getInstance().isShiftPressed())
		{
			mStartPoint.left += mGridStep / 2;
			mStartPoint.top += mGridStep / 2;
		}

		resetWidget();

		eventChangeSelector(false, MyGUI::IntCoord());
	}