void ofxFlashDisplayObjectContainer :: swapChildrenAt ( int index1, int index2 )
{
	if( index1 == index2 )
		return;
	
	ofxFlashDisplayObject* child1 = getChildAt( index1 );
	ofxFlashDisplayObject* child2 = getChildAt( index2 );
	
	if( child1 == NULL || child2 == NULL )
		return;
	
	if( index2 > index1 )
	{
		children.erase( children.begin() + index2 );
		children.erase( children.begin() + index1 );
	}
	else
	{
		children.erase( children.begin() + index1 );
		children.erase( children.begin() + index2 );
	}
	
	if( index1 < index2 )
	{
		children.insert( children.begin() + index1, child2 );
		children.insert( children.begin() + index2, child1 );
	}
	else
	{
		children.insert( children.begin() + index2, child1 );
		children.insert( children.begin() + index1, child2 );
	}
}
Exemplo n.º 2
0
MythGenericTree* MythGenericTree::getSelectedChild(bool onlyVisible) const
{
    MythGenericTree *selectedChild = NULL;

    if (m_selected_subnode)
        selectedChild = m_selected_subnode;
    else if (onlyVisible)
        selectedChild = getVisibleChildAt(0);
    else
        selectedChild = getChildAt(0);

    return selectedChild;
}
Exemplo n.º 3
0
MythGenericTree* MythGenericTree::findLeaf()
{
    if (m_subnodes->count() > 0)
    {
        if (m_currentOrderingIndex == -1)
            return m_subnodes->first()->findLeaf();

        MythGenericTree *first_child = getChildAt(0);

        return first_child->findLeaf();
    }

    return this;
}
bool RandomAccessVerificationAndOptimizationOperator::validateChildren(){
	// all it's children must be RandomAccessNodes
	for(unsigned i = 0 ; i < getChildrenCount() ; i++){
		PhysicalPlanOptimizationNode * child = getChildAt(i);
		PhysicalPlanNodeType childType = child->getType();
		switch (childType) {
			case PhysicalPlanNode_RandomAccessTerm:
			case PhysicalPlanNode_RandomAccessAnd:
			case PhysicalPlanNode_RandomAccessOr:
			case PhysicalPlanNode_RandomAccessNot:
			case PhysicalPlanNode_RandomAccessGeo:
				continue;
			default:
				return false;
		}
	}
	return true;
}
Exemplo n.º 5
0
bool SortByScoreOptimizationOperator::validateChildren(){
	for(unsigned i = 0 ; i < getChildrenCount() ; i++){
		PhysicalPlanOptimizationNode * child = getChildAt(i);
		PhysicalPlanNodeType childType = child->getType();
		switch (childType) {
			case PhysicalPlanNode_RandomAccessTerm:
			case PhysicalPlanNode_RandomAccessAnd:
			case PhysicalPlanNode_RandomAccessOr:
			case PhysicalPlanNode_RandomAccessNot:
			case PhysicalPlanNode_RandomAccessGeo:
				return false;
			default:{
				continue;
			}
		}
	}
	return true;
}
Exemplo n.º 6
0
int CUITree::getTreeItemHeight()
{
	int		nHeight = 0;

	// TreeItem 높이를 찾는다.
	int n, nChild = getChildCount();

	for (n = 0; n < nChild; ++n)
	{
		CUIBase* pChild = getChildAt(n);

		if (pChild->getType() == eUI_CONTROL_TREEITEM)
		{
			nHeight = pChild->GetHeight();
			break;
		}
	}

	return nHeight;
}
Exemplo n.º 7
0
bool UnionSortedByIDOptimizationOperator::validateChildren(){
	for(unsigned i = 0 ; i < getChildrenCount() ; i++){
		PhysicalPlanOptimizationNode * child = getChildAt(i);
		PhysicalPlanNodeType childType = child->getType();
		switch (childType) {
			case PhysicalPlanNode_RandomAccessTerm:
			case PhysicalPlanNode_RandomAccessAnd:
			case PhysicalPlanNode_RandomAccessOr:
			case PhysicalPlanNode_RandomAccessNot:
			case PhysicalPlanNode_RandomAccessGeo:
			case PhysicalPlanNode_UnionLowestLevelTermVirtualList:
			case PhysicalPlanNode_GeoNearestNeighbor:
				// this operator cannot have TVL as a child, TVL overhead is not needed for this operator
				return false;
			default:{
				continue;
			}
		}
	}
	return true;
}
Exemplo n.º 8
0
	IntSize WrapPanel::simpleMeasure(const IntSize& _sizeAvailable)
	{
		IntSize result;

		IntSize sizeAvailable = _sizeAvailable;
		IntPoint currentPosition;

		int maxLineHeight = 0;
		bool hasAnyWidget = false;

		size_t count = getChildCount();
		for (size_t index = 0; index < count; ++ index)
		{
			Widget* child = getChildAt(index);
			Panel::updateMeasure(child, sizeAvailable);
			IntSize size = Panel::getDesiredSize(child);

			if (((currentPosition.left + size.width) > sizeAvailable.width))
			{
				if (hasAnyWidget)
				{
					result.width = (std::max)(result.width, currentPosition.left - mSpacer.width);

					currentPosition.left = 0;
					currentPosition.top += maxLineHeight + mSpacer.height;
					maxLineHeight = 0;
				}
			}

			currentPosition.left += size.width + mSpacer.width;
			maxLineHeight = (std::max)(maxLineHeight, size.height);

			hasAnyWidget = true;
		}

		result.height = currentPosition.top + maxLineHeight;
		result.width = (std::max)(result.width, currentPosition.left);

		return result;
	}
