def handle_expand(self, e: QtGui.QMouseEvent) -> None: """ Check if click happened on the part with cause expanding the item in the view. If so also expand/collapse the same item in the other view. """ clicked_index = self.indexAt(e.pos()) if clicked_index.isValid(): # if click is left from text then it is expand event vrect = self.visualRect(clicked_index) item_identation = vrect.x() - self.visualRect(self.rootIndex()).x() if e.pos().x() < item_identation: self.expand_in_other_view(clicked_index, not self.isExpanded(clicked_index))
def mouseReleaseEvent(self, event: QMouseEvent) -> None: super().mouseReleaseEvent(event) if self.__mouseDown and event.button() == Qt.LeftButton: self.__mouseDown = False if self.__selectionDidChange: self.__selectionDidChange = False self.selectionFinished.emit()
def _select_data(self): self.widget.attr_x, self.widget.attr_y = self.data.domain[:2] area = self.widget.areas[0] self.widget.select_area(area, QMouseEvent( QEvent.MouseButtonPress, QPoint(), Qt.LeftButton, Qt.LeftButton, Qt.KeyboardModifiers())) return [0, 4, 6, 7, 11, 17, 19, 21, 22, 24, 26, 39, 40, 43, 44, 46]
def test_reset_to_input(self): """Checks if the data resets to input when Reset to Input is pressed""" data = Table("iris") self.send_signal(self.widget.Inputs.data, data) output = self.get_output(self.widget.Outputs.data) self.assertEqual(len(output), len(data)) self.widget.set_current_tool( self.widget.TOOLS[1][2]) # PutInstanceTool tool = self.widget.current_tool event = QMouseEvent(QEvent.MouseButtonPress, QPointF(0.17, 0.17), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) tool.mousePressEvent(event) output = self.get_output(self.widget.Outputs.data) self.assertNotEqual(len(output), len(data)) self.assertEqual(len(output), 151) self.widget.reset_to_input() output = self.get_output(self.widget.Outputs.data) self.assertEqual(len(output), len(data)) self.send_signal(self.widget.Inputs.data, data) output = self.get_output(self.widget.Outputs.data) self.assertEqual(len(output), len(data)) self.widget.set_current_tool(self.widget.TOOLS[5][2]) # ClearTool output = self.get_output(self.widget.Outputs.data) self.assertIsNone(output) self.widget.reset_to_input() output = self.get_output(self.widget.Outputs.data) self.assertEqual(len(output), len(data))
def mouse_move(widget, pos, buttons=Qt.NoButton): if isinstance(widget, QGraphicsView): widget = widget.viewport() event = QMouseEvent(QEvent.MouseMove, pos, Qt.NoButton, buttons, Qt.NoModifier) QApplication.sendEvent(widget, event)
def mouse_release(widget, pos, mouse_button=Qt.LeftButton): if isinstance(widget, QGraphicsView): widget = widget.viewport() event = QMouseEvent(QEvent.MouseButtonRelease, pos, mouse_button, Qt.NoButton, Qt.NoModifier) QApplication.sendEvent(widget, event)
def mouseMove(widget, pos=QPoint(), delay=-1): # pragma: no-cover # Like QTest.mouseMove, but functional without QCursor.setPos if pos.isNull(): pos = widget.rect().center() me = QMouseEvent(QMouseEvent.MouseMove, pos, widget.mapToGlobal(pos), Qt.NoButton, Qt.MouseButtons(0), Qt.NoModifier) if delay > 0: QTest.qWait(delay) QApplication.sendEvent(widget, me)
def _select_data(self): self.widget.select_area( 1, QMouseEvent( QEvent.MouseButtonPress, QPoint(), Qt.LeftButton, Qt.LeftButton, Qt.KeyboardModifiers(), ), ) return [2, 3, 9, 23, 29, 30, 34, 35, 37, 42, 47, 49]
def test_selection_setting(self): widget = self.widget data = Table("iris.tab") self.send_signal(widget.Inputs.data, data) widget.select_area( 1, QMouseEvent(QEvent.MouseButtonPress, QPoint(), Qt.LeftButton, Qt.LeftButton, Qt.KeyboardModifiers())) # Changing the data must reset the selection self.send_signal(widget.Inputs.data, Table("titanic")) self.assertFalse(bool(widget.selection)) self.assertIsNone(self.get_output(widget.Outputs.selected_data)) self.send_signal(widget.Inputs.data, data) self.assertFalse(bool(widget.selection)) self.assertIsNone(self.get_output(widget.Outputs.selected_data)) widget.select_area( 1, QMouseEvent(QEvent.MouseButtonPress, QPoint(), Qt.LeftButton, Qt.LeftButton, Qt.KeyboardModifiers())) settings = self.widget.settingsHandler.pack_data(self.widget) # Setting data to None must reset the selection self.send_signal(widget.Inputs.data, None) self.assertFalse(bool(widget.selection)) self.assertIsNone(self.get_output(widget.Outputs.selected_data)) self.send_signal(widget.Inputs.data, data) self.assertFalse(bool(widget.selection)) self.assertIsNone(self.get_output(widget.Outputs.selected_data)) w = self.create_widget(OWMosaicDisplay, stored_settings=settings) self.assertFalse(bool(widget.selection)) self.send_signal(w.Inputs.data, data, widget=w) self.assertEqual(w.selection, {1}) self.assertIsNotNone(self.get_output(w.Outputs.selected_data, widget=w))
def mouseMove(widget, buttons, modifier=Qt.NoModifier, pos=QPoint(), delay=-1): # type: (QWidget, Qt.MouseButtons, Qt.KeyboardModifier, QPoint, int) -> None """ Like QTest.mouseMove, but with `buttons` and `modifier` parameters. Parameters ---------- widget : QWidget buttons: Qt.MouseButtons modifier : Qt.KeyboardModifiers pos : QPoint delay : int """ if pos.isNull(): pos = widget.rect().center() me = QMouseEvent(QMouseEvent.MouseMove, pos, widget.mapToGlobal(pos), Qt.NoButton, buttons, modifier) if delay > 0: QTest.qWait(delay) QCoreApplication.sendEvent(widget, me)
def test_summary(self): """Check if status bar is updated when data is received""" data, info = Table("iris"), self.widget.info no_input, no_output = "No data on input", "No data on output" self.widget.set_current_tool(self.widget.TOOLS[1][2]) tool = self.widget.current_tool event = QMouseEvent(QEvent.MouseButtonPress, QPointF(0.17, 0.17), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier) tool.mousePressEvent(event) self.assertEqual(info._StateInfo__input_summary.brief, "") self.assertEqual(info._StateInfo__input_summary.details, no_input) output = self.get_output(self.widget.Outputs.data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.data, data) summary, details = f"{len(data)}", format_summary_details(data) self.assertEqual(info._StateInfo__input_summary.brief, summary) self.assertEqual(info._StateInfo__input_summary.details, details) output = self.get_output(self.widget.Outputs.data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.send_signal(self.widget.Inputs.data, None) self.assertEqual(info._StateInfo__input_summary.brief, "") self.assertEqual(info._StateInfo__input_summary.details, no_input) output = self.get_output(self.widget.Outputs.data) summary, details = f"{len(output)}", format_summary_details(output) self.assertEqual(info._StateInfo__output_summary.brief, summary) self.assertEqual(info._StateInfo__output_summary.details, details) self.widget.set_current_tool(self.widget.TOOLS[5][2]) self.assertEqual(info._StateInfo__output_summary.brief, "") self.assertEqual(info._StateInfo__output_summary.details, no_output)
def mousePressEvent(self, event: QMouseEvent) -> None: self.__mouseDown = event.button() == Qt.LeftButton super().mousePressEvent(event)
def _mouse_button_press_event(self): return QMouseEvent(QEvent.MouseButtonPress, QPoint(100, 10), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)