# Authors: Amaury Medeiros and Paulo Ouriques
# Software License: GPL
from functools import partial
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from ui.pcsbutton import *
from ui.pcsdevicewidget import PcsDeviceWidget
from ui.pcscustombuttons import PcsCustomButton as customButton
from ui.pcsuiutils import *
from style.styleTabletSuite import *
from pcsbackupmanagerui import *
from pcsrestorebackupui import *
class PcsCheckboxWizard(QWizardPage):
def __init__(self, deviceInfo, windowManager, parent = None):
QWizardPage.__init__(self, parent)
self.deviceInfo = deviceInfo
self.windowManager = windowManager
self.layout = QVBoxLayout()
self.layout.setMargin(0)
self.layout.setSpacing(0)
buttonsLayout = self._menuButtons()
self.layout.addLayout(buttonsLayout)
self.layout.addItem(QSpacerItem(0, 8))
wayLayout = self._wayLayout()
self.layout.addLayout(wayLayout)
self.layout.addItem(QSpacerItem(0, 10))
self.hlayout = QHBoxLayout()
self.hlayout.setMargin(0)
self.vertical = QVBoxLayout()
self.vertical.setMargin(0)
self.vertical.setSpacing(0)
self.create_vertical_components()
self.hlayout.addLayout(self.vertical)
self.hlayout.setMargin(0)
self.hlayout.setSpacing(0)
self.create_checkbox_frame()
# self.hlayout.addItem(QSpacerItem(30, 0))
self.layout.addLayout(self.hlayout)
self.layout.addItem(QSpacerItem(0, 35))
informationLayout = QHBoxLayout()
informationLayout.setMargin(0)
spc = QSpacerItem(10, 0)
iconAlert = QLabel()
iconAlert.setPixmap(QPixmap(ICON_ALERT))
information = QLabel(""\
"Select the types of file you wish to backup.")
informationLayout.addItem(spc)
informationLayout.addWidget(iconAlert)
informationLayout.addWidget(information, Qt.AlignLeft)
self.layout.addLayout(informationLayout)
self.setLayout(self.layout)
self.map_checked = {self.documents.name: False,
self.emails.name: False, self.media.name: False,
self.contacts.name: False,
self.bookmarks.name: False,
self.settings.name: False,
self.applications.name: False}
self.enableNext = QLineEdit()
self.registerField("enableNext*", self.enableNext)
def _wayLayout(self):
barLayout = QHBoxLayout()
barLayout.setMargin(0)
main = QLabel("Main")
arrow = self._arrow()
arrow2 = self._arrow()
spc = QSpacerItem(5, 0)
newBackup = QLabel(" New Backup")
files = QLabel("Files")
widgetList = [main, arrow, newBackup, arrow2, files]
for widget in widgetList:
barLayout.addWidget(widget, Qt.AlignLeft)
barLayout.addItem(spc)
barLayout.addItem(QSpacerItem(300, 0))
return barLayout
def _arrow(self):
label = QLabel()
label.setPixmap(QPixmap(BLACK_ARROW))
return label
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 _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 _goNextPage(self):
if self.empty_map():
return False
else:
self.wizard().next()
def _showNoDeviceFoundMessage(self):
inf = QMessageBox(self)
inf.setWindowTitle("Connect a device.")
inf.setText("No devices were found.")
inf.show()
def create_checkbox_frame(self):
layout = QVBoxLayout()
l = QLabel()
l.setPixmap(QPixmap(COPY_BORDER))
self.frame = QScrollArea(self)
self.frame.setWidgetResizable(True)
widget = QWidget(self.frame)
widget.setStyleSheet("QWidget{background: transparent;}")
self.grid = QGridLayout()
self.grid.setSpacing(0)
self.createCheckboxPanel()
widget.setLayout(self.grid)
self.frame.setWidget(widget)
layout.addItem(QSpacerItem(0,25))
layout.addWidget(self.frame)
self.hlayout.addLayout(layout)
def empty_map(self):
for index in self.map_checked.keys():
if self.map_checked[index]:
return False
return True
def createCheckboxPanel(self):
#Add Checkboxes
# self.add_select_all()
self.add_documents()
self.add_emails()
self.add_media()
self.add_contacts()
self.add_bookmarks()
self.add_settings()
self.add_applications()
# def add_select_all(self):
# self.select_all = QCheckBox("Select All")
# self.connect(self.select_all, SIGNAL("stateChanged(int)"),
# self.select_all_func)
# self.grid.addWidget(self.select_all, 0, 0, Qt.AlignTop)
#
def add_documents(self):
self.documents = QCheckBox("Documents")
self.documents.name = "documents"
callback = partial(self.select_func, self.documents)
self.connect(self.documents, SIGNAL("stateChanged(int)"),
callback)
self.grid.addWidget(self.documents, 1, 0, Qt.AlignTop)
def add_emails(self):
self.emails = QCheckBox("Emails")
self.emails.name = "emails"
callback = partial(self.select_func, self.emails)
self.connect(self.emails, SIGNAL("stateChanged(int)"),
callback)
self.grid.addWidget(self.emails, 2, 0, Qt.AlignTop)
def add_media(self):
self.media = QCheckBox("Media")
self.media.name = "media"
callback = partial(self.select_func, self.media)
self.connect(self.media, SIGNAL("stateChanged(int)"),
callback)
self.grid.addWidget(self.media, 3, 0, Qt.AlignTop)
def add_contacts(self):
self.contacts = QCheckBox("Contacts")
self.contacts.name = "contacts"
callback = partial(self.select_func, self.contacts)
self.connect(self.contacts, SIGNAL("stateChanged(int)"),
callback)
self.grid.addWidget(self.contacts, 4, 0, Qt.AlignTop)
def add_bookmarks(self):
self.bookmarks = QCheckBox("Bookmarks")
self.bookmarks.name = "bookmarks"
callback = partial(self.select_func, self.bookmarks)
self.connect(self.bookmarks, SIGNAL("stateChanged(int)"),
callback)
self.grid.addWidget(self.bookmarks, 5, 0, Qt.AlignTop)
def add_settings(self):
self.settings = QCheckBox("Settings")
self.settings.name = "settings"
callback = partial(self.select_func, self.settings)
self.connect(self.settings, SIGNAL("stateChanged(int)"),
callback)
self.grid.addWidget(self.settings, 6, 0, Qt.AlignTop)
def add_applications(self):
self.applications = QCheckBox("Applications")
self.applications.name = "applications"
callback = partial(self.select_func, self.applications)
self.connect(self.applications, SIGNAL("stateChanged(int)"),
callback)
self.grid.addWidget(self.applications, 7, 0, Qt.AlignTop)
# def select_all_func(self):
# checked = self.select_all.isChecked()
# list = self.map_checked.keys()
# for element in list:
# self.map_checked[element] = checked
# for i in range(1,8):
# self.grid.itemAtPosition(i, 0).widget().setChecked(checked)
#
def select_func(self, checkbox):
checked = checkbox.isChecked()
self.map_checked[checkbox.name] = checked
if not checked:
list = []
for i in range(1,8):
item = self.grid.itemAtPosition(i, 0).widget()
# if item == self.select_all:
# pass
if item.isChecked():
list.append(item)
# self.select_all.setChecked(False)
for element in list:
element.setChecked(True)
if self.empty_map():
self.enableNext.setText("")
else:
self.enableNext.setText("Next Button Enabled")
def getCategories(self):
return self.map_checked
def create_vertical_components(self):
deviceWidget = PcsDeviceWidget(2)
deviceWidget.setImage(DEVICE_DISCONNECTED)
deviceWidget.addBorder()
deviceWidget.addDeviceName()
deviceWidget.setDeviceInfo(self.deviceInfo)
self.vertical.addWidget(deviceWidget, Qt.AlignTop)
self.nextButton = QPushButton()
self.nextButton.setText("Next")
self.nextButton.setStyleSheet(BACKUP_BUTTON_STYLE)
self.connect(self.nextButton, SIGNAL("clicked()"), self._goNextPage)
self.vertical.addItem(QSpacerItem(0, 20))
buttonLayout = QHBoxLayout()
buttonLayout.addItem(QSpacerItem(5,0))
buttonLayout.addWidget(self.nextButton, Qt.AlignCenter)
self.vertical.addLayout(buttonLayout)
self.vertical.addItem(QSpacerItem(0,10))