aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authortslil clingman <>2020-01-11 22:42:27 -0500
committertslil clingman <>2020-01-11 22:42:27 -0500
commit46e1af1e694f066fd446f7d48b876f6217463818 (patch)
tree7ca278b1e9c5bf827d1758e93ee98ab1ffd99cc3 /src/main.rs
Init
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs157
1 files changed, 157 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..82b38af
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,157 @@
+extern crate pancurses;
+
+use pancurses::*;
+use pancurses::Input::*;
+
+mod board;
+
+use crate::board::*;
+
+struct BoardGui {
+ win : Window,
+ size : i32,
+ cell_height : i32,
+ cell_width : i32,
+ hoff : i32,
+ cur_cell : Position
+}
+
+#[derive(PartialEq)]
+enum BGAction { Quit , None }
+
+use std::convert::*;
+
+impl BoardGui {
+ fn mv_to_cell(&self, pos : &Position) {
+ let y:i32 = pos.y.into();
+ let x:i32 = pos.x.into();
+ if (y < self.size) && (x < self.size) {
+ let y = y*self.cell_height+1;
+ let x = self.hoff + x*self.cell_width+1;
+ self.win.mv(y,x);
+ self.win.refresh();
+ }
+ }
+
+ fn draw_grid(&self) {
+ for y in 0..self.cell_height*self.size+1 {
+ for x in 0..self.cell_width*self.size+1 {
+ if y % self.cell_height == 0 {
+ if x % self.cell_width == 0 {
+ self.win.mvaddch(y,x+self.hoff,'+');
+ } else {
+ self.win.mvaddch(y,x+self.hoff,'-');
+ }
+ } else if x % self.cell_width == 0 {
+ self.win.mvaddch(y,x+self.hoff,'|');
+ }
+ }
+ }
+ for y in 0..self.size {
+ self.win.mvaddstr(y*self.cell_height+self.cell_height/2,
+ 0,
+ format!("{}.",self.size-y));
+ }
+ for x in 0..self.size {
+ self.win.mvaddstr(self.size*self.cell_height+1,
+ self.cell_width*x+self.cell_width/2+self.hoff,
+ format!("{:x}.",x+10));
+ }
+ self.win.refresh();
+ }
+
+ fn handle_key(&mut self, key : Input) -> BGAction {
+ match key {
+ KeyUp => {
+ if 0 < self.cur_cell.y {
+ self.cur_cell.y -= 1;
+ self.mv_to_cell(&self.cur_cell);
+ }
+ BGAction::None
+ },
+ KeyDown => {
+ let y:i32 = self.cur_cell.y.into();
+ if y + 1 < self.size {
+ self.cur_cell.y += 1;
+ self.mv_to_cell(&self.cur_cell);
+ }
+ BGAction::None
+ },
+ KeyLeft => {
+ if 0 < self.cur_cell.x {
+ self.cur_cell.x -= 1;
+ self.mv_to_cell(&self.cur_cell);
+ }
+ BGAction::None
+ },
+ KeyRight => {
+ let x:i32 = self.cur_cell.x.into();
+ if x + 1< self.size {
+ self.cur_cell.x += 1;
+ self.mv_to_cell(&self.cur_cell);
+ }
+ BGAction::None
+ },
+ Character('q') => BGAction::Quit,
+ x => {
+ self.win.addstr(format!("{:?}",x));
+ self.win.refresh();
+ BGAction::None
+ }
+ }
+ }
+
+ fn init(&self) {
+ self.draw_grid();
+ self.mv_to_cell(&self.cur_cell);
+ }
+}
+
+struct MoveEntry {
+ win : Window,
+}
+
+impl MoveEntry {
+
+ fn init(&self) {
+ self.win.attrset(COLOR_PAIR(3)|A_BOLD); // ????
+ self.win.mvaddstr(0,0,"Enter move: ashtsaht");
+ // self.win.mvchgat(0,12,10,A_NORMAL,COLOR_PAIR(1));
+ self.win.refresh();
+ }
+}
+
+fn main() {
+ let screen = initscr();
+ screen.nodelay(true);
+ screen.keypad(true);
+
+ if has_colors() { start_color(); }
+
+ cbreak();
+ noecho();
+
+ curs_set(2);
+
+ screen.refresh();
+
+ let bgw = newwin(25,40,0,0);
+ let mew = newwin(1,30,25,0);
+
+ let mut bg = BoardGui { win : bgw, size : 5, cell_height : 4,
+ cell_width : 7, hoff : 3,
+ cur_cell : Position { x : 0, y : 0 }
+ };
+
+ let me = MoveEntry { win : mew };
+
+ bg.init();
+ me.init();
+
+ loop {
+ if let Some(inp) = screen.getch() {
+ if bg.handle_key(inp) == BGAction::Quit {break}
+ }
+ }
+ endwin();
+}