first commit
This commit is contained in:
98
front/src/main.rs
Normal file
98
front/src/main.rs
Normal file
@@ -0,0 +1,98 @@
|
||||
use iced::Length::{self, Fill, FillPortion};
|
||||
use iced::widget::container;
|
||||
use iced::{
|
||||
Background, Color, Element, Task, Theme,
|
||||
widget::{Image, column, container::Style, row, text},
|
||||
};
|
||||
|
||||
mod channels;
|
||||
mod servers;
|
||||
|
||||
use servers::{User, get_servers_buttons};
|
||||
|
||||
fn main() -> Result<(), iced::Error> {
|
||||
iced::application(Liscord::title, Liscord::update, Liscord::view)
|
||||
.theme(Liscord::theme)
|
||||
.run_with(Liscord::new)
|
||||
}
|
||||
|
||||
struct Liscord {
|
||||
user: Option<User>,
|
||||
selected_server: Option<i32>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
enum Event {
|
||||
ServerPressed(i32),
|
||||
}
|
||||
|
||||
impl Liscord {
|
||||
fn new() -> (Self, Task<Event>) {
|
||||
(
|
||||
Liscord {
|
||||
user: Some(User::default()),
|
||||
selected_server: None,
|
||||
},
|
||||
Task::none(),
|
||||
)
|
||||
}
|
||||
|
||||
fn title(&self) -> String {
|
||||
"Liscord".to_string()
|
||||
}
|
||||
|
||||
fn update(&mut self, event: Event) -> Task<Event> {
|
||||
match event {
|
||||
Event::ServerPressed(server_id) => {
|
||||
self.selected_server = Some(server_id);
|
||||
// println!("Server Pressed ! Id: {server_id}")
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
|
||||
fn view(&self) -> Element<'_, Event> {
|
||||
let app_body = {
|
||||
let server_bar = {
|
||||
let mut content = column![text("Servers")];
|
||||
|
||||
if let Some(user) = &self.user {
|
||||
content = content.push(get_servers_buttons(user, self))
|
||||
}
|
||||
|
||||
container(content)
|
||||
.padding(10)
|
||||
.width(iced::Length::Fixed(300.))
|
||||
.height(Fill)
|
||||
.style(|_theme| Style {
|
||||
background: Some(Background::Color(Color::from_rgb(0.0, 0.0, 1.0))),
|
||||
..Default::default()
|
||||
})
|
||||
};
|
||||
|
||||
let message_content = container(text("Messages"))
|
||||
.width(iced::Length::Fill)
|
||||
.height(Fill);
|
||||
row![server_bar, message_content]
|
||||
}
|
||||
.height(FillPortion(19));
|
||||
|
||||
let app_header = {
|
||||
let liscord_logo = Image::new("assets/liscord.png");
|
||||
let liscord_text = text("Liscord");
|
||||
let centered_text = container(liscord_text)
|
||||
.width(Fill)
|
||||
.center_x(Length::Fill)
|
||||
.center_y(Length::Fill);
|
||||
|
||||
row![liscord_logo, centered_text].width(Fill).height(Fill)
|
||||
}
|
||||
.height(FillPortion(1));
|
||||
|
||||
column![app_header, app_body].into()
|
||||
}
|
||||
|
||||
fn theme(&self) -> Theme {
|
||||
Theme::Dark
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user