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
@@ -1,713 +1,744 @@
1/* 1/*
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
66 m_bibleIcon = new QPixmap( Resource::loadPixmap( "dagger/bibletext" ) ); 67 m_bibleIcon = new QPixmap( Resource::loadPixmap( "dagger/bibletext" ) );
67 m_commentaryIcon = new QPixmap( Resource::loadPixmap( "dagger/commentary" ) ); 68 m_commentaryIcon = new QPixmap( Resource::loadPixmap( "dagger/commentary" ) );
68 m_lexiconIcon = new QPixmap( Resource::loadPixmap( "dagger/lexicon" ) ); 69 m_lexiconIcon = new QPixmap( Resource::loadPixmap( "dagger/lexicon" ) );
69 70
70 // Load initial configuration 71 // Load initial configuration
71 QTimer::singleShot( 100, this, SLOT( initConfig() ) ); 72 QTimer::singleShot( 100, this, SLOT( initConfig() ) );
72} 73}
73 74
74MainWindow::~MainWindow() 75MainWindow::~MainWindow()
75{ 76{
76 // Re-enable screen blanking if it was disabled 77 // Re-enable screen blanking if it was disabled
77 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; 78 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
78 79
79 // Save Sword options 80 // Save Sword options
80 m_config.setGroup( "Sword" ); 81 m_config.setGroup( "Sword" );
81 m_config.writeEntry( "ModPath", m_modulePath ); 82 m_config.writeEntry( "ModPath", m_modulePath );
82 83
83 for ( QAction *a = m_actionSwordOpts.first(); a; a = m_actionSwordOpts.next() ) 84 for ( QAction *a = m_actionSwordOpts.first(); a; a = m_actionSwordOpts.next() )
84 m_config.writeEntry( a->text(), a->isOn() ); 85 m_config.writeEntry( a->text(), a->isOn() );
85 86
86 // Save configuration options 87 // Save configuration options
87 m_config.setGroup( "Config" ); 88 m_config.setGroup( "Config" );
88 m_config.writeEntry( "AlwaysOpenNew", m_alwaysOpenNew ); 89 m_config.writeEntry( "AlwaysOpenNew", m_alwaysOpenNew );
89 m_config.writeEntry( "AutoScroll", m_navToolbar->autoScrollRate() ); 90 m_config.writeEntry( "AutoScroll", m_navToolbar->autoScrollRate() );
90 m_config.writeEntry( "DisableScreenBlanking", m_disableScreenBlank ); 91 m_config.writeEntry( "DisableScreenBlanking", m_disableScreenBlank );
91 m_config.writeEntry( "CopyFormat", m_copyFormat ); 92 m_config.writeEntry( "CopyFormat", m_copyFormat );
92 m_config.writeEntry( "NavBar", m_actionViewNavToolbar->isOn() ); 93 m_config.writeEntry( "NavBar", m_actionViewNavToolbar->isOn() );
93 m_config.writeEntry( "NumVerses", m_numVerses ); 94 m_config.writeEntry( "NumVerses", m_numVerses );
94 m_config.writeEntry( "SearchBar", m_actionViewSearchToolbar->isOn() ); 95 m_config.writeEntry( "SearchBar", m_actionViewSearchToolbar->isOn() );
95 96
96 // Save text font 97 // Save text font
97 m_config.setGroup( "Font"); 98 m_config.setGroup( "Font");
98 m_config.writeEntry( "Family", m_textFont.family() ); 99 m_config.writeEntry( "Family", m_textFont.family() );
99 m_config.writeEntry( "Italic", m_textFont.italic() ); 100 m_config.writeEntry( "Italic", m_textFont.italic() );
100 m_config.writeEntry( "Size", m_textFont.pointSize() ); 101 m_config.writeEntry( "Size", m_textFont.pointSize() );
101 m_config.writeEntry( "Weight", m_textFont.weight() ); 102 m_config.writeEntry( "Weight", m_textFont.weight() );
102 103
103 // Save bookmarks 104 // Save bookmarks
104 m_config.setGroup( "Bookmarks"); 105 m_config.setGroup( "Bookmarks");
105 m_config.clearGroup(); 106 m_config.clearGroup();
106 int index = 3; 107 int index = 3;
107 int id = m_bookmarkMenu->idAt( index ); 108 int id = m_bookmarkMenu->idAt( index );
108 while ( id != -1 ) 109 while ( id != -1 )
109 { 110 {
110 QString bookmark = m_bookmarkMenu->text( id ); 111 QString bookmark = m_bookmarkMenu->text( id );
111 int pos = bookmark.find( " (" ); 112 int pos = bookmark.find( " (" );
112 QString key = bookmark.left( pos ); 113 QString key = bookmark.left( pos );
113 pos += 2; 114 pos += 2;
114 QString module = bookmark.mid( pos, bookmark.find( ")", pos ) - pos ); 115 QString module = bookmark.mid( pos, bookmark.find( ")", pos ) - pos );
115 QString modkey; 116 QString modkey;
116 modkey.sprintf( "%s/%s", module.latin1(), key.latin1() ); 117 modkey.sprintf( "%s/%s", module.latin1(), key.latin1() );
117 m_config.writeEntry( QString::number( index - 2 ), modkey ); 118 m_config.writeEntry( QString::number( index - 2 ), modkey );
118 119
119 ++index; 120 ++index;
120 id = m_bookmarkMenu->idAt( index ); 121 id = m_bookmarkMenu->idAt( index );
121 } 122 }
122 123
123 // Save opened modules 124 // Save opened modules
124 m_config.setGroup( "Session"); 125 m_config.setGroup( "Session");
125 m_config.clearGroup(); 126 m_config.clearGroup();
126 QObjectList *childlist = queryList( "TextWidget" ); 127 QObjectList *childlist = queryList( "TextWidget" );
127 QObjectListIt it( *childlist ); 128 QObjectListIt it( *childlist );
128 TextWidget *module; 129 TextWidget *module;
129 int count = 1; 130 int count = 1;
130 while ( ( module = reinterpret_cast<TextWidget *>(it.current()) ) != 0 ) 131 while ( ( module = reinterpret_cast<TextWidget *>(it.current()) ) != 0 )
131 { 132 {
132 QString modkey; 133 QString modkey;
133 modkey.sprintf( "%s/%s", module->getModuleName().latin1(), module->getAbbrevKey().latin1() ); 134 modkey.sprintf( "%s/%s", module->getModuleName().latin1(), module->getAbbrevKey().latin1() );
134 m_config.writeEntry( QString::number( count ), modkey ); 135 m_config.writeEntry( QString::number( count ), modkey );
135 ++count; 136 ++count;
136 ++it; 137 ++it;
137 } 138 }
138} 139}
139 140
140bool MainWindow::eventFilter( QObject *obj, QEvent *event ) 141bool MainWindow::eventFilter( QObject *obj, QEvent *event )
141{ 142{
142 if ( event->type() == QEvent::KeyPress ) 143 if ( event->type() == QEvent::KeyPress )
143 { 144 {
144 QKeyEvent *keyev = reinterpret_cast<QKeyEvent *>(event); 145 QKeyEvent *keyev = reinterpret_cast<QKeyEvent *>(event);
145 if ( keyev->key() == Key_Up ) 146 if ( keyev->key() == Key_Up )
146 { 147 {
147 slotNavPrevVerse(); 148 slotNavPrevVerse();
148 return true; 149 return true;
149 } 150 }
150 else if ( keyev->key() == Key_Down ) 151 else if ( keyev->key() == Key_Down )
151 { 152 {
152 slotNavNextVerse(); 153 slotNavNextVerse();
153 return true; 154 return true;
154 } 155 }
155 } 156 }
156 157
157 return QWidget::eventFilter( obj, event ); 158 return QWidget::eventFilter( obj, event );
158} 159}
159 160
160void MainWindow::initUI() 161void MainWindow::initUI()
161{ 162{
162 setCentralWidget( &m_tabs ); 163 setCentralWidget( &m_tabs );
163 m_tabs.installEventFilter( this ); 164 m_tabs.installEventFilter( this );
164 165
165 setToolBarsMovable( false ); 166 setToolBarsMovable( false );
166 m_barDock = new QToolBar( this ); 167 m_barDock = new QToolBar( this );
167 m_barDock->setHorizontalStretchable( true ); 168 m_barDock->setHorizontalStretchable( true );
168 169
169 m_menuBar = new QMenuBar( m_barDock ); 170 m_menuBar = new QMenuBar( m_barDock );
170 m_menuBar->setMargin( 0 ); 171 m_menuBar->setMargin( 0 );
171 172
172 // Allocate toolbars 173 // Allocate toolbars
173 m_navToolbar = new NavBar( this ); 174 m_navToolbar = new NavBar( this );
174 m_navToolbar->navBtnsEnable( false ); 175 m_navToolbar->navBtnsEnable( false );
175 connect( m_navToolbar, SIGNAL(prevPage()), this, SLOT(slotNavPrevPage()) ); 176 connect( m_navToolbar, SIGNAL(prevPage()), this, SLOT(slotNavPrevPage()) );
176 connect( m_navToolbar, SIGNAL(prevVerse()), this, SLOT(slotNavPrevVerse()) ); 177 connect( m_navToolbar, SIGNAL(prevVerse()), this, SLOT(slotNavPrevVerse()) );
177 connect( m_navToolbar, SIGNAL(keyChanged(const QString &)), this, SLOT(slotNavKeyChanged(const QString &)) ); 178 connect( m_navToolbar, SIGNAL(keyChanged(const QString &)), this, SLOT(slotNavKeyChanged(const QString &)) );
178 connect( m_navToolbar, SIGNAL(nextVerse()), this, SLOT(slotNavNextVerse()) ); 179 connect( m_navToolbar, SIGNAL(nextVerse()), this, SLOT(slotNavNextVerse()) );
179 connect( m_navToolbar, SIGNAL(nextPage()), this, SLOT(slotNavNextPage()) ); 180 connect( m_navToolbar, SIGNAL(nextPage()), this, SLOT(slotNavNextPage()) );
180 connect( m_navToolbar, SIGNAL(autoScroll(bool)), this, SLOT(slotNavAutoScroll(bool)) ); 181 connect( m_navToolbar, SIGNAL(autoScroll(bool)), this, SLOT(slotNavAutoScroll(bool)) );
181 connect( m_navToolbar, SIGNAL(scrollRateChanged(int)), this, SLOT(slotNavScrollRateChanged(int)) ); 182 connect( m_navToolbar, SIGNAL(scrollRateChanged(int)), this, SLOT(slotNavScrollRateChanged(int)) );
182 183
183 m_searchToolbar = new SearchBar( this ); 184 m_searchToolbar = new SearchBar( this );
184 connect( m_searchToolbar, SIGNAL(sigResultClicked(const QString &)), this, SLOT(slotSearchResultClicked(const QString &)) ); 185 connect( m_searchToolbar, SIGNAL(sigResultClicked(const QString &)), this, SLOT(slotSearchResultClicked(const QString &)) );
185 186
186 // Text menu 187 // Text menu
187 QPopupMenu *popup = new QPopupMenu( this ); 188 QPopupMenu *popup = new QPopupMenu( this );
188 189
189 QAction *a = new QAction( tr( "Open..." ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 ); 190 QAction *a = new QAction( tr( "Open..." ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 );
190 connect( a, SIGNAL(activated()), this, SLOT(slotTextOpen()) ); 191 connect( a, SIGNAL(activated()), this, SLOT(slotTextOpen()) );
191 a->addTo( popup ); 192 a->addTo( popup );
192 193
193 m_actionTextClose = new QAction( tr( "Close" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); 194 m_actionTextClose = new QAction( tr( "Close" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 );
194 connect( m_actionTextClose, SIGNAL(activated()), this, SLOT(slotTextClose()) ); 195 connect( m_actionTextClose, SIGNAL(activated()), this, SLOT(slotTextClose()) );
195 m_actionTextClose->addTo( popup ); 196 m_actionTextClose->addTo( popup );
196 197
197 popup->insertSeparator(); 198 popup->insertSeparator();
198 199
199 // TODO - need to implent 200 // TODO - need to implent
200 a = new QAction( tr( "Install..." ), Resource::loadPixmap( "install" ), QString::null, 0, this, 0 ); 201 a = new QAction( tr( "Install..." ), Resource::loadPixmap( "install" ), QString::null, 0, this, 0 );
201 a->setEnabled( false ); 202 a->setEnabled( false );
202 connect( a, SIGNAL(activated()), this, SLOT(slotTextInstall()) ); 203 connect( a, SIGNAL(activated()), this, SLOT(slotTextInstall()) );
203 a->addTo( popup ); 204 a->addTo( popup );
204 205
205 m_menuBar->insertItem( tr( "Text" ), popup ); 206 m_menuBar->insertItem( tr( "Text" ), popup );
206 207
207 // Edit menu 208 // Edit menu
208 popup = new QPopupMenu( this ); 209 popup = new QPopupMenu( this );
209 210
210 m_actionEditCopy = new QAction( tr( "Copy" ), Resource::loadPixmap( "copy" ), QString::null, 0, this, 0 ); 211 m_actionEditCopy = new QAction( tr( "Copy" ), Resource::loadPixmap( "copy" ), QString::null, 0, this, 0 );
211 connect( m_actionEditCopy, SIGNAL(activated()), this, SLOT(slotEditCopy()) ); 212 connect( m_actionEditCopy, SIGNAL(activated()), this, SLOT(slotEditCopy()) );
212 m_actionEditCopy->addTo( popup ); 213 m_actionEditCopy->addTo( popup );
213 214
214 popup->insertSeparator(); 215 popup->insertSeparator();
215 216
216 a = new QAction( tr( "Configure..." ), Resource::loadPixmap( "SettingsIcon" ), QString::null, 0, this, 0 ); 217 a = new QAction( tr( "Configure..." ), Resource::loadPixmap( "SettingsIcon" ), QString::null, 0, this, 0 );
217 connect( a, SIGNAL(activated()), this, SLOT(slotEditConfigure()) ); 218 connect( a, SIGNAL(activated()), this, SLOT(slotEditConfigure()) );
218 a->addTo( popup ); 219 a->addTo( popup );
219 220
220 m_menuBar->insertItem( tr( "Edit" ), popup ); 221 m_menuBar->insertItem( tr( "Edit" ), popup );
221 222
222 // Bookmark menu 223 // Bookmark menu
223 m_bookmarkMenu = new QPopupMenu( this ); 224 m_bookmarkMenu = new QPopupMenu( this );
224 225
225 m_actionBookmarkAdd = new QAction( tr( "Add" ), Resource::loadPixmap( "dagger/bookmarkadd" ), QString::null, 0, this, 0 ); 226 m_actionBookmarkAdd = new QAction( tr( "Add" ), Resource::loadPixmap( "dagger/bookmarkadd" ), QString::null, 0, this, 0 );
226 connect( m_actionBookmarkAdd, SIGNAL(activated()), this, SLOT(slotBookmarkAdd()) ); 227 connect( m_actionBookmarkAdd, SIGNAL(activated()), this, SLOT(slotBookmarkAdd()) );
227 m_actionBookmarkAdd->addTo( m_bookmarkMenu ); 228 m_actionBookmarkAdd->addTo( m_bookmarkMenu );
228 229
229 m_actionBookmarkRemove = new QAction( tr( "Remove" ), Resource::loadPixmap( "dagger/bookmarkremove" ), QString::null, 0, this, 0 ); 230 m_actionBookmarkRemove = new QAction( tr( "Remove" ), Resource::loadPixmap( "dagger/bookmarkremove" ), QString::null, 0, this, 0 );
230 connect( m_actionBookmarkRemove, SIGNAL(activated()), this, SLOT(slotBookmarkRemove()) ); 231 connect( m_actionBookmarkRemove, SIGNAL(activated()), this, SLOT(slotBookmarkRemove()) );
231 m_actionBookmarkRemove->addTo( m_bookmarkMenu ); 232 m_actionBookmarkRemove->addTo( m_bookmarkMenu );
232 233
233 m_bookmarkMenu->insertSeparator(); 234 m_bookmarkMenu->insertSeparator();
234 235
235 m_menuBar->insertItem( tr( "Bookmark" ), m_bookmarkMenu ); 236 m_menuBar->insertItem( tr( "Bookmark" ), m_bookmarkMenu );
236 237
237 // View menu 238 // View menu
238 popup = new QPopupMenu( this ); 239 popup = new QPopupMenu( this );
239 240
240 // Retrieve list of available Sword module options (e.g. footnotes, Strong's numbers, etc.) 241 // Retrieve list of available Sword module options (e.g. footnotes, Strong's numbers, etc.)
241 for ( a = m_actionSwordOpts.first(); a; a = m_actionSwordOpts.next() ) 242 for ( a = m_actionSwordOpts.first(); a; a = m_actionSwordOpts.next() )
242 { 243 {
243 a->setToggleAction( true ); 244 a->setToggleAction( true );
244 connect( a, SIGNAL(toggled(bool)), this, SLOT(slotViewSwordOption(bool)) ); 245 connect( a, SIGNAL(toggled(bool)), this, SLOT(slotViewSwordOption(bool)) );
245 a->addTo( popup ); 246 a->addTo( popup );
246 } 247 }
247 248
248 popup->insertSeparator(); 249 popup->insertSeparator();
249 250
250 m_actionViewNavToolbar = new QAction( tr( "Navigation toolbar" ), QString::null, 0, this, 0 ); 251 m_actionViewNavToolbar = new QAction( tr( "Navigation toolbar" ), QString::null, 0, this, 0 );
251 m_actionViewNavToolbar->setToggleAction( true ); 252 m_actionViewNavToolbar->setToggleAction( true );
252 connect( m_actionViewNavToolbar, SIGNAL(toggled(bool)), this, SLOT(slotViewNavToolbar(bool)) ); 253 connect( m_actionViewNavToolbar, SIGNAL(toggled(bool)), this, SLOT(slotViewNavToolbar(bool)) );
253 m_actionViewNavToolbar->addTo( popup ); 254 m_actionViewNavToolbar->addTo( popup );
254 255
255 m_actionViewSearchToolbar = new QAction( tr( "Search toolbar" ), QString::null, 0, this, 0 ); 256 m_actionViewSearchToolbar = new QAction( tr( "Search toolbar" ), QString::null, 0, this, 0 );
256 m_actionViewSearchToolbar->setToggleAction( true ); 257 m_actionViewSearchToolbar->setToggleAction( true );
257 connect( m_actionViewSearchToolbar, SIGNAL(toggled(bool)), this, SLOT(slotViewSearchToolbar(bool)) ); 258 connect( m_actionViewSearchToolbar, SIGNAL(toggled(bool)), this, SLOT(slotViewSearchToolbar(bool)) );
258 m_actionViewSearchToolbar->addTo( popup ); 259 m_actionViewSearchToolbar->addTo( popup );
259 260
260 m_menuBar->insertItem( tr( "View" ), popup ); 261 m_menuBar->insertItem( tr( "View" ), popup );
261} 262}
262 263
263void MainWindow::openModule( const QString &modulename, const QString &key ) 264void MainWindow::openModule( const QString &modulename, const QString &key )
264{ 265{
265 sword::SWModule *module = m_swordMgr->Modules[ modulename.latin1() ]; 266 sword::SWModule *module = m_swordMgr->Modules[ modulename.latin1() ];
266 if ( module ) 267 if ( module )
267 { 268 {
268 TextWidget *tw = 0x0; 269 TextWidget *tw = 0x0;
269 270
270 if ( !m_alwaysOpenNew ) 271 if ( !m_alwaysOpenNew )
271 { 272 {
272 // Try to find if the module is already opened, if so will use that TextWidget 273 // Try to find if the module is already opened, if so will use that TextWidget
273 QObjectList *childlist = queryList( "TextWidget" ); 274 QObjectList *childlist = queryList( "TextWidget" );
274 QObjectListIt it( *childlist ); 275 QObjectListIt it( *childlist );
275 while ( ( tw = reinterpret_cast<TextWidget *>(it.current()) ) != 0 && 276 while ( ( tw = reinterpret_cast<TextWidget *>(it.current()) ) != 0 &&
276 tw->getModuleName() != modulename ) 277 tw->getModuleName() != modulename )
277 ++it; 278 ++it;
278 if ( tw && tw->getModuleName() == modulename ) 279 if ( tw && tw->getModuleName() == modulename )
279 { 280 {
280 // Set key if one is present 281 // Set key if one is present
281 if ( !key.isNull() ) 282 if ( !key.isNull() )
282 tw->setKey( key ); 283 tw->setKey( key );
283 284
284 // Raise tab 285 // Raise tab
285 m_tabs.setCurrentTab( tw ); 286 m_tabs.setCurrentTab( tw );
286 } 287 }
287 } 288 }
288 289
289 if ( m_alwaysOpenNew || !tw ) 290 if ( m_alwaysOpenNew || !tw )
290 { 291 {
291 // Open module in new tab 292 // Open module in new tab
292 QString icon; 293 QString icon;
293 QString type = module->Type(); 294 QString type = module->Type();
294 295
295 if ( type == "Biblical Texts" ) 296 if ( type == "Biblical Texts" )
296 icon = "dagger/bibletext"; 297 icon = "dagger/bibletext";
297 else if ( type == "Commentaries" ) 298 else if ( type == "Commentaries" )
298 icon = "dagger/commentary"; 299 icon = "dagger/commentary";
299 else if ( type == "Lexicons / Dictionaries" ) 300 else if ( type == "Lexicons / Dictionaries" )
300 icon = "dagger/lexicon"; 301 icon = "dagger/lexicon";
301 302
302 tw = new TextWidget( this, module, m_numVerses, &m_textFont ); 303 tw = new TextWidget( this, module, m_numVerses, &m_textFont );
303 connect( tw, SIGNAL(sigRefClicked(const QString &)), 304 connect( tw, SIGNAL(sigRefClicked(const QString &)),
304 this, SLOT(slotTextRefClicked(const QString &)) ); 305 this, SLOT(slotTextRefClicked(const QString &)) );
305 connect( this, SIGNAL(sigNumVersesChanged(int)), tw, SLOT(slotNumVersesChanged(int)) ); 306 connect( this, SIGNAL(sigNumVersesChanged(int)), tw, SLOT(slotNumVersesChanged(int)) );
306 connect( this, SIGNAL(sigFontChanged(const QFont *)), tw, SLOT(slotFontChanged(const QFont *)) ); 307 connect( this, SIGNAL(sigFontChanged(const QFont *)), tw, SLOT(slotFontChanged(const QFont *)) );
307 connect( this, SIGNAL(sigOptionChanged()), tw, SLOT(slotOptionChanged()) ); 308 connect( this, SIGNAL(sigOptionChanged()), tw, SLOT(slotOptionChanged()) );
308 309
309 m_tabs.addTab( tw, icon, modulename ); 310 m_tabs.addTab( tw, icon, modulename );
310 311
311 m_actionTextClose->setEnabled( true ); 312 m_actionTextClose->setEnabled( true );
312 m_actionEditCopy->setEnabled( true ); 313 m_actionEditCopy->setEnabled( true );
313 m_actionBookmarkAdd->setEnabled( true ); 314 m_actionBookmarkAdd->setEnabled( true );
314 315
315 // Set key if one is present 316 // Set key if one is present
316 if ( !key.isNull() ) 317 if ( !key.isNull() )
317 tw->setKey( key ); 318 tw->setKey( key );
318 } 319 }
319 } 320 }
320} 321}
321 322
322int MainWindow::findBookmark( const QString &bookmark ) 323int MainWindow::findBookmark( const QString &bookmark )
323{ 324{
324 int index = 3; 325 int index = 3;
325 int id = m_bookmarkMenu->idAt( index ); 326 int id = m_bookmarkMenu->idAt( index );
326 while ( ( id != -1 ) && ( m_bookmarkMenu->text( id ) != bookmark ) ) 327 while ( ( id != -1 ) && ( m_bookmarkMenu->text( id ) != bookmark ) )
327 { 328 {
328 ++index; 329 ++index;
329 id = m_bookmarkMenu->idAt( index ); 330 id = m_bookmarkMenu->idAt( index );
330 } 331 }
331 332
332 return id; 333 return id;
333} 334}
334 335
335void MainWindow::enableScreenBlanking( bool enable ) 336void MainWindow::enableScreenBlanking( bool enable )
336{ 337{
337 enable ? QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable 338 enable ? QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable
338 : QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::DisableSuspend; 339 : QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::DisableSuspend;
339} 340}
340 341
341void MainWindow::initConfig() 342void MainWindow::initConfig()
342{ 343{
343 bool show; 344 bool show;
344 345
345 m_config.setGroup( "Sword" ); 346 m_config.setGroup( "Sword" );
346 for ( QAction *a = m_actionSwordOpts.first(); a; a = m_actionSwordOpts.next() ) 347 for ( QAction *a = m_actionSwordOpts.first(); a; a = m_actionSwordOpts.next() )
347 { 348 {
348 show = m_config.readBoolEntry( a->text(), false ); 349 show = m_config.readBoolEntry( a->text(), false );
349 a->setOn( show ); 350 a->setOn( show );
350 m_swordMgr->setGlobalOption ( a->text(), show ? "On" : "Off" ); 351 m_swordMgr->setGlobalOption ( a->text(), show ? "On" : "Off" );
351 } 352 }
352 353
353 // Display/hide toolbars based on last run 354 // Display/hide toolbars based on last run
354 m_config.setGroup( "Config" ); 355 m_config.setGroup( "Config" );
355 356
356 m_alwaysOpenNew = m_config.readBoolEntry( "AlwaysOpenNew", false ); 357 m_alwaysOpenNew = m_config.readBoolEntry( "AlwaysOpenNew", false );
357 m_navToolbar->setAutoScrollRate( m_config.readNumEntry( "AutoScroll", 50 ) ); 358 m_navToolbar->setAutoScrollRate( m_config.readNumEntry( "AutoScroll", 50 ) );
358 m_disableScreenBlank = m_config.readBoolEntry( "DisableScreenBlanking", false ); 359 m_disableScreenBlank = m_config.readBoolEntry( "DisableScreenBlanking", false );
359 enableScreenBlanking( !m_disableScreenBlank ); 360 enableScreenBlanking( !m_disableScreenBlank );
360 m_copyFormat = m_config.readNumEntry( "CopyFormat", 0 ); 361 m_copyFormat = m_config.readNumEntry( "CopyFormat", 0 );
361 362
362 show = m_config.readBoolEntry( "NavBar", false ); 363 show = m_config.readBoolEntry( "NavBar", false );
363 m_actionViewNavToolbar->setOn( show ); 364 m_actionViewNavToolbar->setOn( show );
364 slotViewNavToolbar( show ); 365 slotViewNavToolbar( show );
365 366
366 m_numVerses = m_config.readNumEntry( "NumVerses", 5 ); 367 m_numVerses = m_config.readNumEntry( "NumVerses", 5 );
367 368
368 show = m_config.readBoolEntry( "SearchBar", false ); 369 show = m_config.readBoolEntry( "SearchBar", false );
369 m_actionViewSearchToolbar->setOn( show ); 370 m_actionViewSearchToolbar->setOn( show );
370 slotViewSearchToolbar( show ); 371 slotViewSearchToolbar( show );
371 372
372 // Set text font 373 // Set text font
373 m_config.setGroup( "Font" ); 374 m_config.setGroup( "Font" );
374 QString fontFamily = m_config.readEntry( "Family", QString::null ); 375 QString fontFamily = m_config.readEntry( "Family", QString::null );
375 !fontFamily.isNull() ? m_textFont = QFont( fontFamily, 376 !fontFamily.isNull() ? m_textFont = QFont( fontFamily,
376 m_config.readNumEntry( "Size", -1 ), 377 m_config.readNumEntry( "Size", -1 ),
377 m_config.readNumEntry( "Weight", QFont::Normal ), 378 m_config.readNumEntry( "Weight", QFont::Normal ),
378 m_config.readBoolEntry( "Italic", false ) ) 379 m_config.readBoolEntry( "Italic", false ) )
379 : m_textFont = font(); // If font is not configured, set to default widget font 380 : m_textFont = font(); // If font is not configured, set to default widget font
380 381
381 // Load bookmarks 382 // Load bookmarks
382 m_config.setGroup( "Bookmarks"); 383 m_config.setGroup( "Bookmarks");
383 int count = 1; 384 int count = 1;
384 QString key = m_config.readEntry( QString::number( count ), QString::null ); 385 QString key = m_config.readEntry( QString::number( count ), QString::null );
385 while ( !key.isNull() ) 386 while ( !key.isNull() )
386 { 387 {
387 int pos = key.find( "/" ); 388 int pos = key.find( "/" );
388 if ( pos > -1 ) 389 if ( pos > -1 )
389 { 390 {
390 QString bookmark; 391 QString bookmark;
391 bookmark.sprintf( "%s (%s)", key.right( key.length() - ( pos + 1 ) ).latin1(), 392 bookmark.sprintf( "%s (%s)", key.right( key.length() - ( pos + 1 ) ).latin1(),
392 key.left( pos ).latin1() ); 393 key.left( pos ).latin1() );
393 QAction *a = new QAction( bookmark, QString::null, 0, this, 0 ); 394 QAction *a = new QAction( bookmark, QString::null, 0, this, 0 );
394 a->addTo( m_bookmarkMenu ); 395 a->addTo( m_bookmarkMenu );
395 connect( a, SIGNAL(activated()), this, SLOT(slotBookmarkSelected()) ); 396 connect( a, SIGNAL(activated()), this, SLOT(slotBookmarkSelected()) );
396 } 397 }
397 398
398 ++count; 399 ++count;
399 key = m_config.readEntry( QString::number( count ), QString::null ); 400 key = m_config.readEntry( QString::number( count ), QString::null );
400 } 401 }
401 m_actionBookmarkRemove->setEnabled( count > 1 ); 402 m_actionBookmarkRemove->setEnabled( count > 1 );
402 403
403 // Load opened modules 404 // Load opened modules
404 m_config.setGroup( "Session"); 405 m_config.setGroup( "Session");
405 QString first; 406 QString first;
406 count = 1; 407 count = 1;
407 key = m_config.readEntry( QString::number( count ), QString::null ); 408 key = m_config.readEntry( QString::number( count ), QString::null );
408 while ( !key.isNull() ) 409 while ( !key.isNull() )
409 { 410 {
410 int pos = key.find( "/" ); 411 int pos = key.find( "/" );
411 if ( pos > -1 ) 412 if ( pos > -1 )
412 { 413 {
413 if ( count == 1 ) 414 if ( count == 1 )
414 first = key.left( pos ); 415 first = key.left( pos );
415 openModule( key.left( pos ), key.right( key.length() - ( pos + 1 ) ) ); 416 openModule( key.left( pos ), key.right( key.length() - ( pos + 1 ) ) );
416 } 417 }
417 418
418 ++count; 419 ++count;
419 key = m_config.readEntry( QString::number( count ), QString::null ); 420 key = m_config.readEntry( QString::number( count ), QString::null );
420 } 421 }
421 m_tabs.setCurrentTab( first ); 422 m_tabs.setCurrentTab( first );
422 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 423 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
423 if ( text ) 424 if ( text )
424 { 425 {
425 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); 426 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) );
426 m_navToolbar->setKey( text->getAbbrevKey() ); 427 m_navToolbar->setKey( text->getAbbrevKey() );
427 } 428 }
428 m_actionTextClose->setEnabled( count > 1 ); 429 m_actionTextClose->setEnabled( count > 1 );
429 m_actionEditCopy->setEnabled( count > 1 ); 430 m_actionEditCopy->setEnabled( count > 1 );
430} 431}
431 432
432void MainWindow::slotTextDisplayed( QWidget *textWidget ) 433void MainWindow::slotTextDisplayed( QWidget *textWidget )
433{ 434{
434 TextWidget *text = reinterpret_cast<TextWidget *>(textWidget); 435 TextWidget *text = reinterpret_cast<TextWidget *>(textWidget);
435 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); 436 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) );
436 437
437 m_navToolbar->setKey( text->getAbbrevKey() ); 438 m_navToolbar->setKey( text->getAbbrevKey() );
438 m_navToolbar->navBtnsEnable( text->isBibleText() ); 439 m_navToolbar->navBtnsEnable( text->isBibleText() );
439 440
440 m_searchToolbar->setCurrModule( text ); 441 m_searchToolbar->setCurrModule( text );
441} 442}
442 443
443void MainWindow::slotTextOpen() 444void MainWindow::slotTextOpen()
444{ 445{
445 OpenTextDlg dlg( this, m_swordMgr, m_bibleIcon, m_commentaryIcon, m_lexiconIcon ); 446 OpenTextDlg dlg( this, m_swordMgr, m_bibleIcon, m_commentaryIcon, m_lexiconIcon );
446 if ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted ) 447 if ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted )
447 { 448 {
448 openModule( dlg.selectedText() ); 449 openModule( dlg.selectedText() );
449 } 450 }
450} 451}
451 452
452void MainWindow::slotTextClose() 453void MainWindow::slotTextClose()
453{ 454{
454 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 455 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
455 if ( text ) 456 if ( text )
456 { 457 {
457 m_tabs.removePage( text ); 458 m_tabs.removePage( text );
458 delete text; 459 delete text;
459 460
460 // If no other modules are open, disable appropriate UI items 461 // If no other modules are open, disable appropriate UI items
461 if ( !m_tabs.currentWidget() ) 462 if ( !m_tabs.currentWidget() )
462 { 463 {
463 m_navToolbar->navBtnsEnable( false ); 464 m_navToolbar->navBtnsEnable( false );
464 m_navToolbar->setKey( QString::null ); 465 m_navToolbar->setKey( QString::null );
465 m_searchToolbar->setCurrModule( 0x0 ); 466 m_searchToolbar->setCurrModule( 0x0 );
466 m_actionTextClose->setEnabled( false ); 467 m_actionTextClose->setEnabled( false );
467 m_actionEditCopy->setEnabled( false ); 468 m_actionEditCopy->setEnabled( false );
468 m_actionBookmarkAdd->setEnabled( false ); 469 m_actionBookmarkAdd->setEnabled( false );
469 m_actionBookmarkRemove->setEnabled( false ); 470 m_actionBookmarkRemove->setEnabled( false );
470 } 471 }
471 } 472 }
472} 473}
473 474
474void MainWindow::slotTextInstall() 475void MainWindow::slotTextInstall()
475{ 476{
476} 477}
477 478
478void MainWindow::slotEditCopy() 479void MainWindow::slotEditCopy()
479{ 480{
480 TextWidget *currModule = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 481 TextWidget *currModule = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
481 if ( currModule ) 482 if ( currModule )
482 { 483 {
483 QString text; 484 QString text;
484 485
485 switch( m_copyFormat ) 486 switch( m_copyFormat )
486 { 487 {
487 case 0: text.sprintf( "%s (%s, %s)", currModule->getCurrVerse().latin1(), 488 case 0: text.sprintf( "%s (%s, %s)", currModule->getCurrVerse().latin1(),
488 currModule->getAbbrevKey().latin1(), 489 currModule->getAbbrevKey().latin1(),
489 currModule->getModuleName().latin1() ); 490 currModule->getModuleName().latin1() );
490 break; 491 break;
491 case 1: text.sprintf( "%s (%s)", currModule->getCurrVerse().latin1(), 492 case 1: text.sprintf( "%s (%s)", currModule->getCurrVerse().latin1(),
492 currModule->getAbbrevKey().latin1() ); 493 currModule->getAbbrevKey().latin1() );
493 break; 494 break;
494 case 2: text = currModule->getCurrVerse(); 495 case 2: text = currModule->getCurrVerse();
495 break; 496 break;
496 case 3: text = currModule->getAbbrevKey(); 497 case 3: text = currModule->getAbbrevKey();
497 break; 498 break;
498 default: text = QString::null; 499 default: text = QString::null;
499 }; 500 };
500 501
501 if ( !text.isNull() ) 502 if ( !text.isNull() )
502 QPEApplication::clipboard()->setText( text ); 503 QPEApplication::clipboard()->setText( text );
503 } 504 }
504} 505}
505 506
506void MainWindow::slotEditConfigure() 507void MainWindow::slotEditConfigure()
507{ 508{
508 ConfigureDlg dlg( this, m_modulePath, m_alwaysOpenNew, m_numVerses, m_disableScreenBlank, m_copyFormat, 509 ConfigureDlg dlg( this, m_modulePath, m_alwaysOpenNew, m_numVerses, m_disableScreenBlank, m_copyFormat,
509 &m_textFont ); 510 &m_textFont );
510 if ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted ) 511 if ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted )
511 { 512 {
512 m_modulePath = dlg.swordPath(); 513 m_modulePath = dlg.swordPath();
513 m_alwaysOpenNew = dlg.alwaysOpenNew(); 514 m_alwaysOpenNew = dlg.alwaysOpenNew();
514 if ( dlg.numVerses() != m_numVerses ) 515 if ( dlg.numVerses() != m_numVerses )
515 { 516 {
516 m_numVerses = dlg.numVerses(); 517 m_numVerses = dlg.numVerses();
517 emit sigNumVersesChanged( m_numVerses ); 518 emit sigNumVersesChanged( m_numVerses );
518 } 519 }
519 m_disableScreenBlank = dlg.screenBlank(); 520 m_disableScreenBlank = dlg.screenBlank();
520 enableScreenBlanking( !m_disableScreenBlank ); 521 enableScreenBlanking( !m_disableScreenBlank );
521 m_copyFormat = dlg.copyFormat(); 522 m_copyFormat = dlg.copyFormat();
522 m_textFont = dlg.selectedFont(); 523 m_textFont = dlg.selectedFont();
523 emit sigFontChanged( &m_textFont ); 524 emit sigFontChanged( &m_textFont );
524 } 525 }
525} 526}
526 527
527void MainWindow::slotBookmarkAdd() 528void MainWindow::slotBookmarkAdd()
528{ 529{
529 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 530 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
530 if ( text ) 531 if ( text )
531 { 532 {
532 // See if bookmark doesn't already exists 533 // See if bookmark doesn't already exists
533 QString bookmark = text->getFullKey(); 534 QString bookmark = text->getFullKey();
534 int menuId = findBookmark( bookmark ); 535 int menuId = findBookmark( bookmark );
535 if ( menuId == -1 ) 536 if ( menuId == -1 )
536 { 537 {
537 // Bookmark not found, add 538 // Bookmark not found, add
538 QAction *a = new QAction( bookmark, QString::null, 0, this, 0 ); 539 QAction *a = new QAction( bookmark, QString::null, 0, this, 0 );
539 a->addTo( m_bookmarkMenu ); 540 a->addTo( m_bookmarkMenu );
540 connect( a, SIGNAL(activated()), this, SLOT(slotBookmarkSelected()) ); 541 connect( a, SIGNAL(activated()), this, SLOT(slotBookmarkSelected()) );
541 542
542 // Make sure remove option is enabled 543 // Make sure remove option is enabled
543 m_actionBookmarkRemove->setEnabled( true ); 544 m_actionBookmarkRemove->setEnabled( true );
544 545
545 } 546 }
546 } 547 }
547} 548}
548 549
549void MainWindow::slotBookmarkRemove() 550void MainWindow::slotBookmarkRemove()
550{ 551{
551 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 552 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
552 if ( text ) 553 if ( text )
553 { 554 {
554 // See if bookmark exists for current module key 555 // See if bookmark exists for current module key
555 int menuId = findBookmark( text->getFullKey() ); 556 int menuId = findBookmark( text->getFullKey() );
556 if ( menuId != -1 ) 557 if ( menuId != -1 )
557 { 558 {
558 // Bookmark found, remove 559 // Bookmark found, remove
559 m_bookmarkMenu->removeItem( menuId ); 560 m_bookmarkMenu->removeItem( menuId );
560 561
561 //If this was the last bookmark, disable the remove option 562 //If this was the last bookmark, disable the remove option
562 if ( m_bookmarkMenu->idAt( 3 ) == -1 ) 563 if ( m_bookmarkMenu->idAt( 3 ) == -1 )
563 m_actionBookmarkRemove->setEnabled( false ); 564 m_actionBookmarkRemove->setEnabled( false );
564 } 565 }
565 } 566 }
566} 567}
567 568
568void MainWindow::slotBookmarkSelected() 569void MainWindow::slotBookmarkSelected()
569{ 570{
570 const QAction *action = reinterpret_cast<const QAction *>(sender()); 571 const QAction *action = reinterpret_cast<const QAction *>(sender());
571 if ( action ) 572 if ( action )
572 { 573 {
573 QString bookmark = action->text(); 574 QString bookmark = action->text();
574 int pos = bookmark.find( " (" ); 575 int pos = bookmark.find( " (" );
575 QString key = bookmark.left( pos ); 576 QString key = bookmark.left( pos );
576 pos += 2; 577 pos += 2;
577 QString module = bookmark.mid( pos, bookmark.find( ")", pos ) - pos ); 578 QString module = bookmark.mid( pos, bookmark.find( ")", pos ) - pos );
578 579
579 openModule( module, key ); 580 openModule( module, key );
580 } 581 }
581} 582}
582 583
583void MainWindow::slotViewSwordOption( bool enabled ) 584void MainWindow::slotViewSwordOption( bool enabled )
584{ 585{
585 const QAction *action = reinterpret_cast<const QAction*>(sender()); 586 const QAction *action = reinterpret_cast<const QAction*>(sender());
586 m_swordMgr->setGlobalOption ( action->text(), enabled ? "On" : "Off" ); 587 m_swordMgr->setGlobalOption ( action->text(), enabled ? "On" : "Off" );
587 588
588 emit sigOptionChanged(); 589 emit sigOptionChanged();
589} 590}
590 591
591void MainWindow::slotViewNavToolbar( bool enabled ) 592void MainWindow::slotViewNavToolbar( bool enabled )
592{ 593{
593 enabled ? m_navToolbar->show() 594 enabled ? m_navToolbar->show()
594 : m_navToolbar->hide(); 595 : m_navToolbar->hide();
595} 596}
596 597
597void MainWindow::slotViewSearchToolbar( bool enabled ) 598void MainWindow::slotViewSearchToolbar( bool enabled )
598{ 599{
599 enabled ? m_searchToolbar->show() 600 enabled ? m_searchToolbar->show()
600 : m_searchToolbar->hide(); 601 : m_searchToolbar->hide();
601} 602}
602 603
603void MainWindow::slotNavPrevPage() 604void MainWindow::slotNavPrevPage()
604{ 605{
605 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 606 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
606 if ( text ) 607 if ( text )
607 { 608 {
608 text->prevPage(); 609 text->prevPage();
609 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); 610 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) );
610 m_navToolbar->setKey( text->getAbbrevKey() ); 611 m_navToolbar->setKey( text->getAbbrevKey() );
611 } 612 }
612} 613}
613 614
614void MainWindow::slotNavPrevVerse() 615void MainWindow::slotNavPrevVerse()
615{ 616{
616 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 617 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
617 if ( text ) 618 if ( text )
618 { 619 {
619 text->prevVerse(); 620 text->prevVerse();
620 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); 621 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) );
621 m_navToolbar->setKey( text->getAbbrevKey() ); 622 m_navToolbar->setKey( text->getAbbrevKey() );
622 } 623 }
623} 624}
624 625
625void MainWindow::slotNavKeyChanged( const QString &newKey ) 626void MainWindow::slotNavKeyChanged( const QString &newKey )
626{ 627{
627 QString key = newKey; 628 QString key = newKey;
628 key.replace( QRegExp( "[-=.]" ), ":" ); 629 key.replace( QRegExp( "[-=.]" ), ":" );
629 630
630 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 631 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
631 if ( text ) 632 if ( text )
632 { 633 {
633 text->setKey( key ); 634 text->setKey( key );
634 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); 635 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) );
635 } 636 }
636} 637}
637 638
638void MainWindow::slotNavNextVerse() 639void MainWindow::slotNavNextVerse()
639{ 640{
640 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 641 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
641 if ( text ) 642 if ( text )
642 { 643 {
643 text->nextVerse(); 644 text->nextVerse();
644 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); 645 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) );
645 m_navToolbar->setKey( text->getAbbrevKey() ); 646 m_navToolbar->setKey( text->getAbbrevKey() );
646 } 647 }
647} 648}
648 649
649void MainWindow::slotNavNextPage() 650void MainWindow::slotNavNextPage()
650{ 651{
651 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget()); 652 TextWidget *text = reinterpret_cast<TextWidget *>(m_tabs.currentWidget());
652 if ( text ) 653 if ( text )
653 { 654 {
654 text->nextPage(); 655 text->nextPage();
655 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) ); 656 setCaption( QString( "%1 - Dagger" ).arg( text->getFullKey() ) );
656 m_navToolbar->setKey( text->getAbbrevKey() ); 657 m_navToolbar->setKey( text->getAbbrevKey() );
657 } 658 }
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}