adds PawnList
This commit is contained in:
@@ -32,17 +32,8 @@
|
|||||||
<object class="GtkListBox" id="pawn_list">
|
<object class="GtkListBox" id="pawn_list">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<property name="selection_mode">none</property>
|
||||||
<object class="GtkListBoxRow">
|
<signal name="button-press-event" handler="on_pawn_click" swapped="no"/>
|
||||||
<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>
|
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="resize">False</property>
|
<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();
|
.unwrap();
|
||||||
eventbox.set_events(gdk::EventMask::BUTTON_PRESS_MASK);
|
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 =
|
let header: gtk::Label =
|
||||||
builder
|
builder
|
||||||
.get_object("header")
|
.get_object("header")
|
||||||
|
|||||||
84
src/main.rs
84
src/main.rs
@@ -12,15 +12,79 @@ use std::process;
|
|||||||
mod grid;
|
mod grid;
|
||||||
|
|
||||||
mod pawn {
|
mod pawn {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
pub struct Pawn {
|
#[derive(Debug,Clone)]
|
||||||
name: String
|
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);
|
let mut pawns = Vec::with_capacity(3);
|
||||||
for name in &["Lomion", "Oilosse", "Fefi"] {
|
for name in &["Lomion", "Oilosse", "Fefi"] {
|
||||||
pawns.push(Pawn{ name: name.to_string() });
|
pawns.push(Pawn::new(*name));
|
||||||
}
|
}
|
||||||
pawns
|
pawns
|
||||||
}
|
}
|
||||||
@@ -28,7 +92,11 @@ mod pawn {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
#[test]
|
#[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)
|
// * Display creature description when hovering over its position (cell)
|
||||||
|
|
||||||
// TODO: Pawn list
|
// 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();
|
win.show_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user