313 lines
9.5 KiB
C++
313 lines
9.5 KiB
C++
#include <ncursesw/ncurses.h>
|
|
#include <iostream>
|
|
#include "tree.h"
|
|
#include "help.h"
|
|
|
|
using std::cin;
|
|
using std::cout;
|
|
int main()
|
|
{
|
|
setlocale(LC_ALL, ""); /* TODO: set to utf */
|
|
|
|
/* Init ncurses */
|
|
initscr(); /* Start curses mode */
|
|
curs_set(0); /* Hide cursor */
|
|
noecho();
|
|
cbreak(); /* get input instantly */
|
|
keypad(stdscr, true);
|
|
start_color();
|
|
use_default_colors();
|
|
/* init_pair(5, COLOR_BLACK, COLOR_BLACK); */
|
|
/* bkgd(COLOR_PAIR(5)); */
|
|
init_pair(COLOR_MALE, COLOR_BLUE, -1); /* -1 means use default */
|
|
init_pair(COLOR_FEMALE, COLOR_RED, -1);
|
|
init_pair(COLOR_SELECTED, COLOR_YELLOW, -1);
|
|
wnoutrefresh(stdscr); /* if not present the first real refresh is missed */
|
|
|
|
Tree test1("Dechkovi"); //addTree Dechkovi addTree Karamanovi load 0 load 1 (to work with these example trees)
|
|
Tree test2("Karamanovi");
|
|
|
|
test1.addPerson("Rumen", true, Nobody, Nobody, {1968, 8, 9});
|
|
test1.addPerson("Nadejda", false, Nobody, Nobody, {1972, 12, 15});
|
|
test1.addRelation(0, Spouse, 1);
|
|
test1.addPerson("Venelin", true, 0, 1, {1998, 6, 9});
|
|
test1.addPerson("Vasil", true, 0, 1, {2001, 1, 16});
|
|
/* test1.addRelation(2, Brother, 3); */
|
|
/* test1.addPerson("Maria-Veronika", 2009, 9, 3, 1, 0, 1); */
|
|
/* test1.addRelation(2, Brother, 4); */
|
|
/* test1.addRelation(3, Brother, 4); */
|
|
|
|
test2.addPerson("Vasil Dimitrov", true, Nobody, Nobody, {1941, 5, 18});
|
|
test2.addPerson("Maria", false);
|
|
test2.addRelation(0, Spouse, 1);
|
|
test2.addPerson("Dimitar", true, 0, 1);
|
|
test2.addPerson("Nadejda", false, 0, 1, {1972, 12, 15});
|
|
/* test2.addRelation(2, Brother, 3); */
|
|
test2.addPerson("Branimira", false);
|
|
test2.addRelation(2, Spouse, 4);
|
|
test2.addPerson("Ioan", true, 2, 4);
|
|
test2.addPerson("Rumiana", false, 2, 4);
|
|
/* test2.addRelation(5, Brother, 6); */
|
|
|
|
test1.display();
|
|
test2.display();
|
|
|
|
/* (test1 + test2).display(); */
|
|
test1 += test2;
|
|
test1.display();
|
|
test1.display();
|
|
|
|
|
|
/* test1.saveTree(); */
|
|
/* test2.saveTree(); */
|
|
|
|
Tree firstTree("firstTree");
|
|
|
|
firstTree.addPerson("Адам", true, Nobody, Nobody, {0, 1, 6});
|
|
firstTree.addPerson("Ева", false, Nobody, Nobody, {0, 1, 6});
|
|
firstTree.addRelation(0, Spouse, 1);
|
|
|
|
firstTree.addPerson("Кайн", true, 0, 1);
|
|
|
|
firstTree.addPerson("Авел", true, 0, 1);
|
|
firstTree.addRelation(2, Sibling, 3);
|
|
|
|
firstTree.addPerson("Сит", true, 0, 1, 230);
|
|
firstTree.addRelation(2, Sibling, 4);
|
|
firstTree.addPerson("Енос", true, 4, Nobody, 435);
|
|
firstTree.addPerson("Каинан", true, 5 , Nobody, 605);
|
|
firstTree.addPerson("Малелеил", true, 6, Nobody, 605);
|
|
|
|
|
|
firstTree.addPerson("Енох", true, 3 , Nobody);
|
|
firstTree.addPerson("Гаидад", true, 8 , Nobody);
|
|
firstTree.addPerson("Малелеил", true, 9, Nobody);
|
|
|
|
|
|
/* firstTree.print(); */
|
|
firstTree.display();
|
|
/* firstTree.saveTree(); */
|
|
|
|
/* firstTree.printRel(3); */
|
|
firstTree.printOldestAncestors(3);
|
|
|
|
|
|
/* ====================================================== */
|
|
|
|
std::vector<Tree> trees;
|
|
|
|
bool quit = false;
|
|
char input[128];
|
|
short i; //Number of the entered command
|
|
const short numCom = 24;
|
|
const char* const commandList[] =
|
|
{
|
|
"quit", //0
|
|
"rename", //1
|
|
"load", //2
|
|
"save", //3
|
|
"addPerson", //4
|
|
"addPersonWP", //5 Adds a person and connects him to his parents, by their number
|
|
"addRelation", //6 Adds a relation between two people input by name
|
|
"addRelationID", //7 -||- by number
|
|
"findID", //8
|
|
"equate", //9 Enter the number of two trees, the second becomes equal to the first
|
|
"combine", //10
|
|
"subtract", //11
|
|
"removePerson", //12
|
|
"removePersonID", //13
|
|
"removeRelation", //14
|
|
"removeRelationID", //15
|
|
"addTree", //16
|
|
"prtRelatives", //17
|
|
"prtMember", //18
|
|
"prtAncestors", //19
|
|
"chooseTree", //20
|
|
"prtCommonAncestor", //21
|
|
"prtOldestAncestors",//22
|
|
"prtTree" //23
|
|
};
|
|
|
|
unsigned curTree = 0, //Currently selected tree ID
|
|
id, secondId; // Person IDs
|
|
Tree* newTree;
|
|
char name[128], secondName[128];
|
|
U8 day, month; //TODO add h m
|
|
U16 year;
|
|
bool sex;
|
|
unsigned father, mother; // IDs
|
|
|
|
/* do */
|
|
/* { */
|
|
/* clear(); */
|
|
/* printw("Enter a command\n"); */
|
|
/* refresh(); */
|
|
/* // getmaxyx(stdscr,row,col); /\* get the number of rows and columns *\/ */
|
|
|
|
/* std::cin >> input; */
|
|
/* for (i = 0; i < numCom; ++i) */
|
|
/* { */
|
|
/* if (strComp(input, commandList[i])) */
|
|
/* break; */
|
|
/* } */
|
|
|
|
/* switch (i) */
|
|
/* { */
|
|
/* default: */
|
|
/* std::cout << "Unknown command, try again\n\n"; */
|
|
/* break; */
|
|
/* case 0: //quit */
|
|
/* quit = 1; */
|
|
/* break; */
|
|
/* case 1: //rename */
|
|
/* std::cout << "Enter new name\n\n"; */
|
|
/* std::cin >> name; */
|
|
/* trees[curTree].rename(name); */
|
|
/* break; */
|
|
/* case 2: //load */
|
|
/* cin >> input; */
|
|
/* trees.push(Tree(input)); */
|
|
/* if (!trees[trees.gNum() - 1].loadTree()) */
|
|
/* std::cout << "File doesnt exist or is empty.\n\n"; */
|
|
/* break; */
|
|
/* case 3: //save */
|
|
/* trees[curTree].saveTree(); */
|
|
/* break; */
|
|
/* case 4: //addPerson */
|
|
/* std::cin >> name >> day >> month >> year >> sex; */
|
|
/* trees[curTree].addPerson(name, sex, Nobody, Nobody, EventTime(year, month, day)); */
|
|
/* break; */
|
|
/* case 5: //addPersonWP */
|
|
/* std::cin >> name >> day >> month >> year >> sex >> father >> mother; */
|
|
/* trees[curTree].addPerson(name, sex, father, mother, EventTime(year, month, day)); */
|
|
/* break; */
|
|
/* case 6: //addRelation */
|
|
/* std::cin >> name >> input >> secondName; */
|
|
/* while (!strToRel(input)) */
|
|
/* { */
|
|
/* std::cout << "Invalid Relation, try again!\n"; */
|
|
/* std::cin >> input; */
|
|
/* } */
|
|
/* if(!trees[curTree].addRelation(name, strToRel(input), secondName)) */
|
|
/* std::cout << "Failure! One or both of the relatives don't exist.\n\n"; */
|
|
/* break; */
|
|
/* case 7: //addRelationID */
|
|
/* std::cin >> id >> input >> secondId; */
|
|
/* while (!strToRel(input)) */
|
|
/* { */
|
|
/* std::cout << "Invalid Relation, try again!\n"; */
|
|
/* std::cin >> input; */
|
|
/* } */
|
|
/* if(trees[curTree].addRelation(id, strToRel(input), secondId)) */
|
|
/* std::cout << "Failure! One or both of the relatives don't exist.\n\n"; */
|
|
/* break; */
|
|
/* case 8: //findID */
|
|
/* std::cin >> name; */
|
|
/* id = trees[curTree].findId(name); */
|
|
/* if (id == Nobody) */
|
|
/* std::cout << "No such person in tree " << curTree <<"\n\n"; */
|
|
/* else */
|
|
/* std::cout << id << "\n\n"; */
|
|
/* break; */
|
|
/* case 9: //equate */
|
|
/* std::cin >> id >> secondId; */
|
|
/* trees[id] = trees[secondId]; */
|
|
/* break; */
|
|
/* case 10: //combine */
|
|
/* std::cin >> id >> secondId; */
|
|
/* trees[id] += trees[secondId]; */
|
|
/* break; */
|
|
/* case 11: //subtract */
|
|
/* std::cin >> id >> secondId; */
|
|
/* trees[id] -= trees[secondId]; */
|
|
/* break; */
|
|
/* case 12: //removePerson */
|
|
/* std::cin >> name; */
|
|
/* if (trees[curTree].findId(name) != Nobody) */
|
|
/* trees[curTree].removePerson(name); */
|
|
/* else */
|
|
/* std::cout << "No such member!\n\n"; */
|
|
/* break; */
|
|
/* case 13: //removePersonID */
|
|
/* std::cin >> id; */
|
|
/* if (trees[curTree].gNumP() > id) */
|
|
/* trees[curTree].removePerson(id); */
|
|
/* else */
|
|
/* std::cout << "No such member!\n\n"; */
|
|
/* break; */
|
|
/* case 14: //removeRelation */
|
|
/* std::cin >> name >> secondName; */
|
|
/* if (trees[curTree].gNumP() > trees[curTree].findId(name) && trees[curTree].gNumP() > trees[curTree].findId(secondName)) */
|
|
/* trees[curTree].removeRelation(name, secondName); */
|
|
/* else */
|
|
/* std::cout << "No such member!\n\n"; */
|
|
/* break; */
|
|
/* case 15: //removeRelationID */
|
|
/* std::cin >> id >> secondId; */
|
|
/* if (trees[curTree].gNumP() > id && trees[curTree].gNumP() > secondId) */
|
|
/* trees[curTree].removeRelation(id, secondId); */
|
|
/* else */
|
|
/* std::cout << "No such member\n\n"; */
|
|
/* break; */
|
|
/* case 16: //addTree */
|
|
/* std::cin >> name; */
|
|
/* newTree = new Tree(name); */
|
|
/* trees.push(*newTree); */
|
|
/* delete newTree; */
|
|
/* break; */
|
|
/* case 17: //printRelatives */
|
|
/* std::cin >> id; */
|
|
/* if (id < trees[curTree].gNumP()) */
|
|
/* trees[curTree].printRel(id); */
|
|
/* else */
|
|
/* std::cout << "No such member\n\n"; */
|
|
/* break; */
|
|
/* case 18: //printMember */
|
|
/* std::cin >> id; */
|
|
/* if (id < trees[curTree].gNumP()) */
|
|
/* trees[curTree].printMember(id); */
|
|
/* else */
|
|
/* std::cout << "No such member\n\n"; */
|
|
/* break; */
|
|
/* case 19: //printAncestors */
|
|
/* std::cin >> id; */
|
|
/* /\*if (id < trees[curTree].gNumP()) */
|
|
/* trees[curTree].printAncestors(id); */
|
|
/* else */
|
|
/* std::cout << "No such member\n\n";*\/ */
|
|
/* break; */
|
|
/* case 20: //chooseTree */
|
|
/* std::cout << "Enter tree ID\n\n"; */
|
|
/* std::cin >> id; */
|
|
/* if (id < trees.gNum()) */
|
|
/* curTree = id; */
|
|
/* else */
|
|
/* std::cout << "No such tree\n\n"; */
|
|
/* break; */
|
|
/* case 21: //prtCommonAncestor */
|
|
/* std::cin >> id >> secondId; */
|
|
/* if (id < trees[curTree].gNumP() || secondId < trees[curTree].gNumP()) */
|
|
/* trees[curTree].printMember(trees[curTree].findCommonAncestor(id, secondId)); */
|
|
/* else */
|
|
/* std::cout << "No such member\n\n"; */
|
|
/* break; */
|
|
/* case 22: //prtOldestAncestors */
|
|
/* std::cin >> id; */
|
|
/* if (id < trees[curTree].gNumP()) */
|
|
/* trees[curTree].printOldestAncestors(id); */
|
|
/* else */
|
|
/* std::cout << "No such member\n\n"; */
|
|
/* break; */
|
|
/* case 23: */
|
|
/* trees[curTree].print(); */
|
|
/* break; */
|
|
/* } */
|
|
|
|
/* } while (!quit); */
|
|
|
|
endwin(); /* stop ncursers */
|
|
|
|
|
|
return 0;
|
|
}
|