adds PawnList
This commit is contained in:
@@ -32,17 +32,8 @@
|
||||
<object class="GtkListBox" id="pawn_list">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="width_request">100</property>
|
||||
<property name="height_request">80</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<property name="selection_mode">none</property>
|
||||
<signal name="button-press-event" handler="on_pawn_click" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="resize">False</property>
|
||||
|
||||
66
res/pawn.glade
Normal file
66
res/pawn.glade
Normal file
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.22.1 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.20"/>
|
||||
<object class="GtkBox" id="pawn">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_left">10</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="label" translatable="yes">Name</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButtonBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="margin_left">8</property>
|
||||
<property name="spacing">3</property>
|
||||
<property name="layout_style">start</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="place_btn">
|
||||
<property name="label" translatable="yes">Place</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">half</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="stats_btn">
|
||||
<property name="label" translatable="yes">Stats</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">half</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
18
src/grid.rs
18
src/grid.rs
@@ -39,6 +39,24 @@ impl CellWidget {
|
||||
.unwrap();
|
||||
eventbox.set_events(gdk::EventMask::BUTTON_PRESS_MASK);
|
||||
|
||||
// Drag-and-drop capacity
|
||||
let targets = vec![];
|
||||
eventbox.drag_dest_set(
|
||||
gtk::DestDefaults::ALL,
|
||||
&targets,
|
||||
gdk::DragAction::COPY,
|
||||
);
|
||||
eventbox.drag_source_set(
|
||||
gdk::ModifierType::MODIFIER_MASK,
|
||||
&targets,
|
||||
gdk::DragAction::COPY,
|
||||
);
|
||||
eventbox.connect_drag_begin(|_,_| {
|
||||
println!("Lift...");
|
||||
});
|
||||
eventbox.connect_drag_end(|_,_| {
|
||||
println!("Drop !");
|
||||
});
|
||||
let header: gtk::Label =
|
||||
builder
|
||||
.get_object("header")
|
||||
|
||||
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