Commit Graph

63674 Commits

Author SHA1 Message Date
Matthias Clasen
880ed01acc inspector: Use a dropdown for controllers
Use a GtkDropDown for the phases of event controllers.
2020-05-30 01:17:40 -04:00
Matthias Clasen
ef1993d3dc inspector: Use a dropdown for attribute mapping
Use a GtkDropDown for the attribute mapping editor.
2020-05-30 01:17:40 -04:00
Matthias Clasen
48448bf187 inspector: Use dropdowns in property editor
Replace combo boxes by dropdowns in the property editor.
2020-05-30 01:17:40 -04:00
Matthias Clasen
9af70cf4eb filechooser: Use a dropdown for choices 2020-05-30 01:17:40 -04:00
Matthias Clasen
26e7822ac1 filechooser: Use a dropdown for the filter combo
Replace an internal use of GtkComboBox with GtkDropDown.
2020-05-30 01:17:40 -04:00
Matthias Clasen
58a84b5b16 testsuite: Skip some GtkDropDown properties
The ::factory and ::selected properties need to
be skipped.
2020-05-30 01:17:40 -04:00
Matthias Clasen
e767217acd Add GtkDropDown
This is a simple drop down control using list models.
2020-05-30 01:17:40 -04:00
Matthias Clasen
3c581fe310 gtk-demo: Add a large grid demo
This is similar to the flowbox demo, but much bigger.
2020-05-30 01:17:40 -04:00
Matthias Clasen
a0b6d14862 docs: Add a listview overview section
Add a conceptual overview for all the listmodel-based
widgets.

Fixes: #2214
2020-05-30 01:17:40 -04:00
Matthias Clasen
98618506db listview: Fix keynav
What used to be can-focus is now focusable.
2020-05-30 01:17:40 -04:00
Matthias Clasen
977281d0f7 gtk-demo: Add filtering to the settings demo
A demo of filtering with lists was missing so far.
2020-05-30 01:17:40 -04:00
Matthias Clasen
1753091140 gtk-demo: Demo columnview sorting
Enhance the settings demo to have a sortable column.
2020-05-30 01:17:40 -04:00
Matthias Clasen
113e851ef5 gtk-demo: Cosmetic improvements to the listview demos
Set default sizes, window titles and add more
detail to the descriptions.
2020-05-30 01:13:17 -04:00
Benjamin Otte
1f99f51c19 xxx: isnanf() is some wtf 2020-05-29 19:46:32 -04:00
Matthias Clasen
65f075996a gtk-builder-tool: Minimally validate <binding>
Check that the toplevel property name is legit.
2020-05-29 19:46:32 -04:00
Benjamin Otte
3723b7f118 testsuite: Add tests for GtkTreeListSorter 2020-05-29 19:46:32 -04:00
Matthias Clasen
2d5595d03c Add GtkTreeListRowSorter
This is a special-purpose sorter that can
apply the sorting of another sorter to the
levels of a GtkTreeListModel.
2020-05-29 19:46:32 -04:00
Benjamin Otte
5d96b38984 testcolumnview: Add sorters 2020-05-29 19:46:32 -04:00
Matthias Clasen
affbbb8eb5 column view title: Show sort indicators 2020-05-29 19:46:32 -04:00
Matthias Clasen
7398455391 columnview: Add sorting
This is a somewhat large commit that:

- Adds GtkColumnViewSorter
This is a special-purpose, private sorter implementation which sorts
according to multiple sorters, allowing each individual sorter to be
inverted. This will be used with clickable column view headers.

- Adds a read-only GtkColumnView::sorter property
The GtkColumnView creates a GtkColumnViewSorter at startup that it uses
for this property.

- Adds a writable GtkColumnViewColumn::sorter property
This allows defining per-column sorters. Whenever an application sets a
sorter for a column, the header becomes clickable and whenever
a header is clicked, that column's sorter is prepended to the list of
sorters, unless it is already the first sorter, in which case we invert
its order. No column can be in the list more than once.
2020-05-29 19:46:32 -04:00
Matthias Clasen
7f0d18ed90 listview: Add single-click-activate
Add a single-click-activate property to GtkListView.
2020-05-29 19:46:32 -04:00
Matthias Clasen
9d538e612a listitemwidget: Add single-click-activate
Add a mode to GtkListItemWidget that activates on
single click and selects on hover. Make
GtkListItemManager set this on its items
when its own 'property' of the same name is set.
2020-05-29 19:46:32 -04:00
Matthias Clasen
fd9d407261 builder-tool: Pass through CDATA where it makes sense
This avoids a ton of escaping for
GtkBuilderListItemFactory::bytes.
2020-05-29 19:46:32 -04:00
Matthias Clasen
c753ba190c docs: Reorganize list widgets in their own chapter 2020-05-29 19:46:32 -04:00
Benjamin Otte
117176c0b6 fontchooserwidget: Port to listmodels
The port is kind of evil, in that it stores either a PangoFontFamily or a
PangoFontFace in the list, depending on if the fontchooser is configured
to select fonts or faces.
It also does not cache the font description anymore, so more calls to
pango_font_describe() may happen.

If both of these issues turn out problematic, the fontchooser would need
to resurrect GtkDelayedFontDescription again and put objects of that
type through the model.

