forked from openlp/openlp
Image plugin previews images!
bzr-revno: 334
This commit is contained in:
parent
8a8f5da5a7
commit
f0177bdbda
@ -67,10 +67,10 @@ class PluginUtils(object):
|
||||
Save display list from the config files tidy up the list
|
||||
"""
|
||||
oldcount = self.config.get_config("List Count")
|
||||
newcount = displaylist.rowCount()
|
||||
newcount = len(displaylist)
|
||||
self.config.set_config("List Count", str(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
|
||||
for i in range(int(newcount) , int(oldcount)):
|
||||
self.config.delete_config("List Item "+str(i))
|
||||
|
@ -25,7 +25,7 @@ from PyQt4 import QtCore, QtGui
|
||||
|
||||
from openlp.core.resources import *
|
||||
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
|
||||
import logging
|
||||
@ -47,13 +47,11 @@ class MainWindow(object):
|
||||
# hook methods have to happen after find_plugins. Find plugins needs the controllers
|
||||
# hence the hooks have moved fromt srtupUI() to here
|
||||
# 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.
|
||||
# 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")
|
||||
self.plugin_manager.hook_media_manager(self.MediaToolBox)
|
||||
# End adding media manager items.
|
||||
|
@ -439,7 +439,10 @@ class BiblePlugin(Plugin, PluginUtils):
|
||||
def _load_reset_settings(self):
|
||||
self.SettingsOutputStyleComboBox.setCurrentIndex(int(self.config.get_config("outputstylecombo", 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):
|
||||
self.config.set_config("outputstylecombo", str(self.SettingsOutputStyleComboBox.currentIndex()))
|
||||
|
@ -21,9 +21,66 @@ import os
|
||||
from PyQt4 import QtCore, QtGui
|
||||
from openlp.core.resources import *
|
||||
from openlp.core.lib import Plugin, PluginUtils, MediaManagerItem, ImageServiceItem
|
||||
#from forms import EditSongForm
|
||||
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):
|
||||
global log
|
||||
log=logging.getLogger("ImagePlugin")
|
||||
@ -64,19 +121,11 @@ class ImagePlugin(Plugin, PluginUtils):
|
||||
'Add the selected image(s) to the service', ':/system/system_add.png',
|
||||
self.onImageAddClick, 'ImageAddItem')
|
||||
## Add the songlist widget ##
|
||||
# self.layout=QtGui.QGridLayout()
|
||||
# self.ImageListView=QtGui.QWidget()
|
||||
# self.ImageListView.setLayout(self.layout)
|
||||
self.ImageListView=QtGui.QListView()
|
||||
# self.ImageListView.setColumnCount(3)
|
||||
# self.ImageListView.setColumnHidden(0, True)
|
||||
# self.ImageListView.setColumnWidth(1, 275)
|
||||
# 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.uniformItemSizes=True
|
||||
self.ImageListData=ListWithPreviews()
|
||||
self.ImageListView.setModel(self.ImageListData)
|
||||
|
||||
self.ImageListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
|
||||
self.ImageListView.setObjectName("ImageListView")
|
||||
self.MediaManagerItem.PageLayout.addWidget(self.ImageListView)
|
||||
@ -103,57 +152,35 @@ class ImagePlugin(Plugin, PluginUtils):
|
||||
|
||||
def onImagesNewClick(self):
|
||||
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:
|
||||
self._load_image_list(files)
|
||||
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):
|
||||
h=100
|
||||
self.filenames=[]
|
||||
r=0
|
||||
for f in list:
|
||||
fl , nm = os.path.split(str(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
|
||||
|
||||
self.ImageListData.addRow(f)
|
||||
|
||||
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()
|
||||
self.ImageListView.removeRow(int(cr))
|
||||
self._save_display_list(self.ImageListView)
|
||||
|
||||
filename = self.ImageListView.item(cr, 0).text()
|
||||
log.info("Click %s:%s"%(str(where), filename))
|
||||
where.add(filename)
|
||||
where.render()
|
||||
|
||||
def onImagePreviewClick(self):
|
||||
# cr = self.ImageListView.currentRow()
|
||||
filename = None#self.ImageListView.item(cr, 0).text()
|
||||
log.info("Preview "+str(filename))
|
||||
self.preview_service_item.add(filename)
|
||||
self.preview_service_item.render()
|
||||
|
||||
self.onImageClick(self.preview_service_item)
|
||||
def onImageLiveClick(self):
|
||||
pass
|
||||
self.onImageClick(self.live_service_item)
|
||||
|
||||
def onImageAddClick(self):
|
||||
pass
|
||||
|
Loading…
Reference in New Issue
Block a user