#include #include #include #include"person.h" #include "help.h" using std::cout; WINDOW* info_tab; EventTime::EventTime(I16 Year, U8 Month, U16 Day, I8 Hour, I8 Minute) : year(Year) , month(Month) , day(Day) , hour(Hour) , minute(Minute) { assert(month <= 12 && day <= 31 && hour <= 23 && minute <= 59 && "Invalid EventTime data"); } void EventTime::print() const { /* if (day != UNKNOWN_DATE) */ /* cout << (I32)day; */ /* else */ /* cout << "??"; */ /* cout << '.'; */ /* if (month != UNKNOWN_DATE) */ /* cout << (I32)month; */ /* else */ /* cout << "??"; */ /* cout << '.'; */ /* if (year != UNKNOWN_DATE) */ /* cout << year; */ /* else */ /* cout << "????"; */ /* cout << '\n'; */ if (day != UNKNOWN_DATE) wprintw(info_tab, "%d", day); else waddstr(info_tab, "??"); waddch(info_tab, '.'); if (month != UNKNOWN_DATE) wprintw(info_tab, "%d", month); else waddstr(info_tab, "??"); waddch(info_tab, '.'); if (year != UNKNOWN_DATE) wprintw(info_tab, "%d", year); else waddstr(info_tab, "????"); waddch(info_tab, '\n'); } Person::Person(const char* name, EventTime birth, bool isMale, EventTime death) : name_(name) , numRel_(0) , birth_(birth) , isMale_(isMale) , death_(death) { } /*Person& Person::operator=(const Person &other) { if (&other!=this) { rename(other.name); numRel = other.numRel; isMale = other.isMale; day = other.day; month = other.month; year = other.year; } return *this; }*/ bool Person::operator==(const Person &other)const { return name_ == other.name_ && isMale_ == other.isMale_; //TODO && day == other.day || !day || !other.day) && (month == other.month || !month || !other.month) && (year == other.year || !year || !other.year); } void Person::save(std::ofstream &file)const { // char nameLen = name_.size(); file.write(reinterpret_cast(&nameLen), sizeof(nameLen)); file.write(name_.data(), nameLen * sizeof(name_[0])); file.write(reinterpret_cast(&numRel_), sizeof(numRel_)); file.write(reinterpret_cast(&isMale_), sizeof(isMale_)); //file.write(reinterpret_cast(&day), sizeof(day)); TODO //file.write(reinterpret_cast(&month), sizeof(month)); //file.write(reinterpret_cast(&year), sizeof(year)); } void Person::load(std::ifstream &file) { char nameLen; file.read((char*)&nameLen, sizeof(nameLen)); //Check len C8 nameBuf[128]; file.read(nameBuf, nameLen * sizeof(*nameBuf)); nameBuf[nameLen] = '\0'; name_ = nameBuf; file.read(reinterpret_cast(&numRel_), sizeof(numRel_)); file.read(reinterpret_cast(&isMale_), sizeof(isMale_)); //file.read(reinterpret_cast(&day), sizeof(day)); TODO //file.read(reinterpret_cast(&month), sizeof(month)); //file.read(reinterpret_cast(&year), sizeof(year)); } void Person::rename(const char* newName) { name_ = newName; } void Person::print()const { info_tab = newwin(LINES, COLS, 0, 0); waddstr(info_tab, name_.data()); waddch(info_tab,'\n'); waddstr(info_tab, "Birth: "); birth_.print(); waddstr(info_tab, "Death: "); death_.print(); mvwaddstr(info_tab, LINES-1, 0, "Press any key to return."); wrefresh(info_tab); getch(); /* waint press */ werase(info_tab); wrefresh(info_tab); delwin(info_tab); /* cout << name_ << '\n'; */ /* cout << (isMale_ ? "Male\n" : "Female\n"); */ /* cout << "Birth: "; */ /* birth_.print(); */ /* cout << "Death: "; //TODO: only print if known */ /* death_.print(); */ /* cout << '\n'; */ } WINDOW* Person::createPad()const { U16 width = name_.size() + 4; WINDOW* pad = newpad(5, width); box(pad, 5, width); mvwaddstr(pad, 2, 2, name_.data()); return pad; } void Person::draw(U16 drawY, U16 drawX) const { U16 width = name_.size() + 4; /* TODO: get actual lenght */ WINDOW* pad = newpad(BOX_HEIGHT, width); box(pad, BOX_HEIGHT, width); mvwaddstr(pad, 2, 2, name_.data()); pnoutrefresh(pad, 0, 0, drawY, drawX, drawY + BOX_HEIGHT-1, drawX + width-1); delwin(pad); }