Vipe: Finish basic prototype

Map data structure which maps dates to std::string events
This commit is contained in:
osamu-kj 2023-05-07 18:42:14 +02:00
parent 4c1bc842a4
commit b9f7c2eeeb
5 changed files with 77 additions and 45 deletions

View File

@ -39,13 +39,14 @@ This will open the default view mode (month) and display the current month's cal
The following is a list of things that have been/still have to be completed. The following is a list of things that have been/still have to be completed.
- basic prototype with vipe (in memory only) - Basic prototype with vipe (in memory only)
- writing a calendar to file - Finish all the basic shortcuts
- reading a calendar from a file - Ability to write a calendar to a file
- alerting function - Ability to read a calendar from a file
- logging - Alerting function for errors and issues
- read input from stdin - Logging / Debug flag
- set reminder - Read input from stdin
- Set reminders
# Contributions # Contributions

View File

@ -1,6 +1,8 @@
#ifndef CALENDAR_HPP #ifndef CALENDAR_HPP
#define CALENDAR_HPP #define CALENDAR_HPP
#include <tuple>
struct calendar_information { struct calendar_information {
int current_day; int current_day;
int current_month; int current_month;
@ -10,6 +12,11 @@ struct calendar_information {
calendar_information(); calendar_information();
}; };
const bool operator<(const calendar_information& first, const calendar_information& second) {
return std::tie(first.current_day, first.current_month, first.current_month_days, first.current_year) <
std::tie(second.current_day, second.current_month, second.current_month_days, second.current_year);
}
class Calendar { class Calendar {
public: public:
static int get_days_in_month(int month, int year); static int get_days_in_month(int month, int year);

View File

@ -1,4 +1,5 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <ncurses.h> #include <ncurses.h>
#include <signal.h> #include <signal.h>
#include "engine.hpp" #include "engine.hpp"
@ -41,7 +42,6 @@ void Engine::ui_draw(WINDOW *win) {
this->ui_top_draw(win); this->ui_top_draw(win);
this->ui_bottom_draw(win); this->ui_bottom_draw(win);
wrefresh(win); wrefresh(win);
} }
void Engine::ui_month_draw(WINDOW *win) { void Engine::ui_month_draw(WINDOW *win) {
@ -79,32 +79,13 @@ void Engine::ui_bottom_draw(WINDOW *win) {
if (VIS_COLORING) wattron(win, COLOR_PAIR(1)); if (VIS_COLORING) wattron(win, COLOR_PAIR(1));
calendar_information date_info = this->calendar->get_info(); calendar_information date_info = this->calendar->get_info();
mvwprintw(win, LINES-2, 1, "Year: %d, Month: %d, Day: %d", date_info.current_year, date_info.current_month, date_info.current_day); std::string current_view_mode = calendar_view_mode_str[this->view_mode];
mvwprintw(win, LINES-2, 1, "Year: %d, Month: %d, Day: %d, Mode: %s\n", date_info.current_year, date_info.current_month, date_info.current_day, current_view_mode.c_str());
if (VIS_COLORING) wattroff(win, COLOR_PAIR(1)); if (VIS_COLORING) wattroff(win, COLOR_PAIR(1));
} }
void Engine::ui_dialog_draw(WINDOW *win) {
int lines = LINES/2, cols = COLS/2;
int y_center = (LINES/2)-(lines/2), x_center = (COLS/2)-(cols/2);
this->dialog = newwin(lines, cols, y_center, x_center);
box(this->dialog, 0, 0);
char str[200];
mvwprintw(this->dialog, 1, 1, "Enter your name lol: ");
wrefresh(this->dialog);
mvwgetnstr(this->dialog, 2, 1, str, 200);
wprintw(this->dialog, "Press q to save or r to retake");
wrefresh(this->dialog);
}
void Engine::input_handle_month(WINDOW *win) { void Engine::input_handle_month(WINDOW *win) {
char key = getch(); char key = getch();
@ -162,30 +143,60 @@ void Engine::input_handle_month(WINDOW *win) {
this->active_cell = 0; this->active_cell = 0;
break; break;
case 'i': case 'i': {
endwin(); int vipe_out[2], vipe_in[2];
int link[2]; char output_buffer[4096];
char foo[4096]; memset(output_buffer, 0, sizeof(output_buffer));
pipe(link); pipe(vipe_out);
pipe(vipe_in);
pid_t pid = fork(); pid_t pid = fork();
if (pid == 0) { if (pid == 0) {
dup2(link[1], STDOUT_FILENO); dup2(vipe_in[0], STDIN_FILENO);
close(link[0]); dup2(vipe_out[1], STDOUT_FILENO);
close(link[1]);
close(vipe_in[0]);
close(vipe_in[1]);
close(vipe_out[0]);
close(vipe_out[1]);
system("vipe"); system("vipe");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} else { } else {
close(link[1]); close(vipe_in[0]);
int nbytes = read(link[0], foo, sizeof(foo)); close(vipe_out[1]);
printw("Output of vipe: %s\n", foo);
}
std::string event = this->events_map[this->calendar->get_info()];
write(vipe_in[1], event.c_str(), event.length());
close(vipe_in[1]);
int nbytes = read(vipe_out[0], output_buffer, sizeof(output_buffer));
this->events_map[this->calendar->get_info()] = output_buffer;
}
endwin();
break;
}
case 'g':
this->calendar->set_day(1);
this->active_cell = 0;
break;
case 'G':
this->calendar->set_day(this->calendar->get_info().current_month_days);
this->active_cell = this->calendar->get_info().current_month_days-1;
break;
case 't':
this->view_mode = WEEK_VIEW;
wclear(win);
break; break;
} }
} }
void Engine::input_handle_week(WINDOW *win) {
}
void Engine::input_handle_months(WINDOW *win) { void Engine::input_handle_months(WINDOW *win) {
// TODO // TODO
} }

View File

@ -1,8 +1,11 @@
#ifndef ENGINE_HPP #ifndef ENGINE_HPP
#define ENGINE_HPP #define ENGINE_HPP
#include <iostream>
#include <ncurses.h> #include <ncurses.h>
#include <vector> #include <vector>
// #include <unordered_map>
#include <map>
#include "../calendar/calendar.hpp" #include "../calendar/calendar.hpp"
#include "../global/global.hpp" #include "../global/global.hpp"
@ -17,6 +20,12 @@ enum calendar_view_mode {
MONTHS_VIEW MONTHS_VIEW
}; };
std::string calendar_view_mode_str[] = {
"MONTH_VIEW",
"WEEK_VIEW",
"MONTHS_VIEW"
};
// title: drawing engine // title: drawing engine
// description: use for drawing the TUI and interact with the cells // description: use for drawing the TUI and interact with the cells
class Engine { class Engine {
@ -32,9 +41,12 @@ class Engine {
void ui_top_draw(WINDOW *win); void ui_top_draw(WINDOW *win);
void input_handle_month(WINDOW *win); void input_handle_month(WINDOW *win);
void input_handle_week(WINDOW *win);
void input_handle_months(WINDOW *win); void input_handle_months(WINDOW *win);
Calendar *calendar; Calendar *calendar;
// std::unordered_map<calendar_information, std::string> events_map;
std::map<calendar_information, std::string> events_map;
int active_cell; int active_cell;
calendar_view_mode view_mode; calendar_view_mode view_mode;

View File

@ -12,12 +12,14 @@ WINDOW *main_win;
void sig_winch(int sig) { void sig_winch(int sig) {
if (isendwin()) return; if (isendwin()) return;
endwin(); endwin();
wclear(main_win); wclear(main_win);
wrefresh(main_win); wrefresh(main_win);
wresize(main_win, LINES, COLS); wresize(main_win, LINES, COLS);
mvwin(main_win, 0, 0); mvwin(main_win, 0, 0);
// redraw the TUI after the resize signal // redraw the TUI after the resize signal
engine.ui_draw(main_win); engine.ui_draw(main_win);
@ -51,14 +53,13 @@ int main() {
// handle required signals // handle required signals
signals(); signals();
for (;;) { for (;;) {
wclear(main_win);
wrefresh(main_win);
engine.ui_draw(main_win); engine.ui_draw(main_win);
if (engine.view_mode == MONTH_VIEW) if (engine.view_mode == MONTH_VIEW)
engine.input_handle_month(main_win); engine.input_handle_month(main_win);
if (engine.view_mode == WEEK_VIEW)
engine.input_handle_week(main_win);
else if (engine.view_mode == MONTHS_VIEW) else if (engine.view_mode == MONTHS_VIEW)
engine.input_handle_months(main_win); engine.input_handle_months(main_win);
} }