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