Project

General

Profile

WFileUploader and wfcgid » GImageUploader.cpp

Code file - Marcelo Antunes, 06/26/2020 01:55 PM

 
#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;
}


(2-2/2)