diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.rc b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.rc new file mode 100644 index 000000000..01b710c0a --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.rc @@ -0,0 +1,110 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource1.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) (unknown sub-lang: 0x10) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENN) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, 0x10 +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource1.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON1 ICON "stegosaurus.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "400904b0" + BEGIN + VALUE "FileDescription", "StegoSaurus Exe" + VALUE "FileVersion", "1, 0, 0, 1" + VALUE "InternalName", "StegoSaurus" + VALUE "LegalCopyright", "Copyright (C) 2009" + VALUE "OriginalFilename", "StegoSaurus.exe" + VALUE "ProductName", "StegoSaurus" + VALUE "ProductVersion", "1, 0, 0, 1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x4009, 1200 + END +END + +#endif // English (U.S.) (unknown sub-lang: 0x10) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.vcproj b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.vcproj new file mode 100644 index 000000000..8460fb99f --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurus.vcproj @@ -0,0 +1,469 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.cpp b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.cpp new file mode 100644 index 000000000..91f9bb5ab --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.cpp @@ -0,0 +1,32 @@ +//#include +//#include +//#include + +#include "StegoSaurusPlugin.h" +#include "stegosaurus.h" + +QString +StegoSaurusPlugin::pluginDescription() const +{ + QString res; + res = "a StegoSaurus plugin" ; + + return res; +} + +QString +StegoSaurusPlugin::pluginName() const +{ + return "StegoSaurus" ; +} + +QWidget* +StegoSaurusPlugin::pluginWidget(QWidget * parent ) +{ + StegoSaurus* window = new StegoSaurus(parent); + + return window; +} + + +Q_EXPORT_PLUGIN2(stegosaurus_plugin, StegoSaurusPlugin) diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.h b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.h new file mode 100644 index 000000000..952d7485d --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/StegoSaurusPlugin.h @@ -0,0 +1,27 @@ +#ifndef _STEGOSAURUS_PLUGIN_H_ +#define _STEGOSAURUS_PLUGIN_H_ + +#include + +#include +#include + +#include + +#include + +class StegoSaurusPlugin: public QObject, public PluginInterface +{ + Q_OBJECT + Q_INTERFACES(PluginInterface) + + public slots: + + virtual QString pluginDescription() const ; + virtual QString pluginName() const ; + + virtual QWidget* pluginWidget(QWidget * parent = 0) ; + +}; + +#endif diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/Thumbs.db b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/Thumbs.db new file mode 100644 index 000000000..d105b265a Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/Thumbs.db differ diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-128x128.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-128x128.png new file mode 100644 index 000000000..b89abe308 Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-128x128.png differ diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-16x16.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-16x16.png new file mode 100644 index 000000000..ebc99d621 Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-16x16.png differ diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-256x256.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-256x256.png new file mode 100644 index 000000000..96e6e080a Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-256x256.png differ diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-32x32.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-32x32.png new file mode 100644 index 000000000..2954b2013 Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-32x32.png differ diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-48x48.png b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-48x48.png new file mode 100644 index 000000000..262b469cc Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/images/stegosaurus-48x48.png differ diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/main.cpp b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/main.cpp new file mode 100644 index 000000000..232cf924e --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/main.cpp @@ -0,0 +1,15 @@ +/**************************************************************************** +***************************Author: Agnit Sarkar****************************** +**************************CopyRight: April 2009****************************** +********************* Email: agnitsarkar@yahoo.co.uk************************* +****************************************************************************/ +#include +#include "stegosaurus.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + StegoSaurus w; + w.show(); + return a.exec(); +} diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource.h b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource.h new file mode 100644 index 000000000..d5b430124 --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by StegoSaurus.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource1.h b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource1.h new file mode 100644 index 000000000..fb80c0dda --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/resource1.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by StegoSaurus.rc +// +#define IDI_ICON1 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.cpp b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.cpp new file mode 100644 index 000000000..6a00261e7 --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.cpp @@ -0,0 +1,453 @@ +/**************************************************************************** +***************************Author: Agnit Sarkar****************************** +**************************CopyRight: April 2009****************************** +********************* Email: agnitsarkar@yahoo.co.uk************************* +****************************************************************************/ +#include "stegosaurus.h" + +StegoSaurus::StegoSaurus(QWidget *parent, Qt::WFlags flags) + : QDialog(parent, flags) +{ + ui.setupUi(this); + setWindowOpacity(0.5); + bitsAvailable=0; + sizeofData=0; + inputFileSize=0; +} + +StegoSaurus::~StegoSaurus() +{ + +} + + +void StegoSaurus::on_btnDryImg_clicked() +{ + static QString srcImgFileName="/home/"; + srcImgFileName= QFileDialog::getOpenFileName(this, "Open Bitmap", srcImgFileName, "Bitmap Files(*.bmp)"); + + if(srcImgFileName.isEmpty()){ + ui.lblDryImgDisplay->setText("

