/************************************************************************* Handler for when mouse buttons area released *************************************************************************/ void ListHeaderSegment::onMouseButtonUp(MouseEventArgs& e) { // base class processing Window::onMouseButtonUp(e); if (e.button == LeftButton) { // if we were pushed and mouse was released within our segment area if (d_segmentPushed && d_segmentHover) { WindowEventArgs args(this); onSegmentClicked(args); } else if (d_dragMoving) { MouseCursor::getSingleton().setImage(getMouseCursor()); WindowEventArgs args(this); onSegmentDragStop(args); } // release our capture on the input data releaseInput(); ++e.handled; } }
/************************************************************************* Hanlder for when a segment is clicked (to change sort segment / direction) *************************************************************************/ bool ListHeader::segmentClickedHandler(const EventArgs& e) { // double-check we allow this action if (d_sortingEnabled) { ListHeaderSegment* seg = ((ListHeaderSegment*)((WindowEventArgs&)e).window); // is this a new sort column? if (d_sortSegment != seg) { d_sortDir = ListHeaderSegment::Descending; setSortSegment(*seg); } // not a new segment, toggle current direction else if (d_sortSegment) { ListHeaderSegment::SortDirection currDir = d_sortSegment->getSortDirection(); // set new direction based on the current value. switch (currDir) { case ListHeaderSegment::None: setSortDirection(ListHeaderSegment::Descending); break; case ListHeaderSegment::Ascending: setSortDirection(ListHeaderSegment::Descending); break; case ListHeaderSegment::Descending: setSortDirection(ListHeaderSegment::Ascending); break; } } // Notify that a segment has been clicked WindowEventArgs args(((WindowEventArgs&)e).window); onSegmentClicked(args); } return true; }