feat: COSMIC Component System Prototype

This commit is contained in:
Michael Aaron Murphy 2022-01-24 20:20:33 +01:00
parent 08e70faffd
commit 52df3570ec
No known key found for this signature in database
GPG key ID: B2732D4240C9212C
9 changed files with 597 additions and 0 deletions

View file

@ -0,0 +1,69 @@
// Copyright 2022 System76 <info@system76.com>
// SPDX-License-Identifier: MPL-2.0
use ccs::*;
use gtk::prelude::*;
pub enum InfoButtonInput {
SetDescription(String),
}
pub enum InfoButtonOutput {
Clicked,
}
component! {
#[derive(Default)]
pub struct InfoButton((String, String, gtk::SizeGroup)) {
}
pub struct InfoButtonWidgets(gtk::Box) {
description: gtk::Label,
}
type Input = InfoButtonInput;
type Output = InfoButtonOutput;
fn init_view(self, args, _input, output) {
let (desc, button_label, sg) = args;
ccs::view! {
root = gtk::Box {
set_orientation: gtk::Orientation::Horizontal,
set_margin_start: 20,
set_margin_end: 20,
set_margin_top: 8,
set_margin_bottom: 8,
set_spacing: 24,
append: description = &gtk::Label {
set_label: &desc,
set_halign: gtk::Align::Start,
set_hexpand: true,
set_valign: gtk::Align::Center,
set_ellipsize: gtk::pango::EllipsizeMode::End,
},
append: button = &gtk::Button {
set_label: &button_label,
connect_clicked(output) => move |_| {
let _ = output.send(InfoButtonOutput::Clicked);
}
}
}
}
sg.add_widget(&button);
(InfoButtonWidgets { description }, root)
}
fn update(self, widgets, message, _input, _output) {
match message {
InfoButtonInput::SetDescription(value) => {
widgets.description.set_text(&value);
}
}
}
}