cbf_chrome/data/
choice_menu.rs1use cbf_chrome_sys::ffi::{
4 CBF_CHOICE_MENU_ITEM_CHECKABLE_OPTION, CBF_CHOICE_MENU_ITEM_GROUP, CBF_CHOICE_MENU_ITEM_OPTION,
5 CBF_CHOICE_MENU_ITEM_SEPARATOR, CBF_CHOICE_MENU_ITEM_SUB_MENU,
6 CBF_CHOICE_MENU_TEXT_DIRECTION_LEFT_TO_RIGHT, CBF_CHOICE_MENU_TEXT_DIRECTION_RIGHT_TO_LEFT,
7};
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10pub enum ChromeChoiceMenuItemType {
11 Option,
12 CheckableOption,
13 Group,
14 Separator,
15 SubMenu,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq)]
19pub enum ChromeChoiceMenuTextDirection {
20 LeftToRight,
21 RightToLeft,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub enum ChromeChoiceMenuSelectionMode {
26 Single,
27 Multiple,
28}
29
30#[derive(Debug, Clone, PartialEq, Eq)]
31pub struct ChromeChoiceMenuItem {
32 pub item_type: ChromeChoiceMenuItemType,
33 pub label: Option<String>,
34 pub tool_tip: Option<String>,
35 pub action: u32,
36 pub text_direction: ChromeChoiceMenuTextDirection,
37 pub has_text_direction_override: bool,
38 pub enabled: bool,
39 pub checked: bool,
40 pub children: Vec<ChromeChoiceMenuItem>,
41}
42
43#[derive(Debug, Clone, PartialEq)]
44pub struct ChromeChoiceMenu {
45 pub request_id: u64,
46 pub x: i32,
47 pub y: i32,
48 pub width: i32,
49 pub height: i32,
50 pub item_font_size: f64,
51 pub selected_item: i32,
52 pub right_aligned: bool,
53 pub selection_mode: ChromeChoiceMenuSelectionMode,
54 pub items: Vec<ChromeChoiceMenuItem>,
55}
56
57#[derive(Debug, Clone, PartialEq, Eq)]
58pub struct ChromeChoiceMenuResponse {
59 pub request_id: u64,
60 pub indices: Vec<i32>,
61}
62
63pub(crate) fn choice_menu_item_type_from_ffi(value: u8) -> ChromeChoiceMenuItemType {
64 match value {
65 CBF_CHOICE_MENU_ITEM_OPTION => ChromeChoiceMenuItemType::Option,
66 CBF_CHOICE_MENU_ITEM_CHECKABLE_OPTION => ChromeChoiceMenuItemType::CheckableOption,
67 CBF_CHOICE_MENU_ITEM_GROUP => ChromeChoiceMenuItemType::Group,
68 CBF_CHOICE_MENU_ITEM_SEPARATOR => ChromeChoiceMenuItemType::Separator,
69 CBF_CHOICE_MENU_ITEM_SUB_MENU => ChromeChoiceMenuItemType::SubMenu,
70 _ => ChromeChoiceMenuItemType::Option,
71 }
72}
73
74pub(crate) fn choice_menu_text_direction_from_ffi(value: u8) -> ChromeChoiceMenuTextDirection {
75 match value {
76 CBF_CHOICE_MENU_TEXT_DIRECTION_RIGHT_TO_LEFT => ChromeChoiceMenuTextDirection::RightToLeft,
77 CBF_CHOICE_MENU_TEXT_DIRECTION_LEFT_TO_RIGHT => ChromeChoiceMenuTextDirection::LeftToRight,
78 _ => ChromeChoiceMenuTextDirection::LeftToRight,
79 }
80}