These changes depend on Pango 1.46's introduction of listmodels and
various new getters, so the dependency has been upgraded.
2020-05-29 19:46:32 -04:00
Matthias Clasen
5f0f4e060d Add some tests for expression binding
In particular, test that expressios can deal with object == this.
2020-05-29 19:46:32 -04:00
Benjamin Otte
3d1cdff617 expression: Allow passing a this object to bind()
This gives a bit more control over the arguments passed to expressions.
2020-05-29 19:46:32 -04:00
Benjamin Otte
dbca2fcbaf gtk-demo: Add a Clocks demo
This demo is meant to showcase expressions.

It also needs the fixes in glib 2.64 to work properly.
2020-05-29 19:46:32 -04:00
Benjamin Otte
a652363429 xxx: Add a hack to make paintables transform to/from objects
See also: https://gitlab.gnome.org/GNOME/glib/merge_requests/1251
2020-05-29 19:46:32 -04:00
Benjamin Otte
dfa8de2fb2 inspector: Remove private struct for prop editor 2020-05-29 19:46:32 -04:00
Benjamin Otte
f48d81d78d inspector: Make Controller page a GtkWidget 2020-05-29 19:46:32 -04:00
Benjamin Otte
8c0b2d634b inspector: Remove private struct from controllers 2020-05-29 19:46:32 -04:00
Benjamin Otte
b2e7020b53 columnview: Add header
This uses a custom GtkColumnViewTitle widget. So far that widget is
pretty boring, but that will change once we added
resizing, reordering, dnd, sorting, hiding/showing of columns or
whatever UIs we want.
2020-05-29 19:46:32 -04:00
Benjamin Otte
e7a0858a15 tests: Add testcolumnview 2020-05-29 19:46:32 -04:00
Benjamin Otte
f4dbad4b8d columnview: Add a custom LayoutManager
The ColumnView now allocates column widths first and then the individual
rows use the new layout manager which looks at the column allocations to
allocate their children.
2020-05-29 19:46:32 -04:00
Benjamin Otte
94317e30c0 constraint-editor: Don't poke around in widget internals 2020-05-29 19:46:32 -04:00
Benjamin Otte
d56309e2a1 columnview: Fix styling with Adwaita
- Use "treeview" as the node name
- Add .view style class
2020-05-29 19:46:32 -04:00
Benjamin Otte
fbf1c98b23 inspector: Port object tree to GtkColumnView 2020-05-29 19:46:32 -04:00
Benjamin Otte
1c95f7e2d8 columnview: Add GtkColumnViewCell
It's a GtkListItemWidget subclass that tracks the column it belongs to
and allows the column to track it.

We also use this subclass to implement sizing support so columns share
the same size and get resized in sync.
2020-05-29 19:46:32 -04:00
Benjamin Otte
8f9c075069 widget: Add a hook for resizes
It's private, no APIs, we don't talk about it. But we will start using
it very soon, so we can do size request caching in columns and avoid
sizegroups...
2020-05-29 19:46:32 -04:00
Benjamin Otte
c65182af7c columnview: Implement GtkScrollable
Just forward it to the listview for now.
2020-05-29 19:46:32 -04:00
Benjamin Otte
df826ab495 columnview: Add listitems for the columns
They are not aligned in columns yet, but they do exist.
2020-05-29 19:46:32 -04:00
Benjamin Otte
6eea8b9e8b listitemwidget: Lazily create listitems
We only create them in root/unroot (they should be created in
appear/disappear, but that vfunc doesn't exist yet), that way we can
avoid expensive work while the widget isn't used for anything.
2020-05-29 19:46:32 -04:00
Benjamin Otte
755da397bc listitem: Move position/item/selected tracking to widget
This way, we can ensure it's always there when we need it (before the
item gets created) and gone when we don't (if some GC language holds on
to the item after we've destroyed the widget).
2020-05-29 19:46:32 -04:00
Benjamin Otte
e515e880e7 listitemwidget: Add a private struct
I had to rename the item property to list_item anyway, so I could just
do the next step with it.
2020-05-29 19:46:32 -04:00
Benjamin Otte
0730eb70e1 listitemfactory: Simplify
Instead of 6 vfuncs, we now have 3 and rely on the factory keeping track
of what it needs to do.

We're doing lots of dancing from one object to another here, but this
will hopefully get simpler with further commits.
2020-05-29 19:46:32 -04:00
Benjamin Otte
e0b7c82fac listitemfactory: Reorganize vfuncs
Instead of bind/rebind/update/unbind, we now just have update, and the
factories get to interpret that in the way they want.
2020-05-29 19:46:32 -04:00
Benjamin Otte
82e93d9b2e listitem: Make this a GObject
This splits GtkListItem into 2 parts:

1. GtkListItem
   This is purely a GObject with public API for developers who want to
   populate lists. There is no chance to cause conflict with GtkWidget
   properties that the list implementation assumed control over and
   defines a clear boundary.
2. GtkListItemWidget
   The widget part of the listitem. This is not only fully in control of
   the list machinery, the machinery can also use different widget
   implementations for different list widgets like I inted to for
   GtkColumnView.
2020-05-29 19:46:32 -04:00
Benjamin Otte
55dafea2e4 builder: Make gtk_builder_extend_with_template() work with objects
This will be relevant later when we introduce GtkListItem which is not a
GtkWidget.
2020-05-29 19:46:32 -04:00
Benjamin Otte
538897a055 gtk-demo: Add a Coverflow application launcher
This is roughly the simplest demo I could come up with.

But I documented it, so there's your tutorial.

Related: #2214
2020-05-29 19:46:32 -04:00