Exemplo n.º 9
0
	void WrapPanel::simpleArrange()
	{
		IntCoord coordAvailable(0, 0, getWidth(), getHeight());
		IntPoint currentPosition = coordAvailable.point();

		int maxLineHeight = 0;
		bool hasAnyWidget = false;
		size_t startLineIndex = 0;

		size_t count = getChildCount();
		for (size_t index = 0; index < count; ++ index)
		{
			Widget* child = getChildAt(index);
			IntSize size = Panel::getDesiredSize(child);

			if (((currentPosition.left + size.width) > coordAvailable.width))
			{
				if (hasAnyWidget)
				{
					alignChildLine(startLineIndex, index, IntCoord(coordAvailable.left, currentPosition.top, coordAvailable.width, maxLineHeight), currentPosition.left - mSpacer.width);

					currentPosition.left = 0;
					currentPosition.top += maxLineHeight + mSpacer.height;
					maxLineHeight = 0;

					startLineIndex = index;
				}
			}

			currentPosition.left += size.width + mSpacer.width;
			maxLineHeight = (std::max)(size.height, maxLineHeight);

			hasAnyWidget = true;
		}

		if (startLineIndex < count)
			alignChildLine(startLineIndex, count, IntCoord(coordAvailable.left, currentPosition.top, coordAvailable.width, maxLineHeight), currentPosition.left - mSpacer.width);
	}
Exemplo n.º 10
0
	void WrapPanel::alignChildLine(size_t _startIndex, size_t _stopIndex, const IntCoord& _coordAvailable, int _lineWidth)
	{
		int left = _coordAvailable.left;
		if (mContentAlign.isHCenter())
			left = _coordAvailable.left + ((_coordAvailable.width - _lineWidth) / 2);
		else if (mContentAlign.isRight())
			left = _coordAvailable.left + (_coordAvailable.width - _lineWidth);

		for (size_t index = _startIndex; index < _stopIndex; ++ index)
		{
			Widget* child = getChildAt(index);
			IntSize size = Panel::getDesiredSize(child);

			int top = _coordAvailable.top;
			if (mContentAlign.isVCenter())
				top = _coordAvailable.top + ((_coordAvailable.height - size.height) / 2);
			else if (mContentAlign.isBottom())
				top = _coordAvailable.top + (_coordAvailable.height - size.height);

			Panel::updateArrange(child, IntCoord(left, top, size.width, size.height));
			left += size.width + mSpacer.width;
		}
	}
Exemplo n.º 11
0
	void WrapPanel::floatArrange()
	{
		size_t count = getChildCount();

		if (count == 0)
			return;

		Widget* child = getChildAt(0);
		IntSize firstSize = Panel::getDesiredSize(child);
		if (mSnapFloat.isRight())
			Panel::updateArrange(child, IntCoord(getWidth() - firstSize.width, 0, firstSize.width, firstSize.height));
		else
			Panel::updateArrange(child, IntCoord(0, 0, firstSize.width, firstSize.height));

		if (count == 1)
			return;

		IntCoord coordAvailable(0, 0, getWidth(), getHeight());
		IntPoint currentPosition;

		int maxLineHeight = 0;
		bool hasAnyWidget = false;
		size_t startLineIndex = 1;

		for (size_t index = 1; index < count; ++ index)
		{
			bool floatBehaivoir = ((firstSize.height + mSpacer.height) > currentPosition.top);

			if (floatBehaivoir)
			{
				if (mSnapFloat.isRight())
					coordAvailable.left = 0;
				else
					coordAvailable.left = firstSize.width + mSpacer.width;
				coordAvailable.width = getWidth() - (firstSize.width + mSpacer.width);
			}
			else
			{
				coordAvailable.left = 0;
				coordAvailable.width = getWidth();
			}

			Widget* child = getChildAt(index);
			IntSize size = Panel::getDesiredSize(child);

			if ((currentPosition.left + size.width) > coordAvailable.width)
			{
				if (hasAnyWidget || floatBehaivoir)
				{
					alignChildLine(startLineIndex, index, IntCoord(coordAvailable.left, currentPosition.top, coordAvailable.width, maxLineHeight), currentPosition.left - mSpacer.width);

					currentPosition.left = 0;
					currentPosition.top += maxLineHeight + mSpacer.height;
					maxLineHeight = 0;

					startLineIndex = index;
				}
			}

			if (floatBehaivoir)
			{
				if (((currentPosition.left + size.width) > coordAvailable.width))
				{
					-- index;
					continue;
				}
			}

			currentPosition.left += size.width + mSpacer.width;
			maxLineHeight = (std::max)(size.height, maxLineHeight);

			hasAnyWidget = true;
		}

		if (startLineIndex < count)
			alignChildLine(startLineIndex, count, IntCoord(coordAvailable.left, currentPosition.top, coordAvailable.width, maxLineHeight), currentPosition.left - mSpacer.width);
	}
