20 #include "insertimagewidget.h"
22 #include <KFileDialog>
24 #include <KLocalizedString>
25 #include <KUrlRequester>
30 #include <QHBoxLayout>
33 #include <QVBoxLayout>
35 namespace KPIMTextEdit {
37 class InsertImageWidgetPrivate
40 InsertImageWidgetPrivate( InsertImageWidget *qq )
41 : imageRatio( -1 ), q( qq )
46 imageUrlRequester =
new KUrlRequester;
48 const QStringList mimetypes = KImageIO::mimeTypes( KImageIO::Reading );
49 imageUrlRequester->fileDialog()->setFilter( mimetypes.
join(
QLatin1String(
" " ) ) );
50 imageUrlRequester->fileDialog()->setOperationMode( KFileDialog::Other );
51 imageUrlRequester->fileDialog()->setCaption( i18n(
"Add Image" ) );
52 imageUrlRequester->fileDialog()->okButton()->setGuiItem(
53 KGuiItem( i18n(
"&Add" ),
QLatin1String(
"document-open" ) ) );
54 imageUrlRequester->fileDialog()->setMode( KFile::File );
55 q->connect( imageUrlRequester->lineEdit(), SIGNAL(textChanged(
QString)),
56 q, SLOT(_k_slotUrlChanged(
QString)) );
63 keepOriginalSize =
new QCheckBox( i18n(
"Keep Original Size" ) );
64 q->connect( keepOriginalSize, SIGNAL(clicked(
bool)),
65 q, SLOT(_k_slotKeepOriginalSizeClicked(
bool)) );
66 keepOriginalSize->setChecked(
true );
69 keepImageRatio =
new QCheckBox( i18n(
"Keep Image Ratio" ) );
70 keepImageRatio->setChecked(
true );
71 keepImageRatio->setEnabled(
false );
75 lab =
new QLabel( i18n(
"Width:" ) );
78 width->setMaximum( 99999 );
79 width->setEnabled(
false );
80 width->setSuffix( i18n(
" px" ) );
82 q->connect( width, SIGNAL(valueChanged(
int)),
83 q, SLOT(_k_slotImageWidthChanged(
int)) );
89 lab =
new QLabel( i18n(
"Height:" ) );
92 height->setMaximum( 99999 );
93 height->setEnabled(
false );
94 height->setSuffix( i18n(
" px" ) );
96 q->connect( height, SIGNAL(valueChanged(
int)),
97 q, SLOT(_k_slotImageHeightChanged(
int)) );
102 KSeparator *sep =
new KSeparator;
106 lab =
new QLabel( i18n(
"Image Preview:"));
110 preview->setFixedSize(50,50);
115 void _k_slotKeepOriginalSizeClicked(
bool );
116 void _k_slotUrlChanged(
const QString & );
117 void _k_slotImageWidthChanged(
int );
118 void _k_slotImageHeightChanged(
int );
125 KUrlRequester *imageUrlRequester;
127 InsertImageWidget *q;
130 void InsertImageWidgetPrivate::_k_slotKeepOriginalSizeClicked(
bool checked )
133 width->setEnabled( !checked );
134 keepImageRatio->setEnabled( !checked );
136 _k_slotUrlChanged( imageUrlRequester->text() );
139 void InsertImageWidgetPrivate::_k_slotUrlChanged(
const QString &text )
142 if ( !image.isNull() ) {
143 height->setValue( image.height() );
144 width->setValue( image.width() );
146 imageRatio = (double)( (
double)image.height() / (double)image.width() );
155 void InsertImageWidgetPrivate::_k_slotImageWidthChanged(
int value )
157 if ( keepImageRatio->isChecked() && !keepOriginalSize->isChecked() ) {
158 if ( imageRatio != -1 ) {
159 height->blockSignals(
true );
160 height->setValue( value * imageRatio );
161 height->blockSignals(
false );
166 void InsertImageWidgetPrivate::_k_slotImageHeightChanged(
int value )
168 if ( keepImageRatio->isChecked() && !keepOriginalSize->isChecked() ) {
169 if ( imageRatio != -1 ) {
170 width->blockSignals(
true );
171 width->setValue( value / imageRatio );
172 width->blockSignals(
false );
177 InsertImageWidget::InsertImageWidget(
QWidget *parent )
178 :
QWidget( parent ), d( new InsertImageWidgetPrivate( this ) )
182 InsertImageWidget::~InsertImageWidget()
187 int InsertImageWidget::imageWidth()
const
189 return d->
width->value();
192 int InsertImageWidget::imageHeight()
const
194 return d->height->value();
197 void InsertImageWidget::setImageWidth(
int value )
199 d->width->setValue( value );
202 void InsertImageWidget::setImageHeight(
int value )
204 d->height->setValue( value );
207 KUrl InsertImageWidget::imageUrl()
const
209 return d->imageUrlRequester->url();
212 void InsertImageWidget::setImageUrl(
const KUrl &url )
214 d->imageUrlRequester->setUrl( url );
217 bool InsertImageWidget::keepOriginalSize()
const
219 return d->keepOriginalSize->isChecked();
224 #include "moc_insertimagewidget.cpp"
QPixmap fromImage(const QImage &image, QFlags< Qt::ImageConversionFlag > flags)
QString join(const QString &separator) const
void setFrameStyle(int style)
void setBuddy(QWidget *buddy)
void addLayout(QLayout *layout, int stretch)