mirror of
https://github.com/zed-industries/zed.git
synced 2024-09-20 02:47:34 +03:00
Remove temporary imports, fix syntax_tree_view
This commit is contained in:
parent
6a90a76bf2
commit
7b83d65deb
@ -1427,8 +1427,16 @@ impl Interactivity {
|
||||
let line_height = cx.line_height();
|
||||
let scroll_max = (content_size - bounds.size).max(&Size::default());
|
||||
let interactive_bounds = interactive_bounds.clone();
|
||||
|
||||
let id = self.element_id.clone();
|
||||
cx.on_mouse_event(move |event: &ScrollWheelEvent, phase, cx| {
|
||||
if id == Some(ElementId::Name("SyntaxTreeView".into())) {
|
||||
dbg!(
|
||||
&overflow,
|
||||
event.position,
|
||||
&interactive_bounds,
|
||||
interactive_bounds.visibly_contains(&event.position, cx)
|
||||
);
|
||||
}
|
||||
if phase == DispatchPhase::Bubble
|
||||
&& interactive_bounds.visibly_contains(&event.position, cx)
|
||||
{
|
||||
@ -1442,9 +1450,15 @@ impl Interactivity {
|
||||
}
|
||||
|
||||
if overflow.y == Overflow::Scroll {
|
||||
scroll_offset.y =
|
||||
(scroll_offset.y + delta.y).clamp(-scroll_max.height, px(0.));
|
||||
if id == Some(ElementId::Name("SyntaxTreeView".into())) {
|
||||
println!("prev scroll offset: {old_scroll_offset:?}, scroll_max: {scroll_max:?}, delta:{delta:?}");
|
||||
}
|
||||
scroll_offset.y =
|
||||
(scroll_offset.y + delta.y).clamp(-scroll_max.height, px(0.));
|
||||
if id == Some(ElementId::Name("SyntaxTreeView".into())) {
|
||||
println!("new scroll offset: {scroll_offset:?}, scroll_max: {scroll_max:?}, delta:{delta:?}");
|
||||
}
|
||||
}
|
||||
|
||||
if *scroll_offset != old_scroll_offset {
|
||||
cx.notify();
|
||||
@ -1487,15 +1501,16 @@ impl Interactivity {
|
||||
}
|
||||
|
||||
cx.with_z_index(style.z_index.unwrap_or(0), |cx| {
|
||||
if style.background.as_ref().is_some_and(|fill| {
|
||||
fill.color().is_some_and(|color| !color.is_transparent())
|
||||
}) {
|
||||
cx.add_opaque_layer(bounds)
|
||||
}
|
||||
f(style, scroll_offset.unwrap_or_default(), cx)
|
||||
})
|
||||
},
|
||||
);
|
||||
if style.background.as_ref().is_some_and(|fill| {
|
||||
fill.color().is_some_and(|color| !color.is_transparent())
|
||||
}) {
|
||||
cx.add_opaque_layer(bounds)
|
||||
}
|
||||
|
||||
f(style, scroll_offset.unwrap_or_default(), cx)
|
||||
})
|
||||
},
|
||||
);
|
||||
|
||||
if let Some(group) = self.group.as_ref() {
|
||||
GroupBounds::pop(group, cx);
|
||||
|
@ -127,6 +127,7 @@ impl Element for UniformList {
|
||||
.map(|s| s.item_size)
|
||||
.unwrap_or_else(|| self.measure_item(None, cx));
|
||||
|
||||
let element_id = self.interactivity.element_id.clone();
|
||||
let (layout_id, interactive) =
|
||||
self.interactivity
|
||||
.layout(state.map(|s| s.interactive), cx, |style, cx| {
|
||||
@ -143,6 +144,10 @@ impl Element for UniformList {
|
||||
item_size.width
|
||||
}
|
||||
});
|
||||
|
||||
if element_id == Some(ElementId::Name("SyntaxTreeView".into())) {
|
||||
dbg!(known_dimensions, available_space.height);
|
||||
}
|
||||
let height = match available_space.height {
|
||||
AvailableSpace::Definite(height) => desired_height.min(height),
|
||||
AvailableSpace::MinContent | AvailableSpace::MaxContent => {
|
||||
|
@ -2,18 +2,16 @@ use collections::{HashMap, VecDeque};
|
||||
use editor::{Editor, EditorElement, EditorEvent, MoveToEnd};
|
||||
use futures::{channel::mpsc, StreamExt};
|
||||
use gpui::{
|
||||
actions, div, red, AnchorCorner, AnyElement, AppContext, Context, CursorStyle, Div,
|
||||
EventEmitter, FocusHandle, FocusableView, InteractiveElement, IntoElement, Model, ModelContext,
|
||||
MouseButton, ParentElement, Render, Styled, Subscription, View, ViewContext, VisualContext,
|
||||
WeakModel, WindowContext,
|
||||
actions, div, AnchorCorner, AnyElement, AppContext, Context, Div, EventEmitter, FocusHandle,
|
||||
FocusableView, InteractiveElement, IntoElement, Model, ModelContext, MouseButton,
|
||||
ParentElement, Render, Styled, Subscription, View, ViewContext, VisualContext, WeakModel,
|
||||
WindowContext,
|
||||
};
|
||||
use language::{LanguageServerId, LanguageServerName};
|
||||
use lsp::IoKind;
|
||||
use project::{search::SearchQuery, Project};
|
||||
use std::{borrow::Cow, sync::Arc};
|
||||
use ui::{
|
||||
h_stack, popover_menu, v_stack, Button, Checkbox, Clickable, ContextMenu, Divider, Label,
|
||||
};
|
||||
use ui::{h_stack, popover_menu, Button, Checkbox, Clickable, ContextMenu, Label, Selection};
|
||||
use workspace::{
|
||||
item::{Item, ItemHandle},
|
||||
searchable::{SearchEvent, SearchableItem, SearchableItemHandle},
|
||||
@ -729,38 +727,86 @@ impl Render for LspLogToolbarItemView {
|
||||
}
|
||||
});
|
||||
|
||||
let log_toolbar_view = cx.view().clone();
|
||||
let lsp_menu = popover_menu("LspLogView")
|
||||
.anchor(AnchorCorner::TopLeft)
|
||||
.trigger(Self::render_language_server_menu_header(current_server))
|
||||
.trigger(Button::new(
|
||||
"language_server_menu_header",
|
||||
current_server
|
||||
.and_then(|row| {
|
||||
Some(Cow::Owned(format!(
|
||||
"{} ({}) - {}",
|
||||
row.server_name.0,
|
||||
row.worktree_root_name,
|
||||
if row.rpc_trace_selected {
|
||||
RPC_MESSAGES
|
||||
} else {
|
||||
SERVER_LOGS
|
||||
},
|
||||
)))
|
||||
})
|
||||
.unwrap_or_else(|| "No server selected".into()),
|
||||
))
|
||||
.menu(move |cx| {
|
||||
let menu_rows = menu_rows.clone();
|
||||
let log_view = log_view.clone();
|
||||
let log_toolbar_view = log_toolbar_view.clone();
|
||||
ContextMenu::build(cx, move |mut menu, cx| {
|
||||
for row in menu_rows {
|
||||
for (ix, row) in menu_rows.into_iter().enumerate() {
|
||||
menu = menu
|
||||
.header(format!(
|
||||
"{} ({})",
|
||||
row.server_name.0, row.worktree_root_name
|
||||
))
|
||||
.entry(
|
||||
format!("{SERVER_LOGS} ({})", row.server_name.0),
|
||||
|cx| {
|
||||
dbg!("????????????????????");
|
||||
}, // cx.handler_for(&log_view, move |view, cx| {
|
||||
// // todo!() why does not it work???
|
||||
// dbg!("~~~~~~~~~~~~~~~~~~~~~~~~~~??@@@#", row.server_id);
|
||||
// view.show_logs_for_server(row.server_id, cx)
|
||||
// }),
|
||||
)
|
||||
// TODO kb custom element with checkbox & toggle logging for server
|
||||
.entry(
|
||||
format!("{RPC_MESSAGES} ({})", row.server_name.0),
|
||||
|cx| {
|
||||
dbg!("?????????????@@@@@@@@@@@@@@@");
|
||||
}, // cx.handler_for(&log_view, move |view, cx| {
|
||||
// view.show_rpc_trace_for_server(row.server_id, cx)
|
||||
// }),
|
||||
SERVER_LOGS,
|
||||
cx.handler_for(&log_view, move |view, cx| {
|
||||
view.show_logs_for_server(row.server_id, cx)
|
||||
}),
|
||||
)
|
||||
.custom_entry({
|
||||
let log_view = log_view.clone();
|
||||
let log_toolbar_view = log_toolbar_view.clone();
|
||||
move |cx| {
|
||||
h_stack()
|
||||
.w_full()
|
||||
.justify_between()
|
||||
.child(Label::new(RPC_MESSAGES))
|
||||
.child(
|
||||
Checkbox::new(
|
||||
ix,
|
||||
if row.rpc_trace_enabled {
|
||||
Selection::Selected
|
||||
} else {
|
||||
Selection::Unselected
|
||||
},
|
||||
)
|
||||
.on_click(
|
||||
cx.listener_for(
|
||||
&log_toolbar_view,
|
||||
move |view, selection, cx| {
|
||||
let enabled = matches!(
|
||||
selection,
|
||||
Selection::Selected
|
||||
);
|
||||
view.toggle_logging_for_server(
|
||||
row.server_id,
|
||||
enabled,
|
||||
cx,
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
)
|
||||
.on_mouse_down(
|
||||
MouseButton::Left,
|
||||
cx.listener_for(&log_view, move |view, _, cx| {
|
||||
view.show_rpc_trace_for_server(row.server_id, cx)
|
||||
}),
|
||||
)
|
||||
.into_any_element()
|
||||
}
|
||||
})
|
||||
}
|
||||
menu
|
||||
})
|
||||
@ -816,98 +862,6 @@ impl LspLogToolbarItemView {
|
||||
}
|
||||
cx.notify();
|
||||
}
|
||||
|
||||
fn show_logs_for_server(&mut self, id: LanguageServerId, cx: &mut ViewContext<Self>) {
|
||||
if let Some(log_view) = &self.log_view {
|
||||
log_view.update(cx, |view, cx| view.show_logs_for_server(id, cx));
|
||||
cx.notify();
|
||||
}
|
||||
}
|
||||
|
||||
fn show_rpc_trace_for_server(&mut self, id: LanguageServerId, cx: &mut ViewContext<Self>) {
|
||||
if let Some(log_view) = &self.log_view {
|
||||
log_view.update(cx, |view, cx| view.show_rpc_trace_for_server(id, cx));
|
||||
cx.notify();
|
||||
}
|
||||
}
|
||||
|
||||
fn render_language_server_menu_header(current_server: Option<LogMenuItem>) -> Button {
|
||||
Button::new(
|
||||
"language_server_menu_header",
|
||||
current_server
|
||||
.and_then(|row| {
|
||||
Some(Cow::Owned(format!(
|
||||
"{} ({}) - {}",
|
||||
row.server_name.0,
|
||||
row.worktree_root_name,
|
||||
if row.rpc_trace_selected {
|
||||
RPC_MESSAGES
|
||||
} else {
|
||||
SERVER_LOGS
|
||||
},
|
||||
)))
|
||||
})
|
||||
.unwrap_or_else(|| "No server selected".into()),
|
||||
)
|
||||
}
|
||||
|
||||
fn render_language_server_menu_item(
|
||||
id: LanguageServerId,
|
||||
name: LanguageServerName,
|
||||
worktree_root_name: &str,
|
||||
rpc_trace_enabled: bool,
|
||||
_logs_selected: bool,
|
||||
_rpc_trace_selected: bool,
|
||||
cx: &mut ViewContext<Self>,
|
||||
) -> Div {
|
||||
v_stack()
|
||||
.size_full()
|
||||
.child(Label::new(format!("{} ({})", name.0, worktree_root_name)))
|
||||
.child(
|
||||
div()
|
||||
.child(Label::new(SERVER_LOGS))
|
||||
.cursor(CursorStyle::PointingHand)
|
||||
.on_mouse_down(
|
||||
MouseButton::Left,
|
||||
cx.listener(move |view, _, cx| {
|
||||
view.show_logs_for_server(id, cx);
|
||||
}),
|
||||
),
|
||||
)
|
||||
.child(
|
||||
h_stack()
|
||||
.size_full()
|
||||
.child(Label::new(RPC_MESSAGES))
|
||||
.child(
|
||||
Checkbox::new(
|
||||
id.0,
|
||||
if rpc_trace_enabled {
|
||||
ui::Selection::Selected
|
||||
} else {
|
||||
ui::Selection::Unselected
|
||||
},
|
||||
)
|
||||
.on_click(cx.listener(
|
||||
move |this, selection, cx| {
|
||||
let enabled = matches!(selection, ui::Selection::Selected);
|
||||
this.toggle_logging_for_server(id, enabled, cx);
|
||||
},
|
||||
)),
|
||||
)
|
||||
.border_1()
|
||||
.border_color(red())
|
||||
.cursor(CursorStyle::PointingHand)
|
||||
.on_mouse_down(
|
||||
MouseButton::Left,
|
||||
cx.listener(move |view, _, cx| {
|
||||
view.show_rpc_trace_for_server(id, cx);
|
||||
}),
|
||||
),
|
||||
)
|
||||
.border_1()
|
||||
.border_color(red())
|
||||
.bg(red())
|
||||
}
|
||||
}
|
||||
|
||||
pub enum Event {
|
||||
|
@ -1,9 +1,9 @@
|
||||
use editor::{scroll::autoscroll::Autoscroll, Anchor, Editor, ExcerptId};
|
||||
use gpui::{
|
||||
actions, div, rems, uniform_list, AnyElement, AppContext, Div, EventEmitter, FocusHandle,
|
||||
FocusableView, Hsla, InteractiveElement, IntoElement, Model, MouseButton, MouseDownEvent,
|
||||
MouseMoveEvent, ParentElement, Pixels, Render, Styled, TextStyle, UniformListScrollHandle,
|
||||
View, ViewContext, VisualContext, WeakView, WindowContext,
|
||||
actions, canvas, div, rems, uniform_list, AnyElement, AppContext, AvailableSpace, Div,
|
||||
EventEmitter, FocusHandle, FocusableView, Hsla, InteractiveElement, IntoElement, Model,
|
||||
MouseButton, MouseDownEvent, MouseMoveEvent, ParentElement, Pixels, Render, Styled, TextStyle,
|
||||
UniformListScrollHandle, View, ViewContext, VisualContext, WeakView, WindowContext,
|
||||
};
|
||||
use language::{Buffer, OwnedSyntaxLayerInfo};
|
||||
use settings::Settings;
|
||||
@ -305,7 +305,7 @@ impl SyntaxTreeView {
|
||||
anonymous_node_style.color = color;
|
||||
}
|
||||
|
||||
let mut row = h_stack().size_full();
|
||||
let mut row = h_stack().bg(gpui::yellow());
|
||||
if let Some(field_name) = cursor.field_name() {
|
||||
let mut field_style = style.clone();
|
||||
if let Some(color) = property_color {
|
||||
@ -332,7 +332,8 @@ impl SyntaxTreeView {
|
||||
Hsla::default()
|
||||
})
|
||||
// todo!() does not work
|
||||
.ml(rems(depth as f32 * 180.0))
|
||||
// .ml(rems(dbg!(depth) as f32 * 10.0))
|
||||
.pl(rems(dbg!(depth) as f32 * 10.0))
|
||||
// .padding(gutter_padding + depth as f32 * 18.0)
|
||||
;
|
||||
}
|
||||
@ -341,7 +342,7 @@ impl SyntaxTreeView {
|
||||
impl Render for SyntaxTreeView {
|
||||
type Element = Div;
|
||||
|
||||
fn render(&mut self, cx: &mut gpui::ViewContext<'_, Self>) -> Div {
|
||||
fn render(&mut self, cx: &mut gpui::ViewContext<'_, Self>) -> Self::Element {
|
||||
let settings = ThemeSettings::get_global(cx);
|
||||
let font = settings.buffer_font.clone();
|
||||
let font_size = settings.buffer_font_size(cx);
|
||||
@ -363,7 +364,7 @@ impl Render for SyntaxTreeView {
|
||||
self.hover_state_changed(cx);
|
||||
}
|
||||
|
||||
let mut rendered = div();
|
||||
let mut rendered = div().flex_1();
|
||||
|
||||
if let Some(layer) = self
|
||||
.editor
|
||||
@ -417,7 +418,7 @@ impl Render for SyntaxTreeView {
|
||||
items
|
||||
},
|
||||
)
|
||||
// todo!() does scroll either editor or the tree
|
||||
.size_full()
|
||||
.track_scroll(self.list_scroll_handle.clone())
|
||||
.on_mouse_move(cx.listener(move |tree_view, event: &MouseMoveEvent, cx| {
|
||||
tree_view.mouse_y = Some(event.position.y);
|
||||
@ -431,7 +432,16 @@ impl Render for SyntaxTreeView {
|
||||
)
|
||||
.text_bg(editor_colors.background);
|
||||
|
||||
rendered = rendered.child(list);
|
||||
rendered = rendered.child(
|
||||
canvas(move |bounds, cx| {
|
||||
list.into_any_element().draw(
|
||||
bounds.origin,
|
||||
bounds.size.map(AvailableSpace::Definite),
|
||||
cx,
|
||||
)
|
||||
})
|
||||
.size_full(),
|
||||
);
|
||||
}
|
||||
|
||||
rendered
|
||||
|
Loading…
Reference in New Issue
Block a user