Skip to content

Commit

Permalink
ct
Browse files Browse the repository at this point in the history
  • Loading branch information
wiiznokes committed Jul 16, 2024
1 parent 2a19331 commit c62004b
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 102 deletions.
6 changes: 0 additions & 6 deletions src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ pub struct AppState {
pub db: Db,
pub clipboard_state: ClipboardState,
pub focused: usize,
pub more_action: Option<Data>,
}

impl AppState {
Expand Down Expand Up @@ -90,7 +89,6 @@ enum PopupKind {
impl Window {
fn close_popup(&mut self) -> Command<cosmic::app::Message<AppMessage>> {
self.state.focused = 0;
self.state.more_action.take();
self.state.db.set_query_and_search("".into());

if let Some(popup) = self.popup.take() {
Expand Down Expand Up @@ -176,7 +174,6 @@ impl cosmic::Application for Window {
db: db::Db::new(&config).unwrap(),
clipboard_state: ClipboardState::Init,
focused: 0,
more_action: None,
},
config,
};
Expand Down Expand Up @@ -296,9 +293,6 @@ impl cosmic::Application for Window {
config_set!(private_mode, private_mode);
PRIVATE_MODE.store(private_mode, atomic::Ordering::Relaxed);
}
AppMessage::MoreAction(data) => {
self.state.more_action = data;
}
}
Command::none()
}
Expand Down
1 change: 0 additions & 1 deletion src/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,4 @@ pub enum AppMessage {
PrivateMode(bool),
Clear,
Navigation(NavigationMessage),
MoreAction(Option<Data>),
}
150 changes: 55 additions & 95 deletions src/view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,7 @@ fn entries(state: &AppState) -> Element<'_, AppMessage> {
if text.is_empty() {
None
} else {
let more_action = if let Some(d) = &state.more_action {
d == data
} else {
false
};

let e = entry(data, pos == state.focused, more_action, text);
Some(e)
Some(entry(data, pos == state.focused, text))
}
}
},
Expand All @@ -113,95 +106,62 @@ fn entries(state: &AppState) -> Element<'_, AppMessage> {
.into()
}

fn entry<'a>(
entry: &'a Data,
is_focused: bool,
more_action_expanded: bool,
content: &'a str,
) -> Element<'a, AppMessage> {
fn entry<'a>(entry: &'a Data, is_focused: bool, content: &'a str) -> Element<'a, AppMessage> {
let content = text(formated_value(content, 5, 200));

let btn = mouse_area(
cosmic::widget::button(content)
.width(Length::Fill)
.on_press(AppMessage::Copy(entry.clone()))
.padding([8, 16])
.style(Button::Custom {
active: Box::new(move |focused, theme| {
let rad_s = theme.cosmic().corner_radii.radius_s;
let focused = is_focused || focused;

let a = if focused {
button::StyleSheet::hovered(theme, focused, focused, &Button::Text)
} else {
button::StyleSheet::active(theme, focused, focused, &Button::Standard)
};
button::Appearance {
border_radius: rad_s.into(),
outline_width: 0.0,
..a
}
}),
hovered: Box::new(move |focused, theme| {
let focused = is_focused || focused;
let rad_s = theme.cosmic().corner_radii.radius_s;

let text = button::StyleSheet::hovered(theme, focused, focused, &Button::Text);
button::Appearance {
border_radius: rad_s.into(),
outline_width: 0.0,
..text
}
}),
disabled: Box::new(|theme| button::StyleSheet::disabled(theme, &Button::Text)),
pressed: Box::new(move |focused, theme| {
let focused = is_focused || focused;
let rad_s = theme.cosmic().corner_radii.radius_s;

let text = button::StyleSheet::pressed(theme, focused, focused, &Button::Text);
button::Appearance {
border_radius: rad_s.into(),
outline_width: 0.0,
..text
}
}),
let btn = cosmic::widget::button(content)
.width(Length::Fill)
.on_press(AppMessage::Copy(entry.clone()))
.padding([8, 16])
.style(Button::Custom {
active: Box::new(move |focused, theme| {
let rad_s = theme.cosmic().corner_radii.radius_s;
let focused = is_focused || focused;

let a = if focused {
button::StyleSheet::hovered(theme, focused, focused, &Button::Text)
} else {
button::StyleSheet::active(theme, focused, focused, &Button::Standard)
};
button::Appearance {
border_radius: rad_s.into(),
outline_width: 0.0,
..a
}
}),
hovered: Box::new(move |focused, theme| {
let focused = is_focused || focused;
let rad_s = theme.cosmic().corner_radii.radius_s;

let text = button::StyleSheet::hovered(theme, focused, focused, &Button::Text);
button::Appearance {
border_radius: rad_s.into(),
outline_width: 0.0,
..text
}
}),
disabled: Box::new(|theme| button::StyleSheet::disabled(theme, &Button::Text)),
pressed: Box::new(move |focused, theme| {
let focused = is_focused || focused;
let rad_s = theme.cosmic().corner_radii.radius_s;

let text = button::StyleSheet::pressed(theme, focused, focused, &Button::Text);
button::Appearance {
border_radius: rad_s.into(),
outline_width: 0.0,
..text
}
}),
});

context_menu(
btn,
Some(vec![menu::Tree::new(
button(text(fl!("delete_entry")))
.on_press(AppMessage::Delete(entry.clone()))
.width(Length::Fill)
.style(Button::Destructive),
)]),
)
.on_right_release(AppMessage::MoreAction(Some(entry.clone())));

if more_action_expanded {
let overlay = Column::new()
.push(
button(text(fl!("delete_entry")))
.on_press(AppMessage::Delete(entry.clone()))
.width(Length::Fill)
.style(Button::Destructive),
)
.spacing(15)
.padding(7);

let overlay = container(overlay).style(theme::Container::Dropdown);

// todo: use it when the offset issue is resolved
// https://github.com/pop-os/libcosmic/issues/516
// context_menu(
// btn,
// Some(vec![menu::Tree::new(
// button(text(fl!("delete_entry")))
// .on_press(AppMessage::Delete(entry.clone()))
// .width(Length::Fill)
// .style(Button::Destructive),
// )]),
// )
// .into()

// todo: change it by a context menu instead
my_widgets::drop_down::DropDown::new(btn, overlay, true)
.on_dismiss(AppMessage::MoreAction(None))
.alignment(my_widgets::alignment::Alignment::Bottom)
.width(Length::Fixed(180.0))
.into()
} else {
btn.into()
}
.into()
}

0 comments on commit c62004b

Please sign in to comment.