MCPcopy Create free account
hub / github.com/GCWing/BitFun / handle_mouse_event

Method handle_mouse_event

src/apps/cli/src/ui/provider_selector.rs:295–343  ·  view source on GitHub ↗
(&mut self, mouse: &MouseEvent)

Source from the content-addressed store, hash-verified

293 }
294
295 pub fn handle_mouse_event(&mut self, mouse: &MouseEvent) -> Option<ProviderSelection> {
296 if !self.visible {
297 return None;
298 }
299
300 let area = match self.last_area {
301 Some(a) => a,
302 None => return None,
303 };
304
305 let in_popup = mouse.column >= area.x
306 && mouse.column < area.x.saturating_add(area.width)
307 && mouse.row >= area.y
308 && mouse.row < area.y.saturating_add(area.height);
309
310 match mouse.kind {
311 MouseEventKind::ScrollUp if in_popup => {
312 self.scroll_offset = self.scroll_offset.saturating_sub(3);
313 None
314 }
315 MouseEventKind::ScrollDown if in_popup => {
316 let max_offset = self.rows.len().saturating_sub(self.visible_rows);
317 self.scroll_offset = (self.scroll_offset + 3).min(max_offset);
318 None
319 }
320 MouseEventKind::Moved if in_popup => {
321 if let Some(sel_idx) = self.selectable_index_at_row(mouse.row, &area) {
322 self.selected = sel_idx;
323 }
324 None
325 }
326 MouseEventKind::Down(MouseButton::Left) if in_popup => {
327 if let Some(sel_idx) = self.selectable_index_at_row(mouse.row, &area) {
328 self.selected = sel_idx;
329 let result = self.confirm_selection();
330 if result.is_some() {
331 self.hide();
332 }
333 return result;
334 }
335 None
336 }
337 MouseEventKind::Down(MouseButton::Left) if !in_popup => {
338 self.hide();
339 None
340 }
341 _ => None,
342 }
343 }
344
345 pub fn captures_mouse(&self, _mouse: &MouseEvent) -> bool {
346 self.visible

Callers

nothing calls this directly

Calls 4

lenMethod · 0.45
confirm_selectionMethod · 0.45
hideMethod · 0.45

Tested by

no test coverage detected