Image plugin previews images!

bzr-revno: 334
This commit is contained in:
Martin Thompson 2009-02-20 21:15:42 +00:00
parent 8a8f5da5a7
commit f0177bdbda
4 changed files with 90 additions and 62 deletions

View File

@ -67,10 +67,10 @@ class PluginUtils(object):
Save display list from the config files tidy up the list Save display list from the config files tidy up the list
""" """
oldcount = self.config.get_config("List Count") oldcount = self.config.get_config("List Count")
newcount = displaylist.rowCount() newcount = len(displaylist)
self.config.set_config("List Count", str(newcount)) self.config.set_config("List Count", str(newcount))
for i in range (0, int(newcount)): for i in range (0, int(newcount)):
self.config.set_config("List Item "+str(i), str(displaylist.item(i, 0).text())) self.config.set_config("List Item %d " % i, str(displaylist[i]))
if oldcount > newcount: # Tidy up any old list itrms if list is smaller now if oldcount > newcount: # Tidy up any old list itrms if list is smaller now
for i in range(int(newcount) , int(oldcount)): for i in range(int(newcount) , int(oldcount)):
self.config.delete_config("List Item "+str(i)) self.config.delete_config("List Item "+str(i))

View File

@ -25,7 +25,7 @@ from PyQt4 import QtCore, QtGui
from openlp.core.resources import * from openlp.core.resources import *
from openlp.core.ui import AboutForm, AlertForm, SettingsDialog, SlideController from openlp.core.ui import AboutForm, AlertForm, SettingsDialog, SlideController
from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab, Receiver
from openlp.core import PluginManager from openlp.core import PluginManager
import logging import logging
@ -47,13 +47,11 @@ class MainWindow(object):
# hook methods have to happen after find_plugins. Find plugins needs the controllers # hook methods have to happen after find_plugins. Find plugins needs the controllers
# hence the hooks have moved fromt srtupUI() to here # hence the hooks have moved fromt srtupUI() to here
# Call the hook method to pull in import menus. # Call the hook method to pull in import menus.
# self.plugin_manager.hook_import_menu(self.FileImportMenu) self.plugin_manager.hook_import_menu(self.FileImportMenu)
# #
# Call the hook method to pull in export menus. # Call the hook method to pull in export menus.
# self.plugin_manager.hook_import_menu(self.FileExportMenu) self.plugin_manager.hook_import_menu(self.FileExportMenu)
# #
# This is where we will eventually get the Plugin Manager to pull in
# the media manager items.
log.info("hook media") log.info("hook media")
self.plugin_manager.hook_media_manager(self.MediaToolBox) self.plugin_manager.hook_media_manager(self.MediaToolBox)
# End adding media manager items. # End adding media manager items.

View File

@ -439,7 +439,10 @@ class BiblePlugin(Plugin, PluginUtils):
def _load_reset_settings(self): def _load_reset_settings(self):
self.SettingsOutputStyleComboBox.setCurrentIndex(int(self.config.get_config("outputstylecombo", 0))) self.SettingsOutputStyleComboBox.setCurrentIndex(int(self.config.get_config("outputstylecombo", 0)))
self.SettingsVerseStyleComboBox.setCurrentIndex(int(self.config.get_config("versestylecombo", 0))) self.SettingsVerseStyleComboBox.setCurrentIndex(int(self.config.get_config("versestylecombo", 0)))
self.SettingsNewChapterCheck.setCheckState(int(self.config.get_config("newchaptercheck", 0))) try:
self.SettingsNewChapterCheck.setCheckState(int(self.config.get_config("newchaptercheck", 0)))
except:
pass
def _save_settings(self): def _save_settings(self):
self.config.set_config("outputstylecombo", str(self.SettingsOutputStyleComboBox.currentIndex())) self.config.set_config("outputstylecombo", str(self.SettingsOutputStyleComboBox.currentIndex()))

