/* This file is part of the KDE libraries Copyright (C) 2004 Antonio Larrosa #include #include #include #include #include #include #include class KPixmapRegionSelectorDialog::Private { public: Private(KPixmapRegionSelectorDialog * parent) : pixmapSelectorWidget( 0 ), q(parent) { } KPixmapRegionSelectorWidget *pixmapSelectorWidget; KPixmapRegionSelectorDialog *q; void init() { //When the image is rotated we need to enforce the maximum width&height into the //KPixmapRegionSelectorWidget; in order to avoid the dialog to get out of the screen q->connect(pixmapSelectorWidget, SIGNAL(pixmapRotated()), q, SLOT(_k_adjustPixmapSize())); } void _k_adjustPixmapSize() { if (pixmapSelectorWidget) { //Set maximum size for picture QDesktopWidget desktopWidget; QRect screen = desktopWidget.availableGeometry(); pixmapSelectorWidget->setMaximumWidgetSize( (int)(screen.width()*4.0/5), (int)(screen.height()*4.0/5)); } } }; KPixmapRegionSelectorDialog::KPixmapRegionSelectorDialog( QWidget *parent ) : KDialog( parent ), d( new Private(this) ) { setCaption( i18n("Select Region of Image") ); setButtons( Help|Ok|Cancel ); KVBox *vbox=new KVBox(this); new QLabel(i18n("Please click and drag on the image to select the region of interest:"), vbox); d->pixmapSelectorWidget= new KPixmapRegionSelectorWidget(vbox); vbox->setSpacing( -1 ); setMainWidget(vbox); d->init(); } KPixmapRegionSelectorDialog::~KPixmapRegionSelectorDialog() { delete d; } KPixmapRegionSelectorWidget *KPixmapRegionSelectorDialog::pixmapRegionSelectorWidget() const { return d->pixmapSelectorWidget; } void KPixmapRegionSelectorDialog::adjustRegionSelectorWidgetSizeToFitScreen() { d->_k_adjustPixmapSize(); } QRect KPixmapRegionSelectorDialog::getSelectedRegion(const QPixmap &pixmap, QWidget *parent ) { KPixmapRegionSelectorDialog dialog(parent); dialog.pixmapRegionSelectorWidget()->setPixmap(pixmap); dialog.adjustRegionSelectorWidgetSizeToFitScreen(); int result = dialog.exec(); QRect rect; if ( result == QDialog::Accepted ) rect = dialog.pixmapRegionSelectorWidget()->unzoomedSelectedRegion(); return rect; } QRect KPixmapRegionSelectorDialog::getSelectedRegion(const QPixmap &pixmap, int aspectRatioWidth, int aspectRatioHeight, QWidget *parent ) { KPixmapRegionSelectorDialog dialog(parent); dialog.pixmapRegionSelectorWidget()->setPixmap(pixmap); dialog.pixmapRegionSelectorWidget()->setSelectionAspectRatio(aspectRatioWidth,aspectRatioHeight); dialog.adjustRegionSelectorWidgetSizeToFitScreen(); int result = dialog.exec(); QRect rect; if ( result == QDialog::Accepted ) rect = dialog.pixmapRegionSelectorWidget()->unzoomedSelectedRegion(); return rect; } QImage KPixmapRegionSelectorDialog::getSelectedImage(const QPixmap &pixmap, QWidget *parent ) { KPixmapRegionSelectorDialog dialog(parent); dialog.pixmapRegionSelectorWidget()->setPixmap(pixmap); dialog.adjustRegionSelectorWidgetSizeToFitScreen(); int result = dialog.exec(); QImage image; if ( result == QDialog::Accepted ) image = dialog.pixmapRegionSelectorWidget()->selectedImage(); return image; } QImage KPixmapRegionSelectorDialog::getSelectedImage(const QPixmap &pixmap, int aspectRatioWidth, int aspectRatioHeight, QWidget *parent ) { KPixmapRegionSelectorDialog dialog(parent); dialog.pixmapRegionSelectorWidget()->setPixmap(pixmap); dialog.pixmapRegionSelectorWidget()->setSelectionAspectRatio(aspectRatioWidth,aspectRatioHeight); dialog.adjustRegionSelectorWidgetSizeToFitScreen(); int result = dialog.exec(); QImage image; if ( result == QDialog::Accepted ) image = dialog.pixmapRegionSelectorWidget()->selectedImage(); return image; } #include "moc_kpixmapregionselectordialog.cpp"