Advertisement
Guest User

Untitled

a guest
May 21st, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QPushButton>
  4. #include <QCoreApplication>
  5. #include <QListView>
  6. #include <QStringListModel>
  7. #include <string>
  8. #include <QMessageBox>
  9. #include <QPlainTextEdit>
  10. #include <QTextEdit>
  11.  
  12. #include "FileManager.h"
  13. #include "Axolotl.h"
  14.  
  15. MainWindow::MainWindow(QWidget *parent) :
  16.     QMainWindow(parent),
  17.     ui(new Ui::MainWindow)
  18. {
  19.     ui->setupUi(this);
  20.  
  21.     this->ok1 = false;
  22.     this->ok2 = false;
  23.  
  24.     this->ctrl = Controller(true);
  25.  
  26.     this->mainWidget = new QWidget(this);
  27.     QPushButton *admin = new QPushButton(mainWidget);
  28.     admin->setText(tr("Admin login"));
  29.     admin->setGeometry(QRect(QPoint(100, 50), QSize(200, 50)));
  30.     //setCentralWidget(mainWidget);
  31.  
  32.     QPushButton *user = new QPushButton(mainWidget);
  33.     user->setText("User login");
  34.     user->setGeometry(QRect(QPoint(100, 125), QSize(200, 50)));
  35.     setCentralWidget(mainWidget);
  36.  
  37.     connect(admin, &QPushButton::clicked, this, [this]() {
  38.         QWidget* wdg = this->initAdminGUI();
  39.         wdg->show();
  40.     });
  41.  
  42.     connect(user, &QPushButton::clicked, this, [this]() {
  43.         QWidget* wdg = this->initUserGUI();
  44.         wdg->show();
  45.     });
  46. }
  47.  
  48. MainWindow::~MainWindow()
  49. {
  50.     delete ui;
  51. }
  52.  
  53. QWidget* MainWindow::initAdminGUI() {
  54.     QWidget* wdg = new QWidget();
  55.     //wdg->setGeometry(100, 150, 800, 800);
  56.     wdg->setFixedSize(800, 800);
  57.  
  58.     QListView* lv = this->buildListViewFromVector(wdg, this->ctrl.getVector());
  59.     lv->setGeometry(QRect(QPoint(0, 0), QSize(350, 200)));
  60.  
  61.     FileManager* TFM = new TextFileManager();
  62.  
  63.     ////////////////////////////////////////////
  64.  
  65.     QPlainTextEdit *breed = new QPlainTextEdit(wdg);
  66.     breed->document()->setPlainText("Breed (0, 1, 2)");
  67.     breed->setGeometry(QRect(QPoint(25, 275), QSize(200, 26)));
  68.  
  69.     QPlainTextEdit *name = new QPlainTextEdit(wdg);
  70.     name->document()->setPlainText("Name");
  71.     name->setGeometry(QRect(QPoint(25, 275 + 25), QSize(200, 26)));
  72.  
  73.     QPlainTextEdit *age = new QPlainTextEdit(wdg);
  74.     age->document()->setPlainText("Age (0-99)");
  75.     age->setGeometry(QRect(QPoint(25, 275 + 50), QSize(200, 26)));
  76.  
  77.     QPlainTextEdit *photo = new QPlainTextEdit(wdg);
  78.     photo->document()->setPlainText("Link to photo (no spaces)");
  79.     photo->setGeometry(QRect(QPoint(25, 275 + 75), QSize(200, 26)));
  80.  
  81.     ////////////////////////////////////////////
  82.  
  83.     QPushButton *newBtn = new QPushButton(wdg);
  84.     newBtn->setText("New");
  85.     newBtn->setGeometry(QRect(QPoint(80 + 0, 205), QSize(50, 50)));
  86.  
  87.     connect(newBtn, &QPushButton::clicked, this, [TFM, wdg, lv, breed, name, age, photo, this]() {
  88.         cout << this->ctrl.getVector().size() << endl;
  89.         this->ctrl.addAxolotl(this->ctrl.getVector(), stoi(breed->toPlainText().toUtf8().constData()), name->toPlainText().toUtf8().constData(), stoi(age->toPlainText().toUtf8().constData()), photo->toPlainText().toUtf8().constData());
  90.  
  91.         cout << this->ctrl.getVector().size() << endl;
  92.  
  93.         lv->setModel(this->buildModelFromVector(this->ctrl.getVector()));
  94.  
  95.         //lv = this->buildListViewFromVector(wdg, this->ctrl.getVector());
  96.         //lv->show();
  97.  
  98.         TFM->writeToFile(this->ctrl.getVector(), "/home/sysadmin/OOP/outfilevectorall.txt");
  99.     });
  100.  
  101.     ////////////////////////////////////////////
  102.  
  103.     QPushButton *delBtn = new QPushButton(wdg);
  104.     delBtn->setText("Delete");
  105.     delBtn->setGeometry(QRect(QPoint(80 + 75, 205), QSize(50, 50)));
  106.  
  107.     connect(delBtn, &QPushButton::clicked, this, [TFM, wdg, lv, this]() {
  108.         //cout << this->ctrl.getVector().size() << endl;
  109.  
  110.         QModelIndex index = lv->currentIndex();
  111.         ctrl.deleteAxolotl(index.row());
  112.         lv->setModel(this->buildModelFromVector(this->ctrl.getVector()));
  113.  
  114.         //cout << this->ctrl.getVector().size() << endl;
  115.         //this->buildListViewFromVector(wdg, this->ctrl.getVector());
  116.         //lv->show();
  117.  
  118.         TFM->writeToFile(this->ctrl.getVector(), "/home/sysadmin/OOP/outfilevectorall.txt");
  119.     });
  120.  
  121.     ////////////////////////////////////////////
  122.  
  123.     QPushButton *updBtn = new QPushButton(wdg);
  124.     updBtn->setText("Update");
  125.     updBtn->setGeometry(QRect(QPoint(80 + 150, 205), QSize(50, 50)));
  126.  
  127.     connect(updBtn, &QPushButton::clicked, this, [TFM, wdg, lv, breed, age, name, photo, this]() {
  128.         //cout << this->ctrl.getVector().size() << endl;
  129.  
  130.  
  131.  
  132.         QModelIndex index = lv->currentIndex();
  133.         ctrl.updateAxolotl(index.row(), stoi(breed->toPlainText().toUtf8().constData()), name->toPlainText().toUtf8().constData(), stoi(age->toPlainText().toUtf8().constData()), photo->toPlainText().toUtf8().constData());
  134.         lv->setModel(this->buildModelFromVector(this->ctrl.getVector()));
  135.  
  136.         //cout << this->ctrl.getVector().size() << endl;
  137.         //this->buildListViewFromVector(wdg, this->ctrl.getVector());
  138.         //lv->show();
  139.  
  140.         TFM->writeToFile(this->ctrl.getVector(), "/home/sysadmin/OOP/outfilevectorall.txt");
  141.     });
  142.  
  143.  
  144.     ////////////////////////////////////////////
  145.  
  146.     return wdg;
  147. }
  148.  
  149. QStringListModel* MainWindow::buildModelFromVector(const vector<Axolotl> &vec) {
  150.     QStringListModel *model = new QStringListModel(this);
  151.     QStringList list;
  152.     // Show data to QListView
  153.     for (int i = 0; i < vec.size(); ++i) {
  154.         //string x = vec[i];
  155.         //list << vec[i];
  156.         //cout << vec[i];
  157.         string currAxolotl = vec[i].getName() + " - " + to_string(vec[i].getAge()) + " - " + Axolotl::getStringFromBreed(vec[i].getBreed()) + " - " + vec[i].getPhoto();
  158.         list << currAxolotl.c_str();
  159.     }
  160.  
  161.     model->setStringList(list);
  162.  
  163.     return model;
  164. }
  165.  
  166. QListView* MainWindow::buildListViewFromVector(QWidget *wdg, const vector<Axolotl> &vec) {
  167.     QListView *listView = new QListView(wdg);
  168.     QStringListModel *model = new QStringListModel(this);
  169.     QStringList list;
  170.  
  171.     // Make QListView non editable
  172.     listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
  173.  
  174.     //vector<Axolotl> vec;
  175.     //data->loadFromFile(vec);
  176.  
  177.     // Show data to QListView
  178.     for (int i = 0; i < vec.size(); ++i) {
  179.         string currAxolotl = vec[i].getName() + " - " + to_string(vec[i].getAge()) + " - " + Axolotl::getStringFromBreed(vec[i].getBreed()) + " - " + vec[i].getPhoto();
  180.         list << currAxolotl.c_str();
  181.     }
  182.  
  183.     model->setStringList(list);
  184.     listView->setModel(model);
  185.  
  186.     return listView;
  187. }
  188.  
  189. QWidget* MainWindow::initUserGUI() {
  190.     QWidget* wdg = new QWidget();
  191.     //wdg->setGeometry(100, 150, 800, 800);
  192.     wdg->setFixedSize(800, 800);
  193.  
  194.     // all pets
  195.     QListView* lv = this->buildListViewFromVector(wdg, this->ctrl.getVector());
  196.     lv->setGeometry(QRect(QPoint(0, 0), QSize(350, 200)));
  197.  
  198.     // my list of adoptions
  199.     QListView* adoptionsLV = this->buildListViewFromVector(wdg, this->ctrl.getUserAdoptionVector());
  200.     adoptionsLV->setGeometry(QRect(QPoint(300, 0), QSize(350, 200)));
  201.  
  202.     // filtered list
  203.     QListView* filteredLV = this->buildListViewFromVector(wdg, this->ctrl.getVector());
  204.     filteredLV->setGeometry(QRect(QPoint(300, 200), QSize(350, 200)));
  205.  
  206.     FileManager* TFM = new TextFileManager();
  207.     FileManager* HTMLFM = new HTMLFileManager();
  208.  
  209.     ////////////////////////////////////////////
  210.  
  211.     // For filtering
  212.     QPlainTextEdit *breed = new QPlainTextEdit(wdg);
  213.     breed->document()->setPlainText("Breed (0, 1, 2)");
  214.     breed->setGeometry(QRect(QPoint(25, 275), QSize(200, 26)));
  215.  
  216.     QPlainTextEdit *age = new QPlainTextEdit(wdg);
  217.     age->document()->setPlainText("Age less than (0-99)");
  218.     age->setGeometry(QRect(QPoint(25, 275 + 50), QSize(200, 26)));
  219.  
  220.     ////////////////////////////////////////////
  221.  
  222.     QPushButton *adoptBtn = new QPushButton(wdg);
  223.     adoptBtn->setText("Adopt");
  224.     adoptBtn->setGeometry(QRect(QPoint(80 + 0, 205), QSize(50, 50)));
  225.  
  226.     connect(lv, &QListView::clicked, this, [filteredLV, lv, this](){
  227.         filteredLV->selectionModel()->clearSelection();
  228.         this->ok1 = true;
  229.         this->ok2 = false;
  230.     });
  231.  
  232.     connect(filteredLV, &QListView::clicked, this, [lv, this](){
  233.         lv->selectionModel()->clearSelection();
  234.         this->ok1 = false;
  235.         this->ok2 = true;
  236.     });
  237.  
  238.     connect(adoptBtn, &QPushButton::clicked, this, [TFM, HTMLFM, lv, adoptionsLV, filteredLV, this]() {
  239.         QModelIndex index = lv->currentIndex();
  240.         if (true == this->ok1) {
  241.         auto ax = this->ctrl.getVector()[index.row()];
  242.         this->ctrl.addAxolotl(this->ctrl.getUserAdoptionVector(), Axolotl::getIntFromBreed(ax.getBreed()), ax.getName(), ax.getAge(), ax.getPhoto());
  243.         }
  244.  
  245.         index = filteredLV->currentIndex();
  246.         if (true == this->ok2) {
  247.             auto ax = this->ctrl.getVector()[index.row()];
  248.             this->ctrl.addAxolotl(this->ctrl.getUserAdoptionVector(), Axolotl::getIntFromBreed(ax.getBreed()), ax.getName(), ax.getAge(), ax.getPhoto());
  249.         }
  250.  
  251.         adoptionsLV->setModel(this->buildModelFromVector(this->ctrl.getUserAdoptionVector()));
  252.  
  253.         TFM->writeToFile(this->ctrl.getUserAdoptionVector(), "/home/sysadmin/OOP/outfile.txt");
  254.         HTMLFM->writeToFile(this->ctrl.getUserAdoptionVector(), "/home/sysadmin/OOP/outfile.html");
  255.     });
  256.  
  257.     ////////////////////////////////////////////
  258.  
  259.     QPushButton *filterBtn = new QPushButton(wdg);
  260.     filterBtn->setText("Filter");
  261.     filterBtn->setGeometry(QRect(QPoint(80 + 75, 205), QSize(50, 50)));
  262.  
  263.     connect(filterBtn, &QPushButton::clicked, this, [filteredLV, breed, age, this]() {
  264.         filteredLV->setModel(this->buildModelFromVector(this->ctrl.buildFilteredVector(stoi(breed->toPlainText().toUtf8().constData()), stoi(age->toPlainText().toUtf8().constData()))));
  265.     });
  266.  
  267.     return wdg;
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement