mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-13 18:04:34 -05:00
88f76c5fbb
Update PhotoItem members - remove excessive fields in Photo - add RsGxsFile to Photo - update ShareMode for Album - renamed photo.mThumbnail to mLowResImage Update Photo GUI - enable setting of AlbumExtra parameters. - added data for Ordering of photos - stop showing duplicates in PhotoSlideShow
205 lines
6.3 KiB
C++
205 lines
6.3 KiB
C++
/*******************************************************************************
|
|
* retroshare-gui/src/gui/PhotoShare/PhotoItem.cpp *
|
|
* *
|
|
* Copyright (C) 2012 by Robert Fernie <retroshare.project@gmail.com> *
|
|
* *
|
|
* This program is free software: you can redistribute it and/or modify *
|
|
* it under the terms of the GNU Affero General Public License as *
|
|
* published by the Free Software Foundation, either version 3 of the *
|
|
* License, or (at your option) any later version. *
|
|
* *
|
|
* This program 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 Affero General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU Affero General Public License *
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>. *
|
|
* *
|
|
*******************************************************************************/
|
|
|
|
#include <QMouseEvent>
|
|
#include <QBuffer>
|
|
#include <iostream>
|
|
#include <QLabel>
|
|
|
|
#include "PhotoItem.h"
|
|
#include "ui_PhotoItem.h"
|
|
|
|
PhotoItem::PhotoItem(PhotoShareItemHolder *holder, const RsPhotoPhoto &photo, QWidget *parent):
|
|
QWidget(parent),
|
|
ui(new Ui::PhotoItem), mHolder(holder), mPhotoDetails(photo)
|
|
{
|
|
mState = State::Existing;
|
|
|
|
ui->setupUi(this);
|
|
setSelected(false);
|
|
|
|
ui->lineEdit_PhotoGrapher->setEnabled(false);
|
|
ui->lineEdit_Title->setEnabled(false);
|
|
|
|
ui->editLayOut->removeWidget(ui->lineEdit_Title);
|
|
ui->editLayOut->removeWidget(ui->lineEdit_PhotoGrapher);
|
|
|
|
ui->lineEdit_Title->setVisible(false);
|
|
ui->lineEdit_PhotoGrapher->setVisible(false);
|
|
|
|
setUp();
|
|
|
|
ui->idChooser->setVisible(false);
|
|
}
|
|
|
|
PhotoItem::PhotoItem(PhotoShareItemHolder *holder, const QString& path, uint32_t order, QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::PhotoItem), mHolder(holder)
|
|
{
|
|
mState = State::New;
|
|
|
|
ui->setupUi(this);
|
|
|
|
mPhotoDetails.mOrder = order;
|
|
|
|
QPixmap qtn = QPixmap(path);
|
|
mLowResImage = qtn.scaled(512,512, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
|
|
|
ui->label_Thumbnail->setPixmap(qtn.scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
|
setSelected(false);
|
|
|
|
getLowResImage(mPhotoDetails.mLowResImage);
|
|
|
|
connect(ui->lineEdit_Title, SIGNAL(editingFinished()), this, SLOT(setTitle()));
|
|
connect(ui->lineEdit_PhotoGrapher, SIGNAL(editingFinished()), this, SLOT(setPhotoGrapher()));
|
|
|
|
ui->idChooser->loadIds(0, RsGxsId());
|
|
}
|
|
|
|
void PhotoItem::markForDeletion()
|
|
{
|
|
mState = State::Deleted;
|
|
setSelected(true); // to repaint with deleted scheme.
|
|
}
|
|
|
|
void PhotoItem::setSelected(bool selected)
|
|
{
|
|
mSelected = selected;
|
|
|
|
QString bottomColor;
|
|
switch(mState)
|
|
{
|
|
case State::New:
|
|
bottomColor = "#FFFFFF";
|
|
break;
|
|
case State::Existing:
|
|
bottomColor = "#888888";
|
|
break;
|
|
default:
|
|
case State::Deleted:
|
|
bottomColor = "#EE5555";
|
|
break;
|
|
}
|
|
|
|
if (mSelected)
|
|
{
|
|
ui->photoFrame->setStyleSheet("QFrame#photoFrame{border: 2px solid #9562B8;\nbackground: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #55EE55, stop: 1 " + bottomColor + ");\nborder-radius: 10px}");
|
|
}
|
|
else
|
|
{
|
|
ui->photoFrame->setStyleSheet("QFrame#photoFrame{border: 2px solid #CCCCCC;\nbackground: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #EEEEEE, stop: 1 " + bottomColor + ");\nborder-radius: 10px}");
|
|
}
|
|
update();
|
|
}
|
|
|
|
void PhotoItem::setTitle(){
|
|
|
|
mPhotoDetails.mMeta.mMsgName = ui->lineEdit_Title->text().toStdString();
|
|
}
|
|
|
|
void PhotoItem::setPhotoGrapher()
|
|
{
|
|
// mPhotoDetails.mPhotographer = ui->lineEdit_PhotoGrapher->text().toStdString();
|
|
}
|
|
|
|
const RsPhotoPhoto& PhotoItem::getPhotoDetails()
|
|
{
|
|
if (ui->idChooser->isVisible()) {
|
|
RsGxsId id;
|
|
switch (ui->idChooser->getChosenId(id)) {
|
|
case GxsIdChooser::KnowId:
|
|
case GxsIdChooser::NoId:
|
|
case GxsIdChooser::UnKnowId:
|
|
mPhotoDetails.mMeta.mAuthorId = id;
|
|
|
|
break;
|
|
case GxsIdChooser::None:
|
|
default:
|
|
break;
|
|
}//switch (ui->idChooser->getChosenId(id))
|
|
}//if (ui->idChooser->isVisible())
|
|
|
|
return mPhotoDetails;
|
|
}
|
|
|
|
PhotoItem::~PhotoItem()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void PhotoItem::setUp()
|
|
{
|
|
mTitleLabel = new QLabel();
|
|
mPhotoGrapherLabel = new QLabel();
|
|
|
|
mTitleLabel->setText(QString::fromStdString(mPhotoDetails.mMeta.mMsgName));
|
|
|
|
ui->editLayOut->addWidget(mPhotoGrapherLabel);
|
|
ui->editLayOut->addWidget(mTitleLabel);
|
|
|
|
updateImage(mPhotoDetails.mLowResImage);
|
|
}
|
|
|
|
bool PhotoItem::getLowResImage(RsGxsImage &image)
|
|
{
|
|
const QPixmap *tmppix = &mLowResImage;
|
|
|
|
QByteArray ba;
|
|
QBuffer buffer(&ba);
|
|
|
|
if(!tmppix->isNull())
|
|
{
|
|
buffer.open(QIODevice::WriteOnly);
|
|
tmppix->save(&buffer, "JPG");
|
|
image.copy((uint8_t *) ba.data(), ba.size());
|
|
return true;
|
|
}
|
|
|
|
image.clear();
|
|
return false;
|
|
}
|
|
|
|
void PhotoItem::updateImage(const RsGxsImage &image)
|
|
{
|
|
if (image.mData != NULL)
|
|
{
|
|
QPixmap qtn;
|
|
qtn.loadFromData(image.mData, image.mSize);
|
|
ui->label_Thumbnail->setPixmap(qtn.scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
|
mLowResImage = qtn;
|
|
}
|
|
}
|
|
|
|
void PhotoItem::mousePressEvent(QMouseEvent *event)
|
|
{
|
|
|
|
QPoint pos = event->pos();
|
|
|
|
std::cerr << "PhotoItem::mousePressEvent(" << pos.x() << ", " << pos.y() << ")";
|
|
std::cerr << std::endl;
|
|
|
|
if(mHolder)
|
|
mHolder->notifySelection(this);
|
|
else
|
|
setSelected(true);
|
|
|
|
QWidget::mousePressEvent(event);
|
|
}
|