adds PawnList

This commit is contained in:
2019-06-04 21:39:08 +02:00
parent ca3696f63f
commit 525babba5b
4 changed files with 165 additions and 16 deletions

View File

@@ -12,15 +12,79 @@ use std::process;
mod grid;
mod pawn {
use super::*;
pub struct Pawn {
name: String
#[derive(Debug,Clone)]
pub struct PawnList {
inner: gtk::ListBox,
}
fn pawn_factory() -> Vec<Pawn> {
impl PawnList {
pub fn init(inner: gtk::ListBox) -> Self {
PawnList{ inner }
}
pub fn add(&self, pawn: &Pawn) {
let row = gtk::ListBoxRow::new();
row.add(pawn.as_ref());
self.inner.add(&row);
}
}
struct PawnData {
name: String,
}
pub struct Pawn {
data: PawnData,
widget: gtk::Box,
}
impl Pawn {
pub fn new<S: Into<String>>(name: S) -> Self {
let pawn_src = include_str!("../res/pawn.glade");
let builder = gtk::Builder::new_from_string(pawn_src);
let name = name.into();
let label: gtk::Label =
builder
.get_object("name")
.unwrap();
label.set_text(&name);
let place_btn: gtk::Button =
builder
.get_object("place_btn")
.unwrap();
place_btn.connect_clicked(|_| {
println!("Placing...");
});
let stats_btn: gtk::Button =
builder
.get_object("stats_btn")
.unwrap();
stats_btn.connect_clicked(|_| {
println!("Showing stats...");
});
let widget: gtk::Box = builder.get_object("pawn").unwrap();
Pawn {
data: PawnData{ name },
widget,
}
}
}
impl AsRef<gtk::Box> for Pawn {
fn as_ref(&self) -> &gtk::Box {
&self.widget
}
}
pub fn pawn_factory() -> Vec<Pawn> {
let mut pawns = Vec::with_capacity(3);
for name in &["Lomion", "Oilosse", "Fefi"] {
pawns.push(Pawn{ name: name.to_string() });
pawns.push(Pawn::new(*name));
}
pawns
}
@@ -28,7 +92,11 @@ mod pawn {
#[cfg(test)]
mod tests {
#[test]
fn test_pawn_factory() {}
fn test_pawn_factory() {
let pawns = pawn_factory();
assert_eq!(pawns.len(), 3);
assert_eq!(pawns.get(2).unwrap(), "Fefi");
}
}
}
@@ -84,6 +152,12 @@ impl App {
// * Display creature description when hovering over its position (cell)
// TODO: Pawn list
let pawn_list = builder.get_object("pawn_list").unwrap();
let pawn_list = pawn::PawnList::init(pawn_list);
for pawn in &pawn::pawn_factory() {
pawn_list.add(pawn);
}
win.show_all();
}