def mouseMoveEvent(self, event): """Override Qt method""" # FIXME: This was added by Pierre presumably to move tabs # between plugins, but righit now it's breaking the regular # Qt drag behavior for tabs, so we're commenting it for # now #if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \ # (event.pos() - self.__drag_start_pos).manhattanLength() > \ # QApplication.startDragDistance(): # drag = QDrag(self) # mimeData = QMimeData()# # ancestor_id = to_text_string(id(self.ancestor)) # parent_widget_id = to_text_string(id(self.parentWidget())) # self_id = to_text_string(id(self)) # source_index = to_text_string(self.tabAt(self.__drag_start_pos)) # mimeData.setData("parent-id", to_binary_string(ancestor_id)) # mimeData.setData("tabwidget-id", # to_binary_string(parent_widget_id)) # mimeData.setData("tabbar-id", to_binary_string(self_id)) # mimeData.setData("source-index", to_binary_string(source_index)) # drag.setMimeData(mimeData) # drag.exec_() QTabBar.mouseMoveEvent(self, event)
def __init__(self, parent, ancestor, rename_tabs=False, split_char='', split_index=0): QTabBar.__init__(self, parent) self.ancestor = ancestor # To style tabs on Mac if sys.platform == 'darwin': self.setObjectName('plugin-tab') # Dragging tabs self.__drag_start_pos = QPoint() self.setAcceptDrops(True) self.setUsesScrollButtons(True) self.setMovable(True) # Tab name editor self.rename_tabs = rename_tabs if self.rename_tabs: # Creates tab name editor self.tab_name_editor = EditTabNamePopup(self, split_char, split_index) else: self.tab_name_editor = None
def dragEnterEvent(self, event): """Override Qt method""" mimeData = event.mimeData() formats = list(mimeData.formats()) if "parent-id" in formats and mimeData.data("parent-id").toLong()[0] == id(self.ancestor): event.acceptProposedAction() QTabBar.dragEnterEvent(self, event)
def mouseMoveEvent(self, event): """Override Qt method""" if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \ (event.pos() - self.__drag_start_pos).manhattanLength() > \ QApplication.startDragDistance(): drag = QDrag(self) mimeData = QMimeData() # Converting id's to long to avoid an OverflowError with PySide if PY2: ancestor_id = long(id(self.ancestor)) parent_widget_id = long(id(self.parentWidget())) self_id = long(id(self)) else: ancestor_id = id(self.ancestor) parent_widget_id = id(self.parentWidget()) self_id = id(self) mimeData.setData("parent-id", QByteArray.number(ancestor_id)) mimeData.setData("tabwidget-id", QByteArray.number(parent_widget_id)) mimeData.setData("tabbar-id", QByteArray.number(self_id)) mimeData.setData("source-index", QByteArray.number(self.tabAt(self.__drag_start_pos))) drag.setMimeData(mimeData) drag.exec_() QTabBar.mouseMoveEvent(self, event)
def mouseMoveEvent(self, event): """Override Qt method""" if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \ (event.pos() - self.__drag_start_pos).manhattanLength() > \ QApplication.startDragDistance(): drag = QDrag(self) mimeData = QMimeData() # Converting id's to long to avoid an OverflowError with PySide if PY2: ancestor_id = long(id(self.ancestor)) parent_widget_id = long(id(self.parentWidget())) self_id = long(id(self)) else: ancestor_id = id(self.ancestor) parent_widget_id = id(self.parentWidget()) self_id = id(self) mimeData.setData("parent-id", QByteArray.number(ancestor_id)) mimeData.setData("tabwidget-id", QByteArray.number(parent_widget_id)) mimeData.setData("tabbar-id", QByteArray.number(self_id)) mimeData.setData( "source-index", QByteArray.number(self.tabAt(self.__drag_start_pos))) drag.setMimeData(mimeData) drag.exec_() QTabBar.mouseMoveEvent(self, event)
def dragEnterEvent(self, event): """Override Qt method""" mimeData = event.mimeData() formats = list(mimeData.formats()) if "parent-id" in formats and \ mimeData.data("parent-id").toLong()[0] == id(self.ancestor): event.acceptProposedAction() QTabBar.dragEnterEvent(self, event)
def __init__(self, parent=None): """.""" QTabBar.__init__(self, parent) self.setAcceptDrops(True) self.setToolTip('Double click to detach Tab.') self.setElideMode(Qt.ElideRight) self.setSelectionBehaviorOnRemove(QTabBar.SelectLeftTab) self.mouseCursor = QCursor()
def __init__(self, parent, ancestor): QTabBar.__init__(self, parent) self.ancestor = ancestor # To style tabs on Mac if sys.platform == 'darwin': self.setObjectName('plugin-tab') # Dragging tabs self.__drag_start_pos = QPoint() self.setAcceptDrops(True)
def __init__(self, parent, ancestor): QTabBar.__init__(self, parent) self.ancestor = ancestor # To style tabs on Mac if sys.platform == "darwin": self.setObjectName("plugin-tab") # Dragging tabs self.__drag_start_pos = QPoint() self.setAcceptDrops(True) self.setUsesScrollButtons(True)
def mouseDoubleClickEvent(self, event): """Override Qt method to trigger the tab name editor.""" if self.rename_tabs is True and \ event.buttons() == Qt.MouseButtons(Qt.LeftButton): # Tab index index = self.tabAt(event.pos()) if index >= 0: # Tab is valid, call tab name editor self.tab_name_editor.edit_tab(index) else: # Event is not interesting, raise to parent QTabBar.mouseDoubleClickEvent(self, event)
def dropEvent(self, event): """Override Qt method""" mimeData = event.mimeData() index_from = int(mimeData.data("source-index")) index_to = self.tabAt(event.pos()) if index_to == -1: index_to = self.count() if int(mimeData.data("tabbar-id")) != id(self): tabwidget_from = to_text_string(mimeData.data("tabwidget-id")) # We pass self object ID as a QString, because otherwise it would # depend on the platform: long for 64bit, int for 32bit. Replacing # by long all the time is not working on some 32bit platforms. # See spyder-ide/spyder#1094 and spyder-ide/spyder#1098. self.sig_move_tab[(str, int, int)].emit(tabwidget_from, index_from, index_to) event.acceptProposedAction() elif index_from != index_to: self.sig_move_tab.emit(index_from, index_to) event.acceptProposedAction() QTabBar.dropEvent(self, event)
def dropEvent(self, event): """Override Qt method""" mimeData = event.mimeData() index_from = int(mimeData.data("source-index")) index_to = self.tabAt(event.pos()) if index_to == -1: index_to = self.count() if int(mimeData.data("tabbar-id")) != id(self): tabwidget_from = to_text_string(mimeData.data("tabwidget-id")) # We pass self object ID as a QString, because otherwise it would # depend on the platform: long for 64bit, int for 32bit. Replacing # by long all the time is not working on some 32bit platforms # (see Issue 1094, Issue 1098) self.sig_move_tab[(str, int, int)].emit(tabwidget_from, index_from, index_to) event.acceptProposedAction() elif index_from != index_to: self.sig_move_tab.emit(index_from, index_to) event.acceptProposedAction() QTabBar.dropEvent(self, event)
def __init__(self, parent, ancestor, rename_tabs=False, split_char='', split_index=0): QTabBar.__init__(self, parent) self.ancestor = ancestor # To style tabs on Mac if sys.platform == 'darwin': self.setObjectName('plugin-tab') # Dragging tabs self.__drag_start_pos = QPoint() self.setAcceptDrops(True) self.setUsesScrollButtons(True) # Tab name editor self.rename_tabs = rename_tabs if self.rename_tabs: # Creates tab name editor self.tab_name_editor = EditTabNamePopup(self, split_char, split_index) else: self.tab_name_editor = None
def mouseMoveEvent(self, event): """Override Qt method""" if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \ (event.pos() - self.__drag_start_pos).manhattanLength() > \ QApplication.startDragDistance(): drag = QDrag(self) mimeData = QMimeData() ancestor_id = to_text_string(id(self.ancestor)) parent_widget_id = to_text_string(id(self.parentWidget())) self_id = to_text_string(id(self)) source_index = to_text_string(self.tabAt(self.__drag_start_pos)) mimeData.setData("parent-id", to_binary_string(ancestor_id)) mimeData.setData("tabwidget-id", to_binary_string(parent_widget_id)) mimeData.setData("tabbar-id", to_binary_string(self_id)) mimeData.setData("source-index", to_binary_string(source_index)) drag.setMimeData(mimeData) drag.exec_() QTabBar.mouseMoveEvent(self, event)
def __init__(self, parent=None): super(AxesTabWidgetView, self).__init__(parent=parent) self.ui = load_ui(__file__, 'axes_tab_widget.ui', baseinstance=self) self.color_selector_widget = ColorSelector(parent=self) self.color_selector_layout.replaceWidget(self.color_selector_dummy_widget, self.color_selector_widget) self.setAttribute(Qt.WA_DeleteOnClose, True) # QTabBar cannot be created in QTDesigner # QTabWidget not suitable because we reuse controls for each axis self.axis_tab_bar = QTabBar(parent=self) self.x_tab = self.axis_tab_bar.addTab("x") self.y_tab = self.axis_tab_bar.addTab("y") self.z_tab = self.axis_tab_bar.addTab("z") self.axis_tab_bar_layout.replaceWidget(self.dummy_axis_tab_bar, self.axis_tab_bar) self.lower_limit_validator = LineEditDoubleValidator(self.lower_limit_line_edit, 0.0) self.upper_limit_validator = LineEditDoubleValidator(self.upper_limit_line_edit, 1.0) self.lower_limit_line_edit.setValidator(self.lower_limit_validator) self.upper_limit_line_edit.setValidator(self.upper_limit_validator)
def mousePressEvent(self, event): """Reimplement Qt method""" if event.button() == Qt.LeftButton: self.__drag_start_pos = QPoint(event.pos()) QTabBar.mousePressEvent(self, event)
def sizeHint(self): """Return the size of the TabBar with increased width for the plus button.""" sizeHint = QTabBar.sizeHint(self) width = sizeHint.width() height = sizeHint.height() return QSize(width+25, height)
class AxesTabWidgetView(QWidget): def __init__(self, parent=None): super(AxesTabWidgetView, self).__init__(parent=parent) self.ui = load_ui(__file__, 'axes_tab_widget.ui', baseinstance=self) self.color_selector_widget = ColorSelector(parent=self) self.color_selector_layout.replaceWidget(self.color_selector_dummy_widget, self.color_selector_widget) self.setAttribute(Qt.WA_DeleteOnClose, True) # QTabBar cannot be created in QTDesigner # QTabWidget not suitable because we reuse controls for each axis self.axis_tab_bar = QTabBar(parent=self) self.x_tab = self.axis_tab_bar.addTab("x") self.y_tab = self.axis_tab_bar.addTab("y") self.z_tab = self.axis_tab_bar.addTab("z") self.axis_tab_bar_layout.replaceWidget(self.dummy_axis_tab_bar, self.axis_tab_bar) self.lower_limit_validator = LineEditDoubleValidator(self.lower_limit_line_edit, 0.0) self.upper_limit_validator = LineEditDoubleValidator(self.upper_limit_line_edit, 1.0) self.lower_limit_line_edit.setValidator(self.lower_limit_validator) self.upper_limit_line_edit.setValidator(self.upper_limit_validator) def populate_select_axes_combo_box(self, axes_names): self.select_axes_combo_box.addItems(axes_names) def set_selected_axes_selector_text(self, new_text): """Replace the text of the selected item in the combo box""" current_index = self.select_axes_combo_box.currentIndex() self.select_axes_combo_box.setItemText(current_index, new_text) def get_selected_ax_name(self): return self.select_axes_combo_box.currentText() def get_properties(self): return AxProperties.from_view(self) def get_title(self): return self.axes_title_line_edit.text() def set_title(self, title): self.axes_title_line_edit.setText(title) def get_show_minor_ticks(self): return self.show_minor_ticks_check_box.isChecked() def set_show_minor_ticks(self, check): self.show_minor_ticks_check_box.setChecked(check) def get_show_minor_gridlines(self): return self.show_minor_gridlines_check_box.isChecked() def set_show_minor_gridlines(self, check): self.show_minor_gridlines_check_box.setChecked(check) def set_minor_grid_tick_controls_visible(self, visible): self.show_minor_gridlines_check_box.setVisible(visible) self.show_minor_ticks_check_box.setVisible(visible) def set_minor_gridlines_check_box_enabled(self, enabled): self.show_minor_gridlines_check_box.setEnabled(enabled) def get_lower_limit(self): return float(self.lower_limit_line_edit.text()) def get_upper_limit(self): return float(self.upper_limit_line_edit.text()) def get_label(self): return self.label_line_edit.text() def get_scale(self): return self.scale_combo_box.currentText() def get_canvas_color(self): return self.color_selector_widget.get_color() def get_autoscale_enabled(self): return self.autoscale.isChecked() def get_z_axis_selector_checked(self): return self.axis_tab_bar.currentIndex() == 2 def set_lower_limit(self, limit): self.lower_limit_validator.last_valid_value = str(limit) self.lower_limit_line_edit.setText(str(limit)) def set_upper_limit(self, limit): self.upper_limit_validator.last_valid_value = str(limit) self.upper_limit_line_edit.setText(str(limit)) def set_label(self, label): self.label_line_edit.setText(label) def set_scale(self, scale): self.scale_combo_box.setCurrentText(scale.title()) def set_canvas_color(self, color_hex): self.color_selector_widget.set_color(color_hex) def set_autoscale_enabled(self, enabled): self.autoscale.setChecked(enabled) def set_limit_input_enabled(self, enabled): self.lower_limit_line_edit.setEnabled(enabled) self.upper_limit_line_edit.setEnabled(enabled) def set_z_axis_selector_enabled(self, enabled): self.axis_tab_bar.setTabEnabled(2, enabled) def set_x_axis_selector_click(self): self.axis_tab_bar.setCurrentIndex(0) def set_scale_combo_box_enabled(self, eneabled): self.scale_combo_box.setEnabled(eneabled) def get_axis(self): return "xyz"[self.axis_tab_bar.currentIndex()]
def sizeHint(self): """Return the size of the TabBar with increased width for the plus button.""" sizeHint = QTabBar.sizeHint(self) width = sizeHint.width() height = sizeHint.height() return QSize(width + 25, height)