def __init__(self, widget: QWidget, buttonText: str, parent=None): """ Constructs a widget that lets the passed ``widget`` keep an internal collapsed state that can be triggered when a button is clicked. Internally, when the button is clicked, a toggled signal is emitted, indicating what the collapse state has been toggled to. Additionally, this signal is connected to the collapse() slot, which will collapse the passed widget if another widget has been added via addWidget(). The widget added via addWidget() is not collapsible. Parameters ---------- widget The widget to make collapsible. buttonText The text of the button that will be used to collapse. parent The parent widget. """ super(CollapsibleWidget, self).__init__(parent) self.widget = widget self.buttonText = buttonText self.collapsed = False toolBar = QToolBar() action = toolBar.addAction(self.buttonText, self.toggle) action.setIconText("&" + action.text()) self.collapseButton = toolBar.widgetForAction(action) self.collapseButton.setCheckable(True) self.collapseButton.setChecked(not self.collapsed) self.splitter = QSplitter(Qt.Horizontal) self.splitter.addWidget(self.widget) self.splitter.setCollapsible(0, self.collapsed) # Keep track of the collapsed widget's size to restore properly when un-collapsed self.widgetSize = self.splitter.sizes()[0] layout = QGridLayout() layout.addWidget(self.splitter, 0, 0) layout.addWidget(toolBar, 1, 0) self.setLayout(layout) self.toggled.connect(self.collapse)
def __init__(self, name, settings): super(Project, self).__init__() self._name = name # --- setup the splitter --- self._splitter = QSplitter() self._splitter.setContentsMargins(0, 0, 0, 0) self._splitter.setOrientation(Qt.Vertical) self._set_closeing_disabled(True) # --- setup the project buttons --- tool_bar = QToolBar() add_root_action = QAction('Add Root', self) tool_bar.addAction(add_root_action) tool_bar.widgetForAction(add_root_action).setObjectName('add_root') add_root_action.triggered.connect(lambda checked: self.add_root()) open_trash_action = QAction('Open Trash', self) tool_bar.addAction(open_trash_action) tool_bar.widgetForAction(open_trash_action).setObjectName('open_trash') open_trash_action.triggered.connect(self.open_trash) save_action = QAction('Save Project', self) tool_bar.addAction(save_action) tool_bar.widgetForAction(save_action).setObjectName('save_project') save_action.triggered.connect(self.save) # --- setup the layout --- main_layout = QVBoxLayout() main_layout.setSpacing(0) main_layout.setContentsMargins(4, 2, 4, 0) main_layout.addWidget(self._splitter) main_layout.addWidget(tool_bar) self.setLayout(main_layout) self._settings = None self.update_settings(settings)
def __init__(self, settings, path=None): super(RootWidget, self).__init__() # --- setup the file system model --- model = QFileSystemModel() model.setRootPath('This PC') model.setReadOnly(False) model.setIconProvider( JSONFileIconProvider('file_view_icons.json') ) model.setFilter( QDir.AllEntries | QDir.NoDotAndDotDot | QDir.AllDirs | QDir.Hidden ) self._model = FileSystemProxyModel() self._model.setSourceModel(model) # --- setup the tree view --- self._view = QTreeView() self._view.setModel(self._model) self._view.setSelectionMode(QTreeView.ExtendedSelection) self._view.activated.connect(self._handle_activated_index) self._view.setSortingEnabled(True) self._view.setHeaderHidden(True) self._view.setExpandsOnDoubleClick(False) self._view.sortByColumn(0, Qt.AscendingOrder) # Setup drag and drop. self._view.setDragDropMode(QTreeView.DragDrop) self._view.setDefaultDropAction(Qt.MoveAction) # Setup the columns that show. self._view.hideColumn(1) self._view.hideColumn(2) self._view.hideColumn(3) # Note that the double click trigger cannot be in this list, otherwise it flashes in edit # mode before opening the file self._view.setEditTriggers( QTreeView.SelectedClicked | QTreeView.EditKeyPressed) # setup the context menu self._view.setContextMenuPolicy(Qt.CustomContextMenu) self._view.customContextMenuRequested.connect(self._context_menu) # Unselect items on collapse. self._view.collapsed.connect(self._view.clearSelection) # --- setup the current root path label --- self._root_edit = PathEdit() self._root_edit.new_path.connect(self._set_root_path) # --- setup the tool bar --- tool_bar = QToolBar() new_file_action = QAction('New File', self) tool_bar.addAction(new_file_action) tool_bar.widgetForAction(new_file_action).setObjectName('new_file') new_file_action.triggered.connect(self._create_file) new_directory_action = QAction('New Directory', self) tool_bar.addAction(new_directory_action) tool_bar.widgetForAction(new_directory_action).setObjectName('new_directory') new_directory_action.triggered.connect(self._create_directory) close_action = QAction('Close', self) tool_bar.addAction(close_action) self._close_widget = tool_bar.widgetForAction(close_action) self._close_widget.setObjectName('close_root') close_action.triggered.connect(self.close_request.emit) # --- setup the layout --- main_layout = QVBoxLayout() main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setSpacing(0) path_layout = QHBoxLayout() path_layout.setContentsMargins(0, 0, 0, 0) main_layout.setSpacing(0) path_layout.addWidget(self._root_edit) path_layout.addWidget(tool_bar) main_layout.addLayout(path_layout) main_layout.addWidget(self._view) self.setLayout(main_layout) if path is not None: self._set_root_path(path) self._root_edit.update(path) self._settings = None self.update_settings(settings)