Skip to content

Commit e874f4c

Browse files
committed
feat: indicate connection in connection dialog
1 parent 6488744 commit e874f4c

2 files changed

Lines changed: 56 additions & 36 deletions

File tree

player/src/gui.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ impl UIThread {
150150

151151
let mut gui = MainWindow::make_window(sender.clone());
152152
let mut queue_gui = QueueWindow::make_window(sender.clone());
153-
let mut connection_gui = ConnectionWindow::make_window(sender.clone());
153+
let mut connection_gui = ConnectionWindow::make_window(sender.clone(), state.clone());
154154

155155
// stuff for cool custom titlebars
156156
gui.main_win.set_border(false);

player/src/gui/connection_window.rs

Lines changed: 55 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::sync::Arc;
2+
13
use fltk::app::Sender;
24
use fltk::browser::*;
35
use fltk::button::*;
@@ -9,6 +11,9 @@ use fltk::tree::Tree;
911
use fltk::tree::TreeItem;
1012
use fltk::tree::TreeReason;
1113
use fltk::window::*;
14+
use tokio::sync::RwLock;
15+
16+
use crate::State;
1217

1318
use super::add_bar;
1419
use super::ConnectionDlgEvent;
@@ -17,10 +22,11 @@ use super::UIEvent;
1722
pub struct ConnectionWindow {
1823
pub main_win: Window,
1924
pub tree: Tree,
25+
state: Arc<RwLock<State>>,
2026
}
2127

2228
impl ConnectionWindow {
23-
pub fn make_window(s: Sender<UIEvent>) -> Self {
29+
pub fn make_window(s: Sender<UIEvent>, state: Arc<RwLock<State>>) -> Self {
2430
let mut main_win = Window::new(100, 100, 330, 300, "queue");
2531
main_win.set_frame(FrameType::UpBox);
2632

@@ -64,7 +70,7 @@ impl ConnectionWindow {
6470
let mut tree = Tree::default().with_size(210, 230).with_pos(10, 32);
6571
tree.set_show_root(false);
6672

67-
tree.add("unpopulated");
73+
// tree.add("");
6874

6975
tree.set_trigger(CallbackTrigger::Release);
7076
tree.set_callback(move |t| {
@@ -101,7 +107,11 @@ impl ConnectionWindow {
101107

102108
main_win.end();
103109

104-
Self { main_win, tree }
110+
Self {
111+
main_win,
112+
tree,
113+
state,
114+
}
105115
}
106116

107117
pub fn populate(&mut self, list: Vec<Server>) {
@@ -110,23 +120,9 @@ impl ConnectionWindow {
110120
tree.begin();
111121
for server in list {
112122
let mut item = tree.add(&server.name).unwrap();
113-
item.set_user_data(server.addr);
114-
if let Some(rooms) = &server.rooms {
115-
for room in rooms {
116-
let line = &format!("{}/{}", server.name, room.id);
117-
if let Some(mut sub_item) = tree.add(&line) {
118-
sub_item.set_user_data(room.id);
119-
sub_item.close();
120-
for user in &room.user_names {
121-
tree.add(&format!("{}/{}", line, user));
122-
}
123-
let actual_line = &format!("{} ({})", room.name, room.user_names.len());
124-
sub_item.set_label(actual_line);
125-
}
126-
}
127-
} else {
128-
tree.add(&format!("{}/(unable to connect)", server.name));
129-
}
123+
item.set_user_data(server.addr.clone());
124+
125+
Self::populate_server_item(self.state.clone(), tree, item, server);
130126
}
131127
tree.end();
132128
tree.redraw();
@@ -137,26 +133,50 @@ impl ConnectionWindow {
137133
if let Some(mut item) = tree.find_item(&server.name) {
138134
item.clear_children();
139135

140-
if let Some(rooms) = &server.rooms {
141-
for room in rooms {
142-
let line = &format!("{}/{}", server.name, room.id);
143-
if let Some(mut sub_item) = tree.add(&line) {
144-
sub_item.set_user_data(room.id);
145-
sub_item.close();
146-
for user in &room.user_names {
147-
tree.add(&format!("{}/{}", line, user));
148-
}
149-
let actual_line = &format!("{} ({})", room.name, room.user_names.len());
150-
sub_item.set_label(actual_line);
136+
Self::populate_server_item(self.state.clone(), tree, item, server)
137+
} else {
138+
println!("couldn't find {} ????", server.name);
139+
}
140+
tree.redraw();
141+
}
142+
143+
fn populate_server_item(
144+
state: Arc<RwLock<State>>,
145+
tree: &mut Tree,
146+
mut item: TreeItem,
147+
server: Server,
148+
) {
149+
// for paths to work right
150+
item.set_label(&server.addr);
151+
152+
if let Some(rooms) = &server.rooms {
153+
for room in rooms {
154+
let line = &format!("{}/{}", server.addr, room.id);
155+
if let Some(mut sub_item) = tree.add(&line) {
156+
sub_item.set_user_data(room.id);
157+
sub_item.close();
158+
for user in &room.user_names {
159+
tree.add(&format!("{}/{}", line, user));
151160
}
161+
let actual_line = &format!("{} ({})", room.name, room.user_names.len());
162+
sub_item.set_label(actual_line);
152163
}
153-
} else {
154-
eprintln!("uhhhhhh should never happen,,,,,,,,,,,");
155164
}
156165
} else {
157-
println!("couldn't find {} ????", server.name);
166+
tree.add(&format!("{}/(unable to connect)", server.addr));
167+
}
168+
169+
// connected indicator
170+
let state = state.blocking_read();
171+
item.set_label(&server.name);
172+
item.set_label_font(Font::Helvetica);
173+
if let Some(c) = &state.connection {
174+
if c.addr == server.addr {
175+
// text doesn't look that good and also it breaks tree.find_item...
176+
item.set_label(&format!("{}", &server.name));
177+
item.set_label_font(Font::HelveticaBold);
178+
}
158179
}
159-
tree.redraw();
160180
}
161181
}
162182

0 commit comments

Comments
 (0)