Initial commit (Vesion 0.1)
[tablet-suite] / src / backup / .svn / text-base / pcscheckboxwizard.py.svn-base
1 # Authors: Amaury Medeiros and Paulo Ouriques
2 # Software License: GPL
3
4 from functools import partial
5
6 from PyQt4.QtCore import *
7 from PyQt4.QtGui import *
8
9 from ui.pcsbutton import *
10 from ui.pcsdevicewidget import PcsDeviceWidget
11 from ui.pcscustombuttons import PcsCustomButton as customButton
12 from ui.pcsuiutils import *
13 from style.styleTabletSuite import *
14 from pcsbackupmanagerui import *
15 from pcsrestorebackupui import *
16
17 class PcsCheckboxWizard(QWizardPage):
18        
19     def __init__(self, deviceInfo, windowManager, parent = None):
20         QWizardPage.__init__(self, parent)
21         self.deviceInfo = deviceInfo
22         self.windowManager = windowManager
23         
24         self.layout = QVBoxLayout()
25         self.layout.setMargin(0)
26         self.layout.setSpacing(0)
27         buttonsLayout = self._menuButtons()
28         self.layout.addLayout(buttonsLayout)
29         self.layout.addItem(QSpacerItem(0, 8))
30         wayLayout = self._wayLayout()
31         self.layout.addLayout(wayLayout)
32
33         self.layout.addItem(QSpacerItem(0, 10))
34
35         self.hlayout = QHBoxLayout()
36         self.hlayout.setMargin(0)
37         
38         self.vertical = QVBoxLayout()
39         self.vertical.setMargin(0)
40         self.vertical.setSpacing(0)
41         self.create_vertical_components()
42         self.hlayout.addLayout(self.vertical)
43         self.hlayout.setMargin(0)
44         self.hlayout.setSpacing(0)
45         
46         self.create_checkbox_frame()
47 #        self.hlayout.addItem(QSpacerItem(30, 0))
48         self.layout.addLayout(self.hlayout)
49         
50         self.layout.addItem(QSpacerItem(0, 35))
51         informationLayout = QHBoxLayout()
52         informationLayout.setMargin(0)
53         spc = QSpacerItem(10, 0)
54         iconAlert = QLabel()
55         iconAlert.setPixmap(QPixmap(ICON_ALERT))
56         information = QLabel("<font style='color:"\
57                              "#333333'; size=2>"\
58                              "Select the types of file you wish to backup.</font>")
59         informationLayout.addItem(spc)
60         informationLayout.addWidget(iconAlert)
61         informationLayout.addWidget(information, Qt.AlignLeft)
62
63         self.layout.addLayout(informationLayout)
64         
65         self.setLayout(self.layout)
66         self.map_checked = {self.documents.name: False,
67                             self.emails.name: False, self.media.name: False,
68                             self.contacts.name: False, 
69                             self.bookmarks.name: False,
70                             self.settings.name: False, 
71                             self.applications.name: False}
72         self.enableNext = QLineEdit()
73         self.registerField("enableNext*", self.enableNext)
74     
75     def _wayLayout(self):
76         barLayout = QHBoxLayout()
77         barLayout.setMargin(0)
78         main = QLabel("<font style='color: #333333'; size=2>Main</font>")
79         arrow = self._arrow()
80         arrow2 = self._arrow()
81         spc = QSpacerItem(5, 0)
82         newBackup = QLabel("<font style='color: #333333'; size=2> New Backup</font>")
83         files = QLabel("<font style='color: #FFFFFF'; size=2>Files</font>")
84         widgetList = [main, arrow, newBackup, arrow2, files]
85         for widget in widgetList:
86             barLayout.addWidget(widget, Qt.AlignLeft)
87             barLayout.addItem(spc)
88         barLayout.addItem(QSpacerItem(300, 0))
89         return barLayout
90     
91     def _arrow(self):
92         label = QLabel()
93         label.setPixmap(QPixmap(BLACK_ARROW))
94         return label
95             
96     def _menuButtons(self):
97         infList = [("New Backup", SMALL_ICON_NEW_BACKUP_STYLE_SELECTED), 
98                    ("Manage Backup", SMALL_ICON_MANAGER_BACKUP_STYLE, self._manageDialog),
99                    ("Restore Backup", SMALL_ICON_RESTORE_BACKUP_STYLE, self._restoreDialog)]
100         buttonsLayout = QHBoxLayout()
101         buttonsLayout.setMargin(0)
102         for i in range(3):
103             but = QPushButton(infList[i][0])
104             but.setStyleSheet(infList[i][1])
105             if i <> 0:
106                 buttonsLayout.addWidget(but, Qt.AlignLeft)
107                 self.connect(but, SIGNAL("clicked()"), infList[i][2])
108             else:
109                 buttonsLayout.addWidget(but)
110         return buttonsLayout   
111     
112     def _manageDialog(self):
113         if(self.deviceInfo and self.deviceInfo.ip != None):
114             backupManager = self.windowManager.getBackupManager()
115             centralize(backupManager)
116             backupManager.setGeometry(self.wizard().geometry())
117             backupManager.show()
118             self.wizard().close()
119             self.close()
120         else:
121             self._showNoDeviceFoundMessage()
122     
123     def _restoreDialog(self):
124         if(self.deviceInfo and self.deviceInfo.ip != None):
125             restoreBackup = self.windowManager.getRestoreBackup()
126             centralize(restoreBackup)
127             restoreBackup.setGeometry(self.wizard().geometry())
128             restoreBackup.show()
129             self.wizard().close()
130             self.close()
131         else:
132             self._showNoDeviceFoundMessage()
133     
134     def _goNextPage(self):
135         if self.empty_map():
136             return False
137         else:
138             self.wizard().next()
139     
140     
141     def _showNoDeviceFoundMessage(self):
142         inf = QMessageBox(self)
143         inf.setWindowTitle("Connect a device.")
144         inf.setText("No devices were found.")
145         inf.show()
146     
147     def create_checkbox_frame(self):
148         layout = QVBoxLayout()
149         l = QLabel()
150         l.setPixmap(QPixmap(COPY_BORDER))
151        
152         self.frame = QScrollArea(self)
153         self.frame.setWidgetResizable(True)
154         widget = QWidget(self.frame)
155         widget.setStyleSheet("QWidget{background: transparent;}")
156         self.grid = QGridLayout()
157         self.grid.setSpacing(0)
158         self.createCheckboxPanel()
159         widget.setLayout(self.grid)
160         self.frame.setWidget(widget)
161         layout.addItem(QSpacerItem(0,25))
162         layout.addWidget(self.frame)
163         self.hlayout.addLayout(layout)
164         
165     
166     def empty_map(self):
167         for index in self.map_checked.keys():
168             if self.map_checked[index]:
169                 return False
170         return True
171         
172     def createCheckboxPanel(self):
173         #Add Checkboxes
174 #        self.add_select_all()
175         self.add_documents()
176         self.add_emails()
177         self.add_media()
178         self.add_contacts()
179         self.add_bookmarks()
180         self.add_settings()
181         self.add_applications()            
182         
183 #    def add_select_all(self):
184 #        self.select_all = QCheckBox("Select All")
185 #        self.connect(self.select_all, SIGNAL("stateChanged(int)"), 
186 #                     self.select_all_func)
187 #        self.grid.addWidget(self.select_all, 0, 0, Qt.AlignTop)          
188 #    
189     def add_documents(self):
190         self.documents = QCheckBox("Documents")
191         self.documents.name = "documents"
192         callback = partial(self.select_func, self.documents)
193         self.connect(self.documents, SIGNAL("stateChanged(int)"), 
194                      callback)
195         self.grid.addWidget(self.documents, 1, 0, Qt.AlignTop)
196     
197     def add_emails(self):
198         self.emails = QCheckBox("Emails")
199         self.emails.name = "emails"
200         callback = partial(self.select_func, self.emails)
201         self.connect(self.emails, SIGNAL("stateChanged(int)"), 
202                      callback)
203         self.grid.addWidget(self.emails, 2, 0, Qt.AlignTop)
204     
205     def add_media(self):
206         self.media = QCheckBox("Media")
207         self.media.name = "media"
208         callback = partial(self.select_func, self.media)
209         self.connect(self.media, SIGNAL("stateChanged(int)"), 
210                      callback)
211         self.grid.addWidget(self.media, 3, 0, Qt.AlignTop)
212     
213     def add_contacts(self):
214         self.contacts = QCheckBox("Contacts")
215         self.contacts.name = "contacts"
216         callback = partial(self.select_func, self.contacts)
217         self.connect(self.contacts, SIGNAL("stateChanged(int)"), 
218                      callback)
219         self.grid.addWidget(self.contacts, 4, 0, Qt.AlignTop)
220     
221     def add_bookmarks(self):
222         self.bookmarks = QCheckBox("Bookmarks")
223         self.bookmarks.name = "bookmarks"
224         callback = partial(self.select_func, self.bookmarks)
225         self.connect(self.bookmarks, SIGNAL("stateChanged(int)"), 
226                      callback)
227         self.grid.addWidget(self.bookmarks, 5, 0, Qt.AlignTop)
228         
229     def add_settings(self):
230         self.settings = QCheckBox("Settings")
231         self.settings.name = "settings"
232         callback = partial(self.select_func, self.settings)
233         self.connect(self.settings, SIGNAL("stateChanged(int)"), 
234                      callback)
235         self.grid.addWidget(self.settings, 6, 0, Qt.AlignTop)
236
237     def add_applications(self):
238         self.applications = QCheckBox("Applications")
239         self.applications.name = "applications"
240         callback = partial(self.select_func, self.applications)
241         self.connect(self.applications, SIGNAL("stateChanged(int)"), 
242                      callback)
243         self.grid.addWidget(self.applications, 7, 0, Qt.AlignTop)
244
245 #    def select_all_func(self):
246 #        checked = self.select_all.isChecked()
247 #        list = self.map_checked.keys()
248 #        for element in list:
249 #            self.map_checked[element] = checked
250 #        for i in range(1,8):
251 #            self.grid.itemAtPosition(i, 0).widget().setChecked(checked)
252 #        
253     def select_func(self, checkbox):
254         checked = checkbox.isChecked()
255         self.map_checked[checkbox.name] = checked
256         if not checked:
257             list = []
258             for i in range(1,8):
259                 item = self.grid.itemAtPosition(i, 0).widget()
260 #                if item == self.select_all:
261 #                    pass
262                 if item.isChecked():
263                     list.append(item)
264 #            self.select_all.setChecked(False)
265             for element in list:
266                 element.setChecked(True)         
267         if self.empty_map():
268             self.enableNext.setText("")
269         else:
270             self.enableNext.setText("Next Button Enabled")
271             
272     def getCategories(self):
273         return self.map_checked
274         
275     def create_vertical_components(self):
276         deviceWidget = PcsDeviceWidget(2)
277         deviceWidget.setImage(DEVICE_DISCONNECTED)
278         deviceWidget.addBorder()
279         deviceWidget.addDeviceName()
280         deviceWidget.setDeviceInfo(self.deviceInfo)
281         self.vertical.addWidget(deviceWidget, Qt.AlignTop)
282         self.nextButton = QPushButton()
283         self.nextButton.setText("Next")
284         self.nextButton.setStyleSheet(BACKUP_BUTTON_STYLE)
285         self.connect(self.nextButton, SIGNAL("clicked()"), self._goNextPage)
286         self.vertical.addItem(QSpacerItem(0, 20))
287         buttonLayout = QHBoxLayout()
288         buttonLayout.addItem(QSpacerItem(5,0))
289         buttonLayout.addWidget(self.nextButton, Qt.AlignCenter)
290         self.vertical.addLayout(buttonLayout)
291         self.vertical.addItem(QSpacerItem(0,10))
292