You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.5 KiB
85 lines
2.5 KiB
/* |
|
* Button for selecting an image. |
|
* |
|
* Copyright (C) 2011 Martin Klapetek <martin.klapetek@gmail.com> |
|
* Copyright (C) 2011, 2012, 2014 David Edmundson <kde@davidedmundson.co.uk> |
|
* |
|
* This library is free software; you can redistribute it and/or |
|
* modify it under the terms of the GNU Lesser General Public |
|
* License as published by the Free Software Foundation; either |
|
* version 2.1 of the License, or (at your option) any later version. |
|
* |
|
* This library is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
* Lesser General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU Lesser General Public |
|
* License along with this library; if not, write to the Free Software |
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
|
*/ |
|
|
|
#include "selectimagebutton.h" |
|
|
|
#include <QWidgetAction> |
|
|
|
#include <QUrl> |
|
#include <QFileDialog> |
|
#include <QMenu> |
|
|
|
#include <KLocalizedString> |
|
#include <KMessageBox> |
|
|
|
SelectImageButton::SelectImageButton(QWidget *parent) |
|
: QToolButton(parent) |
|
{ |
|
QMenu *menu = new QMenu(this); |
|
|
|
setPopupMode(QToolButton::InstantPopup); |
|
|
|
setIconSize(QSize(64,64)); |
|
|
|
menu->addAction(QIcon::fromTheme(QLatin1String("document-open-folder")), i18n("Load from file..."), this, SLOT(onLoadImageFromFile())); |
|
menu->addAction(QIcon::fromTheme(QLatin1String("edit-clear")), i18n("Clear Image"), this, SLOT(onClearImage())); |
|
setMenu(menu); |
|
|
|
onClearImage(); |
|
} |
|
|
|
SelectImageButton::~SelectImageButton() = default; |
|
|
|
void SelectImageButton::setImagePath(const QString &imagePath) |
|
{ |
|
m_imagePath = imagePath; |
|
|
|
QPixmap image(imagePath); |
|
if (!image.isNull()) { |
|
QIcon imageIcon; |
|
//scale oversized avatars to fit, but don't stretch smaller images |
|
imageIcon.addPixmap(image.scaled(iconSize().boundedTo(image.size()), Qt::KeepAspectRatio)); |
|
setIcon(imageIcon); |
|
} else { |
|
setIcon(QIcon::fromTheme(QLatin1String("image-x-generic"))); |
|
} |
|
Q_EMIT imagePathChanged(m_imagePath); |
|
} |
|
|
|
QString SelectImageButton::imagePath() const |
|
{ |
|
return m_imagePath; |
|
} |
|
|
|
|
|
void SelectImageButton::onLoadImageFromFile() |
|
{ |
|
QUrl fileUrl = QFileDialog::getOpenFileUrl(this, i18n("Select image"), QUrl(), "image/*", 0, 0, QStringList() << "file"); |
|
|
|
if (!fileUrl.isEmpty()) { |
|
setImagePath(fileUrl.path()); |
|
} |
|
} |
|
|
|
void SelectImageButton::onClearImage() |
|
{ |
|
setImagePath(QString()); |
|
}
|
|
|