|
#include "GImageUploader.h"
|
|
#include <Wt/WImage.h>
|
|
#include <Wt/WFileUpload.h>
|
|
#include <Wt/WPushButton.h>
|
|
#include <Wt/WApplication.h>
|
|
#include "GImage.h"
|
|
|
|
#include <Wt/WMemoryResource.h>
|
|
|
|
GImageUploader::GImageUploader(QByteArray imageDefault)
|
|
{
|
|
mimageDefault=imageDefault;
|
|
|
|
//#ifndef NOGATEWAY
|
|
this->setStyleClass("image-input-wrapper");
|
|
image=this->addWidget(std::make_unique<Wt::WImage>());
|
|
image->setStyleClass("rounded-circle");
|
|
image->setWidth(Wt::WLength(100,Wt::LengthUnit::Pixel));
|
|
image->setHeight(Wt::WLength(100,Wt::LengthUnit::Pixel));
|
|
//#endif
|
|
|
|
edit=this->addWidget(std::make_unique<Wt::WPushButton>("edit image"));
|
|
edit->setStyleClass("btn btn-edit-image");
|
|
|
|
del=this->addWidget(std::make_unique<Wt::WPushButton>("del image"));
|
|
del->setStyleClass("btn btn-del-image");
|
|
del->setHidden(true);
|
|
|
|
fileUploader=this->addWidget(std::make_unique<Wt::WFileUpload>());
|
|
fileUploader->setDisplayWidget(edit);
|
|
fileUploader->setMultiple(false);
|
|
fileUploader->setFilters("image/*");
|
|
fileUploader->setHidden(true);
|
|
|
|
auto imageResource = std::make_shared<Wt::WMemoryResource>("image/*");
|
|
std::string imageByteString=imageDefault.toStdString();
|
|
unsigned char imageUChar[imageByteString.size()];
|
|
std::copy( imageByteString.begin(), imageByteString.end(), imageUChar );
|
|
imageUChar[imageByteString.length()] = 0;
|
|
imageResource->setData(imageUChar, sizeof(imageUChar));
|
|
image->setImageLink(Wt::WLink(imageResource));
|
|
|
|
fileUploader->changed().connect([=] {
|
|
fileUploader->upload();
|
|
});
|
|
|
|
fileUploader->uploaded().connect([=] {
|
|
fileUploader->stealSpooledFile();
|
|
if(fileUploader->spoolFileName()!=Wt::WString::Empty){
|
|
QByteArray imgBArray=GImage::toQByteArray(fileUploader->spoolFileName());
|
|
setImage(imgBArray);
|
|
del->setHidden(false);
|
|
edit->setHidden(true);
|
|
mimage=imgBArray;
|
|
uploadedev_.emit(imgBArray);
|
|
}
|
|
});
|
|
|
|
fileUploader->fileTooLarge().connect([=] {
|
|
Wt::WApplication::instance()->log("IMG")<<"TOO LARGE";
|
|
});
|
|
|
|
|
|
del->clicked().connect([=] {
|
|
auto imageResource = std::make_shared<Wt::WMemoryResource>("image/*");
|
|
std::string imageByteString=imageDefault.toStdString();
|
|
unsigned char imageUChar[imageByteString.size()];
|
|
std::copy( imageByteString.begin(), imageByteString.end(), imageUChar );
|
|
imageUChar[imageByteString.length()] = 0;
|
|
imageResource->setData(imageUChar, sizeof(imageUChar));
|
|
image->setImageLink(Wt::WLink(imageResource));
|
|
del->setHidden(true);
|
|
edit->setHidden(false);
|
|
uploadedev_.emit(imageDefault);
|
|
mimage=mimageDefault;
|
|
});
|
|
}
|
|
|
|
void GImageUploader::setImage(QByteArray imageQBA){
|
|
mimage=imageQBA;
|
|
auto imageResource = std::make_shared<Wt::WMemoryResource>("image/*");
|
|
std::string imageByteString=imageQBA.toStdString();
|
|
unsigned char imageUChar[imageByteString.size()];
|
|
std::copy( imageByteString.begin(), imageByteString.end(), imageUChar );
|
|
imageUChar[imageByteString.length()] = 0;
|
|
imageResource->setData(imageUChar, sizeof(imageUChar));
|
|
image->setImageLink(Wt::WLink(imageResource));
|
|
}
|
|
|
|
void GImageUploader::setImageDefault(QByteArray imageQBA,bool replace){
|
|
mimageDefault=imageQBA;
|
|
if(replace){
|
|
auto imageResource = std::make_shared<Wt::WMemoryResource>("image/*");
|
|
std::string imageByteString=imageQBA.toStdString();
|
|
unsigned char imageUChar[imageByteString.size()];
|
|
std::copy( imageByteString.begin(), imageByteString.end(), imageUChar );
|
|
imageUChar[imageByteString.length()] = 0;
|
|
imageResource->setData(imageUChar, sizeof(imageUChar));
|
|
image->setImageLink(Wt::WLink(imageResource));
|
|
}
|
|
}
|
|
|
|
QByteArray GImageUploader::getImage(){
|
|
return mimage;
|
|
}
|
|
|
|
|