From 9f318217a8904d8fe24f2a323dc7d89b181cfeb8 Mon Sep 17 00:00:00 2001 From: Sonaion Date: Thu, 21 Nov 2019 13:02:00 +0100 Subject: [PATCH] working versiom --- .gitignore | 9 + IntelliPhoto/IntelliPhoto/.gitignore | 73 ---- IntelliPhoto/IntelliPhoto/LayerManager.cpp | 128 ------- IntelliPhoto/IntelliPhoto/LayerManager.h | 73 ---- IntelliPhoto/IntelliPhoto/intelligui.cpp | 73 ---- IntelliPhoto/IntelliPhoto/intelligui.h | 42 --- IntelliPhoto/IntelliPhoto/layer.cpp | 32 -- IntelliPhoto/IntelliPhoto/layer.h | 35 -- IntelliPhoto/IntelliPhoto/main.cpp | 19 - .../Scribble.pro} | 14 +- IntelliPhoto/Scribble/Scribble.pro.user | 337 ++++++++++++++++++ .../Scribble/Scribble.pro.user.87de10b | 337 ++++++++++++++++++ IntelliPhoto/Scribble/main.cpp | 26 ++ IntelliPhoto/Scribble/mainwindow.cpp | 281 +++++++++++++++ IntelliPhoto/Scribble/mainwindow.h | 77 ++++ IntelliPhoto/Scribble/scribblearea.cpp | 171 +++++++++ IntelliPhoto/Scribble/scribblearea.h | 73 ++++ .../intelligui.ui => Scribble/widget.ui} | 12 +- .../usersjonasappdatalocaltemptmp0l4rts | 0 .../usersjonasappdatalocaltemptmpcvzqoi | 0 .../usersjonasappdatalocaltemptmpqakvqm | 0 .../usersjonasappdatalocaltemptmpu6gfxp | 0 22 files changed, 1321 insertions(+), 491 deletions(-) create mode 100644 .gitignore delete mode 100644 IntelliPhoto/IntelliPhoto/.gitignore delete mode 100644 IntelliPhoto/IntelliPhoto/LayerManager.cpp delete mode 100644 IntelliPhoto/IntelliPhoto/LayerManager.h delete mode 100644 IntelliPhoto/IntelliPhoto/intelligui.cpp delete mode 100644 IntelliPhoto/IntelliPhoto/intelligui.h delete mode 100644 IntelliPhoto/IntelliPhoto/layer.cpp delete mode 100644 IntelliPhoto/IntelliPhoto/layer.h delete mode 100644 IntelliPhoto/IntelliPhoto/main.cpp rename IntelliPhoto/{IntelliPhoto/IntelliPhoto.pro => Scribble/Scribble.pro} (86%) create mode 100644 IntelliPhoto/Scribble/Scribble.pro.user create mode 100644 IntelliPhoto/Scribble/Scribble.pro.user.87de10b create mode 100644 IntelliPhoto/Scribble/main.cpp create mode 100644 IntelliPhoto/Scribble/mainwindow.cpp create mode 100644 IntelliPhoto/Scribble/mainwindow.h create mode 100644 IntelliPhoto/Scribble/scribblearea.cpp create mode 100644 IntelliPhoto/Scribble/scribblearea.h rename IntelliPhoto/{IntelliPhoto/intelligui.ui => Scribble/widget.ui} (51%) delete mode 100644 IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmp0l4rts delete mode 100644 IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpcvzqoi delete mode 100644 IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpqakvqm delete mode 100644 IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpu6gfxp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..73e7536 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ + +IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmp0l4rts +IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmp0l4rts +IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmp0l4rts +IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpcvzqoi +IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpu6gfxp +IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpqakvqm +IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpcvzqoi +IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmp0l4rts diff --git a/IntelliPhoto/IntelliPhoto/.gitignore b/IntelliPhoto/IntelliPhoto/.gitignore deleted file mode 100644 index fab7372..0000000 --- a/IntelliPhoto/IntelliPhoto/.gitignore +++ /dev/null @@ -1,73 +0,0 @@ -# This file is used to ignore files which are generated -# ---------------------------------------------------------------------------- - -*~ -*.autosave -*.a -*.core -*.moc -*.o -*.obj -*.orig -*.rej -*.so -*.so.* -*_pch.h.cpp -*_resource.rc -*.qm -.#* -*.*# -core -!core/ -tags -.DS_Store -.directory -*.debug -Makefile* -*.prl -*.app -moc_*.cpp -ui_*.h -qrc_*.cpp -Thumbs.db -*.res -*.rc -/.qmake.cache -/.qmake.stash - -# qtcreator generated files -*.pro.user* - -# xemacs temporary files -*.flc - -# Vim temporary files -.*.swp - -# Visual Studio generated files -*.ib_pdb_index -*.idb -*.ilk -*.pdb -*.sln -*.suo -*.vcproj -*vcproj.*.*.user -*.ncb -*.sdf -*.opensdf -*.vcxproj -*vcxproj.* - -# MinGW generated files -*.Debug -*.Release - -# Python byte code -*.pyc - -# Binaries -# -------- -*.dll -*.exe - diff --git a/IntelliPhoto/IntelliPhoto/LayerManager.cpp b/IntelliPhoto/IntelliPhoto/LayerManager.cpp deleted file mode 100644 index 20cd902..0000000 --- a/IntelliPhoto/IntelliPhoto/LayerManager.cpp +++ /dev/null @@ -1,128 +0,0 @@ -#include "LayerManager.h" - -LayerManager::LayerManager(){ - //setup the label for the image - this->imgLabel = new QLabel(""); -} - -LayerManager::~LayerManager(){ - delete this->imgLabel; - for(auto element:Ebenen){ - delete element; - } -} - -int LayerManager::getLayerCount(){ - return static_cast(this->Ebenen.size()); -} - -void LayerManager::setLayerVisbility(int idx, int alpha){ - //current alpha is ignored, just one image is shown - //all images should hold on to their current alpha - for(auto &element: this->MetaEbenen){ - element.a=0; - } - MetaEbenen[static_cast(idx)].a=255; -} - -void LayerManager::activateLayer(int idx){ - //all images should blurr an active layer should show - for(auto& element: this->MetaEbenen){ - element.a = 0; - } - MetaEbenen[static_cast(idx)].a=255; -} - -void LayerManager::goLayerUp(){ - //at current state, sets the alpha of the higher one up - for(size_t i=0; i(this->getLayerCount()); i++){ - if(this->MetaEbenen[i].a==255){ - if(i==static_cast(this->getLayerCount())-1){ - return; - } - MetaEbenen[i].a=0; - MetaEbenen[i+1].a=255; - return; - } - } -} - -void LayerManager::goLayerDown(){ - //at current state, sets the alpha of the higher one down - for(size_t i=0; i(this->getLayerCount()); i++){ - if(this->MetaEbenen[i].a==255){ - if(i==0){ - return; - } - MetaEbenen[i].a=0; - MetaEbenen[i-1].a=255; - return; - } - } -} - -void LayerManager::AddLayerAfer(int idx){ - //layer dimension needs to be asked, maybe in seperat window - Layer* newLayer = new Layer(600,400); - - //hardcoded layer for test sake - for(int i=0; i<600; i++){ - for(int j=0; j<400; j++){ - newLayer->setPixel(i,j,255,0,0,255); - } - } - - for(int i=0; i<300; i++){ - for(int j = 0; j<5; j++) - newLayer->setPixel(i,j,0,255,255,255); - } - maxWidth=100; - maxHeight=100; - - - Ebenen.insert(Ebenen.begin()+idx, newLayer); - MetaEbenen.insert(MetaEbenen.begin()+idx, EbenenMetaDaten(0,0,0)); -} - -void LayerManager::DeleteLayer(int idx){ - Ebenen.erase(Ebenen.begin()+idx); - MetaEbenen.erase(MetaEbenen.begin()+idx); -} - -QLabel* LayerManager::getDisplayable(){ - - //Tranzparenz der Ebenen muss möglich sein - QPixmap aMap; - for(size_t i=0; i(this->getLayerCount()); i++){ - if(MetaEbenen[i].a==255){ - aMap = Ebenen[i]->getAsPixmap(); - break; - } - } - - this->imgLabel->setPixmap(aMap); - return imgLabel; -} - -void LayerManager::floodFillLayer(int r, int g, int b){ - for(size_t i=0; i< static_cast(this->getLayerCount()); i++){ - if(MetaEbenen[i].a==255){ - Ebenen[i]->floodFill(r,g,b); - this->UpdateLabel(); - return; - } - } -} - -void LayerManager::UpdateLabel(){ - //Tranzparenz der Ebenen muss möglich sein - QPixmap aMap; - for(size_t i=0; i(this->getLayerCount()); i++){ - if(MetaEbenen[i].a==255){ - aMap = Ebenen[i]->getAsPixmap(); - break; - } - } - - this->imgLabel->setPixmap(aMap); -} diff --git a/IntelliPhoto/IntelliPhoto/LayerManager.h b/IntelliPhoto/IntelliPhoto/LayerManager.h deleted file mode 100644 index e98ed76..0000000 --- a/IntelliPhoto/IntelliPhoto/LayerManager.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef CANVAS_H -#define CANVAS_H -#include"layer.h" - -#include -#include -#include - - - - -class LayerManager{ -private: - //Uses to handle the Meta Data of each layer in comparission to 'global' propteries - struct EbenenMetaDaten{ - unsigned int x; - unsigned int y; - unsigned int a; - EbenenMetaDaten(unsigned int x, unsigned int y, unsigned int a){ - this->x = x; - this->y = y; - this->a = a; - } - }; - //max width of the layer (max(EbenenMetaDaten.x+Layer.width)) - int maxWidth; - //max width of the layer (max(EbenenMetaDaten.y+Layer.height)) - int maxHeight; - - // The label where the image is shown - QLabel* imgLabel; - - //all the possible layers in one container - std::vector Ebenen; - - //all the meta data parallel to Ebenen Container - std::vector MetaEbenen; - - //updates the display - void UpdateLabel(); -public: - LayerManager(); - ~LayerManager(); - - //gets the count of layers - int getLayerCount(); - - //set one layer to a given alpha value - void setLayerVisbility(int idx, int alpha); - - //activates one layer to work on it - void activateLayer(int idx); - - //changes the active layer one up - void goLayerUp(); - - //changes the active layer one down - void goLayerDown(); - - //adds a new layer after (on top of) the given idx (-1 create bottom layer) - void AddLayerAfer(int idx); - - //delets a layer at the given index - void DeleteLayer(int idx); - - //fill active Layer - void floodFillLayer(int r, int g, int b); - - //returns the output ready label - QLabel* getDisplayable(); -}; - -#endif // CANVAS_H diff --git a/IntelliPhoto/IntelliPhoto/intelligui.cpp b/IntelliPhoto/IntelliPhoto/intelligui.cpp deleted file mode 100644 index 9f4d71e..0000000 --- a/IntelliPhoto/IntelliPhoto/intelligui.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include "intelligui.h" -#include "ui_intelligui.h" -#include "LayerManager.h" - -#include - -IntelliGUI::IntelliGUI(QWidget *parent) - : QMainWindow(parent), - ui(new Ui::IntelliGUI){ - ui->setupUi(this); - - //Setting up basic IntelliPhoto structure - this->EbenenManager = new LayerManager(); - - //Test Layer - this->EbenenManager->AddLayerAfer(0); - this->EbenenManager->activateLayer(0); - - //Setting up basic IntelliGui Structure - this->GUI = new QWidget(); - this->Layout = new QGridLayout(GUI); - this->setCentralWidget(GUI); - - //setup all gui elements down here - this->EinKnopf = new QPushButton("Ein Knopf"); - this->Red = new QLineEdit(); - this->Blue = new QLineEdit(); - this->Green = new QLineEdit(); - - //Manage signals and slots in here - QObject::connect(EinKnopf, SIGNAL(clicked()), this, SLOT(on_EinKnopf_clicked())); - - //Merge all gui elements to Layout down here - this->Layout->addWidget(this->EinKnopf, 0,10); - this->Layout->addWidget(this->Red, 1,10); - this->Layout->addWidget(this->Green, 2,10); - this->Layout->addWidget(this->Blue, 3,10); - this->Layout->addWidget(this->EbenenManager->getDisplayable(),0,0,10,10); - - - //set style here - this->setStyleSheet("background-color:rgb(60,60,60)"); - this->EinKnopf->setStyleSheet("color:rgb(250,250,250)"); - this->Red->setStyleSheet("color:rgb(250,250,250)"); - this->Green->setStyleSheet("color:rgb(250,250,250)"); - this->Blue->setStyleSheet("color:rgb(250,250,250)"); - - //Layout is set in here - this->setLayout(Layout); -} - -IntelliGUI::~IntelliGUI(){ - delete ui; - delete GUI; - delete Layout; - delete EbenenManager; - - //delete all Gui elements down here - delete EinKnopf; - delete Red; - delete Blue; - delete Green; -} - - - -void IntelliGUI::on_EinKnopf_clicked(){ - int redCol = Red->text().toInt(); - int greCol = Green->text().toInt(); - int bluCol = Blue->text().toInt(); - qDebug() << redCol << " " << greCol << " " << bluCol << '\n'; - EbenenManager->floodFillLayer(redCol, greCol, bluCol); -} diff --git a/IntelliPhoto/IntelliPhoto/intelligui.h b/IntelliPhoto/IntelliPhoto/intelligui.h deleted file mode 100644 index 7c5081a..0000000 --- a/IntelliPhoto/IntelliPhoto/intelligui.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef INTELLIGUI_H -#define INTELLIGUI_H - -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE -namespace Ui { class IntelliGUI; } -QT_END_NAMESPACE - -class IntelliGUI : public QMainWindow -{ - Q_OBJECT - //basics for programm logic - LayerManager *EbenenManager; - - //basics for GUI build - QWidget *GUI; - QGridLayout *Layout; - - //Declare all Gui elements down here - QPushButton *EinKnopf; - QLineEdit *Red; - QLineEdit *Blue; - QLineEdit *Green; - -private: - Ui::IntelliGUI *ui; - -public: - //Sets up everything to display first loaded projekt, maybe show load window for a project - IntelliGUI(QWidget *parent = nullptr); - //Delets everything in connection to one project - ~IntelliGUI(); - -public slots: - void on_EinKnopf_clicked(); -}; -#endif // INTELLIGUI_H diff --git a/IntelliPhoto/IntelliPhoto/layer.cpp b/IntelliPhoto/IntelliPhoto/layer.cpp deleted file mode 100644 index f0a3a75..0000000 --- a/IntelliPhoto/IntelliPhoto/layer.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "layer.h" - -Layer::Layer(const int& width,const int& height){ - this->Canvas = new QImage(width, height, QImage::Format_RGB32); - this->width=width; - this->height=height; -} - -Layer::~Layer(){ - delete this->Canvas; -} - -void Layer::setPixel(const int& w,const int& h, const int& r,const int& g,const int& b, const int& a){ - this->Canvas->setPixelColor(w,h,QColor(r,g,b,a)); -} - -void Layer::loadImage(const QString& fileName){ - //load of image an specifing fileformat needs to be implemented -} - -QPixmap Layer::getAsPixmap(){ - return QPixmap::fromImage(*(this->Canvas)); -} - - -void Layer::floodFill(int r, int g, int b){ - for(int i=0; iCanvas->setPixelColor(i,j,QColor(r,g,b,255)); - } - } -} diff --git a/IntelliPhoto/IntelliPhoto/layer.h b/IntelliPhoto/IntelliPhoto/layer.h deleted file mode 100644 index cf066b0..0000000 --- a/IntelliPhoto/IntelliPhoto/layer.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef LAYER_H -#define LAYER_H -#include -#include -#include - -class Layer{ -private: - //pixelmap for the image, used because of performance and api reasons - QImage* Canvas; - - //width of the image - int width; - - //height of the imahe - int height; -public: - //setup everything for the image - Layer(const int& width,const int& height); - ~Layer(); - - //set one pixel with rgba values - void setPixel(const int& w,const int& h,const int& r,const int& g,const int& b, const int& a); - - //load an image to the canvas - void loadImage(const QString& fileName); - - //flood fills canvas - void floodFill(int r, int g, int b); - - //return the image as QPixmap - QPixmap getAsPixmap(); -}; - -#endif // LAYER_H diff --git a/IntelliPhoto/IntelliPhoto/main.cpp b/IntelliPhoto/IntelliPhoto/main.cpp deleted file mode 100644 index 820878b..0000000 --- a/IntelliPhoto/IntelliPhoto/main.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include - -#include "intelligui.h" - -#include -#include -#include -#include -#include -#include - - -int main(int argc, char *argv[]) -{ - QApplication application(argc, argv); - IntelliGUI* win = new IntelliGUI(); - win->show(); - return application.exec(); -} diff --git a/IntelliPhoto/IntelliPhoto/IntelliPhoto.pro b/IntelliPhoto/Scribble/Scribble.pro similarity index 86% rename from IntelliPhoto/IntelliPhoto/IntelliPhoto.pro rename to IntelliPhoto/Scribble/Scribble.pro index 42fc620..6117311 100644 --- a/IntelliPhoto/IntelliPhoto/IntelliPhoto.pro +++ b/IntelliPhoto/Scribble/Scribble.pro @@ -16,18 +16,16 @@ DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ - LayerManager.cpp \ - intelligui.cpp \ - layer.cpp \ - main.cpp + main.cpp \ + mainwindow.cpp \ + scribblearea.cpp HEADERS += \ - LayerManager.h \ - intelligui.h \ - layer.h + mainwindow.h \ + scribblearea.h FORMS += \ - intelligui.ui + widget.ui # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin diff --git a/IntelliPhoto/Scribble/Scribble.pro.user b/IntelliPhoto/Scribble/Scribble.pro.user new file mode 100644 index 0000000..1c86583 --- /dev/null +++ b/IntelliPhoto/Scribble/Scribble.pro.user @@ -0,0 +1,337 @@ + + + + + + EnvironmentId + {426164d9-3771-4235-8f83-cb0b49423ffc} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + -fno-delayed-template-parsing + + true + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.12.5 MinGW 64-bit + Desktop Qt 5.12.5 MinGW 64-bit + qt.qt5.5125.win64_mingw73_kit + 0 + 0 + 0 + + C:/Users/jonas/OneDrive/Desktop/build-Scribble-Desktop_Qt_5_12_5_MinGW_64_bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Erstellen + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Bereinigen + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + C:/Users/jonas/OneDrive/Desktop/build-Scribble-Desktop_Qt_5_12_5_MinGW_64_bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + true + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Erstellen + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Bereinigen + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + C:/Users/jonas/OneDrive/Desktop/build-Scribble-Desktop_Qt_5_12_5_MinGW_64_bit-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + true + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Erstellen + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Bereinigen + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + 0 + Deployment + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deployment-Konfiguration + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Scribble + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/jonas/OneDrive/Desktop/Scribble/Scribble.pro + + 3768 + false + true + true + false + false + true + + C:/Users/jonas/OneDrive/Desktop/build-Scribble-Desktop_Qt_5_12_5_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/IntelliPhoto/Scribble/Scribble.pro.user.87de10b b/IntelliPhoto/Scribble/Scribble.pro.user.87de10b new file mode 100644 index 0000000..934c6c1 --- /dev/null +++ b/IntelliPhoto/Scribble/Scribble.pro.user.87de10b @@ -0,0 +1,337 @@ + + + + + + EnvironmentId + {87de10b7-9dd6-4379-8674-fd04613e186e} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + -fno-delayed-template-parsing + + true + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.12.5 MinGW 64-bit + Desktop Qt 5.12.5 MinGW 64-bit + qt.qt5.5125.win64_mingw73_kit + 0 + 0 + 0 + + C:/Users/Jonas/Documents/QML/build-Scribble-Desktop_Qt_5_12_5_MinGW_64_bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Erstellen + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Bereinigen + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + C:/Users/Jonas/Documents/QML/build-Scribble-Desktop_Qt_5_12_5_MinGW_64_bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + true + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Erstellen + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Bereinigen + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + C:/Users/Jonas/Documents/QML/build-Scribble-Desktop_Qt_5_12_5_MinGW_64_bit-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + true + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Erstellen + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Bereinigen + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + 0 + Deployment + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deployment-Konfiguration + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Scribble + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Jonas/Documents/QML/Scribble/Scribble.pro + + 3768 + false + true + true + false + false + true + + C:/Users/Jonas/Documents/QML/build-Scribble-Desktop_Qt_5_12_5_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/IntelliPhoto/Scribble/main.cpp b/IntelliPhoto/Scribble/main.cpp new file mode 100644 index 0000000..6269b60 --- /dev/null +++ b/IntelliPhoto/Scribble/main.cpp @@ -0,0 +1,26 @@ + + + + +// ---------- main.cpp ---------- + +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + // The main application + QApplication app(argc, argv); + + // Create and open the main window + MainWindow window; + window.show(); + + // Display the main window + return app.exec(); +} + +// ---------- END main.cpp ---------- + + + diff --git a/IntelliPhoto/Scribble/mainwindow.cpp b/IntelliPhoto/Scribble/mainwindow.cpp new file mode 100644 index 0000000..817eef6 --- /dev/null +++ b/IntelliPhoto/Scribble/mainwindow.cpp @@ -0,0 +1,281 @@ +// ---------- mainwindow.cpp ---------- + +#include + +#include "mainwindow.h" +#include "scribblearea.h" + +// MainWindow constructor +MainWindow::MainWindow() +{ + //create Gui elemnts and lay them out + createGui(); + // Create actions + createActions(); + //create Menus + createMenus(); + //set style of the gui + setIntelliStyle(); + + // Size the app + resize(500, 500); +} + + +// User tried to close the app +void MainWindow::closeEvent(QCloseEvent *event) +{ + // If they try to close maybeSave() returns true + // if no changes have been made and the app closes + if (maybeSave()) { + event->accept(); + } else { + + // If there have been changes ignore the event + event->ignore(); + } +} + +// Check if the current image has been changed and then +// open a dialog to open a file +void MainWindow::open() +{ + // Check if changes have been made since last save + // maybeSave() returns true if no changes have been made + if (maybeSave()) { + + // Get the file to open from a dialog + // tr sets the window title to Open File + // QDir opens the current dirctory + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open File"), QDir::currentPath()); + + // If we have a file name load the image and place + // it in the scribbleArea + if (!fileName.isEmpty()) + scribbleArea->openImage(fileName); + } +} + +// Called when the user clicks Save As in the menu +void MainWindow::save() +{ + // A QAction represents the action of the user clicking + QAction *action = qobject_cast(sender()); + + // Stores the array of bytes of the users data + QByteArray fileFormat = action->data().toByteArray(); + + // Pass it to be saved + saveFile(fileFormat); +} + +// Opens a dialog to change the pen color +void MainWindow::penColor() +{ + // Store the chosen color from the dialog + QColor newColor = QColorDialog::getColor(scribbleArea->penColor()); + + // If a valid color set it + if (newColor.isValid()) + scribbleArea->setPenColor(newColor); +} + +// Opens a dialog that allows the user to change the pen width +void MainWindow::penWidth() +{ + // Stores button value + bool ok; + + // tr("Scribble") is the title + // the next tr is the text to display + // Get the current pen width + // Define the min, max, step and ok button + int newWidth = QInputDialog::getInt(this, tr("Scribble"), + tr("Select pen width:"), + scribbleArea->penWidth(), + 1, 500, 1, &ok); + // Change the pen width + if (ok) + scribbleArea->setPenWidth(newWidth); +} + +// Open an about dialog +void MainWindow::about() +{ + // Window title and text to display + QMessageBox::about(this, tr("About Scribble"), + tr("

