class MainWindowUI(object): def setup_ui(self, MainWin): # Main Window MainWin.setObjectName("MainWindow") MainWin.setWindowTitle(MainWin.tr("BDBag")) MainWin.resize(680, 600) self.centralWidget = QWidget(MainWin) self.centralWidget.setObjectName("centralWidget") MainWin.setCentralWidget(self.centralWidget) self.verticalLayout = QVBoxLayout(self.centralWidget) self.verticalLayout.setContentsMargins(11, 11, 11, 11) self.verticalLayout.setSpacing(6) self.verticalLayout.setObjectName("verticalLayout") # Actions # Create/Update self.actionCreateOrUpdate = QAction(MainWin) self.actionCreateOrUpdate.setObjectName("actionCreateOrUpdate") # Revert self.actionRevert = QAction(MainWin) self.actionRevert.setObjectName("actionRevert") self.actionRevert.setText(MainWin.tr("Revert")) self.actionRevert.setToolTip( MainWin.tr("Revert a bag directory back to a normal directory.")) self.actionRevert.setShortcut(MainWin.tr("Ctrl+R")) # Validate Fast self.actionValidateFast = QAction(MainWin) self.actionValidateFast.setObjectName("actionValidateFast") self.actionValidateFast.setText(MainWin.tr("Validate: Fast")) self.actionValidateFast.setToolTip( MainWin. tr("Perform fast validation by checking the payload file counts and sizes against the Payload-0xum " "value from the bag manifest")) self.actionValidateFast.setShortcut(MainWin.tr("Ctrl+F")) # Validate Full self.actionValidateFull = QAction(MainWin) self.actionValidateFull.setObjectName("actionValidateFull") self.actionValidateFull.setText(MainWin.tr("Validate: Full")) self.actionValidateFull.setToolTip( MainWin. tr("Perform full validation by calculating checksums for all files and comparing them against " "entries in the bag manifest(s)")) self.actionValidateFull.setShortcut(MainWin.tr("Ctrl+V")) # Fetch Missing self.actionFetchMissing = QAction(MainWin) self.actionFetchMissing.setObjectName("actionFetchMissing") self.actionFetchMissing.setText(MainWin.tr("Fetch: Missing")) self.actionFetchMissing.setToolTip( MainWin. tr("Fetch only those remote files that are not already present in the bag" )) self.actionFetchMissing.setShortcut(MainWin.tr("Ctrl+M")) # Fetch All self.actionFetchAll = QAction(MainWin) self.actionFetchAll.setObjectName("actionFetchAll") self.actionFetchAll.setText(MainWin.tr("Fetch: All")) self.actionFetchAll.setToolTip( MainWin. tr("Fetch all remote files, even if they are already present in the bag" )) self.actionFetchAll.setShortcut(MainWin.tr("Ctrl+A")) # Archive ZIP self.actionArchiveZIP = QAction(MainWin) self.actionArchiveZIP.setObjectName("actionArchiveZIP") self.actionArchiveZIP.setText(MainWin.tr("Archive: ZIP")) self.actionArchiveZIP.setToolTip( MainWin.tr("Create a ZIP format archive of the bag.")) self.actionArchiveZIP.setShortcut(MainWin.tr("Ctrl+Z")) # Archive TGZ self.actionArchiveTGZ = QAction(MainWin) self.actionArchiveTGZ.setObjectName("actionArchiveTGZ") self.actionArchiveTGZ.setText(MainWin.tr("Archive: TGZ")) self.actionArchiveTGZ.setToolTip( MainWin.tr("Create a TAR/GZIP format archive of the bag.")) self.actionArchiveTGZ.setShortcut(MainWin.tr("Ctrl+T")) # Options self.actionOptions = QAction(MainWin) self.actionOptions.setObjectName("actionOptions") self.actionOptions.setText(MainWin.tr("Options")) self.actionOptions.setToolTip(MainWin.tr("Configuration options.")) self.actionOptions.setShortcut(MainWin.tr("Ctrl+O")) # Cancel self.actionCancel = QAction(MainWin) self.actionCancel.setObjectName("actionCancel") self.actionCancel.setText(MainWin.tr("Cancel")) self.actionCancel.setToolTip( MainWin.tr("Cancel the current background task.")) self.actionCancel.setShortcut(MainWin.tr("Ctrl+C")) # About self.actionAbout = QAction(MainWin) self.actionAbout.setObjectName("actionAbout") self.actionAbout.setText(MainWin.tr("About")) self.actionAbout.setToolTip(MainWin.tr("Show version information.")) self.actionAbout.setShortcut(MainWin.tr("Ctrl+B")) # Tree View self.treeView = QTreeView(self.centralWidget) self.treeView.setObjectName("treeView") self.treeView.setStyleSheet(""" QTreeView { border: 2px solid grey; border-radius: 5px; } """) self.verticalLayout.addWidget(self.treeView) # Log Widget self.logTextBrowser = log_widget.QPlainTextEditLogger( self.centralWidget) self.logTextBrowser.widget.setObjectName("logTextBrowser") self.logTextBrowser.widget.setStyleSheet(""" QPlainTextEdit { border: 2px solid grey; border-radius: 5px; background-color: lightgray; } """) self.verticalLayout.addWidget(self.logTextBrowser.widget) # Menu Bar self.menuBar = QMenuBar(MainWin) self.menuBar.setObjectName("menuBar") MainWin.setMenuBar(self.menuBar) # Bag Menu self.menuBag = QMenu(self.menuBar) self.menuBag.setObjectName("menuBag") self.menuBag.setTitle(MainWin.tr("Bag")) self.menuBar.addAction(self.menuBag.menuAction()) self.menuBag.addAction(self.actionCreateOrUpdate) self.menuBag.addAction(self.actionRevert) self.menuBag.addAction(self.actionCancel) self.menuBag.addAction(self.actionOptions) # Fetch Menu self.menuFetch = QMenu(self.menuBag) self.menuFetch.setObjectName("menuFetch") self.menuFetch.setTitle(MainWin.tr("Fetch")) self.menuFetch.addAction(self.actionFetchMissing) self.menuFetch.addAction(self.actionFetchAll) self.menuBag.addAction(self.menuFetch.menuAction()) # Validate Menu self.menuValidate = QMenu(self.menuBag) self.menuValidate.setObjectName("menuValidate") self.menuValidate.setTitle(MainWin.tr("Validate")) self.menuValidate.addAction(self.actionValidateFast) self.menuValidate.addAction(self.actionValidateFull) self.menuBag.addAction(self.menuValidate.menuAction()) # Archive Menu self.menuArchive = QMenu(self.menuBag) self.menuArchive.setObjectName("menuArchive") self.menuArchive.setTitle(MainWin.tr("Archive")) self.menuArchive.addAction(self.actionArchiveZIP) self.menuArchive.addAction(self.actionArchiveTGZ) self.menuBag.addAction(self.menuArchive.menuAction()) # Help Menu self.menuHelp = QMenu(self.menuBar) self.menuHelp.setObjectName("menuHelp") self.menuHelp.setTitle(MainWin.tr("Help")) self.menuHelp.addAction(self.actionAbout) self.menuBar.addAction(self.menuHelp.menuAction()) # Tool Bar self.mainToolBar = QToolBar(MainWin) self.mainToolBar.setObjectName("mainToolBar") self.mainToolBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) MainWin.addToolBar(Qt.TopToolBarArea, self.mainToolBar) # Create/Update self.mainToolBar.addAction(self.actionCreateOrUpdate) self.actionCreateOrUpdate.setIcon( self.actionCreateOrUpdate.parentWidget().style().standardIcon( getattr(QStyle, "SP_FileDialogNewFolder"))) # Revert self.mainToolBar.addAction(self.actionRevert) self.actionRevert.setIcon( self.actionRevert.parentWidget().style().standardIcon( getattr(QStyle, "SP_DialogOkButton"))) # Fetch self.mainToolBar.addAction(self.actionFetchMissing) self.actionFetchMissing.setIcon( self.actionFetchMissing.parentWidget().style().standardIcon( getattr(QStyle, "SP_ArrowDown"))) self.mainToolBar.addAction(self.actionFetchAll) self.actionFetchAll.setIcon( self.actionFetchAll.parentWidget().style().standardIcon( getattr(QStyle, "SP_ArrowDown"))) # Validate self.mainToolBar.addAction(self.actionValidateFast) self.actionValidateFast.setIcon( self.actionValidateFast.parentWidget().style().standardIcon( getattr(QStyle, "SP_DialogApplyButton"))) self.mainToolBar.addAction(self.actionValidateFull) self.actionValidateFull.setIcon( self.actionValidateFull.parentWidget().style().standardIcon( getattr(QStyle, "SP_DialogApplyButton"))) # Archive self.mainToolBar.addAction(self.actionArchiveZIP) self.actionArchiveZIP.setIcon( self.actionArchiveZIP.parentWidget().style().standardIcon( getattr(QStyle, "SP_DialogSaveButton"))) self.mainToolBar.addAction(self.actionArchiveTGZ) self.actionArchiveTGZ.setIcon( self.actionArchiveTGZ.parentWidget().style().standardIcon( getattr(QStyle, "SP_DialogSaveButton"))) # Options self.mainToolBar.addAction(self.actionOptions) self.actionOptions.setIcon( self.actionOptions.parentWidget().style().standardIcon( getattr(QStyle, "SP_FileDialogDetailedView"))) # Cancel self.mainToolBar.addAction(self.actionCancel) self.actionCancel.setIcon( self.actionCancel.parentWidget().style().standardIcon( getattr(QStyle, "SP_BrowserStop"))) # Status Bar self.statusBar = QStatusBar(MainWin) self.statusBar.setToolTip("") self.statusBar.setStatusTip("") self.statusBar.setObjectName("statusBar") MainWin.setStatusBar(self.statusBar) # Progress Bar self.progressBar = QProgressBar(self.centralWidget) self.progressBar.setValue(0) self.progressBar.setTextVisible(False) self.progressBar.setObjectName("progressBar") self.progressBar.setStyleSheet(""" QProgressBar { border: 2px solid grey; border-radius: 5px; text-align: center; } QProgressBar::chunk { background-color: darkblue; width: 10px; margin: 0.5px; } """) self.verticalLayout.addWidget(self.progressBar) # finalize UI setup self.toggleCreateOrUpdate(MainWin) QMetaObject.connectSlotsByName(MainWin) def toggleCreateOrUpdate(self, MainWin): if MainWin.isBag: self.actionCreateOrUpdate.setText(MainWin.tr("Update")) self.actionCreateOrUpdate.setToolTip( MainWin.tr("Update a bag in an existing directory")) self.actionCreateOrUpdate.setShortcut(MainWin.tr("Ctrl+U")) else: self.actionCreateOrUpdate.setText(MainWin.tr("Create")) self.actionCreateOrUpdate.setToolTip( MainWin.tr("Create a new bag from an existing directory")) self.actionCreateOrUpdate.setShortcut(MainWin.tr("Ctrl+N"))