/************************************************************************* Handler for mouse movement *************************************************************************/ void Listbox::onMouseMove(MouseEventArgs& e) { if (d_itemTooltips) { static ListboxItem* lastItem = 0; ListboxItem* item = getItemAtPoint(e.position); if (item != lastItem) { if (item) { setTooltipText(item->getTooltipText()); } else { setTooltipText(""); } lastItem = item; } // must check the result from getTooltip(), as the tooltip object could // be 0 at any time for various reasons. Tooltip* tooltip = getTooltip(); if (tooltip) { if (tooltip->getTargetWindow() != this) tooltip->setTargetWindow(this); else tooltip->positionSelf(); } } Window::onMouseMove(e); }
/************************************************************************* Handler for when mouse button is pressed *************************************************************************/ void Listbox::onMouseButtonDown(MouseEventArgs& e) { // base class processing Window::onMouseButtonDown(e); if (e.button == LeftButton) { bool modified = false; // clear old selections if no control key is pressed or if multi-select is off if (!(e.sysKeys & Control) || !d_multiselect) { modified = clearAllSelections_impl(); } Point localPos(screenToWindow(e.position)); if (getMetricsMode() == Relative) { localPos = relativeToAbsolute(localPos); } ListboxItem* item = getItemAtPoint(localPos); if (item != NULL) { modified = true; // select range or item, depending upon keys and last selected item if (((e.sysKeys & Shift) && (d_lastSelected != NULL)) && d_multiselect) { selectRange(getItemIndex(item), getItemIndex(d_lastSelected)); } else { item->setSelected(item->isSelected() ^ true); } // update last selected item d_lastSelected = item->isSelected() ? item : NULL; } // fire event if needed if (modified) { WindowEventArgs args(this); onSelectionChanged(args); } e.handled = true; } }
/************************************************************************* Handler for mouse movement events *************************************************************************/ void ComboDropList::onMouseMove(MouseEventArgs& e) { Listbox::onMouseMove(e); // if mouse is within our area (but not our children) if (isHit(e.position)) { if (!getChildAtPosition(e.position)) { // handle auto-arm if (d_autoArm) { d_armed = true; } if (d_armed) { // // Convert mouse position to absolute window pixels // Point localPos(CoordConverter::screenToWindow(*this, e.position)); // check for an item under the mouse ListboxItem* selItem = getItemAtPoint(localPos); // if an item is under mouse, select it if (selItem) { setItemSelectState(selItem, true); } else { clearAllSelections(); } } } e.handled = true; } // not within the list area else { // if left mouse button is down, clear any selection if (e.sysKeys & LeftMouse) { clearAllSelections(); } } }
/************************************************************************* Handler for mouse movement events *************************************************************************/ void ComboDropList::onMouseMove(MouseEventArgs& e) { Listbox::onMouseMove(e); // if mouse is within our area (but not our children) if (isHit(e.position)) { if (!getChildAtPosition(e.position)) { // handle auto-arm if (d_autoArm) { d_armed = true; } if (d_armed) { // check for an item under the mouse ListboxItem* selItem = getItemAtPoint(e.position); // if an item is under mouse, select it if (selItem) { setItemSelectState(selItem, true); } else { clearAllSelections(); } } } ++e.handled; } // not within the list area else { // if left mouse button is down, clear any selection if (e.sysKeys & LeftMouse) { clearAllSelections(); } } }
/************************************************************************* Handler for mouse movement *************************************************************************/ void Tree::onMouseMove(MouseEventArgs& e) { if (d_itemTooltips) { static TreeItem* lastItem = 0; Vector2f posi(CoordConverter::screenToWindow(*this, e.position)); // Point posi = relativeToAbsolute(CoordConverter::screenToWindow(*this, e.position)); TreeItem* item = getItemAtPoint(posi); if (item != lastItem) { if (item != 0) { setTooltipText(item->getTooltipText()); } else { setTooltipText(""); } lastItem = item; } // must check the result from getTooltip(), as the tooltip object could // be 0 at any time for various reasons. Tooltip* tooltip = getTooltip(); if (tooltip) { if (tooltip->getTargetWindow() != this) tooltip->setTargetWindow(this); else tooltip->positionSelf(); } } Window::onMouseMove(e); }
/************************************************************************* Handler for when mouse button is pressed *************************************************************************/ void Tree::onMouseButtonDown(MouseEventArgs& e) { // base class processing // populateGeometryBuffer(); Window::onMouseButtonDown(e); if (e.button == LeftButton) { //bool modified = false; Vector2f localPos(CoordConverter::screenToWindow(*this, e.position)); // Point localPos(screenToWindow(e.position)); TreeItem* item = getItemAtPoint(localPos); if (item != 0) { //modified = true; TreeEventArgs args(this); args.treeItem = item; populateGeometryBuffer(); Rectf buttonLocation = item->getButtonLocation(); if ((localPos.d_x >= buttonLocation.left()) && (localPos.d_x <= buttonLocation.right()) && (localPos.d_y >= buttonLocation.top()) && (localPos.d_y <= buttonLocation.bottom())) { item->toggleIsOpen(); if (item->getIsOpen()) { TreeItem *lastItemInList = item->getTreeItemFromIndex(item->getItemCount() - 1); ensureItemIsVisible(lastItemInList); ensureItemIsVisible(item); onBranchOpened(args); } else { onBranchClosed(args); } // Update the item screen locations, needed to update the scrollbars. // populateGeometryBuffer(); // Opened or closed a tree branch, so must update scrollbars. configureScrollbars(); } else { // clear old selections if no control key is pressed or if multi-select is off if (!(e.sysKeys & Control) || !d_multiselect) clearAllSelections_impl(); // select range or item, depending upon keys and last selected item #if 0 // TODO: fix this if (((e.sysKeys & Shift) && (d_lastSelected != 0)) && d_multiselect) selectRange(getItemIndex(item), getItemIndex(d_lastSelected)); else #endif item->setSelected(item->isSelected() ^ true); // update last selected item d_lastSelected = item->isSelected() ? item : 0; onSelectionChanged(args); } } else { // clear old selections if no control key is pressed or if multi-select is off if (!(e.sysKeys & Control) || !d_multiselect) { if (clearAllSelections_impl()) { // Changes to the selections were actually made TreeEventArgs args(this); args.treeItem = item; onSelectionChanged(args); } } } ++e.handled; } }