Merge lp:~meths/openlp/trivialfixes into lp:openlp

Proposed by Jon Tibble
Status: Superseded
Proposed branch: lp:~meths/openlp/trivialfixes
Merge into: lp:openlp
Diff against target: None lines
To merge this branch: bzr merge lp:~meths/openlp/trivialfixes
Reviewer Review Type Date Requested Status
Tim Bentley Approve
Raoul Snyman Approve
Review via email: mp+12184@code.launchpad.net

This proposal supersedes a proposal from 2009-09-21.

This proposal has been superseded by a proposal from 2009-09-21.

To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote : Posted in a previous version of this proposal

Some looks go but some is bad.
Lines 21-28 etc make the code more unreadable.
Readability is vital

review: Needs Fixing
Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

Mostly fine.

review: Approve
Revision history for this message
Tim Bentley (trb143) wrote :

Lot better some still not sure about

review: Approve
lp:~meths/openlp/trivialfixes updated
563. By Jon Tibble

Coding Standards

564. By Tim Bentley

Best merge ever

565. By Tim Bentley

Audit changes and clean up

566. By Jonathan Corwin

Merge from lp:~j-corwin/openlp/presentations

567. By Jon Tibble

Code clean ups

568. By Tim Bentley

Audit Changes to database

569. By Jonathan Corwin

Merge from lp:~j-corwin/openlp/presentations

570. By Jon Tibble

PPTViewer fixes

571. By Jon Tibble

Imports clean up

572. By Tim Bentley

Plugin changes to Audit, Song and Custom

573. By Jon Tibble

None testing and clean ups

574. By Tim Bentley

Plugin updates

575. By Jonathan Corwin

Jons Presentation merge with hack to fix conflicts

576. By Tim Bentley

Audit changes and cleanups

577. By Jonathan Corwin

Presentation merge with gotos

578. By Jon Tibble

Fix presentation starting

579. By Jon Tibble

Use buildIcon and fixes

580. By Tim Bentley

Style cleanups

581. By Jonathan Corwin

Presentations made it at last

582. By Jonathan Corwin

Presentation dll

583. By Tim Bentley

Start of about Text

584. By Jon Tibble

Dialogs, Exceptions and Toolbars

585. By Tim Bentley

Update PluginList Window

586. By Jonathan Corwin

Presentation updates

587. By Tim Bentley

Add Ability to hide plugins

588. By Jonathan Corwin

More Presentation improvements

589. By Tim Bentley

More hiding code changes

590. By Tim Bentley

Fix song issue

591. By Jon Tibble

Presentation cleanups

592. By Jon Tibble

Bible rendering fixes

593. By Tim Bentley

Apply fixes for Jon

594. By Raoul Snyman

Merged in lp:~raoul-snyman/openlp/pluginlist

595. By Tim Bentley

Plugin hinding comes to town

596. By Jonathan Corwin

More Presentation fixes

597. By Tim Bentley

Various changes and fixes

598. By Jonathan Corwin

TLC for the asv

599. By Raoul Snyman

Merged in lp:~raoul-snyman/openlp/versionfix

600. By Tim Bentley

Add Web Bibles to Advanced Tab and other nice features

601. By Jonathan Corwin

Presentation changes

602. By Tim Bentley

Update config files for deployment

603. By Tim Bentley

Changes to settings and SlideController handling

604. By Jon Tibble

Python 2.5 fixes

605. By Raoul Snyman

Merged in lp:~raoul-snyman/openlp/uifixes

606. By Raoul Snyman

Merge from lp:~raoul-snyman/openlp/uifixes

607. By Jonathan Corwin

Merged in lp:~j-corwin/openlp/present

608. By Raoul Snyman

Merged lp:~raoul-snyman/openlp/uifixes

609. By Tim Bentley

Theme Image and Presentation fixes

610. By Jon Tibble

General fixes

611. By Tim Bentley

General Tab Changes

612. By Jonathan Corwin

Merged tweaks to openlpcnv.pyw

613. By Raoul Snyman

Merge from lp:~raoul-snyman/openlp/converter

614. By Raoul Snyman

Fix Slide Controller look and feel

615. By Raoul Snyman

Fix Bible Media manager look and feel

616. By Jonathan Corwin

Presentation fixes for Impress

617. By Tim Bentley

Bible Fixes

618. By Tim Bentley

Theme features - wrap indentation and lines per slide

619. By Tim Bentley

Font Sizing and rendering improvements

620. By Jonathan Corwin

Presentations Impress mini display

621. By Raoul Snyman

Merge from lp:~raoul-snyman/openlp/i18n

622. By Jon Tibble

Fix imports and config item

623. By Tim Bentley

Song editing from Preview, bible fixes

624. By Jon Tibble

Fix imports and typo

625. By Tim Bentley

fix up song edit from preview

626. By Jonathan Corwin

More presentation fixes

627. By Tim Bentley

Save and preview + dynamic theme changing

628. By Raoul Snyman

Fix slide controller look and feel

629. By Raoul Snyman

Fix i18n issues

630. By Tim Bentley

Move Audit to SongUsage , Return of BibleGateway part1. Additions to SlideController

631. By Tim Bentley

Add more bible sources and improve handling

632. By Jon Tibble

Fix plugintabs i18n

633. By Jon Tibble

Fix i18n and cleanup for New Theme

634. By Tim Bentley

Edit Songs and Custom for Service Manager and auto replace

635. By Jon Tibble

Fix i18n for mediaitems

636. By Jon Tibble

Fix unnecessary screen setup

637. By Tim Bentley

Minor fixes

638. By Jon Tibble

Fix theme editing, copyright and song icon

639. By Jon Tibble

Plugin fixes, cleanups and i18n

640. By Tim Bentley

Fixes to Renderer etc

641. By Tim Bentley

Remote Song Editing Finished - minor other changes

642. By Jon Tibble

Fix typos

643. By Tim Bentley

Fix up editing code from Preview and ServiceManager

644. By Raoul Snyman

Fix up converter

645. By Tim Bentley

Clean up the version code and remove not required file

646. By Tim Bentley

Media is starting to work - just

647. By Jon Tibble

Fix mediaitem translation

648. By Jon Tibble

Enable consecutive video playing

649. By Tim Bentley

Minor fixes and copyright

650. By Tim Bentley

Merge it right this time

651. By Jon Tibble

Single monitor display hiding

652. By Jon Tibble

Cleanups

653. By Tim Bentley

Expansion and Song editing fixes

654. By Tim Bentley

Fix song editing error messages

655. By Jon Tibble

Various cleanups and fixes

656. By Jon Tibble

More fixes

657. By Raoul Snyman

Merged in display fixes from lp:~raoul-snyman/openlp/fixes

658. By Jon Tibble

Clean theme handling

659. By Tim Bentley

Remote editing for custom and theme fix

660. By Jon Tibble

Fix file handling

661. By Tim Bentley

Plugin clean ups

662. By Jonathan Corwin

Presentation fixes

663. By Tim Bentley

SlideController cleanups

664. By Tim Bentley

Fix bugs in theme and slidecontroller

665. By Tim Bentley

Clean up slidecontroller

666. By Tim Bentley

Add media Preview code

667. By Tim Bentley

Change version number

668. By Jon Tibble

Unicode and import fixes

669. By Tim Bentley

Slide Controller cleanups and Media bug fixes

670. By Jon Tibble

Cleanups and fixes

671. By Raoul Snyman

Merged in lp:~raoul-snyman/openlp/bitsandbobs

672. By Raoul Snyman

Updated version.txt

673. By Tim Bentley

Refactor Service Item and clean up Slide Controller

674. By Michael Gorven

Merge get-strings: Improve regex to extract translation strings.
https://code.launchpad.net/~mgorven/openlp/get-strings/+merge/15120

675. By Tim Bentley

Updates to the Renderer and impose minimum slide width

676. By Raoul Snyman

Merge from lp:~raoul-snyman/openlp/bitsandbobs

677. By Michael Gorven

Merge lp:~mgorven/openlp/get-strings-ast: Use AST module to parse code and extract translation strings.
https://code.launchpad.net/~mgorven/openlp/get-strings-ast/+merge/15328

678. By Raoul Snyman

Merged in lp:~raoul-snyman/openlp/i18n

679. By Tim Bentley

Verse tagging changes etc

680. By Tim Bentley

Add verse expansion from song plugin

681. By Tim Bentley

Cannot type

682. By Raoul Snyman

Merge from lp:~raoul-snyman/openlp/bitsandbobs

683. By Michael Gorven

Merge lp:~mgorven/openlp/copyright-symbol: Fix copyright symbol in translation strings.
https://code.launchpad.net/~mgorven/openlp/copyright-symbol/+merge/15399

684. By Tim Bentley

Verse Tagging

685. By Tim Bentley

Merge from lp:~trb143/openlp/cleanup

686. By Tim Bentley

Fix Theme handling so Song level works again

687. By Tim Bentley

Fix Theme tab handling

688. By Tim Bentley

Fix bibles and themes

689. By Tim Bentley

Presentation, Custom , bug fixes

690. By Tim Bentley

Add Shadow and Outline options to Themes

691. By Tim Bentley

Fix bug stopping Custom editing

692. By Raoul Snyman

Merged in OpenSong/Bible importer branch.

693. By Raoul Snyman

Merge in changes from lp:~raoul-snyman/openlp/biblesplugin

694. By Raoul Snyman

Updated the copyright.

695. By Tim Bentley

Changes to:
 Alerts so they wait before being displayed
 Presentations so they work correctly
 Themes so the blank line is removed
 Rendering so the correct size is used
 Themes are cached so theme manager loads quicker

Various other fixes

696. By Tim Bentley

More Fixes for Presentations
Fix screen blanking so resets for Video
Fix screen blanking so it does not remember at start up if set by presentations and video.
Fix Pop ups so they display on correct monitor

697. By Raoul Snyman

New version 1 -> 2 Bible converter script.

698. By Tim Bentley

Display updates, Song Usage fixes, Theme display fixes

699. By Tim Bentley

Changes to presentations to allow smart file selection
Fix ServiceManager to load / save services.
Add start of filtering to allow Services to handle presentations where the player is missing
Add debugging to try and sort out Impress crashes.

700. By Raoul Snyman

Some major work on the Bibles plugin:
 - Reworked import system to make it pluggable.
 - Created a Bible Import Wizard.
 - Converted Crosswalk to use BeautifulSoup.
 - Merged HTTP and DB Bible list.
 - Made all Bibles descend from BibleDB.
 - Lots of other changes and fixes.

701. By Tim Bentley

Fix up notification on startup
Fix alerts for presentations
Fix remote client so works better
Add extra key strokes for display of songs

702. By Tim Bentley

Fix Presentation file filter
Fix Cancel for song verse editor

703. By Tim Bentley

Fix number of song verses. > 10

704. By Tim Bentley

Fix theme import bug

705. By Tim Bentley

Fix SongUsage Dialog so should be complete
Minor bug fixes discovered and fixed.
Alerts - Major refactor
* Make a plugin
* Move code from maindisplay into plugin
* Add Location , Font size and History option to Font Tab and fix code to use them
* Add button to Alert Tab to allow History to be edited
* Amend Alert screen to be able to use History if option set
* Build screen to allow alerts to be Added / Edited and Deleted.

706. By Jonathan Corwin

A couple of small changes to get powerpoint+viewer working.

707. By Tim Bentley

Fix displayAlert error
Fix UTF8 settings on SongUSage dialog

708. By Jonathan Corwin

A few more small presentation fixes/cosmetics.

709. By Raoul Snyman

Updated version.txt to the latest revision.

710. By Raoul Snyman

Moved the log file to a location that OpenLP can write to as an unpriviledged user.

711. By Jon Tibble

Import and theme importing fixes

712. By Raoul Snyman

Cleaned up setup.py file, so that a source distribution is possible, and also packages can be built.

713. By Michael Gorven

Add menu entry .desktop file and some source tarball and script fixes.
https://code.launchpad.net/~mgorven/openlp/menu-entry/+merge/19978

714. By Tim Bentley

Fix Presentation Tag and flush Renderer cache on re-paint

715. By Raoul Snyman

Trying to set a tag on trunk.

716. By Tim Bentley

Add HTTP Check to Thread to stop UI blocking at startup
Add Preview option for songs etc from service manager

717. By Tim Bentley

Fix lost text on Song editing
Fixed Display on SlideController
Fixed bugs in last merge
Cleaned up comments and some log debug statements.

718. By Tim Bentley

Automate Media type list from phonon

719. By Raoul Snyman

Added some more icons.

720. By Jonathan Corwin

Split live/preview presentation documents, plus fixes for Windows

721. By Raoul Snyman

A fix to the OSIS importer, and added the version file.

722. By Raoul Snyman

Create the config directory if it doesn't exist yet, in order to save the log file.

723. By Tim Bentley

Cleaned up logging code
Added code to stop themes in use being deleted
Added Service Notes to service items
Fixed ServiceManager context menu so it works based on the item selected
Various minor bug fixes
Fix up bug for Theme savings and OOS

724. By Jonathan Corwin

Presentations:
- Close presentation app down correctly
- Add mode to automatically detect file type

725. By Tim Bentley

Add indication if service item has notes
Add display of notes as Tooltip

726. By Tim Bentley

Remove version tag

727. By Tim Bentley

Fix serviceItem expansion on repaint
Add ALL to Images file filter
Add Icon overlay to serviceItem when we have notes.

728. By Raoul Snyman

Fixed up some problems and inadvertant bugs from the move of the "get-strings.py" file to the scripts directory.

729. By Tim Bentley

ServiceManager fixes

730. By Raoul Snyman

Windows modifications:
- Added Windows build files.
- Added Windows installer files.
- Modified the tabs in the media manager to look a little better on both Windows and Linux.
- Windows icon.

731. By Jon Tibble

Truth test and C style cleanups

732. By Raoul Snyman

Fix "red letter" versions of Crosswalk Bibles.

733. By Jonathan Corwin

Fix issues regarding the blank button for presentations and added methods to extract presentation text and notes for use in the future.

734. By Tim Bentley

Refactor renderer to do outline correctly
Add removal of footer for blank screens
Fix song edit bug allowing preview to be triggered.

735. By Tim Bentley

Fix text strings and new verse tag

736. By Raoul Snyman

Added some icons.

737. By Raoul Snyman

Fixed up Mac OS X detection

--------------- This line and the following will be ignored --------------

modified:
  openlp.pyw
  openlp/core/utils/__init__.py
pending merges:
  Raoul Snyman 2010-03-12 - Fixed up Mac OS X detection

738. By Raoul Snyman

Added various fixes for the Windows build.

739. By Tim Bentley

Text string fixes

740. By Raoul Snyman

Various fixes in the Bibles plugin to get Bibles working correctly in the Windows build.

741. By Tim Bentley

Fix ServiceManager drag and drop`
Fix rendering size issues
Fix screen sizes following display changes

742. By Tim Bentley

Fix blank screen color
Fix save and cancel of services
Fix tool shortcut
add a filter to the save dialog - "OpenLP Service Files (*.osz)

743. By Raoul Snyman

Merged in some translation fixes.

744. By Raoul Snyman

Some fixes in the Bible plugin.

745. By Jon Tibble

Cleanups

746. By Jon Tibble

AppLocation.PluginsDir changes

747. By Raoul Snyman

Fixed the BibleGateway importer.

748. By rimach

Make the "Blank" button work.

749. By Raoul Snyman

Fixed a bug where failed/cancelled imported Bible files are not deleted.

750. By Tim Bentley

Fix NONE appearing as song verses
Delay the hidden window display
Fix missing add status for custom slides

751. By Raoul Snyman

Bug fixes for the Bible imports.

752. By Tim Bentley

Stop double loading of Service items from service manager unless triggered by remote edit.

753. By Raoul Snyman

Being overzealous about unicode.

754. By Raoul Snyman

Various fixes to the Bibles plugin.

755. By Raoul Snyman

Add Christian and Phill to the credits

756. By Raoul Snyman

Bugfixes in Bibles.

757. By Raoul Snyman

Change the "Live" icon.

758. By Jonathan Corwin

Fixed a bug with transparent backgrounds.

759. By Jonathan Corwin

Fix up the bible migration.

760. By Raoul Snyman

Changes:
- Changed the "New" icon to an "Import" icon for the Bibles plugin.
- Consolidated icons to make the resources file a little smaller.
- A few other small tweaks.

761. By Jonathan Corwin

Close down presentation apps at end correctly

762. By Jon Tibble

Unused variable and import fixes

763. By Jon Tibble

Change loop method and remove unused variables

764. By Tim Bentley

Add enter to quick bible edit field

765. By Raoul Snyman

Fixed two bugs in the web downloads import dealing with non-latin characters.

766. By Raoul Snyman

Start presentation apps in right place.

767. By Tim Bentley

Fix bug for PyTQ4.4

768. By Michael Gorven

Correct .desktop file syntax so that rpmbuild doesn't fail.
https://code.launchpad.net/~mgorven/openlp/desktop-file-rpmbuild/+merge/22231

769. By Tim Bentley

Fix text outlines

770. By Raoul Snyman

Update the credits.

771. By Raoul Snyman

Fixed a bug with Strongs in CrossWalk.

772. By Raoul Snyman

Fix to deal with "X.Y.Z" style version (i.e. without the "-bzrXXX").

773. By Raoul Snyman

Fixed the "Bible" item in the "Import" menu.

774. By Tim Bentley

Fix dates

775. By Raoul Snyman

Bible fixes:
 - Red letter text on CrossWalk import.
 - Removed text on web download progress, moved to an "indeterminable" progress style.
 - Some unicode optimisations.

776. By Raoul Snyman

Tag the 1.9.1 release.

777. By Tim Bentley

* Refactor the Alerts plugin and remove an un-needed screen
* Fix saving serviceitems from manager so data is saved correctly(not backward compatible)
* Clean up the Editing code for Songs so Editall works better
* Add missing icons to slidecontroller for theme and hide. (Restore does not work yet!)
* Add ability to add to existing service items for images and bibles
* Add ability to reorder leaves within serviceitems (Images only)
* Refactor the dynamic image replacement code in plugins
* Allow multiple images to be deleted from plugin
* Add more items to context menus.

778. By Jon Tibble

Import cleanups

779. By Raoul Snyman

Fixed a broken import.

780. By Tim Bentley

Fix media path bug

781. By Raoul Snyman

Added images I forgot to add when I cleaned up the images a little.

782. By Jonathan Corwin

Songs of Fellowship song import

783. By Tim Bentley

Display handling cleanups and changes to service item flags

784. By Tim Bentley

Remove old files. Clean up verse tags part 1

785. By Jonathan Corwin

Songs of Fellowship fixes
Multiple song delete from media manager

786. By Tim Bentley

Add multi add to service manager and check image previews

787. By Raoul Snyman

Some fixes to the songs converter script.

788. By Jonathan Corwin

Tidy up song database, and add Arky Arky!

789. By Tim Bentley

Fedora packaging fixes

790. By Tim Bentley

Add time to more service item types
Add video slider bar to preview.
Change hide live to transparent live!
Split video out to own display so text over video can work.
Number of other bugs fixed.
Custom editor has slide split button now

791. By Raoul Snyman

Fix version problems.

792. By Jon Tibble

Import and line ending fixes

793. By Jonathan Corwin

General purpose OOo writer/impress (Word/PPT) import
plus fix for systems without OOo

794. By mahfiaz

Fixed up the loading and saving of non-ascii values to the config file.

795. By Raoul Snyman

dded autocompletion to the authors, topics, songbooks and themes.

796. By Tim Bentley

Alert manager cleanups
Improvements in video display

797. By Jon Tibble

Import fixes and typo

798. By Tim Bentley

Alert manager cleanups
Presentation icons
Detect missing files and change icon

799. By Jonathan Corwin

Refactor signal/slot names for consistency and to remove plugin specifics from core.

800. By Jon Tibble

QSettings, recent files and UI saving

801. By Jon Tibble

Help -> Website and disable unimplemented options

802. By Jon Tibble

Consistency fixes

803. By Tim Bentley

Fix the hide buttons so they work for text and videos. Presentations needs looking at!
Fix presentations so they work
Add new attribute to themes so line spacing can be adjusted bigger and smaller
Alerts over videos now works correctly.
Add new setting so Text frames can be sized and positioned for use where a monitor is different size to the final output.

804. By Tim Bentley

Text over video arrives to OpenLP

805. By Jon Tibble

Coding standards fixes

806. By Tim Bentley

Fix loop in ending video to stop crashes.
Add comments
rename _frame and _frameOP

807. By Jonathan Corwin

Remote operation via web

808. By Tim Bentley

Fix Presentations and add DnD to serviceitem updates

809. By Tim Bentley

Fix bible spelling in database

810. By Raoul Snyman

Documentation!

811. By Jonathan Corwin

Remotes: support more filetypes and subfolders for web
presentation_hide signal support

812. By Tim Bentley

Correctly default initial display on 1st setup
Stop timer on New service Item
Stop serviceitems being played if no player available.

813. By Martin Thompson

Merged from mjthompson/qt4.4

814. By Tim Bentley

Turbo change the screen renderer by adding a cache
Fix names which are incorrect

815. By Martin Thompson

Fixed crash when non-existent monitor is called for in OpenLP.conf

816. By rimach@siduxbox

Add translations and update the code to accept them/use them

817. By andreas@andypc

Fix bug in bibles with 2 bible displays

818. By Tim Bentley

Clean up slide controllers so they display right
Fix screen hight.
Fix renderer so the footer is not line width adjusted.
Various other cleanups

819. By Raoul Snyman

Merged in lp:~raoul-snyman/openlp/song-import
- Removed menu items to import and export dialogs that don't work
- Added the new song Import Wizard
- Reworked the Edit Verse dialog

820. By Tim Bentley

Verse editor cleanups

821. By Jon Tibble

Unused import and variable fixes

822. By Raoul Snyman

Some fixes for the Windows build.

823. By Tim Bentley

Fix memory leak and improve slide controller tags

824. By Raoul Snyman

Created a Windows build script to help automate the building of Windows installers for OpenLP.

825. By Raoul Snyman

Better version checking.

826. By Jon Tibble

Many varied cleanups

827. By andreas@andypc

Now the footer displays both bible versions and their copyright in dual bible view. Also made another small fix (in rev827): "Permission" -> "Permissions"

828. By Raoul Snyman

Some more tweaks and fixes to the Windows builder script.

829. By Jon Tibble

Refactor BaseModel

830. By mahfiaz

Estonian translation

831. By Jon Tibble

Import, exception, naming and whitespace cleanups

832. By Meinert Jordan <email address hidden>

QString to Unicode conversions.

833. By Tim Bentley

Amend verse tagging code for translations

834. By Meinert Jordan <email address hidden>

Fix Qstring bug
Update Combo code

835. By Jon Tibble

Catch correct exception type

836. By frodus@frodus-laptop

Cleaned up the whole tree by replacing all trUtf8() with translate() function

837. By Jon Tibble

Cleanups

838. By Jon Tibble

Cleanups and fixes:
* PEP8 type checking
* Fix theme export breakage
* Naming and whitespace

839. By Jon Tibble

Remove and refactor:
* Remove old song import/export forms
* Refactor theme migration method
* Refactor duplicationed code

840. By Jon Tibble

DocStrings

841. By Jon Tibble

Move VerseType to lib

842. By Raoul Snyman

Tidied up the UI of the Song Maintenance Dialog to make it look good on all OSes.

843. By Tim Bentley

Fix problems with screen blanking

844. By Jon Tibble

Various cleanups:
* Fix bible runtime location
* Naming fixes
* Move addToServiceItem
* Fix db settings location

845. By Jon Tibble

Fix QColorDialog usage

846. By Jon Tibble

Revert resources location patch

847. By Meinert Jordan

Various i18n fixes.

848. By Jonathan Corwin

Fix opening and displaying of presentations

849. By Frode Woldsund

Complete trUtf8 -> translate conversion

850. By Jon Tibble

Bible search fix
Edit and Delete feedback for Media Manager Items
Fix Bible Import Wizard setField errors
Fix addToServiceItem locations
Remove unused scripts/get-strings.py

851. By Jon Tibble

Import translate in splashscreen.py

852. By Tim Bentley

Fix DND problems with live and cache
Fix bible footers being lost
Fix Image editing losing selection.

853. By Jon Tibble

HTTPBible Verse Count and Bug #595671

854. By Raoul Snyman

Merged in song maintenance improvements.

855. By Raoul Snyman

Some streamlining of the song edit form.

856. By Tim Bentley

Translation updates
Remove Text over video for now.
Fix song editing bug

857. By Frode Woldsund

String Cleanup in MainWindow

858. By Jon Tibble

Complete openlp.migration removal

859. By Meinert Jordan

Unicode for Themes

860. By Jon Tibble

Cleanups

861. By Raoul Snyman

Fix up the available image formats somewhat.

862. By Meinert Jordan

Various fixes in the song edit form, and other places.

863. By Raoul Snyman

Fix bug #596506 and bug #596505

864. By Jon Tibble

Cleanups

865. By Tim Bentley

Fix bug #596821

866. By Raoul Snyman

Updated the majority of the translate() functions.

867. By Tim Bentley

Translation string updates

868. By Jonathan Corwin

Bug 596995 - Fix remote plugin via PPA

869. By Jon Tibble

Stray backslashes and translate() updates

870. By Raoul Snyman

Fix up Theme form parentage.

871. By Frode Woldsund

Another translate() bugfix.

872. By Jon Tibble

* Fix log file location (Bug #596822)
* Script resources generation
* Cleanup long lines

873. By Jon Tibble

Fix version check (Bug #597121)

874. By Tim Bentley

Fix screen blanking when in single screen

875. By rimach

Various improvements to the translation_utils script.

876. By Tim Bentley

Update plugin versions and cleanups

877. By Jon Tibble

Ampersands and item selection checking

878. By Raoul Snyman

Fix bug #595676i, improve the OSIS importer and add source languages from Pootle.

879. By Jon Tibble

Fix check_item_selection

880. By Jonathan Corwin

Presentation tidies

881. By Jonathan Corwin

pptviewlib changes

882. By Raoul Snyman

Fix the song plugin's dependence on OpenOffice.org by conditionally importing the SOF and Generic importers.

883. By Frode Woldsund

Fixed (c) symbol.

884. By Tim Bentley

Stop delete of last Image

885. By Jon Tibble

Docstrings

886. By andreas <andreas@andypc>

ListWidget usability improvement

887. By Jon Tibble

Cleanups

888. By Jonathan Corwin

Bug 596361 and other minor presentation fixes

889. By Jonathan Corwin

sofimport error due to missing uno prevented song plugin loading (osx)

890. By Andreas Preikschat

Improved delete button behaviour.

891. By Raoul Snyman

Fixed up problems with version checking.

892. By Jonathan Corwin

Trap presentation errors when OpenOffice.org is not installed

893. By Jon Tibble

Fix off-by-one saving songs

894. By Jon Tibble

Refactor database code

895. By Tim Bentley

Start of Display changes.
- Move output displays to QGraphicScene's
- Sort out Video display so it works with hiding / displaying #595682
- Move Alerts to Html from Images
- Hide the Service Dropdown when Global Theme is set #596541
- Slidecontroller Button cleanups

896. By Andreas Preikschat

Fixed bug #599066 - Deleting bugs in media manager (custom, media, images, presentations).

897. By Jon Tibble

* Fix theme deletion
* Naming fixes
* Docstrings

898. By Jon Tibble

Docstrings

899. By Jon Tibble

Fix service loading

900. By Raoul Snyman

Added decent images for remotes, alerts and song usage.

901. By Jon Tibble

Fix service loading properly (Bug #600091)

902. By Tim Bentley

Replaceable backgrounds get the HTML treatment.
Sensible Text over video returns.

903. By Raoul Snyman

Change namespace of other plugin icons and make ServiceItems use the plugin's icon instead of some arb image "prediction" that is prone to failure.

904. By Jon Tibble

Database fixes and refactorings

905. By Jon Tibble

Cleanups and sizePolicy refactor

906. By Jon Tibble

Fix song loading and wildcard import

907. By Jon Tibble

Cleanup plugins (Bug #600996)

908. By Tim Bentley

Move video and Image clean ups.
Transitions work again after last merge!

909. By Andreas Preikschat

Some random fix ;-)

910. By Tim Bentley

Name cleanups

911. By Jonathan Corwin

Cleanups and fix PPTViewer dll loading

912. By Phill

Fix up video tag for webkit view.
Remove unused tag

913. By Jon Tibble

Import fix

914. By Jon Tibble

Start XML refactoring

915. By Jon Tibble

Fixes and cleanups

916. By Tim Bentley

Fix up plugin Meths style

917. By Jon Tibble

Fix song saving

918. By Jonathan Corwin

Presentation fixes

919. By Raoul Snyman

Shuffle the menus and add a nice little icon for the plugin list.

920. By Raoul Snyman

Fix up some strings and come bugs in the alerts plugin.

921. By Raoul Snyman

Added View Modes.

922. By Raoul Snyman

Fixed a small bug with one of the toggle menu items.

923. By Jon Tibble

Tweaks and cleanups

924. By Jon Tibble

Refactor view mode code

925. By andreas <andreas@andypc>

Whitespace cleanups

926. By andreas <andreas@andypc>

Naming and whitespace cleanups

927. By Jon Tibble

Big cleanup

928. By Jon Tibble

build_icon fixes

929. By Jon Tibble

AdvancedTab

930. By Jon Tibble

Fix service saving (Bug #603798)

931. By Jon Tibble

Fix recent merge

932. By Jonathan Corwin

Common thumbnails for all presentation types and create when presentation first added

933. By Jon Tibble

Import fixes

934. By Andreas Preikschat

Improve song data integrity

935. By Jon Tibble

Save current media plugin (Bug #596540)

936. By Jon Tibble

Theme backgrounds (Bug #594911)

937. By Jon Tibble

Double click live setting

938. By Jon Tibble

Fix theme editing (Bug #594909 part 1)

939. By Jon Tibble

Fix AdvancedTab layout

940. By Jon Tibble

Fix service save icon method

941. By Raoul Snyman

Removed the display tab, moved options to general tab, plus some cleanups.

942. By Jon Tibble

Fix service save location (Bug #605649)

943. By Andreas Preikschat

Import fix

944. By Phill

Sorted out the show/hide desktop.

945. By Jon Tibble

Use populate() for DB objects

946. By Jon Tibble

Tab Order and Theme fix (Bug #606256)

947. By Jon Tibble

Fix English and alignment

948. By Tim Bentley

Fix text hiding bug with images

949. By Jon Tibble

Fixes and cleanups

950. By Billy Lange

Add confirm before theme delete

951. By Martin Thompson

Merged opensong import branch

952. By Andreas Preikschat

Cleanups and song data merging

953. By Jon Tibble

Save Song Book (Bug #607030)

954. By Andreas Preikschat

Prevent topic and author duplication in songs

955. By Jon Tibble

Fix topic/author adding (Bug #607034)

956. By Jon Tibble

DATABASE SCHEMA CHANGE, fixes and cleanups

957. By Jon Tibble

Fix theme saving and song import. Cleanups

958. By Andreas Preikschat

Fix song authors and books

959. By Jon Tibble

Importer fix

960. By Jonathan Corwin

Bug 608149 - Enable presentation controllers by default, and simplify default workflow

961. By Jonathan Corwin

Presentations no longer blanked when go live, if display not blank

962. By Raoul Snyman

Tweak the display of the media manager items to make them stand out slightly more.

963. By Jon Tibble

DocStrings

964. By Jon Tibble

Fix numbered book BG bibles (Bug #609354)

965. By Raoul Snyman

Going through all the strings and making them decent, user-friendly English.

966. By Raoul Snyman

Fix up a couple of things Jon T found in my previous merge proposal, plus some strings I missed.

967. By Raoul Snyman

Update the copyright notice and the credits.

968. By Tim Bentley

Add display update trigger missed in cleanup

969. By Jon Tibble

Bible refactor & search, getter & setter removal, cleanups

970. By Jon Tibble

Long lines

971. By Raoul Snyman

Fixed a small bug where there was a "u" in the verse label with () brackets.

972. By Jon Tibble

Fix showing screen after black and cleanups

973. By Jon Tibble

Naming fixes & trailing line endings

974. By Jon Tibble

Explicit exception handling

975. By Phill

Fix for bug #609442.

976. By Phill

Moved loop settings to a more appropriate tab, removed image tab as a result.

977. By Jon Tibble

Exception fixes and naming cleanups

978. By Jon Tibble

Refactor reference parsing & remove dead code in Bibles

979. By Jon Tibble

Cleanups

980. By Jon Tibble

Refactors, cleanups and fixes

981. By Phill

A very minor presentation fix. About text for remotes was not going on to next line after heading.

982. By Jon Tibble

Fix alerts and screen resizing

983. By Jon Tibble

Fix last commit

984. By Andreas Preikschat

Disable buttons when no item to act on

985. By Jon Tibble

Work with SQLAlchemy 0.6

986. By Tim Bentley

Fix song usage
Fix 598407

987. By Andreas Preikschat

Dual bible fixes

988. By Raoul Snyman

Changed the openlp-logo.svg file to be a single icon SVG and renamed the original file.

989. By Raoul Snyman

Fixed the icon properly this time.

990. By Raoul Snyman

Now the Song Wizard works, just waiting for the importers to catch up.

991. By Raoul Snyman

Fix a string and update the translation sources.

992. By Jon Tibble

Cleanups and a version check fix

993. By Raoul Snyman

Additional failover for version problems.

994. By Raoul Snyman

I was playing, and somehow it got into trunk :-(. This fixes bug #625183.

995. By Jon Tibble

Update OpenLPv2 song importer

996. By Tim Bentley

Fix theme bug reported on Redhat bugzilla

997. By Tim Bentley

Display and renderer changes

998. By Jon Tibble

Cleanups and song form fix (Bug #612282)

999. By Tim Bentley

Renderer fixes and change theme export suffix

1000. By Raoul Snyman

Only show the display screen on startup if it is not on the primary screen.

1001. By Phill

Adding the Words of Worship importer.

1002. By Derek Scotney <email address hidden>

Add CCLI file importer to song wizard

1003. By Andreas Preikschat

Improved dual Bible handling, fixed some edge-case bugs, including bug #625997.

1004. By Raoul Snyman

Fix for bug #621695.

1005. By Tim Bentley

Fix bugs with renderer

1006. By Jonathan Corwin

Fix {} colour substitutions and problems displaying first slide

1007. By Tim Bentley

Speed up backgrounds by removing images and using CSS instead
move spelling text widget to own file
fix up highlighting of fields for spelling and tagging.

1008. By Jonathan Corwin

Calculate page breaks more accurately, and other HTML/CSS tidies

1009. By Phill

Fix incorrect method

1010. By Phill

Rearranged the screen co-ordinate fields.

1011. By Tim Bentley

Clean up the renderer

1012. By Jonathan Corwin

Size maindisplay to full screen correctly, and eliminate maindisplay scrollbars

1013. By Tim Bentley

Fix bug for song CCLI setting
Fix bug for dual bible tab which was a general settings bug.

1014. By Jonathan Corwin

Hook generic and sof song imports into the wizard

1015. By Tim Bentley

Fix bugs regarding screen blanking

1016. By Tim Bentley

Fix song editing bug

1017. By Raoul Snyman

Merge in the openlp.org 1.x importer.

1018. By Raoul Snyman

Added a simple dialog to display any uncaught exceptions.

1019. By Tim Bentley

Short term fix for 633354
Fix display and text bugs

1020. By Tim Bentley

Proper fix for plugin bug

1021. By Jonathan Corwin

Left+Bottom align footer, and prevent wrapping

1022. By Derek Scotney <email address hidden>

Fix verse numbering

1023. By Raoul Snyman

jQuery-fied the JavaScript, made the interface look a little prettier.

1024. By Jonathan Corwin

Tidy song_import code and fix bug 634771

1025. By Raoul Snyman

Just some behind-the-scenes house keeping.

1026. By Tim Bentley

Fix file permission and correct i18n location

1027. By Jonathan Corwin

Loop video background

1028. By Raoul Snyman

Fixes bug #635330 and attempts to fix bug #635338

1029. By Tim Bentley

Fix code so translations can be found

1030. By Raoul Snyman

Various string-related fixes:
- Removed a bunch of double spaces.
- Renamed the translation files.
- Updated the translation files.
- Fixed up a few widgets.
Also fixed up the layout on the Edit Song form.

1031. By Jon Tibble

Cleanups

1032. By Tim Bentley

Fix whitespace and bugs

1033. By Raoul Snyman

Add in code to display a disabled message if an importer is not available.

1034. By Raoul Snyman

Fix for bug #635515.
Added an option to disable the error form.

1035. By Martin Thompson

Integrated with the song import wizard.
More testcases with synthetic data.
More testing done with more real data.

1036. By Raoul Snyman

Some more fixes for the Windows World:
- Fixed location of .qm files, so that they can be found in a Windows build
- Added PyEnchant to the build process
- Fixed up langaugemanager.py so that it conforms to coding standards

1037. By Raoul Snyman

Attempting to solve bug #635338

1038. By Raoul Snyman

Fixed a spelling error.

1039. By Raoul Snyman

Fix bug #640460.

1040. By Raoul Snyman

Some more spelling/grammatical corrections.

1041. By Jonathan Corwin

String fixes

1042. By Andreas Preikschat

Fixed bug #641734

1043. By Raoul Snyman

Fix for bug #640697

1044. By rimach

Change OpenOffice to use pipes not sockets to resolve slow networking issue. Fix option parsing unicode problem for python 2.5

1045. By Raoul Snyman

Added a method to update the translation files.

1046. By Jonathan Corwin

Rendering speedups/fixes

1047. By Jeffrey Smith

Added a song importer for EasyWorship

1048. By Raoul Snyman

Fixed bug #644106

1049. By rimach <rimach@siduxbox>

Fix translation files

1050. By Raoul Snyman

Update strings.

1051. By Jonathan Corwin

Speed up video loop, and adjust left margin for outline

1052. By Tim Bentley

Update plugin list
Fix ServiceManager
Put splash image back
Fix hide screen bug.

1053. By Andreas Preikschat

This fixes the following bugs and issues:
- Bible items cannot be extended any more
- Dual and single Bible verses cannot be mixed (Media Manager/Service Manager)
- Bible item title in the service manager contains all bible passages (separated by a comma) bug #634533 and bug #609355
- Fixed bug #643783

1054. By Tim Bentley

Remove line breaks in ServiceManager

1055. By Jeffrey Smith

Refactor code for making song import wizard pages.

1056. By rimach

Fixed exception thrown on unchecking 'Auto detect' in languages menu
Fixed saving of language setting
Added pinging of review page in translation_util.py

1057. By Raoul Snyman

Fixed bug #598805 - Song order inconsistency.

1058. By Tim Bentley

Fix crash and optimise display

1059. By Tim Bentley

Update Manifest file

1060. By Jeffrey Smith

Better handling of memo files larger than 16MiB.
Handle blank fields more intelligently.

1061. By Jonathan Corwin

Fix song number/book save and load

1062. By Raoul Snyman

Updated translations.

1063. By Tim Bentley

Update preview text

1064. By Tim Bentley

Theme handling cleanups

1065. By Tim Bentley

Fix merge error

1066. By Andreas Preikschat

Bible code tidy

1067. By Tim Bentley

Fix blank line bug

1068. By Tim Bentley

Fix saved service bug

1069. By rimach

Add Song Beamer importer

1070. By Andreas Preikschat

Fixed up chapter and verse comboboxes for advanced Bible search.
A few other cleanups.

1071. By rimach

Added code for:
- translating the Media Manager and all the content (icons, context menus)
- translating the Plugin List

1072. By Tim Bentley

Allow Service Item to be updated from Song Plugin on Edit

1073. By Phill

Update File load extensions for song imports

1074. By Tim Bentley

Fix duplicate file save bug
Fix Dnd bug

1075. By Tim Bentley

Enhance ServiceItem Expand/Collapse features

1076. By Jonathan Corwin

Option to use phonon or webkit for video. Fix blank to image

1077. By Wesley Stout

Start of Documentation

1078. By Andreas Preikschat

A few things:
- Finished bible "text search" (the search considers all verses which are in the database).
- Comment/doc clean ups.
- Changed "permission" to "permissions" since the database uses "permissions" (changing this is just being consequent).
- Disabled search button while searching.

1079. By Andreas Preikschat

Make sure that the 'edit' and 'delete' buttons are disabled after editing all verses (because no verse is selected).

1080. By Raoul Snyman

Some updates to the documentation:
- Added some more classes to the rST files.
- Fixed up some docstrings to proper rST.

1081. By Raoul Snyman

For us developers... pull the bzr version.

1082. By Raoul Snyman

Moved Windows-specific resources into its own "windows" directory.

1083. By andreas <andreas@andypc>

Revised custom Dialog and new edit form

1084. By Andreas Preikschat

Fix for bug #657694 (lines 8-9)
Enhanced the code (lines 11-29)

1085. By Raoul Snyman

Documentation updates.

1086. By Andreas Preikschat

Fixed a bug in the song editor where the last added verse would revert to the previous verse type.

1087. By Jeffrey Smith

This is a fix for bug #659673

1088. By Wesley Stout

Added the Glossary

1089. By Jonathan Corwin

Warn rather than error if COM Impress controller not available.

1090. By Andreas Preikschat

Code Cleanups

1091. By Raoul Snyman

Updated the image plugin page.
Fixed up Wesley's images.

1092. By Tim Bentley

Alerts work again , image performance improvements

1093. By Raoul Snyman

Rearranged the documentation into two separate parts, the API for developers, and the manual for users.

1094. By Raoul Snyman

Updated documentation.
Renamed some classes and files to match naming conventions.

1095. By Tim Bentley

Fix image but and more path optimisation

1096. By Wesley Stout

Video display Documentation

1097. By Raoul Snyman

Updated the dual monitor stuff with some metadata and got a more recent screenshot of dual monitors on a stock standard Windows XP.

1098. By Jon Tibble

Cleanups

1099. By Jon Tibble

Fix spelling of Samuel (Bug #647931)

1100. By Tim Bentley

Changes to Image processing to improve performance.
Moved image storage for Themes and Image plugins to central cache.
Moved conversion to byte array on to a thread
Built basic thread locking management to cover adding and processing at same time

Presentations and Videos work how that always did.

Cleaned up lots of image size and type conversions.

1101. By Andreas Preikschat

Fixed a traceback after editing a image item in the servicemanager (line 62).
Replaced the up/down button text in ServiceItemEditForm/Dialog with icons.
Rearranged the buttons (delete, <space>, up, down).

1102. By Tim Bentley

Fix saving images in services and correct border code

1103. By Tim Bentley

Bug fixes for
Bug #636835: songs.sqlite will not be downsized when deleting songs
Bug #657307: When working with a saved order of service, saving brings up the save new window instead.
Also renamed Fedora to fedora.

1104. By Tim Bentley

Fix missing media Icon
Speed up Vacuum code.
Fix 1002

1105. By Andreas Preikschat

Fix custom and songusage managers

1106. By Meinert Jordan

Some things from my months old todo list:
- enabling nested docks for more flexible container arrangements
- show the next slide content
- some old UTF8 problems

1107. By Raoul Snyman

Clean up resources folder. Got rid of about 30 megs of stuff we don't use.

1108. By Raoul Snyman

Customisable Shortcuts, Phase 1: View-only list of actions and shortcuts, currently also only the actions in the main window are in the shortcut dialog.

1109. By Tim Bentley

Fix mimetype issues

1110. By Tim Bentley

Fix renderer
Fix Image preview.

1111. By Andreas Preikschat

Changed "songmanager" to "manager"
Fixed a bug which occurs when you click on "Save & Preview" a second time

1112. By Jon Tibble

Lots of cleanups

1113. By Andreas Preikschat

Some small clean ups:
- removed lines at the end of the file (if there were more than one)
- some missing spaces

1114. By Raoul Snyman

Finally get round to doing the "expand all" and "collapse all" icons.

1115. By Tim Bentley

Sort themes when read

1116. By Raoul Snyman

Added a "re-index" tool for repopulating the "search_title" field of songs.

1117. By Raoul Snyman

Found and fixed a bug.

1118. By Tim Bentley

Replace theme editor with wizard.
Revamp theme XML schema
Move theme code to use new schema and auto migrate V2 themes to it.
Revamp V1 import code.
Add two new gradient backgrounds.

1119. By Tim Bentley

Fix blank theme problem
Remove blank check box line.

1120. By Tim Bentley

Fix bug with service item edit ids missing
Fix name format error
Add debugging to help with service load and song edit bugs. Need to see what is happening when we hit them.

1121. By Tim Bentley

Fix video backgrounds and Service Loading with edit

1122. By Jon Tibble

Fix BibleGateway searches for BeautifulSoup 3.1

1123. By Tim Bentley

Update theme code to handle lines per slide label.
Remove extra debugging as Author's now work for song loading from services

1124. By Tim Bentley

Fix spelling

1125. By Wesley Stout

Fixed some errors.
Added a few different formats to the documentation for importing songs.

1126. By Tim Bentley

Remove theme for Images.
Sort out silly ness which requires a restart
Add preview when returning from blank screen.
Fix bug in servicemanager where DnD with nothing present crashes.
Clean up Custom Plugin a bit.

Build OpenLyrics Import / Export for service items so song items can be moved across computermabobs.

1127. By andreas <andreas@andypc>

- docs
- disable "edit" and "delete" button when loading a song or creating a new one (*)

(*) To reproduce this, edit/create a song, select a verse and click "Cancel". When you edit/create another song, the "edit" and "delete" buttons are enabled.

Manually fix conflict in comments on merge (trb143)

1128. By andreas <andreas@andypc>

- added the <u>Underline</u> tag
- clean ups

SongBeamerImport:
- clean ups and tweaks
- fixed a bug which would drop the first line of a verse, when it does not have any "verse type"
- convert SongBeamer's html tags to OpenLP specific style

1129. By andreas <andreas@andypc>

hanged importer messages (Bug #668789)
- disabled text search for web bibles (does not matter if the web bible is the dual or normal bible)
- available web bibles in the bible importer are now sorted
- imported bible in the Media Manager are now sorted
- speed improvements (unfortunately this takes the ability to keep unselected item unselected when doing an other search)
- "second" instead of "dual"
- docs, comments
- added an auto completion for bible books ("Quick Search" Tab; "Verse Search" combo box)

1130. By Tim Bentley

Pylint cleanups
Bug fixing in Themes
Spelling Fix in Songs

1131. By Raoul Snyman

Reworked some of the layout and things of the Theme Wizard.

1132. By Jon Tibble

Fix v2 song importer and various cleanups

1133. By Tim Bentley

Fix Theme Bug text color.
Fix serious spelling error.

1134. By Meinert Jordan

- openlp.org 1.x importer detects the character encoding for the database and shows a inputDialog for correcting the guess.
- prefer UTF-8 encoding for CCLI import
- split song order at consecutive white spaces (it rejected song orders with two consecutive spaces)

1135. By Tim Bentley

Add text entry validator to display positions
Fix Spelling

1136. By Derek Scotney <email address hidden>

Fixes unwanted text imported from some SongSelect files. SongSelect only has a few verse types available for verses and adds extra ones by setting the verse type to 'misc' and then including the actual type on the next line. In the case of a 'misc' type or unknown type, the next line is checked for a valid verse type. The fix has been made for both .txt and .usr file types.

1137. By Andreas Preikschat

Changed the string "Parameter(s)" to "Parameter" because the alerts plugin only supports one parameter.

1138. By Meinert Jordan

Import Wizards don't Stop

1139. By Meinert Jordan

Local aware song order

1140. By Andreas Preikschat

Add OpenLP1 bible importer

1141. By Tim Bentley

Fix song imports with missing Authors

1142. By Andreas Preikschat

- fixed progress bar (bible openlp1 import)
- fixed Bug #688647 (mostly copy&paste)
- fixed "reject" method (the import would not stop, if currentId() == 2/3)
- some songbeamer import tweaks

1143. By Tim Bentley

Add Autocompletion to the Songs Dialog
Fix up some lost and confused Camels

1144. By Meinert Jordan

Additional buttons in the exception dialog for sending a bug report per email or saving it to a file.
The report contains the traceback along with library versions.

The bug report is prefilled with the traceback, the openlp version, platform informations (on Linux also KDE or GNOME), the and the versions of all used libraries.

1145. By andreas <andreas@andypc>

- "Save" button now only saves the alert (if the alert has not created before the save button is disabled). -> the buttons are less confusing
- feedback:
1) If the "alert text" field does not contain "<>" but the parameter field is not empty, then a pop up opens.
2) If the "alert text" field does contain "<>" but the parameter field is empty, a pop up opens.

1146. By Andreas Preikschat

Whitespace cleanup

1147. By Tim Bentley

Fix Custom edit bug

1148. By andreas <andreas@andypc>

White Space Cleanups

1149. By Meinert Jordan

Fix: wrong variable names caused osis and http bible imports to crash
Fix: handle unicode in song search string generation
Fix: replaced tab indentation
regenerate search_lyrics on song reindex action

1150. By Tim Bentley

Fix image bug in service manager

1151. By andreas <andreas@andypc>

- camelCase for Ui_FileRenameDialog
- Fixed bug #690774
- Keep copyright field empty if the imported song (from the service list) does not have any copyright information.

1152. By Meinert Jordan <email address hidden>

Rewritten openlp.plugins.bibles.lib.parse_reference() function.
Localization of bible reference separators.
Non-breaking space between verse numbers and verse text.
Web-Import from bibleserver.com
Replaced commas in title strings of biblegateway.csv => completely updated the file

Two known issues:
The localized separators are still hard coded and need GUI configuration.
Not all of the new bibles are full usable, because OpenLP has still unlocalized code for the book names (applies also to other bible imports like OSIS).

1153. By Tim Bentley

Songs being edited must have an Author
Songs being edited must have text in a verse

1154. By Tim Bentley

Bug #692684: Theme Wizard not updating

1155. By Tim Bentley

Fix config tag error

1156. By Tim Bentley

Remove Bible add to existing setting

1157. By andreas <andreas@andypc>

Fix file extensions

1158. By Andreas Preikschat

Added the "final credit" from version 1.

1159. By Tim Bentley

Fix song saving bug #691952
Fix custom edit bug #693150

1160. By Jon Tibble

Cleanups

1161. By andreas <andreas@andypc>

Add Language files

1162. By Meinert Jordan

Fixed a bug where an author was added to the AuthorsSelectionComboItem without a database entry.

1163. By Tim Bentley

Fix up theme delete / rename validation for now.

1164. By Raoul Snyman

Web interface does not always send all necessary data

1165. By Tim Bentley

Number of theme bug fixes and clean ups
Plugin list is now singular

1166. By andreas <andreas@andypc>

Part of corrections to display sizes

1167. By Tim Bentley

Version and Copyright Year updates

1168. By andreas <andreas@andypc>

Update Language files

1169. By rimach <rimach@siduxbox>

SongBeamer fixes
Correct Song Tab error

1170. By andreas <andreas@andypc>

Fix Slidecontroller sizing

1171. By Tim Bentley

Small style cleanups
Add guards for Presentations / Images / Media which are removed from files system after loading
Fix 694079 on Linux by adding css into build
Add guard to delay exiting as shutting down in middle of a service is not a good idea

1172. By Raoul Snyman

Created a new SearchEdit class, and implemented it in the song search.

1173. By Tim Bentley

Fix up presentation display bugs.

1174. By Andreas Preikschat

This fixes edge cases, where the slidecontrollers will not be updated correctly.

(Make sure, that the Media Manager is on the left side and the Theme and Service Manager on the right hand side.)

1) Hide the Theme Manager by pressing F10
2) Hide the Service Manager by pressing F9 (first case)
3) Increase the size of the slidecontrollers.
4) Show the Service Manager by pressing F9 (second case)

I removed the paintEvent from the slidecontroller and inserted it in mainwindow. I do like it the other way around, but doing it this way fixes the edge cases.

1175. By Jonathan Corwin

Fix missing DesktopScreen: https://bugs.launchpad.net/openlp/+bug/672164/comments/9

1176. By Meinert Jordan <email address hidden>

Theme Wizard the layout was distorted because of several manual formating instructions. I limited all format instructions to the necessary minimum. Furthermore I aligned all QFormLayouts towards each other.
It should contain no functional changes except of bug fixes (traped exceptions).
Some widgets ans slots are renamed for a consistent naming scheme.
Small fixes: removed two consecutive spaces and string introducing double quotes from python code. Edited some log.debug() arguments to avoid UnicodeErrors.

1177. By Meinert Jordan <email address hidden>

While walking through the German translation, I observed a couple of problems in the internationalization. These problems are addressed in this branch. There are very few changed translatable strings but a lot which will be recognized as new from linguist.
I couldn't test all calls in the importers, because I don't have bibles in all formats. But nearly all changes in this request should be obvious.

1178. By Raoul Snyman

Fix the save/save as/etc stuff so that it works properly.

1179. By Raoul Snyman

Fix some bugs I accidentally introduced into trunk.

1180. By Raoul Snyman

Fixed bug #641661

1181. By Tim Bentley

Add a Busy Cursor

1182. By Tim Bentley

Remove excessiove debugging

1183. By Raoul Snyman

Added a step to update from bzr before building.

1184. By Tim Bentley

Fix Song dialog for new songs
Fix Auto Service Opening

1185. By Andreas Preikschat

- fixed adding/appending more images to the Service Manager
- possibility to add/append images to the Service Manager if an image is missing
- prevent that "Replace Live Background" can use a non existing image and prevent replacing the background with more images (as this makes no sense)

1186. By Tim Bentley

Allow the exit conformation dialog to be disabled

1187. By Raoul Snyman

Fixed bug #697271

1188. By Raoul Snyman

Fix for bug #696979

1189. By Meinert Jordan <email address hidden>

Fix Layout of Settings Tab and other dialogs

1190. By Tim Bentley

Fix image error text
Add Guard to video background.
Use new event method to display message
Add Fix for theme editor start up bug.

1191. By Andreas Preikschat

Remove not supported html from songs being imported.

1192. By Meinert Jordan

Nearly everything in this commit is either the renaming of variables or rewriting of the layout. The visible layout change in the dialogs default size is mainly limited to label alignments (for resized dialogs, translated strings or some Themes it might be much more).
Functional changes are:
- Preventing a bug, when no bibles are installed
- Fixing a spelling error in osisbooks.csv
- Showing the 'reset background' buttons only, if the background is really replaced.
- showing a character encoding dialog for the ewimporter
- BibleGateway importer fix for rtl

1193. By Raoul Snyman

Fix some overlooked bugs from the change in the way service files are saved.

1194. By Jon Tibble

Cleanups

1195. By Meinert Jordan

The validators are avoiding invalid file names resp. invalid CCL numbers

1196. By Meinert Jordan

Bug #698881 (accessing unavailable presentation controller)
Keep settings if the controller is not available
Add explaining text to unavailable controllers checkButton

1197. By Jon Tibble

Few more cleanups
Fix BibleGateway xrefs (Bug #700271)

1198. By Jon Tibble

Refactor out first_item

1199. By Tim Bentley

This is big but lets get it in soon.
Changes:
- Search for songs by theme on exact match NOT like
- Add ability to create your own displaytabs and manage them by settings.
- Clean up Theme Manager and make more code common.

1200. By Tim Bentley

This time with changes sorry.

1201. By Meinert Jordan

fixed layout problem for long bible names (or long presentation controller names)
unified the linebreak in setSizePolicy() calls

1202. By Meinert Jordan

wrong parentship caused theme and servicemanager to disapear in a floating dock
more intelligent resizing of item list in PluginForm and SongMaintenanceForm
fix in BS web bible parser

1203. By Andreas Preikschat

- added OpenLyrics importer
- continued to implement OpenLyrics features
- split class
- fix wrong use of "theme"
- and other thinks

Importing songs with multiple languages has not been considered (yet). (One song with all languages is imported.)

1204. By Tim Bentley

Correct File Filter and Cleanup

1205. By Andreas Preikschat

- removed the "quick message" and added dialogs instead
- send the cursor_normal and cursor_busy signal when doing a text search

1206. By Jon Tibble

Refactor web bibles

1207. By Jon Tibble

Cleanups

1208. By Jon Tibble

Make OOo stuff more verbose
Fix BibleServer downloads (Bug 701651)

1209. By Tim Bentley

Hide theme delete button for default themes

1210. By Andreas Preikschat

Cleanups

Clean up from last merge:
- removed not needed pretty_print argument
- doc fix
- return None instead of 0

1211. By Tim Bentley

Fix bug 696557. Cache resizing was adding name to full path
Comment tidy ups.

1212. By Jon Tibble

Fix BibleGateway code
Make BibleServer code more robust

1213. By Jon Tibble

Cleanups and refactor unicode file check

1214. By Andreas Preikschat

replaced the "bibles_showprogress" and "bibles_hideprogress" with the "cursor_busy" and "cursor_normal" signals

1215. By Andreas Preikschat

Fix slidecontroller resizing and cleanups

1216. By Jon Tibble

Refactor wizards
Smaller refactor to web bibles
Cleanups

1217. By Jon Tibble

More cleanups
Refactor file deleting
Fix db committing too early (Bug #703073)

1218. By Tim Bentley

Fix Transitions in Bibles
Fix Blank at start Bible slide
Fix Blank display on restart so the correct blanking method is used.

1219. By Jon Tibble

Refactor error messages

1220. By Jon Tibble

Fix local bible quick search.
Fix OpenSong CUV bible import.

1221. By Jon Tibble

Fix song validation and saving

1222. By Andreas Preikschat

Update preview image on background changes

1223. By Garrett

Enable cursor hiding over live display

1224. By Jon Tibble

Lots of small refactors and cleanups

1225. By Andreas Preikschat

Fixes to Service Item Order screen

1226. By Mattias P&#245;ldaru <email address hidden>

Easislides import plugin

1227. By Jon Tibble

Fix song saving with a verse order

1228. By Andreas Preikschat

- removed the doc for an attribute which is not passed
- removed white spaces

1229. By andreas <andreas@andypc>

Translations Update

1230. By Jon Tibble

Fix duplicate checks (Bug #703149)
Cleanup config change responses (Bug #697215)

1231. By Andreas Preikschat

Update songs for multi-language lyrics

1232. By Andreas Preikschat

Better button handling

1233. By Tim Bentley

Fix adding Images to existing service items

1234. By Jon Tibble

Cleanups and bible parsing fix

1235. By Tim Bentley

Add Key Actions to Shortcut Dialogs

1236. By Jon Tibble

Fix breakage and cleanups

1237. By Andreas Preikschat

Service item selection (Bug #598393)

1238. By Jon Tibble

Refactors in UNO and EasiSlides

1239. By Jon Tibble

Fix BaseDirectory check (Bug #706202)

1240. By Tim Bentley

Slide Controller names have been cleaned up and some line lengths fixed
Added guards to presentation code to stop loading if preview images are missing stops crash later on

1241. By Tim Bentley

Bible tidyups
Database corrections
Song of Songs --> Song Of Solomon
Naham --> Nahum
Obad --> Obadiah

1242. By Andreas Preikschat

- fixed a bug, which occurs when you "replace live background" when no item is live (so basically after starting OpenLP)
- update the little preview frame, when you "Blank to Theme/Screen"

1243. By Jon Tibble

Fix Windows AppLocation (Bug #706396)

1244. By Tim Bentley

Fix theme wizard so Outline and Shadow check boxes are checked
Latch image background changes until the theme changes.
Turn off the rest background if the image or video has been changed from the plugin and the theme changes.

1245. By Andreas Preikschat

- Name changes/clean ups.
- I improved the selection behaviour. For example when a child item is supposed to be selected I used "child", otherwise -1 (e. g. when deleting an item).

1246. By Phill

Allows the update check on load to be disabled

1247. By Tim Bentley

Added finish replacement cleanup

1248. By Jon Tibble

Fix theme editing and NGU bible usage

1249. By Jon Tibble

Lots of cleanups and refactors

1250. By Jon Tibble

Fix CSV bible importing (bug #687309)

1251. By andreas <andreas@andypc>

Only trivial changes:
- only allow to select one slide in the slidecontrollers
- make curosr busy when merging authors/topics/books
- cosmetic code change (saves 4 spaces all over the methods)

1252. By Tim Bentley

Fix Up / Down Confusion
Give SongUsage some TLC and fix UTF8 bugs and better messaging.
Service Items now more meaningful in their titles.

1253. By Tim Bentley

Fix Override state on theme edit dialog so the display and values are correct.

1254. By Andreas Preikschat

Changed the title for images in the service manager.
The title is <filename> if the item consists of one image only. Consequently the other case is, that the item consists of more than one image.

1255. By Jon Tibble

Fix BG Chinese bible (Bug #706211)

Fix CSV import to accept the same files V1 did and cater to "not quite" ASCII encoding generated by cp1252 files.

1256. By Jon Tibble

Deduplication

1257. By Tim Bentley

Fix Theme font size

1258. By andreas <andreas@andypc>

Add ability to print OOS document

1259. By Jon Tibble

Fix song edit form and cleanups

1260. By Andreas Preikschat

You cannot append images to a service item, when you use a localised version of OpenLP. This fixes this.

1261. By Jon Tibble

Deduplication, naming and various cleanups

1262. By Jon Tibble

Fix custom edit (Bug #711934)

1263. By Jon Tibble

Start the UI component library with a couple of moves and a new item.
Dedupe song object checking.
Stop reloading songs when loading services without songs in them!
Change mouse cursor when loading services as reloading songs can take time.

1264. By Andreas Preikschat

Enhanced the button behaviour on the alert dialog.

1265. By Andreas Preikschat

Merged (not redundant) parts of documentation/SongFormat.txt into the songs/lib/db module and removed it. Added the media_files and media_files_songs tables (although the doc is not complete there).

1266. By Jon Tibble

Remove scripts now importers take their role.
Fix missing import.
More UI library component refactors.
Clean up spacer use in import forms.
More deduplication in slidecontroller.py

1267. By Tim Bentley

Fix setup.py so it works following file removal.
Fix settings to work with -d option
Upgrade Exception form to allow an attachment.
Upgrade Exception form to force a 20 character error description

1268. By Andreas Preikschat

- Buttons which require a slide to act on are disabled if there is none to act on
- some other changes

1269. By Jon Tibble

Cleanup, speedup and another UI library component

1270. By Jon Tibble

Start deobfuscating UI library
Catch failure to start presenter processes (Bug #712140)

1271. By Tim Bentley

Fix Theme Image copy Bug
Clean up Theme Rename and Copy bugs

1272. By Raoul Snyman

Some updates to the Windows build:
- Set remotes plugin to be disabled
- Uninstall previous installation of OpenLP automatically.

1273. By Tim Bentley

Fix up theme popups

1274. By Jon Tibble

Fix song service load (Bug #696219)
Cleanups
Change cursor when activating plugins

1275. By Andreas Preikschat

I added the Tool Flag, so that the displays will not appear in the task bar.

1276. By Andreas Preikschat

Only show "CCLI License:" in the footer, if the user entered a CCLI number.

1277. By Andreas Preikschat

- Removed the error dialog when there are no service items in the service (as suggested by superfly)
- Added the ability to include the "playing time" of media items
- Moved settings from advanced tab to the dialog
- Added a dialog with preview function. It provides the following settings:
  a) print text (slides)
  b) print notes
  c) print playing time
  (when the user actually prints the service, the settings are saved.)
- Ability to enter Custom Service Notes.

1278. By Jon Tibble

Cleanups - blank lines, line breaks, docstrings, correct string chars.
Remove unused exception
Dedupe presentation controller code
Fill out the range of Delphi colours to fix theme loading (Support 98)
Naming fixes including starting the attack on mainwindow.py.

1279. By Tim Bentley

Fix previews after screen blanking on live controller

1280. By Jon Tibble

Fixes and UI valign component

1281. By Jon Tibble

Fix last commit

1282. By Jon Tibble

UI library - UiStrings

1283. By Jon Tibble

Fixes and translation deduplication

1284. By Raoul Snyman

Fixed up some of the docstrings and updated the documentation.

1285. By Raoul Snyman

Created a new theme for Qt Help.
Added a condition in the configuration depending on the theme.

Note: to get Qt Help, change the theme to "openlp_qthelp" and then build with "make qthelp".

1286. By andreas <andreas@andypc>

- added a OpenLyrics exporter
- save OpenLyrics meta data to songs (service items and xml files)
- fixed a bug in OpenSong import
- fixed verse type when importing xml songs (instead of "V" we add "Verse" to the database)
- verse order in exported songs is now lower case (service items and xml files)
- updated copyright information (not the scripts directory)

Notes to the OpenLyrics export dialog:
- sorting does not work very nicely
- the search does only consider the title of the qlistwidgetitem:
    "title (author, author, author)"
- the search does not remove , and . and the like
- the buttons check/uncheck all songs (also hidden ones)

I thought about two scenarios:
1) Somebody wants to export all songs. He'll use the "check all" button and will not need the search box.

2) The user wants to export single songs. He will use the search box and double click the songs (or check the checkbox).

1287. By Mattias P&#245;ldaru <email address hidden>

Open Data Folder

1288. By Jon Tibble

More UiStrings
Fix UiStrings sentence case
Button box rearranging
Fix failure to grab Impress on close (Support #38)

1289. By Andreas Preikschat

Do not add the entry attribute to songbooks when there is no song number.

1290. By Jon Tibble

Refactor and rename listviews for DnD
Wizard refactors
Cleanups

1291. By Jon Tibble

Fixes, cleanups and UiStrings
Refactor plugins: icon building, settings tabs and media items

1292. By Tim Bentley

Fix reference to none object

1293. By Jon Tibble

Fix data directory paths

1294. By Andreas Preikschat

Fixed selecting the wrong item when moving an item down (re-ordering images)

1295. By Jon Tibble

Fixes

1296. By Tim Bentley

Add ability to set the start point of a media item.
Display the start and end time of an item in service manager.

1297. By Phill

Importer for SongShow Plus

1298. By Raoul Snyman

Re-fixed the data directory on Linux with XDG installed.

1299. By andreas <andreas@andypc>

Implemented a new bible search edit.

1300. By Tim Bentley

Fix up the Video length calculation code

1301. By Jon Tibble

Unicode and translation grammar fixes

1302. By Jon Tibble

Fix song overwrite and cleanups

1303. By mahfiaz

filesystem encoding fix for non-ascii home dir

1304. By Raoul Snyman

Amalgamated OpenLP theme filters into one and removed "All Files" filter to limit the effects of user ignorance.

1305. By rimach

A couple of bug fixes and minor enhancements.

1306. By Mattias P&#245;ldaru <email address hidden>

Fix EasiSlides importer

1307. By Andreas Preikschat

Fix the error 'Corrupt JPEG data: premature end of data segment'

1308. By Andreas Preikschat

- clear search edit line when starting the wizard again
- changed the "uncheck all" and "check all" buttons check/uncheck only those songs which are currently visible. This enables the user to perform more advanced searches.

1309. By Raoul Snyman

Updated InnoSetup script to add a Debug shortcut in the menu.

1310. By mahfiaz

More changes, now internally tags are held not as Salm:1 (previously), nor v:1 (in the meantime), but just as in openlyrics format, v1.
The v1a is not yet supported, it requires spinboxes to be changed first. The old and new should be handled silently side-by-side.

1311. By Jon Tibble

Fix mime data string

1312. By Jon Tibble

Lots of refactoring all over...
Refactor magic numbers to use enumerations:
- VerticalType and HorizontalType in themes (required import tweaking to avoid circular imports)
- LayoutStyle and DisplayStyle for bibles
- SongSearch
Refactor string translations:
- More UiStrings
- Introduce WizardStrings and SongStrings
Refactor song importer __init__() methods to reduce the duplication.
Cleanups for spelling, whitespace, naming, unused variables and imports.

1313. By Raoul Snyman

Fixed up a few things in the documentation.

1314. By Raoul Snyman

Added a README.txt file for Python distribution.

1315. By Jon Tibble

Fix CCLI author import

1316. By Mattias P&#245;ldaru <email address hidden>

Fix two missing objects

1317. By Tim Bentley

Revised Print Dialog and fix Preview Edit

1318. By mahfiaz

Log media extensions.

1319. By Andreas Preikschat

- added a new Songbeamer property
- replaced try
- enumeration fix

1320. By Mattias P&#245;ldaru <email address hidden>

More pythonic code, fixes a possible error, where *.ra would be left out of supported extensions if checked after *.ram.

1321. By Tim Bentley

Move the DisplayTab dialog

1322. By Tim Bentley

Fix breakages from last merge.
Remove old import file.
Set up variables correctly.
Correct the Translation tags.

1323. By Raoul Snyman

Fixed a bug where the settings for remotes was not actually used.

1324. By Andreas Preikschat

Added apocrypha to osis import.

1325. By Mattias P&#245;ldaru <email address hidden>

Add more detailed mimetype logging. We could add the extensions list hack back later, if needed. To decide that, we need more information from users.

1326. By Armin K&#246;hler <email address hidden>

Add importfilter for foilpresenter song files

1327. By Andreas Preikschat

The re-index tool adds 'Author unknown' if songs do not have any author.

1328. By Raoul Snyman

Add the option to change the default display.

1329. By Jon Tibble

Fixes and cleanups

1330. By Raoul Snyman

Add Armin to the copyright notice.

1331. By Andreas Preikschat

Moved redundant code to parent class

1332. By Jon Tibble

Fix missing verse handling

1333. By Armin K&#246;hler <email address hidden>

adapted the handling of author unknown in foilpresenter song importer

1334. By Jon Tibble

Fix non-saving OpenLyrics authors (Bug 724568)

1335. By Raoul Snyman

Fixed bug #700859: Bible importers do not clean up properly after a failed import.

1336. By Andreas Preikschat

Removed unused enumeration class.
Fixed a bug (Clicking the advanced "Search" button will cause a traceback when no bible is present)
Cosmetic cleanups.

1337. By Andreas Preikschat

Clean ups (missing lines, white spaces, etc.)

1338. By Tim Bentley

Move Display Tag Menu Item

1339. By Tim Bentley

Small cleanup

1340. By Armin Köhler

Bug fixes.

1341. By Jon Tibble

Fix Jesus' words in BibleGateway parsing.

1342. By Matthias Hub

OS X build scripts

1343. By Tim Bentley

Fix toolbar separator.

1344. By Raoul Snyman

Updated translations.

1345. By Tim Bentley

Fix hide mouse error

1346. By Andreas Preikschat

Code Cleanups

1347. By mahfiaz

Making it easier to translate and a fix (hopefully).

1348. By Andreas Preikschat

Added the ability to detect (un)plugged screens after OpenLP has started.
Added the ability to detect screen resolution changes.

1349. By mahfiaz

Fixed bug #728637

1350. By Tim Bentley

Speed up start up by not displaying screens twice
Fix Black display between image items

1351. By Raoul Snyman

Updated the translations again.

1352. By Andreas Preikschat

set the 'Add Tool...' menu item invisible

1353. By Andreas Preikschat

- fix a bug, which occurs when viewing (preview/live) a song without/with incomplete footer.
- clean up

1354. By Jon Tibble

Cleanups

1355. By Raoul Snyman

Updated the credits.

1356. By Tim Bentley

Fix not flagging of service item changes

1357. By Andreas Preikschat

- fix "Show Desktop" being not visible (now it's visible all the time)
- fix a bug: sending an image live when you hide the desktop, the image was visible for a short moment

1358. By Tim Bentley

Fix up song duplication bug where search_title seems to often have a space at the end.

Reindex will clean up the database once this is in.

1359. By Tim Bentley

Add first time wizard

1360. By Tim Bentley

Stop Wizard eating songs databases

1361. By Andreas Preikschat

Fixed Bug #727710

1362. By Raoul Snyman

Added an initial Gentoo ebuild file.

1363. By Andreas Preikschat

Added some more debug information.

1364. By Tim Bentley

First time wizard improvements

1365. By Jon Tibble

Cleanups

1366. By Jon Tibble

UiStrings.OpenFile

1367. By Jon Tibble

Head r1366

1368. By Jon Tibble

Head r1373

1369. By Jon Tibble

Unused import

1370. By Jon Tibble

Unused variables

1371. By Jon Tibble

Head r1374

1372. By Jon Tibble

Head r1377

1373. By Jon Tibble

Head r1379

1374. By Jon Tibble

Head r1388

1375. By Jon Tibble

Head r1389

1376. By Jon Tibble

Head r1390

1377. By Jon Tibble

Fix typo

1378. By Jon Tibble

Head r1391

1379. By Jon Tibble

Head r1396

1380. By Jon Tibble

Head r1401

1381. By Jon Tibble

Head r1405

1382. By Jon Tibble

Unused import

1383. By Jon Tibble

Long line

1384. By Jon Tibble

Head r1408

1385. By Jon Tibble

Head r1414

1386. By Jon Tibble

Head r1419

1387. By Jon Tibble

Head r1421

1388. By Jon Tibble

Head r1427

1389. By Jon Tibble

Head r1428

1390. By Jon Tibble

Alignment

1391. By Jon Tibble

Head r1441

1392. By Jon Tibble

Head r1451

1393. By Jon Tibble

Head 1495

1394. By Jon Tibble

Head r1804

1395. By Jon Tibble

Cleanups

1396. By Jon Tibble

Fix undefined variables

1397. By Jon Tibble

Head r1812

1398. By Jon Tibble

Cleanups

1399. By Jon Tibble

Cleanup fix

1400. By Jon Tibble

Whitespace

1401. By Jon Tibble

Revert broken old incomplete thought

1402. By Jon Tibble

Fix spacing

1403. By Jon Tibble

Head r1815

1404. By Jon Tibble

Head r1819

1405. By Jon Tibble

Reduce recent file list duplication (Bug #892668)

1406. By Jon Tibble

Fix non-ascii service filename loading

1407. By Jon Tibble

Head r1821

1408. By Jon Tibble

Fix non-ascii file check on Macs

1409. By Jon Tibble

Head r1824

1410. By Jon Tibble

Head r1829

1411. By Jon Tibble

Head r1831

1412. By Jon Tibble

Fix v1 theme importing

1413. By Jon Tibble

Previous fix broke on non-Windows, try again

1414. By Jon Tibble

Fix logging theme names

1415. By Jon Tibble

Head r1834

1416. By Jon Tibble

Head r1856

1417. By Jon Tibble

Fix unused imports

1418. By Jon Tibble

Head r1859

1419. By Jon Tibble

Dedupe media search

1420. By Jon Tibble

Head r1860

1421. By Jon Tibble

Long line

1422. By Jon Tibble

Indentation

1423. By Jon Tibble

Fix crashes in media settings (Bug #908252)

1424. By Jon Tibble

Head r1863

1425. By Jon Tibble

Head r1866

1426. By Jon Tibble

Head r1868

1427. By Jon Tibble

Head r1897

1428. By Jon Tibble

Unused imports

1429. By Jon Tibble

Head r1901

1430. By Jon Tibble

Cleanups

1431. By Jon Tibble

Head r1902

1432. By Jon Tibble

Unused variables

1433. By Jon Tibble

Head r1903

1434. By Jon Tibble

Head r1904

1435. By Jon Tibble

Head r1906

1436. By Jon Tibble

Bugs #888815 #941966

1437. By Jon Tibble

Head r1908

1438. By Jon Tibble

Head r1909

1439. By Jon Tibble

Head r1910

1440. By Jon Tibble

Head r1912

1441. By Jon Tibble

Head r1917

1442. By Jon Tibble

Head r1941

1443. By Jon Tibble

Head r1973

1444. By Jon Tibble

Head r1978

1445. By Jon Tibble

Head r2003

Unmerged revisions

1445. By Jon Tibble

Head r2003

1444. By Jon Tibble

Head r1978

1443. By Jon Tibble

Head r1973

1442. By Jon Tibble

Head r1941

1441. By Jon Tibble

Head r1917

1440. By Jon Tibble

Head r1912

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openlp/core/lib/mediamanageritem.py'
--- openlp/core/lib/mediamanageritem.py 2009-09-16 04:59:38 +0000
+++ openlp/core/lib/mediamanageritem.py 2009-09-21 19:26:10 +0000
@@ -136,7 +136,8 @@
136 self.Toolbar = OpenLPToolbar(self)136 self.Toolbar = OpenLPToolbar(self)
137 self.PageLayout.addWidget(self.Toolbar)137 self.PageLayout.addWidget(self.Toolbar)
138138
139 def addToolbarButton(self, title, tooltip, icon, slot=None, objectname=None):139 def addToolbarButton(self, title, tooltip, icon, slot=None,
140 objectname=None):
140 """141 """
141 A method to help developers easily add a button to the toolbar.142 A method to help developers easily add a button to the toolbar.
142143
@@ -192,31 +193,46 @@
192 ## File Button ##193 ## File Button ##
193 if self.hasFileIcon:194 if self.hasFileIcon:
194 self.addToolbarButton(195 self.addToolbarButton(
195 translate(self.TranslationContext, u'Load '+self.PluginTextShort),196 translate(
196 translate(self.TranslationContext, u'Load a new '+self.PluginTextShort),197 self.TranslationContext, u'Load ' + self.PluginTextShort),
197 u':'+self.IconPath+ u'_load.png', self.onFileClick, self.PluginTextShort+u'FileItem')198 translate(
199 self.TranslationContext,
200 u'Load a new ' + self.PluginTextShort),
201 u':' + self.IconPath + u'_load.png', self.onFileClick,
202 self.PluginTextShort + u'FileItem')
198 ## New Button ##203 ## New Button ##
199 if self.hasNewIcon:204 if self.hasNewIcon:
200 self.addToolbarButton(205 self.addToolbarButton(
201 translate(self.TranslationContext, u'New '+self.PluginTextShort),206 translate(
202 translate(self.TranslationContext, u'Add a new '+self.PluginTextShort),207 self.TranslationContext, u'New ' + self.PluginTextShort),
203 u':'+self.IconPath+ u'_new.png', self.onNewClick, self.PluginTextShort+u'NewItem')208 translate(
209 self.TranslationContext,
210 u'Add a new ' + self.PluginTextShort),
211 u':' + self.IconPath + u'_new.png', self.onNewClick,
212 self.PluginTextShort + u'NewItem')
204 ## Edit Button ##213 ## Edit Button ##
205 if self.hasEditIcon:214 if self.hasEditIcon:
206 self.addToolbarButton(215 self.addToolbarButton(
207 translate(self.TranslationContext, u'Edit '+self.PluginTextShort),216 translate(
208 translate(self.TranslationContext, u'Edit the selected '+self.PluginTextShort),217 self.TranslationContext, u'Edit ' + self.PluginTextShort),
209 u':'+self.IconPath+ u'_edit.png', self.onEditClick, self.PluginTextShort+u'EditItem')218 translate(
219 self.TranslationContext,
220 u'Edit the selected ' + self.PluginTextShort),
221 u':' + self.IconPath + u'_edit.png', self.onEditClick,
222 self.PluginTextShort + u'EditItem')
210 ## Delete Button ##223 ## Delete Button ##
211 self.addToolbarButton(224 self.addToolbarButton(
212 translate(self.TranslationContext, u'Delete '+self.PluginTextShort),225 translate(
226 self.TranslationContext, u'Delete ' + self.PluginTextShort),
213 translate(self.TranslationContext, u'Delete the selected item'),227 translate(self.TranslationContext, u'Delete the selected item'),
214 u':'+self.IconPath+ u'_delete.png', self.onDeleteClick, self.PluginTextShort+u'DeleteItem')228 u':' + self.IconPath + u'_delete.png', self.onDeleteClick,
229 self.PluginTextShort + u'DeleteItem')
215 ## Separator Line ##230 ## Separator Line ##
216 self.addToolbarSeparator()231 self.addToolbarSeparator()
217 ## Preview ##232 ## Preview ##
218 self.addToolbarButton(233 self.addToolbarButton(
219 translate(self.TranslationContext, u'Preview '+self.PluginTextShort),234 translate(
235 self.TranslationContext, u'Preview ' + self.PluginTextShort),
220 translate(self.TranslationContext, u'Preview the selected item'),236 translate(self.TranslationContext, u'Preview the selected item'),
221 u':/system/system_preview.png', self.onPreviewClick, u'PreviewItem')237 u':/system/system_preview.png', self.onPreviewClick, u'PreviewItem')
222 ## Live Button ##238 ## Live Button ##
@@ -226,9 +242,14 @@
226 u':/system/system_live.png', self.onLiveClick, u'LiveItem')242 u':/system/system_live.png', self.onLiveClick, u'LiveItem')
227 ## Add to service Button ##243 ## Add to service Button ##
228 self.addToolbarButton(244 self.addToolbarButton(
229 translate(self.TranslationContext, u'Add '+self.PluginTextShort+u' To Service'),245 translate(
230 translate(self.TranslationContext, u'Add the selected item(s) to the service'),246 self.TranslationContext,
231 u':/system/system_add.png', self.onAddClick, self.PluginTextShort+u'AddItem')247 u'Add ' + self.PluginTextShort + u' To Service'),
248 translate(
249 self.TranslationContext,
250 u'Add the selected item(s) to the service'),
251 u':/system/system_add.png', self.onAddClick,
252 self.PluginTextShort + u'AddItem')
232253
233 def addListViewToToolBar(self):254 def addListViewToToolBar(self):
234 #Add the List widget255 #Add the List widget
@@ -236,7 +257,8 @@
236 self.ListView.uniformItemSizes = True257 self.ListView.uniformItemSizes = True
237 self.ListView.setGeometry(QtCore.QRect(10, 100, 256, 591))258 self.ListView.setGeometry(QtCore.QRect(10, 100, 256, 591))
238 self.ListView.setSpacing(1)259 self.ListView.setSpacing(1)
239 self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)260 self.ListView.setSelectionMode(
261 QtGui.QAbstractItemView.ExtendedSelection)
240 self.ListView.setAlternatingRowColors(True)262 self.ListView.setAlternatingRowColors(True)
241 self.ListView.setDragEnabled(True)263 self.ListView.setDragEnabled(True)
242 self.ListView.setObjectName(self.PluginTextShort+u'ListView')264 self.ListView.setObjectName(self.PluginTextShort+u'ListView')
@@ -247,12 +269,14 @@
247 if self.hasEditIcon:269 if self.hasEditIcon:
248 self.ListView.addAction(contextMenuAction(self.ListView,270 self.ListView.addAction(contextMenuAction(self.ListView,
249 ':' +self.IconPath+u'_new.png',271 ':' +self.IconPath+u'_new.png',
250 translate(self.TranslationContext, u'&Edit '+self.PluginTextShort),272 translate(self.TranslationContext,
273 u'&Edit ' + self.PluginTextShort),
251 self.onEditClick))274 self.onEditClick))
252 self.ListView.addAction(contextMenuSeparator(self.ListView))275 self.ListView.addAction(contextMenuSeparator(self.ListView))
253 self.ListView.addAction(contextMenuAction(276 self.ListView.addAction(contextMenuAction(
254 self.ListView, ':/system/system_preview.png',277 self.ListView, ':/system/system_preview.png',
255 translate(self.TranslationContext, u'&Preview '+self.PluginTextShort),278 translate(self.TranslationContext,
279 u'&Preview ' + self.PluginTextShort),
256 self.onPreviewClick))280 self.onPreviewClick))
257 self.ListView.addAction(contextMenuAction(281 self.ListView.addAction(contextMenuAction(
258 self.ListView, ':/system/system_live.png',282 self.ListView, ':/system/system_live.png',
@@ -301,20 +325,23 @@
301 count = 0325 count = 0
302 filelist = []326 filelist = []
303 while count < self.ListView.count():327 while count < self.ListView.count():
304 bitem = self.ListView.item(count)328 bitem = self.ListView.item(count)
305 filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())329 filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
306 filelist.append(filename)330 filelist.append(filename)
307 count += 1331 count += 1
308 return filelist332 return filelist
309333
310 def loadList(self, list):334 def loadList(self, list):
311 raise NotImplementedError(u'MediaManagerItem.loadList needs to be defined by the plugin')335 raise NotImplementedError(
336 u'MediaManagerItem.loadList needs to be defined by the plugin')
312337
313 def onNewClick(self):338 def onNewClick(self):
314 raise NotImplementedError(u'MediaManagerItem.onNewClick needs to be defined by the plugin')339 raise NotImplementedError(
340 u'MediaManagerItem.onNewClick needs to be defined by the plugin')
315341
316 def onEditClick(self):342 def onEditClick(self):
317 raise NotImplementedError(u'MediaManagerItem.onEditClick needs to be defined by the plugin')343 raise NotImplementedError(
344 u'MediaManagerItem.onEditClick needs to be defined by the plugin')
318345
319 def onDeleteClick(self):346 def onDeleteClick(self):
320 raise NotImplementedError(u'MediaManagerItem.onDeleteClick needs to be defined by the plugin')347 raise NotImplementedError(u'MediaManagerItem.onDeleteClick needs to be defined by the plugin')
@@ -323,7 +350,7 @@
323 raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin')350 raise NotImplementedError(u'MediaManagerItem.generateSlideData needs to be defined by the plugin')
324351
325 def onPreviewClick(self):352 def onPreviewClick(self):
326 log.debug(self.PluginTextShort+u' Preview Requested')353 log.debug(self.PluginTextShort + u' Preview Requested')
327 service_item = self.buildServiceItem()354 service_item = self.buildServiceItem()
328 if service_item is not None:355 if service_item is not None:
329 self.parent.preview_controller.addServiceItem(service_item)356 self.parent.preview_controller.addServiceItem(service_item)
@@ -335,7 +362,7 @@
335 self.parent.live_controller.addServiceItem(service_item)362 self.parent.live_controller.addServiceItem(service_item)
336363
337 def onAddClick(self):364 def onAddClick(self):
338 log.debug(self.PluginTextShort+u' Add Requested')365 log.debug(self.PluginTextShort + u' Add Requested')
339 service_item = self.buildServiceItem()366 service_item = self.buildServiceItem()
340 if service_item is not None:367 if service_item is not None:
341 self.parent.service_manager.addServiceItem(service_item)368 self.parent.service_manager.addServiceItem(service_item)
@@ -345,7 +372,8 @@
345 Common method for generating a service item372 Common method for generating a service item
346 """373 """
347 service_item = ServiceItem(self.parent)374 service_item = ServiceItem(self.parent)
348 service_item.addIcon(u':/media/media_'+self.PluginTextShort.lower()+u'.png')375 service_item.addIcon(
376 u':/media/media_' + self.PluginTextShort.lower() + u'.png')
349 if self.generateSlideData(service_item):377 if self.generateSlideData(service_item):
350 self.ListView.clearSelection()378 self.ListView.clearSelection()
351 return service_item379 return service_item
352380
=== modified file 'openlp/core/lib/pluginmanager.py'
--- openlp/core/lib/pluginmanager.py 2009-09-19 23:05:30 +0000
+++ openlp/core/lib/pluginmanager.py 2009-09-21 17:56:36 +0000
@@ -26,7 +26,7 @@
26import sys26import sys
27import logging27import logging
2828
29from openlp.core.lib import Plugin, PluginStatus29from openlp.core.lib import Plugin, PluginStatus
3030
31class PluginManager(object):31class PluginManager(object):
32 """32 """
3333
=== modified file 'openlp/core/lib/renderer.py'
--- openlp/core/lib/renderer.py 2009-09-20 13:21:05 +0000
+++ openlp/core/lib/renderer.py 2009-09-21 17:56:36 +0000
@@ -188,13 +188,13 @@
188 else:188 else:
189 pos = len(line)189 pos = len(line)
190 split_text = line190 split_text = line
191 while metrics.width(split_text, -1) > line_width:191 while metrics.width(split_text, -1) > line_width:
192 #Find the next space to the left192 #Find the next space to the left
193 pos = line[:pos].rfind(u' ')193 pos = line[:pos].rfind(u' ')
194 #no more spaces found194 #no more spaces found
195 if pos == 0:195 if pos == 0:
196 split_text = line196 split_text = line
197 while metrics.width(split_text, -1) > line_width:197 while metrics.width(split_text, -1) > line_width:
198 split_text = split_text[:-1]198 split_text = split_text[:-1]
199 pos = len(split_text)199 pos = len(split_text)
200 else:200 else:
@@ -242,7 +242,7 @@
242 # reset the frame. first time do not worry about what you paint on.242 # reset the frame. first time do not worry about what you paint on.
243 self._frame = QtGui.QImage(self.bg_frame)243 self._frame = QtGui.QImage(self.bg_frame)
244 x, y = self._correctAlignment(self._rect, bbox)244 x, y = self._correctAlignment(self._rect, bbox)
245 bbox = self._render_lines_unaligned(lines, False, (x, y), True)245 bbox = self._render_lines_unaligned(lines, False, (x, y), True)
246 if footer_lines is not None:246 if footer_lines is not None:
247 bbox = self._render_lines_unaligned(footer_lines, True,247 bbox = self._render_lines_unaligned(footer_lines, True,
248 (self._rect_footer.left(), self._rect_footer.top()), True)248 (self._rect_footer.left(), self._rect_footer.top()), True)
@@ -327,7 +327,8 @@
327 # centre align327 # centre align
328 y = rect.top() + (rect.height() - bbox.height()) / 2328 y = rect.top() + (rect.height() - bbox.height()) / 2
329 else:329 else:
330 log.error(u'Invalid value for theme.VerticalAlign:%s' % self._theme.display_verticalAlign)330 log.error(u'Invalid value for theme.VerticalAlign:%s',
331 self._theme.display_verticalAlign)
331 return x, y332 return x, y
332333
333 def _render_lines_unaligned(self, lines, footer, tlcorner=(0, 0),334 def _render_lines_unaligned(self, lines, footer, tlcorner=(0, 0),
@@ -400,7 +401,7 @@
400 startx = x401 startx = x
401 starty = y402 starty = y
402 rightextent = None403 rightextent = None
403 #print "inputs", startx, starty, maxx, maxy404 #print "inputs", startx, starty, maxx, maxy
404 # dont allow alignment messing with footers405 # dont allow alignment messing with footers
405 if footer:406 if footer:
406 align = 0407 align = 0
@@ -412,7 +413,7 @@
412 for linenum in range(len(lines)):413 for linenum in range(len(lines)):
413 line = lines[linenum]414 line = lines[linenum]
414 #find out how wide line is415 #find out how wide line is
415 w, h = self._get_extent_and_render(line, footer, tlcorner=(x, y),416 w, h = self._get_extent_and_render(line, footer, tlcorner=(x, y),
416 draw=False)417 draw=False)
417 if self._theme.display_shadow:418 if self._theme.display_shadow:
418 w += shadow_offset419 w += shadow_offset
419420
=== modified file 'openlp/core/lib/rendermanager.py'
--- openlp/core/lib/rendermanager.py 2009-09-20 07:12:47 +0000
+++ openlp/core/lib/rendermanager.py 2009-09-21 17:56:36 +0000
@@ -121,7 +121,8 @@
121 else:121 else:
122 if theme is not None:122 if theme is not None:
123 self.theme = theme123 self.theme = theme
124 elif self.global_style == u'Song' or self.global_style == u'Service':124 elif self.global_style == u'Song' or \
125 self.global_style == u'Service':
125 if self.service_theme == u'':126 if self.service_theme == u'':
126 self.theme = self.global_theme127 self.theme = self.global_theme
127 else:128 else:
@@ -129,9 +130,10 @@
129 else:130 else:
130 self.theme = self.global_theme131 self.theme = self.global_theme
131 if self.theme != self.renderer.theme_name:132 if self.theme != self.renderer.theme_name:
132 log.debug(u'theme is now %s', self.theme)133 log.debug(u'theme is now %s', self.theme)
133 self.themedata = self.theme_manager.getThemeData(self.theme)134 self.themedata = self.theme_manager.getThemeData(self.theme)
134 self.calculate_default(self.screen_list[self.current_display][u'size'])135 self.calculate_default(
136 self.screen_list[self.current_display][u'size'])
135 self.renderer.set_theme(self.themedata)137 self.renderer.set_theme(self.themedata)
136 self.build_text_rectangle(self.themedata)138 self.build_text_rectangle(self.themedata)
137139
@@ -212,7 +214,7 @@
212 self.renderer.set_frame_dest(self.width, self.height)214 self.renderer.set_frame_dest(self.width, self.height)
213 return self.renderer.generate_frame_from_lines(main_text, footer_text)215 return self.renderer.generate_frame_from_lines(main_text, footer_text)
214216
215 def resize_image(self, image, width = 0, height = 0):217 def resize_image(self, image, width=0, height=0):
216 """218 """
217 Resize an image to fit on the current screen.219 Resize an image to fit on the current screen.
218220
@@ -253,6 +255,7 @@
253 self.width = screen.width()255 self.width = screen.width()
254 self.height = screen.height()256 self.height = screen.height()
255 self.screen_ratio = float(self.height) / float(self.width)257 self.screen_ratio = float(self.height) / float(self.width)
256 log.debug(u'calculate default %d, %d, %f', self.width, self.height, self.screen_ratio )258 log.debug(u'calculate default %d, %d, %f',
259 self.width, self.height, self.screen_ratio )
257 # 90% is start of footer260 # 90% is start of footer
258 self.footer_start = int(self.height * 0.90)261 self.footer_start = int(self.height * 0.90)
259262
=== modified file 'openlp/core/ui/__init__.py'
--- openlp/core/ui/__init__.py 2009-09-08 19:58:05 +0000
+++ openlp/core/ui/__init__.py 2009-09-21 17:56:36 +0000
@@ -39,5 +39,5 @@
39from mainwindow import MainWindow39from mainwindow import MainWindow
4040
41__all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'MasterToolbar',41__all__ = ['SplashScreen', 'AboutForm', 'SettingsForm', 'MasterToolbar',
42 'MainWindow', 'MainDisplay', 'SlideController', 'ServiceManager',42 'MainWindow', 'MainDisplay', 'SlideController', 'ServiceManager',
43 'ThemeManager', 'AmendThemeForm']43 'ThemeManager', 'AmendThemeForm']
4444
=== modified file 'openlp/core/ui/alertstab.py'
--- openlp/core/ui/alertstab.py 2009-09-08 19:58:05 +0000
+++ openlp/core/ui/alertstab.py 2009-09-21 17:56:36 +0000
@@ -24,7 +24,7 @@
2424
25from PyQt4 import QtCore, QtGui25from PyQt4 import QtCore, QtGui
2626
27from openlp.core.lib import SettingsTab, translate27from openlp.core.lib import SettingsTab, translate
2828
29class AlertsTab(SettingsTab):29class AlertsTab(SettingsTab):
30 """30 """
@@ -33,7 +33,8 @@
33 def __init__(self):33 def __init__(self):
34 self.font_color = '#ffffff'34 self.font_color = '#ffffff'
35 self.bg_color = '#660000'35 self.bg_color = '#660000'
36 SettingsTab.__init__(self, translate(u'AlertsTab', u'Alerts'), u'Alerts')36 SettingsTab.__init__(
37 self, translate(u'AlertsTab', u'Alerts'), u'Alerts')
3738
38 def setupUi(self):39 def setupUi(self):
39 self.setObjectName(u'AlertsTab')40 self.setObjectName(u'AlertsTab')
@@ -110,10 +111,12 @@
110 self.SlideRightLayout.setMargin(0)111 self.SlideRightLayout.setMargin(0)
111 self.SlideRightLayout.setObjectName(u'SlideRightLayout')112 self.SlideRightLayout.setObjectName(u'SlideRightLayout')
112 self.PreviewGroupBox = QtGui.QGroupBox(self.AlertRightColumn)113 self.PreviewGroupBox = QtGui.QGroupBox(self.AlertRightColumn)
113 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)114 sizePolicy = QtGui.QSizePolicy(
115 QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
114 sizePolicy.setHorizontalStretch(0)116 sizePolicy.setHorizontalStretch(0)
115 sizePolicy.setVerticalStretch(0)117 sizePolicy.setVerticalStretch(0)
116 sizePolicy.setHeightForWidth(self.PreviewGroupBox.sizePolicy().hasHeightForWidth())118 sizePolicy.setHeightForWidth(
119 self.PreviewGroupBox.sizePolicy().hasHeightForWidth())
117 self.PreviewGroupBox.setSizePolicy(sizePolicy)120 self.PreviewGroupBox.setSizePolicy(sizePolicy)
118 self.PreviewGroupBox.setObjectName(u'PreviewGroupBox')121 self.PreviewGroupBox.setObjectName(u'PreviewGroupBox')
119 self.PreviewLayout = QtGui.QVBoxLayout(self.PreviewGroupBox)122 self.PreviewLayout = QtGui.QVBoxLayout(self.PreviewGroupBox)
@@ -124,7 +127,8 @@
124 self.FontPreview.setMinimumSize(QtCore.QSize(280, 100))127 self.FontPreview.setMinimumSize(QtCore.QSize(280, 100))
125 self.FontPreview.setReadOnly(True)128 self.FontPreview.setReadOnly(True)
126 self.FontPreview.setFocusPolicy(QtCore.Qt.NoFocus)129 self.FontPreview.setFocusPolicy(QtCore.Qt.NoFocus)
127 self.FontPreview.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter)130 self.FontPreview.setAlignment(
131 QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter)
128 self.FontPreview.setObjectName(u'FontPreview')132 self.FontPreview.setObjectName(u'FontPreview')
129 self.PreviewLayout.addWidget(self.FontPreview)133 self.PreviewLayout.addWidget(self.FontPreview)
130 self.SlideRightLayout.addWidget(self.PreviewGroupBox)134 self.SlideRightLayout.addWidget(self.PreviewGroupBox)
@@ -146,11 +150,13 @@
146 self.FontGroupBox.setTitle(translate(u'AlertsTab', u'Font'))150 self.FontGroupBox.setTitle(translate(u'AlertsTab', u'Font'))
147 self.FontLabel.setText(translate(u'AlertsTab', u'Font Name:'))151 self.FontLabel.setText(translate(u'AlertsTab', u'Font Name:'))
148 self.FontColorLabel.setText(translate(u'AlertsTab', u'Font Color:'))152 self.FontColorLabel.setText(translate(u'AlertsTab', u'Font Color:'))
149 self.BackgroundColorLabel.setText(translate(u'AlertsTab', u'Background Color:'))153 self.BackgroundColorLabel.setText(
154 translate(u'AlertsTab', u'Background Color:'))
150 self.TimeoutLabel.setText(translate(u'AlertsTab', u'Alert timeout:'))155 self.TimeoutLabel.setText(translate(u'AlertsTab', u'Alert timeout:'))
151 self.TimeoutSpinBox.setSuffix(translate(u'AlertsTab', u's'))156 self.TimeoutSpinBox.setSuffix(translate(u'AlertsTab', u's'))
152 self.PreviewGroupBox.setTitle(translate(u'AlertsTab', u'Preview'))157 self.PreviewGroupBox.setTitle(translate(u'AlertsTab', u'Preview'))
153 self.FontPreview.setText(translate(u'AlertsTab', u'openlp.org 2.0 rocks!'))158 self.FontPreview.setText(
159 translate(u'AlertsTab', u'openlp.org 2.0 rocks!'))
154160
155 def onBackgroundColorButtonClicked(self):161 def onBackgroundColorButtonClicked(self):
156 self.bg_color = QtGui.QColorDialog.getColor(162 self.bg_color = QtGui.QColorDialog.getColor(
@@ -174,12 +180,17 @@
174180
175 def load(self):181 def load(self):
176 self.timeout = int(self.config.get_config(u'timeout', 5))182 self.timeout = int(self.config.get_config(u'timeout', 5))
177 self.font_color = unicode(self.config.get_config(u'font color', u'#ffffff'))183 self.font_color = unicode(
178 self.bg_color = unicode(self.config.get_config(u'background color', u'#660000'))184 self.config.get_config(u'font color', u'#ffffff'))
179 self.font_face = unicode(self.config.get_config(u'font face', QtGui.QFont().family()))185 self.bg_color = unicode(
186 self.config.get_config(u'background color', u'#660000'))
187 self.font_face = unicode(
188 self.config.get_config(u'font face', QtGui.QFont().family()))
180 self.TimeoutSpinBox.setValue(self.timeout)189 self.TimeoutSpinBox.setValue(self.timeout)
181 self.FontColorButton.setStyleSheet(u'background-color: %s' % self.font_color)190 self.FontColorButton.setStyleSheet(
182 self.BackgroundColorButton.setStyleSheet(u'background-color: %s' % self.bg_color)191 u'background-color: %s' % self.font_color)
192 self.BackgroundColorButton.setStyleSheet(
193 u'background-color: %s' % self.bg_color)
183 font = QtGui.QFont()194 font = QtGui.QFont()
184 font.setFamily(self.font_face)195 font.setFamily(self.font_face)
185 self.FontComboBox.setCurrentFont(font)196 self.FontComboBox.setCurrentFont(font)
@@ -198,5 +209,5 @@
198 font.setBold(True)209 font.setBold(True)
199 font.setPointSize(16)210 font.setPointSize(16)
200 self.FontPreview.setFont(font)211 self.FontPreview.setFont(font)
201 self.FontPreview.setStyleSheet(212 self.FontPreview.setStyleSheet(u'background-color: %s; color: %s' % \
202 u'background-color: %s; color: %s' % (self.bg_color, self.font_color))213 (self.bg_color, self.font_color))
203214
=== modified file 'openlp/core/ui/amendthemeform.py'
--- openlp/core/ui/amendthemeform.py 2009-09-13 18:42:45 +0000
+++ openlp/core/ui/amendthemeform.py 2009-09-21 17:56:36 +0000
@@ -33,7 +33,7 @@
3333
34log = logging.getLogger(u'AmendThemeForm')34log = logging.getLogger(u'AmendThemeForm')
3535
36class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):36class AmendThemeForm(QtGui.QDialog, Ui_AmendThemeDialog):
3737
38 def __init__(self, thememanager, parent=None):38 def __init__(self, thememanager, parent=None):
39 QtGui.QDialog.__init__(self, parent)39 QtGui.QDialog.__init__(self, parent)
4040
=== modified file 'openlp/core/ui/maindisplay.py'
--- openlp/core/ui/maindisplay.py 2009-09-08 19:58:05 +0000
+++ openlp/core/ui/maindisplay.py 2009-09-21 19:26:10 +0000
@@ -26,7 +26,7 @@
26from PyQt4 import QtCore, QtGui26from PyQt4 import QtCore, QtGui
2727
28from time import sleep28from time import sleep
29from openlp.core.lib import translate, Receiver29from openlp.core.lib import translate, Receiver
3030
31class MainDisplay(QtGui.QWidget):31class MainDisplay(QtGui.QWidget):
32 """32 """
@@ -129,7 +129,7 @@
129 self.displayBlank = False129 self.displayBlank = False
130 self.frameView(self.frame)130 self.frameView(self.frame)
131131
132 def displayAlert(self, text=u''):132 def displayAlert(self, text=u''):
133 """133 """
134 Called from the Alert Tab to display an alert134 Called from the Alert Tab to display an alert
135135
@@ -141,7 +141,9 @@
141 painter = QtGui.QPainter(alertframe)141 painter = QtGui.QPainter(alertframe)
142 top = alertframe.rect().height() * 0.9142 top = alertframe.rect().height() * 0.9
143 painter.fillRect(143 painter.fillRect(
144 QtCore.QRect(0, top, alertframe.rect().width(), alertframe.rect().height() - top),144 QtCore.QRect(
145 0, top, alertframe.rect().width(),
146 alertframe.rect().height() - top),
145 QtGui.QColor(alertTab.bg_color))147 QtGui.QColor(alertTab.bg_color))
146 font = QtGui.QFont()148 font = QtGui.QFont()
147 font.setFamily(alertTab.font_face)149 font.setFamily(alertTab.font_face)
148150
=== modified file 'openlp/core/ui/mainwindow.py'
--- openlp/core/ui/mainwindow.py 2009-09-19 23:05:30 +0000
+++ openlp/core/ui/mainwindow.py 2009-09-21 17:56:36 +0000
@@ -28,7 +28,7 @@
28from PyQt4 import QtCore, QtGui28from PyQt4 import QtCore, QtGui
2929
30from openlp.core.ui import AboutForm, SettingsForm, AlertForm, \30from openlp.core.ui import AboutForm, SettingsForm, AlertForm, \
31 ServiceManager, ThemeManager, MainDisplay, SlideController, \31 ServiceManager, ThemeManager, MainDisplay, SlideController, \
32 PluginForm32 PluginForm
33from openlp.core.lib import translate, Plugin, MediaManagerItem, \33from openlp.core.lib import translate, Plugin, MediaManagerItem, \
34 SettingsTab, RenderManager, PluginConfig, str_to_bool, OpenLPDockWidget, \34 SettingsTab, RenderManager, PluginConfig, str_to_bool, OpenLPDockWidget, \
@@ -119,7 +119,7 @@
119119
120# self.MediaManagerDock.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored,120# self.MediaManagerDock.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored,
121# QtGui.QSizePolicy.Maximum))121# QtGui.QSizePolicy.Maximum))
122# geometry = self.MediaManagerDock.geometry()122# geometry = self.MediaManagerDock.geometry()
123# geometry.setWidth(self.settingsmanager.mainwindow_left)123# geometry.setWidth(self.settingsmanager.mainwindow_left)
124# self.MediaManagerDock.setGeometry(geometry)124# self.MediaManagerDock.setGeometry(geometry)
125# self.MediaManagerDock.setMinimumWidth(10)125# self.MediaManagerDock.setMinimumWidth(10)
126126
=== modified file 'openlp/core/ui/plugindialoglistform.py'
--- openlp/core/ui/plugindialoglistform.py 2009-09-18 17:37:11 +0000
+++ openlp/core/ui/plugindialoglistform.py 2009-09-21 17:56:36 +0000
@@ -9,7 +9,7 @@
99
10import logging10import logging
11from PyQt4 import QtCore, QtGui11from PyQt4 import QtCore, QtGui
12from openlp.core.lib import translate, PluginStatus12from openlp.core.lib import translate, PluginStatus
1313
14class PluginForm(QtGui.QDialog):14class PluginForm(QtGui.QDialog):
15 global log15 global log
@@ -45,14 +45,18 @@
45 self.ButtonBox.setObjectName(u'ButtonBox')45 self.ButtonBox.setObjectName(u'ButtonBox')
4646
47 self.retranslateUi(PluginForm)47 self.retranslateUi(PluginForm)
48 QtCore.QObject.connect(self.ButtonBox, QtCore.SIGNAL(u'accepted()'), PluginForm.close)48 QtCore.QObject.connect(self.ButtonBox,
49 QtCore.SIGNAL(u'accepted()'), PluginForm.close)
49 QtCore.QMetaObject.connectSlotsByName(PluginForm)50 QtCore.QMetaObject.connectSlotsByName(PluginForm)
5051
51 def retranslateUi(self, PluginForm):52 def retranslateUi(self, PluginForm):
52 PluginForm.setWindowTitle(translate(u'PluginForm', u'Plugin list'))53 PluginForm.setWindowTitle(translate(u'PluginForm', u'Plugin list'))
53 self.PluginViewList.horizontalHeaderItem(0).setText(translate(u'PluginForm', u'Name'))54 self.PluginViewList.horizontalHeaderItem(0).setText(
54 self.PluginViewList.horizontalHeaderItem(1).setText(translate(u'PluginForm', u'Version'))55 translate(u'PluginForm', u'Name'))
55 self.PluginViewList.horizontalHeaderItem(2).setText(translate(u'PluginForm', u'Status'))56 self.PluginViewList.horizontalHeaderItem(1).setText(
57 translate(u'PluginForm', u'Version'))
58 self.PluginViewList.horizontalHeaderItem(2).setText(
59 translate(u'PluginForm', u'Status'))
5660
57 def load(self):61 def load(self):
58 """62 """
@@ -68,14 +72,14 @@
68 item2 = QtGui.QTableWidgetItem(plugin.version)72 item2 = QtGui.QTableWidgetItem(plugin.version)
69 item2.setTextAlignment(QtCore.Qt.AlignVCenter)73 item2.setTextAlignment(QtCore.Qt.AlignVCenter)
70 if plugin.status == PluginStatus.Active:74 if plugin.status == PluginStatus.Active:
71 item3 = QtGui.QTableWidgetItem(translate(u'PluginForm', u'Active'))75 item3 = QtGui.QTableWidgetItem(
76 translate(u'PluginForm', u'Active'))
72 else:77 else:
73 item3 = QtGui.QTableWidgetItem(translate(u'PluginForm', u'Inactive'))78 item3 = QtGui.QTableWidgetItem(
79 translate(u'PluginForm', u'Inactive'))
74 item3.setTextAlignment(QtCore.Qt.AlignVCenter)80 item3.setTextAlignment(QtCore.Qt.AlignVCenter)
75 self.PluginViewList.setItem(row, 0, item1)81 self.PluginViewList.setItem(row, 0, item1)
76 self.PluginViewList.setItem(row, 1, item2)82 self.PluginViewList.setItem(row, 1, item2)
77 self.PluginViewList.setItem(row, 2, item3)83 self.PluginViewList.setItem(row, 2, item3)
78 self.PluginViewList.setRowHeight(row, 15)84 self.PluginViewList.setRowHeight(row, 15)
7985
80
81
8286
=== modified file 'openlp/core/ui/servicemanager.py'
--- openlp/core/ui/servicemanager.py 2009-09-19 21:45:50 +0000
+++ openlp/core/ui/servicemanager.py 2009-09-21 17:56:36 +0000
@@ -33,7 +33,7 @@
33from PyQt4 import QtCore, QtGui33from PyQt4 import QtCore, QtGui
34from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \34from openlp.core.lib import PluginConfig, OpenLPToolbar, ServiceItem, \
35 RenderManager, translate, buildIcon, ServiceType, \35 RenderManager, translate, buildIcon, ServiceType, \
36 contextMenuAction, contextMenuSeparator, Receiver36 contextMenuAction, contextMenuSeparator, Receiver
37from openlp.core.utils import ConfigHelper37from openlp.core.utils import ConfigHelper
3838
39class ServiceManagerList(QtGui.QTreeWidget):39class ServiceManagerList(QtGui.QTreeWidget):
@@ -285,7 +285,7 @@
285 temp = self.serviceItems[item]285 temp = self.serviceItems[item]
286 self.serviceItems.remove(self.serviceItems[item])286 self.serviceItems.remove(self.serviceItems[item])
287 self.serviceItems.insert(item - 1, temp)287 self.serviceItems.insert(item - 1, temp)
288 self.repaintServiceList(item - 1, count)288 self.repaintServiceList(item - 1, count)
289 self.parent.serviceChanged(False, self.serviceName)289 self.parent.serviceChanged(False, self.serviceName)
290290
291 def onServiceDown(self):291 def onServiceDown(self):
@@ -298,7 +298,7 @@
298 temp = self.serviceItems[item]298 temp = self.serviceItems[item]
299 self.serviceItems.remove(self.serviceItems[item])299 self.serviceItems.remove(self.serviceItems[item])
300 self.serviceItems.insert(item + 1, temp)300 self.serviceItems.insert(item + 1, temp)
301 self.repaintServiceList(item + 1, count)301 self.repaintServiceList(item + 1, count)
302 self.parent.serviceChanged(False, self.serviceName)302 self.parent.serviceChanged(False, self.serviceName)
303303
304 def onServiceEnd(self):304 def onServiceEnd(self):
@@ -539,7 +539,7 @@
539 pos = 0539 pos = 0
540 count = 0540 count = 0
541 for item in items:541 for item in items:
542 parentitem = item.parent()542 parentitem = item.parent()
543 if parentitem is None:543 if parentitem is None:
544 pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]544 pos = item.data(0, QtCore.Qt.UserRole).toInt()[0]
545 else:545 else:
546546
=== modified file 'openlp/core/ui/slidecontroller.py'
--- openlp/core/ui/slidecontroller.py 2009-09-20 07:38:23 +0000
+++ openlp/core/ui/slidecontroller.py 2009-09-21 17:56:36 +0000
@@ -60,8 +60,8 @@
6060
61class SlideController(QtGui.QWidget):61class SlideController(QtGui.QWidget):
62 """62 """
63 SlideController is the slide controller widget. This widget is what the user63 SlideController is the slide controller widget. This widget is what the
64 uses to control the displaying of verses/slides/etc on the screen.64 user uses to control the displaying of verses/slides/etc on the screen.
65 """65 """
66 global log66 global log
67 log = logging.getLogger(u'SlideController')67 log = logging.getLogger(u'SlideController')
@@ -74,7 +74,8 @@
74 self.settingsmanager = settingsmanager74 self.settingsmanager = settingsmanager
75 self.isLive = isLive75 self.isLive = isLive
76 self.parent = parent76 self.parent = parent
77 self.image_list = [u'Start Loop', u'Stop Loop', u'Loop Separator', u'Image SpinBox']77 self.image_list = [
78 u'Start Loop', u'Stop Loop', u'Loop Separator', u'Image SpinBox']
78 self.timer_id = 079 self.timer_id = 0
79 self.commandItem = None80 self.commandItem = None
80 self.Panel = QtGui.QWidget(parent.ControlSplitter)81 self.Panel = QtGui.QWidget(parent.ControlSplitter)
@@ -177,7 +178,8 @@
177 sizePolicy.setHeightForWidth(178 sizePolicy.setHeightForWidth(
178 self.SlidePreview.sizePolicy().hasHeightForWidth())179 self.SlidePreview.sizePolicy().hasHeightForWidth())
179 self.SlidePreview.setSizePolicy(sizePolicy)180 self.SlidePreview.setSizePolicy(sizePolicy)
180 self.SlidePreview.setFixedSize(QtCore.QSize(self.settingsmanager.slidecontroller_image, 225))181 self.SlidePreview.setFixedSize(
182 QtCore.QSize(self.settingsmanager.slidecontroller_image, 225))
181 self.SlidePreview.setFrameShape(QtGui.QFrame.Box)183 self.SlidePreview.setFrameShape(QtGui.QFrame.Box)
182 self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)184 self.SlidePreview.setFrameShadow(QtGui.QFrame.Plain)
183 self.SlidePreview.setLineWidth(1)185 self.SlidePreview.setLineWidth(1)
@@ -238,7 +240,8 @@
238 """240 """
239 log.debug(u'addServiceItem')241 log.debug(u'addServiceItem')
240 #If old item was a command tell it to stop242 #If old item was a command tell it to stop
241 if self.commandItem is not None and self.commandItem.service_item_type == ServiceType.Command:243 if self.commandItem is not None and \
244 self.commandItem.service_item_type == ServiceType.Command:
242 Receiver().send_message(u'%s_stop'% self.commandItem.name.lower())245 Receiver().send_message(u'%s_stop'% self.commandItem.name.lower())
243 self.commandItem = item246 self.commandItem = item
244 before = time.time()247 before = time.time()
@@ -246,8 +249,9 @@
246 log.info(u'Rendering took %4s' % (time.time() - before))249 log.info(u'Rendering took %4s' % (time.time() - before))
247 self.enableToolBar(item)250 self.enableToolBar(item)
248 if item.service_item_type == ServiceType.Command:251 if item.service_item_type == ServiceType.Command:
249 Receiver().send_message(u'%s_start'%item.name.lower(), \252 Receiver().send_message(u'%s_start' % item.name.lower(), \
250 [item.shortname, item.service_item_path, item.service_frames[0][u'title']])253 [item.shortname, item.service_item_path,
254 item.service_frames[0][u'title']])
251 else:255 else:
252 self.displayServiceManagerItems(item, 0)256 self.displayServiceManagerItems(item, 0)
253257
@@ -259,13 +263,15 @@
259 """263 """
260 log.debug(u'addServiceItem')264 log.debug(u'addServiceItem')
261 #If old item was a command tell it to stop265 #If old item was a command tell it to stop
262 if self.commandItem is not None and self.commandItem.service_item_type == ServiceType.Command:266 if self.commandItem is not None and \
267 self.commandItem.service_item_type == ServiceType.Command:
263 Receiver().send_message(u'%s_stop'% self.commandItem.name.lower())268 Receiver().send_message(u'%s_stop'% self.commandItem.name.lower())
264 self.commandItem = item269 self.commandItem = item
265 self.enableToolBar(item)270 self.enableToolBar(item)
266 if item.service_item_type == ServiceType.Command:271 if item.service_item_type == ServiceType.Command:
267 Receiver().send_message(u'%s_start'%item.name.lower(), \272 Receiver().send_message(u'%s_start' % item.name.lower(), \
268 [item.shortname, item.service_item_path, item.service_frames[0][u'title']])273 [item.shortname, item.service_item_path,
274 item.service_frames[0][u'title']])
269 else:275 else:
270 self.displayServiceManagerItems(item, slideno)276 self.displayServiceManagerItems(item, slideno)
271277
@@ -279,9 +285,11 @@
279 self.serviceitem = serviceitem285 self.serviceitem = serviceitem
280 self.PreviewListWidget.clear()286 self.PreviewListWidget.clear()
281 self.PreviewListWidget.setRowCount(0)287 self.PreviewListWidget.setRowCount(0)
282 self.PreviewListWidget.setColumnWidth(0, self.settingsmanager.slidecontroller_image)288 self.PreviewListWidget.setColumnWidth(
289 0, self.settingsmanager.slidecontroller_image)
283 for framenumber, frame in enumerate(self.serviceitem.frames):290 for framenumber, frame in enumerate(self.serviceitem.frames):
284 self.PreviewListWidget.setRowCount(self.PreviewListWidget.rowCount() + 1)291 self.PreviewListWidget.setRowCount(
292 self.PreviewListWidget.rowCount() + 1)
285 item = QtGui.QTableWidgetItem()293 item = QtGui.QTableWidgetItem()
286 label = QtGui.QLabel()294 label = QtGui.QLabel()
287 label.setMargin(8)295 label.setMargin(8)
@@ -294,9 +302,11 @@
294 label.setText(frame[u'text'])302 label.setText(frame[u'text'])
295 self.PreviewListWidget.setCellWidget(framenumber, 0, label)303 self.PreviewListWidget.setCellWidget(framenumber, 0, label)
296 self.PreviewListWidget.setItem(framenumber, 0, item)304 self.PreviewListWidget.setItem(framenumber, 0, item)
297 slide_height = self.settingsmanager.slidecontroller_image * self.parent.RenderManager.screen_ratio305 slide_height = self.settingsmanager.slidecontroller_image * \
306 self.parent.RenderManager.screen_ratio
298 self.PreviewListWidget.setRowHeight(framenumber, slide_height)307 self.PreviewListWidget.setRowHeight(framenumber, slide_height)
299 self.PreviewListWidget.setColumnWidth(0, self.PreviewListWidget.viewport().size().width())308 self.PreviewListWidget.setColumnWidth(
309 0, self.PreviewListWidget.viewport().size().width())
300 if slideno > self.PreviewListWidget.rowCount():310 if slideno > self.PreviewListWidget.rowCount():
301 self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount())311 self.PreviewListWidget.selectRow(self.PreviewListWidget.rowCount())
302 else:312 else:
@@ -357,7 +367,8 @@
357 Go to the previous slide.367 Go to the previous slide.
358 """368 """
359 if self.commandItem.service_item_type == ServiceType.Command:369 if self.commandItem.service_item_type == ServiceType.Command:
360 Receiver().send_message(u'%s_previous'% self.commandItem.name.lower())370 Receiver().send_message(
371 u'%s_previous'% self.commandItem.name.lower())
361 else:372 else:
362 row = self.PreviewListWidget.currentRow() - 1373 row = self.PreviewListWidget.currentRow() - 1
363 if row == -1:374 if row == -1:
@@ -377,7 +388,8 @@
377 Start the timer loop running and store the timer id388 Start the timer loop running and store the timer id
378 """389 """
379 if self.PreviewListWidget.rowCount() > 1:390 if self.PreviewListWidget.rowCount() > 1:
380 self.timer_id = self.startTimer(int(self.DelaySpinBox.value()) * 1000)391 self.timer_id = self.startTimer(
392 int(self.DelaySpinBox.value()) * 1000)
381393
382 def onStopLoop(self):394 def onStopLoop(self):
383 """395 """
@@ -398,4 +410,5 @@
398 """410 """
399 row = self.PreviewListWidget.currentRow()411 row = self.PreviewListWidget.currentRow()
400 if row > -1 and row < self.PreviewListWidget.rowCount():412 if row > -1 and row < self.PreviewListWidget.rowCount():
401 self.parent.LiveController.addServiceManagerItem(self.commandItem, row)413 self.parent.LiveController.addServiceManagerItem(
414 self.commandItem, row)
402415
=== modified file 'openlp/core/ui/splashscreen.py'
--- openlp/core/ui/splashscreen.py 2009-09-08 19:58:05 +0000
+++ openlp/core/ui/splashscreen.py 2009-09-21 17:56:36 +0000
@@ -29,36 +29,42 @@
29 def __init__(self, version):29 def __init__(self, version):
30 self.splash_screen = QtGui.QSplashScreen()30 self.splash_screen = QtGui.QSplashScreen()
31 self.setupUi()31 self.setupUi()
32 starting = translate(u'SplashScreen',u'Starting')32 starting = translate(u'SplashScreen', u'Starting')
33 self.message=starting+u'..... '+version33 self.message = starting + u'..... ' + version
3434
35 def setupUi(self):35 def setupUi(self):
36 self.splash_screen.setObjectName(u'splash_screen')36 self.splash_screen.setObjectName(u'splash_screen')
37 self.splash_screen.setWindowModality(QtCore.Qt.NonModal)37 self.splash_screen.setWindowModality(QtCore.Qt.NonModal)
38 self.splash_screen.setEnabled(True)38 self.splash_screen.setEnabled(True)
39 self.splash_screen.resize(370, 370)39 self.splash_screen.resize(370, 370)
40 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)40 sizePolicy = QtGui.QSizePolicy(
41 QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
41 sizePolicy.setHorizontalStretch(0)42 sizePolicy.setHorizontalStretch(0)
42 sizePolicy.setVerticalStretch(0)43 sizePolicy.setVerticalStretch(0)
43 sizePolicy.setHeightForWidth(self.splash_screen.sizePolicy().hasHeightForWidth())44 sizePolicy.setHeightForWidth(
45 self.splash_screen.sizePolicy().hasHeightForWidth())
44 self.splash_screen.setSizePolicy(sizePolicy)46 self.splash_screen.setSizePolicy(sizePolicy)
45 self.splash_screen.setContextMenuPolicy(QtCore.Qt.PreventContextMenu)47 self.splash_screen.setContextMenuPolicy(QtCore.Qt.PreventContextMenu)
46 icon = QtGui.QIcon()48 icon = QtGui.QIcon()
47 icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)49 icon.addPixmap(QtGui.QPixmap(u':/icon/openlp-logo-16x16.png'),
50 QtGui.QIcon.Normal, QtGui.QIcon.Off)
48 splash_image = QtGui.QPixmap(u':/graphics/openlp-splash-screen.png')51 splash_image = QtGui.QPixmap(u':/graphics/openlp-splash-screen.png')
49 self.splash_screen.setWindowIcon(icon)52 self.splash_screen.setWindowIcon(icon)
50 self.splash_screen.setPixmap(splash_image)53 self.splash_screen.setPixmap(splash_image)
51 self.splash_screen.setMask(splash_image.mask())54 self.splash_screen.setMask(splash_image.mask())
52 self.splash_screen.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.WindowStaysOnTopHint)55 self.splash_screen.setWindowFlags(
56 QtCore.Qt.SplashScreen | QtCore.Qt.WindowStaysOnTopHint)
53 self.retranslateUi()57 self.retranslateUi()
54 QtCore.QMetaObject.connectSlotsByName(self.splash_screen)58 QtCore.QMetaObject.connectSlotsByName(self.splash_screen)
5559
56 def retranslateUi(self):60 def retranslateUi(self):
57 self.splash_screen.setWindowTitle(translate(u'splash_screen', u'Splash Screen'))61 self.splash_screen.setWindowTitle(
62 translate(u'splash_screen', u'Splash Screen'))
5863
59 def show(self):64 def show(self):
60 self.splash_screen.show()65 self.splash_screen.show()
61 self.splash_screen.showMessage(self.message, QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black)66 self.splash_screen.showMessage(self.message,
67 QtCore.Qt.AlignLeft | QtCore.Qt.AlignBottom, QtCore.Qt.black)
62 self.splash_screen.repaint()68 self.splash_screen.repaint()
6369
64 def finish(self, widget):70 def finish(self, widget):
6571
=== modified file 'openlp/core/ui/thememanager.py'
--- openlp/core/ui/thememanager.py 2009-09-14 18:53:56 +0000
+++ openlp/core/ui/thememanager.py 2009-09-21 17:56:36 +0000
@@ -97,10 +97,10 @@
9797
98 def changeGlobalFromTab(self, themeName):98 def changeGlobalFromTab(self, themeName):
99 log.debug(u'changeGlobalFromTab %s', themeName)99 log.debug(u'changeGlobalFromTab %s', themeName)
100 for count in range (0, self.ThemeListWidget.count()):100 for count in range (0, self.ThemeListWidget.count()):
101 #reset the old name101 #reset the old name
102 item = self.ThemeListWidget.item(count)102 item = self.ThemeListWidget.item(count)
103 oldName = item.text()103 oldName = item.text()
104 newName = unicode(item.data(QtCore.Qt.UserRole).toString())104 newName = unicode(item.data(QtCore.Qt.UserRole).toString())
105 if oldName != newName:105 if oldName != newName:
106 self.ThemeListWidget.item(count).setText(newName)106 self.ThemeListWidget.item(count).setText(newName)
@@ -112,9 +112,9 @@
112112
113 def changeGlobalFromScreen(self, index):113 def changeGlobalFromScreen(self, index):
114 log.debug(u'changeGlobalFromScreen %s', index)114 log.debug(u'changeGlobalFromScreen %s', index)
115 for count in range (0, self.ThemeListWidget.count()):115 for count in range (0, self.ThemeListWidget.count()):
116 item = self.ThemeListWidget.item(count)116 item = self.ThemeListWidget.item(count)
117 oldName = item.text()117 oldName = item.text()
118 #reset the old name118 #reset the old name
119 if oldName != unicode(item.data(QtCore.Qt.UserRole).toString()):119 if oldName != unicode(item.data(QtCore.Qt.UserRole).toString()):
120 self.ThemeListWidget.item(count).setText(120 self.ThemeListWidget.item(count).setText(
@@ -194,12 +194,13 @@
194 path = unicode(path)194 path = unicode(path)
195 if path != u'':195 if path != u'':
196 self.config.set_last_dir(path, 1)196 self.config.set_last_dir(path, 1)
197 themePath = os.path.join(path, theme + u'.theme')197 themePath = os.path.join(path, theme + u'.theme')
198 zip = zipfile.ZipFile(themePath, 'w')198 zip = zipfile.ZipFile(themePath, 'w')
199 source = os.path.join(self.path, theme)199 source = os.path.join(self.path, theme)
200 for root, dirs, files in os.walk(source):200 for root, dirs, files in os.walk(source):
201 for name in files:201 for name in files:
202 zip.write(os.path.join(source, name), os.path.join(theme, name))202 zip.write(
203 os.path.join(source, name), os.path.join(theme, name))
203 zip.close()204 zip.close()
204205
205 def onImportTheme(self):206 def onImportTheme(self):
@@ -226,7 +227,7 @@
226 for name in files:227 for name in files:
227 if name.endswith(u'.png'):228 if name.endswith(u'.png'):
228 #check to see file is in theme root directory229 #check to see file is in theme root directory
229 theme = os.path.join(self.path, name)230 theme = os.path.join(self.path, name)
230 if os.path.exists(theme):231 if os.path.exists(theme):
231 (path, filename) = os.path.split(unicode(file))232 (path, filename) = os.path.split(unicode(file))
232 textName = os.path.splitext(name)[0]233 textName = os.path.splitext(name)[0]
@@ -244,7 +245,7 @@
244 self.pushThemes()245 self.pushThemes()
245246
246 def pushThemes(self):247 def pushThemes(self):
247 Receiver().send_message(u'update_themes', self.getThemes() )248 Receiver().send_message(u'update_themes', self.getThemes() )
248249
249 def getThemes(self):250 def getThemes(self):
250 return self.themelist251 return self.themelist
251252
=== modified file 'openlp/core/ui/themestab.py'
--- openlp/core/ui/themestab.py 2009-09-08 19:58:05 +0000
+++ openlp/core/ui/themestab.py 2009-09-21 17:56:36 +0000
@@ -24,7 +24,7 @@
2424
25from PyQt4 import QtCore, QtGui25from PyQt4 import QtCore, QtGui
2626
27from openlp.core.lib import SettingsTab, translate, Receiver27from openlp.core.lib import SettingsTab, translate, Receiver
2828
29class ThemesTab(SettingsTab):29class ThemesTab(SettingsTab):
30 """30 """
@@ -32,7 +32,8 @@
32 """32 """
33 def __init__(self, parent):33 def __init__(self, parent):
34 self.parent = parent34 self.parent = parent
35 SettingsTab.__init__(self, translate(u'ThemesTab', u'Themes'), u'Themes')35 SettingsTab.__init__(
36 self, translate(u'ThemesTab', u'Themes'), u'Themes')
3637
37 def setupUi(self):38 def setupUi(self):
38 self.setObjectName(u'ThemesTab')39 self.setObjectName(u'ThemesTab')
@@ -106,15 +107,19 @@
106 def retranslateUi(self):107 def retranslateUi(self):
107 self.GlobalGroupBox.setTitle(translate(u'ThemesTab', u'Global theme'))108 self.GlobalGroupBox.setTitle(translate(u'ThemesTab', u'Global theme'))
108 self.LevelGroupBox.setTitle(translate(u'ThemesTab', u'Theme level'))109 self.LevelGroupBox.setTitle(translate(u'ThemesTab', u'Theme level'))
109 self.SongLevelRadioButton.setText(translate(u'ThemesTab', u'Song level'))110 self.SongLevelRadioButton.setText(
111 translate(u'ThemesTab', u'Song level'))
110 self.SongLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from each song in the database. If a song doesn\'t have a theme associated with it, then use the service\'s theme. If the service doesn\'t have a theme, then use the global theme.'))112 self.SongLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from each song in the database. If a song doesn\'t have a theme associated with it, then use the service\'s theme. If the service doesn\'t have a theme, then use the global theme.'))
111 self.ServiceLevelRadioButton.setText(translate(u'ThemesTab', u'Service level'))113 self.ServiceLevelRadioButton.setText(
114 translate(u'ThemesTab', u'Service level'))
112 self.ServiceLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from the service, overriding any of the individual songs\' themes. If the service doesn\'t have a theme, then use the global theme.'))115 self.ServiceLevelLabel.setText(translate(u'ThemesTab', u'Use the theme from the service, overriding any of the individual songs\' themes. If the service doesn\'t have a theme, then use the global theme.'))
113 self.GlobalLevelRadioButton.setText(translate(u'ThemesTab', u'Global level'))116 self.GlobalLevelRadioButton.setText(
117 translate(u'ThemesTab', u'Global level'))
114 self.GlobalLevelLabel.setText(translate(u'ThemesTab', u'Use the global theme, overriding any themes associated with either the service or the songs.'))118 self.GlobalLevelLabel.setText(translate(u'ThemesTab', u'Use the global theme, overriding any themes associated with either the service or the songs.'))
115119
116 def load(self):120 def load(self):
117 self.global_style = self.config.get_config(u'theme global style', u'Global')121 self.global_style = self.config.get_config(
122 u'theme global style', u'Global')
118 self.global_theme = self.config.get_config(u'theme global theme', u'')123 self.global_theme = self.config.get_config(u'theme global theme', u'')
119 if self.global_style == u'Global':124 if self.global_style == u'Global':
120 self.GlobalLevelRadioButton.setChecked(True)125 self.GlobalLevelRadioButton.setChecked(True)
@@ -126,29 +131,35 @@
126 def save(self):131 def save(self):
127 self.config.set_config(u'theme global style', self.global_style )132 self.config.set_config(u'theme global style', self.global_style )
128 self.config.set_config(u'theme global theme',self.global_theme)133 self.config.set_config(u'theme global theme',self.global_theme)
129 Receiver().send_message(u'update_global_theme', self.global_theme )134 Receiver().send_message(u'update_global_theme', self.global_theme )
130135
131 def postSetUp(self):136 def postSetUp(self):
132 Receiver().send_message(u'update_global_theme', self.global_theme )137 Receiver().send_message(u'update_global_theme', self.global_theme )
133138
134 def onSongLevelButtonPressed(self):139 def onSongLevelButtonPressed(self):
135 self.global_style= u'Song'140 self.global_style= u'Song'
136 self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style)141 self.parent.RenderManager.set_global_theme(
142 self.global_theme, self.global_style)
137143
138 def onServiceLevelButtonPressed(self):144 def onServiceLevelButtonPressed(self):
139 self.global_style= u'Service'145 self.global_style= u'Service'
140 self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style)146 self.parent.RenderManager.set_global_theme(
147 self.global_theme, self.global_style)
141148
142 def onGlobalLevelButtonPressed(self):149 def onGlobalLevelButtonPressed(self):
143 self.global_style= u'Global'150 self.global_style= u'Global'
144 self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style)151 self.parent.RenderManager.set_global_theme(
152 self.global_theme, self.global_style)
145153
146 def onDefaultComboBoxChanged(self, value):154 def onDefaultComboBoxChanged(self, value):
147 self.global_theme = unicode(self.DefaultComboBox.currentText())155 self.global_theme = unicode(self.DefaultComboBox.currentText())
148 self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style)156 self.parent.RenderManager.set_global_theme(
149 image = self.parent.ThemeManagerContents.getPreviewImage(self.global_theme)157 self.global_theme, self.global_style)
158 image = self.parent.ThemeManagerContents.getPreviewImage(
159 self.global_theme)
150 preview = QtGui.QPixmap(unicode(image))160 preview = QtGui.QPixmap(unicode(image))
151 display = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)161 display = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio,
162 QtCore.Qt.SmoothTransformation)
152 self.DefaultListView.setPixmap(display)163 self.DefaultListView.setPixmap(display)
153164
154 def updateThemeList(self, theme_list):165 def updateThemeList(self, theme_list):
@@ -160,14 +171,18 @@
160 self.DefaultComboBox.clear()171 self.DefaultComboBox.clear()
161 for theme in theme_list:172 for theme in theme_list:
162 self.DefaultComboBox.addItem(theme)173 self.DefaultComboBox.addItem(theme)
163 id = self.DefaultComboBox.findText(self.global_theme, QtCore.Qt.MatchExactly)174 id = self.DefaultComboBox.findText(
175 self.global_theme, QtCore.Qt.MatchExactly)
164 if id == -1:176 if id == -1:
165 id = 0 # Not Found177 id = 0 # Not Found
166 self.global_theme = u''178 self.global_theme = u''
167 self.DefaultComboBox.setCurrentIndex(id)179 self.DefaultComboBox.setCurrentIndex(id)
168 self.parent.RenderManager.set_global_theme(self.global_theme, self.global_style)180 self.parent.RenderManager.set_global_theme(
181 self.global_theme, self.global_style)
169 if self.global_theme is not u'':182 if self.global_theme is not u'':
170 image = self.parent.ThemeManagerContents.getPreviewImage(self.global_theme)183 image = self.parent.ThemeManagerContents.getPreviewImage(
184 self.global_theme)
171 preview = QtGui.QPixmap(unicode(image))185 preview = QtGui.QPixmap(unicode(image))
172 display = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)186 display = preview.scaled(300, 255, QtCore.Qt.KeepAspectRatio,
187 QtCore.Qt.SmoothTransformation)
173 self.DefaultListView.setPixmap(display)188 self.DefaultListView.setPixmap(display)
174189
=== modified file 'openlp/migration/migratesongs.py'
--- openlp/migration/migratesongs.py 2009-09-08 19:58:05 +0000
+++ openlp/migration/migratesongs.py 2009-09-21 17:56:36 +0000
@@ -31,17 +31,18 @@
31from sqlalchemy import *31from sqlalchemy import *
32from sqlalchemy.sql import select32from sqlalchemy.sql import select
33from sqlalchemy import create_engine33from sqlalchemy import create_engine
34from sqlalchemy.orm import scoped_session, sessionmaker, mapper, relation, clear_mappers34from sqlalchemy.orm import scoped_session, sessionmaker, mapper, relation, \
35 clear_mappers
35from openlp.plugins.songs.lib.models import metadata, session, \36from openlp.plugins.songs.lib.models import metadata, session, \
36 engine, songs_table, Song, Author, Topic, Book37 engine, songs_table, Song, Author, Topic, Book
37from openlp.plugins.songs.lib.tables import *38from openlp.plugins.songs.lib.tables import *
38from openlp.plugins.songs.lib.classes import *39from openlp.plugins.songs.lib.classes import *
3940
40def init_models(url):41def init_models(url):
41 engine = create_engine(url)42 engine = create_engine(url)
42 metadata.bind = engine43 metadata.bind = engine
43 session = scoped_session(sessionmaker(autoflush=True, autocommit=False,44 session = scoped_session(
44 bind=engine))45 sessionmaker(autoflush=True, autocommit=False, bind=engine))
45 mapper(Author, authors_table)46 mapper(Author, authors_table)
46 mapper(TAuthor, temp_authors_table)47 mapper(TAuthor, temp_authors_table)
47 mapper(Book, song_books_table)48 mapper(Book, song_books_table)
@@ -57,7 +58,7 @@
57 return session58 return session
5859
59temp_authors_table = Table(u'authors_temp', metadata,60temp_authors_table = Table(u'authors_temp', metadata,
60 Column(u'authorid', types.Integer, primary_key=True),61 Column(u'authorid', types.Integer, primary_key=True),
61 Column(u'authorname', String(40))62 Column(u'authorname', String(40))
62)63)
6364
@@ -154,14 +155,18 @@
154 song.search_title = u''155 song.search_title = u''
155 song.search_lyrics = u''156 song.search_lyrics = u''
156 print songs_temp.songtitle157 print songs_temp.songtitle
157 aa = self.session.execute(u'select * from songauthors_temp where songid =' + unicode(songs_temp.songid) )158 aa = self.session.execute(
159 u'select * from songauthors_temp where songid =' + \
160 unicode(songs_temp.songid) )
158 for row in aa:161 for row in aa:
159 a = row['authorid']162 a = row['authorid']
160 authors_temp = self.session.query(TAuthor).get(a)163 authors_temp = self.session.query(TAuthor).get(a)
161 bb = self.session.execute(u'select * from authors where display_name = \"%s\"' % unicode(authors_temp.authorname) ).fetchone()164 bb = self.session.execute(
165 u'select * from authors where display_name = \"%s\"' % \
166 unicode(authors_temp.authorname) ).fetchone()
162 if bb is None:167 if bb is None:
163 author = Author()168 author = Author()
164 author.display_name = authors_temp.authorname169 author.display_name = authors_temp.authorname
165 author.first_name = u''170 author.first_name = u''
166 author.last_name = u''171 author.last_name = u''
167 else:172 else:
@@ -180,11 +185,11 @@
180 conn = sqlite3.connect(self.data_path + os.sep + database)185 conn = sqlite3.connect(self.data_path + os.sep + database)
181 conn.execute("""update songs set search_title =186 conn.execute("""update songs set search_title =
182 replace(replace(replace(replace(replace(replace(replace(replace(187 replace(replace(replace(replace(replace(replace(replace(replace(
183 replace(title, '&', 'and'), ',', ''), ';', ''), ':', ''),188 replace(title, '&', 'and'), ',', ''), ';', ''), ':', ''),
184 '(u', ''), ')', ''), '{', ''), '}',''),'?','');""")189 '(u', ''), ')', ''), '{', ''), '}',''),'?','');""")
185 conn.execute("""update songs set search_lyrics =190 conn.execute("""update songs set search_lyrics =
186 replace(replace(replace(replace(replace(replace(replace(replace(191 replace(replace(replace(replace(replace(replace(replace(replace(
187 replace(lyrics, '&', 'and'), ',', ''), ';', ''), ':', ''),192 replace(lyrics, '&', 'and'), ',', ''), ';', ''), ':', ''),
188 '(u', ''), ')', ''), '{', ''), '}',''),'?','')193 '(u', ''), ')', ''), '{', ''), '}',''),'?','')
189 ;""")194 ;""")
190 conn.commit()195 conn.commit()
191196
=== modified file 'openlp/plugins/audit/auditplugin.py'
--- openlp/plugins/audit/auditplugin.py 2009-09-19 19:45:15 +0000
+++ openlp/plugins/audit/auditplugin.py 2009-09-21 17:56:36 +0000
@@ -27,7 +27,7 @@
27from PyQt4 import QtCore, QtGui27from PyQt4 import QtCore, QtGui
28from datetime import date28from datetime import date
2929
30from openlp.core.lib import Plugin, Receiver, translate, str_to_bool30from openlp.core.lib import Plugin, Receiver, translate, str_to_bool
31from openlp.plugins.audit.lib import AuditTab31from openlp.plugins.audit.lib import AuditTab
3232
33class AuditPlugin(Plugin):33class AuditPlugin(Plugin):
@@ -98,7 +98,8 @@
98 QtCore.QObject.connect(Receiver.get_receiver(),98 QtCore.QObject.connect(Receiver.get_receiver(),
99 QtCore.SIGNAL(u'audit_changed'), self.onUpdateAudit)99 QtCore.SIGNAL(u'audit_changed'), self.onUpdateAudit)
100 self.auditFileName = self.config.get_config(u'audit file', u'')100 self.auditFileName = self.config.get_config(u'audit file', u'')
101 self.auditActive = str_to_bool(self.config.get_config(u'audit active', False))101 self.auditActive = str_to_bool(
102 self.config.get_config(u'audit active', False))
102 if self.auditFileName == u'':103 if self.auditFileName == u'':
103 self.auditActive = False104 self.auditActive = False
104 self.ToolsAuditItem.setEnabled(False)105 self.ToolsAuditItem.setEnabled(False)
@@ -117,7 +118,8 @@
117 """118 """
118 if self.auditActive:119 if self.auditActive:
119 for author in auditData[1]:120 for author in auditData[1]:
120 self.auditFile.write(u'\"%s\",\"%s\",\"%s\",\"%s\"\n' % (date.today(), auditData[0], author, auditData[2]))121 self.auditFile.write(u'\"%s\",\"%s\",\"%s\",\"%s\"\n' % \
122 (date.today(), auditData[0], author, auditData[2]))
121 self.auditFile.flush()123 self.auditFile.flush()
122124
123 def onUpdateAudit(self):125 def onUpdateAudit(self):
@@ -126,7 +128,8 @@
126 Sort out the file and the auditing state128 Sort out the file and the auditing state
127 """129 """
128 self.auditFileNameNew = self.config.get_config(u'audit file', u'')130 self.auditFileNameNew = self.config.get_config(u'audit file', u'')
129 self.auditActive = str_to_bool(self.config.get_config(u'audit active', False))131 self.auditActive = str_to_bool(
132 self.config.get_config(u'audit active', False))
130 if self.auditFileNameNew == u'':133 if self.auditFileNameNew == u'':
131 self.auditActive = False134 self.auditActive = False
132 self.ToolsAuditItem.setChecked(self.auditActive)135 self.ToolsAuditItem.setChecked(self.auditActive)
133136
=== modified file 'openlp/plugins/audit/lib/audittab.py'
--- openlp/plugins/audit/lib/audittab.py 2009-09-19 19:31:18 +0000
+++ openlp/plugins/audit/lib/audittab.py 2009-09-21 17:56:36 +0000
@@ -24,7 +24,7 @@
2424
25from PyQt4 import QtCore, QtGui25from PyQt4 import QtCore, QtGui
2626
27from openlp.core.lib import SettingsTab, str_to_bool, translate, Receiver27from openlp.core.lib import SettingsTab, str_to_bool, translate, Receiver
2828
29class AuditTab(SettingsTab):29class AuditTab(SettingsTab):
30 """30 """
@@ -45,7 +45,8 @@
45 self.AuditFileName.setObjectName("AuditFileName")45 self.AuditFileName.setObjectName("AuditFileName")
46 self.horizontalLayout.addWidget(self.AuditFileName)46 self.horizontalLayout.addWidget(self.AuditFileName)
47 icon1 = QtGui.QIcon()47 icon1 = QtGui.QIcon()
48 icon1.addPixmap(QtGui.QPixmap(u':/imports/import_load.png'), QtGui.QIcon.Normal, QtGui.QIcon.Off)48 icon1.addPixmap(QtGui.QPixmap(u':/imports/import_load.png'),
49 QtGui.QIcon.Normal, QtGui.QIcon.Off)
49 self.AuditFileButton = QtGui.QPushButton(self)50 self.AuditFileButton = QtGui.QPushButton(self)
50 self.AuditFileButton.setObjectName("AuditFileButton")51 self.AuditFileButton.setObjectName("AuditFileButton")
51 self.AuditFileButton.setIcon(icon1)52 self.AuditFileButton.setIcon(icon1)
@@ -63,19 +64,23 @@
63 def retranslateUi(self):64 def retranslateUi(self):
64 self.AuditModeGroupBox.setTitle(translate(u'AuditTab', u'Audit File'))65 self.AuditModeGroupBox.setTitle(translate(u'AuditTab', u'Audit File'))
65 self.AuditActive.setText(translate(u'AuditTab', 'Audit available:'))66 self.AuditActive.setText(translate(u'AuditTab', 'Audit available:'))
66 self.WarningLabel.setText(translate(u'AuditTab', u'A restart is needed for this change to become effective'))67 self.WarningLabel.setText(translate(u'AuditTab',
68 u'A restart is needed for this change to become effective'))
6769
68 def load(self):70 def load(self):
69 self.AuditFileName.setText(self.config.get_config(u'Audit file', u''))71 self.AuditFileName.setText(self.config.get_config(u'Audit file', u''))
70 self.AuditActive.setChecked(int(self.config.get_config(u'startup', 0)))72 self.AuditActive.setChecked(int(self.config.get_config(u'startup', 0)))
7173
72 def onAuditFileButtonClicked(self):74 def onAuditFileButtonClicked(self):
73 filename = QtGui.QFileDialog.getOpenFileName(self, u'Audit File',self.AuditFileName.text())75 filename = QtGui.QFileDialog.getOpenFileName(
76 self, u'Audit File',self.AuditFileName.text())
74 if filename != u'':77 if filename != u'':
75 filename = unicode(filename)78 filename = unicode(filename)
76 self.AuditFileName.setText(filename)79 self.AuditFileName.setText(filename)
7780
78 def save(self):81 def save(self):
79 self.config.set_config(u'Audit file', unicode(self.AuditFileName.text()))82 self.config.set_config(
80 self.config.set_config(u'startup', unicode(self.AuditActive.checkState()))83 u'Audit file', unicode(self.AuditFileName.text()))
84 self.config.set_config(
85 u'startup', unicode(self.AuditActive.checkState()))
81 Receiver().send_message(u'audit_changed')86 Receiver().send_message(u'audit_changed')
8287
=== modified file 'openlp/plugins/bibles/bibleplugin.py'
--- openlp/plugins/bibles/bibleplugin.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/bibles/bibleplugin.py 2009-09-21 17:56:36 +0000
@@ -25,7 +25,6 @@
25import logging25import logging
2626
27from PyQt4 import QtCore, QtGui27from PyQt4 import QtCore, QtGui
28from PyQt4.QtCore import *
2928
30from openlp.core.lib import Plugin, translate29from openlp.core.lib import Plugin, translate
3130
@@ -62,7 +61,8 @@
62 import_menu.addAction(self.ImportBibleItem)61 import_menu.addAction(self.ImportBibleItem)
63 self.ImportBibleItem.setText(translate(u'BiblePlugin', u'&Bible'))62 self.ImportBibleItem.setText(translate(u'BiblePlugin', u'&Bible'))
64 # Signals and slots63 # Signals and slots
65 QtCore.QObject.connect(self.ImportBibleItem, QtCore.SIGNAL(u'triggered()'), self.onBibleNewClick)64 QtCore.QObject.connect(self.ImportBibleItem,
65 QtCore.SIGNAL(u'triggered()'), self.onBibleNewClick)
6666
67 def add_export_menu_item(self, export_menu):67 def add_export_menu_item(self, export_menu):
68 self.ExportBibleItem = QtGui.QAction(export_menu)68 self.ExportBibleItem = QtGui.QAction(export_menu)
6969
=== modified file 'openlp/plugins/bibles/forms/bibleimportform.py'
--- openlp/plugins/bibles/forms/bibleimportform.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/bibles/forms/bibleimportform.py 2009-09-21 17:56:36 +0000
@@ -31,7 +31,7 @@
31from PyQt4 import QtCore, QtGui31from PyQt4 import QtCore, QtGui
3232
33from bibleimportdialog import Ui_BibleImportDialog33from bibleimportdialog import Ui_BibleImportDialog
34from openlp.core.lib import Receiver, translate34from openlp.core.lib import Receiver, translate
3535
3636
37class BibleImportForm(QtGui.QDialog, Ui_BibleImportDialog):37class BibleImportForm(QtGui.QDialog, Ui_BibleImportDialog):
@@ -41,7 +41,7 @@
41 """41 """
42 Class documentation goes here.42 Class documentation goes here.
43 """43 """
44 def __init__(self, config, biblemanager , bibleplugin, parent = None):44 def __init__(self, config, biblemanager, bibleplugin, parent=None):
45 '''45 '''
46 Constructor46 Constructor
47 '''47 '''
@@ -196,23 +196,28 @@
196 log.debug(u'Import Bible')196 log.debug(u'Import Bible')
197 message = None197 message = None
198 if self.bible_type == u'OSIS':198 if self.bible_type == u'OSIS':
199 loaded = self.biblemanager.register_osis_file_bible(unicode(self.BibleNameEdit.displayText()),199 loaded = self.biblemanager.register_osis_file_bible(
200 unicode(self.BibleNameEdit.displayText()),
200 self.OSISLocationEdit.displayText())201 self.OSISLocationEdit.displayText())
201 elif self.bible_type == u'CSV':202 elif self.bible_type == u'CSV':
202 loaded = self.biblemanager.register_csv_file_bible(unicode(self.BibleNameEdit.displayText()),203 loaded = self.biblemanager.register_csv_file_bible(
203 self.BooksLocationEdit.displayText(), self.VerseLocationEdit.displayText())204 unicode(self.BibleNameEdit.displayText()),
205 self.BooksLocationEdit.displayText(),
206 self.VerseLocationEdit.displayText())
204 else:207 else:
205 # set a value as it will not be needed208 # set a value as it will not be needed
206 self.setMax(1)209 self.setMax(1)
207 bible = self.bible_versions[unicode(self.BibleComboBox.currentText())]210 bible = self.bible_versions[
208 loaded = self.biblemanager.register_http_bible(unicode(self.BibleComboBox.currentText()), \211 unicode(self.BibleComboBox.currentText())]
209 unicode(self.LocationComboBox.currentText()), \212 loaded = self.biblemanager.register_http_bible(
210 unicode(bible), \213 unicode(self.BibleComboBox.currentText()),
211 unicode(self.AddressEdit.displayText()), \214 unicode(self.LocationComboBox.currentText()),
212 unicode(self.UsernameEdit .displayText()), \215 unicode(bible), unicode(self.AddressEdit.displayText()),
213 unicode(self.PasswordEdit.displayText()))216 unicode(self.UsernameEdit .displayText()),
217 unicode(self.PasswordEdit.displayText()))
214 if loaded:218 if loaded:
215 self.biblemanager.save_meta_data(unicode(self.BibleNameEdit.displayText()),219 self.biblemanager.save_meta_data(
220 unicode(self.BibleNameEdit.displayText()),
216 unicode(self.VersionNameEdit.displayText()),221 unicode(self.VersionNameEdit.displayText()),
217 unicode(self.CopyrightEdit.displayText()),222 unicode(self.CopyrightEdit.displayText()),
218 unicode(self.PermisionEdit.displayText()))223 unicode(self.PermisionEdit.displayText()))
@@ -226,7 +231,8 @@
226 return loaded, message231 return loaded, message
227232
228 def checkOsis(self):233 def checkOsis(self):
229 if len(self.BooksLocationEdit.displayText()) > 0 or len(self.VerseLocationEdit.displayText()) > 0:234 if len(self.BooksLocationEdit.displayText()) > 0 or \
235 len(self.VerseLocationEdit.displayText()) > 0:
230 self.setCsv()236 self.setCsv()
231 else:237 else:
232 # Was CSV and is not any more stops lostFocus running mad238 # Was CSV and is not any more stops lostFocus running mad
@@ -235,7 +241,8 @@
235 self.resetScreenFieldStates()241 self.resetScreenFieldStates()
236242
237 def checkHttp(self):243 def checkHttp(self):
238 if self.BibleComboBox.currentIndex() != 0 : # First slot is blank so no bible244 if self.BibleComboBox.currentIndex() != 0 :
245 # First slot is blank so no bible
239 self.setHttp()246 self.setHttp()
240 else:247 else:
241 # Was HTTP and is not any more stops lostFocus running mad248 # Was HTTP and is not any more stops lostFocus running mad
242249
=== modified file 'openlp/plugins/bibles/lib/bibleCSVimpl.py'
--- openlp/plugins/bibles/lib/bibleCSVimpl.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/bibles/lib/bibleCSVimpl.py 2009-09-21 17:56:36 +0000
@@ -42,7 +42,8 @@
42 """42 """
43 self.bibledb = bibledb43 self.bibledb = bibledb
44 self.loadbible = True44 self.loadbible = True
45 QtCore.QObject.connect(Receiver().get_receiver(),QtCore.SIGNAL(u'openlpstopimport'),self.stop_import)45 QtCore.QObject.connect(Receiver().get_receiver(),
46 QtCore.SIGNAL(u'openlpstopimport'), self.stop_import)
4647
47 def stop_import(self):48 def stop_import(self):
48 self.loadbible= False49 self.loadbible= False
@@ -80,7 +81,7 @@
80 # split into 3 units and leave the rest as a single field81 # split into 3 units and leave the rest as a single field
81 p = line.split(u',', 3)82 p = line.split(u',', 3)
82 p0 = p[0].replace(u'"', u'')83 p0 = p[0].replace(u'"', u'')
83 p3 = p[3].replace(u'"',u'')84 p3 = p[3].replace(u'"',u'')
84 if book_ptr is not p0:85 if book_ptr is not p0:
85 book = self.bibledb.get_bible_book(p0)86 book = self.bibledb.get_bible_book(p0)
86 book_ptr = book.name87 book_ptr = book.name
8788
=== modified file 'openlp/plugins/bibles/lib/bibleDBimpl.py'
--- openlp/plugins/bibles/lib/bibleDBimpl.py 2009-09-12 17:24:16 +0000
+++ openlp/plugins/bibles/lib/bibleDBimpl.py 2009-09-21 17:56:36 +0000
@@ -59,7 +59,7 @@
59 self._load_testament(u'New Testament')59 self._load_testament(u'New Testament')
60 self._load_testament(u'Apocrypha')60 self._load_testament(u'Apocrypha')
6161
62 def add_verse(self, bookid, chap, vse, text):62 def add_verse(self, bookid, chap, vse, text):
63 #log.debug(u'add_verse %s,%s,%s", bookid, chap, vse)63 #log.debug(u'add_verse %s,%s,%s", bookid, chap, vse)
64 verse = Verse()64 verse = Verse()
65 verse.book_id = bookid65 verse.book_id = bookid
@@ -113,7 +113,7 @@
113 return False113 return False
114114
115 def _load_testament(self, testament):115 def _load_testament(self, testament):
116 log.debug(u'load_testaments %s', testament)116 log.debug(u'load_testaments %s', testament)
117 test = ONTestament()117 test = ONTestament()
118 test.name = testament118 test.name = testament
119 self.session.add(test)119 self.session.add(test)
120120
=== modified file 'openlp/plugins/bibles/lib/bibleHTTPimpl.py'
--- openlp/plugins/bibles/lib/bibleHTTPimpl.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/bibles/lib/bibleHTTPimpl.py 2009-09-21 19:26:10 +0000
@@ -39,21 +39,32 @@
39 log.debug(u'init %s', proxyurl)39 log.debug(u'init %s', proxyurl)
40 self.proxyurl = proxyurl40 self.proxyurl = proxyurl
4141
42 def get_bible_chapter(self, version, bookid, bookname, chapter) :42 def get_bible_chapter(self, version, bookid, bookname, chapter) :
43 """43 """
44 Access and decode bibles via the BibleGateway website44 Access and decode bibles via the BibleGateway website
45 Version - the version of the bible like 31 for New International version45
46 bookid - Book id for the book of the bible - eg 1 for Genesis46 ``Version``
47 bookname - not used47 The version of the bible like 31 for New International version
48 chapter - chapter number48
49 ``bookid``
50 Book id for the book of the bible - eg 1 for Genesis
51
52 ``bookname``
53 Not used
54
55 ``chapter``
56 Chapter number
49 """57 """
50 log.debug( u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter)58 log.debug(u'get_bible_chapter %s,%s,%s,%s',
51 urlstring = u'http://www.biblegateway.com/passage/?book_id='+unicode(bookid)+u'&chapter'+unicode(chapter)+u'&version='+unicode(version)59 version, bookid, bookname, chapter)
60 urlstring = u'http://www.biblegateway.com/passage/?book_id=' + \
61 unicode(bookid) + u'&chapter' + unicode(chapter) + u'&version=' + \
62 unicode(version)
52 xml_string = self._get_web_text(urlstring, self.proxyurl)63 xml_string = self._get_web_text(urlstring, self.proxyurl)
53 #print xml_string64 #print xml_string
54 VerseSearch = u'class='+u'"'+u'sup'+u'"'+u'>'65 VerseSearch = u'class=' + u'"' + u'sup' + u'"' + u'>'
55 verse = 166 verse = 1
56 i= xml_string.find(u'result-text-style-normal')67 i = xml_string.find(u'result-text-style-normal')
57 xml_string = xml_string[i:len(xml_string)]68 xml_string = xml_string[i:len(xml_string)]
58 versePos = xml_string.find(VerseSearch)69 versePos = xml_string.find(VerseSearch)
59 #print versePos70 #print versePos
@@ -62,11 +73,11 @@
62 verseText = '' # clear out string73 verseText = '' # clear out string
63 versePos = xml_string.find(u'</span', versePos)74 versePos = xml_string.find(u'</span', versePos)
64 i = xml_string.find(VerseSearch, versePos+1)75 i = xml_string.find(VerseSearch, versePos+1)
65 #print i , versePos76 #print i , versePos
66 if i == -1:77 if i == -1:
67 i = xml_string.find(u'</div', versePos+1)78 i = xml_string.find(u'</div', versePos+1)
68 j = xml_string.find(u'<strong', versePos+1)79 j = xml_string.find(u'<strong', versePos+1)
69 #print i , j80 #print i , j
70 if j > 0 and j < i:81 if j > 0 and j < i:
71 i = j82 i = j
72 verseText = xml_string[versePos + 7 : i ]83 verseText = xml_string[versePos + 7 : i ]
@@ -75,9 +86,10 @@
75 bible[verse] = self._clean_text(verseText) # store the verse86 bible[verse] = self._clean_text(verseText) # store the verse
76 versePos = -187 versePos = -1
77 else:88 else:
78 i = xml_string[:i].rfind(u'<span')+189 i = xml_string[:i].rfind(u'<span') + 1
79 verseText = xml_string[versePos + 7 : i - 1 ] # Loose the </span>90 verseText = xml_string[versePos + 7 : i - 1] # Loose </span>
80 xml_string = xml_string[i - 1 :len(xml_string)] # chop off verse 191 # Chop off verse 1
92 xml_string = xml_string[i - 1 :len(xml_string)]
81 versePos = xml_string.find(VerseSearch) #look for the next verse93 versePos = xml_string.find(VerseSearch) #look for the next verse
82 bible[verse] = self._clean_text(verseText) # store the verse94 bible[verse] = self._clean_text(verseText) # store the verse
83 verse += 195 verse += 1
@@ -92,16 +104,26 @@
92 log.debug(u'init %s', proxyurl)104 log.debug(u'init %s', proxyurl)
93 self.proxyurl = proxyurl105 self.proxyurl = proxyurl
94106
95 def get_bible_chapter(self, version, bookid, bookname, chapter) :107 def get_bible_chapter(self, version, bookid, bookname, chapter) :
96 log.debug( u'getBibleChapter %s,%s,%s,%s', version, bookid, bookname, chapter)108 log.debug(u'getBibleChapter %s,%s,%s,%s',
109 version, bookid, bookname, chapter)
97 """110 """
98 Access and decode bibles via the Crosswalk website111 Access and decode bibles via the Crosswalk website
99 Version - the version of the bible like niv for New International version112
100 bookid - not used113 ``version``
101 bookname - text name of in english eg 'gen' for Genesis114 The version of the bible like niv for New International Version
102 chapter - chapter number115
116 ``bookid``
117 Not used
118
119 ``bookname``
120 Text name of in english e.g. 'gen' for Genesis
121
122 ``chapter``
123 Chapter number
103 """124 """
104 log.debug(u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter)125 log.debug(u'get_bible_chapter %s,%s,%s,%s',
126 version, bookid, bookname, chapter)
105 bookname = bookname.replace(u' ', u'')127 bookname = bookname.replace(u' ', u'')
106 urlstring = u'http://bible.crosswalk.com/OnlineStudyBible/bible.cgi?word=%s+%d&version=%s' % (bookname, chapter, version)128 urlstring = u'http://bible.crosswalk.com/OnlineStudyBible/bible.cgi?word=%s+%d&version=%s' % (bookname, chapter, version)
107 xml_string = self._get_web_text(urlstring, self.proxyurl)129 xml_string = self._get_web_text(urlstring, self.proxyurl)
@@ -135,7 +157,7 @@
135 #remove the <B> at the front157 #remove the <B> at the front
136 xml_string = xml_string[i + 3 :len(xml_string)]158 xml_string = xml_string[i + 3 :len(xml_string)]
137 versePos = xml_string.find(u'<BLOCKQUOTE>')159 versePos = xml_string.find(u'<BLOCKQUOTE>')
138 #log.debug(u'verse pos %d', versePos)160 #log.debug(u'verse pos %d', versePos)
139 bible = {}161 bible = {}
140 while versePos > 0:162 while versePos > 0:
141 verseText = u''163 verseText = u''
@@ -153,7 +175,7 @@
153 verseText = xml_string[versePos: i]175 verseText = xml_string[versePos: i]
154 versePos = 0176 versePos = 0
155 else:177 else:
156 #log.debug( i, versePos)178 #log.debug( i, versePos)
157 verseText = xml_string[versePos: i]179 verseText = xml_string[versePos: i]
158 versePos = i180 versePos = i
159 #print verseText181 #print verseText
@@ -170,7 +192,9 @@
170 def __init__(self):192 def __init__(self):
171 """193 """
172 Finds all the bibles defined for the system194 Finds all the bibles defined for the system
173 Creates an Interface Object for each bible containing connection information195 Creates an Interface Object for each bible containing connection
196 information
197
174 Throws Exception if no Bibles are found.198 Throws Exception if no Bibles are found.
175199
176 Init confirms the bible exists and stores the database path.200 Init confirms the bible exists and stores the database path.
@@ -202,18 +226,19 @@
202 log.debug(u'set_bible_source %s', biblesource)226 log.debug(u'set_bible_source %s', biblesource)
203 self.biblesource = biblesource227 self.biblesource = biblesource
204228
205 def get_bible_chapter(self, version, bookid, bookname, chapter):229 def get_bible_chapter(self, version, bookid, bookname, chapter):
206 """230 """
207 Receive the request and call the relevant handler methods231 Receive the request and call the relevant handler methods
208 """232 """
209 log.debug(u'get_bible_chapter %s,%s,%s,%s', version, bookid, bookname, chapter)233 log.debug(u'get_bible_chapter %s,%s,%s,%s',
234 version, bookid, bookname, chapter)
210 log.debug(u'biblesource = %s', self.biblesource)235 log.debug(u'biblesource = %s', self.biblesource)
211 try:236 try:
212 if self.biblesource.lower() == u'crosswalk':237 if self.biblesource.lower() == u'crosswalk':
213 ev = CWExtract(self.proxyurl)238 ev = CWExtract(self.proxyurl)
214 else:239 else:
215 ev = BGExtract(self.proxyurl)240 ev = BGExtract(self.proxyurl)
216 return ev.get_bible_chapter(self.bibleid, bookid, bookname, chapter)241 return ev.get_bible_chapter(self.bibleid, bookid, bookname, chapter)
217 except Exception, e:242 except Exception, e:
218 log.error(u'Error thrown = %s', e.args[0])243 log.error(u'Error thrown = %s', e.args[0])
219 print e244 print e
220245
=== modified file 'openlp/plugins/bibles/lib/bibleOSISimpl.py'
--- openlp/plugins/bibles/lib/bibleOSISimpl.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/bibles/lib/bibleOSISimpl.py 2009-09-21 17:56:36 +0000
@@ -86,7 +86,7 @@
86 The Import dialog, so that we can increase the counter on86 The Import dialog, so that we can increase the counter on
87 the progress bar.87 the progress bar.
88 """88 """
89 detect_file = open(osisfile_record, u'r')89 detect_file = open(osisfile_record, u'r')
90 details = chardet.detect(detect_file.read(2048))90 details = chardet.detect(detect_file.read(2048))
91 detect_file.close()91 detect_file.close()
92 osis = codecs.open(osisfile_record, u'r', details['encoding'])92 osis = codecs.open(osisfile_record, u'r', details['encoding'])
@@ -102,7 +102,7 @@
102 pos = file_record.find(verseText)102 pos = file_record.find(verseText)
103 if pos > -1: # we have a verse103 if pos > -1: # we have a verse
104 epos= file_record.find(u'>', pos)104 epos= file_record.find(u'>', pos)
105 ref = file_record[pos+15:epos-1] # Book Reference105 ref = file_record[pos+15:epos-1] # Book Reference
106 #lets find the bible text only106 #lets find the bible text only
107 # find start of text107 # find start of text
108 pos = epos + 1108 pos = epos + 1
@@ -113,10 +113,10 @@
113 text = self.remove_block(u'<title', u'</title>', text)113 text = self.remove_block(u'<title', u'</title>', text)
114 text = self.remove_block(u'<note', u'</note>', text)114 text = self.remove_block(u'<note', u'</note>', text)
115 text = self.remove_block(u'<divineName', u'</divineName>', text)115 text = self.remove_block(u'<divineName', u'</divineName>', text)
116 text = self.remove_tag(u'<lb', text)116 text = self.remove_tag(u'<lb', text)
117 text = self.remove_tag(u'<q', text)117 text = self.remove_tag(u'<q', text)
118 text = self.remove_tag(u'<l', text)118 text = self.remove_tag(u'<l', text)
119 text = self.remove_tag(u'<lg', text)119 text = self.remove_tag(u'<lg', text)
120 # Strange tags where the end is not the same as the start120 # Strange tags where the end is not the same as the start
121 # The must be in this order as at least one bible has them121 # The must be in this order as at least one bible has them
122 # crossing and the removal does not work.122 # crossing and the removal does not work.
@@ -127,12 +127,12 @@
127 #print "Y", search_text, e127 #print "Y", search_text, e
128 pos = -1128 pos = -1
129 else:129 else:
130 text = text[:pos] + text[epos + 4: ]130 text = text[:pos] + text[epos + 4: ]
131 pos = text.find(u'<FI>')131 pos = text.find(u'<FI>')
132 pos = text.find(u'<RF>')132 pos = text.find(u'<RF>')
133 while pos > -1:133 while pos > -1:
134 epos = text.find(u'<Rf>', pos)134 epos = text.find(u'<Rf>', pos)
135 text = text[:pos] + text[epos + 4: ]135 text = text[:pos] + text[epos + 4: ]
136 #print "X", pos, epos, text136 #print "X", pos, epos, text
137 pos = text.find(u'<RF>')137 pos = text.find(u'<RF>')
138 # split up the reference138 # split up the reference
@@ -184,7 +184,7 @@
184 if epos == -1:184 if epos == -1:
185 pos = -1185 pos = -1
186 else:186 else:
187 text = text[:pos] + text[epos + len(end_tag): ]187 text = text[:pos] + text[epos + len(end_tag): ]
188 pos = text.find(start_tag)188 pos = text.find(start_tag)
189 return text189 return text
190190
@@ -203,6 +203,6 @@
203 pos = text.find(start_tag)203 pos = text.find(start_tag)
204 while pos > -1:204 while pos > -1:
205 epos = text.find(u'/>', pos)205 epos = text.find(u'/>', pos)
206 text = text[:pos] + text[epos + 2: ]206 text = text[:pos] + text[epos + 2: ]
207 pos = text.find(start_tag)207 pos = text.find(start_tag)
208 return text208 return text
209209
=== modified file 'openlp/plugins/bibles/lib/biblestab.py'
--- openlp/plugins/bibles/lib/biblestab.py 2009-09-13 07:39:48 +0000
+++ openlp/plugins/bibles/lib/biblestab.py 2009-09-21 17:56:36 +0000
@@ -26,7 +26,7 @@
2626
27from PyQt4 import Qt, QtCore, QtGui27from PyQt4 import Qt, QtCore, QtGui
2828
29from openlp.core.lib import translate, str_to_bool, Receiver29from openlp.core.lib import translate, str_to_bool, Receiver
30from openlp.core.lib import SettingsTab30from openlp.core.lib import SettingsTab
3131
32class BiblesTab(SettingsTab):32class BiblesTab(SettingsTab):
@@ -42,7 +42,8 @@
42 self.show_new_chapters = False42 self.show_new_chapters = False
43 self.display_style = 043 self.display_style = 0
44 self.bible_search = True44 self.bible_search = True
45 SettingsTab.__init__(self, translate(u'BiblesTab', u'Bibles'), u'Bibles')45 SettingsTab.__init__(
46 self, translate(u'BiblesTab', u'Bibles'), u'Bibles')
4647
47 def setupUi(self):48 def setupUi(self):
48 self.setObjectName(u'BiblesTab')49 self.setObjectName(u'BiblesTab')
@@ -142,34 +143,53 @@
142 self.BibleLayout.addWidget(self.BibleRightWidget)143 self.BibleLayout.addWidget(self.BibleRightWidget)
143 # Signals and slots144 # Signals and slots
144 QtCore.QObject.connect(self.NewChaptersCheckBox,145 QtCore.QObject.connect(self.NewChaptersCheckBox,
145 QtCore.SIGNAL(u'stateChanged(int)'), self.onNewChaptersCheckBoxChanged)146 QtCore.SIGNAL(u'stateChanged(int)'),
147 self.onNewChaptersCheckBoxChanged)
146 QtCore.QObject.connect(self.BibleSearchCheckBox,148 QtCore.QObject.connect(self.BibleSearchCheckBox,
147 QtCore.SIGNAL(u'stateChanged(int)'), self.onBibleSearchCheckBoxChanged)149 QtCore.SIGNAL(u'stateChanged(int)'),
150 self.onBibleSearchCheckBoxChanged)
148 QtCore.QObject.connect(self.DisplayStyleComboBox,151 QtCore.QObject.connect(self.DisplayStyleComboBox,
149 QtCore.SIGNAL(u'activated(int)'), self.onDisplayStyleComboBoxChanged)152 QtCore.SIGNAL(u'activated(int)'),
153 self.onDisplayStyleComboBoxChanged)
150 QtCore.QObject.connect(self.BibleThemeComboBox,154 QtCore.QObject.connect(self.BibleThemeComboBox,
151 QtCore.SIGNAL(u'activated(int)'), self.onBibleThemeComboBoxChanged)155 QtCore.SIGNAL(u'activated(int)'), self.onBibleThemeComboBoxChanged)
152 QtCore.QObject.connect(self.LayoutStyleComboBox,156 QtCore.QObject.connect(self.LayoutStyleComboBox,
153 QtCore.SIGNAL(u'activated(int)'), self.onLayoutStyleComboBoxChanged)157 QtCore.SIGNAL(u'activated(int)'),
158 self.onLayoutStyleComboBoxChanged)
154 QtCore.QObject.connect(Receiver.get_receiver(),159 QtCore.QObject.connect(Receiver.get_receiver(),
155 QtCore.SIGNAL(u'update_themes'), self.updateThemeList)160 QtCore.SIGNAL(u'update_themes'), self.updateThemeList)
156161
157 def retranslateUi(self):162 def retranslateUi(self):
158 self.VerseDisplayGroupBox.setTitle(translate(u'SettingsForm', u'Verse Display'))163 self.VerseDisplayGroupBox.setTitle(
159 self.NewChaptersCheckBox.setText(translate(u'SettingsForm', u'Only show new chapter numbers'))164 translate(u'SettingsForm', u'Verse Display'))
160 self.LayoutStyleLabel.setText(translate(u'SettingsForm', u'Layout Style:'))165 self.NewChaptersCheckBox.setText(
161 self.DisplayStyleLabel.setText(translate(u'SettingsForm', u'Display Style:'))166 translate(u'SettingsForm', u'Only show new chapter numbers'))
162 self.BibleThemeLabel.setText(translate(u'SettingsForm', u'Bible Theme:'))167 self.LayoutStyleLabel.setText(
163 self.LayoutStyleComboBox.setItemText(0, translate(u'SettingsForm', u'verse per slide'))168 translate(u'SettingsForm', u'Layout Style:'))
164 self.LayoutStyleComboBox.setItemText(1, translate(u'SettingsForm', u'verse per line'))169 self.DisplayStyleLabel.setText(
165 self.LayoutStyleComboBox.setItemText(2, translate(u'SettingsForm', u'continuous'))170 translate(u'SettingsForm', u'Display Style:'))
166 self.DisplayStyleComboBox.setItemText(0, translate(u'SettingsForm', u'No brackets'))171 self.BibleThemeLabel.setText(
167 self.DisplayStyleComboBox.setItemText(1, translate(u'SettingsForm', u'( and )'))172 translate(u'SettingsForm', u'Bible Theme:'))
168 self.DisplayStyleComboBox.setItemText(2, translate(u'SettingsForm', u'{ and }'))173 self.LayoutStyleComboBox.setItemText(
169 self.DisplayStyleComboBox.setItemText(3, translate(u'SettingsForm', u'[ and ]'))174 0, translate(u'SettingsForm', u'verse per slide'))
170 self.ChangeNoteLabel.setText(translate(u'SettingsForm', u'Note:\nChanges don\'t affect verses already in the service'))175 self.LayoutStyleComboBox.setItemText(
171 self.BibleSearchGroupBox.setTitle(translate(u'SettingsForm', u'Search'))176 1, translate(u'SettingsForm', u'verse per line'))
172 self.BibleSearchCheckBox.setText(translate(u'SettingsForm', u'Search-as-you-type'))177 self.LayoutStyleComboBox.setItemText(
178 2, translate(u'SettingsForm', u'continuous'))
179 self.DisplayStyleComboBox.setItemText(
180 0, translate(u'SettingsForm', u'No brackets'))
181 self.DisplayStyleComboBox.setItemText(
182 1, translate(u'SettingsForm', u'( and )'))
183 self.DisplayStyleComboBox.setItemText(
184 2, translate(u'SettingsForm', u'{ and }'))
185 self.DisplayStyleComboBox.setItemText(
186 3, translate(u'SettingsForm', u'[ and ]'))
187 self.ChangeNoteLabel.setText(translate(u'SettingsForm',
188 u'Note:\nChanges don\'t affect verses already in the service'))
189 self.BibleSearchGroupBox.setTitle(
190 translate(u'SettingsForm', u'Search'))
191 self.BibleSearchCheckBox.setText(
192 translate(u'SettingsForm', u'Search-as-you-type'))
173193
174 def onBibleThemeComboBoxChanged(self):194 def onBibleThemeComboBoxChanged(self):
175 self.bible_theme = self.BibleThemeComboBox.currentText()195 self.bible_theme = self.BibleThemeComboBox.currentText()
@@ -195,20 +215,27 @@
195 self.bible_search = True215 self.bible_search = True
196216
197 def load(self):217 def load(self):
198 self.show_new_chapters = str_to_bool(self.config.get_config(u'display new chapter', u'False'))218 self.show_new_chapters = str_to_bool(
199 self.display_style = int(self.config.get_config(u'display brackets', u'0'))219 self.config.get_config(u'display new chapter', u'False'))
200 self.layout_style = int(self.config.get_config(u'verse layout style', u'0'))220 self.display_style = int(
221 self.config.get_config(u'display brackets', u'0'))
222 self.layout_style = int(
223 self.config.get_config(u'verse layout style', u'0'))
201 self.bible_theme = self.config.get_config(u'bible theme', u'0')224 self.bible_theme = self.config.get_config(u'bible theme', u'0')
202 self.bible_search = str_to_bool(self.config.get_config(u'search as type', u'True'))225 self.bible_search = str_to_bool(
226 self.config.get_config(u'search as type', u'True'))
203 self.NewChaptersCheckBox.setChecked(self.show_new_chapters)227 self.NewChaptersCheckBox.setChecked(self.show_new_chapters)
204 self.DisplayStyleComboBox.setCurrentIndex(self.display_style)228 self.DisplayStyleComboBox.setCurrentIndex(self.display_style)
205 self.LayoutStyleComboBox.setCurrentIndex(self.layout_style)229 self.LayoutStyleComboBox.setCurrentIndex(self.layout_style)
206 self.BibleSearchCheckBox.setChecked(self.bible_search)230 self.BibleSearchCheckBox.setChecked(self.bible_search)
207231
208 def save(self):232 def save(self):
209 self.config.set_config(u'display new chapter', unicode(self.show_new_chapters))233 self.config.set_config(
210 self.config.set_config(u'display brackets', unicode(self.display_style))234 u'display new chapter', unicode(self.show_new_chapters))
211 self.config.set_config(u'verse layout style', unicode(self.layout_style))235 self.config.set_config(
236 u'display brackets', unicode(self.display_style))
237 self.config.set_config(
238 u'verse layout style', unicode(self.layout_style))
212 self.config.set_config(u'search as type', unicode(self.bible_search))239 self.config.set_config(u'search as type', unicode(self.bible_search))
213 self.config.set_config(u'bible theme', unicode(self.bible_theme))240 self.config.set_config(u'bible theme', unicode(self.bible_theme))
214241
@@ -220,7 +247,8 @@
220 self.BibleThemeComboBox.addItem(u'')247 self.BibleThemeComboBox.addItem(u'')
221 for theme in theme_list:248 for theme in theme_list:
222 self.BibleThemeComboBox.addItem(theme)249 self.BibleThemeComboBox.addItem(theme)
223 id = self.BibleThemeComboBox.findText(unicode(self.bible_theme), QtCore.Qt.MatchExactly)250 id = self.BibleThemeComboBox.findText(
251 unicode(self.bible_theme), QtCore.Qt.MatchExactly)
224 if id == -1:252 if id == -1:
225 # Not Found253 # Not Found
226 id = 0254 id = 0
227255
=== modified file 'openlp/plugins/bibles/lib/manager.py'
--- openlp/plugins/bibles/lib/manager.py 2009-09-17 23:10:25 +0000
+++ openlp/plugins/bibles/lib/manager.py 2009-09-21 17:56:36 +0000
@@ -81,7 +81,7 @@
81 def reload_bibles(self):81 def reload_bibles(self):
82 log.debug(u'Reload bibles')82 log.debug(u'Reload bibles')
83 files = self.config.get_files(self.bibleSuffix)83 files = self.config.get_files(self.bibleSuffix)
84 log.debug(u'Bible Files %s', files )84 log.debug(u'Bible Files %s', files )
85 self.bible_db_cache = {}85 self.bible_db_cache = {}
86 self.bible_http_cache = {}86 self.bible_http_cache = {}
87 # books of the bible with testaments87 # books of the bible with testaments
@@ -166,7 +166,7 @@
166 Defaults to *None*. The password to accompany the username.166 Defaults to *None*. The password to accompany the username.
167 """167 """
168 log.debug(u'register_HTTP_bible %s, %s, %s, %s, %s, %s',168 log.debug(u'register_HTTP_bible %s, %s, %s, %s, %s, %s',
169 biblename, biblesource, bibleid, proxyurl, proxyid, proxypass)169 biblename, biblesource, bibleid, proxyurl, proxyid, proxypass)
170 if self._is_new_bible(biblename):170 if self._is_new_bible(biblename):
171 # Create new Bible171 # Create new Bible
172 nbible = BibleDBImpl(self.biblePath, biblename, self.config)172 nbible = BibleDBImpl(self.biblePath, biblename, self.config)
@@ -271,7 +271,7 @@
271 log.debug(u'get_bible_books %s', bible)271 log.debug(u'get_bible_books %s', bible)
272 return self.bible_db_cache[bible].get_bible_books()272 return self.bible_db_cache[bible].get_bible_books()
273273
274 def get_book_chapter_count(self, bible, book):274 def get_book_chapter_count(self, bible, book):
275 """275 """
276 Returns the number of Chapters for a given book276 Returns the number of Chapters for a given book
277 """277 """
@@ -283,7 +283,7 @@
283 Returns all the number of verses for a given283 Returns all the number of verses for a given
284 book and chapterMaxBibleBookVerses284 book and chapterMaxBibleBookVerses
285 """285 """
286 log.debug(u'get_book_verse_count %s,%s,%s', bible, book, chapter)286 log.debug(u'get_book_verse_count %s,%s,%s', bible, book, chapter)
287 return self.bible_db_cache[bible].get_max_bible_book_verses(287 return self.bible_db_cache[bible].get_max_bible_book_verses(
288 book, chapter)288 book, chapter)
289289
@@ -300,7 +300,7 @@
300 Saves the bibles meta data300 Saves the bibles meta data
301 """301 """
302 log.debug(u'save_meta data %s,%s, %s,%s',302 log.debug(u'save_meta data %s,%s, %s,%s',
303 bible, version, copyright, permissions)303 bible, version, copyright, permissions)
304 self.bible_db_cache[bible].save_meta(u'Version', version)304 self.bible_db_cache[bible].save_meta(u'Version', version)
305 self.bible_db_cache[bible].save_meta(u'Copyright', copyright)305 self.bible_db_cache[bible].save_meta(u'Copyright', copyright)
306 self.bible_db_cache[bible].save_meta(u'Permissions', permissions)306 self.bible_db_cache[bible].save_meta(u'Permissions', permissions)
@@ -309,7 +309,7 @@
309 """309 """
310 Returns the meta data for a given key310 Returns the meta data for a given key
311 """311 """
312 log.debug(u'get_meta %s,%s', bible, key)312 log.debug(u'get_meta %s,%s', bible, key)
313 return self.bible_db_cache[bible].get_meta(key)313 return self.bible_db_cache[bible].get_meta(key)
314314
315 def get_verse_text(self, bible, bookname, schapter, echapter, sverse,315 def get_verse_text(self, bible, bookname, schapter, echapter, sverse,
@@ -414,7 +414,7 @@
414 """414 """
415 Check cache to see if new bible415 Check cache to see if new bible
416 """416 """
417 for b , o in self.bible_db_cache.iteritems():417 for b , o in self.bible_db_cache.iteritems():
418 log.debug(u'Bible from cache in is_new_bible %s', b )418 log.debug(u'Bible from cache in is_new_bible %s', b )
419 if b == name :419 if b == name :
420 return False420 return False
421421
=== modified file 'openlp/plugins/bibles/lib/mediaitem.py'
--- openlp/plugins/bibles/lib/mediaitem.py 2009-09-16 10:50:13 +0000
+++ openlp/plugins/bibles/lib/mediaitem.py 2009-09-21 17:56:36 +0000
@@ -28,7 +28,7 @@
28from PyQt4 import QtCore, QtGui28from PyQt4 import QtCore, QtGui
2929
30from openlp.core.lib import translate, ServiceItem, MediaManagerItem, \30from openlp.core.lib import translate, ServiceItem, MediaManagerItem, \
31 Receiver, contextMenuAction, contextMenuSeparator, BaseListWithDnD31 Receiver, contextMenuAction, contextMenuSeparator, BaseListWithDnD
32from openlp.plugins.bibles.forms import BibleImportForm32from openlp.plugins.bibles.forms import BibleImportForm
33from openlp.plugins.bibles.lib.manager import BibleMode33from openlp.plugins.bibles.lib.manager import BibleMode
3434
@@ -329,10 +329,10 @@
329 log.debug(u'Advanced Search Button pressed')329 log.debug(u'Advanced Search Button pressed')
330 bible = unicode(self.AdvancedVersionComboBox.currentText())330 bible = unicode(self.AdvancedVersionComboBox.currentText())
331 book = unicode(self.AdvancedBookComboBox.currentText())331 book = unicode(self.AdvancedBookComboBox.currentText())
332 chapter_from = int(self.AdvancedFromChapter.currentText())332 chapter_from = int(self.AdvancedFromChapter.currentText())
333 chapter_to = int(self.AdvancedToChapter.currentText())333 chapter_to = int(self.AdvancedToChapter.currentText())
334 verse_from = int(self.AdvancedFromVerse.currentText())334 verse_from = int(self.AdvancedFromVerse.currentText())
335 verse_to = int(self.AdvancedToVerse.currentText())335 verse_to = int(self.AdvancedToVerse.currentText())
336 self.search_results = self.parent.biblemanager.get_verse_text(336 self.search_results = self.parent.biblemanager.get_verse_text(
337 bible, book, chapter_from, chapter_to, verse_from, verse_to)337 bible, book, chapter_from, chapter_to, verse_from, verse_to)
338 if self.ClearAdvancedSearchComboBox.currentIndex() == 0:338 if self.ClearAdvancedSearchComboBox.currentIndex() == 0:
@@ -374,7 +374,7 @@
374 raw_footer = []374 raw_footer = []
375 bible_text = u''375 bible_text = u''
376 for item in items:376 for item in items:
377 bitem = self.ListView.item(item.row())377 bitem = self.ListView.item(item.row())
378 text = unicode((bitem.data(QtCore.Qt.UserRole)).toString())378 text = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
379 verse = text[:text.find(u'(')]379 verse = text[:text.find(u'(')]
380 bible = text[text.find(u'(') + 1:-1]380 bible = text[text.find(u'(') + 1:-1]
@@ -457,13 +457,13 @@
457 self.adjustComboBox(1, self.verses, self.AdvancedToVerse)457 self.adjustComboBox(1, self.verses, self.AdvancedToVerse)
458458
459 def adjustComboBox(self, frm, to , combo):459 def adjustComboBox(self, frm, to , combo):
460 log.debug(u'adjustComboBox %s , %s , %s', combo, frm, to)460 log.debug(u'adjustComboBox %s , %s , %s', combo, frm, to)
461 combo.clear()461 combo.clear()
462 for i in range(int(frm), int(to) + 1):462 for i in range(int(frm), int(to) + 1):
463 combo.addItem(unicode(i))463 combo.addItem(unicode(i))
464464
465 def displayResults(self, bible):465 def displayResults(self, bible):
466 for count, verse in enumerate(self.search_results):466 for count, verse in enumerate(self.search_results):
467 bible_text = u' %s %d:%d (%s)' % (verse.book.name,467 bible_text = u' %s %d:%d (%s)' % (verse.book.name,
468 verse.chapter, verse.verse, bible)468 verse.chapter, verse.verse, bible)
469 bible_verse = QtGui.QListWidgetItem(bible_text)469 bible_verse = QtGui.QListWidgetItem(bible_text)
@@ -474,7 +474,7 @@
474 if cr is not None:474 if cr is not None:
475 cr.setSelected(True)475 cr.setSelected(True)
476476
477 def searchByReference(self, bible, search):477 def searchByReference(self, bible, search):
478 log.debug(u'searchByReference %s ,%s', bible, search)478 log.debug(u'searchByReference %s ,%s', bible, search)
479 book = u''479 book = u''
480 start_chapter = u''480 start_chapter = u''
@@ -529,7 +529,7 @@
529 sp1 = sp[1].split(u':')529 sp1 = sp[1].split(u':')
530 if len(sp1) == 1:530 if len(sp1) == 1:
531 end_chapter = start_chapter531 end_chapter = start_chapter
532 end_verse = sp1[0]532 end_verse = sp1[0]
533 else:533 else:
534 end_chapter = sp1[0]534 end_chapter = sp1[0]
535 end_verse = sp1[1]535 end_verse = sp1[1]
536536
=== modified file 'openlp/plugins/custom/forms/editcustomform.py'
--- openlp/plugins/custom/forms/editcustomform.py 2009-09-12 18:27:17 +0000
+++ openlp/plugins/custom/forms/editcustomform.py 2009-09-21 19:26:10 +0000
@@ -115,7 +115,7 @@
115 self.ThemeComboBox.setCurrentIndex(0)115 self.ThemeComboBox.setCurrentIndex(0)
116116
117 def accept(self):117 def accept(self):
118 valid , message = self._validate()118 valid , message = self._validate()
119 if not valid:119 if not valid:
120 QtGui.QMessageBox.critical(self,120 QtGui.QMessageBox.critical(self,
121 translate(u'customEditDialog', u'Error'), message,121 translate(u'customEditDialog', u'Error'), message,
@@ -126,7 +126,9 @@
126 sxml.add_lyrics_to_song()126 sxml.add_lyrics_to_song()
127 count = 1127 count = 1
128 for i in range (0, self.VerseListView.count()):128 for i in range (0, self.VerseListView.count()):
129 sxml.add_verse_to_lyrics(u'custom', unicode(count), unicode(self.VerseListView.item(i).text()))129 sxml.add_verse_to_lyrics(
130 u'custom', unicode(count),
131 unicode(self.VerseListView.item(i).text()))
130 count += 1132 count += 1
131 self.customSlide.title = unicode(self.TitleEdit.displayText())133 self.customSlide.title = unicode(self.TitleEdit.displayText())
132 self.customSlide.text = unicode(sxml.extract_xml())134 self.customSlide.text = unicode(sxml.extract_xml())
@@ -201,10 +203,12 @@
201 for row in unicode(self.VerseTextEdit.toPlainText()).split(u'---'):203 for row in unicode(self.VerseTextEdit.toPlainText()).split(u'---'):
202 self.VerseListView.addItem(row)204 self.VerseListView.addItem(row)
203 else:205 else:
204 self.VerseListView.currentItem().setText(self.VerseTextEdit.toPlainText())206 self.VerseListView.currentItem().setText(
207 self.VerseTextEdit.toPlainText())
205 #number of lines has change208 #number of lines has change
206 if len(self.beforeText.split(u'\n')) != len(self.VerseTextEdit.toPlainText().split(u'\n')):209 if len(self.beforeText.split(u'\n')) != \
207 tempList = {}210 len(self.VerseTextEdit.toPlainText().split(u'\n')):
211 tempList = {}
208 for row in range(0, self.VerseListView.count()):212 for row in range(0, self.VerseListView.count()):
209 tempList[row] = self.VerseListView.item(row).text()213 tempList[row] = self.VerseListView.item(row).text()
210 self.VerseListView.clear()214 self.VerseListView.clear()
@@ -227,9 +231,11 @@
227 message = u''231 message = u''
228 if len(self.TitleEdit.displayText()) == 0:232 if len(self.TitleEdit.displayText()) == 0:
229 valid = False233 valid = False
230 message = translate(u'customEditDialog', u'You need to enter a title \n')234 message = translate(
235 u'customEditDialog', u'You need to enter a title \n')
231 # must have 1 slide236 # must have 1 slide
232 if self.VerseListView.count() == 0:237 if self.VerseListView.count() == 0:
233 valid = False238 valid = False
234 message += translate(u'customEditDialog', u'You need to enter a slide \n')239 message += translate(
235 return valid, message240 u'customEditDialog', u'You need to enter a slide \n')
241 return valid, message
236242
=== modified file 'openlp/plugins/custom/lib/mediaitem.py'
--- openlp/plugins/custom/lib/mediaitem.py 2009-09-12 18:27:17 +0000
+++ openlp/plugins/custom/lib/mediaitem.py 2009-09-21 17:56:36 +0000
@@ -26,7 +26,7 @@
2626
27from PyQt4 import QtCore, QtGui27from PyQt4 import QtCore, QtGui
2828
29from openlp.core.lib import MediaManagerItem, SongXMLParser, ServiceItem, \29from openlp.core.lib import MediaManagerItem, SongXMLParser, ServiceItem, \
30 translate, contextMenuAction, contextMenuSeparator, BaseListWithDnD30 translate, contextMenuAction, contextMenuSeparator, BaseListWithDnD
3131
32class CustomListView(BaseListWithDnD):32class CustomListView(BaseListWithDnD):
@@ -65,7 +65,8 @@
65 self.ListView.clear()65 self.ListView.clear()
66 for CustomSlide in list:66 for CustomSlide in list:
67 custom_name = QtGui.QListWidgetItem(CustomSlide.title)67 custom_name = QtGui.QListWidgetItem(CustomSlide.title)
68 custom_name.setData(QtCore.Qt.UserRole, QtCore.QVariant(CustomSlide.id))68 custom_name.setData(
69 QtCore.Qt.UserRole, QtCore.QVariant(CustomSlide.id))
69 self.ListView.addItem(custom_name)70 self.ListView.addItem(custom_name)
7071
71 def onNewClick(self):72 def onNewClick(self):
7273
=== modified file 'openlp/plugins/images/imageplugin.py'
--- openlp/plugins/images/imageplugin.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/images/imageplugin.py 2009-09-21 17:56:36 +0000
@@ -27,7 +27,7 @@
27from PyQt4 import QtCore, QtGui27from PyQt4 import QtCore, QtGui
2828
29from openlp.core.lib import Plugin29from openlp.core.lib import Plugin
30from openlp.plugins.images.lib import ImageMediaItem, ImageTab30from openlp.plugins.images.lib import ImageMediaItem, ImageTab
3131
32class ImagePlugin(Plugin):32class ImagePlugin(Plugin):
33 global log33 global log
3434
=== modified file 'openlp/plugins/images/lib/imagetab.py'
--- openlp/plugins/images/lib/imagetab.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/images/lib/imagetab.py 2009-09-21 17:56:36 +0000
@@ -24,7 +24,7 @@
2424
25from PyQt4 import QtCore, QtGui25from PyQt4 import QtCore, QtGui
2626
27from openlp.core.lib import SettingsTab, str_to_bool, translate, Receiver27from openlp.core.lib import SettingsTab, str_to_bool, translate, Receiver
2828
29class ImageTab(SettingsTab):29class ImageTab(SettingsTab):
30 """30 """
@@ -53,7 +53,8 @@
53 self.TimeoutSpacer = QtGui.QSpacerItem(147, 20,53 self.TimeoutSpacer = QtGui.QSpacerItem(147, 20,
54 QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)54 QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
55 self.TimeoutLayout.addItem(self.TimeoutSpacer)55 self.TimeoutLayout.addItem(self.TimeoutSpacer)
56 self.ImageLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.ImageModeGroupBox)56 self.ImageLayout.setWidget(
57 0, QtGui.QFormLayout.LabelRole, self.ImageModeGroupBox)
57 # Signals and slots58 # Signals and slots
58 QtCore.QObject.connect(self.TimeoutSpinBox,59 QtCore.QObject.connect(self.TimeoutSpinBox,
59 QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged)60 QtCore.SIGNAL(u'valueChanged(int)'), self.onTimeoutSpinBoxChanged)
@@ -71,7 +72,7 @@
7172
72 def save(self):73 def save(self):
73 self.config.set_config(u'loop delay', self.loop_delay)74 self.config.set_config(u'loop delay', self.loop_delay)
74 Receiver().send_message(u'update_spin_delay', self.loop_delay )75 Receiver().send_message(u'update_spin_delay', self.loop_delay )
7576
76 def postSetUp(self):77 def postSetUp(self):
77 Receiver().send_message(u'update_spin_delay', self.loop_delay )78 Receiver().send_message(u'update_spin_delay', self.loop_delay )
7879
=== modified file 'openlp/plugins/images/lib/mediaitem.py'
--- openlp/plugins/images/lib/mediaitem.py 2009-09-12 18:27:17 +0000
+++ openlp/plugins/images/lib/mediaitem.py 2009-09-21 17:56:36 +0000
@@ -26,7 +26,8 @@
26import os26import os
2727
28from PyQt4 import QtCore, QtGui28from PyQt4 import QtCore, QtGui
29from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD, buildIcon29from openlp.core.lib import MediaManagerItem, ServiceItem, translate, \
30 BaseListWithDnD, buildIcon
3031
31# We have to explicitly create separate classes for each plugin32# We have to explicitly create separate classes for each plugin
32# in order for DnD to the Service manager to work correctly.33# in order for DnD to the Service manager to work correctly.
@@ -61,9 +62,11 @@
61 MediaManagerItem.__init__(self, parent, icon, title)62 MediaManagerItem.__init__(self, parent, icon, title)
6263
63 def initialise(self):64 def initialise(self):
64 self.ListView.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)65 self.ListView.setSelectionMode(
66 QtGui.QAbstractItemView.ExtendedSelection)
65 self.ListView.setIconSize(QtCore.QSize(88,50))67 self.ListView.setIconSize(QtCore.QSize(88,50))
66 self.servicePath = os.path.join(self.parent.config.get_data_path(), u'.thumbnails')68 self.servicePath = os.path.join(
69 self.parent.config.get_data_path(), u'.thumbnails')
67 if os.path.exists(self.servicePath) == False:70 if os.path.exists(self.servicePath) == False:
68 os.mkdir(self.servicePath)71 os.mkdir(self.servicePath)
69 self.loadList(self.parent.config.load_list(self.ConfigSection))72 self.loadList(self.parent.config.load_list(self.ConfigSection))
@@ -103,9 +106,9 @@
103 return False106 return False
104 service_item.title = u'Image(s)'107 service_item.title = u'Image(s)'
105 for item in items:108 for item in items:
106 bitem = self.ListView.item(item.row())109 bitem = self.ListView.item(item.row())
107 filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())110 filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
108 frame = QtGui.QImage(unicode(filename))111 frame = QtGui.QImage(unicode(filename))
109 (path, name) = os.path.split(filename)112 (path, name) = os.path.split(filename)
110 service_item.add_from_image(path, name, frame)113 service_item.add_from_image(path, name, frame)
111 return True114 return True
112115
=== modified file 'openlp/plugins/media/lib/mediaitem.py'
--- openlp/plugins/media/lib/mediaitem.py 2009-09-15 21:59:20 +0000
+++ openlp/plugins/media/lib/mediaitem.py 2009-09-21 17:56:36 +0000
@@ -81,7 +81,7 @@
81 filename = self.ListData.getFilename(index)81 filename = self.ListData.getFilename(index)
82 frame = QtGui.QImage(unicode(filename))82 frame = QtGui.QImage(unicode(filename))
83 (path, name) = os.path.split(filename)83 (path, name) = os.path.split(filename)
84 service_item.add_from_image(path, name, frame)84 service_item.add_from_image(path, name, frame)
85 return True85 return True
8686
87 def onPreviewClick(self):87 def onPreviewClick(self):
8888
=== modified file 'openlp/plugins/media/lib/mediatab.py'
--- openlp/plugins/media/lib/mediatab.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/media/lib/mediatab.py 2009-09-21 17:56:36 +0000
@@ -24,7 +24,7 @@
2424
25from PyQt4 import QtCore, QtGui25from PyQt4 import QtCore, QtGui
2626
27from openlp.core.lib import SettingsTab, str_to_bool, translate27from openlp.core.lib import SettingsTab, str_to_bool, translate
2828
29class MediaTab(SettingsTab):29class MediaTab(SettingsTab):
30 """30 """
@@ -50,14 +50,16 @@
50 self.UseVMRLabel.setObjectName(u'UseVMRLabel')50 self.UseVMRLabel.setObjectName(u'UseVMRLabel')
51 self.MediaModeLayout.addWidget(self.UseVMRLabel)51 self.MediaModeLayout.addWidget(self.UseVMRLabel)
5252
53 self.MediaLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.MediaModeGroupBox)53 self.MediaLayout.setWidget(
54 0, QtGui.QFormLayout.LabelRole, self.MediaModeGroupBox)
54 # Signals and slots55 # Signals and slots
55 QtCore.QObject.connect(self.UseVMRCheckBox,56 QtCore.QObject.connect(self.UseVMRCheckBox,
56 QtCore.SIGNAL(u'stateChanged(int)'), self.onVMRCheckBoxChanged)57 QtCore.SIGNAL(u'stateChanged(int)'), self.onVMRCheckBoxChanged)
5758
58 def retranslateUi(self):59 def retranslateUi(self):
59 self.MediaModeGroupBox.setTitle(translate(u'MediaTab', u'Media Mode'))60 self.MediaModeGroupBox.setTitle(translate(u'MediaTab', u'Media Mode'))
60 self.UseVMRCheckBox.setText(translate(u'MediaTab', u'Use Video Mode Rendering'))61 self.UseVMRCheckBox.setText(
62 translate(u'MediaTab', u'Use Video Mode Rendering'))
61 self.UseVMRLabel.setText(translate(u'MediaTab', u'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n'63 self.UseVMRLabel.setText(translate(u'MediaTab', u'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n'
62 u'<html><head><meta name="qrichtext" content="1" /><style type="text/css">\n'64 u'<html><head><meta name="qrichtext" content="1" /><style type="text/css">\n'
63 u'p, li { white-space: pre-wrap; }\n'65 u'p, li { white-space: pre-wrap; }\n'
@@ -72,7 +74,8 @@
72 self.use_vmr_mode = True74 self.use_vmr_mode = True
7375
74 def load(self):76 def load(self):
75 self.use_vmr_mode = str_to_bool(self.config.get_config(u'use mode layout', u'False'))77 self.use_vmr_mode = str_to_bool(
78 self.config.get_config(u'use mode layout', u'False'))
76 if self.use_vmr_mode :79 if self.use_vmr_mode :
77 self.UseVMRCheckBox.setChecked(True)80 self.UseVMRCheckBox.setChecked(True)
7881
7982
=== modified file 'openlp/plugins/presentations/lib/impresscontroller.py'
--- openlp/plugins/presentations/lib/impresscontroller.py 2009-09-18 16:06:25 +0000
+++ openlp/plugins/presentations/lib/impresscontroller.py 2009-09-21 17:56:36 +0000
@@ -27,7 +27,7 @@
27# http://nxsy.org/comparing-documents-with-openoffice-and-python27# http://nxsy.org/comparing-documents-with-openoffice-and-python
2828
29import logging29import logging
30import os , subprocess30import os , subprocess
31import time31import time
32import sys32import sys
3333
3434
=== modified file 'openlp/plugins/presentations/lib/mediaitem.py'
--- openlp/plugins/presentations/lib/mediaitem.py 2009-09-12 18:27:17 +0000
+++ openlp/plugins/presentations/lib/mediaitem.py 2009-09-21 17:56:36 +0000
@@ -26,7 +26,8 @@
26import os26import os
2727
28from PyQt4 import QtCore, QtGui28from PyQt4 import QtCore, QtGui
29from openlp.core.lib import MediaManagerItem, ServiceItem, translate, BaseListWithDnD29from openlp.core.lib import MediaManagerItem, ServiceItem, translate, \
30 BaseListWithDnD
30from openlp.plugins.presentations.lib import MessageListener31from openlp.plugins.presentations.lib import MessageListener
3132
32# We have to explicitly create separate classes for each plugin33# We have to explicitly create separate classes for each plugin
@@ -64,10 +65,12 @@
6465
65 def addEndHeaderBar(self):66 def addEndHeaderBar(self):
66 self.PresentationWidget = QtGui.QWidget(self)67 self.PresentationWidget = QtGui.QWidget(self)
67 sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)68 sizePolicy = QtGui.QSizePolicy(
69 QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
68 sizePolicy.setHorizontalStretch(0)70 sizePolicy.setHorizontalStretch(0)
69 sizePolicy.setVerticalStretch(0)71 sizePolicy.setVerticalStretch(0)
70 sizePolicy.setHeightForWidth(self.PresentationWidget.sizePolicy().hasHeightForWidth())72 sizePolicy.setHeightForWidth(
73 self.PresentationWidget.sizePolicy().hasHeightForWidth())
71 self.PresentationWidget.setSizePolicy(sizePolicy)74 self.PresentationWidget.setSizePolicy(sizePolicy)
72 self.PresentationWidget.setObjectName(u'PresentationWidget')75 self.PresentationWidget.setObjectName(u'PresentationWidget')
73 self.DisplayLayout = QtGui.QGridLayout(self.PresentationWidget)76 self.DisplayLayout = QtGui.QGridLayout(self.PresentationWidget)
@@ -78,7 +81,8 @@
78 self.DisplayTypeLabel = QtGui.QLabel(self.PresentationWidget)81 self.DisplayTypeLabel = QtGui.QLabel(self.PresentationWidget)
79 self.DisplayTypeLabel.setObjectName(u'SearchTypeLabel')82 self.DisplayTypeLabel.setObjectName(u'SearchTypeLabel')
80 self.DisplayLayout.addWidget(self.DisplayTypeLabel, 0, 0, 1, 1)83 self.DisplayLayout.addWidget(self.DisplayTypeLabel, 0, 0, 1, 1)
81 self.DisplayTypeLabel.setText(translate(u'PresentationMediaItem', u'Present using:'))84 self.DisplayTypeLabel.setText(
85 translate(u'PresentationMediaItem', u'Present using:'))
82 # Add the Presentation widget to the page layout86 # Add the Presentation widget to the page layout
83 self.PageLayout.addWidget(self.PresentationWidget)87 self.PageLayout.addWidget(self.PresentationWidget)
8488
@@ -102,7 +106,8 @@
102 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]106 item_id = (item.data(QtCore.Qt.UserRole)).toInt()[0]
103 row = self.ListView.row(item)107 row = self.ListView.row(item)
104 self.ListView.takeItem(row)108 self.ListView.takeItem(row)
105 self.parent.config.set_list(self.ConfigSection, self.ListData.getFileList())109 self.parent.config.set_list(
110 self.ConfigSection, self.ListData.getFileList())
106111
107 def generateSlideData(self, service_item):112 def generateSlideData(self, service_item):
108 items = self.ListView.selectedIndexes()113 items = self.ListView.selectedIndexes()
@@ -111,8 +116,8 @@
111 service_item.title = unicode(self.DisplayTypeComboBox.currentText())116 service_item.title = unicode(self.DisplayTypeComboBox.currentText())
112 service_item.shortname = unicode(self.DisplayTypeComboBox.currentText())117 service_item.shortname = unicode(self.DisplayTypeComboBox.currentText())
113 for item in items:118 for item in items:
114 bitem = self.ListView.item(item.row())119 bitem = self.ListView.item(item.row())
115 filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())120 filename = unicode((bitem.data(QtCore.Qt.UserRole)).toString())
116 (path, name) = os.path.split(filename)121 (path, name) = os.path.split(filename)
117 service_item.add_from_command(path, name)122 service_item.add_from_command(path, name)
118 return True123 return True
119124
=== modified file 'openlp/plugins/presentations/lib/messagelistener.py'
--- openlp/plugins/presentations/lib/messagelistener.py 2009-09-18 06:07:10 +0000
+++ openlp/plugins/presentations/lib/messagelistener.py 2009-09-21 17:56:36 +0000
@@ -26,8 +26,8 @@
2626
27class MessageListener(object):27class MessageListener(object):
28 """28 """
29 This is the Presentation listener who acts on events from the slide controller29 This is the Presentation listener who acts on events from the slide
30 and passes the messages on the the correct presentation handlers30 controller and passes the messages on the the correct presentation handlers
31 """31 """
32 global log32 global log
33 log=logging.getLogger(u'MessageListener')33 log=logging.getLogger(u'MessageListener')
@@ -55,7 +55,7 @@
55 Start of new presentation55 Start of new presentation
56 Save the handler as any new presentations start here56 Save the handler as any new presentations start here
57 """57 """
58 self.handler, file = self.decodeMessage(message)58 self.handler, file = self.decodeMessage(message)
59 self.controllers[self.handler].loadPresentation(file)59 self.controllers[self.handler].loadPresentation(file)
6060
61 def next(self, message):61 def next(self, message):
6262
=== modified file 'openlp/plugins/presentations/lib/presentationtab.py'
--- openlp/plugins/presentations/lib/presentationtab.py 2009-09-12 17:24:16 +0000
+++ openlp/plugins/presentations/lib/presentationtab.py 2009-09-21 19:26:10 +0000
@@ -24,14 +24,15 @@
2424
25from PyQt4 import Qt, QtCore, QtGui25from PyQt4 import Qt, QtCore, QtGui
2626
27from openlp.core.lib import SettingsTab, translate, str_to_bool27from openlp.core.lib import SettingsTab, translate, str_to_bool
2828
29class PresentationTab(SettingsTab):29class PresentationTab(SettingsTab):
30 """30 """
31 PresentationsTab is the Presentations settings tab in the settings dialog.31 PresentationsTab is the Presentations settings tab in the settings dialog.
32 """32 """
33 def __init__(self):33 def __init__(self):
34 SettingsTab.__init__(self, translate(u'PresentationTab', u'Presentation'), u'Presentations')34 SettingsTab.__init__(self,
35 translate(u'PresentationTab', u'Presentation'), u'Presentations')
3536
36 def setupUi(self):37 def setupUi(self):
37 self.setObjectName(u'PresentationTab')38 self.setObjectName(u'PresentationTab')
@@ -41,7 +42,8 @@
41 self.PresentationLayout.setObjectName(u'PresentationLayout')42 self.PresentationLayout.setObjectName(u'PresentationLayout')
42 self.PresentationLeftWidget = QtGui.QWidget(self)43 self.PresentationLeftWidget = QtGui.QWidget(self)
43 self.PresentationLeftWidget.setObjectName(u'PresentationLeftWidget')44 self.PresentationLeftWidget.setObjectName(u'PresentationLeftWidget')
44 self.PresentationLeftLayout = QtGui.QVBoxLayout(self.PresentationLeftWidget)45 self.PresentationLeftLayout = QtGui.QVBoxLayout(
46 self.PresentationLeftWidget)
45 self.PresentationLeftLayout.setObjectName(u'PresentationLeftLayout')47 self.PresentationLeftLayout.setObjectName(u'PresentationLeftLayout')
46 self.PresentationLeftLayout.setSpacing(8)48 self.PresentationLeftLayout.setSpacing(8)
47 self.PresentationLeftLayout.setMargin(0)49 self.PresentationLeftLayout.setMargin(0)
@@ -60,17 +62,20 @@
60 self.PowerpointCheckBox.setTristate(False)62 self.PowerpointCheckBox.setTristate(False)
61 self.PowerpointCheckBox.setObjectName(u'PowerpointCheckBox')63 self.PowerpointCheckBox.setObjectName(u'PowerpointCheckBox')
62 self.VerseDisplayLayout.addWidget(self.PowerpointCheckBox, 0, 0, 1, 1)64 self.VerseDisplayLayout.addWidget(self.PowerpointCheckBox, 0, 0, 1, 1)
63 self.PowerpointViewerCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox)65 self.PowerpointViewerCheckBox = QtGui.QCheckBox(
66 self.VerseDisplayGroupBox)
64 self.PowerpointViewerCheckBox.setTristate(False)67 self.PowerpointViewerCheckBox.setTristate(False)
65 self.PowerpointViewerCheckBox.setObjectName(u'PowerpointViewerCheckBox')68 self.PowerpointViewerCheckBox.setObjectName(u'PowerpointViewerCheckBox')
66 self.VerseDisplayLayout.addWidget(self.PowerpointViewerCheckBox, 1, 0, 1, 1)69 self.VerseDisplayLayout.addWidget(
70 self.PowerpointViewerCheckBox, 1, 0, 1, 1)
67 self.ImpressCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox)71 self.ImpressCheckBox = QtGui.QCheckBox(self.VerseDisplayGroupBox)
68 self.ImpressCheckBox.setTristate(False)72 self.ImpressCheckBox.setTristate(False)
69 self.ImpressCheckBox.setObjectName(u'ImpressCheckBox')73 self.ImpressCheckBox.setObjectName(u'ImpressCheckBox')
70 self.VerseDisplayLayout.addWidget(self.ImpressCheckBox, 2, 0, 1, 1)74 self.VerseDisplayLayout.addWidget(self.ImpressCheckBox, 2, 0, 1, 1)
71 self.PresentationThemeWidget = QtGui.QWidget(self.VerseDisplayGroupBox)75 self.PresentationThemeWidget = QtGui.QWidget(self.VerseDisplayGroupBox)
72 self.PresentationThemeWidget.setObjectName(u'PresentationThemeWidget')76 self.PresentationThemeWidget.setObjectName(u'PresentationThemeWidget')
73 self.PresentationThemeLayout = QtGui.QHBoxLayout(self.PresentationThemeWidget)77 self.PresentationThemeLayout = QtGui.QHBoxLayout(
78 self.PresentationThemeWidget)
74 self.PresentationThemeLayout.setSpacing(8)79 self.PresentationThemeLayout.setSpacing(8)
75 self.PresentationThemeLayout.setMargin(0)80 self.PresentationThemeLayout.setMargin(0)
76 self.PresentationThemeLayout.setObjectName(u'PresentationThemeLayout')81 self.PresentationThemeLayout.setObjectName(u'PresentationThemeLayout')
@@ -81,7 +86,8 @@
81 self.PresentationLayout.addWidget(self.PresentationLeftWidget)86 self.PresentationLayout.addWidget(self.PresentationLeftWidget)
82 self.PresentationRightWidget = QtGui.QWidget(self)87 self.PresentationRightWidget = QtGui.QWidget(self)
83 self.PresentationRightWidget.setObjectName(u'PresentationRightWidget')88 self.PresentationRightWidget.setObjectName(u'PresentationRightWidget')
84 self.PresentationRightLayout = QtGui.QVBoxLayout(self.PresentationRightWidget)89 self.PresentationRightLayout = QtGui.QVBoxLayout(
90 self.PresentationRightWidget)
85 self.PresentationRightLayout.setObjectName(u'PresentationRightLayout')91 self.PresentationRightLayout.setObjectName(u'PresentationRightLayout')
86 self.PresentationRightLayout.setSpacing(8)92 self.PresentationRightLayout.setSpacing(8)
87 self.PresentationRightLayout.setMargin(0)93 self.PresentationRightLayout.setMargin(0)
@@ -91,16 +97,26 @@
91 self.PresentationLayout.addWidget(self.PresentationRightWidget)97 self.PresentationLayout.addWidget(self.PresentationRightWidget)
9298
93 def retranslateUi(self):99 def retranslateUi(self):
94 self.PowerpointCheckBox.setText(translate(u'PresentationTab', 'Powerpoint available:'))100 self.PowerpointCheckBox.setText(
95 self.PowerpointViewerCheckBox.setText(translate(u'PresentationTab', 'PowerpointViewer available:'))101 translate(u'PresentationTab', 'Powerpoint available:'))
96 self.ImpressCheckBox.setText(translate(u'PresentationTab', 'Impress available:'))102 self.PowerpointViewerCheckBox.setText(
103 translate(u'PresentationTab', 'PowerpointViewer available:'))
104 self.ImpressCheckBox.setText(
105 translate(u'PresentationTab', 'Impress available:'))
97106
98 def load(self):107 def load(self):
99 self.PowerpointCheckBox.setChecked(int(self.config.get_config(u'Powerpoint', 0)))108 self.PowerpointCheckBox.setChecked(
100 self.PowerpointViewerCheckBox.setChecked(int(self.config.get_config(u'Powerpoint Viewer', 0)))109 int(self.config.get_config(u'Powerpoint', 0)))
101 self.ImpressCheckBox.setChecked(int(self.config.get_config(u'Impress', 0)))110 self.PowerpointViewerCheckBox.setChecked(
111 int(self.config.get_config(u'Powerpoint Viewer', 0)))
112 self.ImpressCheckBox.setChecked(
113 int(self.config.get_config(u'Impress', 0)))
102114
103 def save(self):115 def save(self):
104 self.config.set_config(u'Powerpoint', unicode(self.PowerpointCheckBox.checkState()))116 self.config.set_config(
105 self.config.set_config(u'Powerpoint Viewer', unicode(self.PowerpointViewerCheckBox.checkState()))117 u'Powerpoint', unicode(self.PowerpointCheckBox.checkState()))
106 self.config.set_config(u'Impress', unicode(self.ImpressCheckBox.checkState()))118 self.config.set_config(
119 u'Powerpoint Viewer',
120 unicode(self.PowerpointViewerCheckBox.checkState()))
121 self.config.set_config(
122 u'Impress', unicode(self.ImpressCheckBox.checkState()))
107123
=== modified file 'openlp/plugins/presentations/presentationplugin.py'
--- openlp/plugins/presentations/presentationplugin.py 2009-09-18 16:06:25 +0000
+++ openlp/plugins/presentations/presentationplugin.py 2009-09-21 17:56:36 +0000
@@ -28,7 +28,7 @@
2828
29from PyQt4 import QtCore, QtGui29from PyQt4 import QtCore, QtGui
3030
31from openlp.core.lib import Plugin, MediaManagerItem31from openlp.core.lib import Plugin, MediaManagerItem
32from openlp.plugins.presentations.lib import PresentationMediaItem, \32from openlp.plugins.presentations.lib import PresentationMediaItem, \
33 PresentationTab, ImpressController33 PresentationTab, ImpressController
34try:34try:
3535
=== modified file 'openlp/plugins/remotes/lib/remotetab.py'
--- openlp/plugins/remotes/lib/remotetab.py 2009-09-07 19:00:24 +0000
+++ openlp/plugins/remotes/lib/remotetab.py 2009-09-21 19:26:10 +0000
@@ -20,14 +20,15 @@
2020
21from PyQt4 import QtCore, QtGui21from PyQt4 import QtCore, QtGui
2222
23from openlp.core.lib import SettingsTab, str_to_bool, translate23from openlp.core.lib import SettingsTab, str_to_bool, translate
2424
25class RemoteTab(SettingsTab):25class RemoteTab(SettingsTab):
26 """26 """
27 RemoteTab is the Remotes settings tab in the settings dialog.27 RemoteTab is the Remotes settings tab in the settings dialog.
28 """28 """
29 def __init__(self):29 def __init__(self):
30 SettingsTab.__init__(self, translate(u'RemoteTab', u'Remotes'), u'Remotes')30 SettingsTab.__init__(
31 self, translate(u'RemoteTab', u'Remotes'), u'Remotes')
3132
32 def setupUi(self):33 def setupUi(self):
33 self.setObjectName(u'RemoteTab')34 self.setObjectName(u'RemoteTab')
@@ -49,18 +50,25 @@
49 self.WarningLabel = QtGui.QLabel(self.RemoteModeGroupBox)50 self.WarningLabel = QtGui.QLabel(self.RemoteModeGroupBox)
50 self.WarningLabel.setObjectName(u'WarningLabel')51 self.WarningLabel.setObjectName(u'WarningLabel')
51 self.RemoteModeLayout.addWidget(self.WarningLabel)52 self.RemoteModeLayout.addWidget(self.WarningLabel)
52 self.RemoteLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.RemoteModeGroupBox)53 self.RemoteLayout.setWidget(
54 0, QtGui.QFormLayout.LabelRole, self.RemoteModeGroupBox)
5355
54 def retranslateUi(self):56 def retranslateUi(self):
55 self.RemoteModeGroupBox.setTitle(translate(u'RemoteTab', u'Remotes Receiver Port'))57 self.RemoteModeGroupBox.setTitle(
58 translate(u'RemoteTab', u'Remotes Receiver Port'))
56 self.RemoteActive.setText(translate(u'RemoteTab', 'Remote available:'))59 self.RemoteActive.setText(translate(u'RemoteTab', 'Remote available:'))
57 self.WarningLabel.setText(translate(u'RemoteTab', u'A restart is needed for this change to become effective'))60 self.WarningLabel.setText(translate(u'RemoteTab',
61 u'A restart is needed for this change to become effective'))
5862
59 def load(self):63 def load(self):
60 self.RemotePortSpinBox.setValue(int(self.config.get_config(u'remote port', 4316)))64 self.RemotePortSpinBox.setValue(
61 self.RemoteActive.setChecked(int(self.config.get_config(u'startup', 0)))65 int(self.config.get_config(u'remote port', 4316)))
66 self.RemoteActive.setChecked(
67 int(self.config.get_config(u'startup', 0)))
6268
63 def save(self):69 def save(self):
64 self.config.set_config(u'remote port', unicode(self.RemotePortSpinBox.value()))70 self.config.set_config(
65 self.config.set_config(u'startup', unicode(self.RemoteActive.checkState()))71 u'remote port', unicode(self.RemotePortSpinBox.value()))
72 self.config.set_config(
73 u'startup', unicode(self.RemoteActive.checkState()))
6674
6775
=== modified file 'openlp/plugins/remotes/remoteclient-cli.py'
--- openlp/plugins/remotes/remoteclient-cli.py 2009-09-02 01:44:09 +0000
+++ openlp/plugins/remotes/remoteclient-cli.py 2009-09-21 17:56:36 +0000
@@ -33,7 +33,7 @@
33 print u'Errow thrown ', sys.exc_info()[1]33 print u'Errow thrown ', sys.exc_info()[1]
3434
35def format_message(options):35def format_message(options):
36 return u'%s:%s' % (options.event, options.message)36 return u'%s:%s' % (options.event, options.message)
3737
38def main():38def main():
39 usage = "usage: %prog [options] arg1 arg2"39 usage = "usage: %prog [options] arg1 arg2"
4040
=== modified file 'openlp/plugins/remotes/remoteplugin.py'
--- openlp/plugins/remotes/remoteplugin.py 2009-09-13 07:39:48 +0000
+++ openlp/plugins/remotes/remoteplugin.py 2009-09-21 17:56:36 +0000
@@ -62,12 +62,12 @@
62 def readData(self):62 def readData(self):
63 log.info(u'Remoted data has arrived')63 log.info(u'Remoted data has arrived')
64 while self.server.hasPendingDatagrams():64 while self.server.hasPendingDatagrams():
65 datagram, host, port = self.server.readDatagram(65 datagram, host, port = self.server.readDatagram(
66 self.server.pendingDatagramSize())66 self.server.pendingDatagramSize())
67 self.handle_datagram(datagram)67 self.handle_datagram(datagram)
6868
69 def handle_datagram(self, datagram):69 def handle_datagram(self, datagram):
70 log.info(u'Sending event %s ', datagram)70 log.info(u'Sending event %s ', datagram)
71 pos = datagram.find(u':')71 pos = datagram.find(u':')
72 event = unicode(datagram[:pos].lower())72 event = unicode(datagram[:pos].lower())
7373
7474
=== modified file 'openlp/plugins/songs/lib/manager.py'
--- openlp/plugins/songs/lib/manager.py 2009-09-18 11:55:26 +0000
+++ openlp/plugins/songs/lib/manager.py 2009-09-21 17:56:36 +0000
@@ -27,7 +27,7 @@
2727
28from sqlalchemy import asc, desc28from sqlalchemy import asc, desc
29from openlp.plugins.songs.lib.models import init_models, metadata, session, \29from openlp.plugins.songs.lib.models import init_models, metadata, session, \
30 engine, songs_table, Song, Author, Topic, Book30 engine, songs_table, Song, Author, Topic, Book
3131
32import logging32import logging
3333
3434
=== modified file 'openlp/plugins/songs/lib/mediaitem.py'
--- openlp/plugins/songs/lib/mediaitem.py 2009-09-18 16:06:39 +0000
+++ openlp/plugins/songs/lib/mediaitem.py 2009-09-21 17:56:36 +0000
@@ -27,7 +27,7 @@
27from PyQt4 import QtCore, QtGui27from PyQt4 import QtCore, QtGui
2828
29from openlp.core.lib import MediaManagerItem, translate, ServiceItem, \29from openlp.core.lib import MediaManagerItem, translate, ServiceItem, \
30 SongXMLParser, contextMenuAction, contextMenuSeparator, BaseListWithDnD, \30 SongXMLParser, contextMenuAction, contextMenuSeparator, BaseListWithDnD, \
31 Receiver31 Receiver
32from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm32from openlp.plugins.songs.forms import EditSongForm, SongMaintenanceForm
3333
@@ -49,7 +49,7 @@
49 self.PluginTextShort = u'Song'49 self.PluginTextShort = u'Song'
50 self.ConfigSection = u'song'50 self.ConfigSection = u'song'
51 MediaManagerItem.__init__(self, parent, icon, title)51 MediaManagerItem.__init__(self, parent, icon, title)
52 self.edit_song_form = EditSongForm(self.parent.songmanager, self)52 self.edit_song_form = EditSongForm(self.parent.songmanager, self)
53 self.song_maintenance_form = SongMaintenanceForm(53 self.song_maintenance_form = SongMaintenanceForm(
54 self.parent.songmanager, self)54 self.parent.songmanager, self)
5555
@@ -306,7 +306,7 @@
306 raw_footer.append(author_list)306 raw_footer.append(author_list)
307 raw_footer.append(song.copyright )307 raw_footer.append(song.copyright )
308 raw_footer.append(unicode(308 raw_footer.append(unicode(
309 translate(u'SongMediaItem', u'CCL Licence: ') + ccl ))309 translate(u'SongMediaItem', u'CCL Licence: ') + ccl))
310 service_item.raw_footer = raw_footer310 service_item.raw_footer = raw_footer
311 service_item.audit = [service_item.title, author_audit, ccl]311 service_item.audit = [service_item.title, author_audit, ccl]
312 return True312 return True
313313
=== modified file 'openlp/plugins/songs/lib/songxml.py'
--- openlp/plugins/songs/lib/songxml.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/songs/lib/songxml.py 2009-09-21 17:56:36 +0000
@@ -71,7 +71,7 @@
71class _OpenSong(XmlRootClass):71class _OpenSong(XmlRootClass):
72 """Class for import of OpenSogn"""72 """Class for import of OpenSogn"""
7373
74 def __init__(self, xmlContent = None):74 def __init__(self, xmlContent = None):
75 """Initialize from given xml content"""75 """Initialize from given xml content"""
76 super(_OpenSong, self).__init__()76 super(_OpenSong, self).__init__()
77 self.from_buffer(xmlContent)77 self.from_buffer(xmlContent)
@@ -81,7 +81,7 @@
81 global _blankOpenSongXml81 global _blankOpenSongXml
82 self._setFromXml(_blankOpenSongXml, 'song')82 self._setFromXml(_blankOpenSongXml, 'song')
8383
84 def from_buffer(self, xmlContent):84 def from_buffer(self, xmlContent):
85 """Initialize from buffer(string) with xml content"""85 """Initialize from buffer(string) with xml content"""
86 self._reset()86 self._reset()
87 if xmlContent != None :87 if xmlContent != None :
@@ -259,7 +259,7 @@
259 """Return the songid for the database"""259 """Return the songid for the database"""
260 return self.songid260 return self.songid
261261
262 def from_opensong_buffer(self, xmlcontent):262 def from_opensong_buffer(self, xmlcontent):
263 """Initialize from buffer(string) of xml lines in opensong format"""263 """Initialize from buffer(string) of xml lines in opensong format"""
264 self._reset()264 self._reset()
265 opensong = _OpenSong(xmlcontent)265 opensong = _OpenSong(xmlcontent)
@@ -275,20 +275,20 @@
275 self.set_category_array(opensong.get_category_array())275 self.set_category_array(opensong.get_category_array())
276 self.set_lyrics(opensong.get_lyrics())276 self.set_lyrics(opensong.get_lyrics())
277277
278 def from_opensong_file(self, xmlfilename):278 def from_opensong_file(self, xmlfilename):
279 """Initialize from file containing xml279 """Initialize from file containing xml
280280
281 xmlfilename -- path to xml file281 xmlfilename -- path to xml file
282 """282 """
283 lst = []283 lst = []
284 f = open(xmlfilename, 'r')284 f = open(xmlfilename, 'r')
285 for line in f :285 for line in f :
286 lst.append(line)286 lst.append(line)
287 f.close()287 f.close()
288 xml = "".join(lst)288 xml = "".join(lst)
289 self.from_opensong_buffer(xml)289 self.from_opensong_buffer(xml)
290290
291 def _remove_punctuation(self, title):291 def _remove_punctuation(self, title):
292 """Remove the puntuation chars from title292 """Remove the puntuation chars from title
293293
294 chars are: .,:;!?&%#/\@`$'|"^~*-294 chars are: .,:;!?&%#/\@`$'|"^~*-
@@ -296,7 +296,7 @@
296 punctuation = ".,:;!?&%#'\"/\\@`$|^~*-"296 punctuation = ".,:;!?&%#'\"/\\@`$|^~*-"
297 s = title297 s = title
298 for c in punctuation :298 for c in punctuation :
299 s = s.replace(c, '')299 s = s.replace(c, '')
300 return s300 return s
301301
302 def set_title(self, title):302 def set_title(self, title):
@@ -322,7 +322,8 @@
322 return self.search_title322 return self.search_title
323323
324 def from_ccli_text_buffer(self, textList):324 def from_ccli_text_buffer(self, textList):
325 """Create song from a list of texts (strings) - CCLI text format expected325 """
326 Create song from a list of texts (strings) - CCLI text format expected
326327
327 textList (list of strings) -- the song328 textList (list of strings) -- the song
328 """329 """
@@ -377,13 +378,13 @@
377 self.set_song_cclino(sCcli)378 self.set_song_cclino(sCcli)
378 self.set_lyrics(lyrics)379 self.set_lyrics(lyrics)
379380
380 def from_ccli_text_file(self, textFileName):381 def from_ccli_text_file(self, textFileName):
381 """Create song from a list of texts read from given file382 """Create song from a list of texts read from given file
382383
383 textFileName -- path to text file384 textFileName -- path to text file
384 """385 """
385 lines = []386 lines = []
386 f = open(textFileName, 'r')387 f = open(textFileName, 'r')
387 for orgline in f:388 for orgline in f:
388 lines.append(orgline.rstrip())389 lines.append(orgline.rstrip())
389 f.close()390 f.close()
@@ -424,7 +425,7 @@
424 """Return copyright info string"""425 """Return copyright info string"""
425 return self._assure_string(self.copyright)426 return self._assure_string(self.copyright)
426427
427 def set_copyright(self, copyright):428 def set_copyright(self, copyright):
428 """Set the copyright string"""429 """Set the copyright string"""
429 self.copyright = copyright430 self.copyright = copyright
430431
@@ -432,7 +433,7 @@
432 """Return the songCclino"""433 """Return the songCclino"""
433 return self._assure_string(self.song_cclino)434 return self._assure_string(self.song_cclino)
434435
435 def set_song_cclino(self, song_cclino):436 def set_song_cclino(self, song_cclino):
436 """Set the song_cclino"""437 """Set the song_cclino"""
437 self.song_cclino = song_cclino438 self.song_cclino = song_cclino
438439
@@ -440,7 +441,7 @@
440 """Return the theme name for the song"""441 """Return the theme name for the song"""
441 return self._assure_string(self.theme)442 return self._assure_string(self.theme)
442443
443 def set_theme(self, theme):444 def set_theme(self, theme):
444 """Set the theme name (string)"""445 """Set the theme name (string)"""
445 self.theme = theme446 self.theme = theme
446447
@@ -448,7 +449,7 @@
448 """Return the song_book (string)"""449 """Return the song_book (string)"""
449 return self._assure_string(self.song_book)450 return self._assure_string(self.song_book)
450451
451 def set_song_book(self, song_book):452 def set_song_book(self, song_book):
452 """Set the song_book (string)"""453 """Set the song_book (string)"""
453 self.song_book = song_book454 self.song_book = song_book
454455
@@ -456,7 +457,7 @@
456 """Return the song_number (string)"""457 """Return the song_number (string)"""
457 return self._assure_string(self.song_number)458 return self._assure_string(self.song_number)
458459
459 def set_song_number(self, song_number):460 def set_song_number(self, song_number):
460 """Set the song_number (string)"""461 """Set the song_number (string)"""
461 self.song_number = song_number462 self.song_number = song_number
462463
@@ -464,7 +465,7 @@
464 """Return the comments (string)"""465 """Return the comments (string)"""
465 return self._assure_string(self.comments)466 return self._assure_string(self.comments)
466467
467 def set_comments(self, comments):468 def set_comments(self, comments):
468 """Set the comments (string)"""469 """Set the comments (string)"""
469 self.comments = comments470 self.comments = comments
470471
@@ -472,11 +473,11 @@
472 """Get the verseOrder (string) - preferably space delimited"""473 """Get the verseOrder (string) - preferably space delimited"""
473 return self._assure_string(self.verse_order)474 return self._assure_string(self.verse_order)
474475
475 def set_verse_order(self, verse_order):476 def set_verse_order(self, verse_order):
476 """Set the verse order (string) - space delimited"""477 """Set the verse order (string) - space delimited"""
477 self.verse_order = verse_order478 self.verse_order = verse_order
478479
479 def get_author_list(self, asOneString = True):480 def get_author_list(self, asOneString = True):
480 """Return the list of authors as a string481 """Return the list of authors as a string
481482
482 asOneString483 asOneString
@@ -491,7 +492,7 @@
491 res = self._split_to_list(self.author_list)492 res = self._split_to_list(self.author_list)
492 return res493 return res
493494
494 def set_author_list(self, author_list):495 def set_author_list(self, author_list):
495 """Set the author_list496 """Set the author_list
496497
497 author_list -- a string or list of strings498 author_list -- a string or list of strings
@@ -501,7 +502,7 @@
501 else :502 else :
502 self.author_list = self._list_to_string(author_list)503 self.author_list = self._list_to_string(author_list)
503504
504 def get_category_array(self, asOneString = True):505 def get_category_array(self, asOneString = True):
505 """Return the list of categories as a string506 """Return the list of categories as a string
506507
507 asOneString508 asOneString
@@ -516,7 +517,7 @@
516 res = self._split_to_list(self.category_array)517 res = self._split_to_list(self.category_array)
517 return res518 return res
518519
519 def set_category_array(self, category_array):520 def set_category_array(self, category_array):
520 """Set the category_array521 """Set the category_array
521522
522 category_array -- a string or list of strings523 category_array -- a string or list of strings
@@ -530,7 +531,7 @@
530 """Return the show_title flag (bool)"""531 """Return the show_title flag (bool)"""
531 return self.show_title532 return self.show_title
532533
533 def set_show_title(self, show_title):534 def set_show_title(self, show_title):
534 """Set the show_title flag (bool)"""535 """Set the show_title flag (bool)"""
535 self.show_title = show_title536 self.show_title = show_title
536537
@@ -538,7 +539,7 @@
538 """Return the show_author_list flag"""539 """Return the show_author_list flag"""
539 return self.show_author_list540 return self.show_author_list
540541
541 def set_show_author_list(self, show_author_list):542 def set_show_author_list(self, show_author_list):
542 """Set the show_author_list flag (bool)"""543 """Set the show_author_list flag (bool)"""
543 self.show_author_list = show_author_list544 self.show_author_list = show_author_list
544545
@@ -554,7 +555,7 @@
554 """Return the showSongCclino (string)"""555 """Return the showSongCclino (string)"""
555 return self.show_song_cclino556 return self.show_song_cclino
556557
557 def set_show_song_cclino(self, show_song_cclino):558 def set_show_song_cclino(self, show_song_cclino):
558 """Set the show_song_cclino flag (bool)"""559 """Set the show_song_cclino flag (bool)"""
559 self.show_song_cclino = show_song_cclino560 self.show_song_cclino = show_song_cclino
560561
@@ -565,7 +566,7 @@
565 """566 """
566 return self.lyrics567 return self.lyrics
567568
568 def set_lyrics(self, lyrics):569 def set_lyrics(self, lyrics):
569 """Set the lyrics as a list of strings"""570 """Set the lyrics as a list of strings"""
570 self.lyrics = lyrics571 self.lyrics = lyrics
571 self._parse_lyrics()572 self._parse_lyrics()
@@ -594,7 +595,7 @@
594 numOfSlides = len(self.slideList)595 numOfSlides = len(self.slideList)
595 return numOfSlides596 return numOfSlides
596597
597 def get_preview_slide(self, slideNumber):598 def get_preview_slide(self, slideNumber):
598 """Return the preview text for specified slide number599 """Return the preview text for specified slide number
599600
600 slideNumber -- 0: all slides, 1..n : specific slide601 slideNumber -- 0: all slides, 1..n : specific slide
@@ -618,7 +619,7 @@
618 # remove formattingincluding themes619 # remove formattingincluding themes
619 return res620 return res
620621
621 def get_render_slide(self, slideNumber):622 def get_render_slide(self, slideNumber):
622 """Return the slide to be rendered including the additional623 """Return the slide to be rendered including the additional
623 properties624 properties
624625
625626
=== modified file 'openlp/plugins/songs/lib/tables.py'
--- openlp/plugins/songs/lib/tables.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/songs/lib/tables.py 2009-09-21 17:56:36 +0000
@@ -29,7 +29,7 @@
2929
30# Definition of the "authors" table30# Definition of the "authors" table
31authors_table = Table(u'authors', metadata,31authors_table = Table(u'authors', metadata,
32 Column(u'id', types.Integer, primary_key=True),32 Column(u'id', types.Integer, primary_key=True),
33 Column(u'first_name', types.Unicode(128)),33 Column(u'first_name', types.Unicode(128)),
34 Column(u'last_name', types.Unicode(128)),34 Column(u'last_name', types.Unicode(128)),
35 Column(u'display_name', types.Unicode(255), nullable=False)35 Column(u'display_name', types.Unicode(255), nullable=False)
@@ -45,7 +45,8 @@
45# Definition of the "songs" table45# Definition of the "songs" table
46songs_table = Table(u'songs', metadata,46songs_table = Table(u'songs', metadata,
47 Column(u'id', types.Integer, primary_key=True),47 Column(u'id', types.Integer, primary_key=True),
48 Column(u'song_book_id', types.Integer, ForeignKey(u'song_books.id'), default=0),48 Column(u'song_book_id', types.Integer,
49 ForeignKey(u'song_books.id'), default=0),
49 Column(u'title', types.Unicode(255), nullable=False),50 Column(u'title', types.Unicode(255), nullable=False),
50 Column(u'lyrics', types.UnicodeText, nullable=False),51 Column(u'lyrics', types.UnicodeText, nullable=False),
51 Column(u'verse_order', types.Unicode(128)),52 Column(u'verse_order', types.Unicode(128)),
@@ -60,27 +61,38 @@
6061
61# Definition of the "topics" table62# Definition of the "topics" table
62topics_table = Table(u'topics', metadata,63topics_table = Table(u'topics', metadata,
63 Column(u'id', types.Integer, primary_key=True),64 Column(u'id', types.Integer, primary_key=True),
64 Column(u'name', types.Unicode(128), nullable=False)65 Column(u'name', types.Unicode(128), nullable=False)
65)66)
6667
67# Definition of the "authors_songs" table68# Definition of the "authors_songs" table
68authors_songs_table = Table(u'authors_songs', metadata,69authors_songs_table = Table(u'authors_songs', metadata,
69 Column(u'author_id', types.Integer, ForeignKey(u'authors.id'), primary_key=True),70 Column(u'author_id', types.Integer,
70 Column(u'song_id', types.Integer, ForeignKey(u'songs.id'), primary_key=True)71 ForeignKey(u'authors.id'), primary_key=True),
72 Column(u'song_id', types.Integer,
73 ForeignKey(u'songs.id'), primary_key=True)
71)74)
7275
73# Definition of the "songs_topics" table76# Definition of the "songs_topics" table
74songs_topics_table = Table(u'songs_topics', metadata,77songs_topics_table = Table(u'songs_topics', metadata,
75 Column(u'song_id', types.Integer, ForeignKey(u'songs.id'), primary_key=True),78 Column(u'song_id', types.Integer,
76 Column(u'topic_id', types.Integer, ForeignKey(u'topics.id'), primary_key=True)79 ForeignKey(u'songs.id'), primary_key=True),
80 Column(u'topic_id', types.Integer,
81 ForeignKey(u'topics.id'), primary_key=True)
77)82)
78Index(u'authors_id',authors_table.c.id)83
79Index(u'authors_display_name_id',authors_table.c.display_name, authors_table.c.id)84# Define table indexes
80Index(u'song_books_id',song_books_table.c.id)85Index(u'authors_id', authors_table.c.id)
81Index(u'songs_id',songs_table.c.id)86Index(u'authors_display_name_id', authors_table.c.display_name,
82Index(u'topics_id',topics_table.c.id)87 authors_table.c.id)
83Index(u'authors_songs_author',authors_songs_table.c.author_id, authors_songs_table.c.song_id)88Index(u'song_books_id', song_books_table.c.id)
84Index(u'authors_songs_song',authors_songs_table.c.song_id, authors_songs_table.c.author_id)89Index(u'songs_id', songs_table.c.id)
85Index(u'topics_song_topic', songs_topics_table.c.topic_id, songs_topics_table.c.song_id)90Index(u'topics_id', topics_table.c.id)
86Index(u'topics_song_song',songs_topics_table.c.song_id, songs_topics_table.c.topic_id)91Index(u'authors_songs_author', authors_songs_table.c.author_id,
92 authors_songs_table.c.song_id)
93Index(u'authors_songs_song', authors_songs_table.c.song_id,
94 authors_songs_table.c.author_id)
95Index(u'topics_song_topic', songs_topics_table.c.topic_id,
96 songs_topics_table.c.song_id)
97Index(u'topics_song_song', songs_topics_table.c.song_id,
98 songs_topics_table.c.topic_id)
8799
=== modified file 'openlp/plugins/songs/songsplugin.py'
--- openlp/plugins/songs/songsplugin.py 2009-09-08 19:58:05 +0000
+++ openlp/plugins/songs/songsplugin.py 2009-09-21 17:56:36 +0000
@@ -94,7 +94,8 @@
94 # Translations...94 # Translations...
95 self.ImportSongMenu.setTitle(translate(u'main_window', u'&Song'))95 self.ImportSongMenu.setTitle(translate(u'main_window', u'&Song'))
96 self.ImportOpenSongItem.setText(translate(u'main_window', u'OpenSong'))96 self.ImportOpenSongItem.setText(translate(u'main_window', u'OpenSong'))
97 self.ImportOpenlp1Item.setText(translate(u'main_window', u'openlp.org 1.0'))97 self.ImportOpenlp1Item.setText(
98 translate(u'main_window', u'openlp.org 1.0'))
98 self.ImportOpenlp1Item.setToolTip(99 self.ImportOpenlp1Item.setToolTip(
99 translate(u'main_window', u'Export songs in openlp.org 1.0 format'))100 translate(u'main_window', u'Export songs in openlp.org 1.0 format'))
100 self.ImportOpenlp1Item.setStatusTip(101 self.ImportOpenlp1Item.setStatusTip(
@@ -137,7 +138,8 @@
137 # Translations...138 # Translations...
138 self.ExportSongMenu.setTitle(translate(u'main_window', u'&Song'))139 self.ExportSongMenu.setTitle(translate(u'main_window', u'&Song'))
139 self.ExportOpenSongItem.setText(translate(u'main_window', u'OpenSong'))140 self.ExportOpenSongItem.setText(translate(u'main_window', u'OpenSong'))
140 self.ExportOpenlp1Item.setText(translate(u'main_window', u'openlp.org 1.0'))141 self.ExportOpenlp1Item.setText(
142 translate(u'main_window', u'openlp.org 1.0'))
141 self.ExportOpenlp2Item.setText(translate(u'main_window', u'OpenLP 2.0'))143 self.ExportOpenlp2Item.setText(translate(u'main_window', u'OpenLP 2.0'))
142 # Signals and slots144 # Signals and slots
143 QtCore.QObject.connect(self.ExportOpenlp1Item,145 QtCore.QObject.connect(self.ExportOpenlp1Item,
144146
=== modified file 'openlp/plugins/songs/test/test_song_basic.py'
--- openlp/plugins/songs/test/test_song_basic.py 2009-09-03 15:19:30 +0000
+++ openlp/plugins/songs/test/test_song_basic.py 2009-09-21 17:56:36 +0000
@@ -50,8 +50,8 @@
50 s = Song()50 s = Song()
51 t = "A normal title"51 t = "A normal title"
52 s.set_title(t)52 s.set_title(t)
53 assert(s.get_title() == t)53 assert(s.get_title() == t)
54 assert(s.get_search_title() == t)54 assert(s.get_search_title() == t)
5555
56 def test_Title3(self):56 def test_Title3(self):
57 """Set a titel with punctuation 1"""57 """Set a titel with punctuation 1"""
@@ -59,8 +59,8 @@
59 t1 = "Hey! Come on, ya programmers*"59 t1 = "Hey! Come on, ya programmers*"
60 t2 = "Hey Come on ya programmers"60 t2 = "Hey Come on ya programmers"
61 s.set_title(t1)61 s.set_title(t1)
62 assert(s.get_title() == t1)62 assert(s.get_title() == t1)
63 assert(s.get_search_title() == t2)63 assert(s.get_search_title() == t2)
6464
65 def test_Title4(self):65 def test_Title4(self):
66 """Set a titel with punctuation 2"""66 """Set a titel with punctuation 2"""
@@ -68,11 +68,14 @@
68 t1 = "??#Hey! Come on, ya programmers*"68 t1 = "??#Hey! Come on, ya programmers*"
69 t2 = "Hey Come on ya programmers"69 t2 = "Hey Come on ya programmers"
70 s.set_title(t1)70 s.set_title(t1)
71 assert(s.get_title() == t1)71 assert(s.get_title() == t1)
72 assert(s.get_search_title() == t2)72 assert(s.get_search_title() == t2)
7373
74 def test_Title5(self):74 def test_Title5(self):
75 """Set a title, where searchable title becomes empty - raises an exception"""75 """
76 Set a title
77 Where searchable title becomes empty raises an exception
78 """
76 s = Song()79 s = Song()
77 py.test.raises(SongTitleError, s.set_title, ',*')80 py.test.raises(SongTitleError, s.set_title, ',*')
7881
7982
=== modified file 'openlpcnv.pyw'
--- openlpcnv.pyw 2009-09-08 19:58:05 +0000
+++ openlpcnv.pyw 2009-09-21 17:56:36 +0000
@@ -49,7 +49,7 @@
49 Initialise the process.49 Initialise the process.
50 """50 """
51 self.display = Display()51 self.display = Display()
52 self.stime = time.strftime(u'%Y-%m-%d-%H%M%S', time.localtime())52 self.stime = time.strftime(u'%Y-%m-%d-%H%M%S', time.localtime())
53 self.display.output(u'OpenLp v1.9.0 Migration Utility Started')53 self.display.output(u'OpenLp v1.9.0 Migration Utility Started')
5454
55 def process(self):55 def process(self):