forked from openlp/openlp
Add distributed event handling
Added display updates when Bibles load Try to fix the creeping progress bar. bzr-revno: 299
This commit is contained in:
parent
49ed24a69b
commit
557114fd7f
@ -25,6 +25,7 @@ from mediamanageritem import MediaManagerItem
|
||||
from event import Event
|
||||
from xmlrootclass import XmlRootClass
|
||||
from serviceitem import ServiceItem
|
||||
from eventreceiver import Receiver
|
||||
|
||||
__all__ = ['PluginConfig', 'Plugin', 'PluginUtils', 'SettingsTab', 'MediaManagerItem', 'Event',
|
||||
'XmlRootClass', 'ServiceItem']
|
||||
'XmlRootClass', 'ServiceItem', "Receiver"]
|
||||
|
60
openlp/core/lib/eventreceiver.py
Normal file
60
openlp/core/lib/eventreceiver.py
Normal file
@ -0,0 +1,60 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
OpenLP - Open Source Lyrics Projection
|
||||
Copyright (c) 2008 Raoul Snyman
|
||||
Portions copyright (c) 2008 Martin Thompson, Tim Bentley,
|
||||
|
||||
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; version 2 of the License.
|
||||
|
||||
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, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
"""
|
||||
|
||||
from PyQt4.QtCore import *
|
||||
|
||||
class EventReceiver(QObject):
|
||||
"""
|
||||
Class to allow events to be passed from different parts of the system.
|
||||
This is a private class and should not be used directly but via the Receiver class
|
||||
"""
|
||||
def __init__(self):
|
||||
QObject.__init__(self)
|
||||
|
||||
def send_repaint(self):
|
||||
self.emit(SIGNAL("openlprepaint"), None)
|
||||
|
||||
def received(self, msg=None):
|
||||
print msg
|
||||
|
||||
class Receiver():
|
||||
"""
|
||||
Class to allow events to be passed from different parts of the system.
|
||||
This is a static wrapper arounf the EventReceiver class.
|
||||
As there is only one instance of it in the systems the QT signal/slot architecture
|
||||
can send messages across the system
|
||||
Send message
|
||||
receiver = Receiver()
|
||||
receiver.send_repaint()
|
||||
|
||||
Receive Message
|
||||
self.receiver = Receiver()
|
||||
QtCore.QObject.connect(self.receiver.get_receiver(),QtCore.SIGNAL("openlprepaint"),<<ACTION>>)
|
||||
"""
|
||||
eventreceiver=EventReceiver()
|
||||
@staticmethod
|
||||
def send_repaint():
|
||||
Receiver.eventreceiver.send_repaint()
|
||||
@staticmethod
|
||||
def receive():
|
||||
Receiver.eventreceiver.receive()
|
||||
@staticmethod
|
||||
def get_receiver():
|
||||
return Receiver.eventreceiver
|
||||
|
@ -116,12 +116,6 @@ class Plugin(object):
|
||||
"""
|
||||
pass
|
||||
|
||||
def add_repaint_main_window(self, repaint_main_window):
|
||||
"""
|
||||
Create ability to repaint main window.
|
||||
"""
|
||||
self.repaint_main_window = repaint_main_window
|
||||
|
||||
def get_settings_tab(self):
|
||||
"""
|
||||
Create a menu item and add it to the "Import" menu.
|
||||
|
@ -114,8 +114,3 @@ class PluginManager(object):
|
||||
|
||||
def hook_handle_event(self, event):
|
||||
pass
|
||||
|
||||
def hook_repaint_main_window(self, repaint_main_window):
|
||||
for plugin in self.plugins:
|
||||
plugin.add_repaint_main_window(repaint_main_window)
|
||||
|
||||
|
@ -24,4 +24,5 @@ from alertform import AlertForm
|
||||
from settings import SettingsDialog
|
||||
from mainwindow import MainWindow
|
||||
|
||||
|
||||
__all__ = ['SplashScreen', 'AboutForm', 'AlertForm', 'SettingsDialog', 'MainWindow']
|
||||
|
@ -18,12 +18,14 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
"""
|
||||
import os
|
||||
|
||||
from time import sleep
|
||||
from PyQt4 import *
|
||||
from PyQt4 import QtCore, QtGui
|
||||
|
||||
from openlp.core.resources import *
|
||||
from openlp.core.ui import AboutForm, AlertForm, SettingsDialog
|
||||
from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab
|
||||
from openlp.core.lib import Plugin, MediaManagerItem, SettingsTab, Receiver
|
||||
from openlp.core import PluginManager
|
||||
|
||||
class MainWindow(object):
|
||||
@ -37,9 +39,11 @@ class MainWindow(object):
|
||||
pluginpath = os.path.abspath(os.path.join(pluginpath, '..', '..','plugins'))
|
||||
self.plugin_manager = PluginManager(pluginpath)
|
||||
self.setupUi()
|
||||
self.receiver = Receiver()
|
||||
QtCore.QObject.connect(self.receiver.get_receiver(),QtCore.SIGNAL("openlprepaint"),self.repaint)
|
||||
|
||||
def repaint_window(self):
|
||||
self.main_window.update()
|
||||
def repaint(self):
|
||||
self.main_window.repaint()
|
||||
|
||||
def setupUi(self):
|
||||
self.main_window.setObjectName("main_window")
|
||||
@ -122,8 +126,6 @@ class MainWindow(object):
|
||||
self.FileExportMenu.setObjectName("FileExportMenu")
|
||||
# Call the hook method to pull in export menus.
|
||||
self.plugin_manager.hook_import_menu(self.FileExportMenu)
|
||||
# Call the hook method to export refresh.
|
||||
self.plugin_manager.hook_repaint_main_window(self.repaint_window)
|
||||
#
|
||||
self.OptionsMenu = QtGui.QMenu(self.MenuBar)
|
||||
self.OptionsMenu.setObjectName("OptionsMenu")
|
||||
@ -405,6 +407,7 @@ class MainWindow(object):
|
||||
QtCore.QObject.connect(self.ToolsAlertItem, QtCore.SIGNAL("triggered()"), self.onToolsAlertItemClicked)
|
||||
QtCore.QObject.connect(self.OptionsSettingsItem, QtCore.SIGNAL("triggered()"), self.onOptionsSettingsItemClicked)
|
||||
|
||||
|
||||
def retranslateUi(self):
|
||||
self.main_window.setWindowTitle(QtGui.QApplication.translate("main_window", "openlp.org 2.0", None, QtGui.QApplication.UnicodeUTF8))
|
||||
self.FileMenu.setTitle(QtGui.QApplication.translate("main_window", "&File", None, QtGui.QApplication.UnicodeUTF8))
|
||||
|
@ -25,7 +25,7 @@ from PyQt4.QtCore import *
|
||||
from PyQt4.QtGui import *
|
||||
|
||||
from openlp.core.resources import *
|
||||
from openlp.core.lib import Plugin,PluginUtils, MediaManagerItem
|
||||
from openlp.core.lib import Plugin,PluginUtils, MediaManagerItem, Receiver
|
||||
|
||||
from openlp.plugins.bibles.lib import BibleManager
|
||||
from openlp.plugins.bibles.forms import BibleImportForm
|
||||
@ -48,6 +48,11 @@ class BiblePlugin(Plugin, PluginUtils):
|
||||
#Register the bible Manager
|
||||
self.biblemanager = BibleManager(self.config)
|
||||
self.searchresults = {} # place to store the search results
|
||||
self.receiver = Receiver()
|
||||
QtCore.QObject.connect(self.receiver.get_receiver(),QtCore.SIGNAL("openlprepaint"),self.repaint)
|
||||
|
||||
def repaint(self):
|
||||
self.MediaManagerItem.repaint()
|
||||
|
||||
def get_media_manager_item(self):
|
||||
# Create the MediaManagerItem object
|
||||
@ -251,9 +256,6 @@ class BiblePlugin(Plugin, PluginUtils):
|
||||
def onBibleAddClick(self):
|
||||
pass
|
||||
|
||||
def refresh(self):
|
||||
self.repaint_main_window()
|
||||
|
||||
def reload_bibles(self):
|
||||
self.biblemanager.reload_bibles()
|
||||
self._initialise_form()
|
||||
|
@ -16,7 +16,8 @@ from PyQt4.QtGui import QDialog
|
||||
from PyQt4.QtCore import pyqtSignature
|
||||
|
||||
from bibleimportdialog import Ui_BibleImportDialog
|
||||
from openlp.core.lib import PluginUtils
|
||||
from openlp.core.lib import PluginUtils, Receiver
|
||||
|
||||
|
||||
class BibleImportForm(QDialog, Ui_BibleImportDialog, PluginUtils):
|
||||
global log
|
||||
@ -36,10 +37,16 @@ class BibleImportForm(QDialog, Ui_BibleImportDialog, PluginUtils):
|
||||
self.bibleplugin = bibleplugin
|
||||
self.bibletype = None
|
||||
self.barmax = 0
|
||||
self.receiver = Receiver()
|
||||
|
||||
QtCore.QObject.connect(self.LocationComboBox, QtCore.SIGNAL("activated(int)"), self.onLocationComboBox)
|
||||
QtCore.QObject.connect(self.TypeComboBox, QtCore.SIGNAL("activated(int)"), self.onTypeComboBox)
|
||||
QtCore.QObject.connect(self.BibleComboBox, QtCore.SIGNAL("activated(int)"), self.onBibleComboBox)
|
||||
QtCore.QObject.connect(self.ProgressBar, QtCore.SIGNAL("valueChanged(int)"), self.on_ProgressBar_changed)
|
||||
QtCore.QObject.connect(self.receiver.get_receiver(),QtCore.SIGNAL("openlprepaint"),self.on_ProgressBar_changed)
|
||||
|
||||
def on_ProgressBar_changed(self):
|
||||
self.repaint()
|
||||
|
||||
@pyqtSignature("")
|
||||
def on_VersesFileButton_clicked(self):
|
||||
@ -121,6 +128,7 @@ class BibleImportForm(QDialog, Ui_BibleImportDialog, PluginUtils):
|
||||
if self.biblemanager != None:
|
||||
if not self.bibletype == None or len(self.BibleNameEdit.displayText()) > 0:
|
||||
self.MessageLabel.setText("Import Started")
|
||||
self.ProgressBar.setMinimum(0)
|
||||
self.ProgressBar.setValue(0)
|
||||
self.progress = 0
|
||||
self.biblemanager.process_dialog(self)
|
||||
@ -132,21 +140,20 @@ class BibleImportForm(QDialog, Ui_BibleImportDialog, PluginUtils):
|
||||
self.close()
|
||||
|
||||
def setMax(self, max):
|
||||
log.debug("set Max %s", max)
|
||||
self.barmax = max
|
||||
self.ProgressBar.setMaximum(max)
|
||||
|
||||
def incrementBar(self, text = None):
|
||||
print self.progress, text, self.barmax
|
||||
if text != None:
|
||||
self.MessageLabel.setText("Import processed " + text)
|
||||
else:
|
||||
self.MessageLabel.setText("Import progressing")
|
||||
def incrementBar(self, text ):
|
||||
log.debug("IncrementBar %s", text)
|
||||
self.MessageLabel.setText("Import processing " + text)
|
||||
self.progress +=1
|
||||
self.ProgressBar.setValue(self.progress)
|
||||
#self.update()
|
||||
self.bibleplugin.refresh()
|
||||
print self.ProgressBar.value()
|
||||
print text + " " + str(self.progress)
|
||||
|
||||
def _import_bible(self):
|
||||
log.debug("Import Bible ")
|
||||
if self.bibletype == "OSIS":
|
||||
self.biblemanager.register_osis_file_bible(str(self.BibleNameEdit.displayText()), self.OSISLocationEdit.displayText())
|
||||
elif self.bibletype == "CSV":
|
||||
|
@ -62,7 +62,7 @@ class BibleDBImpl(BibleCommon):
|
||||
self._load_testament("Apocrypha")
|
||||
|
||||
def add_verse(self, bookid, chap, vse, text):
|
||||
log.debug( "add_verse %s,%s,%s", bookid, chap, vse)
|
||||
#log.debug( "add_verse %s,%s,%s", bookid, chap, vse)
|
||||
metadata.bind.echo = False
|
||||
session = self.session()
|
||||
verse = Verse()
|
||||
|
@ -17,6 +17,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
"""
|
||||
import logging
|
||||
from openlp.plugins.bibles.lib.bibleDBimpl import BibleDBImpl
|
||||
from openlp.core.lib import Receiver
|
||||
|
||||
class BibleOSISImpl():
|
||||
global log
|
||||
@ -27,6 +28,7 @@ class BibleOSISImpl():
|
||||
self.booksOfBible = {} # books of the bible linked to bibleid {osis , name}
|
||||
self.abbrevOfBible = {} # books of the bible linked to bibleid {osis ,Abbrev }
|
||||
fbibles=open(biblepath+"/osisbooks_en.txt", 'r')
|
||||
self.receiver = Receiver()
|
||||
for line in fbibles:
|
||||
p = line.split(",")
|
||||
self.booksOfBible[p[0]] = p[1].replace('\n', '')
|
||||
@ -38,6 +40,7 @@ class BibleOSISImpl():
|
||||
|
||||
book_ptr = None
|
||||
id = 0
|
||||
count = 0
|
||||
verseText = "<verse osisID="
|
||||
testament = 1
|
||||
for f in osis.readlines():
|
||||
@ -74,15 +77,21 @@ class BibleOSISImpl():
|
||||
if book_ptr != p[0]:
|
||||
if book_ptr == None: # first time through
|
||||
if p[0] == "Gen": # set the max book size depending on the first book read
|
||||
dialogobject.setMax(66)
|
||||
dialogobject.setMax(65)
|
||||
else:
|
||||
dialogobject.setMax(27)
|
||||
if p[0] == "Gen":
|
||||
if p[0] == "Matt": # First book of NT
|
||||
testament += 1
|
||||
book_ptr = p[0]
|
||||
book = self.bibledb.create_book(self.booksOfBible[p[0]] , self.abbrevOfBible[p[0]], testament)
|
||||
dialogobject.incrementBar(self.booksOfBible[p[0]] )
|
||||
self.receiver.send_repaint() # send repaint message to dialog as book changed
|
||||
count = 0
|
||||
self.bibledb.add_verse(book.id, p[1], p[2], t)
|
||||
count += 1
|
||||
if count % 100 == 0: #Every x verses repaint the screen
|
||||
self.receiver.send_repaint() # send repaint message to dialog
|
||||
count = 0
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user