• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

Kross

  • sources
  • kde-4.14
  • kdelibs
  • kross
  • modules
form.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * form.cpp
3  * This file is part of the KDE project
4  * copyright (C)2006-2007 by Sebastian Sauer (mail@dipe.org)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Library General Public License for more details.
14  * You should have received a copy of the GNU Library General Public License
15  * along with this program; see the file COPYING. 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 "form.h"
21 
22 #include <QtCore/QByteRef>
23 #include <QtCore/QBuffer>
24 #include <QtCore/QRegExp>
25 #include <QtCore/QFile>
26 #include <QtCore/QArgument>
27 #include <QtCore/QMetaEnum>
28 #include <QtGui/QKeyEvent>
29 #include <QtGui/QDialog>
30 #include <QtGui/QBoxLayout>
31 #include <QtGui/QStackedLayout>
32 #include <QtGui/QSizePolicy>
33 #include <QtGui/QApplication>
34 #include <QtGui/QProgressBar>
35 //#include <QtGui/QProgressDialog>
36 #include <QtGui/QTextBrowser>
37 #include <QUiLoader>
38 #include <QTextCursor>
39 #include <QTextBlock>
40 
41 #include <kdebug.h>
42 #include <klocale.h>
43 #include <kurl.h>
44 #include <kpushbutton.h>
45 //#include <kurlcombobox.h>
46 //#include <kdiroperator.h>
47 //#include <kshell.h>
48 #include <kicon.h>
49 #include <kaction.h>
50 #include <kactioncollection.h>
51 #include <kmessagebox.h>
52 #include <kpluginloader.h>
53 #include <kpluginfactory.h>
54 #include <kparts/part.h>
55 //#include <kio/netaccess.h>
56 //#include <klocale.h>
57 //#include <kmimetype.h>
58 //#include <kstandarddirs.h>
59 #include <kfilewidget.h>
60 #include <kurlcombobox.h>
61 #include <kshell.h>
62 #include <widgets/ksqueezedtextlabel.h>
63 
64 extern "C"
65 {
66  KDE_EXPORT QObject* krossmodule()
67  {
68  return new Kross::FormModule();
69  }
70 }
71 
72 using namespace Kross;
73 
74 /*********************************************************************************
75  * FormList
76  */
77 
78 FormListView::FormListView(QWidget* parent) : QListWidget(parent) {}
79 FormListView::~FormListView() {}
80 void FormListView::clear() { QListWidget::clear(); }
81 void FormListView::remove(int index) { delete QListWidget::item(index); }
82 void FormListView::addItem(const QString& text) { QListWidget::addItem(text); }
83 int FormListView::count() { return QListWidget::count(); }
84 int FormListView::current() { return QListWidget::currentRow(); }
85 void FormListView::setCurrent(int row) { QListWidget::setCurrentRow(row); }
86 QString FormListView::text(int row) {
87  QListWidgetItem *item = QListWidget::item(row);
88  return item ? item->text() : QString();
89 }
90 
91 /*********************************************************************************
92  * FormFileWidget
93  */
94 
95 namespace Kross {
96 
98  class FormFileWidget::Private
99  {
100  public:
101  KFileWidget* filewidget;
102  QString filename;
103  };
104 
105 }
106 
107 FormFileWidget::FormFileWidget(QWidget* parent, const QString& startDirOrVariable)
108  : QWidget(parent), d(new Private())
109 {
110  QVBoxLayout* layout = new QVBoxLayout(this);
111  layout->setSpacing(0);
112  layout->setMargin(0);
113  setLayout(layout);
114 
115  d->filewidget = new KFileWidget(KUrl(startDirOrVariable), this);
116  layout->addWidget( d->filewidget );
117  //QMetaObject::invokeMethod(d->filewidget, "toggleSpeedbar", Q_ARG(bool,false));
118  //KFileDialog::setMode( KFile::File | KFile::LocalOnly );
119 
120  // slotOk() emits accepted, accept() emits fileSelected()
121  QObject::connect(d->filewidget, SIGNAL(fileSelected(QString)), this, SLOT(slotFileSelected(QString)));
122 
123  QObject::connect(d->filewidget, SIGNAL(fileSelected(QString)), this, SIGNAL(fileSelected(QString)));
124  QObject::connect(d->filewidget, SIGNAL(fileHighlighted(QString)), this, SIGNAL(fileHighlighted(QString)));
125  QObject::connect(d->filewidget, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged()));
126  QObject::connect(d->filewidget, SIGNAL(filterChanged(QString)), this, SIGNAL(filterChanged(QString)));
127 
128 // d->impl->setOperationMode(d->mode);
129 // if( d->mimeFilter.count() > 0 )
130 // d->impl->setMimeFilter(d->mimeFilter);
131 // else if( ! d->filter.isEmpty() )
132 // d->impl->setFilter(d->filter);
133 
134  if( parent && parent->layout() )
135  parent->layout()->addWidget(this);
136  setMinimumSize( QSize(480,360) );
137 }
138 
139 FormFileWidget::~FormFileWidget()
140 {
141  delete d;
142 }
143 
144 void FormFileWidget::setMode(const QString& mode)
145 {
146  QMetaEnum e = metaObject()->enumerator( metaObject()->indexOfEnumerator("Mode") );
147  KFileWidget::OperationMode m = (KFileWidget::OperationMode) e.keysToValue( mode.toLatin1() );
148  d->filewidget->setOperationMode(m);
149 }
150 
151 QString FormFileWidget::currentFilter() const
152 {
153  return d->filewidget->currentFilter();
154 }
155 
156 void FormFileWidget::setFilter(const QString &filter)
157 {
158  QString f = filter;
159  f.replace(QRegExp("([^\\\\]{1,1})/"), "\\1\\/"); // escape '/' chars else KFileDialog assumes they are mimetypes :-/
160  d->filewidget->setFilter(f);
161 }
162 
163 QString FormFileWidget::currentMimeFilter() const
164 {
165  return d->filewidget->currentMimeFilter();
166 }
167 
168 void FormFileWidget::setMimeFilter(const QStringList& filter)
169 {
170  d->filewidget->setMimeFilter(filter);
171 }
172 
173 void FormFileWidget::slotFileSelected( const QString & fn )
174 {
175  //kDebug()<<fn;
176  d->filename = fn;
177 }
178 
179 QString FormFileWidget::selectedFile() const
180 {
181  if ( d->filewidget->operationMode() != KFileWidget::Saving ) {
182  d->filewidget->accept();
183  } else {
184  //kDebug()<<d->filename<<d->filewidget->operationMode();
185  if ( d->filename.isEmpty() ) {
186  // make KFileWidget create an url for us (including extension if necessary)
187  QObject::connect(d->filewidget, SIGNAL(accepted()), d->filewidget, SLOT(accept()));
188  d->filewidget->slotOk();
189  QObject::disconnect(d->filewidget, SIGNAL(accepted()), d->filewidget, SLOT(accept()));
190  }
191  }
192  //kDebug()<<d->filename;
193  KUrl url( d->filename );
194  return url.path(); // strip file:// at least python chokes on it
195 }
196 
197 /*********************************************************************************
198  * FormProgressDialog
199  */
200 
201 namespace Kross {
203  class FormProgressDialog::Private
204  {
205  public:
206  QTextBrowser* browser;
207  QProgressBar* bar;
208  bool gotCanceled;
209  QTime time;
210  void update() {
211  if( time.elapsed() >= 1000 ) {
212  time.restart();
213  qApp->processEvents();
214  }
215  }
216  };
217 }
218 
219 FormProgressDialog::FormProgressDialog(const QString& caption, const QString& labelText) : KPageDialog(), d(new Private)
220 {
221  d->gotCanceled = false;
222  d->time.start();
223 
224  setCaption(caption);
225  KDialog::setButtons(KDialog::Ok|KDialog::Cancel);
226  setFaceType(KPageDialog::Plain);
227  enableButton(KDialog::Ok, false);
228  //setWindowModality(Qt::WindowModal);
229  setModal(false); //true);
230  setMinimumWidth(540);
231  setMinimumHeight(400);
232 
233  QWidget* widget = new QWidget( mainWidget() );
234  KPageWidgetItem* item = KPageDialog::addPage(widget, QString());
235  item->setHeader(labelText);
236  //item->setIcon( KIcon(iconname) );
237  widget = item->widget();
238  QVBoxLayout* layout = new QVBoxLayout(widget);
239  layout->setMargin(0);
240  widget->setLayout(layout);
241 
242  d->browser = new QTextBrowser(this);
243  d->browser->setHtml(labelText);
244  layout->addWidget(d->browser);
245 
246  d->bar = new QProgressBar(this);
247  //d->bar->setFormat("%v");
248  d->bar->setVisible(false);
249  layout->addWidget(d->bar);
250 
251  setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding) );
252  show();
253  qApp->processEvents();
254 }
255 
256 FormProgressDialog::~FormProgressDialog()
257 {
258  delete d;
259 }
260 
261 void FormProgressDialog::setValue(int progress)
262 {
263  if( progress < 0 ) {
264  if( d->bar->isVisible() ) {
265  d->bar->setVisible(false);
266  d->bar->setValue(0);
267  qApp->processEvents();
268  }
269  return;
270  }
271  if( ! d->bar->isVisible() )
272  d->bar->setVisible(true);
273  d->bar->setValue(progress);
274  d->update();
275 }
276 
277 void FormProgressDialog::setRange(int minimum, int maximum)
278 {
279  d->bar->setRange(minimum, maximum);
280 }
281 
282 void FormProgressDialog::setText(const QString& text)
283 {
284  d->browser->setHtml(text);
285  d->update();
286 }
287 
288 void FormProgressDialog::addText(const QString& text)
289 {
290  QTextCursor cursor( d->browser->document()->end() );
291  cursor.movePosition(QTextCursor::End);
292  cursor.insertBlock();
293  cursor.insertHtml(text);
294  d->browser->moveCursor(QTextCursor::End);
295  d->browser->ensureCursorVisible();
296  d->update();
297 }
298 
299 void FormProgressDialog::done(int r)
300 {
301  if( r == Rejected && ! d->gotCanceled ) {
302  if( KMessageBox::messageBox(this, KMessageBox::WarningContinueCancel, i18n("Cancel?")) == KMessageBox::Continue ) {
303  d->gotCanceled = true;
304  enableButton(KDialog::Cancel, false);
305  emit canceled();
306  }
307  return;
308  }
309  KPageDialog::done(r);
310 }
311 
312 int FormProgressDialog::exec()
313 {
314  enableButton(KDialog::Ok, true);
315  enableButton(KDialog::Cancel, false);
316  if( d->bar->isVisible() )
317  d->bar->setValue( d->bar->maximum() );
318  return KDialog::exec();
319 }
320 
321 bool FormProgressDialog::isCanceled()
322 {
323  return d->gotCanceled;
324 }
325 
326 /*********************************************************************************
327  * FormDialog
328  */
329 
330 namespace Kross {
331 
333  class FormDialog::Private
334  {
335  public:
336  KDialog::ButtonCode buttoncode;
337  QHash<QString, KPageWidgetItem*> items;
338  };
339 
340 }
341 
342 FormDialog::FormDialog(const QString& caption)
343  : KPageDialog( /*0, Qt::WShowModal | Qt::WDestructiveClose*/ )
344  , d( new Private() )
345 {
346  setCaption(caption);
347  KDialog::setButtons(KDialog::Ok);
348  setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding) );
349 
350  connect(this, SIGNAL(currentPageChanged(KPageWidgetItem*,KPageWidgetItem*)),
351  this, SLOT(slotCurrentPageChanged(KPageWidgetItem*)));
352 }
353 
354 FormDialog::~FormDialog()
355 {
356  kWarning()<<"dtor";
357  delete d;
358 }
359 
360 bool FormDialog::setButtons(const QString& buttons)
361 {
362  int i = metaObject()->indexOfEnumerator("ButtonCode");
363  Q_ASSERT( i >= 0 );
364  QMetaEnum e = metaObject()->enumerator(i);
365  int v = e.keysToValue( buttons.toUtf8() );
366  if( v < 0 )
367  return false;
368  KDialog::setButtons( (KDialog::ButtonCode) v );
369  return true;
370 }
371 
372 bool FormDialog::setButtonText(const QString& button, const QString& text)
373 {
374  int i = metaObject()->indexOfEnumerator("ButtonCode");
375  Q_ASSERT( i >= 0 );
376  QMetaEnum e = metaObject()->enumerator(i);
377  int v = e.keysToValue( button.toUtf8() );
378  if( v < 0 )
379  return false;
380  KDialog::setButtonText( (KDialog::ButtonCode) v, text);
381  return true;
382 }
383 
384 bool FormDialog::setFaceType(const QString& facetype)
385 {
386  int i = KPageView::staticMetaObject.indexOfEnumerator("FaceType");
387  Q_ASSERT( i >= 0 );
388  QMetaEnum e = KPageView::staticMetaObject.enumerator(i);
389  int v = e.keysToValue( facetype.toUtf8() );
390  if( v < 0 )
391  return false;
392  KPageDialog::setFaceType( (KPageDialog::FaceType) v );
393  return true;
394 }
395 
396 QString FormDialog::currentPage() const
397 {
398  KPageWidgetItem* item = KPageDialog::currentPage();
399  return item ? item->name() : QString();
400 }
401 
402 bool FormDialog::setCurrentPage(const QString& name)
403 {
404  if( ! d->items.contains(name) )
405  return false;
406  KPageDialog::setCurrentPage( d->items[name] );
407  return true;
408 }
409 
410 QWidget* FormDialog::page(const QString& name) const
411 {
412  return d->items.contains(name) ? d->items[name]->widget() : 0;
413 }
414 
415 //shared by FormDialog and FormAssistant
416 static KPageWidgetItem* formAddPage(KPageDialog* dialog, const QString& name, const QString& header, const QString& iconname)
417 {
418  QWidget* widget = new QWidget( dialog->mainWidget() );
419  QVBoxLayout* boxlayout = new QVBoxLayout(widget);
420  boxlayout->setSpacing(0);
421  boxlayout->setMargin(0);
422  widget->setLayout(boxlayout);
423 
424  KPageWidgetItem* item = dialog->addPage(widget, name);
425  item->setHeader(header.isNull() ? name : header);
426  if( ! iconname.isEmpty() )
427  item->setIcon( KIcon(iconname) );
428  //d->items.insert(name, item);
429 
430  return item;
431 }
432 
433 QWidget* FormDialog::addPage(const QString& name, const QString& header, const QString& iconname)
434 {
435  return d->items.insert(name, formAddPage((KPageDialog*)this,name,header,iconname)).value()->widget();
436 }
437 
438 void FormDialog::setMainWidget(QWidget *newMainWidget)
439 {
440  KDialog::setMainWidget(newMainWidget);
441 }
442 
443 QString FormDialog::result()
444 {
445  int i = metaObject()->indexOfEnumerator("ButtonCode");
446  if( i < 0 ) {
447  kWarning() << "Kross::FormDialog::setButtons No such enumerator \"ButtonCode\"";
448  return QString();
449  }
450  QMetaEnum e = metaObject()->enumerator(i);
451  return e.valueToKey(d->buttoncode);
452 }
453 
454 void FormDialog::slotButtonClicked(int button)
455 {
456  d->buttoncode = (KDialog::ButtonCode) button;
457  KDialog::slotButtonClicked(button);
458 }
459 
460 void FormDialog::slotCurrentPageChanged(KPageWidgetItem* current)
461 {
462  Q_UNUSED(current);
463  //kDebug() << "FormDialog::slotCurrentPageChanged current=" << current->name();
464  //foreach(QWidget* widget, current->widget()->findChildren< QWidget* >("")) widget->setFocus();
465 }
466 
467 
468 namespace Kross {
470  class FormAssistant::Private
471  {
472  public:
473  KDialog::ButtonCode buttoncode;
474  QHash<QString, KPageWidgetItem*> items;
475  };
476 }
477 FormAssistant::FormAssistant(const QString& caption)
478  : KAssistantDialog( /*0, Qt::WShowModal | Qt::WDestructiveClose*/ )
479  , d( new Private() )
480 {
481  setCaption(caption);
482  setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding) );
483 
484  connect(this, SIGNAL(currentPageChanged(KPageWidgetItem*,KPageWidgetItem*)),
485  this, SLOT(slotCurrentPageChanged(KPageWidgetItem*)));
486  /* unlike boost qt does not support defining of slot call order!
487  connect(this, SIGNAL(user2Clicked()), this, SIGNAL (nextClicked()));
488  connect(this, SIGNAL(user3Clicked()), this, SIGNAL (backClicked()));
489  */
490 }
491 
492 FormAssistant::~FormAssistant()
493 {
494  delete d;
495 }
496 
497 void FormAssistant::showHelpButton(bool show)
498 {
499  showButton(KDialog::Help, show);
500 }
501 
502 void FormAssistant::back()
503 {
504  emit backClicked();
505  KAssistantDialog::back();
506 }
507 void FormAssistant::next()
508 {
509  emit nextClicked();
510  KAssistantDialog::next();
511 }
512 
513 QString FormAssistant::currentPage() const
514 {
515  KPageWidgetItem* item = KPageDialog::currentPage();
516  return item ? item->name() : QString();
517 }
518 
519 bool FormAssistant::setCurrentPage(const QString& name)
520 {
521  if( ! d->items.contains(name) )
522  return false;
523  KPageDialog::setCurrentPage( d->items[name] );
524  return true;
525 }
526 
527 QWidget* FormAssistant::page(const QString& name) const
528 {
529  return d->items.contains(name) ? d->items[name]->widget() : 0;
530 }
531 
532 QWidget* FormAssistant::addPage(const QString& name, const QString& header, const QString& iconname)
533 {
534  return d->items.insert(name, formAddPage((KPageDialog*)this,name,header,iconname)).value()->widget();
535 }
536 
537 bool FormAssistant::isAppropriate (const QString& name) const
538 {
539  return d->items.contains(name) && KAssistantDialog::isAppropriate(d->items[name]);
540 }
541 void FormAssistant::setAppropriate (const QString& name, bool appropriate)
542 {
543  if (!d->items.contains(name))
544  return;
545 
546  KAssistantDialog::setAppropriate(d->items[name],appropriate);
547 }
548 bool FormAssistant::isValid (const QString& name) const
549 {
550  return d->items.contains(name) && KAssistantDialog::isValid(d->items[name]);
551 }
552 void FormAssistant::setValid (const QString& name, bool enable)
553 {
554  if (!d->items.contains(name))
555  return;
556 
557  KAssistantDialog::setValid(d->items[name],enable);
558 }
559 
560 QString FormAssistant::result()
561 {
562  int i = metaObject()->indexOfEnumerator("AssistantButtonCode");
563  if( i < 0 ) {
564  kWarning() << "Kross::FormAssistant::setButtons No such enumerator \"AssistantButtonCode\"";
565  return QString();
566  }
567  QMetaEnum e = metaObject()->enumerator(i);
568  return e.valueToKey(FormAssistant::AssistantButtonCode(int(d->buttoncode)));
569 }
570 
571 void FormAssistant::slotButtonClicked(int button)
572 {
573  d->buttoncode = (KDialog::ButtonCode) button;
574  KDialog::slotButtonClicked(button);
575 }
576 
577 void FormAssistant::slotCurrentPageChanged(KPageWidgetItem* current)
578 {
579  Q_UNUSED(current);
580  //kDebug() << "FormAssistant::slotCurrentPageChanged current=" << current->name();
581  //foreach(QWidget* widget, current->widget()->findChildren< QWidget* >("")) widget->setFocus();
582 }
583 
584 /*********************************************************************************
585  * FormModule
586  */
587 
588 namespace Kross {
589 
591  class UiLoader : public QUiLoader
592  {
593  public:
594  UiLoader() : QUiLoader() {}
595  virtual ~UiLoader() {}
596 
597  /*
598  virtual QAction* createAction(QObject* parent = 0, const QString& name = QString())
599  {
600  }
601 
602  virtual QActionGroup* createActionGroup(QObject* parent = 0, const QString& name = QString())
603  {
604  }
605 
606  virtual QLayout* createLayout(const QString& className, QObject* parent = 0, const QString& name = QString())
607  {
608  }
609 
610  virtual QWidget* createWidget(const QString& className, QWidget* parent = 0, const QString& name = QString())
611  {
612  }
613  */
614  };
615 
617  class FormModule::Private
618  {
619  public:
620  };
621 
622 }
623 
624 FormModule::FormModule()
625  : QObject()
626  , d( new Private() )
627 {
628 }
629 
630 FormModule::~FormModule()
631 {
632  delete d;
633 }
634 
635 QWidget* FormModule::activeModalWidget()
636 {
637  return QApplication::activeModalWidget();
638 }
639 
640 QWidget* FormModule::activeWindow()
641 {
642  return QApplication::activeWindow();
643 }
644 
645 QString FormModule::showMessageBox(const QString& dialogtype, const QString& caption, const QString& message, const QString& details)
646 {
647  KMessageBox::DialogType type;
648  if(dialogtype == "Error") {
649  if( ! details.isNull() ) {
650  KMessageBox::detailedError(0, message, details, caption);
651  return QString();
652  }
653  type = KMessageBox::Error;
654  }
655  else if(dialogtype == "Sorry") {
656  if( ! details.isNull() ) {
657  KMessageBox::detailedSorry(0, message, details, caption);
658  return QString();
659  }
660  type = KMessageBox::Sorry;
661  }
662  else if(dialogtype == "QuestionYesNo") type = KMessageBox::QuestionYesNo;
663  else if(dialogtype == "WarningYesNo") type = KMessageBox::WarningYesNo;
664  else if(dialogtype == "WarningContinueCancel") type = KMessageBox::WarningContinueCancel;
665  else if(dialogtype == "WarningYesNoCancel") type = KMessageBox::WarningYesNoCancel;
666  else if(dialogtype == "QuestionYesNoCancel") type = KMessageBox::QuestionYesNoCancel;
667  else /*if(dialogtype == "Information")*/ type = KMessageBox::Information;
668  switch( KMessageBox::messageBox(0, type, message, caption) ) {
669  case KMessageBox::Ok: return "Ok";
670  case KMessageBox::Cancel: return "Cancel";
671  case KMessageBox::Yes: return "Yes";
672  case KMessageBox::No: return "No";
673  case KMessageBox::Continue: return "Continue";
674  default: break;
675  }
676  return QString();
677 }
678 
679 QWidget* FormModule::showProgressDialog(const QString& caption, const QString& labelText)
680 {
681  return new FormProgressDialog(caption, labelText);
682 }
683 
684 QWidget* FormModule::createDialog(const QString& caption)
685 {
686  return new FormDialog(caption);
687 }
688 
689 QWidget* FormModule::createAssistant(const QString& caption)
690 {
691  return new FormAssistant(caption);
692 }
693 
694 QObject* FormModule::createLayout(QWidget* parent, const QString& layout)
695 {
696  QLayout* l = 0;
697  if( layout == "QVBoxLayout" )
698  l = new QVBoxLayout();
699  else if( layout == "QHBoxLayout" )
700  l = new QHBoxLayout();
701  else if( layout == "QStackedLayout" )
702  l = new QStackedLayout();
703  if( parent && l )
704  parent->setLayout(l);
705  return l;
706 }
707 
708 QWidget* FormModule::createWidget(const QString& className)
709 {
710  UiLoader loader;
711  QWidget* widget = loader.createWidget(className);
712  return widget;
713 }
714 
715 QWidget* FormModule::createWidget(QWidget* parent, const QString& className, const QString& name)
716 {
717  UiLoader loader;
718  QWidget* widget = loader.createWidget(className, parent, name);
719  if( parent && parent->layout() )
720  parent->layout()->addWidget(widget);
721  return widget;
722 }
723 
724 
725 QString FormModule::tr(const QString& str)
726 {
727  return QObject::tr(str.toUtf8());
728 }
729 QString FormModule::tr(const QString& str, const QString& comment)
730 {
731  return QObject::tr(str.toUtf8(),comment.toUtf8());
732 }
733 
734 QWidget* FormModule::createWidgetFromUI(QWidget* parent, const QString& xml)
735 {
736  QUiLoader loader;
737 
738  QDomDocument doc("mydocument");
739  doc.setContent(xml.toUtf8());
740 
741  QDomNodeList strings=doc.elementsByTagName("string");
742  int i=strings.size();
743  while(--i>=0)
744  {
745  QDomElement e=strings.at(i).toElement();
746  QString i18nd=e.attribute("comment").isEmpty()?QObject::tr(e.text().toUtf8()):QObject::tr(e.text().toUtf8(),e.attribute("comment").toUtf8());
747  if (i18nd==e.text())
748  continue;
749  QDomNode n = e.firstChild();
750  while (!n.isNull())
751  {
752  QDomNode nn=n.nextSibling();
753  if (n.isCharacterData())
754  e.removeChild(n);
755  n = nn;
756  }
757  e.appendChild(e.ownerDocument().createTextNode(i18nd));
758  }
759 
760  QByteArray ba = doc.toByteArray();
761  QBuffer buffer(&ba);
762  buffer.open(QIODevice::ReadOnly);
763 
764  QWidget* widget = loader.load(&buffer, parent);
765  if( widget && parent && parent->layout() )
766  parent->layout()->addWidget(widget);
767  return widget;
768 }
769 
770 QWidget* FormModule::createWidgetFromUIFile(QWidget* parent, const QString& filename)
771 {
772  QFile file(filename);
773  if( ! file.exists() ) {
774  kDebug() << QString("Kross::FormModule::createWidgetFromUIFile: There exists no such file \"%1\"").arg(filename);
775  return 0;
776  }
777  if( ! file.open(QFile::ReadOnly) ) {
778  kDebug() << QString("Kross::FormModule::createWidgetFromUIFile: Failed to open the file \"%1\"").arg(filename);
779  return 0;
780  }
781  const QString xml = file.readAll();
782  file.close();
783  return createWidgetFromUI(parent, xml);
784 }
785 
786 QWidget* FormModule::createFileWidget(QWidget* parent, const QString& startDirOrVariable)
787 {
788  FormFileWidget* widget = new FormFileWidget(parent, startDirOrVariable);
789  if( parent && parent->layout() )
790  parent->layout()->addWidget(widget);
791  return widget;
792 }
793 
794 QWidget* FormModule::createListView(QWidget* parent)
795 {
796  FormListView* widget = new FormListView(parent);
797  if( parent && parent->layout() )
798  parent->layout()->addWidget(widget);
799  return widget;
800 }
801 
802 QAction* FormModule::createAction(QObject* parent)
803 {
804  return new QAction(parent);
805 }
806 
807 QObject* FormModule::loadPart(QWidget* parent, const QString& name, const QUrl& url)
808 {
809  //name e.g. "libkghostview"
810  KPluginFactory* factory = KPluginLoader( name.toLatin1() ).factory();
811  if( ! factory ) {
812  kWarning() << QString("Kross::FormModule::loadPart: No such library \"%1\"").arg(name);
813  return 0;
814  }
815  KParts::ReadOnlyPart* part = factory->create< KParts::ReadOnlyPart >( parent );
816  if( ! part ) {
817  kWarning() << QString("Kross::FormModule::loadPart: Library \"%1\" is not a KPart").arg(name);
818  return 0;
819  }
820  if( url.isValid() )
821  part->openUrl(url);
822  if( parent && parent->layout() && part->widget() )
823  parent->layout()->addWidget( part->widget() );
824  return part;
825 }
826 
827 #include "form.moc"
QWidget::layout
QLayout * layout() const
Kross::FormAssistant::setAppropriate
void setAppropriate(const QString &name, bool appropriate)
Definition: form.cpp:541
i18n
QString i18n(const char *text)
QProgressBar
KMessageBox::No
QApplication::activeModalWidget
QWidget * activeModalWidget()
Kross::FormProgressDialog::FormProgressDialog
FormProgressDialog(const QString &caption, const QString &labelText)
Definition: form.cpp:219
QWidget
KPageDialog
QMetaEnum::valueToKey
const char * valueToKey(int value) const
Kross::FormModule::activeWindow
QWidget * activeWindow()
Definition: form.cpp:640
KMessageBox::Continue
Kross::FormModule::createLayout
QObject * createLayout(QWidget *parent, const QString &layout)
Create and return a new QWidget instance.
Definition: form.cpp:694
QTextCursor
QDialog::setModal
void setModal(bool modal)
QWidget::cursor
QCursor cursor() const
kdebug.h
Kross::FormModule::createWidgetFromUIFile
QWidget * createWidgetFromUIFile(QWidget *parent, const QString &filename)
Create and return a new QWidget instance.
Definition: form.cpp:770
KMessageBox::DialogType
DialogType
Kross::FormFileWidget::fileSelected
void fileSelected(const QString &file)
Emitted when the user selects a file.
QMetaObject::indexOfEnumerator
int indexOfEnumerator(const char *name) const
QDomNode::appendChild
QDomNode appendChild(const QDomNode &newChild)
kurl.h
Kross::FormFileWidget::setFilter
void setFilter(const QString &filter)
Set the filter to filter .
Definition: form.cpp:156
Kross::FormProgressDialog::setRange
void setRange(int minimum, int maximum)
Set the minimum and maximum range of the progressbar.
Definition: form.cpp:277
Kross::FormModule::showMessageBox
QString showMessageBox(const QString &dialogtype, const QString &caption, const QString &message, const QString &details=QString())
Show a messagebox.
Definition: form.cpp:645
QByteArray
Kross::FormModule::tr
QString tr(const QString &str)
Definition: form.cpp:725
QDomElement::attribute
QString attribute(const QString &name, const QString &defValue) const
KMessageBox::Error
kactioncollection.h
Kross::FormFileWidget::selectedFile
QString selectedFile() const
Definition: form.cpp:179
QDomNodeList
KAssistantDialog::isAppropriate
bool isAppropriate(KPageWidgetItem *page) const
QLayoutItem::widget
virtual QWidget * widget()
QWidget::setMinimumWidth
void setMinimumWidth(int minw)
KMessageBox::detailedError
static void detailedError(QWidget *parent, const QString &text, const QString &details, const QString &caption=QString(), Options options=Notify)
QSizePolicy
QLayout
KAssistantDialog::back
virtual void back()
kshell.h
QListWidgetItem
QObject::metaObject
virtual const QMetaObject * metaObject() const
Kross::FormModule::createWidgetFromUI
QWidget * createWidgetFromUI(QWidget *parent, const QString &xml)
Create and return a new QWidget instance.
Definition: form.cpp:734
QHBoxLayout
QDialog::exec
int exec()
Kross::FormAssistant::~FormAssistant
virtual ~FormAssistant()
Definition: form.cpp:492
Kross::FormModule::FormModule
FormModule()
Definition: form.cpp:624
Kross::FormAssistant::page
QWidget * page(const QString &name) const
Definition: form.cpp:527
QBuffer
QDialog::done
virtual void done(int r)
QDomNode
Kross::FormFileWidget
The FormFileWidget class provides access to a KFileWidget.
Definition: form.h:55
Kross::FormAssistant::AssistantButtonCode
AssistantButtonCode
Definition: form.h:388
QFile::exists
bool exists() const
Kross::FormDialog
The FormDialog class provides access to KDialog objects as top-level containers.
Definition: form.h:232
Kross::FormProgressDialog::exec
int exec()
Shows the dialog as a modal dialog, blocking until the user closes it and returns the execution resul...
Definition: form.cpp:312
QListWidget
Kross::FormProgressDialog::addText
void addText(const QString &text)
Add to the HTML-text that is displayed as information the text text .
Definition: form.cpp:288
kDebug
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
klocale.h
QObject::disconnect
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
QTime
KAssistantDialog::next
virtual void next()
Kross::FormModule::createWidget
QWidget * createWidget(const QString &className)
Create and return a new QWidget instance.
Definition: form.cpp:708
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
QListWidget::addItem
void addItem(const QString &label)
KMessageBox::Sorry
QFile
QWidget::update
void update()
KUrl
KMessageBox::messageBox
static int messageBox(QWidget *parent, DialogType type, const QString &text, const QString &caption=QString(), const KGuiItem &buttonYes=KStandardGuiItem::yes(), const KGuiItem &buttonNo=KStandardGuiItem::no(), const KGuiItem &buttonCancel=KStandardGuiItem::cancel(), const QString &dontShowAskAgainName=QString(), Options options=Notify)
Kross::FormAssistant::result
QString result()
Definition: form.cpp:560
Kross::FormFileWidget::fileHighlighted
void fileHighlighted(const QString &)
Emitted when the user highlights a file.
QString::isNull
bool isNull() const
Kross::FormDialog::setButtons
bool setButtons(const QString &buttons)
Set the buttons.
Definition: form.cpp:360
KMessageBox::Cancel
QDomNode::nextSibling
QDomNode nextSibling() const
Kross::FormModule::createDialog
QWidget * createDialog(const QString &caption)
Create and return a new FormDialog instance.
Definition: form.cpp:684
KPageWidgetItem::setIcon
void setIcon(const KIcon &icon)
Kross::FormDialog::addPage
QWidget * addPage(const QString &name, const QString &header=QString(), const QString &iconname=QString())
Add and return a new page.
Definition: form.cpp:433
QDomNode::toElement
QDomElement toElement() const
Kross::FormDialog::setFaceType
bool setFaceType(const QString &facetype)
Set the face type of the dialog.
Definition: form.cpp:384
KAssistantDialog
QWidget::setMinimumSize
void setMinimumSize(const QSize &)
QRegExp
Kross::FormAssistant::setValid
void setValid(const QString &name, bool enable)
Definition: form.cpp:552
QObject::name
const char * name() const
QApplication::activeWindow
QWidget * activeWindow()
Kross::FormListView::current
int current()
Definition: form.cpp:84
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
QWidget::setLayout
void setLayout(QLayout *layout)
Kross::FormFileWidget::selectionChanged
void selectionChanged()
Emitted when the user hilights one or more files in multiselection mode.
QDomNode::ownerDocument
QDomDocument ownerDocument() const
KPluginLoader
QDomElement::text
QString text() const
Kross::FormDialog::page
QWidget * page(const QString &name) const
Definition: form.cpp:410
Kross::FormListView::remove
void remove(int index)
Definition: form.cpp:81
QListWidget::clear
void clear()
Kross::FormListView::~FormListView
virtual ~FormListView()
Definition: form.cpp:79
Kross::FormModule::~FormModule
virtual ~FormModule()
Definition: form.cpp:630
KAssistantDialog::setAppropriate
void setAppropriate(KPageWidgetItem *page, bool appropriate)
KAssistantDialog::isValid
bool isValid(KPageWidgetItem *page) const
QHash< QString, KPageWidgetItem * >
QMetaEnum
Kross::FormModule::showProgressDialog
QWidget * showProgressDialog(const QString &caption, const QString &labelText)
Show a progressdialog to provide visible feedback on the progress of a slow operation.
Definition: form.cpp:679
QObject
kpluginloader.h
QDomDocument::elementsByTagName
QDomNodeList elementsByTagName(const QString &tagname) const
QString::isEmpty
bool isEmpty() const
QIODevice::readAll
QByteArray readAll()
krossmodule
QObject * krossmodule()
Definition: form.cpp:66
KMessageBox::QuestionYesNoCancel
Kross::FormAssistant::isAppropriate
bool isAppropriate(const QString &name) const
Definition: form.cpp:537
KIcon
Kross::FormDialog::FormDialog
FormDialog(const QString &caption)
Definition: form.cpp:342
QVBoxLayout
Kross::FormListView::addItem
void addItem(const QString &text)
Definition: form.cpp:82
QBuffer::open
virtual bool open(QFlags< QIODevice::OpenModeFlag > flags)
Kross::FormListView::clear
void clear()
Definition: form.cpp:80
form.h
Kross::FormFileWidget::setMode
void setMode(const QString &mode)
Set the Mode the FormFileWidget should have to mode .
Definition: form.cpp:144
KMessageBox::WarningContinueCancel
QString
Kross::FormListView::FormListView
FormListView(QWidget *parent)
Definition: form.cpp:78
Kross::FormModule::createAction
QAction * createAction(QObject *parent)
Create and return a new QAction instance.
Definition: form.cpp:802
QListWidget::item
QListWidgetItem * item(int row) const
KUrl::path
QString path(AdjustPathOption trailing=LeaveTrailingSlash) const
QListWidget::count
int count() const
Kross::FormDialog::setCurrentPage
bool setCurrentPage(const QString &name)
Set the current page to name .
Definition: form.cpp:402
Kross::FormDialog::setButtonText
bool setButtonText(const QString &button, const QString &text)
Set the text of a button.
Definition: form.cpp:372
KMessageBox::Information
QLayout::setMargin
void setMargin(int margin)
QFile::open
virtual bool open(QFlags< QIODevice::OpenModeFlag > mode)
Kross::FormProgressDialog::setText
void setText(const QString &text)
Set the HTML-text that is displayed as information to the text text .
Definition: form.cpp:282
Kross::FormAssistant::backClicked
void backClicked()
QWidget::setSizePolicy
void setSizePolicy(QSizePolicy)
Kross::FormListView::count
int count()
Definition: form.cpp:83
QLayout::addWidget
void addWidget(QWidget *w)
Kross::FormFileWidget::~FormFileWidget
virtual ~FormFileWidget()
Definition: form.cpp:139
QListWidget::currentRow
int currentRow() const
KMessageBox::Ok
QStringList
QMetaEnum::keysToValue
int keysToValue(const char *keys) const
Kross::FormModule
The FormModule provides access to UI functionality like dialogs or widgets.
Definition: form.h:525
QDomDocument::createTextNode
QDomText createTextNode(const QString &value)
kaction.h
Kross::FormFileWidget::currentMimeFilter
QString currentMimeFilter() const
Definition: form.cpp:163
KMessageBox::WarningYesNoCancel
QMetaObject::enumerator
QMetaEnum enumerator(int index) const
KAssistantDialog::currentPageChanged
void currentPageChanged(KPageWidgetItem *current, KPageWidgetItem *before)
QDomNode::removeChild
QDomNode removeChild(const QDomNode &oldChild)
Kross::FormAssistant::isValid
bool isValid(const QString &name) const
Definition: form.cpp:548
QSize
QUrl
KPageWidgetItem::widget
QWidget * widget() const
QDomDocument
Kross::FormAssistant::currentPage
QString currentPage() const
Definition: form.cpp:513
Kross::FormModule::createFileWidget
QWidget * createFileWidget(QWidget *parent, const QString &startDirOrVariable=QString())
Create and return a new FormFileWidget instance.
Definition: form.cpp:786
kpushbutton.h
QFile::close
virtual void close()
ksqueezedtextlabel.h
Kross::FormProgressDialog::canceled
void canceled()
This signal got emitted if the user requests to cancel the operation.
Kross::FormDialog::currentPage
QString currentPage() const
Definition: form.cpp:396
QDomNode::isNull
bool isNull() const
QString::replace
QString & replace(int position, int n, QChar after)
Kross::FormDialog::setMainWidget
void setMainWidget(QWidget *newMainWidget)
Set the newMainWidget QWidget as main widget.
Definition: form.cpp:438
QUrl::isValid
bool isValid() const
QDomNode::firstChild
QDomNode firstChild() const
QString::toLatin1
QByteArray toLatin1() const
Kross::FormModule::activeModalWidget
QWidget * activeModalWidget()
Definition: form.cpp:635
QDomNode::isCharacterData
bool isCharacterData() const
Kross::FormListView::text
QString text(int row)
Definition: form.cpp:86
Kross::FormFileWidget::filterChanged
void filterChanged(const QString &filter)
Emitted when the filter changed, i.e.
KPageWidgetItem
QStackedLayout
KAssistantDialog::setValid
void setValid(KPageWidgetItem *page, bool enable)
Kross::FormModule::loadPart
QObject * loadPart(QWidget *parent, const QString &name, const QUrl &url=QUrl())
Load and return a KPart component.
Definition: form.cpp:807
kpluginfactory.h
Kross::FormDialog::~FormDialog
virtual ~FormDialog()
Definition: form.cpp:354
QAction
QWidget::QWidget
QWidget(QWidget *parent, QFlags< Qt::WindowType > f)
Kross::FormListView
The FormListView class provides access to a ListView.
Definition: form.h:36
Kross::FormDialog::result
QString result()
Definition: form.cpp:443
QWidget::setCaption
void setCaption(const QString &c)
Kross::FormFileWidget::currentFilter
QString currentFilter() const
Definition: form.cpp:151
Kross::FormAssistant::FormAssistant
FormAssistant(const QString &caption)
Definition: form.cpp:477
KPageWidgetItem::name
QString name
KMessageBox::detailedSorry
static void detailedSorry(QWidget *parent, const QString &text, const QString &details, const QString &caption=QString(), Options options=Notify)
QTextBrowser
Kross::FormListView::setCurrent
void setCurrent(int row)
Definition: form.cpp:85
QWidget::setMinimumHeight
void setMinimumHeight(int minh)
QUiLoader::load
QWidget * load(QIODevice *device, QWidget *parentWidget)
kWarning
static QDebug kWarning(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
KMessageBox::QuestionYesNo
Kross::FormAssistant::showHelpButton
void showHelpButton(bool)
Definition: form.cpp:497
Kross::FormModule::createAssistant
QWidget * createAssistant(const QString &caption)
Create and return a new FormAssistant instance.
Definition: form.cpp:689
KPageWidgetItem::setHeader
void setHeader(const QString &header)
Kross::FormFileWidget::setMimeFilter
void setMimeFilter(const QStringList &filter)
Set the mimetype filter to filter .
Definition: form.cpp:168
Kross::FormProgressDialog::done
virtual void done(int r)
Definition: form.cpp:299
Kross::FormProgressDialog::~FormProgressDialog
virtual ~FormProgressDialog()
Definition: form.cpp:256
KMessageBox::Yes
QWidget::show
void show()
Kross::FormAssistant::setCurrentPage
bool setCurrentPage(const QString &name)
Set the current page to name .
Definition: form.cpp:519
QDomNodeList::size
int size() const
Kross::FormProgressDialog
The FormProgressDialog class provides access to progressbar.
Definition: form.h:155
Kross::FormAssistant::addPage
QWidget * addPage(const QString &name, const QString &header=QString(), const QString &iconname=QString())
Add and return a new page.
Definition: form.cpp:532
kicon.h
kmessagebox.h
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
formAddPage
static KPageWidgetItem * formAddPage(KPageDialog *dialog, const QString &name, const QString &header, const QString &iconname)
Definition: form.cpp:416
QObject::parent
QObject * parent() const
Kross::FormModule::createListView
QWidget * createListView(QWidget *parent)
Create and return a new FormListView instance.
Definition: form.cpp:794
QDomElement
Kross::FormProgressDialog::setValue
void setValue(int progress)
Set the value of the progressbar.
Definition: form.cpp:261
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
Kross::FormAssistant::next
void next()
Force page switching.
Definition: form.cpp:507
KPluginFactory
Kross::FormAssistant::nextClicked
void nextClicked()
use it to setAppropriate()
Kross::FormProgressDialog::isCanceled
bool isCanceled()
Returns true if the user requested to cancel the operation.
Definition: form.cpp:321
QUiLoader
QListWidgetItem::text
QString text() const
QBoxLayout::setSpacing
void setSpacing(int spacing)
KMessageBox::WarningYesNo
QDomDocument::toByteArray
QByteArray toByteArray(int indent) const
KDE_EXPORT
#define KDE_EXPORT
QDomNodeList::at
QDomNode at(int index) const
QDomDocument::setContent
bool setContent(const QByteArray &data, bool namespaceProcessing, QString *errorMsg, int *errorLine, int *errorColumn)
Kross::FormAssistant::back
void back()
Force page switching.
Definition: form.cpp:502
Kross::FormFileWidget::FormFileWidget
FormFileWidget(QWidget *parent, const QString &startDirOrVariable)
Definition: form.cpp:107
Kross::FormAssistant
The FormAssistant class provides access to KAssistantDialog objects as top-level containers.
Definition: form.h:383
QString::toUtf8
QByteArray toUtf8() const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:24:44 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Kross

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

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal