Selaa lähdekoodia

Move widget definition to widgets module

Thomas Dy 7 vuotta sitten
vanhempi
commit
08f92d23a4

+ 4 - 4
src/main.rs

@@ -19,7 +19,7 @@ use std::thread;
 use std::time;
 
 use ui::x11;
-use ui::widget;
+use widgets::Message;
 
 fn main() {
     let config_path = env::args().nth(1).unwrap_or("./panel.toml".to_string());
@@ -30,7 +30,7 @@ fn main() {
         {
             let tx = tx.clone();
             simple_signal::set_handler(&[Signal::Int, Signal::Term], move |_signals| {
-                tx.send(widget::Message::Quit).expect("Failed to send quit");
+                tx.send(Message::Quit).expect("Failed to send quit");
             });
         }
         {
@@ -40,7 +40,7 @@ fn main() {
                 loop {
                     match conn.wait_for_event() {
                         Some(event) => {
-                            let message = widget::Message::XcbEvent(event);
+                            let message = Message::XcbEvent(event);
                             tx.send(message).expect("Failed to send xcb event");
                         },
                         None => { break; }
@@ -75,7 +75,7 @@ fn main() {
             let tx = tx.clone();
             thread::spawn(move || {
                 loop {
-                    tx.send(widget::Message::Update).expect("Failed to send update");
+                    tx.send(Message::Update).expect("Failed to send update");
                     thread::sleep(time::Duration::from_secs(1));
                 }
             });

+ 0 - 24
src/ui/widget.rs → src/ui/draw_context.rs

@@ -1,4 +1,3 @@
-use mpd;
 use xcb;
 use ui::ext;
 use ui::ext::ConnectionExt;
@@ -7,29 +6,6 @@ use ui::font;
 use std::cmp;
 use std::rc::Rc;
 use std::sync::Arc;
-use std::sync::mpsc;
-
-pub type MessageSender = mpsc::Sender<Message>;
-
-pub enum Message {
-    Relayout,
-    Update,
-    Quit,
-    MousePress(u16),
-    BspwmEvent(String),
-    MpdEvent(mpd::status::State, String, String),
-    XcbEvent(xcb::GenericEvent)
-}
-
-pub trait Widget {
-    fn init(&mut self) {}
-    fn render(&mut self, x: u16);
-    fn width(&mut self) -> u16;
-    fn handle_event(&mut self, _event: &Message) -> bool {
-        false
-    }
-    fn finish(&mut self) {}
-}
 
 pub struct DrawContext {
     conn: Arc<xcb::Connection>,

+ 1 - 1
src/ui/mod.rs

@@ -2,7 +2,7 @@ pub mod font;
 pub mod panel;
 pub mod ext;
 pub mod util;
-pub mod widget;
+pub mod draw_context;
 pub mod x11;
 
 pub const SIZE: u16 = 20;

+ 10 - 10
src/ui/panel.rs

@@ -1,11 +1,11 @@
 use config::Config;
 use xcb;
+use ui::draw_context::DrawContext;
 use ui::ext;
 use ui::ext::ConnectionExt;
 use ui::font;
-use ui::widget;
-use ui::widget::Widget;
 use ui::x11;
+use widgets::{Message, Widget};
 
 use std::rc::Rc;
 use std::sync::Arc;
@@ -95,8 +95,8 @@ impl Panel {
         self.conn.flush();
     }
 
-    pub fn make_draw_context(&self) -> widget::DrawContext {
-        widget::DrawContext::new(self.conn.clone_connection(), self.window, self.picture, self.fonts.clone())
+    pub fn make_draw_context(&self) -> DrawContext {
+        DrawContext::new(self.conn.clone_connection(), self.window, self.picture, self.fonts.clone())
     }
 
     fn widgets_iter(&mut self) -> iter::Chain<slice::IterMut<WidgetState>, slice::IterMut<WidgetState>>{
@@ -115,7 +115,7 @@ impl Panel {
         );
     }
 
-    pub fn handle_event(&mut self, event: widget::Message) -> bool {
+    pub fn handle_event(&mut self, event: Message) -> bool {
         let finishing = self.finishing;
         let mut should_exit = false;
         if !finishing {
@@ -124,7 +124,7 @@ impl Panel {
             }
         }
         match event {
-            widget::Message::XcbEvent(event) => {
+            Message::XcbEvent(event) => {
                 if event.response_type() == xcb::EXPOSE {
                     self.relayout();
                 };
@@ -134,7 +134,7 @@ impl Panel {
                     for state in self.widgets_iter() {
                         if state.contains(x) {
                             let offset_x = x - state.position;
-                            let event = widget::Message::MousePress(offset_x);
+                            let event = Message::MousePress(offset_x);
                             state.widget.handle_event(&event);
                         }
                     }
@@ -146,11 +146,11 @@ impl Panel {
                     }
                 }
             },
-            widget::Message::Update =>
+            Message::Update =>
                 self.relayout(),
-            widget::Message::Relayout =>
+            Message::Relayout =>
                 self.relayout(),
-            widget::Message::Quit =>
+            Message::Quit =>
                 self.finish(),
             _ => {}
         }

+ 13 - 11
src/widgets/bspwm.rs

@@ -2,7 +2,9 @@ use std::io::prelude::*;
 use std::io::BufReader;
 use std::process::{Command, Stdio};
 use std::thread;
-use ui::widget;
+
+use ui::draw_context::DrawContext;
+use widgets::{Message, MessageSender, Widget};
 
 const MARGIN: u16 = 7;
 
@@ -21,13 +23,13 @@ impl Desktop {
 }
 
 pub struct Bspwm {
-    context: widget::DrawContext,
-    tx: widget::MessageSender,
+    context: DrawContext,
+    tx: MessageSender,
     desktops: Vec<Desktop>
 }
 
 impl Bspwm {
-    pub fn new(tx: widget::MessageSender, context: widget::DrawContext) -> Bspwm {
+    pub fn new(tx: MessageSender, context: DrawContext) -> Bspwm {
         Bspwm {
             context: context,
             tx: tx,
@@ -76,7 +78,7 @@ impl Bspwm {
     }
 }
 
-impl widget::Widget for Bspwm {
+impl Widget for Bspwm {
     fn init(&mut self) {
         let tx = self.tx.clone();
         thread::spawn(move || monitor_thread(tx));
@@ -106,13 +108,13 @@ impl widget::Widget for Bspwm {
         sum
     }
 
-    fn handle_event(&mut self, event: &widget::Message) -> bool {
+    fn handle_event(&mut self, event: &Message) -> bool {
         match event {
-            &widget::Message::BspwmEvent(ref line) => {
+            &Message::BspwmEvent(ref line) => {
                 self.parse_bspwm(line);
-                self.tx.send(widget::Message::Relayout).expect("Failed to send relayout");
+                self.tx.send(Message::Relayout).expect("Failed to send relayout");
             },
-            &widget::Message::MousePress(x) => {
+            &Message::MousePress(x) => {
                 for desktop in self.desktops.iter() {
                     if desktop.contains(x) {
                         switch_desktop(&desktop.name);
@@ -125,7 +127,7 @@ impl widget::Widget for Bspwm {
     }
 }
 
-fn monitor_thread(tx: widget::MessageSender) {
+fn monitor_thread(tx: MessageSender) {
     let bspc = Command::new("bspc")
         .arg("subscribe")
         .arg("report")
@@ -141,7 +143,7 @@ fn monitor_thread(tx: widget::MessageSender) {
     loop {
         line.clear();
         reader.read_line(&mut line).ok().expect("Failed to read line");
-        let event = widget::Message::BspwmEvent(line.clone());
+        let event = Message::BspwmEvent(line.clone());
         tx.send(event).ok();
     }
 }

+ 26 - 0
src/widgets/mod.rs

@@ -4,3 +4,29 @@ pub mod sensors;
 pub mod bspwm;
 pub mod spacer;
 pub mod music;
+
+use xcb;
+use mpd;
+use std::sync::mpsc;
+
+pub type MessageSender = mpsc::Sender<Message>;
+
+pub enum Message {
+    Relayout,
+    Update,
+    Quit,
+    MousePress(u16),
+    BspwmEvent(String),
+    MpdEvent(mpd::status::State, String, String),
+    XcbEvent(xcb::GenericEvent)
+}
+
+pub trait Widget {
+    fn init(&mut self) {}
+    fn render(&mut self, x: u16);
+    fn width(&mut self) -> u16;
+    fn handle_event(&mut self, _event: &Message) -> bool {
+        false
+    }
+    fn finish(&mut self) {}
+}

+ 11 - 11
src/widgets/music.rs

@@ -3,22 +3,22 @@ use mpd::status::State;
 use mpd::idle;
 use mpd::idle::Idle;
 use std::thread;
-use ui::widget;
-use ui::widget::Widget;
+use ui::draw_context::DrawContext;
+use widgets::{Message, MessageSender, Widget};
 
 const MARGIN: u16 = 7;
 const WIDTH: u16 = 250;
 
 pub struct Music {
-    context: widget::DrawContext,
-    tx: widget::MessageSender,
+    context: DrawContext,
+    tx: MessageSender,
     state: State,
     artist: String,
     title: String,
     last_pos: u16
 }
 
-pub fn mpd(tx: widget::MessageSender, context: widget::DrawContext) -> Music {
+pub fn mpd(tx: MessageSender, context: DrawContext) -> Music {
     Music {
         context: context,
         tx: tx,
@@ -48,7 +48,7 @@ impl Music {
 
 }
 
-impl widget::Widget for Music {
+impl Widget for Music {
     fn init(&mut self) {
         let tx = self.tx.clone();
         thread::spawn(move || monitor_thread(tx));
@@ -79,15 +79,15 @@ impl widget::Widget for Music {
         WIDTH
     }
 
-    fn handle_event(&mut self, event: &widget::Message) -> bool {
+    fn handle_event(&mut self, event: &Message) -> bool {
         match event {
-            &widget::Message::MpdEvent(ref state, ref artist, ref title) => {
+            &Message::MpdEvent(ref state, ref artist, ref title) => {
                 self.state = state.clone();
                 self.artist = artist.clone();
                 self.title = title.clone();
                 self.redraw();
             },
-            &widget::Message::MousePress(_x) => {
+            &Message::MousePress(_x) => {
                 toggle();
             },
             _ => {}
@@ -96,7 +96,7 @@ impl widget::Widget for Music {
     }
 }
 
-fn monitor_thread(tx: widget::MessageSender) {
+fn monitor_thread(tx: MessageSender) {
     let mut conn = mpd::client::Client::connect("127.0.0.1:6600").unwrap();
     loop {
         let unknown = "Unknown".to_string();
@@ -105,7 +105,7 @@ fn monitor_thread(tx: widget::MessageSender) {
         let artist = song.tags.get("Artist").unwrap_or(&unknown);
         let title = song.title.as_ref().unwrap_or(&unknown);
 
-        tx.send(widget::Message::MpdEvent(state, artist.clone(), title.clone())).expect("Failed to send mpd event");
+        tx.send(Message::MpdEvent(state, artist.clone(), title.clone())).expect("Failed to send mpd event");
         conn.wait(&[idle::Subsystem::Player]).ok();
     }
 }

+ 7 - 6
src/widgets/sensors.rs

@@ -1,17 +1,18 @@
 use config::Config;
 use super::super::sensors;
 use super::super::sensors::Sensor;
-use ui::widget;
+use ui::draw_context::DrawContext;
+use widgets::{Message, Widget};
 
 const MARGIN: u16 = 7;
 
 pub struct Sensors {
-    context: widget::DrawContext,
+    context: DrawContext,
     sensors: Vec<Box<Sensor>>
 }
 
 impl Sensors {
-    pub fn new(context: widget::DrawContext, config: &Config) -> Sensors {
+    pub fn new(context: DrawContext, config: &Config) -> Sensors {
         Sensors {
             context: context,
             sensors: sensors::sensor_list(config)
@@ -19,7 +20,7 @@ impl Sensors {
     }
 }
 
-impl widget::Widget for Sensors {
+impl Widget for Sensors {
     fn render(&mut self, x: u16) {
         let mut offset = x;
         for ref sensor in self.sensors.iter() {
@@ -46,9 +47,9 @@ impl widget::Widget for Sensors {
         sum
     }
 
-    fn handle_event(&mut self, event: &widget::Message) -> bool {
+    fn handle_event(&mut self, event: &Message) -> bool {
         match event {
-            &widget::Message::Update =>
+            &Message::Update =>
                 for ref mut sensor in self.sensors.iter_mut() {
                     sensor.process()
                 },

+ 5 - 4
src/widgets/spacer.rs

@@ -1,11 +1,12 @@
-use ui::widget;
+use ui::draw_context::DrawContext;
+use widgets::Widget;
 
 pub struct Spacer {
-    context: widget::DrawContext,
+    context: DrawContext,
     width: u16
 }
 
-pub fn create(mut context: widget::DrawContext, width: u16, red: u16, green: u16, blue: u16, alpha: u16) -> Spacer {
+pub fn create(mut context: DrawContext, width: u16, red: u16, green: u16, blue: u16, alpha: u16) -> Spacer {
     context.set_bg_color(red, green, blue, alpha);
     Spacer {
         context: context,
@@ -13,7 +14,7 @@ pub fn create(mut context: widget::DrawContext, width: u16, red: u16, green: u16
     }
 }
 
-impl widget::Widget for Spacer {
+impl Widget for Spacer {
     fn render(&mut self, x: u16) {
         self.context.draw_bg(x, self.width);
     }

+ 6 - 6
src/widgets/title.rs

@@ -1,6 +1,6 @@
-use ui::widget;
-use ui::widget::Widget;
+use ui::draw_context::DrawContext;
 use ui::x11;
+use widgets::{Message, Widget};
 use xcb;
 
 use std::sync::Arc;
@@ -9,7 +9,7 @@ const MARGIN: u16 = 7;
 
 pub struct Title {
     conn: Arc<x11::Connection>,
-    context: widget::DrawContext,
+    context: DrawContext,
     title: String,
     last_pos: u16,
     last_width: u16,
@@ -17,7 +17,7 @@ pub struct Title {
 }
 
 impl Title {
-    pub fn new(conn: Arc<x11::Connection>, context: widget::DrawContext) -> Title {
+    pub fn new(conn: Arc<x11::Connection>, context: DrawContext) -> Title {
         Title {
             conn: conn,
             context: context,
@@ -55,9 +55,9 @@ impl Widget for Title {
         0
     }
 
-    fn handle_event(&mut self, event: &widget::Message) -> bool {
+    fn handle_event(&mut self, event: &Message) -> bool {
         match event {
-            &widget::Message::XcbEvent(ref event) =>
+            &Message::XcbEvent(ref event) =>
                 if event.response_type() == xcb::PROPERTY_NOTIFY {
                     let event: &xcb::PropertyNotifyEvent = unsafe { xcb::cast_event(&event) };
                     if event.atom() == self.conn.atom(x11::_NET_ACTIVE_WINDOW) {

+ 7 - 7
src/widgets/tray.rs

@@ -1,6 +1,6 @@
 use ui;
-use ui::widget;
 use ui::x11;
+use widgets::{Message, MessageSender, Widget};
 use xcb;
 
 use std::sync::Arc;
@@ -8,7 +8,7 @@ use std::sync::Arc;
 const CLIENT_MESSAGE: u8 = xcb::CLIENT_MESSAGE | 0x80; // 0x80 flag for client messages
 
 pub struct Tray {
-    tx: widget::MessageSender,
+    tx: MessageSender,
     conn: Arc<x11::Connection>,
     window: xcb::Window,
     children: Vec<xcb::Window>,
@@ -16,7 +16,7 @@ pub struct Tray {
 }
 
 impl Tray {
-    pub fn new(tx: widget::MessageSender, conn: Arc<x11::Connection>, window: xcb::Window) -> Tray {
+    pub fn new(tx: MessageSender, conn: Arc<x11::Connection>, window: xcb::Window) -> Tray {
         Tray {
             conn: conn,
             tx: tx,
@@ -66,7 +66,7 @@ impl Tray {
     }
 
     fn relayout(&self) {
-        self.tx.send(widget::Message::Relayout).expect("Failed to send relayout");
+        self.tx.send(Message::Relayout).expect("Failed to send relayout");
     }
 
     pub fn force_size(&self, window: xcb::Window, dimensions: Option<(u16, u16)>) {
@@ -85,7 +85,7 @@ impl Tray {
     }
 }
 
-impl widget::Widget for Tray {
+impl Widget for Tray {
     fn width(&mut self) -> u16 {
         (self.children.len() * 20) as u16
     }
@@ -100,9 +100,9 @@ impl widget::Widget for Tray {
         }
     }
 
-    fn handle_event(&mut self, event: &widget::Message) -> bool {
+    fn handle_event(&mut self, event: &Message) -> bool {
         match event {
-            &widget::Message::XcbEvent(ref event) =>
+            &Message::XcbEvent(ref event) =>
                 match event.response_type() {
                     xcb::PROPERTY_NOTIFY if self.timestamp == 0 => {
                         let event: &xcb::PropertyNotifyEvent = unsafe { xcb::cast_event(&event) };