# 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())