display modules icons in backends list, modules list and module description

This commit is contained in:
Romain Bignon 2010-07-04 00:29:47 +02:00
commit d7301438cb
3 changed files with 82 additions and 23 deletions

View file

@ -64,6 +64,9 @@ class Module:
def get_config(self):
return self.klass.CONFIG
def get_icon_path(self):
return self.klass.ICON
def iter_caps(self):
for cap in self.klass.__bases__:
if issubclass(cap, ICap) and cap != ICap:

View file

@ -15,8 +15,10 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
from PyQt4.QtGui import QDialog, QTableWidgetItem, QLabel, QLineEdit, QCheckBox, QMessageBox
from PyQt4.QtCore import SIGNAL, Qt
from PyQt4.QtGui import QDialog, QTreeWidgetItem, QLabel, QLineEdit, QCheckBox, \
QMessageBox, QPixmap, QImage, QIcon, QHeaderView, \
QListWidgetItem, QTextDocument
from PyQt4.QtCore import SIGNAL, Qt, QVariant, QUrl
import re
from logging import warning
@ -35,15 +37,22 @@ class BackendCfg(QDialog):
self.weboob.modules_loader.load()
self.ui.backendsList.header().setResizeMode(QHeaderView.ResizeToContents)
self.ui.configFrame.hide()
for name, module in self.weboob.modules_loader.modules.iteritems():
if not self.caps or module.has_caps(*self.caps):
self.ui.modulesList.addItem(name.capitalize())
item = QListWidgetItem(name.capitalize())
if module.get_icon_path():
img = QImage(module.get_icon_path())
item.setIcon(QIcon(QPixmap.fromImage(img)))
self.ui.modulesList.addItem(item)
self.loadBackendsList()
self.connect(self.ui.backendsList, SIGNAL('cellClicked(int, int)'), self.backendClicked)
self.connect(self.ui.backendsList, SIGNAL('itemClicked(QTreeWidgetItem *, int)'), self.backendClicked)
self.connect(self.ui.modulesList, SIGNAL('itemSelectionChanged()'), self.modulesSelectionChanged)
self.connect(self.ui.proxyBox, SIGNAL('toggled(bool)'), self.proxyEditEnabled)
self.connect(self.ui.addButton, SIGNAL('clicked()'), self.addEvent)
@ -52,20 +61,25 @@ class BackendCfg(QDialog):
self.connect(self.ui.configButtonBox, SIGNAL('rejected()'), self.rejectBackend)
def loadBackendsList(self):
self.ui.backendsList.clearContents()
self.ui.backendsList.clear()
for instance_name, name, params in self.weboob.backends_config.iter_backends():
if self.caps and not self.weboob.modules_loader.modules[name].has_caps(*self.caps):
module = self.weboob.modules_loader.modules[name]
if self.caps and not module.has_caps(*self.caps):
continue
self.ui.backendsList.insertRow(0)
self.ui.backendsList.setItem(0, 0, QTableWidgetItem(instance_name))
self.ui.backendsList.setItem(0, 1, QTableWidgetItem(name))
item = QTreeWidgetItem(None, [instance_name, name])
if module.get_icon_path():
img = QImage(module.get_icon_path())
item.setIcon(0, QIcon(QPixmap.fromImage(img)))
self.ui.backendsList.addTopLevelItem(item)
def closeEvent(self, event):
event.accept()
def backendClicked(self, row, col):
bname = unicode(self.ui.backendsList.item(row, 0).text())
def backendClicked(self, item, col):
bname = unicode(item.text(0))
self.editBackend(bname)
@ -77,7 +91,7 @@ class BackendCfg(QDialog):
if not item:
return
bname = unicode(self.ui.backendsList.item(item.row(), 0).text())
bname = unicode(item.text(0))
reply = QMessageBox.question(self, self.tr('Remove a backend'),
unicode(self.tr("Are you sure you want to remove the backend '%s'?")) % bname,
QMessageBox.Yes|QMessageBox.No)
@ -197,14 +211,20 @@ class BackendCfg(QDialog):
return
module = self.weboob.modules_loader.modules[unicode(selection[0].text()).lower()]
if module.get_icon_path():
img = QImage(module.get_icon_path())
self.ui.moduleInfo.document().addResource(QTextDocument.ImageResource, QUrl('mydata://logo.png'), QVariant(img))
self.ui.moduleInfo.setText(unicode(self.tr(
'<h1>Module %s</h1>'
'<h1>%s Module %s</h1>'
'<b>Version</b>: %s<br />'
'<b>Maintainer</b>: %s<br />'
'<b>License</b>: %s<br />'
'<b>Description</b>: %s<br />'
'<b>Capabilities</b>: %s<br />'))
% (module.get_name().capitalize(),
% ('<img src="mydata://logo.png" />' if module.get_icon_path() else '',
module.get_name().capitalize(),
module.get_version(),
module.get_maintainer().replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;'),
module.get_license(),

View file

@ -22,25 +22,49 @@
<widget class="QWidget" name="horizontalLayoutWidget">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QTableWidget" name="backendsList">
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
<widget class="QTreeWidget" name="backendsList">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="horizontalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
<property name="iconSize">
<size>
<width>48</width>
<height>48</height>
</size>
</property>
<property name="showGrid">
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="cornerButtonEnabled">
<property name="uniformRowHeights">
<bool>false</bool>
</property>
<attribute name="verticalHeaderVisible">
<property name="itemsExpandable">
<bool>false</bool>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
<property name="animated">
<bool>true</bool>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
<property name="expandsOnDoubleClick">
<bool>false</bool>
</property>
<attribute name="headerCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<attribute name="headerHighlightSections">
<bool>true</bool>
</attribute>
<attribute name="headerCascadingSectionResizes">
<bool>false</bool>
</attribute>
<attribute name="headerHighlightSections">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>Name</string>
@ -114,6 +138,18 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<property name="spacing">
<number>1</number>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
</widget>
<widget class="QFrame" name="frame_2">
<property name="sizePolicy">