def __init__(self, parent_window): super(MainProjectWidget, self).__init__(parent_window) self.layout = QHBoxLayout() self.proj_win = parent_window self.fileshown = None self.current_file_view = None self.contentbox = QWidget() self.contentbox.setLayout(QVBoxLayout()) self.tabs = FileViewTabNotebook(self.proj_win) self.tabs.currentChanged.connect( self.active_tab_changed) self.layout.addWidget(self.tabs, 1) self.add_dock("filelist", ProjectFileListWidget(self, self.proj_win.project, self.open_and_show_file_through_filelist, self.dock_closed_or_opened)) self.layout.setContentsMargins(0, 0, 0, 0) centralwidget = QWidget() centralwidget.setLayout(self.layout) super(MainProjectWidget, self).setCentralWidget(centralwidget)
class MainProjectWidget(QMainWindow): """ This is the main content area widget of the ProjectWindow if a project is loaded. (Otherwise, the welcome widget would be shown) This is NOT intended as a standalone main window as the parent class QMainWindow might suggest. The owning window would typically be a project window. It contains the whole content area consisting of a central tabbed file view, and all the dockables around it (e.g. project file list). """ dockables = [] tabs = [] def __init__(self, parent_window): super(MainProjectWidget, self).__init__(parent_window) self.layout = QHBoxLayout() self.proj_win = parent_window self.fileshown = None self.current_file_view = None self.contentbox = QWidget() self.contentbox.setLayout(QVBoxLayout()) self.tabs = FileViewTabNotebook(self.proj_win) self.tabs.currentChanged.connect( self.active_tab_changed) self.layout.addWidget(self.tabs, 1) self.add_dock("filelist", ProjectFileListWidget(self, self.proj_win.project, self.open_and_show_file_through_filelist, self.dock_closed_or_opened)) self.layout.setContentsMargins(0, 0, 0, 0) centralwidget = QWidget() centralwidget.setLayout(self.layout) super(MainProjectWidget, self).setCentralWidget(centralwidget) def active_tab_changed(self, index): active_tab = self.tabs.get_active_tab() if not active_tab is None: self.current_file_view = active_tab.view() self.fileshown = active_tab.view().filename self.proj_win.project_change_notify() return self.current_file_view = None self.fileshown = None self.proj_win.project_change_notify() def default_file_view_category(self, filename): return "all" def open_and_show_file(self, file): self.open_and_show_file_with_category(\ self.default_file_view_category(), file) def dock_closed_or_opened(self): """ Inform main window that a dock closed or opened """ self.proj_win.update_window_menu() def open_and_show_file_through_filelist(self, filelist, file): category = self.default_file_view_category(file) self.open_and_show_file_with_view_category(category, file) def open_and_show_file_with_view_category(self, category, file): if category == "all": self.add_file_with_view(file, "properties", GenericInfoView(self.proj_win.project, file)) else: return self.proj_win.project_change_notify() def add_dock(self, name, widget, default_dir="right"): self.dockables.append((name, widget)) if default_dir == "right": self.addDockWidget(Qt.RightDockWidgetArea, widget) def update_file_list(self): for dockable in self.dockables: if dockable[0] == "filelist": dockable[1].update_file_list() def isFileShown(self): return (self.fileshown != None) def add_file_with_view(self, filename, view_type, view): self.current_file_view = view view.active_widget_changed = lambda widget: self.\ proj_win.copy_paste_widget_focus(widget) self.fileshown = filename tabindex = None if view_type != "properties": tabindex = self.tabs.add_as_tab(filename, view) else: tabindex = self.tabs.add_as_tab(filename, view, \ "fileview_properties_title") self.tabs.update_tab_titles() self.active_tab_changed(tabindex) def update_language(self): for dockable in self.dockables: if hasattr(dockable[1], "update_language"): dockable[1].update_language() self.tabs.update_language() def toggle_dock_visible(self, dock_name): if self.is_dock_visible(dock_name): self.set_dock_visible(dock_name, False) else: self.set_dock_visible(dock_name, True) def is_dock_visible(self, dock_name): for dockable in self.dockables: if dockable[0] == dock_name: is_visible = dockable[1].isVisible() return is_visible return False def set_dock_visible(self, dock_name, visible): for dockable in self.dockables: if dockable[0] == dock_name: dockable[1].setVisible(visible)