Drag Image Here

OR

Select it by browsing

(BMP Images only)

"); + ui.lblDryImgDisplay->setPixmap(QPixmap(":/StegoSaurus/images/stegosaurus-256x256.png")); + bitsAvailable=0; + ui.txtDryImg->setText(""); + ui.lblDryImgInfo->setText("No image Loaded"); + return; + } + setDryImage(srcImgFileName); + +} + +void StegoSaurus::on_btnFiletoHide_clicked() +{ + static QString srcFileName="/home/"; + srcFileName= QFileDialog::getOpenFileName(this, "Open file to hide", srcFileName); + + if(srcFileName.isEmpty()){ + inputFileSize=0; + ui.txtFiletoHide->setText(""); + ui.lblFiletoHideinfo->setText("No file loaded"); + return; + } + + //Get File information + QFileInfo fi= QFileInfo(srcFileName); + inputFileSize= fi.size(); + ui.txtFiletoHide->setText(srcFileName); + ui.lblFiletoHideinfo->setText(QString("Size=%L1 bytes").arg(inputFileSize)); + +} + +void StegoSaurus::resizeEvent(QResizeEvent * event) +{ + //Set the label image + if(ui.txtDryImg->text().isEmpty()) + return; + QPixmap pixmap(ui.txtDryImg->text()); + pixmap= pixmap.scaledToHeight(ui.lblDryImgDisplay->height()); + ui.lblDryImgDisplay->setPixmap(pixmap); + + QPixmap pixmap2(ui.txtWetImg->text()); + pixmap2= pixmap2.scaledToHeight(ui.lblWetImgDisplay->height()); + ui.lblWetImgDisplay->setPixmap(pixmap2); +} + +void StegoSaurus::on_btnWetImg_clicked() +{ + static QString srcImgFileName="/home/"; + srcImgFileName= QFileDialog::getOpenFileName(this, "Open Bitmap", srcImgFileName, "Bitmap Files(*.bmp)"); + + if(srcImgFileName.isEmpty()){ + ui.lblWetImgDisplay->setText("

Drag Image Here

OR

Select it by browsing

(BMP Images only)

