Commit Graph

35 Commits

Author SHA1 Message Date
Denis Drakhnia
20f64595ac pipewire connection: Show banner if disconnected 2023-09-28 12:25:04 +03:00
Denis Drakhnia
94323510aa pipewire connection: Reconnection to PipeWire server 2023-09-27 10:54:32 +00:00
Tom A. Wagner
af4051c3c2 ui: Port to libadwaita
This ports the application to libadwaita, enabling us to use the libadwaita stylesheet and
widgets to better implement the Gnome Human Interface Guidelines.
2023-08-28 19:47:37 +02:00
Tom A. Wagner
7f754b207c Color links and ports according to their formats
Format params for links and ports are now being watched for in the pipewire connection code.

The parsed media type is then set on the port widget / link object
and they are colored accordingly.

For ports, which were already colored before, this new method of determining the media type
should be more reliable and accurate as this uses the real Format/EnumFormat
params instead of parsing optional properties.
2023-08-20 10:55:25 +02:00
Tom A. Wagner
bf5c7e4636 Update dependencies 2023-08-17 20:14:23 +02:00
Tom A. Wagner
0b3b124cdf graph: Refactor graph item management into new graph_manager object
The graph widgets management (watching a glib receiver, adding and removing
Nodes, Ports and Links) currently done in the `Application` and `GraphView`
objects has been extracted into a new GraphManager object, which watches the
receiver instead, pushes changes directly to the widgets, and reacts to their signals.

This seperates widget logic and management logic cleanly instead of both
being mixed into the GraphView, and also reduces the code size for the
Application object.
2023-08-01 09:15:40 +02:00
Tom A. Wagner
475a83fab7 Restructure view module into ui folder, graph specific widgets into graph subfolder 2023-07-27 14:16:42 +02:00
Tom A. Wagner
52e48cc0a7 Adjust license headers to reflect gpl-3.0-only license. 2022-04-19 10:14:01 +02:00
Tom A. Wagner
96182826e4 logging: Use glib as log backend instead of env_logger.
This makes log output use the same logger as gtk itself and as most other gtk applications
2022-01-11 12:15:14 +01:00
Tom A. Wagner
92dcfd61a1 Add gpl snippets to the start of each rust source file. 2021-10-03 11:27:36 +02:00
Roger Roger
487dc3b2d3 Group nodes into columns by major type 2021-08-18 07:23:50 +00:00
Tom A. Wagner
179665778d view: Draw a dashed line for links that are not active 2021-07-08 13:37:37 +02:00
Tom A. Wagner
907ef328d2 Move state to pipewire thread instead of the gtk thread.
This will allow easier state-keeping later, when setting up info-listeners on structs.
2021-06-06 09:20:07 +02:00
Tom A. Wagner
118c1ca28c Get node_from, node_to ids from state instead of props when a new link appears.
This is more reliable than assuming the link carries the id of its nodes, as there have been cases where a link was created without those
properties set.
Instead, we can just pull them from the state via the port ids of the link.
2021-06-04 10:30:31 +02:00
Tom A. Wagner
dce228ff60 Update dependencies
Glib MainContext is now aquired manually because a change in gtk-rs would lead to
a panic when attaching the receiver otherwise, because gtk::init() doesn't
"leak" the default main context anymore.
2021-05-22 14:00:51 +02:00
Tom A. Wagner
a5d8c871ee Update dependencies 2021-05-08 18:42:49 +02:00
Tom A. Wagner
13f02ad317 Toggle links on and off when ports are connected by the user.
This extends the `Application` struct to keep more advanced state.
This state is then used to determine the needed information to create
or delete a link between the two connected ports.

A message to create/delete the link is then send to the pipewire thread,
which executed the request.
2021-05-08 18:06:52 +02:00
Tom A. Wagner
be240231c0 Merge Controller and View structs into one Application struct.
The `View` sturct was mostly a layer of indirection, and the controller benefitted by absorbing the gtk::Application
subclass parts, so now those two are merged into a new gtk::Application subclass.
2021-05-08 18:06:52 +02:00
Tom A. Wagner
2cc684d57c Turn struct View into a gtk::Application subclass.
This lets us keep multiple reference-counted copies easier, and lets us emit signals to the controller.
2021-05-08 18:06:52 +02:00
Tom A. Wagner
076fec7eb4 Modify architecture to run pipewire loop in second thread.
The pipewire loop now runs without interruption in a second thread and communicates with
the GTK thread via a channel in each direction, instead of checking for events once a second and using callbacks.

This allows changes to appear instantly in the view, instead of having to wait.
2021-05-05 21:48:00 +02:00
Tom A. Wagner
2cb155c5ee view: Refactor view to have a manager View struct.
The view struct creates, manages and runs the view, and handles all communication with components outside of the view.
2021-03-31 10:44:04 +02:00
Tom A. Wagner
9519eefa6e Change architecture to controller-centered arch
struct PipewireConnection is now decoupled from any other components, another component (the controller)
can receive updates by registering a callback.

struct PipewireState has been refactored to a struct Controller.
It still keeps state and manages the view, but now also actively requests updates from the pipewire connection via callback.
2021-03-28 19:04:57 +02:00
Emmanuel Gil Peyrot
aab1f1bde3 Add a ^Q accel to quit
This is a somewhat standard shortcut used in many GTK applications.
2021-03-19 15:23:48 +00:00
Tom A. Wagner
528694b63e Change application name to 'Helvum' 2021-03-12 17:30:26 +01:00
Tom A. Wagner
ec8de4a4a7 Color ports depending on the type of data (audio,video,midi) they carry 2021-02-09 12:51:35 +01:00
Tom A. Wagner
5bf62eca6e Use log, env_logger crates to log warnings instead of using eprintln!() macro 2021-01-12 09:48:59 +01:00
Tom A. Wagner
181661a2db Delete items from graph when they are removed by the pipewire server. 2021-01-08 12:34:22 +01:00
Tom A. Wagner
9784b9bae0 Run rustfmt on the codebase 2021-01-08 09:58:58 +01:00
Tom A. Wagner
7f054890ed Make graphview scrollable 2021-01-07 17:43:41 +01:00
Tom A. Wagner
85b21a920d Start application with a bigger window 2021-01-05 11:27:15 +01:00
Tom A. Wagner
9262308d28 Improve theming
Default to a dark theme and draw a grid on the background of the graphview
2021-01-05 11:24:49 +01:00
Tom A. Wagner
2897543acf Switch to gtk4 2021-01-05 09:46:34 +01:00
Tom A. Wagner
b129d84fa2 Display Nodes/Ports/Links obtained from pipewire server 2021-01-03 19:01:47 +01:00
Tom A. Wagner
c72bef364d Run rustfmt on the codebase 2020-12-14 11:28:06 +01:00
Tom A. Wagner
264ccf0982 Add initial project. 2020-12-14 11:20:29 +01:00