20 #include "insertimagewidget.h"
22 #include <KUrlRequester>
24 #include <KFileDialog>
26 #include <QVBoxLayout>
27 #include <QHBoxLayout>
35 namespace KPIMTextEdit
38 class InsertImageWidgetPrivate
41 InsertImageWidgetPrivate(InsertImageWidget *qq)
42 :imageRatio(-1), q( qq )
44 QVBoxLayout *lay =
new QVBoxLayout( q );
45 QHBoxLayout *hbox =
new QHBoxLayout;
46 QLabel *lab =
new QLabel( i18n(
"Image Location:" ) );
47 imageUrlRequester =
new KUrlRequester;
49 const QStringList mimetypes = KImageIO::mimeTypes( KImageIO::Reading );
50 imageUrlRequester->fileDialog()->setFilter( mimetypes.join( QLatin1String(
" " ) ) );
51 imageUrlRequester->fileDialog()->setOperationMode( KFileDialog::Other );
52 imageUrlRequester->fileDialog()->setCaption( i18n(
"Add Image" ) );
53 imageUrlRequester->fileDialog()->okButton()->setGuiItem( KGuiItem( i18n(
"&Add" ), QLatin1String(
"document-open" ) ) );
54 imageUrlRequester->fileDialog()->setMode( KFile::File );
55 q->connect( imageUrlRequester->lineEdit(), SIGNAL(textChanged(QString)), q, SLOT(_k_slotUrlChanged(QString)) );
57 hbox->addWidget( lab );
58 hbox->addWidget( imageUrlRequester );
59 lab->setBuddy( imageUrlRequester );
60 lay->addLayout( hbox );
62 keepOriginalSize =
new QCheckBox( i18n(
"Keep Original Size" ) );
63 q->connect( keepOriginalSize, SIGNAL(clicked(
bool)), q, SLOT(_k_slotKeepOriginalSizeClicked(
bool)) );
64 keepOriginalSize->setChecked(
true );
65 lay->addWidget( keepOriginalSize );
67 keepImageRatio =
new QCheckBox( i18n(
"Keep Image Ratio" ) );
68 keepImageRatio->setChecked(
true );
69 keepImageRatio->setEnabled(
false );
70 lay->addWidget( keepImageRatio );
72 hbox =
new QHBoxLayout;
73 lab =
new QLabel( i18n(
"Width:" ) );
75 width->setMinimum( 1 );
76 width->setMaximum( 99999 );
77 width->setEnabled(
false );
78 width->setSuffix( i18n(
" px" ) );
79 lab->setBuddy( width );
80 q->connect( width, SIGNAL(valueChanged(
int)), q, SLOT(_k_slotImageWidthChanged(
int)) );
81 hbox->addWidget( lab );
82 hbox->addWidget( width );
83 lay->addLayout( hbox );
85 hbox =
new QHBoxLayout;
86 lab =
new QLabel( i18n(
"Height:" ) );
87 height =
new QSpinBox;
88 height->setMinimum( 1 );
89 height->setMaximum( 99999 );
90 height->setEnabled(
false );
91 height->setSuffix( i18n(
" px" ) );
92 lab->setBuddy( height );
93 q->connect( height, SIGNAL(valueChanged(
int)), q, SLOT(_k_slotImageHeightChanged(
int)) );
94 hbox->addWidget( lab );
95 hbox->addWidget( height );
96 lay->addLayout( hbox );
99 void _k_slotKeepOriginalSizeClicked(
bool);
100 void _k_slotUrlChanged(
const QString&);
101 void _k_slotImageWidthChanged(
int);
102 void _k_slotImageHeightChanged(
int);
105 QCheckBox *keepOriginalSize;
106 QCheckBox *keepImageRatio;
109 KUrlRequester *imageUrlRequester;
110 InsertImageWidget *q;
113 void InsertImageWidgetPrivate::_k_slotKeepOriginalSizeClicked(
bool checked)
115 height->setEnabled( !checked );
116 width->setEnabled( !checked );
117 keepImageRatio->setEnabled( !checked );
119 _k_slotUrlChanged( imageUrlRequester->text() );
122 void InsertImageWidgetPrivate::_k_slotUrlChanged(
const QString& text)
124 q->enableButtonOk( !text.isEmpty() );
125 QImage image( text );
126 if ( !image.isNull() ) {
127 height->setValue( image.height() );
128 width->setValue( image.width() );
130 imageRatio = (double)( (
double)image.height() / (double)image.width() );
134 q->enableButtonOk(!text.isEmpty() && !image.isNull());
137 void InsertImageWidgetPrivate::_k_slotImageWidthChanged(
int value)
139 if ( keepImageRatio->isChecked() && !keepOriginalSize->isChecked() ) {
140 if ( imageRatio != -1 ) {
141 height->blockSignals(
true );
142 height->setValue( value * imageRatio );
143 height->blockSignals(
false );
148 void InsertImageWidgetPrivate::_k_slotImageHeightChanged(
int value)
150 if ( keepImageRatio->isChecked()&& !keepOriginalSize->isChecked() ) {
151 if ( imageRatio != -1 ) {
152 width->blockSignals(
true );
153 width->setValue( value / imageRatio );
154 width->blockSignals(
false );
159 InsertImageWidget::InsertImageWidget(QWidget *parent)
160 : QWidget(parent), d(new InsertImageWidgetPrivate(this))
164 InsertImageWidget::~InsertImageWidget()
169 int InsertImageWidget::imageWidth()
const
171 return d->width->value();
174 int InsertImageWidget::imageHeight()
const
176 return d->height->value();
179 void InsertImageWidget::setImageWidth(
int value)
181 d->width->setValue( value );
184 void InsertImageWidget::setImageHeight(
int value)
186 d->height->setValue( value );
189 KUrl InsertImageWidget::imageUrl()
const
191 return d->imageUrlRequester->url();
194 void InsertImageWidget::setImageUrl(
const KUrl&url)
196 d->imageUrlRequester->setUrl( url );
199 bool InsertImageWidget::keepOriginalSize()
const
201 return d->keepOriginalSize->isChecked();
207 #include "insertimagewidget.moc"