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>
36 #include <QtGui/QTextBrowser>
38 #include <QTextCursor>
54 #include <kparts/part.h>
59 #include <kfilewidget.h>
60 #include <kurlcombobox.h>
72 using namespace Kross;
87 QListWidgetItem *item = QListWidget::item(row);
88 return item ? item->text() :
QString();
98 class FormFileWidget::Private
101 KFileWidget* filewidget;
108 :
QWidget(parent), d(new Private())
110 QVBoxLayout* layout =
new QVBoxLayout(
this);
111 layout->setSpacing(0);
112 layout->setMargin(0);
115 d->filewidget =
new KFileWidget(
KUrl(startDirOrVariable),
this);
116 layout->addWidget( d->filewidget );
134 if( parent && parent->layout() )
135 parent->layout()->addWidget(
this);
136 setMinimumSize(
QSize(480,360) );
146 QMetaEnum e = metaObject()->enumerator( metaObject()->indexOfEnumerator(
"Mode") );
147 KFileWidget::OperationMode m = (KFileWidget::OperationMode) e.keysToValue( mode.toLatin1() );
148 d->filewidget->setOperationMode(m);
153 return d->filewidget->currentFilter();
159 f.replace(QRegExp(
"([^\\\\]{1,1})/"),
"\\1\\/");
160 d->filewidget->setFilter(f);
165 return d->filewidget->currentMimeFilter();
170 d->filewidget->setMimeFilter(filter);
173 void FormFileWidget::slotFileSelected(
const QString & fn )
181 if ( d->filewidget->operationMode() != KFileWidget::Saving ) {
182 d->filewidget->accept();
185 if ( d->filename.isEmpty() ) {
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()));
193 KUrl url( d->filename );
203 class FormProgressDialog::Private
211 if( time.elapsed() >= 1000 ) {
213 qApp->processEvents();
221 d->gotCanceled =
false;
225 KDialog::setButtons(KDialog::Ok|KDialog::Cancel);
226 setFaceType(KPageDialog::Plain);
227 enableButton(KDialog::Ok,
false);
230 setMinimumWidth(540);
231 setMinimumHeight(400);
238 QVBoxLayout* layout =
new QVBoxLayout(widget);
239 layout->setMargin(0);
240 widget->setLayout(layout);
243 d->browser->setHtml(labelText);
244 layout->addWidget(d->browser);
246 d->bar =
new QProgressBar(
this);
248 d->bar->setVisible(
false);
249 layout->addWidget(d->bar);
251 setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding) );
253 qApp->processEvents();
264 if( d->bar->isVisible() ) {
265 d->bar->setVisible(
false);
267 qApp->processEvents();
271 if( ! d->bar->isVisible() )
272 d->bar->setVisible(
true);
273 d->bar->setValue(progress);
279 d->bar->setRange(minimum, maximum);
284 d->browser->setHtml(text);
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();
301 if( r == Rejected && ! d->gotCanceled ) {
303 d->gotCanceled =
true;
304 enableButton(KDialog::Cancel,
false);
309 KPageDialog::done(r);
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();
323 return d->gotCanceled;
333 class FormDialog::Private
336 KDialog::ButtonCode buttoncode;
347 KDialog::setButtons(KDialog::Ok);
348 setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding) );
362 int i = metaObject()->indexOfEnumerator(
"ButtonCode");
364 QMetaEnum e = metaObject()->enumerator(i);
365 int v = e.keysToValue( buttons.toUtf8() );
368 KDialog::setButtons( (KDialog::ButtonCode) v );
374 int i = metaObject()->indexOfEnumerator(
"ButtonCode");
376 QMetaEnum e = metaObject()->enumerator(i);
377 int v = e.keysToValue( button.toUtf8() );
380 KDialog::setButtonText( (KDialog::ButtonCode) v, text);
386 int i = KPageView::staticMetaObject.indexOfEnumerator(
"FaceType");
388 QMetaEnum e = KPageView::staticMetaObject.enumerator(i);
389 int v = e.keysToValue( facetype.toUtf8() );
392 KPageDialog::setFaceType( (KPageDialog::FaceType) v );
404 if( ! d->items.contains(name) )
406 KPageDialog::setCurrentPage( d->items[name] );
412 return d->items.contains(name) ? d->items[name]->widget() : 0;
419 QVBoxLayout* boxlayout =
new QVBoxLayout(widget);
420 boxlayout->setSpacing(0);
421 boxlayout->setMargin(0);
422 widget->setLayout(boxlayout);
425 item->
setHeader(header.isNull() ? name : header);
426 if( ! iconname.isEmpty() )
440 KDialog::setMainWidget(newMainWidget);
445 int i = metaObject()->indexOfEnumerator(
"ButtonCode");
447 kWarning() <<
"Kross::FormDialog::setButtons No such enumerator \"ButtonCode\"";
450 QMetaEnum e = metaObject()->enumerator(i);
451 return e.valueToKey(d->buttoncode);
454 void FormDialog::slotButtonClicked(
int button)
456 d->buttoncode = (KDialog::ButtonCode) button;
457 KDialog::slotButtonClicked(button);
470 class FormAssistant::Private
473 KDialog::ButtonCode buttoncode;
482 setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding) );
499 showButton(KDialog::Help, show);
521 if( ! d->items.contains(name) )
523 KPageDialog::setCurrentPage( d->items[name] );
529 return d->items.contains(name) ? d->items[name]->widget() : 0;
543 if (!d->items.contains(name))
554 if (!d->items.contains(name))
562 int i = metaObject()->indexOfEnumerator(
"AssistantButtonCode");
564 kWarning() <<
"Kross::FormAssistant::setButtons No such enumerator \"AssistantButtonCode\"";
567 QMetaEnum e = metaObject()->enumerator(i);
571 void FormAssistant::slotButtonClicked(
int button)
573 d->buttoncode = (KDialog::ButtonCode) button;
574 KDialog::slotButtonClicked(button);
591 class UiLoader :
public QUiLoader
594 UiLoader() : QUiLoader() {}
595 virtual ~UiLoader() {}
617 class FormModule::Private
637 return QApplication::activeModalWidget();
642 return QApplication::activeWindow();
648 if(dialogtype ==
"Error") {
649 if( ! details.isNull() ) {
655 else if(dialogtype ==
"Sorry") {
656 if( ! details.isNull() ) {
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();
704 parent->setLayout(l);
711 QWidget* widget = loader.createWidget(className);
718 QWidget* widget = loader.createWidget(className, parent, name);
719 if( parent && parent->layout() )
720 parent->layout()->addWidget(widget);
727 return QObject::tr(str.toUtf8());
731 return QObject::tr(str.toUtf8(),comment.toUtf8());
738 QDomDocument doc(
"mydocument");
739 doc.setContent(xml.toUtf8());
741 QDomNodeList strings=doc.elementsByTagName(
"string");
742 int i=strings.size();
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());
749 QDomNode n = e.firstChild();
752 QDomNode nn=n.nextSibling();
753 if (n.isCharacterData())
757 e.appendChild(e.ownerDocument().createTextNode(i18nd));
760 QByteArray ba = doc.toByteArray();
762 buffer.open(QIODevice::ReadOnly);
764 QWidget* widget = loader.load(&buffer, parent);
765 if( widget && parent && parent->layout() )
766 parent->layout()->addWidget(widget);
772 QFile file(filename);
773 if( ! file.exists() ) {
774 kDebug() <<
QString(
"Kross::FormModule::createWidgetFromUIFile: There exists no such file \"%1\"").arg(filename);
777 if( ! file.open(QFile::ReadOnly) ) {
778 kDebug() <<
QString(
"Kross::FormModule::createWidgetFromUIFile: Failed to open the file \"%1\"").arg(filename);
781 const QString xml = file.readAll();
789 if( parent && parent->layout() )
790 parent->layout()->addWidget(widget);
797 if( parent && parent->layout() )
798 parent->layout()->addWidget(widget);
812 kWarning() <<
QString(
"Kross::FormModule::loadPart: No such library \"%1\"").arg(name);
815 KParts::ReadOnlyPart* part = factory->create< KParts::ReadOnlyPart >( parent );
817 kWarning() <<
QString(
"Kross::FormModule::loadPart: Library \"%1\" is not a KPart").arg(name);
822 if( parent && parent->layout() && part->widget() )
823 parent->layout()->addWidget( part->widget() );