"); + ui.lblWetImgDisplay->setPixmap(QPixmap(":/StegoSaurus/images/stegosaurus-256x256.png")); + ui.lblWetImgInfo->setText("No image loaded"); + ui.txtWetImg->setText(""); + sizeofData=0; + return; + } + + setWetImage(srcImgFileName); + +} +void StegoSaurus::setDryImage(const QString &srcImgFileName) +{ + //Get file info + dryImage= new QImage(srcImgFileName); + unsigned int height= dryImage->height(); + unsigned int width= dryImage->width(); + int depth= dryImage->depth(); + //Check the depth, and return if it is not 24-bit + if(depth<24){ + QMessageBox::information(this, "StegoSaurus", "Must be 24-bit bitmap."); + ui.txtDryImg->setText(""); + ui.lblDryImgInfo->setText("No image Loaded"); + return; + } + + //Set the label image + QPixmap pixmap(srcImgFileName); + pixmap= pixmap.scaledToHeight(ui.lblDryImgDisplay->height()); + ui.lblDryImgDisplay->setPixmap(pixmap); + bitsAvailable= height*width*3; + + ui.txtDryImg->setText(srcImgFileName); + + if(bitsAvailable){ + ui.lblDryImgInfo->setText(QString("Height= %L1 Width=%L2 Free Space=%L3 bytes").arg(height) + .arg(width).arg(bitsAvailable/8)); + }else{ + ui.lblDryImgInfo->setText("No room for data"); + qApp->beep(); + } +} +void StegoSaurus::setWetImage(const QString &srcImgFileName) +{ + //Get file info + wetImage= new QImage(srcImgFileName); + unsigned int height= wetImage->height(); + unsigned int width= wetImage->width(); + int depth= wetImage->depth(); + + //Check the depth, and return if it is not 24-bit + if(depth<24){ + QMessageBox::information(this, "StegoSaurus", "Must be 24-bit bitmap."); + ui.txtWetImg->setText(""); + ui.lblWetImgInfo->setText("No image Loaded"); + return; + } + + //Set the label image + QPixmap pixmap(srcImgFileName); + pixmap= pixmap.scaledToHeight(ui.lblWetImgDisplay->height()); + ui.lblWetImgDisplay->setPixmap(pixmap); + + //Read the size of the embeded data + QFile imgFile(srcImgFileName); + if (!imgFile.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this, "StegoSaurus", "Unable to open bitmap file."); + return; + } + if(imgFile.seek(6)){ + imgFile.read((char *)&sizeofData, 4); + }else{ + QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file."); + return; + } + + ui.txtWetImg->setText(srcImgFileName); + + if(sizeofData){ + ui.lblWetImgInfo->setText(QString("Height= %L1 Width=%L2 Probable Size of Data=%L3 bytes").arg(height) + .arg(width).arg(sizeofData)); + }else{ + ui.lblWetImgInfo->setText("No data in image."); + qApp->beep(); + } +} + +//The drag and drop methods +void StegoSaurus::dragEnterEvent(QDragEnterEvent *event) +{ + if(ui.tabWidget->currentIndex()==2)return; + + if (event->mimeData()->hasFormat("text/uri-list")){ + QList urls = event->mimeData()->urls(); + if (urls.isEmpty()) + return; + QString fileName = urls.first().toLocalFile(); + //Check the extension + if (fileName.isEmpty()||!fileName.endsWith(".bmp", Qt::CaseInsensitive)) + return; + event->acceptProposedAction(); + } +} + +void StegoSaurus::dropEvent(QDropEvent *event) +{ + QList urls = event->mimeData()->urls(); + if (urls.isEmpty()) + return; + QString fileName = urls.first().toLocalFile(); + if (fileName.isEmpty()) + return; + + switch(ui.tabWidget->currentIndex()){ + case 0: + setDryImage(fileName); + break; + case 1: + setWetImage(fileName); + break; + default: + break; + } + +} + +//The hide methods +void StegoSaurus::on_btnHide_clicked() +{ + //Get the filenames + QString imgFileName= ui.txtDryImg->text(); + QString inputFileName= ui.txtFiletoHide->text(); + //Check if both image file and data file has been selected + if(imgFileName.isEmpty()||inputFileName.isEmpty()){ + QMessageBox::information(this, "StegoSaurus", "Please select a bitmap image and a data file."); + return; + } + //Now check if size of the data file is less than that of the space available + if(inputFileSize*8>bitsAvailable){ + QMessageBox::information(this, "StegoSaurus", "Not enough space available in image to hide the data."); + return; + } + static QString targetImgName="/home/"; + targetImgName= QFileDialog::getSaveFileName(this, "Save bitmap with data to", targetImgName, "Bitmap Files(*.bmp)"); + + if(targetImgName.isEmpty())return; + + //If an image file with the same name exists delete it and then copy, unless source and target are same + if(imgFileName!=inputFileName){ + QFile::remove(targetImgName); + QFile::copy(imgFileName, targetImgName); + } + + //Calculate the no. of padding bytes + unsigned int width= dryImage->width(); + unsigned int padding=0; + if((width*3)%4==0) + padding=0; + unsigned int quotient= (width*3)/4; + padding= 4*(quotient+1)- width*3; + + /////////////////////////////////Hide the data//////////////////////////////////////////// + QFile inputFile(inputFileName); + if (!inputFile.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this, "StegoSaurus", "Unable to open data file for reading."); + return; + } + + //Stamp the size of the data file to the reserved bytes of the image file + QFile imgOutputFile(targetImgName); + if (!imgOutputFile.open(QIODevice::ReadWrite)){ + QMessageBox::warning(this, "StegoSaurus", "Unable to open bitmap file."); + return; + } + if(imgOutputFile.seek(6)){ + imgOutputFile.write((char *)&inputFileSize, 4); + }else{ + QMessageBox::warning(this, "StegoSaurus", "Unable to write to bitmap file."); + return; + } + //Read the dataoffset of the bitmap + unsigned int dataoffset=0; + if(imgOutputFile.seek(10)){ + imgOutputFile.read((char *)&dataoffset, 4); + }else{ + QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file."); + return; + } + + //Move by dataoffset bytes + if(!imgOutputFile.seek(dataoffset)){ + QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file."); + return; + } + QProgressDialog progress("Embedding Data", "Cancel", 0, inputFileSize, this); + progress.show(); + unsigned int progresscount=0; + unsigned int countBytes=0; + while (!inputFile.atEnd()){ + //Read a byte + unsigned char dataByte=0; + inputFile.getChar((char *)&dataByte); + + //Store each bit of the data byte in 1 byte of the image pixel + //starting with the MSB + for(int i=7; i>=0; i--){ + //Get the bit at position i in the data byte + unsigned char checkByte= 0x01; + checkByte= checkByte<>i; + + unsigned char imageByte=0; + //To ignore the padding bytes + if(countBytes>=width*3){ + countBytes= 0; + //Advance the read pointer + for(int j=0; jtext(); + + //Check image file has been selected + if(imgFileName.isEmpty()){ + QMessageBox::information(this, "StegoSaurus", "Please select a bitmap image."); + return; + } + + static QString targetFileName="/home/"; + targetFileName= QFileDialog::getSaveFileName(this, "Save recovered data to", targetFileName, "All Files(*.*)"); + + if(targetFileName.isEmpty())return; + + //If a file with the same name exists delete it + QFile::remove(targetFileName); + + //Calculate the no. of padding bytes + unsigned int width= wetImage->width(); + unsigned int padding=0; + if((width*3)%4==0) + padding=0; + unsigned int quotient= (width*3)/4; + padding= 4*(quotient+1)- width*3; + + /////////////////////////////////Recover the data//////////////////////////////////////////// + QFile targetFile(targetFileName); + if (!targetFile.open(QIODevice::WriteOnly)){ + QMessageBox::warning(this, "StegoSaurus", "Unable to open data file."); + return; + } + + QFile imgInputFile(imgFileName); + if (!imgInputFile.open(QIODevice::ReadOnly)){ + QMessageBox::warning(this, "StegoSaurus", "Unable to open bitmap file."); + return; + } + + //Read the dataoffset of the bitmap + unsigned int dataoffset=0; + if(imgInputFile.seek(10)){ + imgInputFile.read((char *)&dataoffset, 4); + }else{ + QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file."); + return; + } + + //Move by dataoffset bytes + if(!imgInputFile.seek(dataoffset)){ + QMessageBox::warning(this, "StegoSaurus", "Unable to read bitmap file."); + return; + } + + QProgressDialog progress("Recovering Data", "Cancel", 0, sizeofData, this); + progress.show(); + unsigned int progresscount=0; + unsigned int countBytes=0; + //Iterate to recover targetFileSize bytes + for(unsigned int byteNo= 0; byteNo< sizeofData; byteNo++){ + //construct each byte + unsigned char dataByte= 0x00; + for(int bitNo=7; bitNo>=0; bitNo--){ + unsigned char imageByte=0xFF; + //To ignore the padding bytes + if(countBytes>=width*3){ + countBytes= 0; + //Advance the read pointer + for(int j=0; j +#include "ui_stegosaurus.h" + +class StegoSaurus : public QDialog +{ + Q_OBJECT + +public: + StegoSaurus(QWidget *parent = 0, Qt::WFlags flags = 0); + ~StegoSaurus(); + +protected: + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); + +private: + void resizeEvent ( QResizeEvent *); + Ui::StegoSaurusClass ui; + QImage *dryImage, *wetImage; + unsigned int bitsAvailable, inputFileSize, sizeofData; + + void setDryImage(const QString &); + void setWetImage(const QString &); + +private slots: + + void on_btnWetImg_clicked(); + void on_btnFiletoHide_clicked(); + void on_btnDryImg_clicked(); + + //The hide method + void on_btnHide_clicked(); + //The recover method + void on_btnRecover_clicked(); +}; + +#endif // STEGOSAURUS_H diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ico b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ico new file mode 100644 index 000000000..5b5d38a89 Binary files /dev/null and b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ico differ diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.qrc b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.qrc new file mode 100644 index 000000000..32b23abbb --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.qrc @@ -0,0 +1,9 @@ + + + images/stegosaurus-128x128.png + images/stegosaurus-16x16.png + images/stegosaurus-256x256.png + images/stegosaurus-32x32.png + images/stegosaurus-48x48.png + + diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ui b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ui new file mode 100644 index 000000000..7bb9f9308 --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus.ui @@ -0,0 +1,1615 @@ + + + StegoSaurusClass + + + + 0 + 0 + 599 + 451 + + + + false + + + StegoSaurus 1.0 + + + + :/StegoSaurus/images/stegosaurus-16x16.png:/StegoSaurus/images/stegosaurus-16x16.png + + + + + + false + + + 0 + + + + Hide + + + + + + + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:x-large;">Drag Image Here<br /><br />OR<br /><br />Select it by browsing<br /><br />(BMP Images only)</span></p></body></html> + + + true + + + QFrame::StyledPanel + + + QFrame::Plain + + + + + + :/StegoSaurus/images/stegosaurus-256x256.png + + + Qt::AlignCenter + + + + + + + Bitmap Image + + + + + + + false + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">The path of the dry image</span></p></body></html> + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Select the dry image</span></p></body></html> + + + Browse + + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Shows dry image info</span></p></body></html> + + + QFrame::StyledPanel + + + No image loaded + + + + + + + File to Embed + + + + + + + false + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Path of the file to be hidden</span></p></body></html> + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Select the file to be hidden</span></p></body></html> + + + Browse + + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Shows file info</span></p></body></html> + + + QFrame::StyledPanel + + + No file loaded + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Hit this to hide the file into the bitmap image</span></p></body></html> + + + Hide Data + + + + + + + + Recover + + + + + + + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:x-large;">Drag Image Here<br /><br />OR<br /><br />Select it by browsing<br /><br />(BMP Images only)</span></p></body></html> + + + true + + + QFrame::StyledPanel + + + QFrame::Plain + + + + + + :/StegoSaurus/images/stegosaurus-256x256.png + + + Qt::AlignCenter + + + + + + + Bitmap Image + + + + + + + false + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:12pt; font-weight:600;">The path of the wet image</span></p></body></html> + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:11pt; font-weight:600;">Select the wet image</span></p></body></html> + + + Browse + + + + + + + + 0 + 0 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Shows wet image info</span></p></body></html> + + + QFrame::StyledPanel + + + No image loaded + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Hit this to recover data from the bitmap image</span></p></body></html> + + + Recover Data + + + + + + + + About + + + + + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/StegoSaurus/images/stegosaurus-128x128.png" /></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600; color:#5500ff;">Stegosaurus v 1.0</span></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; color:#5500ff;">Designed by:</span></p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; color:#5500ff;"></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600; color:#5500ff;">Agnit Sarkar</span></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; color:#5500ff;">(April 2009)</span></p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; color:#5500ff;"></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; color:#5500ff;">Email:</span></p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; color:#5500ff;"></p> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="mailto:agnitsarkar@yahoo.co.uk"><span style=" font-size:12pt; text-decoration: underline; color:#5500ff;">agnitsarkar@yahoo.co.uk</span></a></p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-style:italic; color:#5500ff;"></p></body></html> + + + Qt::AlignCenter + + + true + + + + + + + + + + + + + + + diff --git a/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus_plugin.pro b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus_plugin.pro new file mode 100644 index 000000000..1b67fe78f --- /dev/null +++ b/retroshare-gui/src/gui/plugins/stegosaurus_plugin/stegosaurus_plugin.pro @@ -0,0 +1,29 @@ +#=== this part is common (similar) for all plugin projects ===================== +TEMPLATE = lib +CONFIG += plugin release + +# this is directory, where PluginInterface.h is located +INCLUDEPATH += ../ + +# and, the result (*.so or *.dll) should appear in this directory +DESTDIR = ../bin +OBJECTS_DIR = temp/obj +RCC_DIR = temp/qrc +UI_DIR = temp/ui +MOC_DIR = temp/moc + + +# the name of the result file; +TARGET = $$qtLibraryTarget(stegosaurus_plugin) + +HEADERS += ../PluginInterface.h \ + StegoSaurusPlugin.h +SOURCES += StegoSaurusPlugin.cpp + +#=============================================================================== + +# Input +HEADERS += resource.h resource1.h stegosaurus.h +FORMS += stegosaurus.ui +SOURCES += main.cpp stegosaurus.cpp +RESOURCES += stegosaurus.qrc