25 #include <kdeversion.h>
26 #include <QtGui/QClipboard>
27 #include <QtGui/QImage>
28 #include <QtGui/QLabel>
29 #include <QtCore/QDebug>
30 #include <QtGui/QLayout>
31 #include <QtCore/QObject>
32 #include <QtGui/QPainter>
33 #include <QtCore/QRect>
34 #include <QtGui/QTabWidget>
35 #include <QtGui/QTabBar>
36 #include <QScrollArea>
37 #include <QtGui/QApplication>
38 #include <QtGui/QTextBrowser>
39 #include <QtGui/QStyle>
49 template class QList<K3AboutContributor *>;
52 #define WORKTEXT_IDENTATION 16
57 #include "k3aboutdialog.moc"
58 #include "k3aboutdialog_p.moc"
61 class K3AboutContributor::Private
78 void K3AboutContributor::Private::updateLayout()
80 delete parent->layout();
83 if (!text[0]->text().isEmpty()) { ++row; }
84 if (!text[1]->text().isEmpty()) { ++row; }
85 if (!text[2]->text().isEmpty()) { ++row; }
86 if (!text[3]->text().isEmpty()) { ++row; }
91 gbox =
new QGridLayout(parent);
93 for (
int i=0; i<4; ++i)
101 if (text[0]->text().isEmpty() && !showHeader)
103 gbox =
new QGridLayout(parent);
104 gbox->setMargin(parent->frameWidth()+1);
109 gbox =
new QGridLayout(parent);
110 gbox->setMargin(parent->frameWidth()+1);
116 gbox->setColumnStretch(1, 10);
119 for (
int i=0, r=0; i<4; ++i)
121 label[i]->setFixedHeight(parent->fontMetrics().lineSpacing());
124 text[i]->setFixedHeight(parent->fontMetrics().lineSpacing());
127 if (!text[i]->text().isEmpty())
131 gbox->addWidget(label[i], r, 0, Qt::AlignLeft);
132 gbox->addWidget(text[i], r, 1, Qt::AlignLeft );
141 gbox->addWidget(text[i], r, 0, 1, 2, Qt::AlignLeft);
145 gbox->addWidget(text[i], r, 1, Qt::AlignLeft );
160 parent->setMinimumSize(parent->sizeHint());
166 bool showHeader,
bool showFrame,
168 :
QFrame(_parent), d(new Private(this))
171 setFrameStyle(QFrame::Panel | QFrame::Plain);
173 d->showHeader = showHeader;
174 d->showBold = showBold;
175 for (
int i=0; i < 4; ++i) {
176 d->label[i] =
new QLabel(
this);
177 d->label[i]->setOpenExternalLinks(
true);
178 d->label[i]->setTextInteractionFlags(Qt::LinksAccessibleByMouse);
179 d->text[i] =
new QLabel(
this);
180 d->text[i]->setOpenExternalLinks(
true);
181 d->text[i]->setTextInteractionFlags(Qt::LinksAccessibleByMouse);
189 d->label[3]->setAlignment(Qt::AlignTop);
203 d->label[0]->setText(_header);
204 d->text[0]->setText(_text);
205 if (_update) { d->updateLayout(); }
214 d->label[1]->setText(_header);
215 d->text[1]->setText(
QString(
"<a href=\"mailto:%1\">%1</a>").arg(_text));
216 if (_update) { d->updateLayout(); }
224 d->label[2]->setText(_header);
225 d->text[2]->setText(
QString(
"<a href=\"%1\">%1</a>").arg(_text));
226 if (_update) { d->updateLayout(); }
232 d->label[3]->setText(_header);
233 d->text[3]->setText(_text);
234 if (_update) { d->updateLayout(); }
239 return d->text[0]->text();
244 return d->text[1]->text();
249 return d->text[2]->text();
254 return d->text[3]->text();
263 d->text[0]->setFont(f);
270 return minimumSizeHint();
278 mImageLabel(0), mTitleLabel(0), mIconLabel(0),mVersionLabel(0),
279 mAuthorLabel(0), mImageFrame(0),mPageTab(0),mPlainSpace(0),d(0)
281 mTopLayout =
new QVBoxLayout(
this);
282 mTopLayout->setMargin(0);
296 mTitleLabel =
new QLabel(
this);
297 mTitleLabel->setObjectName(
"title");
298 mTitleLabel->setAlignment(Qt::AlignCenter);
299 mTopLayout->addWidget(mTitleLabel);
306 productArea->setFrameStyle( QFrame::StyledPanel );
307 productArea->setFrameShadow( QFrame::Plain );
308 productArea->setBackgroundRole(QPalette::Base);
309 productArea->setAutoFillBackground(
true);
312 QHBoxLayout*
const hbox =
new QHBoxLayout();
316 mIconLabel =
new QLabel(productArea);
317 hbox->addWidget(mIconLabel, 0, Qt::AlignLeft|Qt::AlignHCenter);
319 QVBoxLayout*
const vbox =
new QVBoxLayout();
320 if (!vbox) {
return; }
322 mVersionLabel =
new QLabel(productArea);
323 mVersionLabel->setObjectName(
"version");
324 mAuthorLabel =
new QLabel(productArea);
325 mAuthorLabel->setObjectName(
"author");
326 vbox->addWidget(mVersionLabel);
327 vbox->addWidget(mAuthorLabel);
330 hbox->addLayout(vbox);
332 if ( QApplication::isRightToLeft() )
333 hbox->insertStretch(0 , 1);
335 hbox->insertStretch(-1 , 1);
337 productArea->setLayout(hbox);
339 mTopLayout->addWidget(productArea, 0);
342 QHBoxLayout*
const hbox =
new QHBoxLayout();
343 if (!hbox) {
return; }
344 mTopLayout->addLayout(hbox, 10);
346 if (layoutType & K3AboutDialog::ImageLeft)
348 QVBoxLayout* vbox =
new QVBoxLayout();
349 hbox->addLayout(vbox);
351 mImageFrame =
new QFrame(
this);
352 mImageFrame->setAutoFillBackground(
true);
354 vbox->addWidget(mImageFrame);
357 vbox =
new QVBoxLayout(mImageFrame);
359 mImageLabel =
new QLabel(mImageFrame);
360 vbox->addStretch(10);
361 vbox->addWidget(mImageLabel);
362 vbox->addStretch(10);
369 if (!mPageTab) {
return; }
370 mPageTab->setUsesScrollButtons(
false);
371 hbox->addWidget(mPageTab, 10);
373 else if (layoutType & K3AboutDialog::ImageOnly)
375 mImageFrame =
new QFrame(
this);
376 mImageFrame->setAutoFillBackground(
true);
378 hbox->addWidget(mImageFrame, 10);
380 QGridLayout*
const gbox =
new QGridLayout(mImageFrame);
383 gbox->setRowStretch(0, 10);
384 gbox->setRowStretch(2, 10);
385 gbox->setColumnStretch(0, 10);
386 gbox->setColumnStretch(2, 10);
388 mImageLabel =
new QLabel(mImageFrame);
389 gbox->addWidget(mImageLabel, 1, 1);
394 mPlainSpace =
new QFrame(
this);
395 if (!mPlainSpace) {
return; }
396 hbox->addWidget(mPlainSpace, 10);
401 QVBoxLayout *vbox =
new QVBoxLayout();
402 hbox->addLayout(vbox);
404 mImageFrame =
new QFrame(
this);
405 mImageFrame->setAutoFillBackground(
true);
407 vbox->addWidget(mImageFrame);
410 vbox =
new QVBoxLayout(mImageFrame);
412 mImageLabel =
new QLabel(mImageFrame);
413 vbox->addStretch(10);
414 vbox->addWidget(mImageLabel);
415 vbox->addStretch(10);
424 return minimumSize().expandedTo(
QSize(QWidget::sizeHint().width(), 0));
433 int fs = f.pointSize();
435 fs = QFontInfo(f).pointSize();
436 f.setPointSize(fs+2);
437 mTitleLabel->setFont(f);
443 mVersionLabel->setFont(f);
444 mAuthorLabel->setFont(f);
445 mVersionLabel->parentWidget()->layout()->activate();
453 bool richText,
int numLines)
456 if (!page) {
return 0; }
457 if (numLines <= 0) { numLines = 10; }
459 QVBoxLayout*
const vbox =
new QVBoxLayout(page);
465 browser->setFrameStyle( QFrame::NoFrame );
466 browser->setOpenExternalLinks(
true);
467 browser->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
468 browser->setHtml(text);
469 browser->setMinimumHeight(fontMetrics().lineSpacing()*numLines);
471 vbox->addWidget(browser);
476 textEdit->setFrameStyle( QFrame::NoFrame );
477 textEdit->setObjectName(
"text");
479 textEdit->setMinimumHeight(fontMetrics().lineSpacing()*numLines);
480 textEdit->setLineWrapMode(QTextEdit::NoWrap);
481 vbox->addWidget(textEdit);
488 const QString &text,
int numLines)
491 if (!page) {
return 0; }
492 if (numLines <= 0) { numLines = 10; }
494 QVBoxLayout*
const vbox =
new QVBoxLayout(page);
500 textEdit->setFrameStyle(QFrame::NoFrame);
501 textEdit->setObjectName(
"license");
504 textEdit->setLineWrapMode(QTextEdit::NoWrap);
505 textEdit->setPlainText(text);
506 textEdit->setMinimumHeight(fontMetrics().lineSpacing()*numLines);
507 vbox->addWidget(textEdit);
513 Qt::Alignment childAlignment,
514 Qt::Alignment innerAlignment)
518 kDebug(291) <<
"addPage: " <<
"Invalid layout";
525 mPageTab->addTab(container, title);
532 Qt::Alignment childAlignment,
533 Qt::Alignment innerAlignment)
537 kDebug(291) <<
"addPage: " <<
"Invalid layout";
542 QVBoxLayout*
const vbox =
new QVBoxLayout(page);
546 QScrollArea*
const scrollView =
new QScrollArea(page);
547 scrollView->setFrameStyle(QFrame::Plain);
548 vbox->addWidget(scrollView);
553 scrollView->setWidget(container);
562 kDebug(291) <<
"addPage: " <<
"Invalid layout";
567 page->setObjectName(title.toLatin1());
568 page->setFrameStyle(QFrame::NoFrame);
570 mPageTab->addTab(page, title);
576 Qt::Alignment innerAlignment)
580 container->setObjectName(
"container");
581 mTopLayout->addWidget(container, 0, childAlignment);
591 kDebug(291) <<
"setTitle: " <<
"Invalid layout";
594 mTitleLabel->setText(title);
602 kDebug(291) <<
"setImage: " <<
"Invalid layout";
605 if (fileName.isNull())
610 const QPixmap logo(fileName);
612 mImageLabel->setPixmap(logo);
614 mImageFrame->layout()->activate();
619 if (fileName.isNull())
624 const QPixmap logo(fileName);
632 kDebug(291) <<
"setProgramLogo: " <<
"Invalid layout";
635 if (!pixmap.isNull())
637 mIconLabel->setPixmap(pixmap);
645 QPalette palette(mImageFrame->palette());
646 palette.setColor(QPalette::Window, color);
647 mImageFrame->setPalette(palette);
658 mImageFrame->setFrameStyle(QFrame::Panel | QFrame::Sunken);
659 mImageFrame->setLineWidth(1);
663 mImageFrame->setFrameStyle(QFrame::NoFrame);
664 mImageFrame->setLineWidth(0);
677 kDebug(291) <<
"setProduct: " <<
"Invalid layout";
682 mIconLabel->setPixmap(qApp->windowIcon().pixmap(size,size));
684 const QString msg1 =
i18n(
"<html><font size=\"5\">%1</font><br/><b>version %2</b><br/>Using KDE %3</html>", appName, version,
686 const QString msg2 = !year.isEmpty() ?
i18n(
"%1 %2, %3", QChar(0xA9), year,
687 author) : QLatin1String(
"");
692 mVersionLabel->setText(msg1);
693 mAuthorLabel->setText(msg2);
696 mAuthorLabel->hide();
699 mIconLabel->parentWidget()->layout()->activate();
702 class K3AboutContainer::Private
706 Qt::Alignment alignment;
710 int margin,
int spacing,
711 Qt::Alignment childAlignment,
712 Qt::Alignment innerAlignment)
713 :
QFrame(parent), d(new Private)
715 d->alignment = innerAlignment;
717 setFrameStyle(QFrame::NoFrame);
719 QGridLayout*
const gbox =
new QGridLayout(
this);
720 gbox->setMargin(margin);
721 gbox->setMargin(spacing);
722 if (childAlignment & Qt::AlignHCenter)
724 gbox->setColumnStretch(0, 10);
725 gbox->setColumnStretch(2, 10);
727 else if (childAlignment & Qt::AlignRight)
729 gbox->setColumnStretch(0, 10);
733 gbox->setColumnStretch(2, 10);
736 if (childAlignment & Qt::AlignVCenter)
738 gbox->setRowStretch(0, 10);
739 gbox->setRowStretch(2, 10);
741 else if (childAlignment & Qt::AlignRight)
743 gbox->setRowStretch(0, 10);
747 gbox->setRowStretch(2, 10);
750 d->vbox =
new QVBoxLayout();
751 d->vbox->setSpacing(spacing);
752 gbox->addLayout(d->vbox, 1, 1);
772 const QList<QObject*> l = children();
774 if (o->isWidgetType())
779 QSize s = w->minimumSize();
782 s = w->minimumSizeHint();
792 total_size.setHeight(total_size.height() + s.height());
793 if (s.width() > total_size.width()) { total_size.setWidth(s.width()); }
804 total_size.setHeight(total_size.height() + layout()->spacing()*(numChild-1));
805 total_size +=
QSize(layout()->margin()*2, layout()->margin()*2 + 1);
809 total_size =
QSize(1, 1);
822 widget->setParent(
this);
824 d->vbox->addWidget(widget, 0, d->alignment);
828 const QList<QObject*> l = children();
830 if (o->isWidgetType())
832 static_cast<QWidget *
>(o)->setMinimumWidth(s.width());
840 bool showHeader,
bool showFrame,
bool showBold)
844 _name, _email, _url, _task, showHeader, showFrame, showBold);
845 cont->setObjectName(
"pers");
851 bool showFrame,
bool showBold)
855 label->setObjectName(
"title");
858 QFont labelFont(font());
859 labelFont.setBold(
true);
860 label->setFont(labelFont);
863 label->setFrameStyle(QFrame::Panel | QFrame::Raised);
865 label->setAlignment(alignment);
872 if (fileName.isNull())
878 label->setObjectName(
"image");
879 const QImage logo(fileName);
883 pix = QPixmap::fromImage(logo, 0);
884 label->setPixmap(pix);
886 label->setAlignment(alignment);
897 showMaintainer(false),
900 cont->setText(
i18n(
"Other Contributors:"));
901 logo->setText(
i18n(
"(No logo available)"));
902 logo->setFrameStyle(QFrame::Panel | QFrame::Raised);
903 version->setAlignment(Qt::AlignCenter);
910 int maintWidth, maintHeight;
916 maintWidth=total_size.width();
917 maintHeight=total_size.height();
926 tempx=qMax(total_size.width(), maintWidth);
928 cx=qMax(cx,
version->sizeHint().width());
929 cy+=qMax(
logo->height(),
934 cx=qMax(cx,
cont->sizeHint().width());
942 setMinimumSize(cx, cy);
988 int _x=0, _y, cx, tempx, tempy;
990 version->setGeometry(0, 0, width(),
version->sizeHint().height());
1003 _y+=qMax(
logo->height(),
1008 tempy=
cont->sizeHint().height();
1009 cont->setGeometry(0, _y, width(), tempy);
1017 tempy=currEntry->
sizeHint().height();
1019 currEntry->setGeometry(_x, _y, width(), tempy);
1119 bool richText,
int numLines)
1133 Qt::Alignment childAlignment, Qt::Alignment innerAlignment)
1141 Qt::Alignment childAlignment, Qt::Alignment innerAlignment)
1156 Qt::Alignment innerAlignment)
1213 a.setObjectName(
"image");