void TableHeader::updateColumnHeadersComponents(void) { if(getColumnModel() == NULL) return; std::vector<UInt32> SelectedColumns = getColumnModel()->getSelectedColumns(); std::vector<UInt32>::iterator SearchItor; bool isSelected(false); clearColumnHeaders(); for(UInt32 i(0) ; i<getColumnModel()->getColumnCount(); ++i) { SearchItor = std::find(SelectedColumns.begin(), SelectedColumns.end(), i); isSelected = (SearchItor != SelectedColumns.end()); //TODO: Add Column Focusing ComponentUnrecPtr NewComp(_DefaultTableHeaderRenderer->getTableCellRendererComponent(getTable(), getColumnModel()->getColumn(i)->getHeaderValue(), isSelected, false, 0, i)); pushToColumnHeaders(NewComp); } clearChildren(); //Add all of the Header Components for(UInt32 i(0); i<getMFColumnHeaders()->size() ; ++i) { pushToChildren(getColumnHeaders(i)); } //TODO: Add all of the Margin Components }
void TableHeader::onDestroy() { if(getColumnModel() != NULL) { getColumnModel()->removeColumnModelListener(&_ColumnModelListener); } }
void TableHeader::onCreate(const TableHeader * Id) { Inherited::onCreate(Id); if(getColumnModel() != NULL) { getColumnModel()->addColumnModelListener(&_ColumnModelListener); } }
TableColumn* TableHeader::columnAtPoint(const Pnt2f& point) const { Int32 ColumnIndex = getColumnModel()->getColumnIndexAtX(point.x()); if(ColumnIndex == -1) { return NULL; } else { return getColumnModel()->getColumn(ColumnIndex); } }
void TableHeader::setColumnModel(TableColumnModel * const value) { //if(_ColumnModel.get() != NULL) //{ // getColumnModel()->removeColumnModelListener(&_ColumnModelListener); //} //_ColumnModel = columnModel; updateColumnHeadersComponents(); if(getColumnModel() != NULL) { getColumnModel()->addColumnModelListener(&_ColumnModelListener); } }
void TableHeader::handleColBorderMouseDragged(MouseEventDetails* const e) { if(e->getButton() == MouseEventDetails::BUTTON1) { Pnt2f MousePosInComponent = ViewportToComponent(e->getLocation(), this, e->getViewport()); TableColumnRefPtr TheColumn(getColumnModel()->getColumn(_ResizingColumn)); Real32 NewWidth(MousePosInComponent.x() - getColumnHeaders(_ResizingColumn)->getPosition().x()); if(NewWidth <= 0 || NewWidth < TheColumn->getMinWidth()) { NewWidth = TheColumn->getMinWidth(); } if(NewWidth > TheColumn->getMaxWidth()) { NewWidth = TheColumn->getMaxWidth(); } //Get the new desired center for this margin TheColumn->setWidth(NewWidth); updateLayout(); } }
void TableHeader::checkMouseMargins(MouseEventDetails* const e) { if(isContainedClipBounds(e->getLocation(), this)) { Pnt2f MousePosInComponent = ViewportToComponent(e->getLocation(), this, e->getViewport()); UInt32 CumulativeHeaderWidth(0); for(UInt32 i(0) ; i<getMFColumnHeaders()->size() ; ++i) { CumulativeHeaderWidth += getColumnHeaders(i)->getSize().x(); if(MousePosInComponent.x() >= CumulativeHeaderWidth - getResizingCursorDriftAllowance() && MousePosInComponent.x() <= CumulativeHeaderWidth + getColumnModel()->getColumnMargin() + getResizingCursorDriftAllowance()) { getParentWindow()->getParentDrawingSurface()->getEventProducer()->setCursorType(WindowEventProducer::CURSOR_RESIZE_W_TO_E); return; } CumulativeHeaderWidth += getColumnModel()->getColumnMargin(); } } getParentWindow()->getParentDrawingSurface()->getEventProducer()->setCursorType(WindowEventProducer::CURSOR_POINTER); }
void TableHeader::mousePressed(MouseEventDetails* const e) { if(getResizingAllowed()) { Pnt2f MousePosInComponent = ViewportToComponent(e->getLocation(), this, e->getViewport()); UInt32 CumulativeHeaderWidth(0); for(UInt32 i(0) ; i<getMFColumnHeaders()->size() ; ++i) { CumulativeHeaderWidth += getColumnHeaders(i)->getSize().x(); if(MousePosInComponent.x() >= CumulativeHeaderWidth - getResizingCursorDriftAllowance() && MousePosInComponent.x() <= CumulativeHeaderWidth + getColumnModel()->getColumnMargin() + getResizingCursorDriftAllowance()) { _ColBorderMouseDraggedConnection = getParentWindow()->getParentDrawingSurface()->getEventProducer()->connectMouseDragged(boost::bind(&TableHeader::handleColBorderMouseDragged, this, _1)); _ColBorderMouseReleasedConnection = getParentWindow()->getParentDrawingSurface()->getEventProducer()->connectMouseReleased(boost::bind(&TableHeader::mouseColBorderMouseReleased, this, _1)); _ResizingColumn = i; return; } CumulativeHeaderWidth += getColumnModel()->getColumnMargin(); } } Inherited::mousePressed(e); }
void TableHeader::mousePressed(const MouseEventUnrecPtr e) { if(getResizingAllowed()) { Pnt2f MousePosInComponent = ViewportToComponent(e->getLocation(), TableHeaderRefPtr(this), e->getViewport()); UInt32 CumulativeHeaderWidth(0); for(UInt32 i(0) ; i<getMFColumnHeaders()->size() ; ++i) { CumulativeHeaderWidth += getColumnHeaders(i)->getSize().x(); if(MousePosInComponent.x() >= CumulativeHeaderWidth - getResizingCursorDriftAllowance() && MousePosInComponent.x() <= CumulativeHeaderWidth + getColumnModel()->getColumnMargin() + getResizingCursorDriftAllowance()) { getParentWindow()->getDrawingSurface()->getEventProducer()->addMouseMotionListener(&(_MarginDraggedListener)); getParentWindow()->getDrawingSurface()->getEventProducer()->addMouseListener(&(_MarginDraggedListener)); _ResizingColumn = i; return; } CumulativeHeaderWidth += getColumnModel()->getColumnMargin(); } } Inherited::mousePressed(e); }
void TableHeader::updateLayout(void) { Pnt2f BorderTopLeft, BorderBottomRight; getInsideInsetsBounds(BorderTopLeft, BorderBottomRight); UInt32 CumulativeWidth(0); UInt32 Height(0); //Use the Model to update the position and sizes of the Headers for(UInt32 i(0) ; i<getMFColumnHeaders()->size() ; ++i) { getColumnHeaders(i)->setPosition( Pnt2f(BorderTopLeft.x() + CumulativeWidth, BorderTopLeft.y()) ); getColumnHeaders(i)->setSize( Vec2f(getColumnModel()->getColumn(i)->getWidth(), getColumnHeaders(i)->getPreferredSize().y()) ); Height = osgMax<UInt32>(Height, getColumnHeaders(i)->getSize().y()); CumulativeWidth += getColumnHeaders(i)->getSize().x(); //Add on the Margin if(i != getMFColumnHeaders()->size()-1) { CumulativeWidth += getColumnModel()->getColumnMargin(); } } //Use the Model to update the position and sizes of the Margins //Update My Preferred Size Pnt2f TopLeft, BottomRight; getBounds(TopLeft, BottomRight); Vec2f NewPreferredSize(CumulativeWidth + (BottomRight.x() - TopLeft.x() - BorderBottomRight.x() + BorderTopLeft.x()), Height + (BottomRight.y() - TopLeft.y() - BorderBottomRight.y() + BorderTopLeft.y())); if(NewPreferredSize != getPreferredSize()) { setPreferredSize(NewPreferredSize); } }
void TableHeader::onCreate(const TableHeader * Id) { Inherited::onCreate(Id); if(getColumnModel() != NULL) { _ColumnAddedConnection = getColumnModel()->connectColumnAdded(boost::bind(&TableHeader::handleColumnAdded, this, _1)); _ColumnMarginChangedConnection = getColumnModel()->connectColumnMarginChanged(boost::bind(&TableHeader::handleColumnMarginChanged, this, _1)); _ColumnMovedConnection = getColumnModel()->connectColumnMoved(boost::bind(&TableHeader::handleColumnMoved, this, _1)); _ColumnRemovedConnection = getColumnModel()->connectColumnRemoved(boost::bind(&TableHeader::handleColumnRemoved, this, _1)); _ColumnSelectionChangedConnection = getColumnModel()->connectColumnSelectionChanged(boost::bind(&TableHeader::handleColumnSelectionChanged, this, _1)); } }
void TableHeader::setColumnModel(TableColumnModel * const value) { _ColumnAddedConnection.disconnect(); _ColumnMarginChangedConnection.disconnect(); _ColumnMovedConnection.disconnect(); _ColumnRemovedConnection.disconnect(); _ColumnSelectionChangedConnection.disconnect(); updateColumnHeadersComponents(); if(getColumnModel() != NULL) { _ColumnAddedConnection = getColumnModel()->connectColumnAdded(boost::bind(&TableHeader::handleColumnAdded, this, _1)); _ColumnMarginChangedConnection = getColumnModel()->connectColumnMarginChanged(boost::bind(&TableHeader::handleColumnMarginChanged, this, _1)); _ColumnMovedConnection = getColumnModel()->connectColumnMoved(boost::bind(&TableHeader::handleColumnMoved, this, _1)); _ColumnRemovedConnection = getColumnModel()->connectColumnRemoved(boost::bind(&TableHeader::handleColumnRemoved, this, _1)); _ColumnSelectionChangedConnection = getColumnModel()->connectColumnSelectionChanged(boost::bind(&TableHeader::handleColumnSelectionChanged, this, _1)); } }