26 #include <QtCore/QTimer>
27 #include <QtGui/QLabel>
28 #include <QtGui/QWidget>
29 #include <QtGui/QWhatsThis>
33 #include <kaboutkdedialog_p.h>
48 #include <kswitchlanguagedialog_p.h>
54 #include <QX11EmbedWidget>
57 using namespace KDEPrivate;
59 class KHelpMenuPrivate
63 : mSwitchApplicationLanguage(0),
64 mActionsCreated(false),
65 mSwitchApplicationLanguageAction(0)
83 delete mSwitchApplicationLanguage;
90 KAboutKdeDialog *mAboutKDE;
92 KSwitchLanguageDialog *mSwitchApplicationLanguage;
101 KAction *mHandBookAction, *mWhatsThisAction;
102 QAction *mReportBugAction, *mSwitchApplicationLanguageAction, *mAboutAppAction, *mAboutKDEAction;
109 :
QObject(parent), d(new KHelpMenuPrivate)
111 d->mAboutAppText = aboutAppText;
112 d->mShowWhatsThis = showWhatsThis;
119 :
QObject(parent), d(new KHelpMenuPrivate)
121 d->mShowWhatsThis = showWhatsThis;
123 d->mAboutData = aboutData;
126 d->createActions(
this);
127 if (d->mHandBookAction)
128 actions->
addAction(d->mHandBookAction->objectName(), d->mHandBookAction);
129 if (d->mWhatsThisAction)
130 actions->
addAction(d->mWhatsThisAction->objectName(), d->mWhatsThisAction);
131 if (d->mReportBugAction)
132 actions->
addAction(d->mReportBugAction->objectName(), d->mReportBugAction);
133 if (d->mSwitchApplicationLanguageAction)
134 actions->
addAction(d->mSwitchApplicationLanguageAction->objectName(), d->mSwitchApplicationLanguageAction);
135 if (d->mAboutAppAction)
136 actions->
addAction(d->mAboutAppAction->objectName(), d->mAboutAppAction);
137 if (d->mAboutKDEAction)
138 actions->
addAction(d->mAboutKDEAction->objectName(), d->mAboutKDEAction);
147 void KHelpMenuPrivate::createActions(
KHelpMenu* q)
151 mActionsCreated =
true;
166 if((
KGlobal::dirs()->findAllResources(
"locale", QString::fromLatin1(
"*/entry.desktop"))).count() > 0) {
185 d->mMenu =
new KMenu();
186 connect( d->mMenu, SIGNAL(destroyed()),
this, SLOT(menuDestroyed()));
188 d->mMenu->setTitle(
i18n(
"&Help"));
190 d->createActions(
this);
192 bool need_separator =
false;
193 if (d->mHandBookAction) {
194 d->mMenu->addAction(d->mHandBookAction);
195 need_separator =
true;
198 if (d->mWhatsThisAction) {
199 d->mMenu->addAction(d->mWhatsThisAction);
200 need_separator =
true;
203 if (d->mReportBugAction) {
205 d->mMenu->addSeparator();
206 d->mMenu->addAction(d->mReportBugAction);
207 need_separator =
true;
210 if (d->mSwitchApplicationLanguageAction) {
212 d->mMenu->addSeparator();
213 d->mMenu->addAction(d->mSwitchApplicationLanguageAction);
214 need_separator =
true;
218 d->mMenu->addSeparator();
220 if (d->mAboutAppAction) {
221 d->mMenu->addAction(d->mAboutAppAction);
224 if (d->mAboutKDEAction) {
225 d->mMenu->addAction(d->mAboutKDEAction);
237 return d->mHandBookAction;
241 return d->mWhatsThisAction;
245 return d->mReportBugAction;
249 return d->mSwitchApplicationLanguageAction;
253 return d->mAboutAppAction;
257 return d->mAboutKDEAction;
276 else if (d->mAboutData)
281 connect( d->mAboutApp, SIGNAL(finished()),
this, SLOT(dialogFinished()) );
283 d->mAboutApp->show();
289 d->mAboutApp =
new KDialog( d->mParent, Qt::Dialog );
292 d->mAboutApp->setObjectName(
"about" );
296 connect( d->mAboutApp, SIGNAL(finished()),
this, SLOT(dialogFinished()) );
299 d->mAboutApp->setMainWidget( hbox );
306 label1->setPixmap( qApp->windowIcon().pixmap(size,size) );
308 label2->setText( d->mAboutAppText );
310 d->mAboutApp->show();
319 d->mAboutKDE =
new KAboutKdeDialog( d->mParent );
320 connect( d->mAboutKDE, SIGNAL(finished()),
this, SLOT(dialogFinished()) );
322 d->mAboutKDE->show();
330 d->mBugReport =
new KBugReport( d->mParent,
false, d->mAboutData );
331 connect( d->mBugReport, SIGNAL(finished()),
this,SLOT(dialogFinished()) );
333 d->mBugReport->show();
339 if ( !d->mSwitchApplicationLanguage )
341 d->mSwitchApplicationLanguage =
new KSwitchLanguageDialog( d->mParent );
342 connect( d->mSwitchApplicationLanguage, SIGNAL(finished()),
this, SLOT(dialogFinished()) );
344 d->mSwitchApplicationLanguage->show();
348 void KHelpMenu::dialogFinished()
350 QTimer::singleShot( 0,
this, SLOT(timerExpired()) );
354 void KHelpMenu::timerExpired()
356 if( d->mAboutKDE && !d->mAboutKDE->isVisible() )
358 delete d->mAboutKDE; d->mAboutKDE = 0;
361 if( d->mBugReport && !d->mBugReport->isVisible() )
363 delete d->mBugReport; d->mBugReport = 0;
366 if ( d->mSwitchApplicationLanguage && !d->mSwitchApplicationLanguage->isVisible() )
368 delete d->mSwitchApplicationLanguage; d->mSwitchApplicationLanguage = 0;
371 if( d->mAboutApp && !d->mAboutApp->isVisible() )
373 delete d->mAboutApp; d->mAboutApp = 0;
378 void KHelpMenu::menuDestroyed()
386 QWhatsThis::enterWhatsThisMode();
387 QWidget* w = QApplication::widgetAt( QCursor::pos() );
389 while ( w && !w->isTopLevel() && !qobject_cast<QX11EmbedWidget*>(w) )
390 w = w->parentWidget();
392 #warning how to enter whats this mode for a QX11EmbedWidget?
400 #include "khelpmenu.moc"