diff --git a/jceGrade.pro b/jceGrade.pro index 8839a65..280d5b2 100644 --- a/jceGrade.pro +++ b/jceGrade.pro @@ -53,7 +53,8 @@ HEADERS += \ src/jceData/Calendar/calendarDialog.h \ src/appDatabase/jce_logger.h \ src/jceData/Grades/graph/qcustomplot.h \ - src/jceData/Grades/graph/gradegraph.h + src/jceData/Grades/graph/gradegraph.h \ + src/jceData/Calendar/calendarExam.h SOURCES += \ main/CalendarTab/CalendarManager.cpp \ @@ -76,4 +77,5 @@ SOURCES += \ src/jceData/Calendar/calendarDialog.cpp \ src/appDatabase/jce_logger.cpp \ src/jceData/Grades/graph/qcustomplot.cpp \ - src/jceData/Grades/graph/gradegraph.cpp + src/jceData/Grades/graph/gradegraph.cpp \ + src/jceData/Calendar/calendarExam.cpp diff --git a/main/CourseTab/coursestablemanager.cpp b/main/CourseTab/coursestablemanager.cpp index de8e6dc..f0dff3a 100644 --- a/main/CourseTab/coursestablemanager.cpp +++ b/main/CourseTab/coursestablemanager.cpp @@ -2,49 +2,46 @@ coursesTableManager::coursesTableManager(QTableWidget *ptr, user *usrPtr) { - this->gp = NULL; - this->us = usrPtr; - this->courseTBL = ptr; + this->gp = NULL; + this->us = usrPtr; + this->courseTBL = ptr; - /* - * Initilizing Table - */ - courseTBL->setRowCount(0); - courseTBL->setColumnCount(COURSE_FIELDS); - QStringList mz; - mz << QObject::tr("Number") << QObject::tr("Year") << QObject::tr("Semester") << QObject::tr("Serial") << QObject::tr("Name") << QObject::tr("Type") << QObject::tr("Points") << QObject::tr("Hours") << QObject::tr("Grade") << QObject::tr("Additions"); - courseTBL->setHorizontalHeaderLabels(mz); - courseTBL->verticalHeader()->setVisible(false); - courseTBL->setSelectionMode(QAbstractItemView::SingleSelection); - courseTBL->setShowGrid(true); - courseTBL->setStyleSheet("QTableView {selection-background-color: red;}"); + /* + * Initilizing Table + */ + courseTBL->setRowCount(0); + courseTBL->setColumnCount(COURSE_FIELDS); + QStringList mz; + mz << QObject::tr("Number") << QObject::tr("Year") << QObject::tr("Semester") << QObject::tr("Serial") << QObject::tr("Name") << QObject::tr("Type") << QObject::tr("Points") << QObject::tr("Hours") << QObject::tr("Grade") << QObject::tr("Additions"); + courseTBL->setHorizontalHeaderLabels(mz); + courseTBL->verticalHeader()->setVisible(false); + courseTBL->setSelectionMode(QAbstractItemView::SingleSelection); + courseTBL->setShowGrid(true); + courseTBL->setStyleSheet("QTableView {selection-background-color: red;}"); - /* - * - */ - graph = new gradegraph(NULL,gp); + graph = new gradegraph(NULL); } coursesTableManager::~coursesTableManager() { - courseTBL = NULL; - delete gp; - gp = NULL; + courseTBL = NULL; + delete gp; + gp = NULL; } /** * @brief coursesTableManager::insertJceCoursesIntoTable phrasing the course list to rows in table */ void coursesTableManager::insertJceCoursesIntoTable() { - for (gradeCourse *c: *gp->getCourses()) + for (gradeCourse *c: *gp->getCourses()) { - if (us->getInfluenceCourseOnly()) + if (us->getInfluenceCourseOnly()) { - if (isCourseInfluence(c)) - addRow(c); + if (isCourseInfluence(c)) + addRow(c); } - else - addRow(c); + else + addRow(c); } } /** @@ -53,9 +50,9 @@ void coursesTableManager::insertJceCoursesIntoTable() */ void coursesTableManager::setCoursesList(QString &html) { - if (gp != NULL) - gp->~GradePage(); - gp = new GradePage(html); + if (gp != NULL) + gp->~GradePage(); + gp = new GradePage(html); } /** * @brief coursesTableManager::changes when user changes the table manually it updates it @@ -67,81 +64,81 @@ void coursesTableManager::setCoursesList(QString &html) bool coursesTableManager::changes(QString change, int row, int col) { - bool isNumFlag = true; - if (courseTBL->item(row,gradeCourse::CourseScheme::SERIAL) == NULL) - return true; + bool isNumFlag = true; + if (courseTBL->item(row,gradeCourse::CourseScheme::SERIAL) == NULL) + return true; - int serialCourse = courseTBL->item(row,gradeCourse::CourseScheme::SERIAL)->text().toInt(); - for (gradeCourse *c: *gp->getCourses()) + int serialCourse = courseTBL->item(row,gradeCourse::CourseScheme::SERIAL)->text().toInt(); + for (gradeCourse *c: *gp->getCourses()) { - if (c->getSerialNum() == serialCourse) + if (c->getSerialNum() == serialCourse) { - switch (col) + switch (col) { case (gradeCourse::CourseScheme::COURSE_NUMBER_IN_LIST): - c->setCourseNumInList(change.toInt()); - break; + c->setCourseNumInList(change.toInt()); + break; case (gradeCourse::CourseScheme::YEAR): - c->setYear(change.toInt()); - break; + c->setYear(change.toInt()); + break; case (gradeCourse::CourseScheme::SEMESTER): - c->setSemester(change.toInt()); - break; + c->setSemester(change.toInt()); + break; case (gradeCourse::CourseScheme::NAME): - c->setName(change); - break; + c->setName(change); + break; case (gradeCourse::CourseScheme::TYPE): - c->setType(change); - break; + c->setType(change); + break; case (gradeCourse::CourseScheme::POINTS): - { + { change.toDouble(&isNumFlag); if (!isNumFlag) - { + { courseTBL->item(row,col)->setText(QString::number(c->getPoints())); - } + } else - c->setPoints(change.toDouble()); + c->setPoints(change.toDouble()); break; - } - case (gradeCourse::CourseScheme::HOURS): - { - change.toDouble(&isNumFlag); - - if (!isNumFlag) - { - courseTBL->item(row,col)->setText(QString::number(c->getHours())); - } - else - c->setHours(change.toDouble()); - break; - } - case (gradeCourse::CourseScheme::GRADE): - { - change.toDouble(&isNumFlag); - - if (!isNumFlag) - { - courseTBL->item(row,col)->setText(QString::number(c->getGrade())); - } - else - { - if ((change.toDouble() >= 0) && (change.toDouble() <= 100)) - c->setGrade(change.toDouble()); - else - courseTBL->item(row,col)->setText(QString::number(c->getGrade())); - } - break; - } - case (gradeCourse::CourseScheme::ADDITION): - c->setAdditions(change); - break; } - break; + case (gradeCourse::CourseScheme::HOURS): + { + change.toDouble(&isNumFlag); + + if (!isNumFlag) + { + courseTBL->item(row,col)->setText(QString::number(c->getHours())); + } + else + c->setHours(change.toDouble()); + break; + } + case (gradeCourse::CourseScheme::GRADE): + { + change.toDouble(&isNumFlag); + + if (!isNumFlag) + { + courseTBL->item(row,col)->setText(QString::number(c->getGrade())); + } + else + { + if ((change.toDouble() >= 0) && (change.toDouble() <= 100)) + c->setGrade(change.toDouble()); + else + courseTBL->item(row,col)->setText(QString::number(c->getGrade())); + } + break; + } + case (gradeCourse::CourseScheme::ADDITION): + c->setAdditions(change); + break; + } + break; } } - return isNumFlag; + return isNumFlag; } /** @@ -150,163 +147,163 @@ bool coursesTableManager::changes(QString change, int row, int col) */ void coursesTableManager::addRow(const gradeCourse *courseToAdd) { - int i=1,j=1; + int i=1,j=1; - j = 0; - QTableWidgetItem *number,*year,*semester,*serial,*name,*type,*points,*hours,*grade,*addition; - const gradeCourse * c; - if (courseToAdd != NULL) + j = 0; + QTableWidgetItem *number,*year,*semester,*serial,*name,*type,*points,*hours,*grade,*addition; + const gradeCourse * c; + if (courseToAdd != NULL) { - c = courseToAdd; - if (!isCourseAlreadyInserted(c->getSerialNum())) + c = courseToAdd; + if (!isCourseAlreadyInserted(c->getSerialNum())) { - courseTBL->setRowCount(courseTBL->rowCount() + 1); - i = courseTBL->rowCount()-1; + courseTBL->setRowCount(courseTBL->rowCount() + 1); + i = courseTBL->rowCount()-1; - number = new QTableWidgetItem(); - number->setData(Qt::EditRole, c->getCourseNumInList()); - number->setFlags(number->flags() & ~Qt::ItemIsEditable); + number = new QTableWidgetItem(); + number->setData(Qt::EditRole, c->getCourseNumInList()); + number->setFlags(number->flags() & ~Qt::ItemIsEditable); - year = new QTableWidgetItem(); - year->setData(Qt::EditRole,c->getYear()); - year->setFlags(year->flags() & ~Qt::ItemIsEditable); + year = new QTableWidgetItem(); + year->setData(Qt::EditRole,c->getYear()); + year->setFlags(year->flags() & ~Qt::ItemIsEditable); - semester = new QTableWidgetItem(); - semester->setData(Qt::EditRole,c->getSemester()); - semester->setFlags(semester->flags() & ~Qt::ItemIsEditable); + semester = new QTableWidgetItem(); + semester->setData(Qt::EditRole,c->getSemester()); + semester->setFlags(semester->flags() & ~Qt::ItemIsEditable); - serial = new QTableWidgetItem(); - serial->setData(Qt::EditRole,c->getSerialNum()); - serial->setFlags(serial->flags() & ~Qt::ItemIsEditable); + serial = new QTableWidgetItem(); + serial->setData(Qt::EditRole,c->getSerialNum()); + serial->setFlags(serial->flags() & ~Qt::ItemIsEditable); - name = new QTableWidgetItem(); - name->setData(Qt::EditRole,c->getName()); - name->setFlags(name->flags() & ~Qt::ItemIsEditable); + name = new QTableWidgetItem(); + name->setData(Qt::EditRole,c->getName()); + name->setFlags(name->flags() & ~Qt::ItemIsEditable); - type = new QTableWidgetItem(); - type->setData(Qt::EditRole, c->getType()); - type->setFlags(type->flags() & ~Qt::ItemIsEditable); + type = new QTableWidgetItem(); + type->setData(Qt::EditRole, c->getType()); + type->setFlags(type->flags() & ~Qt::ItemIsEditable); - points = new QTableWidgetItem(); - points->setData(Qt::EditRole, c->getPoints()); - points->setFlags(points->flags() & ~Qt::ItemIsEditable); + points = new QTableWidgetItem(); + points->setData(Qt::EditRole, c->getPoints()); + points->setFlags(points->flags() & ~Qt::ItemIsEditable); - hours = new QTableWidgetItem(); - hours->setData(Qt::EditRole, c->getHours()); - hours->setFlags(hours->flags() & ~Qt::ItemIsEditable); + hours = new QTableWidgetItem(); + hours->setData(Qt::EditRole, c->getHours()); + hours->setFlags(hours->flags() & ~Qt::ItemIsEditable); - grade = new QTableWidgetItem(); - grade->setData(Qt::EditRole,c->getGrade()); + grade = new QTableWidgetItem(); + grade->setData(Qt::EditRole,c->getGrade()); - addition = new QTableWidgetItem(); - addition->setData(Qt::EditRole,c->getAddidtions()); + addition = new QTableWidgetItem(); + addition->setData(Qt::EditRole,c->getAddidtions()); - courseTBL->setItem(i,j++,number); - courseTBL->setItem(i,j++,year); - courseTBL->setItem(i,j++,semester); - courseTBL->setItem(i,j++,serial); - courseTBL->setItem(i,j++,name); - courseTBL->setItem(i,j++,type); - courseTBL->setItem(i,j++,points); - courseTBL->setItem(i,j++,hours); - courseTBL->setItem(i,j++,grade); - courseTBL->setItem(i,j,addition); + courseTBL->setItem(i,j++,number); + courseTBL->setItem(i,j++,year); + courseTBL->setItem(i,j++,semester); + courseTBL->setItem(i,j++,serial); + courseTBL->setItem(i,j++,name); + courseTBL->setItem(i,j++,type); + courseTBL->setItem(i,j++,points); + courseTBL->setItem(i,j++,hours); + courseTBL->setItem(i,j++,grade); + courseTBL->setItem(i,j,addition); } } - else + else { - qCritical() << Q_FUNC_INFO << "no course to load!"; + qCritical() << Q_FUNC_INFO << "no course to load!"; } - courseTBL->resizeColumnsToContents(); + courseTBL->resizeColumnsToContents(); } double coursesTableManager::getAvg() { - if (this->gp != NULL) - return gp->getAvg(); - return 0; + if (this->gp != NULL) + return gp->getAvg(); + return 0; } void coursesTableManager::showGraph() { - if (gp != NULL) + if (gp != NULL) { - this->graph->showGraph(gp); + this->graph->showGraph(gp); } } void coursesTableManager::influnceCourseChanged(bool ignoreCourseStatus) { - if (ignoreCourseStatus) + if (ignoreCourseStatus) { - int i = 0; - while (i < courseTBL->rowCount()) + int i = 0; + while (i < courseTBL->rowCount()) { - if (courseTBL->item(i,gradeCourse::CourseScheme::POINTS)->text().compare("0") == 0) - courseTBL->removeRow(i--); - i++; + if (courseTBL->item(i,gradeCourse::CourseScheme::POINTS)->text().compare("0") == 0) + courseTBL->removeRow(i--); + i++; } } - else + else { - if (this->gp != NULL) - for (gradeCourse *c: *gp->getCourses()) - { - if (!(isCourseAlreadyInserted(c->getSerialNum()))) - if (c->getPoints() == 0) - addRow(c); - } + if (this->gp != NULL) + for (gradeCourse *c: *gp->getCourses()) + { + if (!(isCourseAlreadyInserted(c->getSerialNum()))) + if (c->getPoints() == 0) + addRow(c); + } } } void coursesTableManager::clearTable() { - if (courseTBL->rowCount() == 0) - return; + if (courseTBL->rowCount() == 0) + return; - int i = 0; //starting point - while (courseTBL->rowCount() > i) + int i = 0; //starting point + while (courseTBL->rowCount() > i) { - gp->removeCourse(courseTBL->item(i,gradeCourse::CourseScheme::SERIAL)->text()); - courseTBL->removeRow(i); + gp->removeCourse(courseTBL->item(i,gradeCourse::CourseScheme::SERIAL)->text()); + courseTBL->removeRow(i); } - gp = NULL; - courseTBL->repaint(); + gp = NULL; + courseTBL->repaint(); } gradeCourse *coursesTableManager::getCourseByRow(int row) { - QString courseSerial = courseTBL->item(row,gradeCourse::CourseScheme::SERIAL)->text(); - for (gradeCourse *c: *gp->getCourses()) + QString courseSerial = courseTBL->item(row,gradeCourse::CourseScheme::SERIAL)->text(); + for (gradeCourse *c: *gp->getCourses()) { - if (c->getSerialNum() == courseSerial.toDouble()) - return c; + if (c->getSerialNum() == courseSerial.toDouble()) + return c; } - return NULL; + return NULL; } bool coursesTableManager::isCourseAlreadyInserted(double courseID) { - int i; - for (i = courseTBL->rowCount(); i >= 0; --i) + int i; + for (i = courseTBL->rowCount(); i >= 0; --i) { - if (courseTBL->item(i,gradeCourse::CourseScheme::SERIAL) != NULL) + if (courseTBL->item(i,gradeCourse::CourseScheme::SERIAL) != NULL) { - QString courseSerial = courseTBL->item(i,gradeCourse::CourseScheme::SERIAL)->text(); - if (QString::number(courseID) == courseSerial) - return true; + QString courseSerial = courseTBL->item(i,gradeCourse::CourseScheme::SERIAL)->text(); + if (QString::number(courseID) == courseSerial) + return true; } } - return false; + return false; } bool coursesTableManager::isCourseInfluence(const gradeCourse *courseToCheck) { - if (courseToCheck->getPoints() > 0) - return true; - return false; + if (courseToCheck->getPoints() > 0) + return true; + return false; } diff --git a/src/jceData/Calendar/calendarCourse.cpp b/src/jceData/Calendar/calendarCourse.cpp index 5fec893..8b41f33 100644 --- a/src/jceData/Calendar/calendarCourse.cpp +++ b/src/jceData/Calendar/calendarCourse.cpp @@ -2,48 +2,55 @@ calendarCourse::calendarCourse(int serial, QString name, QString type, QString lecturer, double points, double semesterHours, QString dayAndHour, - QString room) : Course(serial,name, type,points) + QString room, calendarCourse::CourseCalendarType type) : Course(serial,name, type,points) { this->lecturer = lecturer; this->semesterHours = semesterHours; this->room = room; - setDayAndHour(dayAndHour); + setDayAndHour(dayAndHour.type); } /** * @brief calendarCourse::setDayAndHour * given a string of time and day - parsing it into day, hour it begins and hour it ends seperated * @param parse - */ -void calendarCourse::setDayAndHour(QString parse) +void calendarCourse::setDayAndHour(QString parse, calendarCourse::CourseCalendarType type) { - int ctr = 0; - QString temp = ""; - QTime timetemp; - char *tok; - char* textToTok = strdup(parse.toStdString().c_str()); - tok = strtok(textToTok, " -"); - while(tok != NULL) + if (type == calendarCourse::CourseCalendarType::CoursesSchedule) { - temp = tok; - switch (ctr) + int ctr = 0; + QString temp = ""; + QTime timetemp; + char *tok; + char* textToTok = strdup(parse.toStdString().c_str()); + tok = strtok(textToTok, " -"); + while(tok != NULL) { - case 0: //day - setDay(temp); - break; - case 1: //hour it begins - timetemp = QTime::fromString(temp,"hh:mm"); - setHourBegin(timetemp.hour()); - setMinutesBegin(timetemp.minute()); - break; - case 2: //hour it ends - timetemp = QTime::fromString(temp,"hh:mm"); - setHourEnd(timetemp.hour()); - setMinutesEnd(timetemp.minute()); - break; - } + temp = tok; + switch (ctr) + { + case 0: //day + setDay(temp); + break; + case 1: //hour it begins + timetemp = QTime::fromString(temp,"hh:mm"); + setHourBegin(timetemp.hour()); + setMinutesBegin(timetemp.minute()); + break; + case 2: //hour it ends + timetemp = QTime::fromString(temp,"hh:mm"); + setHourEnd(timetemp.hour()); + setMinutesEnd(timetemp.minute()); + break; + } + + ctr++; + tok = strtok(NULL, " -"); + } + } + if (type == calendarCourse::CourseCalendarType::ExamSchedule) + { - ctr++; - tok = strtok(NULL, " -"); } } diff --git a/src/jceData/Calendar/calendarCourse.h b/src/jceData/Calendar/calendarCourse.h index 9659d69..e30838f 100644 --- a/src/jceData/Calendar/calendarCourse.h +++ b/src/jceData/Calendar/calendarCourse.h @@ -9,6 +9,12 @@ class calendarCourse : public Course { public: + enum CourseCalendarType + { + ExamSchedule, + CoursesSchedule + }; + enum CourseScheme { SERIAL, @@ -21,7 +27,8 @@ public: ROOM }; calendarCourse(int serial, QString name, QString type, QString lecturer, - double points, double semesterHours, QString dayAndHour, QString room); + double points, double semesterHours, QString dayAndHour, + QString room, calendarCourse::CourseCalendarType type = calendarCourse::CourseCalendarType::CoursesSchedule); ~calendarCourse(){} int getDay() const; @@ -47,7 +54,7 @@ public: private: - void setDayAndHour(QString parse); + void setDayAndHour(QString parse, CourseCalendarType type); QString lecturer; double semesterHours; diff --git a/src/jceData/Calendar/calendarExam.cpp b/src/jceData/Calendar/calendarExam.cpp new file mode 100644 index 0000000..dfbf567 --- /dev/null +++ b/src/jceData/Calendar/calendarExam.cpp @@ -0,0 +1,5 @@ +#include "calendarExam.h" + +calendarExam::calendarExam() +{ +} diff --git a/src/jceData/Calendar/calendarExam.h b/src/jceData/Calendar/calendarExam.h new file mode 100644 index 0000000..9a8640d --- /dev/null +++ b/src/jceData/Calendar/calendarExam.h @@ -0,0 +1,12 @@ +#ifndef CALENDAREXAM_H +#define CALENDAREXAM_H + +#include "../page.h" + +class calendarExam : public Page +{ +public: + calendarExam(); +}; + +#endif // CALENDAREXAM_H diff --git a/src/jceData/Calendar/calendarPage.h b/src/jceData/Calendar/calendarPage.h index 75de858..d4935bd 100644 --- a/src/jceData/Calendar/calendarPage.h +++ b/src/jceData/Calendar/calendarPage.h @@ -28,7 +28,6 @@ private: QString tempHtml; std::list* courses; - }; #endif // CALENDARPAGE_H diff --git a/src/jceData/Grades/graph/gradegraph.cpp b/src/jceData/Grades/graph/gradegraph.cpp index b0d114b..59ec562 100644 --- a/src/jceData/Grades/graph/gradegraph.cpp +++ b/src/jceData/Grades/graph/gradegraph.cpp @@ -1,12 +1,12 @@ #include "gradegraph.h" #include "ui_gradegraph.h" -gradegraph::gradegraph(QWidget *parent, GradePage *gpPTR) : +gradegraph::gradegraph(QWidget *parent) : QDialog(parent), ui(new Ui::gradegraph) { ui->setupUi(this); - this->gp = gpPTR; + this->gp = NULL; } @@ -16,6 +16,7 @@ void gradegraph::showGraph(GradePage *gpPTR) setVisualization(); setGraphsData(); this->show(); + } gradegraph::~gradegraph() @@ -25,12 +26,12 @@ gradegraph::~gradegraph() void gradegraph::setGraphsData() { - int minYearInList = gp->getMinYearInList(); //2012 - int maxYearInList = gp->getMaxYearInList()+1; //2016 - int xRangeForYear = (maxYearInList - minYearInList+2)*3; //6*3=18 + int minYearInList = gp->getMinYearInList(); + int maxYearInList = gp->getMaxYearInList()+1; + int xRangeForYear = (maxYearInList - minYearInList+2)*3; QVector SemesterialAvg(xRangeForYear),yearlyAvg(xRangeForYear),sem(xRangeForYear); - for (int yearCount=0,i=1; igraphwidget->xAxis->setLabel(tr("Years")); ui->graphwidget->xAxis->setAutoTickLabels(false); - ui->graphwidget->xAxis->setTickVectorLabels(xStrings); ui->graphwidget->xAxis->setTickLabelFont(QFont(QFont().family(), 7)); ui->graphwidget->xAxis->setAutoTickStep(false); ui->graphwidget->xAxis->setTickStep(1); ui->graphwidget->xAxis->setAutoSubTicks(false); ui->graphwidget->xAxis->setSubTickCount(1); + ui->graphwidget->xAxis->setTickVectorLabels(xStrings); ui->graphwidget->xAxis->setRange(1,xRangeForYear); ui->graphwidget->legend->setVisible(true); //show graph name on top right diff --git a/src/jceData/Grades/graph/gradegraph.h b/src/jceData/Grades/graph/gradegraph.h index 97195ad..e9e6cd0 100644 --- a/src/jceData/Grades/graph/gradegraph.h +++ b/src/jceData/Grades/graph/gradegraph.h @@ -14,7 +14,7 @@ class gradegraph : public QDialog Q_OBJECT public: - gradegraph(QWidget *parent = 0, GradePage *gpPTR = 0); + gradegraph(QWidget *parent = 0); void showGraph(GradePage *gpPTR); ~gradegraph();