-rw-r--r-- | noncore/apps/dagger/mainwindow.cpp | 31 | ||||
-rw-r--r-- | noncore/apps/dagger/navbar.cpp | 14 | ||||
-rw-r--r-- | noncore/apps/dagger/searchbar.cpp | 9 |
3 files changed, 35 insertions, 19 deletions
diff --git a/noncore/apps/dagger/mainwindow.cpp b/noncore/apps/dagger/mainwindow.cpp index 3dd9eff..1f2d521 100644 --- a/noncore/apps/dagger/mainwindow.cpp +++ b/noncore/apps/dagger/mainwindow.cpp @@ -1,744 +1,753 @@ /* 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 <opie2/oresource.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" ) ); + m_bibleIcon = new QPixmap( Opie::Core::OResource::loadPixmap( "dagger/bibletext", Opie::Core::OResource::SmallIcon ) ); + m_commentaryIcon = new QPixmap( Opie::Core::OResource::loadPixmap( "dagger/commentary", Opie::Core::OResource::SmallIcon ) ); + m_lexiconIcon = new QPixmap( Opie::Core::OResource::loadPixmap( "dagger/lexicon", Opie::Core::OResource::SmallIcon ) ); // 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; while ( ( module = reinterpret_cast<TextWidget *>(it.current()) ) != 0 ) { QString modkey; modkey.sprintf( "%s/%s", module->getModuleName().latin1(), module->getAbbrevKey().latin1() ); m_config.writeEntry( QString::number( count ), modkey ); ++count; ++it; } } bool MainWindow::eventFilter( QObject *obj, QEvent *event ) { if ( event->type() == QEvent::KeyPress ) { QKeyEvent *keyev = reinterpret_cast<QKeyEvent *>(event); if ( keyev->key() == Key_Up ) { slotNavPrevVerse(); return true; } else if ( keyev->key() == Key_Down ) { slotNavNextVerse(); return true; } } return QWidget::eventFilter( obj, event ); } void MainWindow::initUI() { setCentralWidget( &m_tabs ); m_tabs.installEventFilter( this ); setToolBarsMovable( false ); m_barDock = new QToolBar( this ); m_barDock->setHorizontalStretchable( true ); m_menuBar = new QMenuBar( m_barDock ); m_menuBar->setMargin( 0 ); // Allocate toolbars m_navToolbar = new NavBar( this ); m_navToolbar->navBtnsEnable( false ); connect( m_navToolbar, SIGNAL(prevPage()), this, SLOT(slotNavPrevPage()) ); connect( m_navToolbar, SIGNAL(prevVerse()), this, SLOT(slotNavPrevVerse()) ); connect( m_navToolbar, SIGNAL(keyChanged(const QString &)), this, SLOT(slotNavKeyChanged(const QString &)) ); connect( m_navToolbar, SIGNAL(nextVerse()), this, SLOT(slotNavNextVerse()) ); connect( m_navToolbar, SIGNAL(nextPage()), this, SLOT(slotNavNextPage()) ); connect( m_navToolbar, SIGNAL(autoScroll(bool)), this, SLOT(slotNavAutoScroll(bool)) ); connect( m_navToolbar, SIGNAL(scrollRateChanged(int)), this, SLOT(slotNavScrollRateChanged(int)) ); m_searchToolbar = new SearchBar( this ); connect( m_searchToolbar, SIGNAL(sigResultClicked(const QString &)), this, SLOT(slotSearchResultClicked(const QString &)) ); // Text menu QPopupMenu *popup = new QPopupMenu( this ); - QAction *a = new QAction( tr( "Open..." ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 ); + QAction *a = new QAction( tr( "Open..." ), Opie::Core::OResource::loadPixmap( "fileopen", Opie::Core::OResource::SmallIcon ), + QString::null, 0, this, 0 ); connect( a, SIGNAL(activated()), this, SLOT(slotTextOpen()) ); a->addTo( popup ); - m_actionTextClose = new QAction( tr( "Close" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); + m_actionTextClose = new QAction( tr( "Close" ), Opie::Core::OResource::loadPixmap( "close", Opie::Core::OResource::SmallIcon ), + QString::null, 0, this, 0 ); connect( m_actionTextClose, SIGNAL(activated()), this, SLOT(slotTextClose()) ); m_actionTextClose->addTo( popup ); popup->insertSeparator(); // TODO - need to implent - a = new QAction( tr( "Install..." ), Resource::loadPixmap( "install" ), QString::null, 0, this, 0 ); + a = new QAction( tr( "Install" ), Opie::Core::OResource::loadPixmap( "install", Opie::Core::OResource::SmallIcon ), + QString::null, 0, this, 0 ); a->setEnabled( false ); connect( a, SIGNAL(activated()), this, SLOT(slotTextInstall()) ); a->addTo( popup ); m_menuBar->insertItem( tr( "Text" ), popup ); // Edit menu popup = new QPopupMenu( this ); - m_actionEditCopy = new QAction( tr( "Copy" ), Resource::loadPixmap( "copy" ), QString::null, 0, this, 0 ); + m_actionEditCopy = new QAction( tr( "Copy" ), Opie::Core::OResource::loadPixmap( "copy", Opie::Core::OResource::SmallIcon ), + QString::null, 0, this, 0 ); connect( m_actionEditCopy, SIGNAL(activated()), this, SLOT(slotEditCopy()) ); m_actionEditCopy->addTo( popup ); popup->insertSeparator(); - a = new QAction( tr( "Configure..." ), Resource::loadPixmap( "SettingsIcon" ), QString::null, 0, this, 0 ); + a = new QAction( tr( "Configure" ), Opie::Core::OResource::loadPixmap( "SettingsIcon", Opie::Core::OResource::SmallIcon ), + QString::null, 0, this, 0 ); connect( a, SIGNAL(activated()), this, SLOT(slotEditConfigure()) ); a->addTo( popup ); m_menuBar->insertItem( tr( "Edit" ), popup ); // Bookmark menu m_bookmarkMenu = new QPopupMenu( this ); - m_actionBookmarkAdd = new QAction( tr( "Add" ), Resource::loadPixmap( "dagger/bookmarkadd" ), QString::null, 0, this, 0 ); + m_actionBookmarkAdd = new QAction( tr( "Add" ), + Opie::Core::OResource::loadPixmap( "dagger/bookmarkadd", Opie::Core::OResource::SmallIcon ), + QString::null, 0, this, 0 ); connect( m_actionBookmarkAdd, SIGNAL(activated()), this, SLOT(slotBookmarkAdd()) ); m_actionBookmarkAdd->addTo( m_bookmarkMenu ); - m_actionBookmarkRemove = new QAction( tr( "Remove" ), Resource::loadPixmap( "dagger/bookmarkremove" ), QString::null, 0, this, 0 ); + m_actionBookmarkRemove = new QAction( tr( "Remove" ), + Opie::Core::OResource::loadPixmap( "dagger/bookmarkremove", Opie::Core::OResource::SmallIcon ), + QString::null, 0, this, 0 ); connect( m_actionBookmarkRemove, SIGNAL(activated()), this, SLOT(slotBookmarkRemove()) ); m_actionBookmarkRemove->addTo( m_bookmarkMenu ); m_bookmarkMenu->insertSeparator(); m_menuBar->insertItem( tr( "Bookmark" ), m_bookmarkMenu ); // View menu popup = new QPopupMenu( this ); // Retrieve list of available Sword module options (e.g. footnotes, Strong's numbers, etc.) for ( a = m_actionSwordOpts.first(); a; a = m_actionSwordOpts.next() ) { a->setToggleAction( true ); connect( a, SIGNAL(toggled(bool)), this, SLOT(slotViewSwordOption(bool)) ); a->addTo( popup ); } popup->insertSeparator(); m_actionViewNavToolbar = new QAction( tr( "Navigation toolbar" ), QString::null, 0, this, 0 ); m_actionViewNavToolbar->setToggleAction( true ); connect( m_actionViewNavToolbar, SIGNAL(toggled(bool)), this, SLOT(slotViewNavToolbar(bool)) ); m_actionViewNavToolbar->addTo( popup ); m_actionViewSearchToolbar = new QAction( tr( "Search toolbar" ), QString::null, 0, this, 0 ); m_actionViewSearchToolbar->setToggleAction( true ); connect( m_actionViewSearchToolbar, SIGNAL(toggled(bool)), this, SLOT(slotViewSearchToolbar(bool)) ); m_actionViewSearchToolbar->addTo( popup ); m_menuBar->insertItem( tr( "View" ), popup ); } void MainWindow::openModule( const QString &modulename, const QString &key ) { sword::SWModule *module = m_swordMgr->Modules[ modulename.latin1() ]; if ( module ) { TextWidget *tw = 0x0; if ( !m_alwaysOpenNew ) { // Try to find if the module is already opened, if so will use that TextWidget QObjectList *childlist = queryList( "TextWidget" ); QObjectListIt it( *childlist ); while ( ( tw = reinterpret_cast<TextWidget *>(it.current()) ) != 0 && tw->getModuleName() != modulename ) ++it; if ( tw && tw->getModuleName() == modulename ) { // Set key if one is present if ( !key.isNull() ) tw->setKey( key ); // Raise tab m_tabs.setCurrentTab( tw ); } } if ( m_alwaysOpenNew || !tw ) { // Open module in new tab QString icon; QString type = module->Type(); if ( type == "Biblical Texts" ) icon = "dagger/bibletext"; else if ( type == "Commentaries" ) icon = "dagger/commentary"; else if ( type == "Lexicons / Dictionaries" ) icon = "dagger/lexicon"; tw = new TextWidget( this, module, m_numVerses, &m_textFont ); connect( tw, SIGNAL(sigRefClicked(const QString &)), this, SLOT(slotTextRefClicked(const QString &)) ); connect( this, SIGNAL(sigNumVersesChanged(int)), tw, SLOT(slotNumVersesChanged(int)) ); connect( this, SIGNAL(sigFontChanged(const QFont *)), tw, SLOT(slotFontChanged(const QFont *)) ); connect( this, SIGNAL(sigOptionChanged()), tw, SLOT(slotOptionChanged()) ); m_tabs.addTab( tw, icon, modulename ); m_actionTextClose->setEnabled( true ); m_actionEditCopy->setEnabled( true ); m_actionBookmarkAdd->setEnabled( true ); // Set key if one is present if ( !key.isNull() ) tw->setKey( key ); } } } int MainWindow::findBookmark( const QString &bookmark ) { int index = 3; int id = m_bookmarkMenu->idAt( index ); while ( ( id != -1 ) && ( m_bookmarkMenu->text( id ) != bookmark ) ) { ++index; id = m_bookmarkMenu->idAt( index ); } return id; } void MainWindow::enableScreenBlanking( bool enable ) { enable ? QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable : QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::DisableSuspend; } void MainWindow::initConfig() { bool show; m_config.setGroup( "Sword" ); for ( QAction *a = m_actionSwordOpts.first(); a; a = m_actionSwordOpts.next() ) { show = m_config.readBoolEntry( a->text(), false ); a->setOn( show ); m_swordMgr->setGlobalOption ( a->text(), show ? "On" : "Off" ); } // Display/hide toolbars based on last run m_config.setGroup( "Config" ); m_alwaysOpenNew = m_config.readBoolEntry( "AlwaysOpenNew", false ); m_navToolbar->setAutoScrollRate( m_config.readNumEntry( "AutoScroll", 50 ) ); m_disableScreenBlank = m_config.readBoolEntry( "DisableScreenBlanking", false ); enableScreenBlanking( !m_disableScreenBlank ); m_copyFormat = m_config.readNumEntry( "CopyFormat", 0 ); show = m_config.readBoolEntry( "NavBar", false ); m_actionViewNavToolbar->setOn( show ); slotViewNavToolbar( show ); m_numVerses = m_config.readNumEntry( "NumVerses", 5 ); show = m_config.readBoolEntry( "SearchBar", false ); m_actionViewSearchToolbar->setOn( show ); slotViewSearchToolbar( show ); // Set text font m_config.setGroup( "Font" ); QString fontFamily = m_config.readEntry( "Family", QString::null ); !fontFamily.isNull() ? m_textFont = QFont( fontFamily, m_config.readNumEntry( "Size", -1 ), m_config.readNumEntry( "Weight", QFont::Normal ), m_config.readBoolEntry( "Italic", false ) ) : m_textFont = font(); // If font is not configured, set to default widget font // Load bookmarks m_config.setGroup( "Bookmarks"); int count = 1; QString key = m_config.readEntry( QString::number( count ), QString::null ); while ( !key.isNull() ) { int pos = key.find( "/" ); if ( pos > -1 ) { QString bookmark; bookmark.sprintf( "%s (%s)", key.right( key.length() - ( pos + 1 ) ).latin1(), key.left( pos ).latin1() ); QAction *a = new QAction( bookmark, QString::null, 0, this, 0 ); a->addTo( m_bookmarkMenu ); connect( a, SIGNAL(activated()), this, SLOT(slotBookmarkSelected()) ); } ++count; key = m_config.readEntry( QString::number( count ), QString::null ); } m_actionBookmarkRemove->setEnabled( count > 1 ); // Load opened modules m_config.setGroup( "Session"); QString first; count = 1; key = m_config.readEntry( QString::number( count ), QString::null ); while ( !key.isNull() ) { int pos = key.find( "/" ); if ( pos > -1 ) { if ( count == 1 ) first = key.left( pos ); openModule( key.left( pos ), key.right( key.length() - ( pos + 1 ) ) ); } ++count; key = m_config.readEntry( QString::number( count ), QString::null ); } m_tabs.setCurrentTab( first ); TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); m_navToolbar->setKey( text->getAbbrevKey() ); } m_actionTextClose->setEnabled( count > 1 ); m_actionEditCopy->setEnabled( count > 1 ); } void MainWindow::slotTextDisplayed( QWidget *textWidget ) { TextWidget *text = reinterpret_cast<TextWidget *>(textWidget); setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); m_navToolbar->setKey( text->getAbbrevKey() ); m_navToolbar->navBtnsEnable( text->isBibleText() ); m_searchToolbar->setCurrModule( text ); } void MainWindow::slotTextOpen() { OpenTextDlg dlg( this, m_swordMgr, m_bibleIcon, m_commentaryIcon, m_lexiconIcon ); if ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted ) { openModule( dlg.selectedText() ); } } void MainWindow::slotTextClose() { TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { m_tabs.removePage( text ); delete text; // If no other modules are open, disable appropriate UI items if ( !m_tabs.currentWidget() ) { m_navToolbar->navBtnsEnable( false ); m_navToolbar->setKey( QString::null ); m_searchToolbar->setCurrModule( 0x0 ); m_actionTextClose->setEnabled( false ); m_actionEditCopy->setEnabled( false ); m_actionBookmarkAdd->setEnabled( false ); m_actionBookmarkRemove->setEnabled( false ); } } } void MainWindow::slotTextInstall() { } void MainWindow::slotEditCopy() { TextWidget *currModule = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( currModule ) { QString text; switch( m_copyFormat ) { case 0: text.sprintf( "%s (%s, %s)", currModule->getCurrVerse().latin1(), currModule->getAbbrevKey().latin1(), currModule->getModuleName().latin1() ); break; case 1: text.sprintf( "%s (%s)", currModule->getCurrVerse().latin1(), currModule->getAbbrevKey().latin1() ); break; case 2: text = currModule->getCurrVerse(); break; case 3: text = currModule->getAbbrevKey(); break; default: text = QString::null; }; if ( !text.isNull() ) QPEApplication::clipboard()->setText( text ); } } void MainWindow::slotEditConfigure() { ConfigureDlg dlg( this, m_modulePath, m_alwaysOpenNew, m_numVerses, m_disableScreenBlank, m_copyFormat, &m_textFont ); if ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted ) { m_modulePath = dlg.swordPath(); m_alwaysOpenNew = dlg.alwaysOpenNew(); if ( dlg.numVerses() != m_numVerses ) { m_numVerses = dlg.numVerses(); emit sigNumVersesChanged( m_numVerses ); } m_disableScreenBlank = dlg.screenBlank(); enableScreenBlanking( !m_disableScreenBlank ); m_copyFormat = dlg.copyFormat(); m_textFont = dlg.selectedFont(); emit sigFontChanged( &m_textFont ); } } void MainWindow::slotBookmarkAdd() { TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { // See if bookmark doesn't already exists QString bookmark = text->getFullKey(); int menuId = findBookmark( bookmark ); if ( menuId == -1 ) { // Bookmark not found, add QAction *a = new QAction( bookmark, QString::null, 0, this, 0 ); a->addTo( m_bookmarkMenu ); connect( a, SIGNAL(activated()), this, SLOT(slotBookmarkSelected()) ); // Make sure remove option is enabled m_actionBookmarkRemove->setEnabled( true ); } } } void MainWindow::slotBookmarkRemove() { TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); if ( text ) { // See if bookmark exists for current module key int menuId = findBookmark( text->getFullKey() ); if ( menuId != -1 ) { // Bookmark found, remove m_bookmarkMenu->removeItem( menuId ); //If this was the last bookmark, disable the remove option if ( m_bookmarkMenu->idAt( 3 ) == -1 ) m_actionBookmarkRemove->setEnabled( false ); } } } void MainWindow::slotBookmarkSelected() { const QAction *action = reinterpret_cast<const QAction *>(sender()); if ( action ) { QString bookmark = action->text(); int pos = bookmark.find( " (" ); QString key = bookmark.left( pos ); pos += 2; QString module = bookmark.mid( pos, bookmark.find( ")", pos ) - pos ); openModule( module, key ); } } void MainWindow::slotViewSwordOption( bool enabled ) { const QAction *action = reinterpret_cast<const QAction*>(sender()); m_swordMgr->setGlobalOption ( action->text(), enabled ? "On" : "Off" ); emit sigOptionChanged(); } void MainWindow::slotViewNavToolbar( bool enabled ) { enabled ? m_navToolbar->show() : 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 ) { // 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." ) ); } } } } diff --git a/noncore/apps/dagger/navbar.cpp b/noncore/apps/dagger/navbar.cpp index 97761f7..ac49613 100644 --- a/noncore/apps/dagger/navbar.cpp +++ b/noncore/apps/dagger/navbar.cpp @@ -1,101 +1,105 @@ /* 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 "navbar.h" +#include <opie2/oresource.h> + #include <qpe/config.h> #include <qpe/resource.h> #include <qaction.h> #include <qlineedit.h> #include <qwhatsthis.h> +using Opie::Core::OResource; + NavBar::NavBar( QMainWindow *parent ) : QToolBar( QString::null, parent, QMainWindow::Top, true ) { // Initialize UI - m_actionPrevPage = new QAction( tr( "Previous page" ), Resource::loadPixmap( "fastback" ), + m_actionPrevPage = new QAction( tr( "Previous page" ), OResource::loadPixmap( "fastback", OResource::SmallIcon ), QString::null, 0, this, 0 ); m_actionPrevPage->setWhatsThis( tr( "Tap here to scroll backward one page." ) ); m_actionPrevPage->addTo( this ); connect( m_actionPrevPage, SIGNAL(activated()), this, SIGNAL(prevPage()) ); - m_actionPrevVerse = new QAction( tr( "Previous verse" ), Resource::loadPixmap( "back" ), + m_actionPrevVerse = new QAction( tr( "Previous verse" ), OResource::loadPixmap( "back", OResource::SmallIcon ), QString::null, 0, this, 0 ); m_actionPrevVerse->setWhatsThis( tr( "Tap here to scroll backward one verse." ) ); m_actionPrevVerse->addTo( this ); connect( m_actionPrevVerse, SIGNAL(activated()), this, SIGNAL(prevVerse()) ); m_key = new QLineEdit( this ); setStretchableWidget( m_key ); QWhatsThis::add( m_key, tr( "Enter location to display here." ) ); connect(m_key, SIGNAL(textChanged(const QString &)), this, SIGNAL(keyChanged(const QString &)) ); - m_actionNextVerse = new QAction( tr( "Next verse" ), Resource::loadPixmap( "forward" ), + m_actionNextVerse = new QAction( tr( "Next verse" ), OResource::loadPixmap( "forward", OResource::SmallIcon ), QString::null, 0, this, 0 ); m_actionNextVerse->setWhatsThis( tr( "Tap here to scroll forward one verse." ) ); m_actionNextVerse->addTo( this ); connect( m_actionNextVerse, SIGNAL(activated()), this, SIGNAL(nextVerse()) ); - m_actionNextPage = new QAction( tr( "Next page" ), Resource::loadPixmap( "fastforward" ), + m_actionNextPage = new QAction( tr( "Next page" ), OResource::loadPixmap( "fastforward", OResource::SmallIcon ), QString::null, 0, this, 0 ); m_actionNextPage->setWhatsThis( tr( "Tap here to scroll forward one page." ) ); m_actionNextPage->addTo( this ); connect( m_actionNextPage, SIGNAL(activated()), this, SIGNAL(nextPage()) ); addSeparator(); m_scrollRate = new QSpinBox( 1, 100, 1, this ); m_scrollRate->setMinimumWidth( 35 ); QWhatsThis::add( m_scrollRate, tr( "Adjust auto-scroll rate here. A larger value represents a slower scrolling rate." ) ); connect( m_scrollRate, SIGNAL(valueChanged(int)), this, SIGNAL(scrollRateChanged(int)) ); - m_actionScroll = new QAction( tr( "Auto-scroll" ), Resource::loadPixmap( "dagger/autoscroll" ), + m_actionScroll = new QAction( tr( "Auto-scroll" ), OResource::loadPixmap( "dagger/autoscroll", OResource::SmallIcon ), QString::null, 0, this, 0 ); m_actionScroll->setToggleAction( true ); m_actionScroll->setWhatsThis( tr( "Tap here to start or stop auto-scrolling." ) ); connect( m_actionScroll, SIGNAL(toggled(bool)), this, SIGNAL(autoScroll(bool)) ); m_actionScroll->addTo( this ); if ( parent ) { installEventFilter( parent ); m_key->installEventFilter( parent ); } } void NavBar::navBtnsEnable( bool enabled ) { m_actionPrevPage->setEnabled( enabled ); m_actionPrevVerse->setEnabled( enabled ); m_actionNextVerse->setEnabled( enabled ); m_actionNextPage->setEnabled( enabled ); m_scrollRate->setEnabled( enabled ); m_actionScroll->setEnabled( enabled ); } void NavBar::setKey( const QString &newKey ) { disconnect( m_key, SIGNAL(textChanged(const QString &)), 0, 0 ); m_key->setText( newKey ); connect(m_key, SIGNAL(textChanged(const QString &)), this, SIGNAL(keyChanged(const QString &)) ); } void NavBar::setAutoScrollRate( int scrollRate ) { m_scrollRate->setValue( scrollRate ); } diff --git a/noncore/apps/dagger/searchbar.cpp b/noncore/apps/dagger/searchbar.cpp index 9953e8f..b794bfd 100644 --- a/noncore/apps/dagger/searchbar.cpp +++ b/noncore/apps/dagger/searchbar.cpp @@ -1,179 +1,182 @@ /* 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 "searchbar.h" #include "textwidget.h" +#include <opie2/oresource.h> #include <opie2/owait.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qaction.h> #include <qcombobox.h> #include <qlineedit.h> #include <qwhatsthis.h> #include <listkey.h> #include <regex.h> #include <versekey.h> +using Opie::Core::OResource; + void searchCallback( char /*percent*/, void */*userData*/ ) { qApp->processEvents(); } SearchBar::SearchBar( QMainWindow *parent ) : QToolBar( QString::null, parent, QMainWindow::Top, true ) , m_currText( 0x0 ) { // Initialize UI m_searchText = new QLineEdit( this ); setStretchableWidget( m_searchText ); QWhatsThis::add( m_searchText, tr( "Enter text to search for here." ) ); connect(m_searchText, SIGNAL(textChanged(const QString &)), this, SLOT(slotTextChanged(const QString &)) ); - m_actionFind = new QAction( tr( "Find" ), Resource::loadPixmap( "find" ), QString::null, + m_actionFind = new QAction( tr( "Find" ), OResource::loadPixmap( "find", OResource::SmallIcon ), QString::null, 0, this, 0 ); m_actionFind->setEnabled( false ); m_actionFind->addTo( this ); m_actionFind->setWhatsThis( tr( "Tap here search the current module for the text entered to the left." ) ); connect( m_actionFind, SIGNAL(activated()), this, SLOT(slotFind()) ); addSeparator(); - m_actionPrev = new QAction( tr( "Previous result" ), Resource::loadPixmap( "back" ), + m_actionPrev = new QAction( tr( "Previous result" ), OResource::loadPixmap( "back", OResource::SmallIcon ), QString::null, 0, this, 0 ); m_actionPrev->setEnabled( false ); m_actionPrev->addTo( this ); m_actionPrev->setWhatsThis( tr( "Tap here to view the previous search result." ) ); connect( m_actionPrev, SIGNAL(activated()), this, SLOT(slotPrev()) ); m_resultList = new QComboBox( this ); m_resultList->setEnabled( false ); QWhatsThis::add( m_resultList, tr( "Select the desired search result here." ) ); connect( m_resultList, SIGNAL(activated(const QString &)), this, SIGNAL(sigResultClicked(const QString &)) ); - m_actionNext = new QAction( tr( "Next result" ), Resource::loadPixmap( "forward" ), + m_actionNext = new QAction( tr( "Next result" ), OResource::loadPixmap( "forward", OResource::SmallIcon ), QString::null, 0, this, 0 ); m_actionNext->setEnabled( false ); m_actionNext->addTo( this ); m_actionNext->setWhatsThis( tr( "Tap here to view the next search result." ) ); connect( m_actionNext, SIGNAL(activated()), this, SLOT(slotNext()) ); if ( parent ) { installEventFilter( parent ); // TODO - install for all controls m_searchText->installEventFilter( parent ); } } void SearchBar::setCurrModule( TextWidget *currText ) { m_actionFind->setEnabled( ( m_searchText->text() != "" ) && currText ); if ( !m_currText || ( currText->getModuleName() != m_currText->getModuleName() ) ) { m_actionPrev->setEnabled( false ); m_resultList->clear(); m_resultList->setEnabled( false ); m_actionNext->setEnabled( false ); } m_currText = currText; } void SearchBar::slotTextChanged( const QString &newText ) { m_actionFind->setEnabled( ( newText != "" ) && m_currText ); } void SearchBar::slotFind() { m_resultList->clear(); // Change application title and display Opie wait dialog to indicate search is beginning QWidget *pWidget = reinterpret_cast<QWidget *>(parent()); QString caption = pWidget->caption(); pWidget->setCaption( "Searching..." ); Opie::Ui::OWait wait( pWidget ); wait.show(); qApp->processEvents(); // Perform search // TODO - implement search callback function to animate wait cursor sword::ListKey results = m_currText->getModule()->Search( m_searchText->text().latin1(), 0, REG_ICASE, 0, 0, &searchCallback ); // Process results int count = results.Count(); bool found = count > 0; if ( found ) { // Populate results combo box sword::VerseKey key; for ( int i = 0; i < count; i++ ) { key.setText( results.GetElement( i )->getText() ); m_resultList->insertItem( key.getShortText() ); } // Goto first result in list m_resultList->setCurrentItem( 0 ); emit sigResultClicked( m_resultList->currentText() ); } else { // Reset application title pWidget->setCaption( caption ); } // UI clean-up wait.hide(); m_actionPrev->setEnabled( false ); m_resultList->setEnabled( found ); m_actionNext->setEnabled( count > 1 ); } void SearchBar::slotPrev() { int item = m_resultList->currentItem() - 1; m_resultList->setCurrentItem( item ); emit sigResultClicked( m_resultList->currentText() ); m_actionPrev->setEnabled( item > 0 ); m_actionNext->setEnabled( item < m_resultList->count() - 1 ); } void SearchBar::slotNext() { int item = m_resultList->currentItem() + 1; m_resultList->setCurrentItem( item ); emit sigResultClicked( m_resultList->currentText() ); m_actionPrev->setEnabled( true ); m_actionNext->setEnabled( item < m_resultList->count() - 1 ); } void SearchBar::slotCloseBtn() { hide(); } |