bool DataMediaWidget::updateWidget(const IDataMediaURI &AUri, const QByteArray &AData) { bool success = false; if (AUri.type == MEDIAELEM_TYPE_IMAGE) { QBuffer *buffer = new QBuffer(this); buffer->setData(AData); buffer->open(QIODevice::ReadOnly); QImageReader reader(buffer); if (reader.supportsAnimation()) { QMovie *movie = new QMovie(buffer,reader.format(),this); if (movie->isValid()) { success = true; setMovie(movie); movie->start(); } else { delete movie; } } else { QPixmap pixmap; pixmap.loadFromData(AData,reader.format()); if (!pixmap.isNull()) { success = true; setPixmap(pixmap); } } if (success) { setFrameShape(QLabel::NoFrame); setFrameShadow(QLabel::Plain); disconnect(FDataForms->instance()); emit mediaShown(); } else { delete buffer; } } return success; }
DataFormWidget::DataFormWidget(IDataForms *ADataForms, const IDataForm &AForm, QWidget *AParent) : QWidget(AParent) { FForm = AForm; FTableWidget = NULL; FDataForms = ADataForms; QVBoxLayout *formLayout = new QVBoxLayout(this); formLayout->setMargin(0); foreach(const QString &text, FForm.instructions) { QLabel *label = new QLabel(this); label->setText(text); label->setWordWrap(true); label->setTextFormat(Qt::PlainText); label->setAlignment(Qt::AlignCenter); formLayout->addWidget(label); } if (!FForm.fields.isEmpty() || !FForm.table.columns.isEmpty()) { foreach(const IDataField &field, FForm.fields) { IDataFieldWidget *fwidget = FDataForms->fieldWidget(field,!FForm.type.isEmpty() && FForm.type!=DATAFORM_TYPE_FORM,this); fwidget->instance()->setVisible(false); if (fwidget->mediaWidget() != NULL) { IDataMediaWidget *mwidget = fwidget->mediaWidget(); connect(mwidget->instance(),SIGNAL(mediaShown()),SLOT(onFieldMediaShown())); connect(mwidget->instance(),SIGNAL(mediaError(const XmppError &)),SLOT(onFieldMediaError(const XmppError &))); } connect(fwidget->instance(),SIGNAL(changed()),SLOT(onFieldChanged())); connect(fwidget->instance(),SIGNAL(focusIn(Qt::FocusReason)),SLOT(onFieldFocusIn(Qt::FocusReason))); connect(fwidget->instance(),SIGNAL(focusOut(Qt::FocusReason)),SLOT(onFieldFocusOut(Qt::FocusReason))); FFieldWidgets.append(fwidget); }