26 #include <KMessageBox>
27 #include <KStandardDirs>
30 #include <QApplication>
37 #include <QTextStream>
44 KStandardDirs *dirs = KGlobal::dirs();
45 QString romkana = dirs->findResource(
"data",
"kiten/romkana.cnv" );
46 if ( romkana.isNull() )
48 KMessageBox::error( 0, i18n(
"Romaji information file not installed, so Romaji conversion cannot be used." ) );
54 if ( ! f.open( QIODevice::ReadOnly ) )
56 KMessageBox::error( 0, i18n(
"Romaji information could not be loaded, so Romaji conversion cannot be used." ) );
60 t.setCodec( QTextCodec::codecForName(
"eucJP" ) );
63 QString s = t.readLine();
65 QChar first = s.at( 0 );
70 else if ( first ==
'$' )
72 if ( m_kana ==
"unset" )
83 QStringList things( s.split( QChar(
' ' ) ) );
84 QString thekana( things.first() );
85 QString romaji( things.at( 1 ) );
87 if ( m_kana ==
"hiragana" )
89 m_hiragana[ romaji ] = thekana;
91 else if ( m_kana ==
"katakana" )
93 m_katakana[ romaji ] = thekana;
111 menu->addSeparator();
114 QActionGroup *group =
new QActionGroup( menu );
117 temp =
new QAction( i18nc(
"@option:radio selects english translation",
"English" ), group );
118 temp->setCheckable(
true );
119 menu->addAction( temp );
120 if( m_kana ==
"english" )
122 temp->setChecked(
true );
126 temp->setChecked(
false );
129 temp =
new QAction( i18nc(
"@option:radio selects japanese translation",
"Kana" ), group );
130 temp->setCheckable(
true );
131 menu->addAction( temp );
132 if( m_kana ==
"kana" )
134 temp->setChecked(
true );
138 temp->setChecked(
false );
141 connect( group, SIGNAL( triggered( QAction* ) ),
144 emit aboutToShowContextMenu( menu );
151 bool shift = qApp->keyboardModifiers() & Qt::ShiftModifier;
152 QString ji = e->text();
154 if ( shift && e->key() == Qt::Key_Space )
156 if ( m_kana ==
"hiragana" )
160 else if ( m_kana ==
"english" )
168 if ( m_kana ==
"english" || ji.isEmpty() )
170 KLineEdit::keyPressEvent( e );
176 if (m_kana ==
"hiragana")
186 QString text = this->text();
189 unsigned int len = text.length();
191 for ( i = len - 1; i >= 0; i-- )
193 QChar at = text.at( i );
197 if ( at.row() == 0 && at !=
'.' )
210 curKana = text.left( i );
212 ji.prepend( curEng );
219 if ( m_kana ==
"hiragana" )
221 replace = m_hiragana[ ji ];
223 else if ( m_kana ==
"katakana" )
225 replace = m_katakana[ ji ];
230 if ( ! ( replace.isEmpty() ) )
234 setText( curKana + replace );
236 if ( m_kana ==
"katakana" )
246 QString farRight( ji.right( ji.length() - 1 ) );
251 if ( ji.at( 0 ) == farRight.at( 0 ) )
253 if ( m_kana ==
"hiragana" )
255 setText( curKana + m_hiragana[ ji.at( 0 ) ==
'n' ?
"n'" :
"t-" ] + farRight.at( 0 ) );
259 setText( curKana + m_katakana[ ji.at( 0 ) ==
'n' ?
"n'" :
"t-" ] + farRight.at( 0 ) );
262 if ( m_kana ==
"katakana" )
272 if ( m_kana ==
"hiragana" )
274 newkana = m_hiragana[ farRight ];
276 if ( ji.at( 0 ) ==
'n' && ! ( newkana.isEmpty() ) )
280 setText( curKana + m_hiragana[
"n'" ] + newkana );
282 if ( m_kana ==
"katakana" )
292 newkana = m_katakana[ farRight ];
293 if ( ji.at( 0 ) ==
'n' && ! newkana.isEmpty() )
297 setText( curKana + m_katakana[
"n'" ] + newkana );
299 if ( m_kana ==
"katakana" )
309 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter )
311 if ( m_kana ==
"hiragana" )
313 if ( text[ len - 1 ] ==
'n' )
315 setText( curKana + m_hiragana[
"n'" ] );
320 if ( text[ len - 1 ] ==
'N' )
322 setText( curKana + m_katakana[
"n'" ] );
327 KLineEdit::keyPressEvent( e );
333 if( action->text() ==
"Kana" )
337 if( action->text() ==
"English" )
343 #include "kromajiedit.moc"
KRomajiEdit(QWidget *parent, const char *name)
void keyPressEvent(QKeyEvent *e)
QMenu * createPopupMenu()