summaryrefslogtreecommitdiff
authorcniehaus <cniehaus>2003-01-04 12:57:25 (UTC)
committer cniehaus <cniehaus>2003-01-04 12:57:25 (UTC)
commit69f08fb67ec7e92c4b3c573d6a1ce374aaa97cee (patch) (unidiff)
treedba2a9fd1bcb38841227bda4b29fa625fc02169e
parent969924a9d896b70141758b734d898b4423dac357 (diff)
downloadopie-69f08fb67ec7e92c4b3c573d6a1ce374aaa97cee.zip
opie-69f08fb67ec7e92c4b3c573d6a1ce374aaa97cee.tar.gz
opie-69f08fb67ec7e92c4b3c573d6a1ce374aaa97cee.tar.bz2
- qWarning("emphty querysting");
+ qWarning("empty querysting"); - DingWidget *ding = new DingWidget( vbox , querystring , browser_top, browser_bottom, activated_name); + DingWidget *ding = new DingWidget( querystring , browser_top, browser_bottom, activated_name ); That with some more changes even works
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/odict/dingwidget.cpp4
-rw-r--r--noncore/apps/odict/dingwidget.h13
-rw-r--r--noncore/apps/odict/odict.cpp4
3 files changed, 9 insertions, 12 deletions
diff --git a/noncore/apps/odict/dingwidget.cpp b/noncore/apps/odict/dingwidget.cpp
index b69a803..6154d68 100644
--- a/noncore/apps/odict/dingwidget.cpp
+++ b/noncore/apps/odict/dingwidget.cpp
@@ -1,105 +1,105 @@
1/*************************************************************************** 1/***************************************************************************
2 application: : ODict 2 application: : ODict
3 3
4 begin : December 2002 4 begin : December 2002
5 copyright : ( C ) 2002, 2003 by Carsten Niehaus 5 copyright : ( C ) 2002, 2003 by Carsten Niehaus
6 email : cniehaus@handhelds.org 6 email : cniehaus@handhelds.org
7 **************************************************************************/ 7 **************************************************************************/
8 8
9/*************************************************************************** 9/***************************************************************************
10 * * 10 * *
11 * This program is free software; you can redistribute it and/or modify * 11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by * 12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or * 13 * the Free Software Foundation; either version 2 of the License, or *
14 * ( at your option ) any later version. * 14 * ( at your option ) any later version. *
15 * * 15 * *
16 **************************************************************************/ 16 **************************************************************************/
17#include "dingwidget.h" 17#include "dingwidget.h"
18 18
19#include <qfile.h> 19#include <qfile.h>
20#include <qpe/config.h> 20#include <qpe/config.h>
21#include <qhbox.h> 21#include <qhbox.h>
22#include <qlabel.h> 22#include <qlabel.h>
23#include <qpushbutton.h> 23#include <qpushbutton.h>
24#include <qlineedit.h> 24#include <qlineedit.h>
25#include <qmainwindow.h> 25#include <qmainwindow.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qtextstream.h> 27#include <qtextstream.h>
28#include <qstringlist.h> 28#include <qstringlist.h>
29#include <qregexp.h> 29#include <qregexp.h>
30#include <qtextbrowser.h> 30#include <qtextbrowser.h>
31#include <stdlib.h> // for getenv 31#include <stdlib.h> // for getenv
32 32
33DingWidget::DingWidget(QWidget *parent, QString word, QTextBrowser *browser_top, QTextBrowser *browser_bottom, QString activated_name) : QWidget(parent) 33DingWidget::DingWidget(QString word, QTextBrowser *browser_top, QTextBrowser *browser_bottom, QString activated_name)
34{ 34{
35 methodname = activated_name; 35 methodname = activated_name;
36 queryword = word; 36 queryword = word;
37 trenner = QString::null; 37 trenner = QString::null;
38 loadValues(); 38 loadValues();
39 QString opie_dir = getenv("OPIEDIR"); 39 QString opie_dir = getenv("OPIEDIR");
40 QFile file( opie_dir+"/noncore/apps/odict/eng_ita.dic" ); 40 QFile file( opie_dir+"/noncore/apps/odict/eng_ita.dic" );
41 QStringList lines; 41 QStringList lines;
42 42
43 if( file.open( IO_ReadOnly ) ) 43 if( file.open( IO_ReadOnly ) )
44 { 44 {
45 QTextStream stream( &file ); 45 QTextStream stream( &file );
46 while ( !stream.eof() ) 46 while ( !stream.eof() )
47 { 47 {
48 lines.append( stream.readLine() ); 48 lines.append( stream.readLine() );
49 } 49 }
50 file.close(); 50 file.close();
51 } 51 }
52 52
53 lines = lines.grep( queryword ); 53 lines = lines.grep( queryword );
54 54
55 QString top, bottom; 55 QString top, bottom;
56 //parseInfo( lines, top , bottom ); 56 parseInfo( lines, top , bottom );
57 browser_top->setText( top ); 57 browser_top->setText( top );
58 browser_bottom->setText( bottom ); 58 browser_bottom->setText( bottom );
59} 59}
60 60
61void DingWidget::loadValues() 61void DingWidget::loadValues()
62{ 62{
63 Config cfg( "odict" ); 63 Config cfg( "odict" );
64 cfg.setGroup( "Method_"+methodname ); 64 cfg.setGroup( "Method_"+methodname );
65 trenner = cfg.readEntry( "Seperator" ); 65 trenner = cfg.readEntry( "Seperator" );
66} 66}
67 67
68void DingWidget::parseInfo( QStringList &lines, QString &top, QString &bottom ) 68void DingWidget::parseInfo( QStringList &lines, QString &top, QString &bottom )
69{ 69{
70 70
71 QString current; 71 QString current;
72 QString left; 72 QString left;
73 QString right; 73 QString right;
74 QString html_header = "<html><table>"; 74 QString html_header = "<html><table>";
75 QString html_footer = "</table></html>"; 75 QString html_footer = "</table></html>";
76 QString html_table_left = "<tr><td width='50'>"; 76 QString html_table_left = "<tr><td width='50'>";
77 QString html_table_sep = "</td><td>"; 77 QString html_table_sep = "</td><td>";
78 QString html_table_right = "</td></tr>"; 78 QString html_table_right = "</td></tr>";
79 QRegExp reg_div( "\\" ); 79 QRegExp reg_div( "\\" );
80 //QRegExp reg_div( trenner ); 80 //QRegExp reg_div( trenner );
81 QRegExp reg_word( queryword ); 81 QRegExp reg_word( queryword );
82 //QString substitute = "<font color=red>"+queryword+"</font>"; 82 //QString substitute = "<font color=red>"+queryword+"</font>";
83 QString substitute = "<a href=''>"+queryword+"</a>"; 83 QString substitute = "<a href=''>"+queryword+"</a>";
84 QStringList toplist, bottomlist; 84 QStringList toplist, bottomlist;
85 for( QStringList::Iterator it = lines.begin() ; it != lines.end() ; ++it ) 85 for( QStringList::Iterator it = lines.begin() ; it != lines.end() ; ++it )
86 { 86 {
87 current = *it; 87 current = *it;
88 left = current.left( current.find(reg_div) ); 88 left = current.left( current.find(reg_div) );
89 right = current.right( current.length() - current.find(reg_div) - 1 ); 89 right = current.right( current.length() - current.find(reg_div) - 1 );
90 if ( left.contains( reg_word ) ) 90 if ( left.contains( reg_word ) )
91 { 91 {
92 left.replace( queryword, substitute ); 92 left.replace( queryword, substitute );
93 toplist.append( html_table_left + left + html_table_sep + right + html_table_right ); 93 toplist.append( html_table_left + left + html_table_sep + right + html_table_right );
94 } 94 }
95 else 95 else
96 { 96 {
97 right.replace( reg_word, substitute ); 97 right.replace( reg_word, substitute );
98 bottomlist.append( html_table_left + right + html_table_sep + left + html_table_right ); 98 bottomlist.append( html_table_left + right + html_table_sep + left + html_table_right );
99 } 99 }
100 } 100 }
101 101
102 //thats it, the lists are rendered. Lets put them in one string 102 //thats it, the lists are rendered. Lets put them in one string
103 bottom = html_header + bottomlist.join( "<br>" ) + html_footer; 103 bottom = html_header + bottomlist.join( "<br>" ) + html_footer;
104 top = html_header + toplist.join( "<br>" ) + html_footer; 104 top = html_header + toplist.join( "<br>" ) + html_footer;
105} 105}
diff --git a/noncore/apps/odict/dingwidget.h b/noncore/apps/odict/dingwidget.h
index 66379fe..1cedb4e 100644
--- a/noncore/apps/odict/dingwidget.h
+++ b/noncore/apps/odict/dingwidget.h
@@ -1,31 +1,28 @@
1/*************************************************************************** 1/***************************************************************************
2 * * 2 * *
3 * This program is free software; you can redistribute it and/or modify * 3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by * 4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or * 5 * the Free Software Foundation; either version 2 of the License, or *
6 * ( at your option ) any later version. * 6 * ( at your option ) any later version. *
7 * * 7 * *
8 **************************************************************************/ 8 **************************************************************************/
9 9
10#include <qwidget.h>
11
12class QString; 10class QString;
13class QTextBrowser; 11class QTextBrowser;
14class QString;
15class QStringList; 12class QStringList;
16 13
17class DingWidget : public QWidget 14#include <qstring.h>
15
16class DingWidget
18{ 17{
19 Q_OBJECT
20
21 public: 18 public:
22 DingWidget(QWidget *parent = 0, QString word = 0, QTextBrowser* = 0, QTextBrowser* =0, QString activated_name=0); 19 DingWidget(QString word = 0, QTextBrowser* = 0, QTextBrowser* =0, QString activated_name=0);
23 20
24 private: 21 private:
25 QString search_word; 22 QString search_word;
26 void parseInfo( QStringList& , QString&, QString& ); 23 void parseInfo( QStringList& , QString&, QString& );
27 QString queryword; 24 QString queryword;
28 void loadValues(); 25 void loadValues();
29 QString methodname; 26 QString methodname;
30 QString trenner; 27 QString trenner;
31}; 28};
diff --git a/noncore/apps/odict/odict.cpp b/noncore/apps/odict/odict.cpp
index e2d1d7b..1fbdb85 100644
--- a/noncore/apps/odict/odict.cpp
+++ b/noncore/apps/odict/odict.cpp
@@ -1,189 +1,189 @@
1/*************************************************************************** 1/***************************************************************************
2 application: : ODict 2 application: : ODict
3 3
4 begin : December 2002 4 begin : December 2002
5 copyright : ( C ) 2002, 2003 by Carsten Niehaus 5 copyright : ( C ) 2002, 2003 by Carsten Niehaus
6 email : cniehaus@handhelds.org 6 email : cniehaus@handhelds.org
7 **************************************************************************/ 7 **************************************************************************/
8 8
9/*************************************************************************** 9/***************************************************************************
10 * * 10 * *
11 * This program is free software; you can redistribute it and/or modify * 11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by * 12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or * 13 * the Free Software Foundation; either version 2 of the License, or *
14 * ( at your option ) any later version. * 14 * ( at your option ) any later version. *
15 * * 15 * *
16 **************************************************************************/ 16 **************************************************************************/
17#include "odict.h" 17#include "odict.h"
18#include "configdlg.h" 18#include "configdlg.h"
19#include "dingwidget.h" 19#include "dingwidget.h"
20 20
21#include <qlayout.h> 21#include <qlayout.h>
22#include <qpopupmenu.h> 22#include <qpopupmenu.h>
23#include <qmenubar.h> 23#include <qmenubar.h>
24#include <qmessagebox.h> 24#include <qmessagebox.h>
25#include <qpe/config.h> 25#include <qpe/config.h>
26#include <qhbox.h> 26#include <qhbox.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qlabel.h> 28#include <qlabel.h>
29#include <qpushbutton.h> 29#include <qpushbutton.h>
30#include <qlineedit.h> 30#include <qlineedit.h>
31#include <qmainwindow.h> 31#include <qmainwindow.h>
32#include <qstring.h> 32#include <qstring.h>
33#include <qaction.h> 33#include <qaction.h>
34#include <qtextbrowser.h> 34#include <qtextbrowser.h>
35#include <qcombobox.h> 35#include <qcombobox.h>
36 36
37#include <qpe/resource.h> 37#include <qpe/resource.h>
38 38
39 39
40ODict::ODict() : QMainWindow() 40ODict::ODict() : QMainWindow()
41{ 41{
42 42
43 activated_name = QString::null; 43 activated_name = QString::null;
44 vbox = new QVBox( this ); 44 vbox = new QVBox( this );
45 setCaption( tr( "OPIE-Dictionary" ) ); 45 setCaption( tr( "OPIE-Dictionary" ) );
46 setupMenus(); 46 setupMenus();
47 47
48 QHBox *hbox = new QHBox( vbox ); 48 QHBox *hbox = new QHBox( vbox );
49 QLabel* query_label = new QLabel( tr( "Query:" ) , hbox ); query_label->show(); 49 QLabel* query_label = new QLabel( tr( "Query:" ) , hbox ); query_label->show();
50 query_le = new QLineEdit( hbox ); 50 query_le = new QLineEdit( hbox );
51 query_co = new QComboBox( hbox ); 51 query_co = new QComboBox( hbox );
52 connect( query_co , SIGNAL( activated(int) ), this, SLOT( slotMethodChanged(int) ) ); 52 connect( query_co , SIGNAL( activated(int) ), this, SLOT( slotMethodChanged(int) ) );
53 ok_button = new QPushButton( tr( "&Ok" ), hbox ); 53 ok_button = new QPushButton( tr( "&Ok" ), hbox );
54 connect( ok_button, SIGNAL( released() ), this, SLOT( slotStartQuery() ) ); 54 connect( ok_button, SIGNAL( released() ), this, SLOT( slotStartQuery() ) );
55 browser_top = new QTextBrowser( vbox ); 55 browser_top = new QTextBrowser( vbox );
56 browser_bottom = new QTextBrowser( vbox ); 56 browser_bottom = new QTextBrowser( vbox );
57 57
58 loadConfig(); 58 loadConfig();
59 setCentralWidget( vbox ); 59 setCentralWidget( vbox );
60} 60}
61 61
62void ODict::loadConfig() 62void ODict::loadConfig()
63{ 63{
64 Config cfg ( "odict" ); 64 Config cfg ( "odict" );
65 cfg.setGroup( "generalsettings" ); 65 cfg.setGroup( "generalsettings" );
66 errorTol = cfg.readEntry( "errtol" ).toInt(); 66 errorTol = cfg.readEntry( "errtol" ).toInt();
67 casesens = cfg.readEntry( "casesens" ).toInt(); 67 casesens = cfg.readEntry( "casesens" ).toInt();
68 regexp = cfg.readEntry( "regexp" ).toInt(); 68 regexp = cfg.readEntry( "regexp" ).toInt();
69 completewords = cfg.readEntry( "completewords" ).toInt(); 69 completewords = cfg.readEntry( "completewords" ).toInt();
70 70
71 QStringList groupListCfg = cfg.groupList().grep( "Method_" ); 71 QStringList groupListCfg = cfg.groupList().grep( "Method_" );
72 for ( QStringList::Iterator it = groupListCfg.begin() ; it != groupListCfg.end() ; ++it ) 72 for ( QStringList::Iterator it = groupListCfg.begin() ; it != groupListCfg.end() ; ++it )
73 { 73 {
74 cfg.setGroup( *it ); 74 cfg.setGroup( *it );
75 query_co->insertItem( cfg.readEntry( "Name" ) ); 75 query_co->insertItem( cfg.readEntry( "Name" ) );
76 } 76 }
77} 77}
78 78
79 79
80void ODict::saveConfig() 80void ODict::saveConfig()
81{ 81{
82 Config cfg ( "odict" ); 82 Config cfg ( "odict" );
83 cfg.setGroup( "generalsettings" ); 83 cfg.setGroup( "generalsettings" );
84 cfg.writeEntry( "errtol" , errorTol ); 84 cfg.writeEntry( "errtol" , errorTol );
85 cfg.writeEntry( "casesens" , casesens ); 85 cfg.writeEntry( "casesens" , casesens );
86 cfg.writeEntry( "regexp" , regexp ); 86 cfg.writeEntry( "regexp" , regexp );
87 cfg.writeEntry( "completewords" , completewords ); 87 cfg.writeEntry( "completewords" , completewords );
88} 88}
89 89
90void ODict::slotDisplayAbout() 90void ODict::slotDisplayAbout()
91{ 91{
92 QMessageBox::about( this, tr( "About ODict" ), tr( "OPIE-Dictionary ODict \n (c) 2002, 2003 Carsten Niehaus \n cniehaus@handhelds.org \n Version 20030103" ) ); 92 QMessageBox::about( this, tr( "About ODict" ), tr( "OPIE-Dictionary ODict \n (c) 2002, 2003 Carsten Niehaus \n cniehaus@handhelds.org \n Version 20030103" ) );
93} 93}
94 94
95void ODict::slotStartQuery() 95void ODict::slotStartQuery()
96{ 96{
97 QString querystring = query_le->text(); 97 QString querystring = query_le->text();
98 qDebug("opening dict >%s< for >%s<", activated_name.latin1(),querystring.latin1()); 98 qDebug("opening dict >%s< for >%s<", activated_name.latin1(),querystring.latin1());
99 if (querystring.isEmpty()){ 99 if (querystring.isEmpty()){
100 qWarning("emphty querysting"); 100 qWarning("empty querysting");
101 return; 101 return;
102 } 102 }
103 if (!activated_name || activated_name.isEmpty()) 103 if (!activated_name || activated_name.isEmpty())
104 QMessageBox::warning(this,tr("No Dictionary"),tr("Please choose a dictonary") ); 104 QMessageBox::warning(this,tr("No Dictionary"),tr("Please choose a dictonary") );
105 else 105 else
106 DingWidget *ding = new DingWidget( vbox , querystring , browser_top, browser_bottom, activated_name); 106 DingWidget *ding = new DingWidget( querystring , browser_top, browser_bottom, activated_name );
107} 107}
108 108
109 109
110void ODict::slotSetErrorcount( int count ) 110void ODict::slotSetErrorcount( int count )
111{ 111{
112 errorTol = count; 112 errorTol = count;
113} 113}
114 114
115void ODict::slotSettings() 115void ODict::slotSettings()
116{ 116{
117 ConfigDlg dlg( this, "Config" , true); 117 ConfigDlg dlg( this, "Config" , true);
118 if ( dlg.exec() == QDialog::Accepted ) 118 if ( dlg.exec() == QDialog::Accepted )
119 dlg.writeEntries(); 119 dlg.writeEntries();
120 else qDebug( "abgebrochen" ); 120 else qDebug( "abgebrochen" );
121} 121}
122 122
123void ODict::slotSetParameter( int count ) 123void ODict::slotSetParameter( int count )
124{ 124{
125 if ( count == 0 ) 125 if ( count == 0 )
126 { 126 {
127 if ( casesens ) 127 if ( casesens )
128 casesens = false; 128 casesens = false;
129 else 129 else
130 casesens = true; 130 casesens = true;
131 } 131 }
132 132
133 if ( count == 1 ) 133 if ( count == 1 )
134 { 134 {
135 if ( completewords ) 135 if ( completewords )
136 completewords = false; 136 completewords = false;
137 else 137 else
138 completewords = true; 138 completewords = true;
139 } 139 }
140 if ( count == 2 ) 140 if ( count == 2 )
141 { 141 {
142 if ( regexp ) 142 if ( regexp )
143 regexp = false; 143 regexp = false;
144 else 144 else
145 regexp = true; 145 regexp = true;
146 } 146 }
147 else qWarning( "ERROR" ); 147 else qWarning( "ERROR" );
148} 148}
149 149
150void ODict::slotMethodChanged( int methodnumber ) 150void ODict::slotMethodChanged( int methodnumber )
151{ 151{
152 activated_name = query_co->currentText(); 152 activated_name = query_co->currentText();
153} 153}
154 154
155void ODict::setupMenus() 155void ODict::setupMenus()
156{ 156{
157 menu = new QMenuBar( this ); 157 menu = new QMenuBar( this );
158 158
159 settings = new QPopupMenu( menu ); 159 settings = new QPopupMenu( menu );
160 setting_a = new QAction(tr( "Config" ), Resource::loadPixmap( "today/config" ), QString::null, 0, this, 0 ); 160 setting_a = new QAction(tr( "Config" ), Resource::loadPixmap( "today/config" ), QString::null, 0, this, 0 );
161 connect( setting_a, SIGNAL( activated() ), this, SLOT( slotSettings() ) ); 161 connect( setting_a, SIGNAL( activated() ), this, SLOT( slotSettings() ) );
162 setting_a->addTo( settings ); 162 setting_a->addTo( settings );
163 setting_b = new QAction(tr( "Searchmethods" ), Resource::loadPixmap( "today/config" ), QString::null, 0, this, 0 ); 163 setting_b = new QAction(tr( "Searchmethods" ), Resource::loadPixmap( "today/config" ), QString::null, 0, this, 0 );
164 164
165 parameter = new QPopupMenu( menu ); 165 parameter = new QPopupMenu( menu );
166 connect( parameter, SIGNAL( activated( int ) ), this, SLOT( slotSetParameter( int ) ) ); 166 connect( parameter, SIGNAL( activated( int ) ), this, SLOT( slotSetParameter( int ) ) );
167 parameter->insertItem( tr( "C&ase sensitive" ), 0 ,0 ); 167 parameter->insertItem( tr( "C&ase sensitive" ), 0 ,0 );
168 parameter->insertItem( tr( "Only &complete Words" ), 1 , 1) ; 168 parameter->insertItem( tr( "Only &complete Words" ), 1 , 1) ;
169 parameter->insertItem( tr( "Allow &reg. expressions" ), 2 ); 169 parameter->insertItem( tr( "Allow &reg. expressions" ), 2 );
170 parameter->insertSeparator(); 170 parameter->insertSeparator();
171 error_tol_menu = new QPopupMenu( menu ); 171 error_tol_menu = new QPopupMenu( menu );
172 error_tol_menu->setCheckable( TRUE ); 172 error_tol_menu->setCheckable( TRUE );
173 connect( error_tol_menu, SIGNAL( activated( int ) ), this, SLOT( slotSetErrorcount( int ) ) ); 173 connect( error_tol_menu, SIGNAL( activated( int ) ), this, SLOT( slotSetErrorcount( int ) ) );
174 174
175 error_tol_menu->insertItem( tr( "0 Errors" ), 0 ); 175 error_tol_menu->insertItem( tr( "0 Errors" ), 0 );
176 error_tol_menu->insertItem( tr( "1 Errors" ), 1 ); 176 error_tol_menu->insertItem( tr( "1 Errors" ), 1 );
177 error_tol_menu->insertItem( tr( "2 Errors" ), 2 ); 177 error_tol_menu->insertItem( tr( "2 Errors" ), 2 );
178 error_tol_menu->insertItem( tr( "3 Errors" ), 3 ); 178 error_tol_menu->insertItem( tr( "3 Errors" ), 3 );
179 error_tol_menu->insertItem( tr( "4 Errors" ), 4 ); 179 error_tol_menu->insertItem( tr( "4 Errors" ), 4 );
180 error_tol_menu->insertItem( tr( "Until Hit" ), 5 ); 180 error_tol_menu->insertItem( tr( "Until Hit" ), 5 );
181 parameter->insertItem( tr( "&Error tolerance" ), error_tol_menu ); 181 parameter->insertItem( tr( "&Error tolerance" ), error_tol_menu );
182 182
183 help = new QPopupMenu( menu ); 183 help = new QPopupMenu( menu );
184 help->insertItem("&About",this,SLOT( slotDisplayAbout() )); 184 help->insertItem("&About",this,SLOT( slotDisplayAbout() ));
185 185
186 menu->insertItem( tr( "Settings" ) , settings ); 186 menu->insertItem( tr( "Settings" ) , settings );
187 menu->insertItem( tr( "Parameter" ) , parameter ); 187 menu->insertItem( tr( "Parameter" ) , parameter );
188 menu->insertItem( tr( "Help" ) , help ); 188 menu->insertItem( tr( "Help" ) , help );
189} 189}