summaryrefslogtreecommitdiff
Side-by-side diff
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
@@ -31,6 +31,7 @@ file; see the file COPYING. If not, write to the Free Software Foundation, Inc.,
#include <qaction.h>
#include <qclipboard.h>
#include <qmenubar.h>
+#include <qmessagebox.h>
#include <qobjectlist.h>
#include <qpopupmenu.h>
#include <qtimer.h>
@@ -687,27 +688,57 @@ void MainWindow::slotSearchResultClicked( const QString &key )
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." ) );
+ }
}
}
}