summaryrefslogtreecommitdiff
path: root/inputmethods/handwriting
authorhash <hash>2002-11-27 09:53:25 (UTC)
committer hash <hash>2002-11-27 09:53:25 (UTC)
commit796b942cc070da91982689eb6e50b1e1e776c5ed (patch) (unidiff)
treee0c1733ca8f5fa9721af101f3db689c5cf0392dd /inputmethods/handwriting
parente52158d2f9e1fdc9766d991dc672729648d5a020 (diff)
downloadopie-796b942cc070da91982689eb6e50b1e1e776c5ed.zip
opie-796b942cc070da91982689eb6e50b1e1e776c5ed.tar.gz
opie-796b942cc070da91982689eb6e50b1e1e776c5ed.tar.bz2
now saving profiles works! yay!
Diffstat (limited to 'inputmethods/handwriting') (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/handwriting/qimpensetup.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/inputmethods/handwriting/qimpensetup.cpp b/inputmethods/handwriting/qimpensetup.cpp
index 10c136d..2441102 100644
--- a/inputmethods/handwriting/qimpensetup.cpp
+++ b/inputmethods/handwriting/qimpensetup.cpp
@@ -1,243 +1,250 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "qimpenwidget.h" 21#include "qimpenwidget.h"
22#include "qimpenprefbase.h" 22#include "qimpenprefbase.h"
23#include "qimpensetup.h" 23#include "qimpensetup.h"
24 24
25#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
26#include <qpe/config.h> 26#include <qpe/config.h>
27 27
28#include <qcombobox.h> 28#include <qcombobox.h>
29#include <qlistbox.h> 29#include <qlistbox.h>
30#include <qlabel.h> 30#include <qlabel.h>
31#include <qpushbutton.h> 31#include <qpushbutton.h>
32#include <qlayout.h> 32#include <qlayout.h>
33#include <qpixmap.h> 33#include <qpixmap.h>
34#include <qbuttongroup.h> 34#include <qbuttongroup.h>
35#include <qslider.h> 35#include <qslider.h>
36#include <qtabwidget.h> 36#include <qtabwidget.h>
37#include <qdir.h> 37#include <qdir.h>
38#include <qmessagebox.h> 38#include <qmessagebox.h>
39 39
40 40
41/* XPM */ 41/* XPM */
42static const char * const left_xpm[] = { 42static const char * const left_xpm[] = {
43"16 16 2 1", 43"16 16 2 1",
44 " c None", 44 " c None",
45 ".c #000000", 45 ".c #000000",
46" ", 46" ",
47" ", 47" ",
48" ", 48" ",
49" . ", 49" . ",
50" .. ", 50" .. ",
51" ... ", 51" ... ",
52" .... ", 52" .... ",
53" ..... ", 53" ..... ",
54" ...... ", 54" ...... ",
55" ..... ", 55" ..... ",
56" .... ", 56" .... ",
57" ... ", 57" ... ",
58" .. ", 58" .. ",
59" . ", 59" . ",
60" ", 60" ",
61" "}; 61" "};
62 62
63 63
64/* XPM */ 64/* XPM */
65static const char * const right_xpm[] = { 65static const char * const right_xpm[] = {
66"16 16 2 1", 66"16 16 2 1",
67 " c None", 67 " c None",
68 ".c #000000", 68 ".c #000000",
69" ", 69" ",
70" ", 70" ",
71" ", 71" ",
72" . ", 72" . ",
73" .. ", 73" .. ",
74" ... ", 74" ... ",
75" .... ", 75" .... ",
76" ..... ", 76" ..... ",
77" ...... ", 77" ...... ",
78" ..... ", 78" ..... ",
79" .... ", 79" .... ",
80" ... ", 80" ... ",
81" .. ", 81" .. ",
82" . ", 82" . ",
83" ", 83" ",
84" "}; 84" "};
85 85
86 86
87 87
88QIMPenSetup::QIMPenSetup( QIMPenProfile *p, QWidget *parent, 88QIMPenSetup::QIMPenSetup( QIMPenProfile *p, QWidget *parent,
89 const char *name, bool modal, int WFlags ) 89 const char *name, bool modal, int WFlags )
90 : QDialog( parent, name, modal, WFlags ), profileCombo(0), profile(p) 90 : QDialog( parent, name, modal, WFlags ), profileCombo(0), profile(p)
91{ 91{
92 setCaption( tr("Setup Handwriting Input") ); 92 setCaption( tr("Setup Handwriting Input") );
93 93
94 QVBoxLayout *vb = new QVBoxLayout( this ); 94 QVBoxLayout *vb = new QVBoxLayout( this );
95 95
96#if 0 96#define MULTIPROFILE
97#ifdef MULTIPROFILE
97 profileList.setAutoDelete( true ); 98 profileList.setAutoDelete( true );
98 QHBoxLayout *hb = new QHBoxLayout( vb ); 99 QHBoxLayout *hb = new QHBoxLayout( vb );
99 hb->setMargin( 6 ); 100 hb->setMargin( 6 );
100 QLabel *l = new QLabel( tr("Character Profile:"), this ); 101 QLabel *l = new QLabel( tr("Character Profile:"), this );
101 hb->addWidget( l ); 102 hb->addWidget( l );
102 profileCombo = new QComboBox( this ); 103 profileCombo = new QComboBox( this );
103 connect( profileCombo, SIGNAL(activated(const QString &)), 104 connect( profileCombo, SIGNAL(activated(const QString &)),
104 this, SLOT(selectProfile(const QString &)) ); 105 this, SLOT(selectProfile(const QString &)) );
105 hb->addWidget( profileCombo ); 106 hb->addWidget( profileCombo );
106 loadProfiles();
107#else 107#else
108 profileList.append( profile ); 108 profileList.append( profile );
109#endif 109#endif
110
111 qWarning("profiles: %d", profileList.count());
110 112
111 QTabWidget *tw = new QTabWidget( this ); 113 QTabWidget *tw = new QTabWidget( this );
112 vb->addWidget( tw ); 114 vb->addWidget( tw );
113 115
114 pref = new QIMPenPrefBase( this ); 116 pref = new QIMPenPrefBase( this );
115 tw->addTab( pref, tr("Preferences") ); 117 tw->addTab( pref, tr("Preferences") );
116 118
117 pref->inputStyle->setExclusive( TRUE ); 119 pref->inputStyle->setExclusive( TRUE );
118 120
119 style = profile->style() == QIMPenProfile::ToggleCases ? 1 : 0; 121 style = profile->style() == QIMPenProfile::ToggleCases ? 1 : 0;
120 pref->inputStyle->setButton( style ); 122 pref->inputStyle->setButton( style );
121 connect( pref->inputStyle, SIGNAL(clicked(int)), 123 connect( pref->inputStyle, SIGNAL(clicked(int)),
122 this, SLOT(styleClicked(int)) ); 124 this, SLOT(styleClicked(int)) );
123 pref->inputStyle->setEnabled( profile->canSelectStyle() ); 125 pref->inputStyle->setEnabled( profile->canSelectStyle() );
124 126
125 multiTimeout = profile->multiStrokeTimeout(); 127 multiTimeout = profile->multiStrokeTimeout();
126 pref->multiStrokeSlider->setValue( multiTimeout ); 128 pref->multiStrokeSlider->setValue( multiTimeout );
127 multiTimeoutChanged( multiTimeout ); 129 multiTimeoutChanged( multiTimeout );
128 connect( pref->multiStrokeSlider, SIGNAL(valueChanged(int)), 130 connect( pref->multiStrokeSlider, SIGNAL(valueChanged(int)),
129 this, SLOT(multiTimeoutChanged(int)) ); 131 this, SLOT(multiTimeoutChanged(int)) );
130 132
131 edit = new QIMPenEdit( p, tw ); 133 edit = new QIMPenEdit( p, tw );
132 tw->addTab( edit, tr("Customize") ); 134 tw->addTab( edit, tr("Customize") );
135#ifdef MULTIPROFILE
136 loadProfiles();
137#endif
138
133} 139}
134 140
135void QIMPenSetup::loadProfiles() 141void QIMPenSetup::loadProfiles()
136{ 142{
137 QString path = QPEApplication::qpeDir() + "etc/qimpen"; 143 QString path = QPEApplication::qpeDir() + "etc/qimpen";
138 QDir dir( path, "*.conf" ); 144 QDir dir( path, "*.conf" );
139 QStringList list = dir.entryList(); 145 QStringList list = dir.entryList();
140 QStringList::Iterator it; 146 QStringList::Iterator it;
141 for ( it = list.begin(); it != list.end(); ++it ) { 147 for ( it = list.begin(); it != list.end(); ++it ) {
142 QIMPenProfile *p = new QIMPenProfile( path + "/" + *it ); 148 QIMPenProfile *p = new QIMPenProfile( path + "/" + *it );
143 profileList.append( p ); 149 profileList.append( p );
144 profileCombo->insertItem( p->name() ); 150 profileCombo->insertItem( p->name() );
145 if ( p->name() == profile->name() ) { 151 if ( p->name() == profile->name() ) {
146 profileCombo->setCurrentItem( profileCombo->count()-1 ); 152 profileCombo->setCurrentItem( profileCombo->count()-1 );
147 profile = p; 153 profile = p;
154 edit->setProfile( profile );
148 } 155 }
149 } 156 }
150} 157}
151 158
152void QIMPenSetup::styleClicked( int id ) 159void QIMPenSetup::styleClicked( int id )
153{ 160{
154 style = id; 161 style = id;
155} 162}
156 163
157void QIMPenSetup::multiTimeoutChanged( int v ) 164void QIMPenSetup::multiTimeoutChanged( int v )
158{ 165{
159 multiTimeout = v; 166 multiTimeout = v;
160 pref->multiStrokeLabel->setText( tr("%1 ms").arg(v) ); 167 pref->multiStrokeLabel->setText( tr("%1 ms").arg(v) );
161} 168}
162 169
163void QIMPenSetup::selectProfile( const QString &p ) 170void QIMPenSetup::selectProfile( const QString &p )
164{ 171{
165 if ( p == profile->name() ) 172 if ( p == profile->name() )
166 return; 173 return;
167 174
168 profile->setStyle( style ? QIMPenProfile::ToggleCases : QIMPenProfile::BothCases ); 175 profile->setStyle( style ? QIMPenProfile::ToggleCases : QIMPenProfile::BothCases );
169 profile->setMultiStrokeTimeout( multiTimeout ); 176 profile->setMultiStrokeTimeout( multiTimeout );
170 177
171 for ( int i = 0; i < (int)profileList.count(); i++ ) { 178 for ( int i = 0; i < (int)profileList.count(); i++ ) {
172 if ( profileList.at(i)->name() == p ) { 179 if ( profileList.at(i)->name() == p ) {
173 profile = profileList.at(i); 180 profile = profileList.at(i);
174 style = profile->style() == QIMPenProfile::ToggleCases ? 1 : 0; 181 style = profile->style() == QIMPenProfile::ToggleCases ? 1 : 0;
175 pref->inputStyle->setButton( style ); 182 pref->inputStyle->setButton( style );
176 pref->inputStyle->setEnabled( profile->canSelectStyle() ); 183 pref->inputStyle->setEnabled( profile->canSelectStyle() );
177 multiTimeout = profile->multiStrokeTimeout(); 184 multiTimeout = profile->multiStrokeTimeout();
178 pref->multiStrokeSlider->setValue( multiTimeout ); 185 pref->multiStrokeSlider->setValue( multiTimeout );
179 multiTimeoutChanged( multiTimeout ); 186 multiTimeoutChanged( multiTimeout );
180 edit->setProfile( profile ); 187 edit->setProfile( profile );
181 break; 188 break;
182 } 189 }
183 } 190 }
184} 191}
185 192
186void QIMPenSetup::accept() 193void QIMPenSetup::accept()
187{ 194{
188 profile->setStyle( style ? QIMPenProfile::ToggleCases : QIMPenProfile::BothCases ); 195 profile->setStyle( style ? QIMPenProfile::ToggleCases : QIMPenProfile::BothCases );
189 profile->setMultiStrokeTimeout( multiTimeout ); 196 profile->setMultiStrokeTimeout( multiTimeout );
190 // Save current profile 197 // Save current profile
191 if ( profileCombo ) { 198 if ( profileCombo ) {
192 Config config( "handwriting" ); 199 Config config( "handwriting" );
193 config.setGroup( "Settings" ); 200 config.setGroup( "Settings" );
194 config.writeEntry( "Profile", profileCombo->currentText() ); 201 config.writeEntry( "Profile", profileCombo->currentText() );
195 } 202 }
196 // Save charsets 203 // Save charsets
197 bool ok = TRUE; 204 bool ok = TRUE;
198 for ( int i = 0; i < (int)profileList.count(); i++ ) { 205 for ( int i = 0; i < (int)profileList.count(); i++ ) {
199 QIMPenProfile *prof = profileList.at(i); 206 QIMPenProfile *prof = profileList.at(i);
200 QIMPenCharSetIterator it(prof->charSets()); 207 QIMPenCharSetIterator it(prof->charSets());
201 for ( ; it.current(); ++it ) { 208 for ( ; it.current(); ++it ) {
202 if ( !(it.current()->save( QIMPenCharSet::User )) ) { 209 if ( !(it.current()->save( QIMPenCharSet::User )) ) {
203 ok = FALSE; 210 ok = FALSE;
204 break; 211 break;
205 } 212 }
206 } 213 }
207 } 214 }
208 if ( !ok ) { 215 if ( !ok ) {
209 if ( QMessageBox::critical( 0, tr( "Out of space" ), 216 if ( QMessageBox::critical( 0, tr( "Out of space" ),
210 tr("Unable to save information.\n" 217 tr("Unable to save information.\n"
211 "Free up some space\n" 218 "Free up some space\n"
212 "and try again.\n" 219 "and try again.\n"
213 "\nQuit anyway?"), 220 "\nQuit anyway?"),
214 QMessageBox::Yes|QMessageBox::Escape, 221 QMessageBox::Yes|QMessageBox::Escape,
215 QMessageBox::No|QMessageBox::Default ) 222 QMessageBox::No|QMessageBox::Default )
216 != QMessageBox::No ) { 223 != QMessageBox::No ) {
217 QDialog::accept(); 224 QDialog::accept();
218 } 225 }
219 } else { 226 } else {
220 QDialog::accept(); 227 QDialog::accept();
221 } 228 }
222} 229}
223 230
224//--------------------------------------------------------------------------- 231//---------------------------------------------------------------------------
225 232
226QIMPenInputCharDlg::QIMPenInputCharDlg( QWidget *parent, const char *name, 233QIMPenInputCharDlg::QIMPenInputCharDlg( QWidget *parent, const char *name,
227 bool modal, int WFlags) 234 bool modal, int WFlags)
228 : QDialog( parent, name, modal, WFlags ) 235 : QDialog( parent, name, modal, WFlags )
229{ 236{
230 setCaption( tr("Enter new character") ); 237 setCaption( tr("Enter new character") );
231 uni = 0; 238 uni = 0;
232 239
233 QVBoxLayout *vb = new QVBoxLayout( this, 10 ); 240 QVBoxLayout *vb = new QVBoxLayout( this, 10 );
234 241
235 QHBoxLayout *hb = new QHBoxLayout(); 242 QHBoxLayout *hb = new QHBoxLayout();
236 vb->addLayout( hb ); 243 vb->addLayout( hb );
237 244
238 QLabel *label = new QLabel( tr("Character:"), this ); 245 QLabel *label = new QLabel( tr("Character:"), this );
239 hb->addWidget( label ); 246 hb->addWidget( label );
240 247
241 QComboBox *cb = new QComboBox( TRUE, this ); 248 QComboBox *cb = new QComboBox( TRUE, this );
242 connect( cb, SIGNAL(activated(int)), SLOT(setSpecial(int)) ); 249 connect( cb, SIGNAL(activated(int)), SLOT(setSpecial(int)) );
243 connect( cb, SIGNAL(textChanged(const QString &)), 250 connect( cb, SIGNAL(textChanged(const QString &)),
@@ -470,187 +477,188 @@ QIMPenChar *QIMPenEdit::findPrev()
470 477
471 return 0; 478 return 0;
472} 479}
473 480
474/*! 481/*!
475 Find the next character with the same code as the current one. 482 Find the next character with the same code as the current one.
476 returns 0 if there is no next character. 483 returns 0 if there is no next character.
477*/ 484*/
478QIMPenChar *QIMPenEdit::findNext() 485QIMPenChar *QIMPenEdit::findNext()
479{ 486{
480 if ( !currentChar ) 487 if ( !currentChar )
481 return 0; 488 return 0;
482 QIMPenCharIterator it( currentSet->characters() ); 489 QIMPenCharIterator it( currentSet->characters() );
483 bool found = FALSE; 490 bool found = FALSE;
484 for ( ; it.current(); ++it ) { 491 for ( ; it.current(); ++it ) {
485 if ( !found && it.current() == currentChar ) 492 if ( !found && it.current() == currentChar )
486 found = TRUE; 493 found = TRUE;
487 else if ( found && it.current()->character() == currentCode && 494 else if ( found && it.current()->character() == currentCode &&
488 !it.current()->testFlag( QIMPenChar::Deleted ) ) { 495 !it.current()->testFlag( QIMPenChar::Deleted ) ) {
489 return it.current(); 496 return it.current();
490 } 497 }
491 } 498 }
492 499
493 return 0; 500 return 0;
494} 501}
495 502
496void QIMPenEdit::setCurrentChar( QIMPenChar *pc ) 503void QIMPenEdit::setCurrentChar( QIMPenChar *pc )
497{ 504{
498 currentChar = pc; 505 currentChar = pc;
499 pw->showCharacter( currentChar ); 506 pw->showCharacter( currentChar );
500 if ( currentChar ) { 507 if ( currentChar ) {
501 prevBtn->setEnabled( findPrev() != 0 ); 508 prevBtn->setEnabled( findPrev() != 0 );
502 nextBtn->setEnabled( findNext() != 0 ); 509 nextBtn->setEnabled( findNext() != 0 );
503 } 510 }
504} 511}
505 512
506void QIMPenEdit::prevChar() 513void QIMPenEdit::prevChar()
507{ 514{
508 QIMPenChar *pc = findPrev(); 515 QIMPenChar *pc = findPrev();
509 if ( pc ) 516 if ( pc )
510 setCurrentChar( pc ); 517 setCurrentChar( pc );
511} 518}
512 519
513void QIMPenEdit::nextChar() 520void QIMPenEdit::nextChar()
514{ 521{
515 QIMPenChar *pc = findNext(); 522 QIMPenChar *pc = findNext();
516 if ( pc ) 523 if ( pc )
517 setCurrentChar( pc ); 524 setCurrentChar( pc );
518} 525}
519 526
520void QIMPenEdit::clearChar() 527void QIMPenEdit::clearChar()
521{ 528{
522 inputChar->clear(); 529 inputChar->clear();
523 pw->clear(); 530 pw->clear();
524 enableButtons(); 531 enableButtons();
525} 532}
526 533
527void QIMPenEdit::selectChar( int i ) 534void QIMPenEdit::selectChar( int i )
528{ 535{
529 currentChar = 0; 536 currentChar = 0;
530 currentCode = ((CharListItem *)charList->item(i))->code(); 537 currentCode = ((CharListItem *)charList->item(i))->code();
531 QIMPenCharIterator it(currentSet->characters() ); 538 QIMPenCharIterator it(currentSet->characters() );
532 for ( ; it.current(); ++it ) { 539 for ( ; it.current(); ++it ) {
533 if ( it.current()->character() == currentCode && 540 if ( it.current()->character() == currentCode &&
534 !it.current()->testFlag( QIMPenChar::Deleted ) ) { 541 !it.current()->testFlag( QIMPenChar::Deleted ) ) {
535 setCurrentChar( it.current() ); 542 setCurrentChar( it.current() );
536 break; 543 break;
537 } 544 }
538 } 545 }
539 if ( !it.current() ) 546 if ( !it.current() )
540 setCurrentChar( 0 ); 547 setCurrentChar( 0 );
541 inputChar->clear(); 548 inputChar->clear();
542} 549}
543 550
544void QIMPenEdit::selectCharSet( int i ) 551void QIMPenEdit::selectCharSet( int i )
545{ 552{
546 if ( currentSet ) 553 if ( currentSet )
547 pw->removeCharSet( 0 ); 554 pw->removeCharSet( 0 );
548 currentSet = profile->charSets().at( i ); 555 currentSet = profile->charSets().at( i );
549 fillCharList(); 556 fillCharList();
550 pw->insertCharSet( currentSet ); 557 pw->insertCharSet( currentSet );
551 inputChar->clear(); 558 inputChar->clear();
552 if ( charList->count() ) { 559 if ( charList->count() ) {
553 charList->setSelected( 0, TRUE ); 560 charList->setSelected( 0, TRUE );
554 selectChar(0); 561 selectChar(0);
555 } 562 }
556} 563}
557 564
558void QIMPenEdit::addChar() 565void QIMPenEdit::addChar()
559{ 566{
560 if ( !inputChar->isEmpty() ) { 567 if ( !inputChar->isEmpty() ) {
561 QIMPenChar *pc = new QIMPenChar( *inputChar ); 568 QIMPenChar *pc = new QIMPenChar( *inputChar );
562 pc->setCharacter( currentCode ); 569 pc->setCharacter( currentCode );
563 570
564 // User characters override all matching system characters. 571 // User characters override all matching system characters.
565 // Copy and mark deleted identical system characters. 572 // Copy and mark deleted identical system characters.
573
566 QIMPenCharIterator it(currentSet->characters() ); 574 QIMPenCharIterator it(currentSet->characters() );
567 QIMPenChar *sc = 0; 575 QIMPenChar *sc = 0;
568 while ( (sc = it.current()) != 0 ) { 576 while ( (sc = it.current()) != 0 ) {
569 ++it; 577 ++it;
570 if ( sc->character() == currentCode && 578 if ( sc->character() == currentCode &&
571 sc->testFlag( QIMPenChar::System ) && 579 sc->testFlag( QIMPenChar::System ) &&
572 !sc->testFlag( QIMPenChar::Deleted ) ) { 580 !sc->testFlag( QIMPenChar::Deleted ) ) {
573 QIMPenChar *cc = new QIMPenChar( *sc ); 581 QIMPenChar *cc = new QIMPenChar( *sc );
574 cc->clearFlag( QIMPenChar::System ); 582 cc->clearFlag( QIMPenChar::System );
575 currentSet->addChar( cc ); 583 currentSet->addChar( cc );
576 sc->setFlag( QIMPenChar::Deleted ); 584 sc->setFlag( QIMPenChar::Deleted );
577 } 585 }
578 } 586 }
579 587
580 currentSet->addChar( pc ); 588 currentSet->addChar( pc );
581 setCurrentChar( pc ); 589 setCurrentChar( pc );
582 inputChar->clear(); 590 inputChar->clear();
583 } 591 }
584} 592}
585 593
586void QIMPenEdit::addNewChar() 594void QIMPenEdit::addNewChar()
587{ 595{
588 if ( !inputChar->isEmpty() ) { 596 if ( !inputChar->isEmpty() ) {
589 QIMPenInputCharDlg dlg( 0, 0, TRUE ); 597 QIMPenInputCharDlg dlg( 0, 0, TRUE );
590 if ( dlg.exec() ) { 598 if ( dlg.exec() ) {
591 currentCode = dlg.unicode(); 599 currentCode = dlg.unicode();
592 addChar(); 600 addChar();
593 fillCharList(); 601 fillCharList();
594 for ( unsigned int i = 0; i < charList->count(); i++ ) { 602 for ( unsigned int i = 0; i < charList->count(); i++ ) {
595 CharListItem *li = (CharListItem *)charList->item(i); 603 CharListItem *li = (CharListItem *)charList->item(i);
596 if ( li->code() == dlg.unicode() ) { 604 if ( li->code() == dlg.unicode() ) {
597 charList->setSelected( i, TRUE ); 605 charList->setSelected( i, TRUE );
598 break; 606 break;
599 } 607 }
600 } 608 }
601 } 609 }
602 } 610 }
603} 611}
604 612
605void QIMPenEdit::removeChar() 613void QIMPenEdit::removeChar()
606{ 614{
607 if ( currentChar ) { 615 if ( currentChar ) {
608 QIMPenChar *pc = findPrev(); 616 QIMPenChar *pc = findPrev();
609 if ( !pc ) pc = findNext(); 617 if ( !pc ) pc = findNext();
610 if ( currentChar->testFlag( QIMPenChar::System ) ) 618 if ( currentChar->testFlag( QIMPenChar::System ) )
611 currentChar->setFlag( QIMPenChar::Deleted ); 619 currentChar->setFlag( QIMPenChar::Deleted );
612 else 620 else
613 currentSet->removeChar( currentChar ); 621 currentSet->removeChar( currentChar );
614 setCurrentChar( pc ); 622 setCurrentChar( pc );
615 } 623 }
616} 624}
617 625
618void QIMPenEdit::defaultChars() 626void QIMPenEdit::defaultChars()
619{ 627{
620 if ( currentCode ) { 628 if ( currentCode ) {
621 currentChar = 0; 629 currentChar = 0;
622 bool haveSystem = FALSE; 630 bool haveSystem = FALSE;
623 QIMPenCharIterator it(currentSet->characters() ); 631 QIMPenCharIterator it(currentSet->characters() );
624 for ( ; it.current(); ++it ) { 632 for ( ; it.current(); ++it ) {
625 if ( it.current()->character() == currentCode && 633 if ( it.current()->character() == currentCode &&
626 it.current()->testFlag( QIMPenChar::System ) ) { 634 it.current()->testFlag( QIMPenChar::System ) ) {
627 haveSystem = TRUE; 635 haveSystem = TRUE;
628 break; 636 break;
629 } 637 }
630 } 638 }
631 if ( haveSystem ) { 639 if ( haveSystem ) {
632 it.toFirst(); 640 it.toFirst();
633 while ( it.current() ) { 641 while ( it.current() ) {
634 QIMPenChar *pc = it.current(); 642 QIMPenChar *pc = it.current();
635 ++it; 643 ++it;
636 if ( pc->character() == currentCode ) { 644 if ( pc->character() == currentCode ) {
637 if ( pc->testFlag( QIMPenChar::System ) ) { 645 if ( pc->testFlag( QIMPenChar::System ) ) {
638 pc->clearFlag( QIMPenChar::Deleted ); 646 pc->clearFlag( QIMPenChar::Deleted );
639 if ( !currentChar ) 647 if ( !currentChar )
640 currentChar = pc; 648 currentChar = pc;
641 } else { 649 } else {
642 currentSet->removeChar( pc ); 650 currentSet->removeChar( pc );
643 } 651 }
644 } 652 }
645 } 653 }
646 setCurrentChar( currentChar ); 654 setCurrentChar( currentChar );
647 } 655 }
648 } 656 }
649} 657}
650 658
651void QIMPenEdit::newStroke( QIMPenStroke *st ) 659void QIMPenEdit::newStroke( QIMPenStroke *st )
652{ 660{
653 inputChar->addStroke( st ); 661 inputChar->addStroke( st );
654 enableButtons(); 662 enableButtons();
655} 663}
656 664