-rw-r--r-- | noncore/apps/dagger/mainwindow.cpp | 61 |
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 @@ -1,129 +1,130 @@ /* Dagger - A Bible study program utilizing the Sword library. Copyright (c) 2004 Dan Williams <drw@handhelds.org> This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this file; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "mainwindow.h" #include "navbar.h" #include "searchbar.h" #include "opentextdlg.h" #include "configuredlg.h" #include "textwidget.h" #include <opie2/odebug.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qaction.h> #include <qclipboard.h> #include <qmenubar.h> +#include <qmessagebox.h> #include <qobjectlist.h> #include <qpopupmenu.h> #include <qtimer.h> #include <qtoolbar.h> #include <markupfiltmgr.h> MainWindow::MainWindow( QWidget *parent, const char *name, WFlags /*fl*/ ) : QMainWindow( parent, name, WStyle_ContextHelp ) , m_config( "dagger" ) , m_tabs( this ) , m_autoScrollTimer( this ) { // Initialize sword library manager m_config.setGroup( "Sword" ); m_modulePath = m_config.readEntry( "ModPath", "/usr/local/share/sword" ); m_swordMgr = new sword::SWMgr( m_modulePath.latin1(), true, new sword::MarkupFilterMgr( sword::FMT_HTMLHREF ) ); // Retrieve list of available Sword module options (e.g. footnotes, Strong's numbers, etc.) sword::StringList swordOpts = m_swordMgr->getGlobalOptions(); for ( sword::StringList::iterator it = swordOpts.begin(); it != swordOpts.end(); it++ ) m_actionSwordOpts.append( new QAction( (*it).c_str(), QString::null, 0, this, 0 ) ); m_actionSwordOpts.sort(); // Initialize user interface setCaption( tr( "Dagger" ) ); initUI(); connect( &m_tabs, SIGNAL(currentChanged(QWidget *)), this, SLOT( slotTextDisplayed(QWidget *)) ); connect( &m_autoScrollTimer, SIGNAL(timeout()), this, SLOT(slotNavNextVerse()) ); m_bibleIcon = new QPixmap( Resource::loadPixmap( "dagger/bibletext" ) ); m_commentaryIcon = new QPixmap( Resource::loadPixmap( "dagger/commentary" ) ); m_lexiconIcon = new QPixmap( Resource::loadPixmap( "dagger/lexicon" ) ); // Load initial configuration QTimer::singleShot( 100, this, SLOT( initConfig() ) ); } MainWindow::~MainWindow() { // Re-enable screen blanking if it was disabled QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; // Save Sword options m_config.setGroup( "Sword" ); m_config.writeEntry( "ModPath", m_modulePath ); for ( QAction *a = m_actionSwordOpts.first(); a; a = m_actionSwordOpts.next() ) m_config.writeEntry( a->text(), a->isOn() ); // Save configuration options m_config.setGroup( "Config" ); m_config.writeEntry( "AlwaysOpenNew", m_alwaysOpenNew ); m_config.writeEntry( "AutoScroll", m_navToolbar->autoScrollRate() ); m_config.writeEntry( "DisableScreenBlanking", m_disableScreenBlank ); m_config.writeEntry( "CopyFormat", m_copyFormat ); m_config.writeEntry( "NavBar", m_actionViewNavToolbar->isOn() ); m_config.writeEntry( "NumVerses", m_numVerses ); m_config.writeEntry( "SearchBar", m_actionViewSearchToolbar->isOn() ); // Save text font m_config.setGroup( "Font"); m_config.writeEntry( "Family", m_textFont.family() ); m_config.writeEntry( "Italic", m_textFont.italic() ); m_config.writeEntry( "Size", m_textFont.pointSize() ); m_config.writeEntry( "Weight", m_textFont.weight() ); // Save bookmarks m_config.setGroup( "Bookmarks"); m_config.clearGroup(); int index = 3; int id = m_bookmarkMenu->idAt( index ); while ( id != -1 ) { QString bookmark = m_bookmarkMenu->text( id ); int pos = bookmark.find( " (" ); QString key = bookmark.left( pos ); pos += 2; QString module = bookmark.mid( pos, bookmark.find( ")", pos ) - pos ); QString modkey; modkey.sprintf( "%s/%s", module.latin1(), key.latin1() ); m_config.writeEntry( QString::number( index - 2 ), modkey ); ++index; id = m_bookmarkMenu->idAt( index ); } // Save opened modules m_config.setGroup( "Session"); m_config.clearGroup(); QObjectList *childlist = queryList( "TextWidget" ); QObjectListIt it( *childlist ); TextWidget *module; int count = 1; @@ -594,120 +595,150 @@ void MainWindow::slotViewNavToolbar( bool enabled ) : m_navToolbar->hide(); } void MainWindow::slotViewSearchToolbar( bool enabled ) { enabled ? m_searchToolbar->show() : m_searchToolbar->hide(); } void MainWindow::slotNavPrevPage() { TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { text->prevPage(); setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); m_navToolbar->setKey( text->getAbbrevKey() ); } } void MainWindow::slotNavPrevVerse() { TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { text->prevVerse(); setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); m_navToolbar->setKey( text->getAbbrevKey() ); } } void MainWindow::slotNavKeyChanged( const QString &newKey ) { QString key = newKey; key.replace( QRegExp( "[-=.]" ), ":" ); TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { text->setKey( key ); setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); } } void MainWindow::slotNavNextVerse() { TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { text->nextVerse(); setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); m_navToolbar->setKey( text->getAbbrevKey() ); } } void MainWindow::slotNavNextPage() { TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { text->nextPage(); setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); m_navToolbar->setKey( text->getAbbrevKey() ); } } void MainWindow::slotNavAutoScroll( bool enabled ) { m_autoScrollTimer.stop(); if ( enabled ) m_autoScrollTimer.start( m_navToolbar->autoScrollRate() * 100 ); } void MainWindow::slotNavScrollRateChanged( int newRate ) { if ( m_autoScrollTimer.isActive() ) { m_autoScrollTimer.stop(); m_autoScrollTimer.start( newRate * 100 ); } } void MainWindow::slotSearchResultClicked( const QString &key ) { TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { text->setKey( key ); setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); m_navToolbar->setKey( text->getAbbrevKey() ); } } void MainWindow::slotTextRefClicked( const QString &ref ) { +//printf( "Ref clicked: '%s'\n", ref.latin1() ); +/* +Ref clicked: 'type=Strongs value=G3482' +Ref clicked: 'type=Strongs value=H07225' +Ref clicked: 'type=morph class=x-Robinson:N-PRI value=N-PRI' +Ref clicked: 'type=morph class=x-StrongsMorph:TH8804 value=TH8804' +*/ //owarn << "Reference: " << ref << oendl; if ( !ref.isNull() ) { TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { - QString module; - QString key( ref ); - key.remove( 0, 2 ); - - QChar book = ref.at( 1 ); - // TODO- this is ugly, need better way to determine type of reference - // take a look at SWModule::getRawEntry() - int keyValue = key.toInt(); - if ( book == 'H' && keyValue <= 8674 ) - module = "StrongsHebrew"; - else if ( book == 'G' && keyValue <= 5624 ) - module = "StrongsGreek"; - - if ( !module.isEmpty() ) - openModule( module, key ); + // Parse type + int pos = ref.find( "type=", 0, false ) + 5; + QString typeStr = ref.mid( pos, ref.find( ' ', pos ) - pos ); + + // Parse class (for morph. only) + QString classStr; + if ( typeStr == "morph" ) + { + pos = ref.find( "class=", 0, false ) + 5; + QString classStr = ref.mid( pos, ref.find( ' ', pos ) - pos ); + + // TODO - need to strip 'x-' from beginning and ':key' at end? + } + + // Parse value + pos = ref.find( "value=", 0, false ) + 6; + QString valueStr = ref.mid( pos, ref.find( ' ', pos ) - pos ); + + if ( typeStr == "Strongs" ) + { + //Determine if is a Hebrew or Greek reference + QString module; + if ( valueStr.at( 0 ) == 'H' ) + module = "StrongsHebrew"; + else + module = "StrongsGreek"; + + // Get key + QString key( valueStr ); + key.remove( 0, 1 ); + // Open reference + openModule( module, key ); + } + else if ( typeStr == "morph" ) + { + QMessageBox::information( this, tr( "Morphological Tags" ), + tr( "Morphological tag cross-referencing not implemented yet." ) ); + } } } } |