# Authors: Amaury Medeiros and Paulo Ouriques # Software License: GPL import os from functools import partial from PyQt4.QtCore import * from PyQt4.QtGui import * from ui.pcsdevicewidget import PcsDeviceWidget from ui.pcsuiutils import * from pcsbackupmanagerui import * from pcsrestorebackupui import * from style.styleTabletSuite import * class PcsOpenFileWizard(QWizardPage): _home_dir = os.path.expanduser("~") _default_dir = _home_dir + "/.pcsuite/Backup" def __init__(self, deviceInfo, windowManager, parent = None): QWizardPage.__init__(self, parent) self.path = self._default_dir self.file_name = "Backup" self.deviceInfo = deviceInfo self.windowManager = windowManager self.layout = QVBoxLayout() self.layout.setMargin(0) self.hLayout = QHBoxLayout() self.hLayout.setMargin(0) self.vLayout = QVBoxLayout() self.vLayout.setMargin(0) wayLayout = self._wayLayout() buttonLayout = self._menuButtons() spc = QSpacerItem(0, 3) self.vLayout.addLayout(buttonLayout, Qt.AlignTop) self.vLayout.addItem(spc) spc = QSpacerItem(0, 12) self.vLayout.addLayout(wayLayout, Qt.AlignTop) self.vLayout.addItem(spc) self.vLayout.addLayout(self._createCenterLayout(), Qt.AlignVCenter) self.vLayout.addItem(spc) spc2 = QSpacerItem(350, 0) self.finishButton = QPushButton("Finish") self.finishButton.setStyleSheet(DEFAULT_BUTTON_STYLE) self.finishButton.setShortcut(Qt.Key_Return) self.hLayout.addItem(spc2) self.hLayout.addWidget(self.finishButton) self.vLayout.addLayout(self.hLayout) self.vLayout.addItem(spc) self.vLayout.addLayout(self._createInformationsLabel(), Qt.AlignVCenter) self.setLayout(self.vLayout) def _menuButtons(self): infList = [("New Backup", SMALL_ICON_NEW_BACKUP_STYLE_SELECTED), ("Manage Backup", SMALL_ICON_MANAGER_BACKUP_STYLE, self._manageDialog), ("Restore Backup", SMALL_ICON_RESTORE_BACKUP_STYLE, self._restoreDialog)] buttonsLayout = QHBoxLayout() buttonsLayout.setMargin(0) for i in range(3): but = QPushButton(infList[i][0]) but.setStyleSheet(infList[i][1]) if i <> 0: buttonsLayout.addWidget(but, Qt.AlignLeft) self.connect(but, SIGNAL("clicked()"), infList[i][2]) else: buttonsLayout.addWidget(but) return buttonsLayout def _wayLayout(self): barLayout = QHBoxLayout() barLayout.setMargin(0) main = QLabel("Main") arrow = self._arrow() arrow2 = self._arrow() arrow3 = self._arrow() spc = QSpacerItem(2, 0) newBackup = QLabel(" New Backup") files = QLabel("Files") folder = QLabel("Folder") widgetList = [main, arrow, newBackup, arrow2, files, arrow3, folder] for widget in widgetList: barLayout.addWidget(widget, Qt.AlignLeft) barLayout.addItem(spc) barLayout.addItem(QSpacerItem(300, 0)) return barLayout def _manageDialog(self): if(self.deviceInfo and self.deviceInfo.ip != None): backupManager = self.windowManager.getBackupManager() centralize(backupManager) backupManager.setGeometry(self.wizard().geometry()) backupManager.show() self.wizard().close() self.close() else: self._showNoDeviceFoundMessage() def _restoreDialog(self): if(self.deviceInfo and self.deviceInfo.ip != None): restoreBackup = self.windowManager.getRestoreBackup() centralize(restoreBackup) restoreBackup.setGeometry(self.wizard().geometry()) restoreBackup.show() self.wizard().close() self.close() else: self._showNoDeviceFoundMessage() def _showNoDeviceFoundMessage(self): inf = QMessageBox(self) inf.setWindowTitle("Connect a device.") inf.setText("No devices were found.") inf.show() def _arrow(self): label = QLabel() label.setPixmap(QPixmap(BLACK_ARROW)) return label def _createDeviceWidget(self): deviceWidget = PcsDeviceWidget(3) deviceWidget.addBorder() deviceWidget.addDeviceName() deviceWidget.setDeviceInfo(self.deviceInfo) return deviceWidget def _createInformationsLabel(self): hLay = QHBoxLayout() spc = QSpacerItem(10, 0) infLabel = QLabel(""\ "Do backup from Device to your PC.") iconAlert = QLabel() iconAlert.setPixmap(QPixmap(ICON_ALERT)) hLay.addItem(spc) hLay.addWidget(iconAlert) hLay.addWidget(infLabel, Qt.AlignLeft) return hLay def _createCenterLayout(self): hLay = QHBoxLayout() hLay.setMargin(0) vLay = QVBoxLayout() vLay.setMargin(0) hLayWithSpacer = QHBoxLayout() hLayWithSpacer.setMargin(0) spc = QSpacerItem(62, 0) deviceWidget = self._createDeviceWidget() arrowLabel = self._createArrowLabel() pcLabel = self._createPcLabel() pathField = self._createPathField() nameField = self._createBackupNameField() hLay.addWidget(deviceWidget, Qt.AlignVCenter) hLay.addLayout(arrowLabel, Qt.AlignVCenter) hLay.addLayout(pcLabel, Qt.AlignVCenter) vLay.addLayout(nameField) vLay.addLayout(hLay) vLay.addLayout(pathField) hLayWithSpacer.addItem(spc) hLayWithSpacer.addLayout(vLay) hLayWithSpacer.addItem(spc) return hLayWithSpacer def _createArrowLabel(self): arrowLayout = QGridLayout() arrowLabel = QLabel() arrowLabel.setPixmap(QPixmap(LARGE_ARROW_IMAGE)) borderArrowLabel = QLabel() borderArrowLabel.setFixedSize(42, 65) borderArrowLabel.setPixmap(QPixmap(LARGE_ARROW_BORDER)) arrowLayout.addWidget(arrowLabel, 0, 0, Qt.AlignCenter) arrowLayout.addWidget(borderArrowLabel, 0, 0, Qt.AlignCenter) return arrowLayout def _createPcLabel(self): gridLay = QGridLayout() pcLabelLayout = QGridLayout() pcLabel = QLabel() pcLabel.setPixmap(QPixmap(PC_IMAGE)) pcBorder = QLabel() pcBorder.setFixedSize(112, 127) pcBorder.setPixmap(QPixmap(PC_BORDER_FILE)) nameLabel = QLabel("PC") nameBorder = QLabel() nameBorder.setPixmap(QPixmap(PC_NAME_BORDER_FILE)) nameBorder.setFixedSize(92, 26) gridLay.addWidget(pcLabel, 0, 0, Qt.AlignCenter) gridLay.addWidget(nameLabel, 1, 0, Qt.AlignCenter) gridLay.addWidget(nameBorder, 1, 0, Qt.AlignCenter) pcLabelLayout.addLayout(gridLay, 0, 0, Qt.AlignCenter) pcLabelLayout.addWidget(pcBorder, 0, 0, Qt.AlignCenter) return pcLabelLayout def _createPathField(self): pathLayout = QHBoxLayout() self.pathField = QLineEdit() self.pathField.setReadOnly(True) self.pathField.setText(self._default_dir) self.pathField.setObjectName("pathField") buttonBrowse = QPushButton() buttonBrowse.setObjectName("buttonBrowse") self.connect(buttonBrowse, SIGNAL("clicked()"), self._openFileDialog) pathLayout.addWidget(self.pathField) pathLayout.addWidget(buttonBrowse) borderLabel = QLabel() borderLabel.setPixmap(QPixmap(PATH_BG)) borderLabel.setFixedSize(304, 40) gridLay = QGridLayout() gridLay.addWidget(borderLabel, 0, 0, Qt.AlignCenter) gridLay.addLayout(pathLayout, 0, 0, Qt.AlignCenter) return gridLay def _createBackupNameField(self): label = QLabel("Backup Name:") backupNameLayout = QHBoxLayout() backupNameLayout.addWidget(label) self.backupNameField = QLineEdit() self.backupNameField.setObjectName("backupNameField") self.backupNameField.setText("Backup") backupNameLayout.addWidget(self.backupNameField, Qt.AlignHCenter) borderLabel = QLabel() borderLabel.setPixmap(QPixmap(BACKUP_NAME_BG)) borderLabel.setFixedSize(304, 40) gridLay = QGridLayout() gridLay.addWidget(borderLabel, 0, 0, Qt.AlignCenter) gridLay.addLayout(backupNameLayout, 0, 0, Qt.AlignCenter) return gridLay def _openFileDialog(self): pathDialog = QFileDialog() prompt = "Select the folder you wish to save your backup" self.path = pathDialog.getExistingDirectory(self, prompt, self._default_dir) if self.path != "": self.pathField.setText(self.path) def _resetPage(self): self.path = self._default_dir self.pathField.setText(self._default_dir) self.backupNameField.setText("Backup") def getBackupName(self): return str(self.backupNameField.text()) def getPath(self): return str(self.pathField.text())