void WidgetSelectorManager::selectWidget(const MyGUI::IntPoint& _mousePosition)
	{
		if (mLastClickPoint != _mousePosition)
		{
			mSelectDepth = 0;
			mLastClickPoint = _mousePosition;
		}

		// здесь кликать вглубь
		MyGUI::Widget* item = getTopWidget(_mousePosition);
		if (nullptr != item)
		{
			// find widget registered as container
			while ((nullptr == EditorWidgets::getInstance().find(item)) && (nullptr != item))
				item = item->getParent();
			MyGUI::Widget* oldItem = item;

			// try to selectin depth
			size_t depth = mSelectDepth;
			while (depth && (nullptr != item))
			{
				item = item->getParent();
				while ((nullptr == EditorWidgets::getInstance().find(item)) && (nullptr != item))
					item = item->getParent();
				MYGUI_ASSERT(depth != 0, "depth != 0");
				depth--;
			}

			if (nullptr == item)
			{
				item = oldItem;
				mSelectDepth = 0;
			}

			// found widget
			if (nullptr != item)
			{
				depth =  mSelectDepth;
				WidgetSelectorManager::getInstance().setSelectedWidget(item);
				mSelectDepth = depth + 1;
			}
			else
			{
				WidgetSelectorManager::getInstance().setSelectedWidget(nullptr);
			}
		}
		else
		{
			WidgetSelectorManager::getInstance().setSelectedWidget(nullptr);
		}
	}
Beispiel #2
0
void NoDrop::onFrame(float dt)
{
    if (!mWidget)
        return;

    MyGUI::IntPoint mousePos = MyGUI::InputManager::getInstance().getMousePosition();

    if (mDrag->mIsOnDragAndDrop)
    {
        MyGUI::Widget* focus = MyGUI::InputManager::getInstance().getMouseFocusWidget();
        while (focus && focus != mWidget)
            focus = focus->getParent();

        if (focus == mWidget)
            mTransparent = true;
    }
    if (!mWidget->getAbsoluteCoord().inside(mousePos))
        mTransparent = false;

    if (mTransparent)
    {
        mWidget->setNeedMouseFocus(false); // Allow click-through
        setAlpha(std::max(0.13f, mWidget->getAlpha() - dt*5));
    }
    else
    {
        mWidget->setNeedMouseFocus(true);
        setAlpha(std::min(1.0f, mWidget->getAlpha() + dt*5));
    }
}
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());
}
Beispiel #4
0
	void step_attach_widget()
	{
		MyGUI::Widget* widget1 = get_random(all_widgets);
		MyGUI::Widget* widget2 = get_random(all_widgets);
		if (!widget1 || !widget2) return;

		MyGUI::Widget* test = widget1;
		do
		{
			if (test == widget2) return;
			test = test->getParent();
		}
		while (test);

		widget2->attachToWidget(widget1, get_type(), get_layer());
		test_widgets();
	}
Beispiel #5
0
void WindowBase::setVisible(bool visible)
{
    bool wasVisible = mMainWidget->getVisible();
    mMainWidget->setVisible(visible);

    if (visible)
        onOpen();
    else if (wasVisible)
        onClose();

    // This is needed as invisible widgets can retain key focus.
    // Remove for MyGUI 3.2.2
    if (!visible)
    {
        MyGUI::Widget* keyFocus = MyGUI::InputManager::getInstance().getKeyFocusWidget();
        while (keyFocus != mMainWidget && keyFocus != nullptr)
            keyFocus = keyFocus->getParent();

        if (keyFocus == mMainWidget)
            MWBase::Environment::get().getWindowManager()->setKeyFocusWidget(nullptr);
    }
}
Beispiel #6
0
//===================================================================================
void EditorState::injectMousePress(int _absx, int _absy, MyGUI::MouseButton _id)
{
	if (testMode)
	{
		return base::BaseManager::injectMousePress(_absx, _absy, _id);
	}

	if (MyGUI::InputManager::getInstance().isModalAny())
	{
		// if we have modal widgets we can't select any widget
		base::BaseManager::injectMousePress(_absx, _absy, _id);
		return;
	}

	// align to grid if shift not pressed
	int x1, y1;
	if (MyGUI::InputManager::getInstance().isShiftPressed() == false)
	{
		x1 = toGrid(_absx);
		y1 = toGrid(_absy);
	}
	else
	{
		x1 = _absx;
		y1 = _absy;
	}

	// юбилейный комит  =)
	mWidgetsWindow->startNewWidget(x1, y1, _id);

	// это чтобы можно было двигать пр¤моугольник у невидимых виджето (или виджетов за границами)
	//MyGUI::LayerItemInfoPtr rootItem = nullptr;
	//MyGUI::Widget* itemWithRect = static_cast<MyGUI::Widget*>(MyGUI::LayerManager::getInstance().findWidgetItem(_absx, _absy, rootItem));
	// не стал это доделывать, т.к. неоднозначность выбора виджета получаетс¤, если кто скажет как выбирать - сделаю

	MyGUI::Widget* item = MyGUI::LayerManager::getInstance().getWidgetFromPoint(_absx, _absy);

	// не убираем пр¤моугольник если нажали на его раст¤гивалку
	if (item && (item->getParent() != mPropertiesPanelView->getWidgetRectangle()))
	{
		// чтобы пр¤моугольник не мешалс¤
		mPropertiesPanelView->getWidgetRectangle()->setVisible(false);
		item = MyGUI::LayerManager::getInstance().getWidgetFromPoint(_absx, _absy);
	}

	if (nullptr != item)
	{
		// find widget registered as container
		while ((nullptr == ew->find(item)) && (nullptr != item)) item = item->getParent();
		MyGUI::Widget* oldItem = item;

		// try to selectin depth
		int depth = selectDepth;
		while (depth && (nullptr != item))
		{
			item = item->getParent();
			while ((nullptr == ew->find(item)) && (nullptr != item)) item = item->getParent();
			depth--;
		}
		if (nullptr == item)
		{
			item = oldItem;
			selectDepth = 0;
		}

		// found widget
		if (nullptr != item)
		{
			notifySelectWidget(item);
			if (mWidgetsWindow->getCreatingStatus() != 1)
			{
				//FIXME
				getGUI()->injectMouseMove(_absx, _absy, 0);// это чтобы сразу можно было тащить
			}
		}
		//FIXME
		getGUI()->injectMousePress(_absx, _absy, _id);
	}
	else
	{
		//FIXME
		getGUI()->injectMousePress(_absx, _absy, _id);
		notifySelectWidget(nullptr);
	}

	// вернем пр¤моугольник
	if (current_widget && mWidgetsWindow->getCreatingStatus() == 0)
	{
		mPropertiesPanelView->getWidgetRectangle()->setVisible(true);
	}
	else if (mWidgetsWindow->getCreatingStatus())
	{
		mPropertiesPanelView->getWidgetRectangle()->setVisible(false);
	}

	//base::BaseManager::injectMousePress(_absx, _absy, _id);
}