mirror of
https://gitlab.gnome.org/jwestman/blueprint-compiler.git
synced 2025-06-22 23:19:25 -04:00
Compare commits
4 commits
ecd3305bcd
...
fbd3ad2637
Author | SHA1 | Date | |
---|---|---|---|
|
fbd3ad2637 | ||
|
5a951696a7 | ||
|
71dcc02198 | ||
|
4d42bd68c1 |
12 changed files with 67 additions and 30 deletions
|
@ -21,12 +21,15 @@
|
||||||
from .binding import Binding
|
from .binding import Binding
|
||||||
from .common import *
|
from .common import *
|
||||||
from .contexts import ValueTypeCtx
|
from .contexts import ValueTypeCtx
|
||||||
|
from .gtk_menu import menu
|
||||||
from .values import ArrayValue, ExprValue, ObjectValue, Value
|
from .values import ArrayValue, ExprValue, ObjectValue, Value
|
||||||
|
|
||||||
|
|
||||||
class Property(AstNode):
|
class Property(AstNode):
|
||||||
grammar = Statement(
|
grammar = Statement(
|
||||||
UseIdent("name"), ":", AnyOf(Binding, ExprValue, ObjectValue, Value, ArrayValue)
|
UseIdent("name"),
|
||||||
|
":",
|
||||||
|
AnyOf(Binding, ExprValue, menu, ObjectValue, Value, ArrayValue),
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -60,11 +60,6 @@ class Menu(AstNode):
|
||||||
def items(self) -> T.List[T.Union["Menu", "MenuAttribute"]]:
|
def items(self) -> T.List[T.Union["Menu", "MenuAttribute"]]:
|
||||||
return self.children
|
return self.children
|
||||||
|
|
||||||
@validate("menu")
|
|
||||||
def has_id(self):
|
|
||||||
if self.tokens["tag"] == "menu" and self.tokens["id"] is None:
|
|
||||||
raise CompileError("Menu requires an ID")
|
|
||||||
|
|
||||||
@validate("id")
|
@validate("id")
|
||||||
def object_id_not_reserved(self):
|
def object_id_not_reserved(self):
|
||||||
if self.id in RESERVED_IDS:
|
if self.id in RESERVED_IDS:
|
||||||
|
|
|
@ -139,6 +139,11 @@ class XmlOutput(OutputFormat):
|
||||||
self._emit_expression(value.expression, xml)
|
self._emit_expression(value.expression, xml)
|
||||||
xml.end_tag()
|
xml.end_tag()
|
||||||
|
|
||||||
|
elif isinstance(value, Menu):
|
||||||
|
xml.start_tag("property", **props)
|
||||||
|
self._emit_menu(value, xml)
|
||||||
|
xml.end_tag()
|
||||||
|
|
||||||
elif isinstance(value, ObjectValue):
|
elif isinstance(value, ObjectValue):
|
||||||
xml.start_tag("property", **props)
|
xml.start_tag("property", **props)
|
||||||
self._emit_object(value.object, xml)
|
self._emit_object(value.object, xml)
|
||||||
|
|
|
@ -16,14 +16,15 @@ Properties are the main way to set values on objects, but they are limited by th
|
||||||
|
|
||||||
Extension = :ref:`ExtAccessibility<Syntax ExtAccessibility>`
|
Extension = :ref:`ExtAccessibility<Syntax ExtAccessibility>`
|
||||||
| :ref:`ExtAdwAlertDialog<Syntax ExtAdwAlertDialog>`
|
| :ref:`ExtAdwAlertDialog<Syntax ExtAdwAlertDialog>`
|
||||||
| :ref:`ExtAdwMessageDialog<Syntax ExtAdwMessageDialog>`
|
|
||||||
| :ref:`ExtAdwBreakpoint<Syntax ExtAdwBreakpoint>`
|
| :ref:`ExtAdwBreakpoint<Syntax ExtAdwBreakpoint>`
|
||||||
|
| :ref:`ExtAdwMessageDialog<Syntax ExtAdwMessageDialog>`
|
||||||
| :ref:`ExtComboBoxItems<Syntax ExtComboBoxItems>`
|
| :ref:`ExtComboBoxItems<Syntax ExtComboBoxItems>`
|
||||||
| :ref:`ExtFileFilterMimeTypes<Syntax ExtFileFilter>`
|
| :ref:`ExtFileFilterMimeTypes<Syntax ExtFileFilter>`
|
||||||
| :ref:`ExtFileFilterPatterns<Syntax ExtFileFilter>`
|
| :ref:`ExtFileFilterPatterns<Syntax ExtFileFilter>`
|
||||||
| :ref:`ExtFileFilterSuffixes<Syntax ExtFileFilter>`
|
| :ref:`ExtFileFilterSuffixes<Syntax ExtFileFilter>`
|
||||||
| :ref:`ExtLayout<Syntax ExtLayout>`
|
| :ref:`ExtLayout<Syntax ExtLayout>`
|
||||||
| :ref:`ExtListItemFactory<Syntax ExtListItemFactory>`
|
| :ref:`ExtListItemFactory<Syntax ExtListItemFactory>`
|
||||||
|
| :ref:`ExtScaleMarks<Syntax ExtScaleMarks>`
|
||||||
| :ref:`ExtSizeGroupWidgets<Syntax ExtSizeGroupWidgets>`
|
| :ref:`ExtSizeGroupWidgets<Syntax ExtSizeGroupWidgets>`
|
||||||
| :ref:`ExtStringListStrings<Syntax ExtStringListStrings>`
|
| :ref:`ExtStringListStrings<Syntax ExtStringListStrings>`
|
||||||
| :ref:`ExtStyles<Syntax ExtStyles>`
|
| :ref:`ExtStyles<Syntax ExtStyles>`
|
||||||
|
@ -47,25 +48,6 @@ The ``accessibility`` block defines values relevant to accessibility software. T
|
||||||
|
|
||||||
Relations which allow for a list of values, for example `labelled-by`, must be given as a single relation with a list of values instead of duplicating the relation like done in Gtk.Builder.
|
Relations which allow for a list of values, for example `labelled-by`, must be given as a single relation with a list of values instead of duplicating the relation like done in Gtk.Builder.
|
||||||
|
|
||||||
.. _Syntax ExtAdwBreakpoint:
|
|
||||||
|
|
||||||
Adw.Breakpoint
|
|
||||||
--------------
|
|
||||||
|
|
||||||
.. rst-class:: grammar-block
|
|
||||||
|
|
||||||
ExtAdwBreakpointCondition = 'condition' '(' <condition::ref:`QUOTED<Syntax QUOTED>`> ')'
|
|
||||||
ExtAdwBreakpoint = 'setters' '{' ExtAdwBreakpointSetter* '}'
|
|
||||||
ExtAdwBreakpointSetter = <object::ref:`IDENT<Syntax IDENT>`> '.' <property::ref:`IDENT<Syntax IDENT>`> ':' :ref:`Value <Syntax Value>` ';'
|
|
||||||
|
|
||||||
Valid in `Adw.Breakpoint <https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Breakpoint.html>`_.
|
|
||||||
|
|
||||||
Defines the condition for a breakpoint and the properties that will be set at that breakpoint. See the documentation for `Adw.Breakpoint <https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Breakpoint.html>`_.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
The `Adw.Breakpoint:condition <https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/property.Breakpoint.condition.html>`_ property has type `Adw.BreakpointCondition <https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/struct.BreakpointCondition.html>`_, which GtkBuilder doesn't know how to parse from a string. Therefore, the ``condition`` syntax is used instead.
|
|
||||||
|
|
||||||
|
|
||||||
.. _Syntax ExtAdwAlertDialog:
|
.. _Syntax ExtAdwAlertDialog:
|
||||||
|
|
||||||
|
@ -96,6 +78,26 @@ The ``responses`` block defines the buttons that will be added to the dialog. Th
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.. _Syntax ExtAdwBreakpoint:
|
||||||
|
|
||||||
|
Adw.Breakpoint
|
||||||
|
--------------
|
||||||
|
|
||||||
|
.. rst-class:: grammar-block
|
||||||
|
|
||||||
|
ExtAdwBreakpointCondition = 'condition' '(' <condition::ref:`QUOTED<Syntax QUOTED>`> ')'
|
||||||
|
ExtAdwBreakpoint = 'setters' '{' ExtAdwBreakpointSetter* '}'
|
||||||
|
ExtAdwBreakpointSetter = <object::ref:`IDENT<Syntax IDENT>`> '.' <property::ref:`IDENT<Syntax IDENT>`> ':' :ref:`Value <Syntax Value>` ';'
|
||||||
|
|
||||||
|
Valid in `Adw.Breakpoint <https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Breakpoint.html>`_.
|
||||||
|
|
||||||
|
Defines the condition for a breakpoint and the properties that will be set at that breakpoint. See the documentation for `Adw.Breakpoint <https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Breakpoint.html>`_.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
The `Adw.Breakpoint:condition <https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/property.Breakpoint.condition.html>`_ property has type `Adw.BreakpointCondition <https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/struct.BreakpointCondition.html>`_, which GtkBuilder doesn't know how to parse from a string. Therefore, the ``condition`` syntax is used instead.
|
||||||
|
|
||||||
|
|
||||||
.. _Syntax ExtAdwMessageDialog:
|
.. _Syntax ExtAdwMessageDialog:
|
||||||
|
|
||||||
Adw.MessageDialog Responses
|
Adw.MessageDialog Responses
|
||||||
|
@ -262,6 +264,16 @@ Valid in `Gtk.Scale <https://docs.gtk.org/gtk4/class.Scale.html>`_.
|
||||||
|
|
||||||
The ``marks`` block defines the marks on a scale. A single ``mark`` has up to three arguments: a value, an optional position, and an optional label. The position can be ``left``, ``right``, ``top``, or ``bottom``. The label may be translated.
|
The ``marks`` block defines the marks on a scale. A single ``mark`` has up to three arguments: a value, an optional position, and an optional label. The position can be ``left``, ``right``, ``top``, or ``bottom``. The label may be translated.
|
||||||
|
|
||||||
|
.. code-block:: blueprint
|
||||||
|
|
||||||
|
Scale {
|
||||||
|
marks [
|
||||||
|
mark (-1, bottom),
|
||||||
|
mark (0, top, _("Origin")),
|
||||||
|
mark (2),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.. _Syntax ExtSizeGroupWidgets:
|
.. _Syntax ExtSizeGroupWidgets:
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ Properties
|
||||||
|
|
||||||
.. rst-class:: grammar-block
|
.. rst-class:: grammar-block
|
||||||
|
|
||||||
Property = <name::ref:`IDENT<Syntax IDENT>`> ':' ( :ref:`Binding<Syntax Binding>` | :ref:`ExprValue<Syntax ExprValue>` | :ref:`ObjectValue<Syntax ObjectValue>` | :ref:`Value<Syntax Value>` ) ';'
|
Property = <name::ref:`IDENT<Syntax IDENT>`> ':' ( :ref:`Binding<Syntax Binding>` | :ref:`ExprValue<Syntax ExprValue>` | :ref:`Menu<Syntax Menu>` | :ref:`ObjectValue<Syntax ObjectValue>` | :ref:`Value<Syntax Value>` ) ';'
|
||||||
|
|
||||||
Properties specify the details of each object, like a label's text, an image's icon name, or the margins on a container.
|
Properties specify the details of each object, like a label's text, an image's icon name, or the margins on a container.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
project('blueprint-compiler',
|
project('blueprint-compiler',
|
||||||
version: '0.16.0',
|
version: '0.17.0',
|
||||||
)
|
)
|
||||||
|
|
||||||
prefix = get_option('prefix')
|
prefix = get_option('prefix')
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
4,15,4,Namespace Gtk does not contain a type called menu
|
|
|
@ -1 +0,0 @@
|
||||||
3,1,4,Menu requires an ID
|
|
14
tests/samples/inline_menu.ui
Normal file
14
tests/samples/inline_menu.ui
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
DO NOT EDIT!
|
||||||
|
This file was @generated by blueprint-compiler. Instead, edit the
|
||||||
|
corresponding .blp file and regenerate this file with blueprint-compiler.
|
||||||
|
-->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk" version="4.0"/>
|
||||||
|
<object class="GtkMenuButton">
|
||||||
|
<property name="menu-model">
|
||||||
|
<menu id="primary_menu"></menu>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</interface>
|
10
tests/samples/menu_no_id.ui
Normal file
10
tests/samples/menu_no_id.ui
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
DO NOT EDIT!
|
||||||
|
This file was @generated by blueprint-compiler. Instead, edit the
|
||||||
|
corresponding .blp file and regenerate this file with blueprint-compiler.
|
||||||
|
-->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk" version="4.0"/>
|
||||||
|
<menu></menu>
|
||||||
|
</interface>
|
Loading…
Add table
Add a link
Reference in a new issue