The Scribble example is awesome

")); +} + +// Define menu actions that call functions +void MainWindow::createActions() +{ + //connect signal and slots of gui element + connect(this->clearButton, SIGNAL(clicked()), scribbleArea, SLOT(clearImage())); + + // Create the action tied to the menu + openAct = new QAction(tr("&Open..."), this); + + // Define the associated shortcut key + openAct->setShortcuts(QKeySequence::Open); + + // Tie the action to MainWindow::open() + connect(openAct, SIGNAL(triggered()), this, SLOT(open())); + + // Get a list of the supported file formats + // QImageWriter is used to write images to files + foreach (QByteArray format, QImageWriter::supportedImageFormats()) { + QString text = tr("%1...").arg(QString(format).toUpper()); + + // Create an action for each file format + QAction *action = new QAction(text, this); + + // Set an action for each file format + action->setData(format); + + // When clicked call MainWindow::save() + connect(action, SIGNAL(triggered()), this, SLOT(save())); + + // Attach each file format option menu item to Save As + saveAsActs.append(action); + } + + + // Create exit action and tie to MainWindow::close() + exitAct = new QAction(tr("E&xit"), this); + exitAct->setShortcuts(QKeySequence::Quit); + connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); + + // Create pen color action and tie to MainWindow::penColor() + penColorAct = new QAction(tr("&Pen Color..."), this); + connect(penColorAct, SIGNAL(triggered()), this, SLOT(penColor())); + + // Create pen width action and tie to MainWindow::penWidth() + penWidthAct = new QAction(tr("Pen &Width..."), this); + connect(penWidthAct, SIGNAL(triggered()), this, SLOT(penWidth())); + + // Create clear screen action and tie to MainWindow::clearImage() + clearScreenAct = new QAction(tr("&Clear Screen"), this); + clearScreenAct->setShortcut(tr("Ctrl+L")); + connect(clearScreenAct, SIGNAL(triggered()), + scribbleArea, SLOT(clearImage())); + + // Create about action and tie to MainWindow::about() + aboutAct = new QAction(tr("&About"), this); + connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + + // Create about Qt action and tie to MainWindow::aboutQt() + aboutQtAct = new QAction(tr("About &Qt"), this); + connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); +} + +// Create the menubar +void MainWindow::createMenus() +{ + // Create Save As option and the list of file types + saveAsMenu = new QMenu(tr("&Save As"), this); + foreach (QAction *action, saveAsActs) + saveAsMenu->addAction(action); + + // Attach all actions to File + fileMenu = new QMenu(tr("&File"), this); + fileMenu->addAction(openAct); + fileMenu->addMenu(saveAsMenu); + fileMenu->addSeparator(); + fileMenu->addAction(exitAct); + + // Attach all actions to Options + optionMenu = new QMenu(tr("&Options"), this); + optionMenu->addAction(penColorAct); + optionMenu->addAction(penWidthAct); + optionMenu->addSeparator(); + optionMenu->addAction(clearScreenAct); + + // Attach all actions to Help + helpMenu = new QMenu(tr("&Help"), this); + helpMenu->addAction(aboutAct); + helpMenu->addAction(aboutQtAct); + + // Add menu items to the menubar + menuBar()->addMenu(fileMenu); + menuBar()->addMenu(optionMenu); + menuBar()->addMenu(helpMenu); +} + +void MainWindow::createGui(){ + //create a central widget to work on + centralGuiWidget = new QWidget(this); + setCentralWidget(centralGuiWidget); + + //create the grid for the layout + mainLayout = new QGridLayout(centralGuiWidget); + centralGuiWidget->setLayout(mainLayout); + + //create Gui elements + clearButton = new QPushButton("Clear"); + scribbleArea = new ScribbleArea(); + + //set gui elemtns position + mainLayout->addWidget(scribbleArea,0,0,10,10); + mainLayout->addWidget(clearButton,0,10,1,1); +} + +void MainWindow::setIntelliStyle(){ + // Set the title + setWindowTitle("IntelliPhoto Prototype"); + //set style sheet + this->setStyleSheet("background-color:rgb(64,64,64)"); + this->centralGuiWidget->setStyleSheet("color:rgb(255,255,255)"); + this->menuBar()->setStyleSheet("color:rgb(255,255,255)"); +} + +bool MainWindow::maybeSave() +{ + // Check for changes since last save + if (scribbleArea->isModified()) { + QMessageBox::StandardButton ret; + + // Scribble is the title + // Add text and the buttons + ret = QMessageBox::warning(this, tr("Scribble"), + tr("The image has been modified.\n" + "Do you want to save your changes?"), + QMessageBox::Save | QMessageBox::Discard + | QMessageBox::Cancel); + + // If save button clicked call for file to be saved + if (ret == QMessageBox::Save) { + return saveFile("png"); + + // If cancel do nothing + } else if (ret == QMessageBox::Cancel) { + return false; + } + } + return true; +} + +bool MainWindow::saveFile(const QByteArray &fileFormat) +{ + // Define path, name and default file type + QString initialPath = QDir::currentPath() + "/untitled." + fileFormat; + + // Get selected file from dialog + // Add the proper file formats and extensions + QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), + initialPath, + tr("%1 Files (*.%2);;All Files (*)") + .arg(QString::fromLatin1(fileFormat.toUpper())) + .arg(QString::fromLatin1(fileFormat))); + + // If no file do nothing + if (fileName.isEmpty()) { + return false; + } else { + + // Call for the file to be saved + return scribbleArea->saveImage(fileName, fileFormat.constData()); + } +} + diff --git a/IntelliPhoto/Scribble/mainwindow.h b/IntelliPhoto/Scribble/mainwindow.h new file mode 100644 index 0000000..97a21df --- /dev/null +++ b/IntelliPhoto/Scribble/mainwindow.h @@ -0,0 +1,77 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include + +// ScribbleArea used to paint the image +class ScribbleArea; + +class MainWindow : public QMainWindow +{ + // Declares our class as a QObject which is the base class + // for all Qt objects + // QObjects handle events + Q_OBJECT + +public: + MainWindow(); +protected: + // Function used to close an event + void closeEvent(QCloseEvent *event) override; + +// The events that can be triggered +private slots: + void open(); + void save(); + void penColor(); + void penWidth(); + void about(); + +private: + // Will tie user actions to functions + void createActions(); + void createMenus(); + + //setup GUI elements + void createGui(); + + //set style of the GUI + void setIntelliStyle(); + + // Will check if changes have occurred since last save + bool maybeSave(); + + // Opens the Save dialog and saves + bool saveFile(const QByteArray &fileFormat); + + // What we'll draw on + ScribbleArea *scribbleArea; + + // The menu widgets + QMenu *saveAsMenu; + QMenu *fileMenu; + QMenu *optionMenu; + QMenu *helpMenu; + + // All the actions that can occur + QAction *openAct; + + // Actions tied to specific file formats + QList saveAsActs; + QAction *exitAct; + QAction *penColorAct; + QAction *penWidthAct; + QAction *clearScreenAct; + QAction *aboutAct; + QAction *aboutQtAct; + + //main GUI elements + QWidget* centralGuiWidget; + QGridLayout *mainLayout; + QPushButton *clearButton; +}; + +#endif diff --git a/IntelliPhoto/Scribble/scribblearea.cpp b/IntelliPhoto/Scribble/scribblearea.cpp new file mode 100644 index 0000000..5619906 --- /dev/null +++ b/IntelliPhoto/Scribble/scribblearea.cpp @@ -0,0 +1,171 @@ +// ---------- scribblearea.cpp ---------- + +#include +#include "scribblearea.h" + +ScribbleArea::ScribbleArea(QWidget *parent) + : QWidget(parent) +{ + // Roots the widget to the top left even if resized + setAttribute(Qt::WA_StaticContents); + + // Set defaults for the monitored variables + modified = false; + scribbling = false; + myPenWidth = 1; + myPenColor = Qt::blue; +} + +// Used to load the image and place it in the widget +bool ScribbleArea::openImage(const QString &fileName) +{ + // Holds the image + QImage loadedImage; + + // If the image wasn't loaded leave this function + if (!loadedImage.load(fileName)) + return false; + + QSize newSize = loadedImage.size().expandedTo(size()); + resizeImage(&loadedImage, newSize); + image = loadedImage; + modified = false; + update(); + return true; +} + +// Save the current image +bool ScribbleArea::saveImage(const QString &fileName, const char *fileFormat) +{ + // Created to hold the image + QImage visibleImage = image; + resizeImage(&visibleImage, size()); + + if (visibleImage.save(fileName, fileFormat)) { + modified = false; + return true; + } else { + return false; + } +} + +// Used to change the pen color +void ScribbleArea::setPenColor(const QColor &newColor) +{ + myPenColor = newColor; +} + +// Used to change the pen width +void ScribbleArea::setPenWidth(int newWidth) +{ + myPenWidth = newWidth; +} + +// Color the image area with white +void ScribbleArea::clearImage() +{ + image.fill(qRgb(255, 255, 255)); + modified = true; + update(); +} + +// If a mouse button is pressed check if it was the +// left button and if so store the current position +// Set that we are currently drawing +void ScribbleArea::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) { + lastPoint = event->pos(); + scribbling = true; + } +} + +// When the mouse moves if the left button is clicked +// we call the drawline function which draws a line +// from the last position to the current +void ScribbleArea::mouseMoveEvent(QMouseEvent *event) +{ + if ((event->buttons() & Qt::LeftButton) && scribbling) + drawLineTo(event->pos()); +} + +// If the button is released we set variables to stop drawing +void ScribbleArea::mouseReleaseEvent(QMouseEvent *event) +{ + if (event->button() == Qt::LeftButton && scribbling) { + drawLineTo(event->pos()); + scribbling = false; + } +} + +// QPainter provides functions to draw on the widget +// The QPaintEvent is sent to widgets that need to +// update themselves +void ScribbleArea::paintEvent(QPaintEvent *event) +{ + QPainter painter(this); + + // Returns the rectangle that needs to be updated + QRect dirtyRect = event->rect(); + + // Draws the rectangle where the image needs to + // be updated + painter.drawImage(dirtyRect, image, dirtyRect); +} + +// Resize the image to slightly larger then the main window +// to cut down on the need to resize the image +void ScribbleArea::resizeEvent(QResizeEvent *event) +{ + if (width() > image.width() || height() > image.height()) { + int newWidth = qMax(width() + 128, image.width()); + int newHeight = qMax(height() + 128, image.height()); + resizeImage(&image, QSize(newWidth, newHeight)); + update(); + } + QWidget::resizeEvent(event); +} + +void ScribbleArea::drawLineTo(const QPoint &endPoint) +{ + // Used to draw on the widget + QPainter painter(&image); + + // Set the current settings for the pen + painter.setPen(QPen(myPenColor, myPenWidth, Qt::SolidLine, Qt::RoundCap, + Qt::RoundJoin)); + + // Draw a line from the last registered point to the current + painter.drawLine(lastPoint, endPoint); + + // Set that the image hasn't been saved + modified = true; + + int rad = (myPenWidth / 2) + 2; + + // Call to update the rectangular space where we drew + update(QRect(lastPoint, endPoint).normalized() + .adjusted(-rad, -rad, +rad, +rad)); + + // Update the last position where we left off drawing + lastPoint = endPoint; +} + +// When the app is resized create a new image using +// the changes made to the image +void ScribbleArea::resizeImage(QImage *image, const QSize &newSize) +{ + // Check if we need to redraw the image + if (image->size() == newSize) + return; + + // Create a new image to display and fill it with white + QImage newImage(newSize, QImage::Format_RGB32); + newImage.fill(qRgb(255, 255, 255)); + + // Draw the image + QPainter painter(&newImage); + painter.drawImage(QPoint(0, 0), *image); + *image = newImage; +} + diff --git a/IntelliPhoto/Scribble/scribblearea.h b/IntelliPhoto/Scribble/scribblearea.h new file mode 100644 index 0000000..da47416 --- /dev/null +++ b/IntelliPhoto/Scribble/scribblearea.h @@ -0,0 +1,73 @@ +// ---------- scribblearea.h ---------- + +#ifndef SCRIBBLEAREA_H +#define SCRIBBLEAREA_H + +#include +#include +#include +#include + +class ScribbleArea : public QWidget +{ + // Declares our class as a QObject which is the base class + // for all Qt objects + // QObjects handle events + Q_OBJECT + +public: + ScribbleArea(QWidget *parent = nullptr); + + // Handles all events + bool openImage(const QString &fileName); + bool saveImage(const QString &fileName, const char *fileFormat); + void setPenColor(const QColor &newColor); + void setPenWidth(int newWidth); + + // Has the image been modified since last save + bool isModified() const { return modified; } + QColor penColor() const { return myPenColor; } + int penWidth() const { return myPenWidth; } + +public slots: + + // Events to handle + void clearImage(); + +protected: + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + + // Updates the scribble area where we are painting + void paintEvent(QPaintEvent *event) override; + + // Makes sure the area we are drawing on remains + // as large as the widget + void resizeEvent(QResizeEvent *event) override; + +private: + void drawLineTo(const QPoint &endPoint); + void resizeImage(QImage *image, const QSize &newSize); + + // Will be marked true or false depending on if + // we have saved after a change + bool modified; + + // Marked true or false depending on if the user + // is drawing + bool scribbling; + + // Holds the current pen width & color + int myPenWidth; + QColor myPenColor; + + // Stores the image being drawn + QImage image; + + // Stores the location at the current mouse event + QPoint lastPoint; +}; + +#endif + diff --git a/IntelliPhoto/IntelliPhoto/intelligui.ui b/IntelliPhoto/Scribble/widget.ui similarity index 51% rename from IntelliPhoto/IntelliPhoto/intelligui.ui rename to IntelliPhoto/Scribble/widget.ui index 83ba604..b90248d 100644 --- a/IntelliPhoto/IntelliPhoto/intelligui.ui +++ b/IntelliPhoto/Scribble/widget.ui @@ -1,22 +1,18 @@ - IntelliGUI - + Widget + 0 0 800 - 438 + 600 - IntelliGUI + Widget - - - - diff --git a/IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmp0l4rts b/IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmp0l4rts deleted file mode 100644 index e69de29..0000000 diff --git a/IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpcvzqoi b/IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpcvzqoi deleted file mode 100644 index e69de29..0000000 diff --git a/IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpqakvqm b/IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpqakvqm deleted file mode 100644 index e69de29..0000000 diff --git a/IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpu6gfxp b/IntelliPhoto/build-IntelliPhoto-Desktop_Qt_5_12_5_MinGW_64_bit-Debug/usersjonasappdatalocaltemptmpu6gfxp deleted file mode 100644 index e69de29..0000000