Exemplo n.º 12
0
	IntSize WrapPanel::floatMeasure(const IntSize& _sizeAvailable)
	{
		IntSize result;
		size_t count = getChildCount();

		if (count == 0)
			return result;

		Widget* child = getChildAt(0);
		Panel::updateMeasure(child, _sizeAvailable);
		IntSize firstSize = Panel::getDesiredSize(child);

		if (count == 1)
			return firstSize;

		IntSize sizeAvailable = _sizeAvailable;
		IntPoint currentPosition;

		int maxLineHeight = 0;
		bool hasAnyWidget = false;

		for (size_t index = 1; index < count; ++ index)
		{
			bool floatBehaivoir = ((firstSize.height + mSpacer.height) > currentPosition.top);

			if (floatBehaivoir)
			{
				sizeAvailable.width = _sizeAvailable.width - (firstSize.width + mSpacer.width);
			}
			else
			{
				sizeAvailable.width = _sizeAvailable.width;
			}

			Widget* child = getChildAt(index);
			Panel::updateMeasure(child, sizeAvailable);
			IntSize size = Panel::getDesiredSize(child);

			if ((currentPosition.left + size.width) > sizeAvailable.width)
			{
				if (hasAnyWidget || floatBehaivoir)
				{
					result.width = (std::max)(result.width, currentPosition.left - mSpacer.width);

					currentPosition.left = 0;
					currentPosition.top += maxLineHeight + mSpacer.height;
					maxLineHeight = 0;
				}
			}

			if (floatBehaivoir)
			{
				if (((currentPosition.left + size.width) > sizeAvailable.width))
				{
					-- index;
					continue;
				}
			}

			currentPosition.left += size.width + mSpacer.width;
			maxLineHeight = (std::max)(maxLineHeight, size.height);

			hasAnyWidget = true;
		}

		result.height = (std::max)(firstSize.height, currentPosition.top + maxLineHeight);
		result.width = (std::max)(result.width, currentPosition.left);

		return result;
	}
