Implement component test page
This commit is contained in:
parent
e946b0a2ec
commit
bfd3e53dcd
11 changed files with 217 additions and 21 deletions
18
crates/component_test/Cargo.toml
Normal file
18
crates/component_test/Cargo.toml
Normal file
|
@ -0,0 +1,18 @@
|
|||
[package]
|
||||
name = "component_test"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
publish = false
|
||||
|
||||
[lib]
|
||||
path = "src/component_test.rs"
|
||||
doctest = false
|
||||
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
gpui = { path = "../gpui" }
|
||||
settings = { path = "../settings" }
|
||||
util = { path = "../util" }
|
||||
theme = { path = "../theme" }
|
||||
workspace = { path = "../workspace" }
|
||||
project = { path = "../project" }
|
122
crates/component_test/src/component_test.rs
Normal file
122
crates/component_test/src/component_test.rs
Normal file
|
@ -0,0 +1,122 @@
|
|||
use gpui::{
|
||||
actions,
|
||||
color::Color,
|
||||
elements::{Component, Flex, ParentElement, SafeStylable},
|
||||
AppContext, Element, Entity, ModelHandle, Task, View, ViewContext, ViewHandle, WeakViewHandle,
|
||||
};
|
||||
use project::Project;
|
||||
use theme::components::{action_button::Button, label::Label, ComponentExt};
|
||||
use workspace::{
|
||||
item::Item, register_deserializable_item, ItemId, Pane, PaneBackdrop, Workspace, WorkspaceId,
|
||||
};
|
||||
|
||||
pub fn init(cx: &mut AppContext) {
|
||||
cx.add_action(ComponentTest::toggle_disclosure);
|
||||
cx.add_action(ComponentTest::toggle_toggle);
|
||||
cx.add_action(ComponentTest::deploy);
|
||||
register_deserializable_item::<ComponentTest>(cx);
|
||||
}
|
||||
|
||||
actions!(
|
||||
test,
|
||||
[NoAction, ToggleDisclosure, ToggleToggle, NewComponentTest]
|
||||
);
|
||||
|
||||
struct ComponentTest {
|
||||
disclosed: bool,
|
||||
toggled: bool,
|
||||
}
|
||||
|
||||
impl ComponentTest {
|
||||
fn new() -> Self {
|
||||
Self {
|
||||
disclosed: false,
|
||||
toggled: false,
|
||||
}
|
||||
}
|
||||
|
||||
fn deploy(workspace: &mut Workspace, _: &NewComponentTest, cx: &mut ViewContext<Workspace>) {
|
||||
workspace.add_item(Box::new(cx.add_view(|_| ComponentTest::new())), cx);
|
||||
}
|
||||
|
||||
fn toggle_disclosure(&mut self, _: &ToggleDisclosure, cx: &mut ViewContext<Self>) {
|
||||
self.disclosed = !self.disclosed;
|
||||
cx.notify();
|
||||
}
|
||||
|
||||
fn toggle_toggle(&mut self, _: &ToggleToggle, cx: &mut ViewContext<Self>) {
|
||||
self.toggled = !self.toggled;
|
||||
cx.notify();
|
||||
}
|
||||
}
|
||||
|
||||
impl Entity for ComponentTest {
|
||||
type Event = ();
|
||||
}
|
||||
|
||||
impl View for ComponentTest {
|
||||
fn ui_name() -> &'static str {
|
||||
"Component Test"
|
||||
}
|
||||
|
||||
fn render(&mut self, cx: &mut gpui::ViewContext<Self>) -> gpui::AnyElement<Self> {
|
||||
let theme = theme::current(cx);
|
||||
|
||||
PaneBackdrop::new(
|
||||
cx.view_id(),
|
||||
Flex::column()
|
||||
.with_spacing(10.)
|
||||
.with_child(
|
||||
Button::action(NoAction)
|
||||
.with_tooltip("Here's what a tooltip looks like", theme.tooltip.clone())
|
||||
.with_contents(Label::new("Click me!"))
|
||||
.with_style(theme.component_test.button.clone())
|
||||
.element(),
|
||||
)
|
||||
.with_child(
|
||||
Button::action(ToggleToggle)
|
||||
.with_tooltip("Here's what a tooltip looks like", theme.tooltip.clone())
|
||||
.with_contents(Label::new("Toggle me!"))
|
||||
.toggleable(self.toggled)
|
||||
.with_style(theme.component_test.toggle.clone())
|
||||
.element(),
|
||||
)
|
||||
.with_child(
|
||||
Label::new("A disclosure")
|
||||
.disclosable(Some(self.disclosed), Box::new(ToggleDisclosure))
|
||||
.with_style(theme.component_test.disclosure.clone())
|
||||
.element(),
|
||||
)
|
||||
.constrained()
|
||||
.with_width(200.)
|
||||
.aligned()
|
||||
.into_any(),
|
||||
)
|
||||
.into_any()
|
||||
}
|
||||
}
|
||||
|
||||
impl Item for ComponentTest {
|
||||
fn tab_content<V: View>(
|
||||
&self,
|
||||
_: Option<usize>,
|
||||
style: &theme::Tab,
|
||||
_: &AppContext,
|
||||
) -> gpui::AnyElement<V> {
|
||||
gpui::elements::Label::new("Component test", style.label.clone()).into_any()
|
||||
}
|
||||
|
||||
fn serialized_item_kind() -> Option<&'static str> {
|
||||
Some("ComponentTest")
|
||||
}
|
||||
|
||||
fn deserialize(
|
||||
_project: ModelHandle<Project>,
|
||||
_workspace: WeakViewHandle<Workspace>,
|
||||
_workspace_id: WorkspaceId,
|
||||
_item_id: ItemId,
|
||||
cx: &mut ViewContext<Pane>,
|
||||
) -> Task<anyhow::Result<ViewHandle<Self>>> {
|
||||
Task::ready(Ok(cx.add_view(|_| Self::new())))
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue