summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/dagger/mainwindow.cpp61
1 files changed, 46 insertions, 15 deletions
diff --git a/noncore/apps/dagger/mainwindow.cpp b/noncore/apps/dagger/mainwindow.cpp
index e886bd8..3dd9eff 100644
--- a/noncore/apps/dagger/mainwindow.cpp
+++ b/noncore/apps/dagger/mainwindow.cpp
@@ -2,64 +2,65 @@
2Dagger - A Bible study program utilizing the Sword library. 2Dagger - A Bible study program utilizing the Sword library.
3Copyright (c) 2004 Dan Williams <drw@handhelds.org> 3Copyright (c) 2004 Dan Williams <drw@handhelds.org>
4 4
5This file is free software; you can redistribute it and/or modify it under 5This file is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License as published by the Free Software 6the terms of the GNU General Public License as published by the Free Software
7Foundation; either version 2 of the License, or (at your option) any later version. 7Foundation; either version 2 of the License, or (at your option) any later version.
8 8
9This file is distributed in the hope that it will be useful, but WITHOUT ANY 9This file is distributed in the hope that it will be useful, but WITHOUT ANY
10WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 10WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11PARTICULAR PURPOSE. See the GNU General Public License for more details. 11PARTICULAR PURPOSE. See the GNU General Public License for more details.
12 12
13You should have received a copy of the GNU General Public License along with this 13You should have received a copy of the GNU General Public License along with this
14file; see the file COPYING. If not, write to the Free Software Foundation, Inc., 14file; see the file COPYING. If not, write to the Free Software Foundation, Inc.,
1559 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 1559 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16*/ 16*/
17 17
18#include "mainwindow.h" 18#include "mainwindow.h"
19#include "navbar.h" 19#include "navbar.h"
20#include "searchbar.h" 20#include "searchbar.h"
21#include "opentextdlg.h" 21#include "opentextdlg.h"
22#include "configuredlg.h" 22#include "configuredlg.h"
23#include "textwidget.h" 23#include "textwidget.h"
24 24
25#include <opie2/odebug.h> 25#include <opie2/odebug.h>
26 26
27#include <qpe/qcopenvelope_qws.h> 27#include <qpe/qcopenvelope_qws.h>
28#include <qpe/qpeapplication.h> 28#include <qpe/qpeapplication.h>
29#include <qpe/resource.h> 29#include <qpe/resource.h>
30 30
31#include <qaction.h> 31#include <qaction.h>
32#include <qclipboard.h> 32#include <qclipboard.h>
33#include <qmenubar.h> 33#include <qmenubar.h>
34#include <qmessagebox.h>
34#include <qobjectlist.h> 35#include <qobjectlist.h>
35#include <qpopupmenu.h> 36#include <qpopupmenu.h>
36#include <qtimer.h> 37#include <qtimer.h>
37#include <qtoolbar.h> 38#include <qtoolbar.h>
38 39
39#include <markupfiltmgr.h> 40#include <markupfiltmgr.h>
40 41
41MainWindow::MainWindow( QWidget *parent, const char *name, WFlags /*fl*/ ) 42MainWindow::MainWindow( QWidget *parent, const char *name, WFlags /*fl*/ )
42 : QMainWindow( parent, name, WStyle_ContextHelp ) 43 : QMainWindow( parent, name, WStyle_ContextHelp )
43 , m_config( "dagger" ) 44 , m_config( "dagger" )
44 , m_tabs( this ) 45 , m_tabs( this )
45 , m_autoScrollTimer( this ) 46 , m_autoScrollTimer( this )
46{ 47{
47 // Initialize sword library manager 48 // Initialize sword library manager
48 m_config.setGroup( "Sword" ); 49 m_config.setGroup( "Sword" );
49 m_modulePath = m_config.readEntry( "ModPath", "/usr/local/share/sword" ); 50 m_modulePath = m_config.readEntry( "ModPath", "/usr/local/share/sword" );
50 m_swordMgr = new sword::SWMgr( m_modulePath.latin1(), true, 51 m_swordMgr = new sword::SWMgr( m_modulePath.latin1(), true,
51 new sword::MarkupFilterMgr( sword::FMT_HTMLHREF ) ); 52 new sword::MarkupFilterMgr( sword::FMT_HTMLHREF ) );
52 53
53 // Retrieve list of available Sword module options (e.g. footnotes, Strong's numbers, etc.) 54 // Retrieve list of available Sword module options (e.g. footnotes, Strong's numbers, etc.)
54 sword::StringList swordOpts = m_swordMgr->getGlobalOptions(); 55 sword::StringList swordOpts = m_swordMgr->getGlobalOptions();
55 for ( sword::StringList::iterator it = swordOpts.begin(); it != swordOpts.end(); it++ ) 56 for ( sword::StringList::iterator it = swordOpts.begin(); it != swordOpts.end(); it++ )
56 m_actionSwordOpts.append( new QAction( (*it).c_str(), QString::null, 0, this, 0 ) ); 57 m_actionSwordOpts.append( new QAction( (*it).c_str(), QString::null, 0, this, 0 ) );
57 m_actionSwordOpts.sort(); 58 m_actionSwordOpts.sort();
58 59
59 // Initialize user interface 60 // Initialize user interface
60 setCaption( tr( "Dagger" ) ); 61 setCaption( tr( "Dagger" ) );
61 initUI(); 62 initUI();
62 63
63 connect( &m_tabs, SIGNAL(currentChanged(QWidget *)), this, SLOT( slotTextDisplayed(QWidget *)) ); 64 connect( &m_tabs, SIGNAL(currentChanged(QWidget *)), this, SLOT( slotTextDisplayed(QWidget *)) );
64 connect( &m_autoScrollTimer, SIGNAL(timeout()), this, SLOT(slotNavNextVerse()) ); 65 connect( &m_autoScrollTimer, SIGNAL(timeout()), this, SLOT(slotNavNextVerse()) );
65 66
@@ -658,56 +659,86 @@ void MainWindow::slotNavNextPage()
658} 659}
659 660
660void MainWindow::slotNavAutoScroll( bool enabled ) 661void MainWindow::slotNavAutoScroll( bool enabled )
661{ 662{
662 m_autoScrollTimer.stop(); 663 m_autoScrollTimer.stop();
663 664
664 if ( enabled ) 665 if ( enabled )
665 m_autoScrollTimer.start( m_navToolbar->autoScrollRate() * 100 ); 666 m_autoScrollTimer.start( m_navToolbar->autoScrollRate() * 100 );
666} 667}
667 668
668void MainWindow::slotNavScrollRateChanged( int newRate ) 669void MainWindow::slotNavScrollRateChanged( int newRate )
669{ 670{
670 if ( m_autoScrollTimer.isActive() ) 671 if ( m_autoScrollTimer.isActive() )
671 { 672 {
672 m_autoScrollTimer.stop(); 673 m_autoScrollTimer.stop();
673 m_autoScrollTimer.start( newRate * 100 ); 674 m_autoScrollTimer.start( newRate * 100 );
674 } 675 }
675} 676}
676 677
677void MainWindow::slotSearchResultClicked( const QString &key ) 678void MainWindow::slotSearchResultClicked( const QString &key )
678{ 679{
679 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 680 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
680 if ( text ) 681 if ( text )
681 { 682 {
682 text->setKey( key ); 683 text->setKey( key );
683 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); 684 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) );
684 m_navToolbar->setKey( text->getAbbrevKey() ); 685 m_navToolbar->setKey( text->getAbbrevKey() );
685 } 686 }
686} 687}
687 688
688void MainWindow::slotTextRefClicked( const QString &ref ) 689void MainWindow::slotTextRefClicked( const QString &ref )
689{ 690{
691//printf( "Ref clicked: '%s'\n", ref.latin1() );
692/*
693Ref clicked: 'type=Strongs value=G3482'
694Ref clicked: 'type=Strongs value=H07225'
695Ref clicked: 'type=morph class=x-Robinson:N-PRI value=N-PRI'
696Ref clicked: 'type=morph class=x-StrongsMorph:TH8804 value=TH8804'
697*/
690 //owarn << "Reference: " << ref << oendl; 698 //owarn << "Reference: " << ref << oendl;
691 if ( !ref.isNull() ) 699 if ( !ref.isNull() )
692 { 700 {
693 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 701 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
694 if ( text ) 702 if ( text )
695 { 703 {
696 QString module; 704 // Parse type
697 QString key( ref ); 705 int pos = ref.find( "type=", 0, false ) + 5;
698 key.remove( 0, 2 ); 706 QString typeStr = ref.mid( pos, ref.find( ' ', pos ) - pos );
699 707
700 QChar book = ref.at( 1 ); 708 // Parse class (for morph. only)
701 // TODO- this is ugly, need better way to determine type of reference 709 QString classStr;
702 // take a look at SWModule::getRawEntry() 710 if ( typeStr == "morph" )
703 int keyValue = key.toInt(); 711 {
704 if ( book == 'H' && keyValue <= 8674 ) 712 pos = ref.find( "class=", 0, false ) + 5;
705 module = "StrongsHebrew"; 713 QString classStr = ref.mid( pos, ref.find( ' ', pos ) - pos );
706 else if ( book == 'G' && keyValue <= 5624 ) 714
707 module = "StrongsGreek"; 715 // TODO - need to strip 'x-' from beginning and ':key' at end?
708 716 }
709 if ( !module.isEmpty() ) 717
710 openModule( module, key ); 718 // Parse value
719 pos = ref.find( "value=", 0, false ) + 6;
720 QString valueStr = ref.mid( pos, ref.find( ' ', pos ) - pos );
721
722 if ( typeStr == "Strongs" )
723 {
724 //Determine if is a Hebrew or Greek reference
725 QString module;
726 if ( valueStr.at( 0 ) == 'H' )
727 module = "StrongsHebrew";
728 else
729 module = "StrongsGreek";
730
731 // Get key
732 QString key( valueStr );
733 key.remove( 0, 1 );
734 // Open reference
735 openModule( module, key );
736 }
737 else if ( typeStr == "morph" )
738 {
739 QMessageBox::information( this, tr( "Morphological Tags" ),
740 tr( "Morphological tag cross-referencing not implemented yet." ) );
741 }
711 } 742 }
712 } 743 }
713} 744}