Exemplo n.º 13
0
void FrameLayout::onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    int count = getChildCount();

    const bool measureMatchParentChildren =
            MeasureSpec::getMode(widthMeasureSpec) != MeasureSpec::EXACTLY ||
                    MeasureSpec::getMode(heightMeasureSpec) != MeasureSpec::EXACTLY;
    m_matchParentChildren.clear();

    int maxHeight = 0;
    int maxWidth = 0;
    int childState = 0;

    for (int i = 0; i < count; i++) {
        shared_ptr<View> child = getChildAt(i);
        if (m_measureAllChildren || child->getVisibility() != View::GONE) {
            measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0);
            FrameLayoutParams *lp = static_cast<FrameLayoutParams*>(child->getLayoutParams());
            maxWidth = std::max(maxWidth, child->getMeasuredWidth() + lp->leftMargin + lp->rightMargin);
            maxHeight = std::max(maxHeight, child->getMeasuredHeight() + lp->topMargin + lp->bottomMargin);
            childState = combineMeasuredStates(childState, child->getMeasuredState());
            if (measureMatchParentChildren) {
                if (lp->width == LayoutParams::MATCH_PARENT ||
                        lp->height == LayoutParams::MATCH_PARENT) {
                    m_matchParentChildren.push_back(child);
                }
            }
        }
    }

    // Account for padding too
    maxWidth += getPaddingLeftWithForeground() + getPaddingRightWithForeground();
    maxHeight += getPaddingTopWithForeground() + getPaddingBottomWithForeground();

    // Check against our minimum height and width
    maxHeight = std::max(maxHeight, getSuggestedMinimumHeight());
    maxWidth = std::max(maxWidth, getSuggestedMinimumWidth());

    // Check against our foreground's minimum height and width
    /*const Drawable drawable = getForeground();
    if (drawable != null) {
        maxHeight = std::max(maxHeight, drawable.getMinimumHeight());
        maxWidth = std::max(maxWidth, drawable.getMinimumWidth());
    }*/

    setMeasuredDimension(resolveSizeAndState(maxWidth, widthMeasureSpec, childState),
            resolveSizeAndState(maxHeight, heightMeasureSpec,
                    childState << MEASURED_HEIGHT_STATE_SHIFT));

    count = m_matchParentChildren.size();
    if (count > 1) {
        for (int i = 0; i < count; i++) {
            shared_ptr<View> child = m_matchParentChildren[i];
            
            MarginLayoutParams *lp = static_cast<MarginLayoutParams*>(child->getLayoutParams());
            int childWidthMeasureSpec;
            int childHeightMeasureSpec;

            if (lp->width == LayoutParams::MATCH_PARENT) {
                childWidthMeasureSpec = MeasureSpec::makeMeasureSpec(getMeasuredWidth() -
                        getPaddingLeftWithForeground() - getPaddingRightWithForeground() -
                        lp->leftMargin - lp->rightMargin,
                        MeasureSpec::EXACTLY);
            } else {
                childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec,
                        getPaddingLeftWithForeground() + getPaddingRightWithForeground() +
                                lp->leftMargin + lp->rightMargin,
                        lp->width);
            }

            if (lp->height == LayoutParams::MATCH_PARENT) {
                childHeightMeasureSpec = MeasureSpec::makeMeasureSpec(getMeasuredHeight() -
                        getPaddingTopWithForeground() - getPaddingBottomWithForeground() -
                        lp->topMargin - lp->bottomMargin,
                        MeasureSpec::EXACTLY);
            } else {
                childHeightMeasureSpec = getChildMeasureSpec(heightMeasureSpec,
                        getPaddingTopWithForeground() + getPaddingBottomWithForeground() +
                                lp->topMargin + lp->bottomMargin,
                        lp->height);
            }

            child->measure(childWidthMeasureSpec, childHeightMeasureSpec);
        }
    }
}
Exemplo n.º 14
0
void FrameLayout::onLayout(bool changed, int left, int top, int right, int bottom) {

    CCLOG("onLayout(%s) %d, %d, %d, %d", m_id.c_str(), left, top, right, bottom);
    const int count = getChildCount();

    const int parentLeft = getPaddingLeftWithForeground();
    const int parentRight = right - left - getPaddingRightWithForeground();

    const int parentTop = getPaddingTopWithForeground();
    const int parentBottom = bottom - top - getPaddingBottomWithForeground();

    m_foregroundBoundsChanged = true;

    for (int i = 0; i < count; i++) {
        shared_ptr<View> child = getChildAt(i);
        if (child->getVisibility() != View::GONE) {
            FrameLayoutParams *lp = static_cast<FrameLayoutParams*>(child->getLayoutParams());

            const int width = child->getMeasuredWidth();
            const int height = child->getMeasuredHeight();

            int childLeft;
            int childTop;

            int gravity = lp->gravity;
            if (gravity == -1) {
                gravity = DEFAULT_CHILD_GRAVITY;
            }

            const int layoutDirection = getLayoutDirection();
            const int absoluteGravity = Gravity::getAbsoluteGravity(gravity, layoutDirection);
            const int verticalGravity = gravity & Gravity::VERTICAL_GRAVITY_MASK;

            switch (absoluteGravity & Gravity::HORIZONTAL_GRAVITY_MASK) {
                case Gravity::LEFT:
                    childLeft = parentLeft + lp->leftMargin;
                    break;
                case Gravity::CENTER_HORIZONTAL:
                    childLeft = parentLeft + (parentRight - parentLeft - width) / 2 +
                            lp->leftMargin - lp->rightMargin;
                    break;
                case Gravity::RIGHT:
                    childLeft = parentRight - width - lp->rightMargin;
                    break;
                default:
                    childLeft = parentLeft + lp->leftMargin;
            }

            switch (verticalGravity) {
                case Gravity::TOP:
                    childTop = parentTop + lp->topMargin;
                    break;
                case Gravity::CENTER_VERTICAL:
                    childTop = parentTop + (parentBottom - parentTop - height) / 2 +
                            lp->topMargin - lp->bottomMargin;
                    break;
                case Gravity::BOTTOM:
                    childTop = parentBottom - height - lp->bottomMargin;
                    break;
                default:
                    childTop = parentTop + lp->topMargin;
            }

            child->layout(childLeft, childTop, childLeft + width, childTop + height);
        }
    }
}