예제 #1
0
 AutoLayoutContainer::~AutoLayoutContainer()
 {
     std::list<Widget*>::iterator currChild(mChildren.begin());
     std::list<Widget*>::iterator endChildren(mChildren.end());
     
     for(; currChild != endChildren; ++currChild)
     {
         (*currChild)->removeWidgetListener(this);
     }
 }
예제 #2
0
 void VBox::fitChildrenToAxis()
 {
     std::list<Widget*>::iterator currChild(mChildren.begin());
     std::list<Widget*>::iterator endChildren(mChildren.end());
     
     int containerWidth = getWidth() - mChildrenOffset;
     
     for(; currChild != endChildren; ++currChild)
     {
         (*currChild)->_setWidthWithoutNotifying(containerWidth);
     }
 }
예제 #3
0
    bool _findChainRec(typename std::vector<tree_type>::const_iterator begin,
                              typename std::vector<tree_type>::const_iterator end,
                              std::vector<tree_type::ptr_type> & res){
        if(begin == end)
            return true;

        if( compareNode(*begin)){
            res.push_back(this);
            begin++;
            for(iterator it = beginChildren(); it != endChildren(); ++it){
                if( it->_findChainRec(begin, end, res) == true){
                    return true;
                }
            }
        }
        return false;
    }
예제 #4
0
 void VBox::relayoutChildren()
 {
     std::list<Widget*>::iterator currChild(mAddedOrder.begin());
     std::list<Widget*>::iterator endChildren(mAddedOrder.end());
     
     int height = 0;
     
     for(; currChild != endChildren; ++currChild)
     {
         Widget* child = (*currChild);
         
         if(child->isVisible())
         {
             child->setPosition(mChildrenOffset, height);
             height += child->getHeight() + mPadding;
         }
     }
 }
예제 #5
0
 int VBox::getVisibleChildrenHeight() const 
 {
     std::list<Widget*>::const_iterator currChild(mAddedOrder.begin());
     std::list<Widget*>::const_iterator endChildren(mAddedOrder.end());
     
     int height = 0;
     
     for(; currChild != endChildren; ++currChild)
     {
         Widget *child = (*currChild);
         
         if(child->isVisible())
         {
             height += child->getHeight();
         }
     }
     
     return height;    
 }
예제 #6
0
 int VBox:: getMaxVisibleChildWidth() const
 {
     std::list<Widget*>::const_iterator currChild(mChildren.begin());
     std::list<Widget*>::const_iterator endChildren(mChildren.end());
     
     int max = 0;
     
     for(; currChild != endChildren; ++currChild)
     {
         Widget *child = (*currChild);
         
         if(child->isVisible())
         {
             max = std::max(child->getWidth(), max);
         }
     }
     
     return max;
 }
예제 #7
0
    inline bool matchTree(const BasicPtree & rtree) const{
        if(compareNode(rtree) == false){
            return false;
        }

        for(const_iterator it_rtree = rtree.beginChildren(); it_rtree != rtree.endChildren(); ++it_rtree){
            bool found=false;
            for(const_iterator it = beginChildren(); it != endChildren(); ++it){
                if(it->matchTree(*it_rtree) ){
                    found = true;
                    break;
                }
            }
            if(!found){ // failed to find rtree node in main tree
                return false;
            }
        }
        std::cout << " end node " << rtree._data << std::endl;
        return true;
    }