WIP
This commit is contained in:
parent
b029083441
commit
1a0ddc424b
2 changed files with 15 additions and 30 deletions
|
@ -42,7 +42,8 @@ use gpui::{
|
||||||
action, actions, point, px, relative, rems, size, AnyElement, AppContext, BackgroundExecutor,
|
action, actions, point, px, relative, rems, size, AnyElement, AppContext, BackgroundExecutor,
|
||||||
Bounds, ClipboardItem, Component, Context, DispatchContext, EventEmitter, FocusHandle,
|
Bounds, ClipboardItem, Component, Context, DispatchContext, EventEmitter, FocusHandle,
|
||||||
FontFeatures, FontStyle, FontWeight, HighlightStyle, Hsla, InputHandler, Model, Pixels, Render,
|
FontFeatures, FontStyle, FontWeight, HighlightStyle, Hsla, InputHandler, Model, Pixels, Render,
|
||||||
Subscription, Task, TextStyle, View, ViewContext, VisualContext, WeakView, WindowContext,
|
Subscription, Task, TextStyle, UniformListScrollHandle, View, ViewContext, VisualContext,
|
||||||
|
WeakView, WindowContext,
|
||||||
};
|
};
|
||||||
use highlight_matching_bracket::refresh_matching_bracket_highlights;
|
use highlight_matching_bracket::refresh_matching_bracket_highlights;
|
||||||
use hover_popover::{hide_hover, HoverState};
|
use hover_popover::{hide_hover, HoverState};
|
||||||
|
@ -940,29 +941,13 @@ struct CompletionsMenu {
|
||||||
match_candidates: Arc<[StringMatchCandidate]>,
|
match_candidates: Arc<[StringMatchCandidate]>,
|
||||||
matches: Arc<[StringMatch]>,
|
matches: Arc<[StringMatch]>,
|
||||||
selected_item: usize,
|
selected_item: usize,
|
||||||
list: UniformListState,
|
scroll_handle: UniformListScrollHandle,
|
||||||
}
|
|
||||||
|
|
||||||
// todo!(this is fake)
|
|
||||||
#[derive(Clone, Default)]
|
|
||||||
struct UniformListState;
|
|
||||||
|
|
||||||
// todo!(this is fake)
|
|
||||||
impl UniformListState {
|
|
||||||
pub fn scroll_to(&mut self, target: ScrollTarget) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo!(this is somewhat fake)
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub enum ScrollTarget {
|
|
||||||
Show(usize),
|
|
||||||
Center(usize),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CompletionsMenu {
|
impl CompletionsMenu {
|
||||||
fn select_first(&mut self, project: Option<&Model<Project>>, cx: &mut ViewContext<Editor>) {
|
fn select_first(&mut self, project: Option<&Model<Project>>, cx: &mut ViewContext<Editor>) {
|
||||||
self.selected_item = 0;
|
self.selected_item = 0;
|
||||||
self.list.scroll_to(ScrollTarget::Show(self.selected_item));
|
self.scroll_handle.scroll_to_item(self.selected_item);
|
||||||
self.attempt_resolve_selected_completion_documentation(project, cx);
|
self.attempt_resolve_selected_completion_documentation(project, cx);
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
@ -973,7 +958,7 @@ impl CompletionsMenu {
|
||||||
} else {
|
} else {
|
||||||
self.selected_item = self.matches.len() - 1;
|
self.selected_item = self.matches.len() - 1;
|
||||||
}
|
}
|
||||||
self.list.scroll_to(ScrollTarget::Show(self.selected_item));
|
self.scroll_handle.scroll_to_item(self.selected_item);
|
||||||
self.attempt_resolve_selected_completion_documentation(project, cx);
|
self.attempt_resolve_selected_completion_documentation(project, cx);
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
@ -984,14 +969,14 @@ impl CompletionsMenu {
|
||||||
} else {
|
} else {
|
||||||
self.selected_item = 0;
|
self.selected_item = 0;
|
||||||
}
|
}
|
||||||
self.list.scroll_to(ScrollTarget::Show(self.selected_item));
|
self.scroll_handle.scroll_to_item(self.selected_item);
|
||||||
self.attempt_resolve_selected_completion_documentation(project, cx);
|
self.attempt_resolve_selected_completion_documentation(project, cx);
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn select_last(&mut self, project: Option<&Model<Project>>, cx: &mut ViewContext<Editor>) {
|
fn select_last(&mut self, project: Option<&Model<Project>>, cx: &mut ViewContext<Editor>) {
|
||||||
self.selected_item = self.matches.len() - 1;
|
self.selected_item = self.matches.len() - 1;
|
||||||
self.list.scroll_to(ScrollTarget::Show(self.selected_item));
|
self.scroll_handle.scroll_to_item(self.selected_item);
|
||||||
self.attempt_resolve_selected_completion_documentation(project, cx);
|
self.attempt_resolve_selected_completion_documentation(project, cx);
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
@ -1527,14 +1512,14 @@ struct CodeActionsMenu {
|
||||||
actions: Arc<[CodeAction]>,
|
actions: Arc<[CodeAction]>,
|
||||||
buffer: Model<Buffer>,
|
buffer: Model<Buffer>,
|
||||||
selected_item: usize,
|
selected_item: usize,
|
||||||
list: UniformListState,
|
scroll_handle: UniformListScrollHandle,
|
||||||
deployed_from_indicator: bool,
|
deployed_from_indicator: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CodeActionsMenu {
|
impl CodeActionsMenu {
|
||||||
fn select_first(&mut self, cx: &mut ViewContext<Editor>) {
|
fn select_first(&mut self, cx: &mut ViewContext<Editor>) {
|
||||||
self.selected_item = 0;
|
self.selected_item = 0;
|
||||||
self.list.scroll_to(ScrollTarget::Show(self.selected_item));
|
self.scroll_handle.scroll_to_item(self.selected_item);
|
||||||
cx.notify()
|
cx.notify()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1544,7 +1529,7 @@ impl CodeActionsMenu {
|
||||||
} else {
|
} else {
|
||||||
self.selected_item = self.actions.len() - 1;
|
self.selected_item = self.actions.len() - 1;
|
||||||
}
|
}
|
||||||
self.list.scroll_to(ScrollTarget::Show(self.selected_item));
|
self.scroll_handle.scroll_to_item(self.selected_item);
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1554,13 +1539,13 @@ impl CodeActionsMenu {
|
||||||
} else {
|
} else {
|
||||||
self.selected_item = 0;
|
self.selected_item = 0;
|
||||||
}
|
}
|
||||||
self.list.scroll_to(ScrollTarget::Show(self.selected_item));
|
self.scroll_handle.scroll_to_item(self.selected_item);
|
||||||
cx.notify();
|
cx.notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn select_last(&mut self, cx: &mut ViewContext<Editor>) {
|
fn select_last(&mut self, cx: &mut ViewContext<Editor>) {
|
||||||
self.selected_item = self.actions.len() - 1;
|
self.selected_item = self.actions.len() - 1;
|
||||||
self.list.scroll_to(ScrollTarget::Show(self.selected_item));
|
self.scroll_handle.scroll_to_item(self.selected_item);
|
||||||
cx.notify()
|
cx.notify()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3660,7 +3645,7 @@ impl Editor {
|
||||||
completions: Arc::new(RwLock::new(completions.into())),
|
completions: Arc::new(RwLock::new(completions.into())),
|
||||||
matches: Vec::new().into(),
|
matches: Vec::new().into(),
|
||||||
selected_item: 0,
|
selected_item: 0,
|
||||||
list: Default::default(),
|
scroll_handle: UniformListScrollHandle::new(),
|
||||||
};
|
};
|
||||||
menu.filter(query.as_deref(), cx.background_executor().clone())
|
menu.filter(query.as_deref(), cx.background_executor().clone())
|
||||||
.await;
|
.await;
|
||||||
|
@ -3873,7 +3858,7 @@ impl Editor {
|
||||||
buffer,
|
buffer,
|
||||||
actions,
|
actions,
|
||||||
selected_item: Default::default(),
|
selected_item: Default::default(),
|
||||||
list: Default::default(),
|
scroll_handle: UniformListScrollHandle::default(),
|
||||||
deployed_from_indicator,
|
deployed_from_indicator,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ pub struct UniformList<V: 'static> {
|
||||||
scroll_handle: Option<UniformListScrollHandle>,
|
scroll_handle: Option<UniformListScrollHandle>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Default)]
|
||||||
pub struct UniformListScrollHandle(Arc<Mutex<Option<ScrollHandleState>>>);
|
pub struct UniformListScrollHandle(Arc<Mutex<Option<ScrollHandleState>>>);
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue