• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • kdeui
 

kdeui

  • kdeui
kbugreport.cpp
1 /* This file is part of the KDE project
2  Copyright (C) 1999 David Faure <faure@kde.org>
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License as published by the Free Software Foundation; either
7  version 2 of the License, or (at your option) any later version.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #include <tqhbuttongroup.h>
21 #include <tqpushbutton.h>
22 #include <tqlabel.h>
23 #include <tqlayout.h>
24 #include <tqmultilineedit.h>
25 #include <tqradiobutton.h>
26 #include <tqwhatsthis.h>
27 #include <tqregexp.h>
28 
29 #include <kaboutdata.h>
30 #include <kapplication.h>
31 #include <kconfig.h>
32 #include <kdebug.h>
33 #include <klineedit.h>
34 #include <klocale.h>
35 #include <kmessagebox.h>
36 #include <kprocess.h>
37 #include <kstandarddirs.h>
38 #include <kstdguiitem.h>
39 #include <kurl.h>
40 #include <kurllabel.h>
41 
42 #include "kbugreport.h"
43 
44 #include <stdio.h>
45 #include <pwd.h>
46 #include <unistd.h>
47 
48 #include <sys/utsname.h>
49 
50 #include "kdepackages.h"
51 #include <kcombobox.h>
52 #include <config.h>
53 #include <ktempfile.h>
54 #include <tqtextstream.h>
55 #include <tqfile.h>
56 
57 class KBugReportPrivate {
58 public:
59  KComboBox *appcombo;
60  TQString lastError;
61  TQString kde_version;
62  TQString appname;
63  TQString os;
64  TQPushButton *submitBugButton;
65  KURL url;
66 };
67 
68 KBugReport::KBugReport( TQWidget * parentw, bool modal, const KAboutData *aboutData )
69  : KDialogBase( Plain,
70  i18n("Submit Bug Report"),
71  Ok | Cancel,
72  Ok,
73  parentw,
74  "KBugReport",
75  modal, // modal
76  true // separator
77  )
78 {
79  d = new KBugReportPrivate;
80 
81  // Use supplied aboutdata, otherwise the one from the active instance
82  // otherwise the KGlobal one. _activeInstance should neved be 0L in theory.
83  m_aboutData = aboutData
84  ? aboutData
85  : ( KGlobal::_activeInstance ? KGlobal::_activeInstance->aboutData()
86  : KGlobal::instance()->aboutData() );
87  m_process = 0;
88  TQWidget * parent = plainPage();
89  d->submitBugButton = 0;
90 
91  //if ( m_aboutData->bugAddress() == TQString::fromLatin1("submit@bugs.trinitydesktop.org") )
92  //{
93  // // This is a core KDE application -> redirect to the web form
94  // Always redirect to the Web form for Trinity
95  d->submitBugButton = new TQPushButton( parent );
96  setButtonCancel( KStdGuiItem::close() );
97  //}
98 
99  TQLabel * tmpLabel;
100  TQVBoxLayout * lay = new TQVBoxLayout( parent, 0, spacingHint() );
101 
102  TQGridLayout *glay = new TQGridLayout( lay, 4, 3 );
103  glay->setColStretch( 1, 10 );
104  glay->setColStretch( 2, 10 );
105 
106  int row = 0;
107 
108  if ( !d->submitBugButton )
109  {
110  // From
111  TQString qwtstr = i18n( "Your email address. If incorrect, use the Configure Email button to change it" );
112  tmpLabel = new TQLabel( i18n("From:"), parent );
113  glay->addWidget( tmpLabel, row,0 );
114  TQWhatsThis::add( tmpLabel, qwtstr );
115  m_from = new TQLabel( parent );
116  glay->addWidget( m_from, row, 1 );
117  TQWhatsThis::add( m_from, qwtstr );
118 
119 
120  // Configure email button
121  m_configureEmail = new TQPushButton( i18n("Configure Email..."),
122  parent );
123  connect( m_configureEmail, TQT_SIGNAL( clicked() ), this,
124  TQT_SLOT( slotConfigureEmail() ) );
125  glay->addMultiCellWidget( m_configureEmail, 0, 2, 2, 2, (TQ_Alignment)(AlignTop|AlignRight) );
126 
127  // To
128  qwtstr = i18n( "The email address this bug report is sent to." );
129  tmpLabel = new TQLabel( i18n("To:"), parent );
130  glay->addWidget( tmpLabel, ++row,0 );
131  TQWhatsThis::add( tmpLabel, qwtstr );
132  tmpLabel = new TQLabel( m_aboutData->bugAddress(), parent );
133  glay->addWidget( tmpLabel, row, 1 );
134  TQWhatsThis::add( tmpLabel, qwtstr );
135 
136  setButtonOK( KGuiItem( i18n("&Send"), "mail_send", i18n( "Send bug report." ),
137  i18n( "Send this bug report to %1." ).arg( m_aboutData->bugAddress() ) ) );
138 
139  }
140  else
141  {
142  m_configureEmail = 0;
143  m_from = 0;
144  showButtonOK( false );
145  }
146 
147  // Program name
148  TQString qwtstr = i18n( "The application for which you wish to submit a bug report - if incorrect, please use the Report Bug menu item of the correct application" );
149  tmpLabel = new TQLabel( i18n("Application: "), parent );
150  glay->addWidget( tmpLabel, ++row, 0 );
151  TQWhatsThis::add( tmpLabel, qwtstr );
152  d->appcombo = new KComboBox( false, parent, "app");
153  TQWhatsThis::add( d->appcombo, qwtstr );
154  d->appcombo->insertStrList((const char**)packages);
155  connect(d->appcombo, TQT_SIGNAL(activated(int)), TQT_SLOT(appChanged(int)));
156  d->appname = TQString::fromLatin1( m_aboutData
157  ? m_aboutData->productName()
158  : tqApp->name() );
159  glay->addWidget( d->appcombo, row, 1 );
160  int index = 0;
161  for (; index < d->appcombo->count(); index++) {
162  if (d->appcombo->text(index) == d->appname) {
163  break;
164  }
165  }
166  if (index == d->appcombo->count()) { // not present
167  d->appcombo->insertItem(d->appname);
168  }
169  d->appcombo->setCurrentItem(index);
170 
171  TQWhatsThis::add( tmpLabel, qwtstr );
172 
173  // Version
174  qwtstr = i18n( "The version of this application - please make sure that no newer version is available before sending a bug report" );
175  tmpLabel = new TQLabel( i18n("Version:"), parent );
176  glay->addWidget( tmpLabel, ++row, 0 );
177  TQWhatsThis::add( tmpLabel, qwtstr );
178  if (m_aboutData)
179  m_strVersion = m_aboutData->version();
180  else
181  m_strVersion = i18n("no version set (programmer error!)");
182  d->kde_version = TQString::fromLatin1( KDE_VERSION_STRING );
183  d->kde_version += ", " + TQString::fromLatin1( KDE_DISTRIBUTION_TEXT );
184  if ( !d->submitBugButton )
185  m_strVersion += " " + d->kde_version;
186  m_version = new TQLabel( m_strVersion, parent );
187  //glay->addWidget( m_version, row, 1 );
188  glay->addMultiCellWidget( m_version, row, row, 1, 2 );
189  TQWhatsThis::add( m_version, qwtstr );
190 
191  tmpLabel = new TQLabel(i18n("OS:"), parent);
192  glay->addWidget( tmpLabel, ++row, 0 );
193 
194  struct utsname unameBuf;
195  uname( &unameBuf );
196  d->os = TQString::fromLatin1( unameBuf.sysname ) +
197  " (" + TQString::fromLatin1( unameBuf.machine ) + ") "
198  "release " + TQString::fromLatin1( unameBuf.release );
199 
200  tmpLabel = new TQLabel(d->os, parent);
201  glay->addMultiCellWidget( tmpLabel, row, row, 1, 2 );
202 
203  tmpLabel = new TQLabel(i18n("Compiler:"), parent);
204  glay->addWidget( tmpLabel, ++row, 0 );
205  tmpLabel = new TQLabel(TQString::fromLatin1(KDE_COMPILER_VERSION), parent);
206  glay->addMultiCellWidget( tmpLabel, row, row, 1, 2 );
207 
208  if ( !d->submitBugButton )
209  {
210  // Severity
211  m_bgSeverity = new TQHButtonGroup( i18n("Se&verity"), parent );
212  static const char * const sevNames[5] = { "critical", "grave", "normal", "wishlist", "i18n" };
213  const TQString sevTexts[5] = { i18n("Critical"), i18n("Grave"), i18n("normal severity","Normal"), i18n("Wishlist"), i18n("Translation") };
214 
215  for (int i = 0 ; i < 5 ; i++ )
216  {
217  // Store the severity string as the name
218  TQRadioButton *rb = new TQRadioButton( sevTexts[i], m_bgSeverity, sevNames[i] );
219  if (i==2) rb->setChecked(true); // default : "normal"
220  }
221 
222  lay->addWidget( m_bgSeverity );
223 
224  // Subject
225  TQHBoxLayout * hlay = new TQHBoxLayout( lay );
226  tmpLabel = new TQLabel( i18n("S&ubject: "), parent );
227  hlay->addWidget( tmpLabel );
228  m_subject = new KLineEdit( parent );
229  m_subject->setFocus();
230  tmpLabel->setBuddy(m_subject);
231  hlay->addWidget( m_subject );
232 
233  TQString text = i18n("Enter the text (in English if possible) that you wish to submit for the "
234  "bug report.\n"
235  "If you press \"Send\", a mail message will be sent to the maintainer of "
236  "this program.\n");
237  TQLabel * label = new TQLabel( parent, "label" );
238 
239  label->setText( text );
240  lay->addWidget( label );
241 
242  // The multiline-edit
243  m_lineedit = new TQMultiLineEdit( parent, TQMULTILINEEDIT_OBJECT_NAME_STRING );
244  m_lineedit->setMinimumHeight( 180 ); // make it big
245  m_lineedit->setWordWrap(TQMultiLineEdit::WidgetWidth);
246  lay->addWidget( m_lineedit, 10 /*stretch*/ );
247 
248  slotSetFrom();
249  } else {
250  // Point to the web form
251 
252  lay->addSpacing(10);
253  TQString text = i18n("Reporting bugs and requesting enhancements are maintained using the Bugzilla reporting system.\n"
254  "You'll need a login account and password to use the reporting system.\n"
255  "To control spam and rogue elements the login requires a valid email address.\n"
256  "Consider using any large email service if you want to avoid using your private email address.\n"
257  "\n"
258  "Selecting the button below opens your web browser to http://bugs.trinitydesktop.org,\n"
259  "where you will find the report form.\n"
260  "The information displayed above will be transferred to the reporting system.\n"
261  "Session cookies must be enabled to use the reporting system.\n"
262  "\n"
263  "Thank you for helping!");
264  TQLabel * label = new TQLabel( text, parent, "label");
265  lay->addWidget( label );
266  lay->addSpacing(10);
267 
268  updateURL();
269  d->submitBugButton->setText( i18n("&Launch Bug Report Wizard") );
270  d->submitBugButton->setSizePolicy(TQSizePolicy::Fixed,TQSizePolicy::Fixed);
271  lay->addWidget( d->submitBugButton );
272  lay->addSpacing(10);
273 
274  connect( d->submitBugButton, TQT_SIGNAL(clicked()),
275  this, TQT_SLOT(slotOk()));
276  }
277 }
278 
279 KBugReport::~KBugReport()
280 {
281  delete d;
282 }
283 
284 void KBugReport::updateURL()
285 {
286  KURL url ( "http://bugs.trinitydesktop.org/enter_bug.cgi" );
287  url.addQueryItem( "product", "TDE" );
288  url.addQueryItem( "op_sys", d->os );
289  url.addQueryItem( "cf_kde_compiler", KDE_COMPILER_VERSION );
290  url.addQueryItem( "cf_kde_version", d->kde_version );
291  url.addQueryItem( "cf_kde_appversion", m_strVersion );
292  url.addQueryItem( "cf_kde_package", d->appcombo->currentText() );
293  url.addQueryItem( "cf_kde_kbugreport", "1" );
294  d->url = url;
295 }
296 
297 void KBugReport::appChanged(int i)
298 {
299  TQString appName = d->appcombo->text(i);
300  int index = appName.find( '/' );
301  if ( index > 0 )
302  appName = appName.left( index );
303  kdDebug() << "appName " << appName << endl;
304 
305  if (d->appname == appName && m_aboutData)
306  m_strVersion = m_aboutData->version();
307  else
308  m_strVersion = i18n("unknown program name", "unknown");
309 
310  if ( !d->submitBugButton )
311  m_strVersion += d->kde_version;
312 
313  m_version->setText(m_strVersion);
314  if ( d->submitBugButton )
315  updateURL();
316 }
317 
318 void KBugReport::slotConfigureEmail()
319 {
320  if (m_process) return;
321  m_process = new KProcess;
322  *m_process << TQString::fromLatin1("kcmshell") << TQString::fromLatin1("kcm_useraccount");
323  connect(m_process, TQT_SIGNAL(processExited(KProcess *)), TQT_SLOT(slotSetFrom()));
324  if (!m_process->start())
325  {
326  kdDebug() << "Couldn't start kcmshell.." << endl;
327  delete m_process;
328  m_process = 0;
329  return;
330  }
331  m_configureEmail->setEnabled(false);
332 }
333 
334 void KBugReport::slotSetFrom()
335 {
336  delete m_process;
337  m_process = 0;
338  m_configureEmail->setEnabled(true);
339 
340  // ### KDE4: why oh why is KEmailSettings in kio?
341  KConfig emailConf( TQString::fromLatin1("emaildefaults") );
342 
343  // find out the default profile
344  emailConf.setGroup( TQString::fromLatin1("Defaults") );
345  TQString profile = TQString::fromLatin1("PROFILE_");
346  profile += emailConf.readEntry( TQString::fromLatin1("Profile"),
347  TQString::fromLatin1("Default") );
348 
349  emailConf.setGroup( profile );
350  TQString fromaddr = emailConf.readEntry( TQString::fromLatin1("EmailAddress") );
351  if (fromaddr.isEmpty()) {
352  struct passwd *p;
353  p = getpwuid(getuid());
354  fromaddr = TQString::fromLatin1(p->pw_name);
355  } else {
356  TQString name = emailConf.readEntry( TQString::fromLatin1("FullName"));
357  if (!name.isEmpty())
358  fromaddr = name + TQString::fromLatin1(" <") + fromaddr + TQString::fromLatin1(">");
359  }
360  m_from->setText( fromaddr );
361 }
362 
363 void KBugReport::slotUrlClicked(const TQString &urlText)
364 {
365  if ( kapp )
366  kapp->invokeBrowser( urlText );
367 
368  // When using the web form, a click can also close the window, as there's
369  // not much to do. It also gives the user a direct response to his click:
370  if ( d->submitBugButton )
371  KDialogBase::slotCancel();
372 }
373 
374 
375 void KBugReport::slotOk( void )
376 {
377  if ( d->submitBugButton ) {
378  if ( kapp )
379  kapp->invokeBrowser( d->url.url() );
380  return;
381  }
382 
383  if( m_lineedit->text().isEmpty() ||
384  m_subject->text().isEmpty() )
385  {
386  TQString msg = i18n("You must specify both a subject and a description "
387  "before the report can be sent.");
388  KMessageBox::error(this,msg);
389  return;
390  }
391 
392  switch ( m_bgSeverity->id( m_bgSeverity->selected() ) )
393  {
394  case 0: // critical
395  if ( KMessageBox::questionYesNo( this, i18n(
396  "<p>You chose the severity <b>Critical</b>. "
397  "Please note that this severity is intended only for bugs that</p>"
398  "<ul><li>break unrelated software on the system (or the whole system)</li>"
399  "<li>cause serious data loss</li>"
400  "<li>introduce a security hole on the system where the affected package is installed</li></ul>\n"
401  "<p>Does the bug you are reporting cause any of the above damage? "
402  "If it does not, please select a lower severity. Thank you!</p>" ),TQString::null,KStdGuiItem::cont(),KStdGuiItem::cancel() ) == KMessageBox::No )
403  return;
404  break;
405  case 1: // grave
406  if ( KMessageBox::questionYesNo( this, i18n(
407  "<p>You chose the severity <b>Grave</b>. "
408  "Please note that this severity is intended only for bugs that</p>"
409  "<ul><li>make the package in question unusable or mostly so</li>"
410  "<li>cause data loss</li>"
411  "<li>introduce a security hole allowing access to the accounts of users who use the affected package</li></ul>\n"
412  "<p>Does the bug you are reporting cause any of the above damage? "
413  "If it does not, please select a lower severity. Thank you!</p>" ),TQString::null,KStdGuiItem::cont(),KStdGuiItem::cancel() ) == KMessageBox::No )
414  return;
415  break;
416  }
417  if( !sendBugReport() )
418  {
419  TQString msg = i18n("Unable to send the bug report.\n"
420  "Please submit a bug report manually...\n"
421  "See http://bugs.trinitydesktop.org/ for instructions.");
422  KMessageBox::error(this, msg + "\n\n" + d->lastError);
423  return;
424  }
425 
426  KMessageBox::information(this,
427  i18n("Bug report sent, thank you for your input."));
428  accept();
429 }
430 
431 void KBugReport::slotCancel()
432 {
433  if( !d->submitBugButton && ( m_lineedit->edited() || m_subject->edited() ) )
434  {
435  int rc = KMessageBox::warningYesNo( this,
436  i18n( "Close and discard\nedited message?" ),
437  i18n( "Close Message" ), KStdGuiItem::discard(), KStdGuiItem::cont() );
438  if( rc == KMessageBox::No )
439  return;
440  }
441  KDialogBase::slotCancel();
442 }
443 
444 
445 TQString KBugReport::text() const
446 {
447  kdDebug() << m_bgSeverity->selected()->name() << endl;
448  // Prepend the pseudo-headers to the contents of the mail
449  TQString severity = TQString::fromLatin1(m_bgSeverity->selected()->name());
450  TQString appname = d->appcombo->currentText();
451  TQString os = TQString::fromLatin1("OS: %1 (%2)\n").
452  arg(KDE_COMPILING_OS).
453  arg(KDE_DISTRIBUTION_TEXT);
454  TQString bodyText;
455  for(int i = 0; i < m_lineedit->numLines(); i++)
456  {
457  TQString line = m_lineedit->textLine(i);
458  if (!line.endsWith("\n"))
459  line += '\n';
460  bodyText += line;
461  }
462 
463  if (severity == TQString::fromLatin1("i18n") && KGlobal::locale()->language() != KLocale::defaultLanguage()) {
464  // Case 1 : i18n bug
465  TQString package = TQString::fromLatin1("i18n_%1").arg(KGlobal::locale()->language());
466  package = package.replace(TQString::fromLatin1("_"), TQString::fromLatin1("-"));
467  return TQString::fromLatin1("Package: %1").arg(package) +
468  TQString::fromLatin1("\n"
469  "Application: %1\n"
470  // not really i18n's version, so better here IMHO
471  "Version: %2\n").arg(appname).arg(m_strVersion)+
472  os+TQString::fromLatin1("\n")+bodyText;
473  } else {
474  appname = appname.replace(TQString::fromLatin1("_"), TQString::fromLatin1("-"));
475  // Case 2 : normal bug
476  return TQString::fromLatin1("Package: %1\n"
477  "Version: %2\n"
478  "Severity: %3\n")
479  .arg(appname).arg(m_strVersion).arg(severity)+
480  TQString::fromLatin1("Compiler: %1\n").arg(KDE_COMPILER_VERSION)+
481  os+TQString::fromLatin1("\n")+bodyText;
482  }
483 }
484 
485 bool KBugReport::sendBugReport()
486 {
487  TQString recipient ( m_aboutData ?
488  m_aboutData->bugAddress() :
489  TQString::fromLatin1("submit@bugs.trinitydesktop.org") );
490 
491  TQString command;
492  command = locate("exe", "ksendbugmail");
493  if (command.isEmpty())
494  command = KStandardDirs::findExe( TQString::fromLatin1("ksendbugmail") );
495 
496  KTempFile outputfile;
497  outputfile.close();
498 
499  TQString subject = m_subject->text();
500  command += " --subject ";
501  command += KProcess::quote(subject);
502  command += " --recipient ";
503  command += KProcess::quote(recipient);
504  command += " > ";
505  command += KProcess::quote(outputfile.name());
506 
507  fflush(stdin);
508  fflush(stderr);
509 
510  FILE * fd = popen(TQFile::encodeName(command), "w");
511  if (!fd)
512  {
513  kdError() << "Unable to open a pipe to " << command << endl;
514  return false;
515  }
516 
517  TQString btext = text();
518  fwrite(btext.ascii(),btext.length(),1,fd);
519  fflush(fd);
520 
521  int error = pclose(fd);
522  kdDebug() << "exit status1 " << error << " " << (WIFEXITED(error)) << " " << WEXITSTATUS(error) << endl;
523 
524  if ((WIFEXITED(error)) && WEXITSTATUS(error) == 1) {
525  TQFile of(outputfile.name());
526  if (of.open(IO_ReadOnly )) {
527  TQTextStream is(&of);
528  is.setEncoding(TQTextStream::UnicodeUTF8);
529  TQString line;
530  while (!is.eof())
531  line = is.readLine();
532  d->lastError = line;
533  } else {
534  d->lastError = TQString::null;
535  }
536  outputfile.unlink();
537  return false;
538  }
539  outputfile.unlink();
540  return true;
541 }
542 
543 void KBugReport::virtual_hook( int id, void* data )
544 { KDialogBase::virtual_hook( id, data ); }
545 
546 #include "kbugreport.moc"
KMessageBox::error
static void error(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, int options=Notify)
Display an "Error" dialog.
Definition: kmessagebox.cpp:734
KURL
KProcess
locate
TQString locate(const char *type, const TQString &filename, const KInstance *instance=KGlobal::instance())
KGlobal::locale
static KLocale * locale()
KMessageBox::questionYesNo
static int questionYesNo(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const KGuiItem &buttonYes=KStdGuiItem::yes(), const KGuiItem &buttonNo=KStdGuiItem::no(), const TQString &dontAskAgainName=TQString::null, int options=Notify)
Display a simple "question" dialog.
Definition: kmessagebox.cpp:317
KBugReport::slotOk
virtual void slotOk(void)
OK has been clicked.
Definition: kbugreport.cpp:375
KBugReport::slotSetFrom
virtual void slotSetFrom()
Sets the "From" field from the e-mail configuration Called at creation time, but also after "Configur...
Definition: kbugreport.cpp:334
KBugReport::slotUrlClicked
virtual void slotUrlClicked(const TQString &)
The URL-Label "http://bugs.trinitydesktop.org/" was clicked.
Definition: kbugreport.cpp:363
KURL::addQueryItem
void addQueryItem(const TQString &_item, const TQString &_value, int encoding_hint=0)
KDialogBase::setButtonCancel
void setButtonCancel(const KGuiItem &item=KStdGuiItem::cancel())
Sets the appearance of the Cancel button.
Definition: kdialogbase.cpp:970
KLocale::language
TQString language() const
KDialogBase::showButtonOK
void showButtonOK(bool state)
Hide or display the OK button.
Definition: kdialogbase.cpp:876
kdError
kdbgstream kdError(int area=0)
KAboutData::productName
const char * productName() const
KInstance::aboutData
const KAboutData * aboutData() const
KStandardDirs::findExe
static TQString findExe(const TQString &appname, const TQString &pathstr=TQString::null, bool ignoreExecBit=false)
KBugReport::updateURL
void updateURL()
Update the url to match the current os, compiler, selected app, etc.
Definition: kbugreport.cpp:284
KBugReport::text
TQString text() const
A complete copy of the bug report.
Definition: kbugreport.cpp:445
KProcess::start
virtual bool start(RunMode runmode=NotifyOnExit, Communication comm=NoCommunication)
kdDebug
kdbgstream kdDebug(int area=0)
KStdGuiItem::cont
static KGuiItem cont()
Returns a "continue" item.
Definition: kstdguiitem.cpp:212
klocale.h
KBugReport::~KBugReport
virtual ~KBugReport()
Destructor.
Definition: kbugreport.cpp:279
KConfigBase::setGroup
void setGroup(const TQString &group)
KAboutData::version
TQString version() const
KDialogBase
A dialog base class with standard buttons and predefined layouts.
Definition: kdialogbase.h:191
KDialog::spacingHint
static int spacingHint()
Return the number of pixels you shall use between widgets inside a dialog according to the KDE standa...
Definition: kdialog.cpp:109
KBugReport::KBugReport
KBugReport(TQWidget *parent=0L, bool modal=true, const KAboutData *aboutData=0L)
Creates a bug-report dialog.
Definition: kbugreport.cpp:68
KGuiItem
An abstract class for GUI data such as ToolTip and Icon.
Definition: kguiitem.h:38
KMessageBox::information
static void information(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const TQString &dontShowAgainName=TQString::null, int options=Notify)
Display an "Information" dialog.
Definition: kmessagebox.cpp:883
KAboutData
KBugReport::appChanged
void appChanged(int)
Application combo selection changed (and was activated)
Definition: kbugreport.cpp:297
KGlobal::instance
static KInstance * instance()
KTempFile
KBugReport::slotConfigureEmail
virtual void slotConfigureEmail()
"Configure email" has been clicked - this calls kcmshell System/email
Definition: kbugreport.cpp:318
KDialogBase::plainPage
TQFrame * plainPage()
Retrieve the empty page when the predefined layout is used in Plain mode.
Definition: kdialogbase.cpp:420
KConfigBase::readEntry
TQString readEntry(const TQString &pKey, const TQString &aDefault=TQString::null) const
KDialogBase::slotCancel
virtual void slotCancel()
Activated when the Cancel button has been clicked.
Definition: kdialogbase.cpp:1215
KConfig
KProcess::quote
static TQString quote(const TQString &arg)
KLineEdit
An enhanced TQLineEdit widget for inputting text.
Definition: klineedit.h:145
KTempFile::unlink
void unlink()
KLocale::defaultLanguage
static TQString defaultLanguage()
KTempFile::name
TQString name() const
KTempFile::close
bool close()
KComboBox
An enhanced combo box.
Definition: kcombobox.h:151
KDialogBase::setButtonOK
void setButtonOK(const KGuiItem &item=KStdGuiItem::ok())
Sets the appearance of the OK button.
Definition: kdialogbase.cpp:916
KBugReport::sendBugReport
bool sendBugReport()
Attempt to e-mail the bug report.
Definition: kbugreport.cpp:485
KAboutData::bugAddress
TQString bugAddress() const
endl
kndbgstream & endl(kndbgstream &s)
KBugReport::slotCancel
virtual void slotCancel()
Cancel has been clicked.
Definition: kbugreport.cpp:431
KMessageBox::warningYesNo
static int warningYesNo(TQWidget *parent, const TQString &text, const TQString &caption=TQString::null, const KGuiItem &buttonYes=KStdGuiItem::yes(), const KGuiItem &buttonNo=KStdGuiItem::no(), const TQString &dontAskAgainName=TQString::null, int options=Notify|Dangerous)
Display a "warning" dialog.
Definition: kmessagebox.cpp:505

kdeui

Skip menu "kdeui"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdeui

Skip menu "kdeui"
  • arts
  • dcop
  • dnssd
  • interfaces
  •     interface
  •     library
  •   kspeech
  •   ktexteditor
  • kabc
  • kate
  • kcmshell
  • kdecore
  • kded
  • kdefx
  • kdeprint
  • kdesu
  • kdeui
  • kdoctools
  • khtml
  • kimgio
  • kinit
  • kio
  •   bookmarks
  •   httpfilter
  •   kfile
  •   kio
  •   kioexec
  •   kpasswdserver
  •   kssl
  • kioslave
  •   http
  • kjs
  • kmdi
  •   kmdi
  • knewstuff
  • kparts
  • krandr
  • kresources
  • kspell2
  • kunittest
  • kutils
  • kwallet
  • libkmid
  • libkscreensaver
Generated for kdeui by doxygen 1.8.13
This website is maintained by Timothy Pearson.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. |