adds PawnList
This commit is contained in:
84
src/main.rs
84
src/main.rs
@@ -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) -> >k::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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user