Initial commit (Vesion 0.1)
[tablet-suite] / src / backup / pcsbackuplistui.py
1 # Authors: Amaury Medeiros and Paulo Ouriques
2 # Software License: GPL
3
4 from PyQt4.QtCore import *
5 from PyQt4.QtGui import *
6
7 class PCSBackupListUi(QTableView):
8     
9     ''' Class that creates a table, where the backups will be shown '''
10     
11     def __init__(self, backupManager):
12         super(PCSBackupListUi, self).__init__()
13         
14         self.setSelectionBehavior(QAbstractItemView.SelectRows)
15         self.setSelectionMode(QAbstractItemView.ExtendedSelection)
16         self.setAlternatingRowColors(True)
17         self.setShowGrid(False)
18         self.setEditTriggers(QAbstractItemView.NoEditTriggers)
19         self.model = QStandardItemModel()
20         self.setModel(self.model)
21         
22         hHeader = QHeaderView(Qt.Horizontal)
23         hHeader.setObjectName("listHeader")
24         hHeader.setAttribute(Qt.WA_NoSystemBackground)
25         hHeader.setStretchLastSection(True)
26         hHeader.setResizeMode(QHeaderView.ResizeToContents)
27         hHeader.setMinimumSectionSize(100)
28
29         hHeader.setClickable(False)
30
31         self.setHorizontalHeader(hHeader)
32         
33         vHeader = QHeaderView(Qt.Vertical)
34         vHeader.setVisible(False)
35         self.setVerticalHeader(vHeader)
36         self._backupManager = backupManager
37         
38     def updateBackupList(self):
39         self.model.clear()
40         self.model.setHorizontalHeaderItem(0, QStandardItem("NAME"))
41         self.model.setHorizontalHeaderItem(1, QStandardItem("SIZE"))
42         self.model.setHorizontalHeaderItem(2, QStandardItem("DATE"))
43
44         backupList = self._backupManager.getBackupList()
45         for backupInfo in backupList:
46             name = backupInfo.getName()
47             date = str(backupInfo.getDate())
48             size = self._formatBackupSize(backupInfo.getSize())
49             backupData = [QStandardItem(name), QStandardItem(size), QStandardItem(date)]
50             self.model.appendRow(backupData)
51
52     def removeSelectedBackups(self):
53         selectionModel = self.selectionModel()
54         indexList = selectionModel.selectedRows()
55         for index in reversed(sorted(indexList)):
56             if index.isValid():
57                 row = index.row()
58                 data = self.model.itemData(index)
59                 backupName = data[0].toString()
60                 if self._backupManager.removeBackup((str(backupName).strip())):
61                     self.model.removeRow(row)
62         self.updateBackupList()
63
64     def renameSelectedBackup (self, newName):
65         #!!!!!!! getSelectedBackup
66         backupName = (str(self.getSelectedBackup())).strip()
67         if backupName != None:
68             if self._backupManager.renameBackup(backupName, newName):
69                 self.updateBackupList()
70                 return True
71         
72         return False
73     
74     def getSelectedBackup(self):
75         list = self.getSelectedBackupList()
76         if list and len(list) > 0:
77             return list[0]
78         
79         return None
80     
81     def getSelectedBackupList(self):
82         selectionModel = self.selectionModel()
83         indexList = selectionModel.selectedRows()
84         backupList = []
85         for index in indexList:
86             if index.isValid():
87                 row = index.row()
88                 data = self.model.itemData(index)
89                 backupList.append(data[0].toString())
90         return backupList
91
92     def getBackupManager(self):
93         return self._backupManager
94             
95     def _formatBackupSize(self, size):
96         """ Return a string with a more suited size and byte multiple for the
97         received size.
98         
99         Attributes:
100             String/Float/Int size - size in bytes or string representing it.
101         
102         """
103         size = float(size)
104         multiples = ["B", "KB", "MB", "GB"]
105         divisions = 0
106         while size > 1000 and divisions <= 3:
107             size = size / 1024.
108             divisions += 1
109             
110         return "%.1f %s" % (size, multiples[divisions])