View File

@ -21,9 +21,66 @@ import os
from PyQt4 import QtCore, QtGui from PyQt4 import QtCore, QtGui
from openlp.core.resources import * from openlp.core.resources import *
from openlp.core.lib import Plugin, PluginUtils, MediaManagerItem, ImageServiceItem from openlp.core.lib import Plugin, PluginUtils, MediaManagerItem, ImageServiceItem
#from forms import EditSongForm
import logging import logging
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class ListWithPreviews(QtCore.QAbstractListModel):
"""
An abstract list of strings and the preview icon to go with them
"""
global log
log=logging.getLogger("ListWithPreviews")
log.info("started")
def __init__(self):
QtCore.QAbstractListModel.__init__(self)
self.items=[] # will be a list of (filename, QPixmap) tuples
self.rowheight=50
self.maximagewidth=self.rowheight*16/9.0;
def rowCount(self, parent):
return len(self.items)
def insertRow(self, row, filename):
log.info("insert row %d:%s"%(row,filename))
preview = QtGui.QPixmap(str(filename))
w=self.maximagewidth;h=self.rowheight
preview = preview.scaled(w,h, Qt.KeepAspectRatio)
realw=preview.width(); realh=preview.height()
p=QPixmap(w,h)
p.fill(Qt.transparent)
painter=QPainter(p)
# gradient=QRadialGradient(w/2,h/2,min(w,h)/2, w/2, h/2)
# gradient.setColorAt(0, QColor.fromRgbF(0, 0, 0, 1));
# gradient.setColorAt(1, QColor.fromRgbF(0, 0, 0, 0));
# painter.fillRect(0,0,w,h,gradient)
painter.drawPixmap((w-realw)/2,(h-realh)/2,preview)
(prefix, shortfilename) =os.path.split(filename)
self.items.insert(row, (filename, p, shortfilename))
def removeRow(self, row):
self.items.pop(row)
def addRow(self, filename):
self.insertRow(len(self.items), filename)
def data(self, index, role):
row=index.row()
if row > len(self.items): # if the last row is selected and deleted, we then get called with an empty row!
return QVariant()
if role==Qt.DisplayRole:
retval= self.items[row][2]
elif role == Qt.DecorationRole:
retval= self.items[row][1]
else:
retval= QVariant()
# log.info("Returning"+ str(retval))
if type(retval) is not type(QVariant):
return QVariant(retval)
else:
return retval
def get_file_list(self):
filelist=[i[0] for i in self.items];
return filelist
class ImagePlugin(Plugin, PluginUtils): class ImagePlugin(Plugin, PluginUtils):
global log global log
log=logging.getLogger("ImagePlugin") log=logging.getLogger("ImagePlugin")
@ -64,19 +121,11 @@ class ImagePlugin(Plugin, PluginUtils):
'Add the selected image(s) to the service', ':/system/system_add.png', 'Add the selected image(s) to the service', ':/system/system_add.png',
self.onImageAddClick, 'ImageAddItem') self.onImageAddClick, 'ImageAddItem')
## Add the songlist widget ## ## Add the songlist widget ##
# self.layout=QtGui.QGridLayout()
# self.ImageListView=QtGui.QWidget()
# self.ImageListView.setLayout(self.layout)
self.ImageListView=QtGui.QListView() self.ImageListView=QtGui.QListView()
# self.ImageListView.setColumnCount(3) self.ImageListView.uniformItemSizes=True
# self.ImageListView.setColumnHidden(0, True) self.ImageListData=ListWithPreviews()
# self.ImageListView.setColumnWidth(1, 275) self.ImageListView.setModel(self.ImageListData)
# self.ImageListView.setColumnWidth(2, 200)
# self.ImageListView.setShowGrid(False)
# self.ImageListView.setSortingEnabled(False)
# self.ImageListView.setAlternatingRowColors(True)
# self.ImageListView.setHorizontalHeaderLabels(QtCore.QStringList(["","Name", "Preview"]))
# self.ImageListView.setAlternatingRowColors(True)
self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591)) self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
self.ImageListView.setObjectName("ImageListView") self.ImageListView.setObjectName("ImageListView")
self.MediaManagerItem.PageLayout.addWidget(self.ImageListView) self.MediaManagerItem.PageLayout.addWidget(self.ImageListView)
@ -103,57 +152,35 @@ class ImagePlugin(Plugin, PluginUtils):
def onImagesNewClick(self): def onImagesNewClick(self):
files = QtGui.QFileDialog.getOpenFileNames(None, "Select Image(s)", self._get_last_dir(), "Images (*.jpg *.gif *.png *.bmp)") files = QtGui.QFileDialog.getOpenFileNames(None, "Select Image(s)", self._get_last_dir(), "Images (*.jpg *.gif *.png *.bmp)")
log.info("New image(s)", str(files))
if len(files) > 0: if len(files) > 0:
self._load_image_list(files) self._load_image_list(files)
self._save_last_directory(files[0]) self._save_last_directory(files[0])
self._save_display_list(self.ImageListView) self._save_display_list(self.ImageListData.get_file_list())
def _load_image_list(self, list): def _load_image_list(self, list):
h=100
self.filenames=[]
r=0
for f in list: for f in list:
fl , nm = os.path.split(str(f)) self.ImageListData.addRow(f)
self.filenames.append(f)
# self.layout.addWidget(QtGui.QLabel(nm), r, 0)
preview = QtGui.QPixmap(str(f))
# preview = preview.scaledToHeight(h)
label=QtGui.QLabel("")
label.setPixmap(preview)
# self.layout.addWidget(label, r, 1)
# self.layout.setRowMinimumHeight(r, h)
fl , nm = os.path.split(str(f))
w=QtGui.QListWidgetItem(QtGui.QIcon(preview), nm)
# w.setIconSize(h, h, Qt.KeepAspectRatio)
self.ImageListView.addItem(w)
xxx need to create an object which produces a list view of previews and use it for the controller and the selector
# c = self.ImageListView.rowCount()
# self.ImageListView.setRowCount(c+1)
# twi = QtGui.QTableWidgetItem(str(f))
# self.ImageListView.setItem(c , 0, twi)
# twi = QtGui.QTableWidgetItem(str(nm))
# self.ImageListView.setItem(c , 1, twi)
# twi = QtGui.QTableWidgetItem("")
# twi.setBackground(QtGui.QBrush(preview))
# twi.setIcon(QtGui.QIcon(preview.scaledToHeight(h)))
# self.ImageListView.setItem(c , 2, twi)
# self.ImageListView.setRowHeight(c, h)
r +=1
def onImageDeleteClick(self): def onImageDeleteClick(self):
indexes=self.ImageListView.selectedIndexes()
for i in indexes:
cr = i.row()
self.ImageListData.removeRow(int(cr))
self._save_display_list(self.ImageListData.get_file_list())
def onImageClick(self, where):
cr = self.ImageListView.currentRow() cr = self.ImageListView.currentRow()
self.ImageListView.removeRow(int(cr)) filename = self.ImageListView.item(cr, 0).text()
self._save_display_list(self.ImageListView) log.info("Click %s:%s"%(str(where), filename))
where.add(filename)
where.render()
def onImagePreviewClick(self): def onImagePreviewClick(self):
# cr = self.ImageListView.currentRow() self.onImageClick(self.preview_service_item)
filename = None#self.ImageListView.item(cr, 0).text()
log.info("Preview "+str(filename))
self.preview_service_item.add(filename)
self.preview_service_item.render()
def onImageLiveClick(self): def onImageLiveClick(self):
pass self.onImageClick(self.live_service_item)
def onImageAddClick(self): def onImageAddClick(self):
pass pass