Skip to content

Commit

Permalink
feat(custom): ability to add modules/widgets to buttons
Browse files Browse the repository at this point in the history
Resolves #207
  • Loading branch information
JakeStanger committed Apr 1, 2024
1 parent e1a9f73 commit 46224d8
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
11 changes: 6 additions & 5 deletions docs/modules/Custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ A container to place nested widgets inside.
| Name | Type | Default | Description |
|---------------|------------------------------------------------------------|----------------|-------------------------------------------------------------------|
| `orientation` | `'horizontal'` or `'vertical'` (shorthand: `'h'` or `'v'`) | `'horizontal'` | Whether child widgets should be horizontally or vertically added. |
| `widgets` | `(Module or Widget)[]` | `[]` | List of widgets to add to this box. |
| `widgets` | `(Module or Widget)[]` | `[]` | List of modules/widgets to add to this box. |

#### Label

Expand All @@ -64,10 +64,11 @@ A clickable button, which can run a command when clicked.

> Type `button`
| Name | Type | Default | Description |
|------------|-------------------------------------------------|---------|---------------------------------------------------------------------|
| `label` | [Dynamic String](dynamic-values#dynamic-string) | `null` | Widget text label. Pango markup and embedded scripts are supported. |
| `on_click` | `string [command]` | `null` | Command to execute. More on this [below](#commands). |
| Name | Type | Default | Description |
|------------|-------------------------------------------------|---------|--------------------------------------------------------------------------------------------------|
| `label` | [Dynamic String](dynamic-values#dynamic-string) | `null` | Widget text label. Pango markup and embedded scripts are supported. Ignored if `widgets` is set. |
| `widgets` | `(Module or Widget)[]` | `[]` | List of modules/widgets to add to this button. |
| `on_click` | `string [command]` | `null` | Command to execute. More on this [below](#commands). |

#### Image

Expand Down
15 changes: 12 additions & 3 deletions src/modules/custom/button.rs
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
use gtk::prelude::*;
use gtk::{Button, Label};
use gtk::{Button, Label, Orientation};
use serde::Deserialize;

use crate::dynamic_value::dynamic_string;
use crate::modules::PopupButton;
use crate::{build, try_send};

use super::{CustomWidget, CustomWidgetContext, ExecEvent};
use super::{CustomWidget, CustomWidgetContext, ExecEvent, WidgetConfig};

#[derive(Debug, Deserialize, Clone)]
pub struct ButtonWidget {
name: Option<String>,
class: Option<String>,
label: Option<String>,
on_click: Option<String>,
widgets: Option<Vec<WidgetConfig>>,
}

impl CustomWidget for ButtonWidget {
Expand All @@ -23,7 +24,15 @@ impl CustomWidget for ButtonWidget {
let button = build!(self, Self::Widget);
context.popup_buttons.borrow_mut().push(button.clone());

if let Some(text) = self.label {
if let Some(widgets) = self.widgets {
let container = gtk::Box::new(Orientation::Horizontal, 0);

for widget in widgets {
widget.widget.add_to(&container, &context, widget.common);
}

button.add(&container);
} else if let Some(text) = self.label {
let label = Label::new(None);
label.set_use_markup(true);
button.add(&label);
Expand Down

0 comments on commit 46224d8

Please sign in to comment.