flow graphs for Gtk+ 3

grindhold e2df409f94 gtkflow: restored standard link color 5 days ago
data d8809aa66c build: exterminate autotools 4 years ago
debian 7dd514c561 packaging: added old packaging scripts 5 days ago
examples fc49a8a0d5 Rewritten advanced calculator demo into vala with new async approach 3 weeks ago
libgflow 15d9283194 Merge branch 'full-async' of activey/libgtkflow into master 5 days ago
libgflowpatterns 3810e19978 Potential SIGSEGV fixed 3 weeks ago
libgtkflow e2df409f94 gtkflow: restored standard link color 5 days ago
screenshots b4972b08b2 readme: added screenshot of sameline docks 3 years ago
test a0f9668b8f Introduced integration patterns module, added debian files 3 weeks ago
.gitignore 8a629cd2bc gitignore: ignore c files by default 1 year ago
.gitlab-ci.yml e591911cd7 gitlab-ci: cd 4 years ago
LICENSE 16cec0bdda added license file 5 years ago
README.md 774f89836c readme: add girepository + stability 4 months ago
meson.build a0f9668b8f Introduced integration patterns module, added debian files 3 weeks ago
meson_options.txt aab52e6982 build: added valadocs to meson files :fire: 4 years ago

README.md

GtkFlow

Here you see libgtkflow, a universal library for drawing flow graphs with Gtk+ 3.

SameLineDocks

Sinks and Sources may now appear on the same line

GtkFlowMultisink

We now have Sinks that can receive data from multiple sources!

GtkFlowColor

A more recent screenshot showing off libgtkflow with Gtk > 3.20. It looks a bit clearer.

LibGtkFlow

This is libgtkflow running inside firefox via broadway ↑

GtkFlowWindows

GtkFlow runs unter that strange M$-operating-system, too ↑

GtkFlowRes

The newest stuff in libgtkflow's development ↑ Nodes can be deleted by clicking the X-button in the upper right corner. Nodes are resizable by drag-n-dropping the lower right corner. The types of the docks can be printed along with their names

GtkFlowEvopop

This is a screenshot of libgtkflow rendered with the evopop Gtk3 theme ↑

GtkFlow

This here is the included advanced calculator demo application ↑

Flow graphs are a possibility to let your user model flows of data from, through and into several stations.

Motivation

I love Flowgraphs in other programs and i want to have them in my favourite UI-toolkit Gtk. I ran into some programs which implemented similar functionality but they all didn't feel or even look very Gtk-like/GNOMEy.

Possible Usages

Specific:

Unspecific:

  • Video Compositing (maybe PiTiVi)
  • Visualizing dependencies of objects (e.g. debian packages in apt)

  • … and whatever you can think up.

Stability

Core features are implemented and work quite well. API undergoes additions from time to time. The project is not at 1.0 yet as such, API can break but we don't expect fundamental breaking changes to core features anytime soon. If we introduce additional features, we try to offer them as additional API methods rather than changing existing ones.

Building

Make sure you get the following Dependencies:

  • libgtk-3-dev
  • gobject-introspection (libgirepository1.0-dev)
  • meson
  • vala
  • (valadoc)

Then do the following:

$ git clone https://github.com/grindhold/libgtkflow
$ cd libgtkflow
$ mkdir build
$ cd build
$ meson ..
$ ninja
# sudo ninja install

A user of the library (thx @gavr) reported:

"I have no idea why, but on OpenSUSE Tumbleweed pkgbuild will only be able to find gtkFlow if you build it like that:"

meson _build --buildtype=release --prefix=/usr

Examples

libgtkflow supports GObject-Introspection which means you can consume it in various popular languages including but not limited to: Python, Perl, Lua, JS, PHP. I compiled some examples on how to program against the library in Python in the examples-folder.

Feel free to add examples for your favorite language.

Note: If you installed the library in /usr/local, you have to export the following environment variables for the examples to work:

export LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu
export GI_TYPELIB_PATH=/usr/local/lib/x86_64-linux-gnu/girepository-1.0/

Please be aware that on other architectures than amd64 you will have to change the multiarch string x86_64-linux-gnu to something else that makes sense on your machine.