diff options
author | RaNaN <Mast3rRaNaN@hotmail.de> | 2010-08-25 18:22:27 +0200 |
---|---|---|
committer | RaNaN <Mast3rRaNaN@hotmail.de> | 2010-08-25 18:22:27 +0200 |
commit | 29f9dc8fb3396b03d732ebcbeb1cc8f00fe13897 (patch) | |
tree | f2a910cbea747a7b0c0a50d6c66691e54f5ef47f /module/gui/Accounts.py | |
parent | merged gui (diff) | |
download | pyload-29f9dc8fb3396b03d732ebcbeb1cc8f00fe13897.tar.xz |
new dirs
Diffstat (limited to 'module/gui/Accounts.py')
-rw-r--r-- | module/gui/Accounts.py | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/module/gui/Accounts.py b/module/gui/Accounts.py new file mode 100644 index 000000000..f47928c1a --- /dev/null +++ b/module/gui/Accounts.py @@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: mkaay +""" + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from time import strftime, gmtime + +class AccountModel(QAbstractItemModel): + def __init__(self, view, connector): + QAbstractItemModel.__init__(self) + self.connector = connector + self.view = view + self._data = [] + self.cols = 4 + self.mutex = QMutex() + + def reloadData(self): + data = self.connector.proxy.get_accounts() + self.beginRemoveRows(QModelIndex(), 0, len(self._data)) + self._data = [] + self.endRemoveRows() + accounts = [] + for li in data.values(): + accounts += li + self.beginInsertRows(QModelIndex(), 0, len(accounts)) + self._data = accounts + self.endInsertRows() + + def toData(self, index): + return index.internalPointer() + + def data(self, index, role=Qt.DisplayRole): + if not index.isValid(): + return QVariant() + if role == Qt.DisplayRole: + if index.column() == 0: + return QVariant(self.toData(index)["type"]) + elif index.column() == 1: + return QVariant(self.toData(index)["login"]) + elif index.column() == 2: + if not self.toData(index)["validuntil"]: + return QVariant(_("n/a")) + until = int(self.toData(index)["validuntil"]) + if until > 0: + fmtime = strftime(_("%a, %d %b %Y %H:%M"), gmtime(until)) + return QVariant(fmtime) + else: + return QVariant(_("unlimited")) + elif index.column() == 3: + return QVariant(self.toData(index)["trafficleft"]) + #elif role == Qt.EditRole: + # if index.column() == 0: + # return QVariant(index.internalPointer().data["name"]) + return QVariant() + + def index(self, row, column, parent=QModelIndex()): + if parent == QModelIndex() and len(self._data) > row: + pointer = self._data[row] + index = self.createIndex(row, column, pointer) + elif parent.isValid(): + pointer = parent.internalPointer().children[row] + index = self.createIndex(row, column, pointer) + else: + index = QModelIndex() + return index + + def parent(self, index): + return QModelIndex() + + def rowCount(self, parent=QModelIndex()): + if parent == QModelIndex(): + return len(self._data) + return 0 + + def columnCount(self, parent=QModelIndex()): + return self.cols + + def hasChildren(self, parent=QModelIndex()): + return False + + def canFetchMore(self, parent): + return False + + def headerData(self, section, orientation, role=Qt.DisplayRole): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + if section == 0: + return QVariant(_("Type")) + elif section == 1: + return QVariant(_("Login")) + elif section == 2: + return QVariant(_("Valid until")) + elif section == 3: + return QVariant(_("Traffic left")) + return QVariant() + + def flags(self, index): + return Qt.ItemIsSelectable | Qt.ItemIsEditable | Qt.ItemIsEnabled + + #def setData(self, index, value, role=Qt.EditRole): + # if index.column() == 0 and self.parent(index) == QModelIndex() and role == Qt.EditRole: + # self.connector.setPackageName(index.internalPointer().id, str(value.toString())) + # return True + +class AccountView(QTreeView): + def __init__(self, connector): + QTreeView.__init__(self) + self.setModel(AccountModel(self, connector)) + + self.setColumnWidth(0, 150) + self.setColumnWidth(1, 150) + self.setColumnWidth(2, 150) + self.setColumnWidth(3, 150) + + self.setEditTriggers(QAbstractItemView.NoEditTriggers) + + self.delegate = AccountDelegate(self, self.model()) + self.setItemDelegateForColumn(3, self.delegate) + +class AccountDelegate(QItemDelegate): + def __init__(self, parent, model): + QItemDelegate.__init__(self, parent) + self.model = model + + def paint(self, painter, option, index): + if not index.isValid(): + return + if index.column() == 3: + data = self.model.toData(index) + opts = QStyleOptionProgressBarV2() + opts.minimum = 0 + if data["trafficleft"]: + if data["trafficleft"] == -1: + opts.maximum = opts.progress = 1 + else: + opts.maximum = opts.progress = data["trafficleft"] + if data["maxtraffic"]: + opts.maximum = data["maxtraffic"] + + opts.rect = option.rect + opts.rect.setRight(option.rect.right()-1) + opts.rect.setHeight(option.rect.height()-1) + opts.textVisible = True + opts.textAlignment = Qt.AlignCenter + if data["trafficleft"] and data["trafficleft"] == -1: + opts.text = QString(_("unlimited")) + else: + opts.text = QString.number(round(float(opts.progress)/1024/1024, 2)) + " GB" + QApplication.style().drawControl(QStyle.CE_ProgressBar, opts, painter) + return + QItemDelegate.paint(self, painter, option, index) + |