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 )
43 QVBoxLayout *lay =
new QVBoxLayout( q );
44 QHBoxLayout *hbox =
new QHBoxLayout;
45 QLabel *lab =
new QLabel( i18n(
"Image Location:" ) );
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)) );
58 hbox->addWidget( lab );
59 hbox->addWidget( imageUrlRequester );
60 lab->setBuddy( imageUrlRequester );
61 lay->addLayout( hbox );
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 );
67 lay->addWidget( keepOriginalSize );
69 keepImageRatio =
new QCheckBox( i18n(
"Keep Image Ratio" ) );
70 keepImageRatio->setChecked(
true );
71 keepImageRatio->setEnabled(
false );
72 lay->addWidget( keepImageRatio );
74 hbox =
new QHBoxLayout;
75 lab =
new QLabel( i18n(
"Width:" ) );
77 width->setMinimum( 1 );
78 width->setMaximum( 99999 );
79 width->setEnabled(
false );
80 width->setSuffix( i18n(
" px" ) );
81 lab->setBuddy( width );
82 q->connect( width, SIGNAL(valueChanged(
int)),
83 q, SLOT(_k_slotImageWidthChanged(
int)) );
84 hbox->addWidget( lab );
85 hbox->addWidget( width );
86 lay->addLayout( hbox );
88 hbox =
new QHBoxLayout;
89 lab =
new QLabel( i18n(
"Height:" ) );
90 height =
new QSpinBox;
91 height->setMinimum( 1 );
92 height->setMaximum( 99999 );
93 height->setEnabled(
false );
94 height->setSuffix( i18n(
" px" ) );
95 lab->setBuddy( height );
96 q->connect( height, SIGNAL(valueChanged(
int)),
97 q, SLOT(_k_slotImageHeightChanged(
int)) );
98 hbox->addWidget( lab );
99 hbox->addWidget( height );
100 lay->addLayout( hbox );
102 KSeparator *sep =
new KSeparator;
103 lay->addWidget( sep );
105 hbox =
new QHBoxLayout;
106 lab =
new QLabel( i18n(
"Image Preview:"));
107 hbox->addWidget(lab);
108 preview =
new QLabel;
109 preview->setFrameStyle(QFrame::Box);
110 preview->setFixedSize(50,50);
111 hbox->addWidget(preview);
112 lay->addLayout( hbox );
115 void _k_slotKeepOriginalSizeClicked(
bool );
116 void _k_slotUrlChanged(
const QString & );
117 void _k_slotImageWidthChanged(
int );
118 void _k_slotImageHeightChanged(
int );
121 QCheckBox *keepOriginalSize;
122 QCheckBox *keepImageRatio;
125 KUrlRequester *imageUrlRequester;
127 InsertImageWidget *q;
130 void InsertImageWidgetPrivate::_k_slotKeepOriginalSizeClicked(
bool checked )
132 height->setEnabled( !checked );
133 width->setEnabled( !checked );
134 keepImageRatio->setEnabled( !checked );
136 _k_slotUrlChanged( imageUrlRequester->text() );
139 void InsertImageWidgetPrivate::_k_slotUrlChanged(
const QString &text )
141 QImage image( text );
142 if ( !image.isNull() ) {
143 height->setValue( image.height() );
144 width->setValue( image.width() );
146 imageRatio = (double)( (
double)image.height() / (double)image.width() );
147 preview->setPixmap(QPixmap::fromImage(image));
152 q->enableButtonOk( !text.isEmpty() );
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"