Compare commits

..

No commits in common. "315ca0cfb03df63af822190b7ca56697160b21d3" and "f9299fb04438d8668f11f2799f83ddb8f119ef3f" have entirely different histories.

24 changed files with 584 additions and 950 deletions

View File

@ -1,7 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_shortcuts.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<object class="GtkShortcutsWindow" id="shortcuts"> <object class="GtkShortcutsWindow" id="shortcuts">
<property name="section-name">shortcuts</property> <property name="section-name">shortcuts</property>
@ -10,66 +8,67 @@
<property name="section-name">shortcuts</property> <property name="section-name">shortcuts</property>
<child> <child>
<object class="GtkShortcutsGroup"> <object class="GtkShortcutsGroup">
<property name="title" translatable="yes">Project</property> <property name="title" translatable="1">Project</property>
<property name="view">shortcuts</property> <property name="view">shortcuts</property>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Control&gt;n</property> <property name="accelerator">&lt;Control&gt;n</property>
<property name="title" translatable="yes">Create new project</property> <property name="title" translatable="1">Create new project</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Control&gt;o</property> <property name="accelerator">&lt;Control&gt;o</property>
<property name="title" translatable="yes">Open a project</property> <property name="title" translatable="1">Open a project</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Control&gt;w</property> <property name="accelerator">&lt;Control&gt;w</property>
<property name="title" translatable="yes">Close the project</property> <property name="title" translatable="1">Close the project</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Control&gt;s</property> <property name="accelerator">&lt;Control&gt;s</property>
<property name="title" translatable="yes">Save the project</property> <property name="title" translatable="1">Save the project</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="visible">0</property>
<property name="accelerator">&lt;Control&gt;e</property> <property name="accelerator">&lt;Control&gt;e</property>
<property name="title" translatable="yes">Save and Export</property> <property name="title" translatable="1">Save and Export</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkShortcutsGroup"> <object class="GtkShortcutsGroup">
<property name="title" translatable="yes">Workspace</property> <property name="title" translatable="1">Workspace</property>
<property name="view">shortcuts</property> <property name="view">shortcuts</property>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Control&gt;Insert</property> <property name="accelerator">&lt;Control&gt;Insert</property>
<property name="title" translatable="yes">Add slot/column</property> <property name="title" translatable="1">Add slot/column</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Control&gt;Delete</property> <property name="accelerator">&lt;Control&gt;Delete</property>
<property name="title" translatable="yes">Remove slot/column</property> <property name="title" translatable="1">Remove slot/column</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Control&gt;&lt;shift&gt;Insert</property> <property name="accelerator">&lt;Control&gt;&lt;shift&gt;Insert</property>
<property name="title" translatable="yes">Add row</property> <property name="title" translatable="1">Add row</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkShortcutsShortcut"> <object class="GtkShortcutsShortcut">
<property name="accelerator">&lt;Control&gt;&lt;shift&gt;Delete</property> <property name="accelerator">&lt;Control&gt;&lt;shift&gt;Delete</property>
<property name="title" translatable="yes">Remove row</property> <property name="title" translatable="1">Remove row</property>
</object> </object>
</child> </child>
</object> </object>

View File

@ -1,9 +1,6 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_window.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<requires lib="gio" version="2.0"/>
<object class="GtkFileFilter" id="import_filter"> <object class="GtkFileFilter" id="import_filter">
<mime-types> <mime-types>
<mime-type>application/x-glade</mime-type> <mime-type>application/x-glade</mime-type>
@ -18,47 +15,47 @@
<section> <section>
<item> <item>
<attribute name="action">win.import</attribute> <attribute name="action">win.import</attribute>
<attribute name="label" translatable="yes">Import</attribute> <attribute name="label" translatable="1">Import</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.export</attribute> <attribute name="action">win.export</attribute>
<attribute name="label" translatable="yes">Export all</attribute> <attribute name="label" translatable="1">Export all</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.add_css</attribute> <attribute name="action">win.add_css</attribute>
<attribute name="label" translatable="yes">Add CSS file</attribute> <attribute name="label" translatable="1">Add CSS file</attribute>
</item> </item>
</section> </section>
<section> <section>
<item> <item>
<attribute name="action">win.close</attribute> <attribute name="action">win.close</attribute>
<attribute name="label" translatable="yes">Close Project</attribute> <attribute name="label" translatable="1">Close Project</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.debug</attribute> <attribute name="action">win.debug</attribute>
<attribute name="label" translatable="yes">Debug Project Data</attribute> <attribute name="label" translatable="1">Debug Project Data</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.intro</attribute> <attribute name="action">win.intro</attribute>
<attribute name="label" translatable="yes">Interactive intro</attribute> <attribute name="label" translatable="1">Interactive intro</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.contact</attribute> <attribute name="action">win.contact</attribute>
<attribute name="label" translatable="yes">Contact</attribute> <attribute name="label" translatable="1">Contact</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.donate</attribute> <attribute name="action">win.donate</attribute>
<attribute name="label" translatable="yes">Donate</attribute> <attribute name="label" translatable="1">Donate</attribute>
</item> </item>
</section> </section>
<section> <section>
<item> <item>
<attribute name="action">win.show-help-overlay</attribute> <attribute name="action">win.show-help-overlay</attribute>
<attribute name="label" translatable="yes">Keyboard Shortcuts</attribute> <attribute name="label" translatable="1">Keyboard Shortcuts</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.about</attribute> <attribute name="action">win.about</attribute>
<attribute name="label" translatable="yes">About</attribute> <attribute name="label" translatable="1">About</attribute>
</item> </item>
</section> </section>
</menu> </menu>
@ -69,6 +66,9 @@
</mime-types> </mime-types>
</object> </object>
<template class="CmbWindow" parent="GtkApplicationWindow"> <template class="CmbWindow" parent="GtkApplicationWindow">
<style>
<class name="cmb-window"/>
</style>
<child> <child>
<object class="GtkOverlay"> <object class="GtkOverlay">
<property name="child"> <property name="child">
@ -76,18 +76,20 @@
<property name="transition-type">crossfade</property> <property name="transition-type">crossfade</property>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">cambalache</property>
<property name="title" translatable="1">Cambalache</property>
<property name="child"> <property name="child">
<object class="GtkBox"> <object class="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkLabel" id="version_label"> <object class="GtkLabel" id="version_label">
<property name="halign">center</property>
<property name="margin-bottom">4</property>
<property name="name">version</property>
<property name="valign">end</property>
<property name="vexpand">1</property> <property name="vexpand">1</property>
<property name="name">version</property>
<property name="halign">center</property>
<property name="valign">end</property>
<property name="margin-bottom">4</property>
<attributes> <attributes>
<attribute name="size" value="9000"/> <attribute name="size" value="9000"></attribute>
</attributes> </attributes>
</object> </object>
</child> </child>
@ -96,36 +98,36 @@
</style> </style>
</object> </object>
</property> </property>
<property name="name">cambalache</property>
<property name="title" translatable="yes">Cambalache</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">new_project</property>
<property name="title" translatable="1">New Project</property>
<property name="child"> <property name="child">
<object class="GtkBox"> <object class="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="justify">center</property> <property name="label" translatable="1">&lt;b&gt;
<property name="label" translatable="yes">&lt;b&gt;
&lt;span size="18000"&gt;New project&lt;/span&gt; &lt;span size=&quot;18000&quot;&gt;New project&lt;/span&gt;
&lt;/b&gt;</property> &lt;/b&gt;</property>
<property name="use-markup">1</property> <property name="use-markup">1</property>
<property name="justify">center</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkGrid"> <object class="GtkGrid">
<property name="column-homogeneous">1</property>
<property name="column-spacing">8</property>
<property name="halign">center</property> <property name="halign">center</property>
<property name="row-spacing">8</property>
<property name="valign">start</property> <property name="valign">start</property>
<property name="row-spacing">8</property>
<property name="column-spacing">8</property>
<property name="column-homogeneous">1</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">end</property> <property name="halign">end</property>
<property name="label" translatable="yes">Name</property> <property name="label" translatable="1">Name</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">0</property> <property name="row">0</property>
@ -135,7 +137,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">end</property> <property name="halign">end</property>
<property name="label" translatable="yes">Toolkit target</property> <property name="label" translatable="1">Toolkit target</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">2</property> <property name="row">2</property>
@ -145,7 +147,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">end</property> <property name="halign">end</property>
<property name="label" translatable="yes">Location</property> <property name="label" translatable="1">Location</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">1</property> <property name="row">1</property>
@ -155,25 +157,25 @@
<child> <child>
<object class="GtkEntry" id="np_name_entry"> <object class="GtkEntry" id="np_name_entry">
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="input-hints">GTK_INPUT_HINT_LOWERCASE | GTK_INPUT_HINT_NONE</property>
<property name="input-purpose">alpha</property>
<property name="placeholder-text" translatable="yes">&lt;project basename&gt;</property>
<property name="width-chars">32</property> <property name="width-chars">32</property>
<signal name="changed" handler="on_np_name_entry_changed"/> <property name="placeholder-text" translatable="1">&lt;project basename&gt;</property>
<property name="input-purpose">alpha</property>
<property name="input-hints">GTK_INPUT_HINT_LOWERCASE | GTK_INPUT_HINT_NONE</property>
<signal name="changed" handler="on_np_name_entry_changed" swapped="no"/>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="column-span">3</property>
<property name="row">0</property> <property name="row">0</property>
<property name="column-span">3</property>
</layout> </layout>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkButton" id="np_create_button"> <object class="GtkButton" id="np_create_button">
<property name="action-name">win.new</property> <property name="label" translatable="1">Create</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="label" translatable="yes">Create</property>
<property name="margin-top">16</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="margin-top">16</property>
<property name="action-name">win.new</property>
<style> <style>
<class name="suggested-action"/> <class name="suggested-action"/>
</style> </style>
@ -187,11 +189,14 @@
<object class="GtkBox"> <object class="GtkBox">
<property name="halign">start</property> <property name="halign">start</property>
<property name="homogeneous">True</property> <property name="homogeneous">True</property>
<style>
<class name="linked"/>
</style>
<child> <child>
<object class="GtkToggleButton" id="np_gtk3_radiobutton"> <object class="GtkToggleButton" id="np_gtk3_radiobutton">
<property name="group">np_gtk4_radiobutton</property> <property name="tooltip-text" translatable="1">Old stable version</property>
<property name="halign">center</property> <property name="halign">center</property>
<property name="tooltip-text" translatable="yes">Old stable version</property> <property name="group">np_gtk4_radiobutton</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="spacing">8</property> <property name="spacing">8</property>
@ -205,9 +210,9 @@
</child> </child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="justify">center</property>
<property name="label">&lt;b&gt;Gtk 3&lt;/b&gt;</property> <property name="label">&lt;b&gt;Gtk 3&lt;/b&gt;</property>
<property name="use-markup">1</property> <property name="use-markup">1</property>
<property name="justify">center</property>
</object> </object>
</child> </child>
</object> </object>
@ -216,9 +221,9 @@
</child> </child>
<child> <child>
<object class="GtkToggleButton" id="np_gtk4_radiobutton"> <object class="GtkToggleButton" id="np_gtk4_radiobutton">
<property name="active">1</property> <property name="tooltip-text" translatable="1">Recommended for new projects</property>
<property name="halign">center</property> <property name="halign">center</property>
<property name="tooltip-text" translatable="yes">Recommended for new projects</property> <property name="active">1</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="spacing">8</property> <property name="spacing">8</property>
@ -232,30 +237,27 @@
</child> </child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="justify">center</property>
<property name="label">&lt;b&gt;Gtk 4&lt;/b&gt;</property> <property name="label">&lt;b&gt;Gtk 4&lt;/b&gt;</property>
<property name="use-markup">1</property> <property name="use-markup">1</property>
<property name="justify">center</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<style>
<class name="linked"/>
</style>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="column-span">3</property>
<property name="row">2</property> <property name="row">2</property>
<property name="column-span">3</property>
</layout> </layout>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkButton" id="np_location_chooser"> <object class="GtkButton" id="np_location_chooser">
<property name="action-name">win.select_project_location</property>
<property name="icon-name">folder-symbolic</property>
<property name="sensitive">False</property> <property name="sensitive">False</property>
<property name="icon-name">folder-symbolic</property>
<property name="action-name">win.select_project_location</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="spacing">4</property> <property name="spacing">4</property>
@ -266,26 +268,26 @@
</child> </child>
<child> <child>
<object class="GtkLabel" id="np_location_chooser_label"> <object class="GtkLabel" id="np_location_chooser_label">
<property name="halign">start</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="halign">start</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="column-span">3</property>
<property name="row">1</property> <property name="row">1</property>
<property name="column-span">3</property>
</layout> </layout>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkButton" id="np_cancel_button"> <object class="GtkButton" id="np_cancel_button">
<property name="action-name">win.show_workspace</property> <property name="label" translatable="1">Cancel</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="label" translatable="yes">Cancel</property>
<property name="margin-top">16</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="margin-top">16</property>
<property name="action-name">win.show_workspace</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">4</property> <property name="row">4</property>
@ -295,7 +297,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">end</property> <property name="halign">end</property>
<property name="label" translatable="yes">UI Filename</property> <property name="label" translatable="1">UI Filename</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">3</property> <property name="row">3</property>
@ -304,35 +306,98 @@
</child> </child>
<child> <child>
<object class="GtkEntry" id="np_ui_entry"> <object class="GtkEntry" id="np_ui_entry">
<property name="focusable">1</property>
<property name="input-hints">GTK_INPUT_HINT_LOWERCASE | GTK_INPUT_HINT_NONE</property>
<property name="input-purpose">alpha</property>
<property name="sensitive">0</property> <property name="sensitive">0</property>
<property name="focusable">1</property>
<property name="width-chars">32</property> <property name="width-chars">32</property>
<property name="input-purpose">alpha</property>
<property name="input-hints">GTK_INPUT_HINT_LOWERCASE | GTK_INPUT_HINT_NONE</property>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="column-span">3</property>
<property name="row">3</property> <property name="row">3</property>
<property name="column-span">3</property>
</layout> </layout>
</object> </object>
</child> </child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object> </object>
</child> </child>
</object> </object>
</property> </property>
<property name="name">new_project</property>
<property name="title" translatable="yes">New Project</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">workspace</property>
<property name="title" translatable="1">Workspace</property>
<property name="child"> <property name="child">
<object class="GtkPaned"> <object class="GtkPaned">
<property name="shrink-end-child">0</property>
<property name="resize-end-child">0</property>
<property name="shrink-start-child">0</property>
<property name="height-request">380</property>
<property name="focusable">1</property>
<property name="start-child">
<object class="GtkPaned">
<property name="shrink-end-child">0</property>
<property name="shrink-start-child">0</property>
<property name="resize-start-child">0</property>
<property name="focusable">1</property>
<property name="start-child">
<object class="GtkBox" id="inspector">
<property name="orientation">vertical</property>
<property name="focusable">1</property>
<child>
<object class="GtkScrolledWindow">
<property name="vexpand">1</property>
<property name="focusable">1</property>
<property name="min-content-width">256</property>
<property name="propagate-natural-width">1</property>
<property name="propagate-natural-height">1</property>
<child>
<object class="CmbTreeView" id="tree_view">
<property name="focusable">1</property>
<property name="headers-visible">False</property>
<property name="headers-clickable">False</property>
</object>
</child>
</object>
</child>
</object>
</property>
<property name="end-child">
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="CmbTypeChooser" id="type_chooser">
<property name="spacing">2</property>
<signal name="chooser-popdown" handler="on_type_chooser_chooser_popdown" swapped="no"/>
<signal name="chooser-popup" handler="on_type_chooser_chooser_popup" swapped="no"/>
<signal name="type-selected" handler="on_type_chooser_type_selected" swapped="no"/>
</object>
</child>
<child>
<object class="CmbView" id="view">
<property name="vexpand">1</property>
<signal name="placeholder-activated" handler="on_view_placeholder_activated" swapped="no"/>
<signal name="placeholder-selected" handler="on_view_placeholder_selected" swapped="no"/>
</object>
</child>
</object>
</property>
</object>
</property>
<property name="end-child"> <property name="end-child">
<object class="GtkStack" id="editor_stack"> <object class="GtkStack" id="editor_stack">
<property name="transition-type">crossfade</property> <property name="transition-type">crossfade</property>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">object</property>
<property name="title" translatable="1">Object Editor</property>
<property name="child"> <property name="child">
<object class="GtkBox"> <object class="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
@ -348,10 +413,12 @@
</child> </child>
<child> <child>
<object class="GtkStack" id="object_stack"> <object class="GtkStack" id="object_stack">
<property name="transition-type">crossfade</property>
<property name="vexpand">1</property> <property name="vexpand">1</property>
<property name="transition-type">crossfade</property>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">properties</property>
<property name="title" translatable="1">Properties</property>
<property name="child"> <property name="child">
<object class="CmbScrolledWindow"> <object class="CmbScrolledWindow">
<property name="child"> <property name="child">
@ -361,12 +428,12 @@
</property> </property>
</object> </object>
</property> </property>
<property name="name">properties</property>
<property name="title" translatable="yes">Properties</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">layout</property>
<property name="title" translatable="1">Layout</property>
<property name="child"> <property name="child">
<object class="CmbScrolledWindow"> <object class="CmbScrolledWindow">
<property name="child"> <property name="child">
@ -376,38 +443,38 @@
</property> </property>
</object> </object>
</property> </property>
<property name="name">layout</property>
<property name="title" translatable="yes">Layout</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="child">
<object class="CmbSignalEditor" id="signal_editor"/>
</property>
<property name="name">signals</property> <property name="name">signals</property>
<property name="title" translatable="yes">Signals</property> <property name="title" translatable="1">Signals</property>
<property name="child">
<object class="CmbSignalEditor" id="signal_editor">
</object>
</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="child">
<object class="CmbFragmentEditor" id="fragment_editor"/>
</property>
<property name="name">fragment</property> <property name="name">fragment</property>
<property name="title">&lt;/&gt;</property> <property name="title" translatable="0">&lt;/&gt;</property>
<property name="child">
<object class="CmbFragmentEditor" id="fragment_editor">
</object>
</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
</object> </object>
</property> </property>
<property name="name">object</property>
<property name="title" translatable="yes">Object Editor</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">ui</property>
<property name="title" translatable="1">UI Editor</property>
<property name="child"> <property name="child">
<object class="GtkBox"> <object class="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
@ -427,153 +494,116 @@
<property name="vexpand">1</property> <property name="vexpand">1</property>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">properties</property>
<property name="title" translatable="1">Properties</property>
<property name="child"> <property name="child">
<object class="CmbUIEditor" id="ui_editor"> <object class="CmbUIEditor" id="ui_editor">
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="vexpand">True</property> <property name="vexpand">True</property>
<signal name="remove-ui" handler="on_ui_editor_remove_ui"/> <signal name="remove-ui" handler="on_ui_editor_remove_ui" swapped="no"/>
</object> </object>
</property> </property>
<property name="name">properties</property>
<property name="title" translatable="yes">Properties</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">requires</property>
<property name="title" translatable="1">Requires</property>
<property name="child"> <property name="child">
<object class="CmbUIRequiresEditor" id="ui_requires_editor"> <object class="CmbUIRequiresEditor" id="ui_requires_editor">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
</object> </object>
</property> </property>
<property name="name">requires</property>
<property name="title" translatable="yes">Requires</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">fragment</property>
<property name="title" translatable="0">&lt;/&gt;</property>
<property name="child"> <property name="child">
<object class="CmbFragmentEditor" id="ui_fragment_editor"> <object class="CmbFragmentEditor" id="ui_fragment_editor">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
</object> </object>
</property> </property>
<property name="name">fragment</property>
<property name="title">&lt;/&gt;</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
</object> </object>
</property> </property>
<property name="name">ui</property>
<property name="title" translatable="yes">UI Editor</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">css</property>
<property name="title" translatable="1">CSS Editor</property>
<property name="child"> <property name="child">
<object class="CmbCSSEditor" id="css_editor"> <object class="CmbCSSEditor" id="css_editor">
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="vexpand">True</property> <property name="vexpand">True</property>
<signal name="remove-css" handler="on_css_editor_remove_ui"/> <signal name="remove-css" handler="on_css_editor_remove_ui" swapped="no"/>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object> </object>
</property> </property>
<property name="name">css</property>
<property name="title" translatable="yes">CSS Editor</property>
</object> </object>
</child> </child>
</object> </object>
</property> </property>
<property name="focusable">1</property>
<property name="height-request">380</property>
<property name="resize-end-child">0</property>
<property name="shrink-end-child">0</property>
<property name="shrink-start-child">0</property>
<property name="start-child">
<object class="GtkPaned">
<property name="end-child">
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="CmbTypeChooser" id="type_chooser">
<property name="spacing">2</property>
<signal name="chooser-popdown" handler="on_type_chooser_chooser_popdown"/>
<signal name="chooser-popup" handler="on_type_chooser_chooser_popup"/>
<signal name="type-selected" handler="on_type_chooser_type_selected"/>
</object>
</child>
<child>
<object class="CmbView" id="view">
<property name="vexpand">1</property>
<signal name="placeholder-activated" handler="on_view_placeholder_activated"/>
<signal name="placeholder-selected" handler="on_view_placeholder_selected"/>
</object>
</child>
</object>
</property>
<property name="focusable">1</property>
<property name="resize-start-child">0</property>
<property name="shrink-end-child">0</property>
<property name="shrink-start-child">0</property>
<property name="start-child">
<object class="GtkBox" id="inspector">
<property name="focusable">1</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow">
<property name="focusable">1</property>
<property name="min-content-width">256</property>
<property name="propagate-natural-height">1</property>
<property name="propagate-natural-width">1</property>
<property name="vexpand">1</property>
<child>
<object class="CmbTreeView" id="tree_view">
<property name="focusable">1</property>
<property name="headers-clickable">False</property>
<property name="headers-visible">False</property>
</object>
</child>
</object>
</child>
</object>
</property>
</object>
</property>
</object> </object>
</property> </property>
<property name="name">workspace</property>
<property name="title" translatable="yes">Workspace</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStackPage"> <object class="GtkStackPage">
<property name="name">donate</property>
<property name="child"> <property name="child">
<object class="GtkBox"> <object class="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<style>
<class name="donate"/>
</style>
<child> <child>
<object class="GtkButton"> <object class="GtkButton">
<property name="action-name">win.show_workspace</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="halign">start</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="halign">start</property>
<property name="action-name">win.show_workspace</property>
<style>
<class name="borderless"/>
</style>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">go-previous-symbolic</property> <property name="icon-name">go-previous-symbolic</property>
</object> </object>
</child> </child>
<style>
<class name="borderless"/>
</style>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="halign">center</property>
<property name="homogeneous">1</property>
<property name="margin-bottom">64</property>
<property name="margin-top">32</property>
<property name="spacing">196</property>
<property name="valign">start</property>
<property name="vexpand">1</property> <property name="vexpand">1</property>
<property name="halign">center</property>
<property name="valign">start</property>
<property name="margin-top">32</property>
<property name="margin-bottom">64</property>
<property name="spacing">196</property>
<property name="homogeneous">1</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="halign">center</property> <property name="halign">center</property>
@ -590,7 +620,7 @@
</child> </child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="label" translatable="yes">• Liberapay is a recurrent donations platform <property name="label" translatable="1">• Liberapay is a recurrent donations platform
• Run by a non-profit organization • Run by a non-profit organization
@ -603,11 +633,11 @@
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton">
<property name="action-name">win.liberapay</property> <property name="label" translatable="1">Donate</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="halign">center</property>
<property name="label" translatable="yes">Donate</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="halign">center</property>
<property name="action-name">win.liberapay</property>
<style> <style>
<class name="suggested-action"/> <class name="suggested-action"/>
</style> </style>
@ -631,7 +661,7 @@
</child> </child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="label" translatable="yes">• Patreon is a membership platform for creators <property name="label" translatable="1">• Patreon is a membership platform for creators
• Run by private company • Run by private company
@ -644,29 +674,28 @@
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton">
<property name="action-name">win.patreon</property> <property name="label" translatable="1">Donate</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="halign">center</property>
<property name="label" translatable="yes">Donate</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="halign">center</property>
<property name="action-name">win.patreon</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<style>
<class name="donate"/>
</style>
</object> </object>
</property> </property>
<property name="name">donate</property>
</object> </object>
</child> </child>
</object> </object>
</property> </property>
<child type="overlay"> <child type="overlay">
<object class="GtkRevealer" id="message_revealer"> <object class="GtkRevealer" id="message_revealer">
<property name="halign">center</property>
<property name="valign">end</property>
<property name="transition-type">slide-up</property>
<property name="child"> <property name="child">
<object class="GtkLabel" id="message_label"> <object class="GtkLabel" id="message_label">
<style> <style>
@ -674,9 +703,6 @@
</style> </style>
</object> </object>
</property> </property>
<property name="halign">center</property>
<property name="transition-type">slide-up</property>
<property name="valign">end</property>
<style> <style>
<class name="message"/> <class name="message"/>
</style> </style>
@ -691,7 +717,7 @@
<property name="orientation">GTK_ORIENTATION_VERTICAL</property> <property name="orientation">GTK_ORIENTATION_VERTICAL</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="label" translatable="yes">Cambalache</property> <property name="label" translatable="1">Cambalache</property>
<property name="vexpand">true</property> <property name="vexpand">true</property>
<style> <style>
<class name="title"/> <class name="title"/>
@ -711,8 +737,8 @@
<child type="end"> <child type="end">
<object class="GtkMenuButton" id="menu_button"> <object class="GtkMenuButton" id="menu_button">
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="menu-model">main_menu</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="menu-model">main_menu</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">open-menu-symbolic</property> <property name="icon-name">open-menu-symbolic</property>
@ -722,13 +748,16 @@
</child> </child>
<child> <child>
<object class="GtkBox" id="open_button_box"> <object class="GtkBox" id="open_button_box">
<style>
<class name="linked"/>
</style>
<child> <child>
<object class="GtkButton" id="open_button"> <object class="GtkButton" id="open_button">
<property name="action-name">win.open</property> <property name="label" translatable="1">_Open</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="label" translatable="yes">_Open</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="tooltip-text" translatable="yes">Open a project</property> <property name="tooltip-text" translatable="1">Open a project</property>
<property name="action-name">win.open</property>
<property name="use-underline">1</property> <property name="use-underline">1</property>
</object> </object>
</child> </child>
@ -742,17 +771,15 @@
</child> </child>
</object> </object>
</child> </child>
<style>
<class name="linked"/>
</style>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkButton" id="new_button"> <object class="GtkButton" id="new_button">
<property name="action-name">win.create_new</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="tooltip-text" translatable="yes">Create a new project</property> <property name="tooltip-text" translatable="1">Create a new project</property>
<property name="action-name">win.create_new</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">document-new-symbolic</property> <property name="icon-name">document-new-symbolic</property>
@ -762,17 +789,20 @@
</child> </child>
<child type="end"> <child type="end">
<object class="GtkBox" id="save_button_box"> <object class="GtkBox" id="save_button_box">
<style>
<class name="linked"/>
</style>
<child> <child>
<object class="GtkButton" id="cmb_save_button"> <object class="GtkButton" id="cmb_save_button">
<property name="label" translatable="1">Save</property>
<property name="tooltip-text" translatable="1">Save project</property>
<property name="action-name">win.save</property> <property name="action-name">win.save</property>
<property name="label" translatable="yes">Save</property>
<property name="tooltip-text" translatable="yes">Save project</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkButton" id="save_as_button"> <object class="GtkButton" id="save_as_button">
<property name="tooltip-text" translatable="1">Save project with a different file name</property>
<property name="action-name">win.save_as</property> <property name="action-name">win.save_as</property>
<property name="tooltip-text" translatable="yes">Save project with a different file name</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">document-save-as-symbolic</property> <property name="icon-name">document-save-as-symbolic</property>
@ -780,9 +810,6 @@
</child> </child>
</object> </object>
</child> </child>
<style>
<class name="linked"/>
</style>
</object> </object>
</child> </child>
<child> <child>
@ -790,8 +817,8 @@
</child> </child>
<child type="end"> <child type="end">
<object class="GtkButton" id="add_button"> <object class="GtkButton" id="add_button">
<property name="tooltip-text" translatable="1">Add new UI to project</property>
<property name="action-name">win.add_ui</property> <property name="action-name">win.add_ui</property>
<property name="tooltip-text" translatable="yes">Add new UI to project</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">list-add-symbolic</property> <property name="icon-name">list-add-symbolic</property>
@ -801,8 +828,8 @@
</child> </child>
<child type="end"> <child type="end">
<object class="GtkButton" id="intro_button"> <object class="GtkButton" id="intro_button">
<property name="tooltip-text" translatable="1">Start interactive introduction</property>
<property name="action-name">win.intro</property> <property name="action-name">win.intro</property>
<property name="tooltip-text" translatable="yes">Start interactive introduction</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">start-here-symbolic</property> <property name="icon-name">start-here-symbolic</property>
@ -812,11 +839,14 @@
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<style>
<class name="linked"/>
</style>
<child> <child>
<object class="GtkButton" id="undo_button"> <object class="GtkButton" id="undo_button">
<property name="action-name">win.undo</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="action-name">win.undo</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">edit-undo-symbolic</property> <property name="icon-name">edit-undo-symbolic</property>
@ -826,9 +856,9 @@
</child> </child>
<child> <child>
<object class="GtkButton" id="redo_button"> <object class="GtkButton" id="redo_button">
<property name="action-name">win.redo</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="action-name">win.redo</property>
<property name="use-underline">1</property> <property name="use-underline">1</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
@ -837,28 +867,22 @@
</child> </child>
</object> </object>
</child> </child>
<style>
<class name="linked"/>
</style>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<style>
<class name="cmb-window"/>
</style>
</template> </template>
<object class="GtkAboutDialog" id="about_dialog"> <object class="GtkAboutDialog" id="about_dialog">
<property name="transient-for">CmbWindow</property>
<property name="program-name">Cambalache</property>
<property name="copyright">© 2020-2024 Juan Pablo Ugarte</property>
<property name="comments" translatable="1">User Interface Maker</property>
<property name="website">https://gitlab.gnome.org/jpu/cambalache</property>
<property name="website-label" translatable="1">Source repository and issue tracker</property>
<property name="authors">Juan Pablo Ugarte</property>
<property name="artists">Franco Dodorico <property name="artists">Franco Dodorico
Juan Pablo Ugarte</property> Juan Pablo Ugarte</property>
<property name="authors">Juan Pablo Ugarte</property>
<property name="comments" translatable="yes">User Interface Maker</property>
<property name="copyright">© 2020-2024 Juan Pablo Ugarte</property>
<property name="license-type">lgpl-2-1-only</property>
<property name="logo-icon-name">ar.xjuan.Cambalache</property> <property name="logo-icon-name">ar.xjuan.Cambalache</property>
<property name="program-name">Cambalache</property> <property name="license-type">lgpl-2-1-only</property>
<property name="transient-for">CmbWindow</property>
<property name="website">https://gitlab.gnome.org/jpu/cambalache</property>
<property name="website-label" translatable="yes">Source repository and issue tracker</property>
</object> </object>
</interface> </interface>

View File

@ -1,44 +1,41 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_context_menu.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<requires lib="gio" version="2.0"/>
<menu id="menu_model"> <menu id="menu_model">
<section> <section>
<item> <item>
<attribute name="action">win.cut</attribute> <attribute name="action">win.cut</attribute>
<attribute name="label" translatable="yes">Cut</attribute> <attribute name="label" translatable="1">Cut</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.copy</attribute> <attribute name="action">win.copy</attribute>
<attribute name="label" translatable="yes">Copy</attribute> <attribute name="label" translatable="1">Copy</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.paste</attribute> <attribute name="action">win.paste</attribute>
<attribute name="label" translatable="yes">Paste</attribute> <attribute name="label" translatable="1">Paste</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.delete</attribute> <attribute name="action">win.delete</attribute>
<attribute name="label" translatable="yes">Delete</attribute> <attribute name="label" translatable="1">Delete</attribute>
</item> </item>
</section> </section>
<section> <section>
<item> <item>
<attribute name="action">win.add_object</attribute> <attribute name="action">win.add_object</attribute>
<attribute name="label" translatable="yes">Add object here</attribute> <attribute name="label" translatable="1">Add object here</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.add_object_toplevel</attribute> <attribute name="action">win.add_object_toplevel</attribute>
<attribute name="label" translatable="yes">Add object as toplevel</attribute> <attribute name="label" translatable="1">Add object as toplevel</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.clear</attribute> <attribute name="action">win.clear</attribute>
<attribute name="label" translatable="yes">Clear Properties</attribute> <attribute name="label" translatable="1">Clear Properties</attribute>
</item> </item>
<item> <item>
<attribute name="action">win.documentation</attribute> <attribute name="action">win.documentation</attribute>
<attribute name="label" translatable="yes">Read Documentation</attribute> <attribute name="label" translatable="1">Read Documentation</attribute>
</item> </item>
</section> </section>
<section id="main_section"/> <section id="main_section"/>

View File

@ -22,8 +22,8 @@
# #
from gi.repository import GObject, Gtk from gi.repository import GObject, Gtk
from cambalache import utils, _
from .cmb_css import CmbCSS from .cmb_css import CmbCSS
from . import utils
@Gtk.Template(resource_path="/ar/xjuan/Cambalache/cmb_css_editor.ui") @Gtk.Template(resource_path="/ar/xjuan/Cambalache/cmb_css_editor.ui")
@ -34,7 +34,6 @@ class CmbCSSEditor(Gtk.Grid):
priority = Gtk.Template.Child() priority = Gtk.Template.Child()
is_global = Gtk.Template.Child() is_global = Gtk.Template.Child()
ui_menu_button = Gtk.Template.Child()
ui_box = Gtk.Template.Child() ui_box = Gtk.Template.Child()
infobar = Gtk.Template.Child() infobar = Gtk.Template.Child()
save_button = Gtk.Template.Child() save_button = Gtk.Template.Child()
@ -103,7 +102,6 @@ class CmbCSSEditor(Gtk.Grid):
obj.connect("file-changed", self.__on_file_changed) obj.connect("file-changed", self.__on_file_changed)
self.__update_provider_for() self.__update_provider_for()
self.__update_ui_button_label()
@Gtk.Template.Callback("on_remove_button_clicked") @Gtk.Template.Callback("on_remove_button_clicked")
def __on_remove_button_clicked(self, button): def __on_remove_button_clicked(self, button):
@ -155,27 +153,6 @@ class CmbCSSEditor(Gtk.Grid):
else: else:
self.object.remove_ui(ui) self.object.remove_ui(ui)
self.__update_ui_button_label()
def __update_ui_button_label(self):
n = 0
first_one = None
child = self.ui_box.get_first_child()
while child is not None:
if child.props.active:
n += 1
if first_one is None:
first_one = child
child = child.get_next_sibling()
if first_one is None:
self.ui_menu_button.props.label = _("None")
else:
self.ui_menu_button.props.label = f"{first_one.props.label} + {n - 1}" if n > 1 else first_one.props.label
def __on_ui_added_removed(self, project, ui): def __on_ui_added_removed(self, project, ui):
self.__update_provider_for() self.__update_provider_for()

View File

@ -1,15 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_css_editor.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<template class="CmbCSSEditor" parent="GtkGrid"> <template class="CmbCSSEditor" parent="GtkGrid">
<property name="column-spacing">3</property>
<property name="row-spacing">4</property> <property name="row-spacing">4</property>
<property name="column-spacing">3</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Filename:</property> <property name="label" translatable="1">Filename:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">0</property> <property name="row">0</property>
@ -19,7 +17,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Priority:</property> <property name="label" translatable="1">Priority:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">1</property> <property name="row">1</property>
@ -28,9 +26,9 @@
</child> </child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="tooltip-text" translatable="1">This provider will be used in all UI.</property>
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Global:</property> <property name="label" translatable="1">Global:</property>
<property name="tooltip-text" translatable="yes">This provider will be used in all UI.</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">2</property> <property name="row">2</property>
@ -39,43 +37,16 @@
</child> </child>
<child> <child>
<object class="CmbEntry" id="filename"> <object class="CmbEntry" id="filename">
<property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="placeholder-text" translatable="yes">&lt;file name relative to project&gt;</property> <property name="placeholder-text" translatable="1">&lt;file name relative to project&gt;</property>
<property name="visible">True</property>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="row">0</property> <property name="row">0</property>
</layout> </layout>
</object> </object>
</child> </child>
<child>
<object class="GtkMenuButton" id="ui_menu_button">
<property name="halign">start</property>
<property name="popover">
<object class="GtkPopover">
<child>
<object class="GtkScrolledWindow">
<property name="hscrollbar-policy">never</property>
<property name="propagate-natural-height">True</property>
<property name="propagate-natural-width">True</property>
<child>
<object class="GtkBox" id="ui_box">
<property name="orientation">vertical</property>
</object>
</child>
</object>
</child>
</object>
</property>
<layout>
<property name="column">1</property>
<property name="column-span">1</property>
<property name="row">3</property>
<property name="row-span">1</property>
</layout>
</object>
</child>
<child> <child>
<object class="GtkSpinButton" id="priority"> <object class="GtkSpinButton" id="priority">
<property name="focusable">1</property> <property name="focusable">1</property>
@ -96,11 +67,30 @@
</layout> </layout>
</object> </object>
</child> </child>
<child>
<object class="GtkBox" id="ui_box">
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<layout>
<property name="column">1</property>
<property name="row">3</property>
</layout>
</object>
</child>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="tooltip-text" translatable="1">List of UI where this provider will be used</property>
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Provider for:</property> <property name="valign">start</property>
<property name="tooltip-text" translatable="yes">List of UI where this provider will be used</property> <property name="label" translatable="1">Provider for:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">3</property> <property name="row">3</property>
@ -113,10 +103,11 @@
<child> <child>
<object class="GtkButton" id="remove_button"> <object class="GtkButton" id="remove_button">
<property name="focusable">1</property> <property name="focusable">1</property>
<!-- <property name="receives-default">1</property> -->
<!-- <property name="tooltip-text" translatable="1">Remove CSS file from project</property> --> <!-- <property name="tooltip-text" translatable="1">Remove CSS file from project</property> -->
<property name="halign">start</property> <property name="halign">start</property>
<property name="valign">end</property> <property name="valign">end</property>
<signal name="clicked" handler="on_remove_button_clicked"/> <signal name="clicked" handler="on_remove_button_clicked" swapped="no"/>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">app-remove-symbolic</property> <property name="icon-name">app-remove-symbolic</property>
@ -127,21 +118,21 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">center</property> <property name="halign">center</property>
<property name="label" translatable="yes">&lt;small&gt;Note: CSS files need to be loaded at runtime&lt;/small&gt;</property>
<property name="use-markup">1</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="label" translatable="1">&lt;small&gt;Note: CSS files need to be loaded at runtime&lt;/small&gt;</property>
<property name="use-markup">1</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkButton" id="save_button"> <object class="GtkButton" id="save_button">
<property name="focusable">1</property>
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="receives-default">1</property>
<property name="sensitive">0</property> <property name="sensitive">0</property>
<property name="tooltip-text" translatable="yes">Save CSS file</property> <property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="tooltip-text" translatable="1">Save CSS file</property>
<property name="hexpand">True</property>
<property name="halign">end</property>
<property name="valign">end</property> <property name="valign">end</property>
<signal name="clicked" handler="on_save_button_clicked"/> <signal name="clicked" handler="on_save_button_clicked" swapped="no"/>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">document-save-symbolic</property> <property name="icon-name">document-save-symbolic</property>
@ -151,8 +142,8 @@
</child> </child>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="column-span">2</property>
<property name="row">5</property> <property name="row">5</property>
<property name="column-span">2</property>
</layout> </layout>
</object> </object>
</child> </child>
@ -164,17 +155,17 @@
<child> <child>
<object class="GtkInfoBar" id="infobar"> <object class="GtkInfoBar" id="infobar">
<property name="message-type">warning</property> <property name="message-type">warning</property>
<property name="revealed">0</property>
<property name="show-close-button">1</property> <property name="show-close-button">1</property>
<signal name="response" handler="on_infobar_response"/> <property name="revealed">0</property>
<signal name="response" handler="on_infobar_response" swapped="no"/>
<child type="action"> <child type="action">
<object class="GtkButton" id="reload_button"> <object class="GtkButton" id="reload_button">
<property name="focusable">1</property> <property name="label" translatable="1">Reload</property>
<property name="halign">start</property> <property name="focusable">1</property>
<property name="label" translatable="yes">Reload</property> <property name="receives-default">1</property>
<property name="receives-default">1</property> <property name="halign">start</property>
<property name="valign">end</property> <property name="valign">end</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
@ -184,12 +175,14 @@
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="hexpand">1</property> <property name="hexpand">1</property>
<property name="label" translatable="yes">The file changed on disk.</property> <property name="label" translatable="1">The file changed on disk.</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<!-- Custom object fragments --> <action-widgets>
<action-widget response="-5">reload_button</action-widget>
</action-widgets>
</object> </object>
</child> </child>
<child> <child>
@ -198,21 +191,22 @@
<property name="vexpand">1</property> <property name="vexpand">1</property>
<child> <child>
<object class="CmbSourceView" id="view"> <object class="CmbSourceView" id="view">
<property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="lang">css</property> <property name="lang">css</property>
<property name="visible">True</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
</object> </object>
</property> </property>
<property name="vexpand">True</property> <child type="label_item">
<property name="vexpand-set">True</property> <placeholder/>
</child>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="column-span">2</property>
<property name="row">4</property> <property name="row">4</property>
<property name="column-span">2</property>
</layout> </layout>
</object> </object>
</child> </child>

View File

@ -473,9 +473,6 @@ class CmbDB(GObject.GObject):
if version < (0, 13, 1): if version < (0, 13, 1):
data = cmb_db_migration.ensure_columns_for_0_13_1(table, data) data = cmb_db_migration.ensure_columns_for_0_13_1(table, data)
if version < (0, 17, 3):
data = cmb_db_migration.ensure_columns_for_0_17_3(table, data)
return data return data
def __migrate_table_data(self, c, version, table, data): def __migrate_table_data(self, c, version, table, data):
@ -847,30 +844,14 @@ class CmbDB(GObject.GObject):
knowns = [] knowns = []
retval = [] retval = []
def get_key_val(node, attr):
tokens = attr.split(":")
key = tokens[0]
val = node.get(key, None)
if len(tokens) > 1:
t = tokens[1]
if t == "bool":
return (key, val.lower() in {"1", "t", "y", "true", "yes"} if val else False)
elif t == "int":
return (key, int(val))
return (key, val)
for attr in args: for attr in args:
if isinstance(attr, list): if isinstance(attr, list):
for opt in attr: for opt in attr:
key, val = get_key_val(node, opt) retval.append(node.get(opt, None))
retval.append(val) knowns.append(opt)
knowns.append(key)
elif attr in keys: elif attr in keys:
key, val = get_key_val(node, attr) retval.append(node.get(attr))
retval.append(val) knowns.append(attr)
knowns.append(key)
else: else:
self.__collect_error("missing-attr", node, attr) self.__collect_error("missing-attr", node, attr)
@ -884,46 +865,21 @@ class CmbDB(GObject.GObject):
def __get_property_info(self, info, property_id): def __get_property_info(self, info, property_id):
pinfo = None pinfo = None
debug = info.type_id == "CmbFragmentEditor"
if debug:
print(info.properties, info.interfaces, property_id)
# Find owner type for property # Find owner type for property
if property_id in info.properties: if property_id in info.properties:
pinfo = info.properties[property_id] pinfo = info.properties[property_id]
else: else:
# Search in interfaces properties
for iface in info.interfaces:
iface_info = self.type_info[iface]
if property_id in iface_info.properties:
pinfo = iface_info.properties[property_id]
break
for parent in info.hierarchy: for parent in info.hierarchy:
type_info = self.type_info[parent] type_info = self.type_info[parent]
# Search in parent properties
if property_id in type_info.properties: if property_id in type_info.properties:
pinfo = type_info.properties[property_id] pinfo = type_info.properties[property_id]
# Search in parent interfaces properties
for iface in type_info.interfaces:
iface_info = self.type_info[iface]
if property_id in iface_info.properties:
pinfo = iface_info.properties[property_id]
break
if pinfo is not None:
break break
return pinfo return pinfo
def __import_property(self, c, info, ui_id, object_id, prop, object_id_map=None): def __import_property(self, c, info, ui_id, object_id, prop, object_id_map=None):
name, translatable, context, comments, bind_source_id, bind_property_id, bind_flags = self.__node_get( name, translatable, context, comments, bind_source_id, bind_property_id, bind_flags = self.__node_get(
prop, "name", ["translatable:bool", "context", "comments", "bind-source", "bind-property", "bind-flags"] prop, "name", ["translatable", "context", "comments", "bind-source", "bind-property", "bind-flags"]
) )
property_id = name.replace("_", "-") property_id = name.replace("_", "-")
@ -943,14 +899,15 @@ class CmbDB(GObject.GObject):
inline_object_id = None inline_object_id = None
# GtkBuilder in Gtk4 supports defining an object in a property # GtkBuilder in Gtk4 supports defining an object in a property
obj_node = prop.find("object") if self.target_tk == "gtk-4.0" and pinfo.is_object:
if self.target_tk == "gtk-4.0" and pinfo.is_object and obj_node is not None:
if pinfo.disable_inline_object: if pinfo.disable_inline_object:
self.__collect_error("not-inline-object", prop, f"{info.type_id}:{property_id}") self.__collect_error("not-inline-object", prop, f"{info.type_id}:{property_id}")
return return
inline_object_id = self.__import_object(ui_id, obj_node, object_id) obj_node = prop.find("object")
value = None if obj_node is not None:
inline_object_id = self.__import_object(ui_id, obj_node, object_id)
value = None
# Need to remap object ids on paste # Need to remap object ids on paste
if object_id_map and pinfo.is_object: if object_id_map and pinfo.is_object:
@ -992,7 +949,7 @@ class CmbDB(GObject.GObject):
user_data, user_data,
swap, swap,
after, after,
) = self.__node_get(signal, "name", ["handler", "object", "swapped:bool", "after:bool"]) ) = self.__node_get(signal, "name", ["handler", "object", "swapped", "after"])
tokens = name.split("::") tokens = name.split("::")
@ -1043,8 +1000,6 @@ class CmbDB(GObject.GObject):
object_id = None object_id = None
packing = None packing = None
custom_fragments = []
for node in child.iterchildren(): for node in child.iterchildren():
if node.tag == "object": if node.tag == "object":
object_id = self.__import_object(ui_id, node, parent_id, internal, ctype, object_id_map=object_id_map) object_id = self.__import_object(ui_id, node, parent_id, internal, ctype, object_id_map=object_id_map)
@ -1054,18 +1009,12 @@ class CmbDB(GObject.GObject):
elif node.tag == "placeholder": elif node.tag == "placeholder":
# Ignore placeholder tags # Ignore placeholder tags
pass pass
elif node.tag is etree.Comment:
pass
else: else:
custom_fragments.append(node) self.__unknown_tag(node, ctype, node.tag)
if packing is not None and object_id: if packing is not None and object_id:
self.__import_layout_properties(c, info, ui_id, parent_id, object_id, packing) self.__import_layout_properties(c, info, ui_id, parent_id, object_id, packing)
fragment = self.__custom_fragments_tostring(custom_fragments)
if fragment and object_id is not None:
c.execute("UPDATE object SET custom_child_fragment=? WHERE ui_id=? AND object_id=?", (fragment, ui_id, object_id))
def __get_layout_property_owner(self, type_id, property_id): def __get_layout_property_owner(self, type_id, property_id):
info = self.type_info.get(type_id, None) info = self.type_info.get(type_id, None)
@ -1095,7 +1044,7 @@ class CmbDB(GObject.GObject):
self.__unknown_tag(prop, parent_id, prop.tag) self.__unknown_tag(prop, parent_id, prop.tag)
continue continue
name, translatable, context, comments = self.__node_get(prop, "name", ["translatable:bool", "context", "comments"]) name, translatable, context, comments = self.__node_get(prop, "name", ["translatable", "context", "comments"])
property_id = name.replace("_", "-") property_id = name.replace("_", "-")
comment = self.__node_get_comment(prop) comment = self.__node_get_comment(prop)
owner_id = self.__get_layout_property_owner(parent_type[0], property_id) owner_id = self.__get_layout_property_owner(parent_type[0], property_id)
@ -1190,7 +1139,7 @@ class CmbDB(GObject.GObject):
comment = self.__node_get_comment(ntag) comment = self.__node_get_comment(ntag)
if taginfo.translatable: if taginfo.translatable:
translatable, context, comments = self.__node_get(ntag, ["translatable:bool", "context", "comments"]) translatable, context, comments = self.__node_get(ntag, ["translatable", "context", "comments"])
else: else:
translatable, context, comments = (None, None, None) translatable, context, comments = (None, None, None)
@ -1354,6 +1303,7 @@ class CmbDB(GObject.GObject):
self.__import_object_data(ui_id, object_id, taginfo.owner_id, taginfo, child, None) self.__import_object_data(ui_id, object_id, taginfo.owner_id, taginfo, child, None)
else: else:
custom_fragments.append(child) custom_fragments.append(child)
# self.__unknown_tag(child, klass, child.tag)
fragment = self.__custom_fragments_tostring(custom_fragments) fragment = self.__custom_fragments_tostring(custom_fragments)
if fragment: if fragment:
@ -1623,13 +1573,12 @@ class CmbDB(GObject.GObject):
if type_id == GMENU_TYPE: if type_id == GMENU_TYPE:
obj = E.menu() obj = E.menu()
# Only menu has id
self.__node_set(obj, "id", f"__cmb__{ui_id}.{object_id}" if merengue else name) self.__node_set(obj, "id", f"__cmb__{ui_id}.{object_id}" if merengue else name)
elif type_id == GMENU_SECTION_TYPE: elif type_id == GMENU_SECTION_TYPE:
obj = E.section() obj = E.section()
self.__node_set(obj, "id", f"__cmb__{ui_id}.{object_id}" if merengue else name)
elif type_id == GMENU_SUBMENU_TYPE: elif type_id == GMENU_SUBMENU_TYPE:
obj = E.submenu() obj = E.submenu()
self.__node_set(obj, "id", f"__cmb__{ui_id}.{object_id}" if merengue else name)
elif type_id == GMENU_ITEM_TYPE: elif type_id == GMENU_ITEM_TYPE:
obj = E.item() obj = E.item()
else: else:
@ -1815,6 +1764,7 @@ class CmbDB(GObject.GObject):
# From now own all output should be without an ID # From now own all output should be without an ID
# because we do not want so select internal widget from the template # because we do not want so select internal widget from the template
ignore_id = True ignore_id = True
self.__node_set(obj, "id", name)
elif not ignore_id: elif not ignore_id:
self.__node_set(obj, "id", f"__cmb__{ui_id}.{object_id}") self.__node_set(obj, "id", f"__cmb__{ui_id}.{object_id}")
else: else:
@ -1968,7 +1918,7 @@ class CmbDB(GObject.GObject):
# Children # Children
for row in c.execute( for row in c.execute(
""" """
SELECT object_id, internal, type, comment, position, custom_child_fragment SELECT object_id, internal, type, comment, position
FROM object FROM object
WHERE ui_id=? AND parent_id=? AND WHERE ui_id=? AND parent_id=? AND
object_id NOT IN (SELECT inline_object_id FROM object_property object_id NOT IN (SELECT inline_object_id FROM object_property
@ -1977,7 +1927,7 @@ class CmbDB(GObject.GObject):
""", """,
(ui_id, object_id, ui_id, object_id), (ui_id, object_id, ui_id, object_id),
): ):
child_id, internal, ctype, comment, position, custom_child_fragment = row child_id, internal, ctype, comment, position = row
if merengue: if merengue:
position = position if position is not None else 0 position = position if position is not None else 0
@ -1998,37 +1948,35 @@ class CmbDB(GObject.GObject):
obj.append(child) obj.append(child)
if linfo is not None: if linfo is None:
# Packing / Layout continue
layout = E("packing" if self.target_tk == "gtk+-3.0" else "layout")
for prop in cc.execute(
f"""
SELECT value, property_id, comment
FROM object_layout_property
WHERE ui_id=? AND object_id=? AND child_id=?
UNION
SELECT default_value AS value, property_id, null
FROM property
WHERE save_always=1 AND owner_id IN ({placeholders}) AND property_id NOT IN
(SELECT property_id FROM object_layout_property WHERE ui_id=? AND object_id=? AND child_id=?)
ORDER BY property_id
""",
(ui_id, object_id, child_id) + tuple(hierarchy) + (ui_id, object_id, child_id),
):
value, property_id, comment = prop
node = E.property(value, name=property_id)
layout.append(node)
self.__node_add_comment(node, comment)
if len(layout) > 0: # Packing / Layout
if self.target_tk == "gtk+-3.0": layout = E("packing" if self.target_tk == "gtk+-3.0" else "layout")
child.append(layout) for prop in cc.execute(
else: f"""
child_obj.append(layout) SELECT value, property_id, comment
FROM object_layout_property
WHERE ui_id=? AND object_id=? AND child_id=?
UNION
SELECT default_value AS value, property_id, null
FROM property
WHERE save_always=1 AND owner_id IN ({placeholders}) AND property_id NOT IN
(SELECT property_id FROM object_layout_property WHERE ui_id=? AND object_id=? AND child_id=?)
ORDER BY property_id
""",
(ui_id, object_id, child_id) + tuple(hierarchy) + (ui_id, object_id, child_id),
):
value, property_id, comment = prop
node = E.property(value, name=property_id)
layout.append(node)
self.__node_add_comment(node, comment)
if custom_child_fragment is not None: if len(layout) > 0:
# Dump custom child fragments if self.target_tk == "gtk+-3.0":
self.__export_custom_fragment(child, custom_child_fragment) child.append(layout)
else:
child_obj.append(layout)
# Custom buildable tags # Custom buildable tags
# Iterate over all hierarchy extra data # Iterate over all hierarchy extra data
@ -2054,7 +2002,7 @@ class CmbDB(GObject.GObject):
except Exception: except Exception:
pass pass
else: else:
node.append(etree.Comment(f" Custom {node.tag} fragments ")) node.append(etree.Comment(" Custom fragments "))
for child in root: for child in root:
node.append(child) node.append(child)

View File

@ -102,11 +102,3 @@ def ensure_columns_for_0_13_1(table, data):
return [row + (None, None, None) for row in data] return [row + (None, None, None) for row in data]
return data return data
def ensure_columns_for_0_17_3(table, data):
if table == "object":
# Append custom_child_fragment column
return [row + (None,) for row in data]
return data

View File

@ -22,7 +22,6 @@
# #
from gi.repository import GObject, Gtk from gi.repository import GObject, Gtk
from .cmb_object import CmbObject
@Gtk.Template(resource_path="/ar/xjuan/Cambalache/cmb_fragment_editor.ui") @Gtk.Template(resource_path="/ar/xjuan/Cambalache/cmb_fragment_editor.ui")
@ -30,12 +29,10 @@ class CmbFragmentEditor(Gtk.Box):
__gtype_name__ = "CmbFragmentEditor" __gtype_name__ = "CmbFragmentEditor"
view = Gtk.Template.Child() view = Gtk.Template.Child()
child_view = Gtk.Template.Child()
switcher = Gtk.Template.Child()
def __init__(self, **kwargs): def __init__(self, **kwargs):
self._object = None self._object = None
self.__bindings = [] self.__binding = None
super().__init__(**kwargs) super().__init__(**kwargs)
@ -48,10 +45,9 @@ class CmbFragmentEditor(Gtk.Box):
if obj == self._object: if obj == self._object:
return return
for binding in self.__bindings: if self.__binding:
binding.unbind() self.__binding.unbind()
self.__binding = None
self.__bindings = []
self._object = obj self._object = obj
@ -65,20 +61,7 @@ class CmbFragmentEditor(Gtk.Box):
"text", "text",
GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL, GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL,
) )
self.__bindings.append(binding) self.__binding = binding
# Only objects have child fragments
if type(obj) == CmbObject and obj.parent is not None:
binding = GObject.Object.bind_property(
obj,
"custom-child-fragment",
self.child_view,
"text",
GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL,
)
self.__bindings.append(binding)
self.switcher.set_visible(True)
Gtk.WidgetClass.set_css_name(CmbFragmentEditor, "CmbFragmentEditor") Gtk.WidgetClass.set_css_name(CmbFragmentEditor, "CmbFragmentEditor")

View File

@ -1,7 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_fragment_editor.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<template class="CmbFragmentEditor" parent="GtkBox"> <template class="CmbFragmentEditor" parent="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
@ -9,51 +7,20 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Extra fragments:</property> <property name="label" translatable="1">Extra fragments:</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkStack" id="fragment_stack"> <object class="GtkScrolledWindow">
<property name="vexpand">True</property> <property name="vexpand">1</property>
<property name="focusable">1</property>
<child> <child>
<object class="GtkStackPage"> <object class="CmbSourceView" id="view">
<property name="child"> <property name="visible">True</property>
<object class="GtkScrolledWindow"> <property name="can-focus">True</property>
<child> <property name="lang">xml</property>
<object class="CmbSourceView" id="view">
<property name="can-focus">True</property>
<property name="lang">xml</property>
</object>
</child>
</object>
</property>
<property name="name">fragment</property>
<property name="title" translatable="yes">Fragment</property>
</object> </object>
</child> </child>
<child>
<object class="GtkStackPage">
<property name="child">
<object class="GtkScrolledWindow">
<child>
<object class="CmbSourceView" id="child_view">
<property name="can-focus">True</property>
<property name="lang">xml</property>
</object>
</child>
</object>
</property>
<property name="name">child_fragment</property>
<property name="title" translatable="yes">Child Fragment</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkStackSwitcher" id="switcher">
<property name="halign">center</property>
<property name="stack">fragment_stack</property>
<property name="visible">False</property>
</object> </object>
</child> </child>
</template> </template>

View File

@ -1,7 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_object_data_editor.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<template class="CmbObjectDataEditor" parent="GtkBox"> <template class="CmbObjectDataEditor" parent="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
@ -10,27 +8,28 @@
<object class="GtkBox"> <object class="GtkBox">
<property name="spacing">4</property> <property name="spacing">4</property>
<child> <child>
<object class="GtkLabel" id="label"/> <object class="GtkLabel" id="label">
</object>
</child> </child>
<child> <child>
<object class="GtkBox" id="top_box"> <object class="GtkBox" id="top_box">
<property name="halign">start</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="halign">start</property>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkButton" id="remove_button"> <object class="GtkButton" id="remove_button">
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="halign">end</property> <property name="halign">end</property>
<signal name="clicked" handler="on_remove_clicked"/> <style>
<class name="borderless"/>
</style>
<signal name="clicked" handler="on_remove_clicked" swapped="no"/>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">user-trash-symbolic</property> <property name="icon-name">user-trash-symbolic</property>
</object> </object>
</child> </child>
<style>
<class name="borderless"/>
</style>
<style> <style>
<class name="hidden"/> <class name="hidden"/>
</style> </style>
@ -38,8 +37,8 @@
</child> </child>
<child> <child>
<object class="GtkMenuButton" id="add_child"> <object class="GtkMenuButton" id="add_child">
<property name="halign">end</property>
<property name="visible">0</property> <property name="visible">0</property>
<property name="halign">end</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">list-add-symbolic</property> <property name="icon-name">list-add-symbolic</property>
@ -49,27 +48,33 @@
</child> </child>
<child> <child>
<object class="GtkButton" id="add_only_child"> <object class="GtkButton" id="add_only_child">
<property name="visible">0</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="halign">end</property> <property name="halign">end</property>
<property name="visible">0</property> <signal name="clicked" handler="on_add_only_child_clicked" swapped="no"/>
<signal name="clicked" handler="on_add_only_child_clicked"/> <style>
<class name="borderless"/>
</style>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">list-add-symbolic</property> <property name="icon-name">list-add-symbolic</property>
</object> </object>
</child> </child>
<style>
<class name="borderless"/>
</style>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkGrid" id="grid"> <object class="GtkGrid" id="grid">
<property name="column-spacing">4</property>
<property name="row-spacing">4</property>
<property name="vexpand">1</property> <property name="vexpand">1</property>
<property name="row-spacing">4</property>
<property name="column-spacing">4</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object> </object>
</child> </child>
</template> </template>

View File

@ -976,21 +976,7 @@ class CmbBaseObject(CmbBase):
super().__init__(**kwargs) super().__init__(**kwargs)
@classmethod @classmethod
def from_row( def from_row(cls, project, ui_id, object_id, type_id, name, parent_id, internal, type, comment, position, custom_fragment):
cls,
project,
ui_id,
object_id,
type_id,
name,
parent_id,
internal,
type,
comment,
position,
custom_fragment,
custom_child_fragment,
):
return cls(project=project, ui_id=ui_id, object_id=object_id) return cls(project=project, ui_id=ui_id, object_id=object_id)
@GObject.Property(type=str) @GObject.Property(type=str)
@ -1161,27 +1147,6 @@ class CmbBaseObject(CmbBase):
value, value,
) )
@GObject.Property(type=str)
def custom_child_fragment(self):
return self.db_get(
"SELECT custom_child_fragment FROM object WHERE (ui_id, object_id) IS (?, ?);",
(
self.ui_id,
self.object_id,
),
)
@custom_child_fragment.setter
def _set_custom_child_fragment(self, value):
self.db_set(
"UPDATE object SET custom_child_fragment=? WHERE (ui_id, object_id) IS (?, ?);",
(
self.ui_id,
self.object_id,
),
value,
)
class CmbBaseObjectData(CmbBase): class CmbBaseObjectData(CmbBase):
__gtype_name__ = "CmbBaseObjectData" __gtype_name__ = "CmbBaseObjectData"

View File

@ -31,7 +31,6 @@ from lxml import etree
from .cmb_db import CmbDB from .cmb_db import CmbDB
from .cmb_ui import CmbUI from .cmb_ui import CmbUI
from .cmb_css import CmbCSS from .cmb_css import CmbCSS
from .cmb_base import CmbBase
from .cmb_object import CmbObject from .cmb_object import CmbObject
from .cmb_object_data import CmbObjectData from .cmb_object_data import CmbObjectData
from .cmb_property import CmbProperty from .cmb_property import CmbProperty
@ -120,7 +119,7 @@ class CmbProject(Gtk.TreeStore):
raise Exception("Either target_tk or filename are required") raise Exception("Either target_tk or filename are required")
# Use a TreeStore to hold object tree instead of using SQL for every TreeStore call # Use a TreeStore to hold object tree instead of using SQL for every TreeStore call
self.set_column_types([CmbBase]) self.set_column_types([GObject.GObject])
# DataModel is only used internally # DataModel is only used internally
self.db = CmbDB(target_tk=self.target_tk) self.db = CmbDB(target_tk=self.target_tk)
@ -587,7 +586,6 @@ class CmbProject(Gtk.TreeStore):
comment=None, comment=None,
position=0, position=0,
custom_fragment=None, custom_fragment=None,
custom_child_fragment=None,
): ):
obj = CmbObject(project=self, ui_id=ui_id, object_id=object_id, info=self.type_info[obj_type]) obj = CmbObject(project=self, ui_id=ui_id, object_id=object_id, info=self.type_info[obj_type])
@ -1454,9 +1452,8 @@ class CmbProject(Gtk.TreeStore):
iter = self.iter_next(iter) iter = self.iter_next(iter)
# GtkTreeDragDest Iface # GtkTreeDragDest Iface
def do_drag_data_received(self, dest, value): def do_drag_data_received(self, path, selection_data):
value = GObject.Value(Gtk.TreeRowData, value) valid, _model, drag_path = Gtk.tree_get_row_drag_data(selection_data)
valid, _model, drag_path = Gtk.tree_get_row_drag_data(value)
if not valid: if not valid:
return False return False
@ -1466,12 +1463,12 @@ class CmbProject(Gtk.TreeStore):
# Move to new place # Move to new place
try: try:
iter = self.get_iter(dest) iter = self.get_iter(path)
drag_iter = self.insert_before(None, iter, [self[drag_iter][0]]) self.move_before(drag_iter, iter)
except ValueError: except ValueError:
dest.prev() path.prev()
iter = self.get_iter(dest) iter = self.get_iter(path)
drag_iter = self.insert_before(None, iter, [self[drag_iter][0]]) self.move_after(drag_iter, iter)
position_path = self.get_path(drag_iter) position_path = self.get_path(drag_iter)
@ -1485,17 +1482,15 @@ class CmbProject(Gtk.TreeStore):
drag_obj.parent.reorder_child(drag_obj, indices[-1]) drag_obj.parent.reorder_child(drag_obj, indices[-1])
self.__reordering_children = False self.__reordering_children = False
# Manually emit signal since we disable it by setting __reordering_children flag # Manually emmit signal since we disable it by setting __reordering_children flag
self.emit("object-changed", drag_obj, "position") self.emit("object-changed", drag_obj, "position")
self.set_selection([])
self.set_selection([drag_obj]) self.set_selection([drag_obj])
return True return False
def do_row_drop_possible(self, path, value): def do_row_drop_possible(self, path, selection_data):
value = GObject.Value(Gtk.TreeRowData, value) valid, _model, drag_path = Gtk.tree_get_row_drag_data(selection_data)
valid, _model, drag_path = Gtk.tree_get_row_drag_data(value)
if not valid: if not valid:
return False return False

View File

@ -1,12 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_signal_editor.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<object class="GtkEntryCompletion" id="handler_entrycompletion"> <object class="GtkEntryCompletion" id="handler_entrycompletion">
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkCellRendererText"/>
<!-- Custom child fragments -->
<attributes> <attributes>
<attribute name="text">0</attribute> <attribute name="text">0</attribute>
</attributes> </attributes>
@ -31,6 +28,8 @@
<property name="spacing">4</property> <property name="spacing">4</property>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="vexpand">1</property>
<property name="focusable">1</property>
<property name="child"> <property name="child">
<object class="GtkTreeView" id="treeview"> <object class="GtkTreeView" id="treeview">
<property name="focusable">1</property> <property name="focusable">1</property>
@ -41,14 +40,13 @@
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="signal_id_column"> <object class="GtkTreeViewColumn" id="signal_id_column">
<property name="min-width">64</property>
<property name="resizable">1</property> <property name="resizable">1</property>
<property name="title" translatable="yes">Signal</property> <property name="min-width">64</property>
<property name="title" translatable="1">Signal</property>
<child> <child>
<object class="GtkCellRendererText" id="signal_id"> <object class="GtkCellRendererText" id="signal_id">
<signal name="edited" handler="on_detail_edited"/> <signal name="edited" handler="on_detail_edited" swapped="no"/>
</object> </object>
<!-- Custom child fragments -->
<attributes> <attributes>
<attribute name="text">2</attribute> <attribute name="text">2</attribute>
</attributes> </attributes>
@ -57,17 +55,16 @@
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="handler_column"> <object class="GtkTreeViewColumn" id="handler_column">
<property name="expand">1</property>
<property name="min-width">64</property>
<property name="resizable">1</property> <property name="resizable">1</property>
<property name="title" translatable="yes">Handler</property> <property name="min-width">64</property>
<property name="title" translatable="1">Handler</property>
<property name="expand">1</property>
<child> <child>
<object class="GtkCellRendererText" id="handler"> <object class="GtkCellRendererText" id="handler">
<property name="editable">1</property> <property name="editable">1</property>
<property name="placeholder-text">&lt;Enter callback&gt;</property> <property name="placeholder-text">&lt;Enter callback&gt;</property>
<signal name="edited" handler="on_handler_edited"/> <signal name="edited" handler="on_handler_edited" swapped="no"/>
</object> </object>
<!-- Custom child fragments -->
<attributes> <attributes>
<attribute name="text">4</attribute> <attribute name="text">4</attribute>
</attributes> </attributes>
@ -76,14 +73,13 @@
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="user_data_column"> <object class="GtkTreeViewColumn" id="user_data_column">
<property name="title" translatable="yes">Data</property> <property name="title" translatable="1">Data</property>
<child> <child>
<object class="GtkCellRendererText" id="user_data"> <object class="GtkCellRendererText" id="user_data">
<property name="editable">1</property> <property name="editable">1</property>
<property name="placeholder-text">&lt;object&gt;</property> <property name="placeholder-text">&lt;object&gt;</property>
<signal name="edited" handler="on_user_data_edited"/> <signal name="edited" handler="on_user_data_edited" swapped="no"/>
</object> </object>
<!-- Custom child fragments -->
<attributes> <attributes>
<attribute name="text">5</attribute> <attribute name="text">5</attribute>
</attributes> </attributes>
@ -92,12 +88,11 @@
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="swap_column"> <object class="GtkTreeViewColumn" id="swap_column">
<property name="title" translatable="yes">Swap</property> <property name="title" translatable="1">Swap</property>
<child> <child>
<object class="GtkCellRendererToggle" id="swap"> <object class="GtkCellRendererToggle" id="swap">
<signal name="toggled" handler="on_swap_toggled"/> <signal name="toggled" handler="on_swap_toggled" swapped="no"/>
</object> </object>
<!-- Custom child fragments -->
<attributes> <attributes>
<attribute name="active">6</attribute> <attribute name="active">6</attribute>
</attributes> </attributes>
@ -106,12 +101,11 @@
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="after_column"> <object class="GtkTreeViewColumn" id="after_column">
<property name="title" translatable="yes">After</property> <property name="title" translatable="1">After</property>
<child> <child>
<object class="GtkCellRendererToggle" id="after"> <object class="GtkCellRendererToggle" id="after">
<signal name="toggled" handler="on_after_toggled"/> <signal name="toggled" handler="on_after_toggled" swapped="no"/>
</object> </object>
<!-- Custom child fragments -->
<attributes> <attributes>
<attribute name="active">7</attribute> <attribute name="active">7</attribute>
</attributes> </attributes>
@ -120,8 +114,6 @@
</child> </child>
</object> </object>
</property> </property>
<property name="focusable">1</property>
<property name="vexpand">1</property>
</object> </object>
</child> </child>
</template> </template>

View File

@ -1,7 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_type_chooser.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<object class="CmbTypeChooserPopover" id="all"> <object class="CmbTypeChooserPopover" id="all">
<property name="show-categories">True</property> <property name="show-categories">True</property>
@ -30,14 +28,14 @@
<object class="GtkBox" id="content"> <object class="GtkBox" id="content">
<child> <child>
<object class="GtkMenuButton" id="type_chooser_all"> <object class="GtkMenuButton" id="type_chooser_all">
<property name="focus-on-click">0</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="popover">all</property> <property name="focus-on-click">0</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="popover">all</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">edit-find-symbolic</property> <property name="icon-name">edit-find-symbolic</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
@ -48,79 +46,82 @@
</child> </child>
<child> <child>
<object class="GtkLabel" id="type_label"> <object class="GtkLabel" id="type_label">
<property name="halign">start</property>
<property name="hexpand">1</property>
<property name="sensitive">0</property> <property name="sensitive">0</property>
<property name="hexpand">1</property>
<property name="halign">start</property>
<attributes> <attributes>
<attribute name="style" value="italic"/> <attribute name="style" value="italic"></attribute>
</attributes> </attributes>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkBox" id="type_chooser_gtk"> <object class="GtkBox" id="type_chooser_gtk">
<property name="homogeneous">False</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="homogeneous">False</property>
<style>
<class name="linked"/>
</style>
<child> <child>
<object class="GtkMenuButton"> <object class="GtkMenuButton">
<property name="focus-on-click">0</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="focus-on-click">0</property>
<property name="receives-default">1</property>
<property name="popover">toplevel</property> <property name="popover">toplevel</property>
<property name="receives-default">1</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="label" translatable="yes" comments="Widget group for toplevels/windows">Toplevel</property> <property name="label" translatable="1" comments="Widget group for toplevels/windows">Toplevel</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuButton"> <object class="GtkMenuButton">
<property name="focus-on-click">0</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="focus-on-click">0</property>
<property name="receives-default">1</property>
<property name="popover">layout</property> <property name="popover">layout</property>
<property name="receives-default">1</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="label" translatable="yes" comments="Widget group for container widgets like GtkBox grid">Layout</property> <property name="label" translatable="1" comments="Widget group for container widgets like GtkBox grid">Layout</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuButton"> <object class="GtkMenuButton">
<property name="focus-on-click">0</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="focus-on-click">0</property>
<property name="receives-default">1</property>
<property name="popover">control</property> <property name="popover">control</property>
<property name="receives-default">1</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="label" translatable="yes" comments="Widget group for control widget like buttons, entries">Control</property> <property name="label" translatable="1" comments="Widget group for control widget like buttons, entries">Control</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuButton"> <object class="GtkMenuButton">
<property name="focus-on-click">0</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="focus-on-click">0</property>
<property name="receives-default">1</property>
<property name="popover">display</property> <property name="popover">display</property>
<property name="receives-default">1</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="label" translatable="yes" comments="Widget group for display widgets (label, image)">Display</property> <property name="label" translatable="1" comments="Widget group for display widgets (label, image)">Display</property>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkMenuButton"> <object class="GtkMenuButton">
<property name="focusable">1</property>
<property name="focus-on-click">0</property> <property name="focus-on-click">0</property>
<property name="focusable">1</property>
<property name="popover">model</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="popover">model</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="label" translatable="yes" comments="Widget group for model objects (ListStore, TextBuffer)">Model</property> <property name="label" translatable="1" comments="Widget group for model objects (ListStore, TextBuffer)">Model</property>
</object> </object>
</child> </child>
</object> </object>
@ -128,8 +129,8 @@
<child> <child>
<object class="GtkMenuButton"> <object class="GtkMenuButton">
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="popover">extra</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<property name="popover">extra</property>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">pan-down-symbolic</property> <property name="icon-name">pan-down-symbolic</property>
@ -137,9 +138,6 @@
</child> </child>
</object> </object>
</child> </child>
<style>
<class name="linked"/>
</style>
</object> </object>
</child> </child>
</template> </template>

View File

@ -57,19 +57,6 @@ class CmbTypeChooserWidget(Gtk.Box):
super().__init__(**kwargs) super().__init__(**kwargs)
self.connect("map", self.__on_map)
def __on_map(self, widget):
root = widget.get_root()
if root is not None:
height = root.get_allocated_height() - 100
if height > 460:
height = height * 0.7
self.scrolledwindow.set_max_content_height(height)
return False
def __type_info_should_append(self, info): def __type_info_should_append(self, info):
retval = False retval = False

View File

@ -1,25 +1,28 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_type_chooser_widget.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<template class="CmbTypeChooserWidget" parent="GtkBox"> <template class="CmbTypeChooserWidget" parent="GtkBox">
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">6</property> <property name="spacing">6</property>
<child> <child>
<object class="GtkSearchEntry" id="searchentry"> <object class="GtkSearchEntry" id="searchentry">
<signal name="activate" handler="on_searchentry_activate"/> <signal name="activate" handler="on_searchentry_activate" swapped="no"/>
<signal name="search-changed" handler="on_searchentry_search_changed"/> <signal name="search-changed" handler="on_searchentry_search_changed" swapped="no"/>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkScrolledWindow" id="scrolledwindow"> <object class="GtkScrolledWindow" id="scrolledwindow">
<property name="hscrollbar-policy">never</property>
<property name="window-placement">bottom-left</property>
<property name="min-content-height">256</property>
<property name="propagate-natural-width">1</property>
<property name="propagate-natural-height">1</property>
<property name="child"> <property name="child">
<object class="GtkTreeView" id="treeview"> <object class="GtkTreeView" id="treeview">
<property name="activate-on-single-click">1</property>
<property name="enable-search">0</property>
<property name="headers-visible">0</property> <property name="headers-visible">0</property>
<signal name="row-activated" handler="on_treeview_row_activated"/> <property name="enable-search">0</property>
<property name="activate-on-single-click">1</property>
<signal name="row-activated" handler="on_treeview_row_activated" swapped="no"/>
<child internal-child="selection"> <child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection"/> <object class="GtkTreeSelection" id="treeview-selection"/>
</child> </child>
@ -27,7 +30,6 @@
<object class="GtkTreeViewColumn" id="column_adaptor"> <object class="GtkTreeViewColumn" id="column_adaptor">
<child> <child>
<object class="GtkCellRendererText" id="adaptor_cell"/> <object class="GtkCellRendererText" id="adaptor_cell"/>
<!-- Custom child fragments -->
<attributes> <attributes>
<attribute name="markup">0</attribute> <attribute name="markup">0</attribute>
<attribute name="sensitive">3</attribute> <attribute name="sensitive">3</attribute>
@ -37,11 +39,6 @@
</child> </child>
</object> </object>
</property> </property>
<property name="hscrollbar-policy">never</property>
<property name="min-content-height">256</property>
<property name="propagate-natural-height">1</property>
<property name="propagate-natural-width">1</property>
<property name="window-placement">bottom-left</property>
</object> </object>
</child> </child>
</template> </template>

View File

@ -115,17 +115,7 @@ class CmbUI(CmbBaseUI):
c.close() c.close()
def get_display_name(self): def get_display_name(self):
if self.filename: return self.filename if self.filename else _("Unnamed {ui_id}").format(ui_id=self.ui_id)
return self.filename
template_id = self.template_id
if template_id:
template = self.project.get_object_by_id(self.ui_id, template_id)
if template is not None:
return template.name
return _("Unnamed {ui_id}").format(ui_id=self.ui_id)
def __get_infered_target(self, library_id): def __get_infered_target(self, library_id):
ui_id = self.ui_id ui_id = self.ui_id

View File

@ -1,19 +1,17 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_ui_editor.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<object class="CmbTextBuffer" id="authors"/> <object class="CmbTextBuffer" id="authors"/>
<object class="CmbTextBuffer" id="comment"/> <object class="CmbTextBuffer" id="comment"/>
<object class="CmbTextBuffer" id="copyright"/> <object class="CmbTextBuffer" id="copyright"/>
<object class="CmbTextBuffer" id="description"/> <object class="CmbTextBuffer" id="description"/>
<template class="CmbUIEditor" parent="GtkGrid"> <template class="CmbUIEditor" parent="GtkGrid">
<property name="column-spacing">3</property>
<property name="row-spacing">4</property> <property name="row-spacing">4</property>
<property name="column-spacing">3</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Filename:</property> <property name="label" translatable="1">Filename:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">0</property> <property name="row">0</property>
@ -23,7 +21,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Description:</property> <property name="label" translatable="1">Description:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">2</property> <property name="row">2</property>
@ -33,7 +31,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Copyright:</property> <property name="label" translatable="1">Copyright:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">3</property> <property name="row">3</property>
@ -43,7 +41,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Authors:</property> <property name="label" translatable="1">Authors:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">4</property> <property name="row">4</property>
@ -53,7 +51,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Domain:</property> <property name="label" translatable="1">Domain:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">5</property> <property name="row">5</property>
@ -62,10 +60,10 @@
</child> </child>
<child> <child>
<object class="CmbEntry" id="filename"> <object class="CmbEntry" id="filename">
<property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="placeholder-text" translatable="yes">&lt;file name relative to project&gt;</property> <property name="placeholder-text" translatable="1">&lt;file name relative to project&gt;</property>
<property name="visible">True</property>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="row">0</property> <property name="row">0</property>
@ -74,10 +72,10 @@
</child> </child>
<child> <child>
<object class="CmbEntry" id="translation_domain"> <object class="CmbEntry" id="translation_domain">
<property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="halign">start</property> <property name="halign">start</property>
<property name="placeholder-text" translatable="yes">&lt;translation domain&gt;</property> <property name="placeholder-text" translatable="1">&lt;translation domain&gt;</property>
<property name="visible">True</property>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="row">5</property> <property name="row">5</property>
@ -86,15 +84,15 @@
</child> </child>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="focusable">1</property>
<property name="min-content-height">96</property>
<property name="max-content-height">256</property>
<property name="child"> <property name="child">
<object class="GtkTextView"> <object class="GtkTextView">
<property name="buffer">description</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="buffer">description</property>
</object> </object>
</property> </property>
<property name="focusable">1</property>
<property name="max-content-height">256</property>
<property name="min-content-height">96</property>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="row">2</property> <property name="row">2</property>
@ -103,15 +101,15 @@
</child> </child>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="focusable">1</property>
<property name="min-content-height">96</property>
<property name="max-content-height">256</property>
<property name="child"> <property name="child">
<object class="GtkTextView"> <object class="GtkTextView">
<property name="buffer">authors</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="buffer">authors</property>
</object> </object>
</property> </property>
<property name="focusable">1</property>
<property name="max-content-height">256</property>
<property name="min-content-height">96</property>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="row">4</property> <property name="row">4</property>
@ -120,10 +118,10 @@
</child> </child>
<child> <child>
<object class="CmbToplevelChooser" id="template_id"> <object class="CmbToplevelChooser" id="template_id">
<property name="can-focus">False</property>
<property name="derivable-only">True</property>
<property name="halign">start</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="derivable-only">True</property>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="row">1</property> <property name="row">1</property>
@ -133,7 +131,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Template:</property> <property name="label" translatable="1">Template:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">1</property> <property name="row">1</property>
@ -142,14 +140,14 @@
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="spacing">4</property>
<property name="valign">end</property> <property name="valign">end</property>
<property name="vexpand">1</property> <property name="vexpand">1</property>
<property name="spacing">4</property>
<child> <child>
<object class="GtkButton" id="remove_button"> <object class="GtkButton" id="remove_button">
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="receives-default">1</property> <property name="receives-default">1</property>
<signal name="clicked" handler="on_remove_button_clicked"/> <signal name="clicked" handler="on_remove_button_clicked" swapped="no"/>
<child> <child>
<object class="GtkImage"> <object class="GtkImage">
<property name="icon-name">app-remove-symbolic</property> <property name="icon-name">app-remove-symbolic</property>
@ -159,13 +157,13 @@
</child> </child>
<child> <child>
<object class="GtkButton" id="export_button"> <object class="GtkButton" id="export_button">
<property name="label" translatable="1">Export</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="receives-default">1</property>
<property name="tooltip-text" translatable="1">Export</property>
<property name="halign">end</property> <property name="halign">end</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="label" translatable="yes">Export</property> <signal name="clicked" handler="on_export_button_clicked" swapped="no"/>
<property name="receives-default">1</property>
<property name="tooltip-text" translatable="yes">Export</property>
<signal name="clicked" handler="on_export_button_clicked"/>
<style> <style>
<class name="suggested-action"/> <class name="suggested-action"/>
</style> </style>
@ -173,22 +171,22 @@
</child> </child>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="column-span">2</property>
<property name="row">7</property> <property name="row">7</property>
<property name="column-span">2</property>
</layout> </layout>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="focusable">1</property>
<property name="min-content-height">96</property>
<property name="max-content-height">256</property>
<property name="child"> <property name="child">
<object class="GtkTextView"> <object class="GtkTextView">
<property name="buffer">copyright</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="buffer">copyright</property>
</object> </object>
</property> </property>
<property name="focusable">1</property>
<property name="max-content-height">256</property>
<property name="min-content-height">96</property>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="row">3</property> <property name="row">3</property>
@ -198,7 +196,7 @@
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Comment:</property> <property name="label" translatable="1">Comment:</property>
<layout> <layout>
<property name="column">0</property> <property name="column">0</property>
<property name="row">6</property> <property name="row">6</property>
@ -207,15 +205,15 @@
</child> </child>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkScrolledWindow">
<property name="focusable">1</property>
<property name="min-content-height">96</property>
<property name="max-content-height">256</property>
<property name="child"> <property name="child">
<object class="GtkTextView"> <object class="GtkTextView">
<property name="buffer">comment</property>
<property name="focusable">1</property> <property name="focusable">1</property>
<property name="buffer">comment</property>
</object> </object>
</property> </property>
<property name="focusable">1</property>
<property name="max-content-height">256</property>
<property name="min-content-height">96</property>
<layout> <layout>
<property name="column">1</property> <property name="column">1</property>
<property name="row">6</property> <property name="row">6</property>

View File

@ -1,73 +1,73 @@
<?xml version='1.0' encoding='UTF-8'?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Cambalache 0.17.3 -->
<interface> <interface>
<!-- interface-name cmb_view.ui -->
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<requires lib="webkitgtk" version="6.0"/>
<object class="WebKitSettings" id="settings"> <object class="WebKitSettings" id="settings">
<property name="enable-fullscreen">False</property>
<property name="enable-html5-database">False</property>
<property name="enable-html5-local-storage">False</property> <property name="enable-html5-local-storage">False</property>
<property name="enable-media">False</property> <property name="enable-html5-database">False</property>
<property name="enable-fullscreen">False</property>
<property name="enable-webaudio">False</property> <property name="enable-webaudio">False</property>
<property name="media-playback-allows-inline">False</property> <property name="media-playback-allows-inline">False</property>
<property name="user-agent">Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15</property> <property name="user-agent">Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15</property>
<property name="enable-media">False</property>
</object> </object>
<template class="CmbView" parent="GtkBox"> <template class="CmbView" parent="GtkBox">
<child>
<object class="GtkStack" id="stack">
<property name="hexpand">true</property>
<property name="transition-duration">300</property>
<property name="transition-type">crossfade</property>
<child> <child>
<object class="GtkStack" id="stack"> <object class="GtkStackPage">
<property name="hexpand">true</property> <property name="name">ui_view</property>
<property name="transition-duration">300</property> <property name="title" translatable="1">Project View</property>
<property name="transition-type">crossfade</property> <property name="child">
<child> <object class="WebKitWebView" id="webview">
<object class="GtkStackPage"> <property name="visible">True</property>
<property name="child"> <property name="can-focus">True</property>
<object class="WebKitWebView" id="webview"> <property name="settings">settings</property>
<property name="can-focus">True</property> <signal name="context-menu" handler="on_context_menu" swapped="no"/>
<property name="settings">settings</property> <child>
<property name="visible">True</property> <placeholder/>
<signal name="context-menu" handler="on_context_menu"/> </child>
</object>
</property>
<property name="name">ui_view</property>
<property name="title" translatable="yes">Project View</property>
</object> </object>
</child> </property>
<child>
<object class="GtkStackPage">
<property name="child">
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow">
<property name="focusable">1</property>
<property name="vexpand">1</property>
<child>
<object class="CmbSourceView" id="text_view">
<property name="can-focus">True</property>
<property name="cursor-visible">False</property>
<property name="editable">False</property>
<property name="lang">xml</property>
<property name="visible">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkStackSwitcher">
<property name="halign">center</property>
<property name="margin-bottom">4</property>
<property name="margin-top">4</property>
<property name="stack">stack</property>
</object>
</child>
</object>
</property>
<property name="name">ui_xml</property>
<property name="title" translatable="yes">UI Definition</property>
</object>
</child>
</object> </object>
</child> </child>
<child>
<object class="GtkStackPage">
<property name="name">ui_xml</property>
<property name="title" translatable="1">UI Definition</property>
<property name="child">
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow">
<property name="vexpand">1</property>
<property name="focusable">1</property>
<child>
<object class="CmbSourceView" id="text_view">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="editable">False</property>
<property name="cursor-visible">False</property>
<property name="lang">xml</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkStackSwitcher">
<property name="halign">center</property>
<property name="margin-top">4</property>
<property name="margin-bottom">4</property>
<property name="stack">stack</property>
</object>
</child>
</object>
</property>
</object>
</child>
</object>
</child>
</template> </template>
</interface> </interface>

View File

@ -122,7 +122,6 @@ CREATE TABLE object (
comment TEXT, comment TEXT,
position INTEGER NOT NULL ON CONFLICT REPLACE DEFAULT 0, position INTEGER NOT NULL ON CONFLICT REPLACE DEFAULT 0,
custom_fragment TEXT, custom_fragment TEXT,
custom_child_fragment TEXT,
PRIMARY KEY(ui_id, object_id), PRIMARY KEY(ui_id, object_id),
FOREIGN KEY(ui_id, parent_id) REFERENCES object(ui_id, object_id) ON DELETE CASCADE FOREIGN KEY(ui_id, parent_id) REFERENCES object(ui_id, object_id) ON DELETE CASCADE
) WITHOUT ROWID; ) WITHOUT ROWID;
@ -206,7 +205,7 @@ CREATE TABLE object_property (
property_id TEXT, property_id TEXT,
value TEXT, value TEXT,
translatable BOOLEAN CHECK (translatable IS NULL OR (translatable IN (1, 0))), translatable BOOLEAN,
comment TEXT, comment TEXT,
translation_context TEXT, translation_context TEXT,
translation_comments TEXT, translation_comments TEXT,
@ -239,7 +238,7 @@ CREATE TABLE object_layout_property (
property_id TEXT, property_id TEXT,
value TEXT, value TEXT,
translatable BOOLEAN CHECK (translatable IS NULL OR (translatable IN (1, 0))), translatable BOOLEAN,
comment TEXT, comment TEXT,
translation_context TEXT, translation_context TEXT,
translation_comments TEXT, translation_comments TEXT,
@ -266,8 +265,8 @@ CREATE TABLE object_signal (
handler TEXT NOT NULL, handler TEXT NOT NULL,
detail TEXT, detail TEXT,
user_data INTEGER, user_data INTEGER,
swap BOOLEAN CHECK (swap IS NULL OR (swap IN (1, 0))), swap BOOLEAN,
after BOOLEAN CHECK (after IS NULL OR (after IN (1, 0))), after BOOLEAN,
comment TEXT, comment TEXT,
FOREIGN KEY(ui_id, object_id) REFERENCES object ON DELETE CASCADE, FOREIGN KEY(ui_id, object_id) REFERENCES object ON DELETE CASCADE,
FOREIGN KEY(owner_id, signal_id) REFERENCES signal FOREIGN KEY(owner_id, signal_id) REFERENCES signal
@ -291,7 +290,7 @@ CREATE TABLE object_data (
value TEXT, value TEXT,
parent_id INTEGER, parent_id INTEGER,
comment TEXT, comment TEXT,
translatable BOOLEAN CHECK (translatable IS NULL OR (translatable IN (1, 0))), translatable BOOLEAN,
translation_context TEXT, translation_context TEXT,
translation_comments TEXT, translation_comments TEXT,
PRIMARY KEY(ui_id, object_id, owner_id, data_id, id), PRIMARY KEY(ui_id, object_id, owner_id, data_id, id),

View File

@ -39,23 +39,31 @@ class MrgGtkPopover(MrgGtkWidget):
self.property_ignore_list.add("autohide") self.property_ignore_list.add("autohide")
else: else:
self.property_ignore_list.add("modal") self.property_ignore_list.add("modal")
#self.property_ignore_list.add("relative_to") self.property_ignore_list.add("relative_to")
def __ensure_popup(self): def __ensure_popup(self):
if self.object is None: if self.object is None:
return return
if self.__button: self.__button.set_popover(self.object)
self.__button.set_popover(self.object)
if Gtk.MAJOR_VERSION == 3: if Gtk.MAJOR_VERSION == 3:
self.object.set_modal(False) self.object.set_modal(False)
else: else:
self.object.set_autohide(False) self.object.set_autohide(False)
def popup(self):
if self.__button is None:
return
if Gtk.MAJOR_VERSION == 3:
self.__button.set_active(True)
else:
self.__button.popup()
def object_changed(self, old, new): def object_changed(self, old, new):
# Clear old popover # Clear old popover
if old and self.__button: if old:
self.__button.set_popover(None) self.__button.set_popover(None)
self.selection = None self.selection = None
@ -66,20 +74,14 @@ class MrgGtkPopover(MrgGtkWidget):
self.window = None self.window = None
return return
# TODO: keep track when these prop changes and update window if self.window is None:
if Gtk.MAJOR_VERSION == 4:
canot_be_activated = self.object.props.parent is None
else:
canot_be_activated = self.object.props.relative_to is None
if self.window is None and canot_be_activated:
self.__button = Gtk.MenuButton( self.__button = Gtk.MenuButton(
visible=True, halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER, receives_default=False visible=True, halign=Gtk.Align.CENTER, valign=Gtk.Align.CENTER, receives_default=False
) )
self.window = Gtk.Window(title="Popover Preview Window", deletable=False) self.window = Gtk.Window(title="Popover Preview Window", deletable=False, width_request=320, height_request=240)
self.window.set_default_size(320, 240) self.window.set_default_size(640, 480)
if Gtk.MAJOR_VERSION == 4: if Gtk.MAJOR_VERSION == 4:
self.__button.set_icon_name("open-menu-symbolic") self.__button.set_icon_name("open-menu-symbolic")
@ -96,12 +98,10 @@ class MrgGtkPopover(MrgGtkWidget):
if Gtk.MAJOR_VERSION == 4: if Gtk.MAJOR_VERSION == 4:
self.object.show() self.object.show()
if self.window: self.window.show()
self.window.show()
else: else:
self.object.show_all() self.object.show_all()
if self.window: self.window.show_all()
self.window.show_all()
def on_selected_changed(self): def on_selected_changed(self):
super().on_selected_changed() super().on_selected_changed()

View File

@ -1,29 +0,0 @@
# Merengue WebKit plugin
#
# Copyright (C) 2022 Juan Pablo Ugarte
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
# Authors:
# Juan Pablo Ugarte <juanpablougarte@gmail.com>
#
from gi.repository import GObject
from .mrg_webkit_web_view import MrgWebKitWebView
from .mrg_webkit_web_view import MrgDummyWebView
from .mrg_webkit_web_view import MrgDummyWebViewProxy
GObject.type_ensure(MrgDummyWebViewProxy.__gtype__)

View File

@ -1,144 +0,0 @@
# MrgWebKitWebView Controller
#
# Copyright (C) 2022 Juan Pablo Ugarte
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
# Authors:
# Juan Pablo Ugarte <juanpablougarte@gmail.com>
#
from gi.repository import GObject, Gtk, WebKit
from merengue.mrg_gtk import MrgGtkWidget
from merengue import getLogger
logger = getLogger(__name__)
class MrgWebKitWebView(MrgGtkWidget):
object = GObject.Property(type=WebKit.WebView, flags=GObject.ParamFlags.READWRITE)
def __init__(self, **kwargs):
super().__init__(**kwargs)
logger.warning("MrgWebKitWebView __init__")
def object_changed(self, old, new):
super().object_changed(old, new)
if self.object:
self.object.load_html(
"""
<!DOCTYPE html>
<html>
<head>
<title>Cambalache WebKit</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
display: table;
}
div.content {
display: table-cell;
text-align: center;
vertical-align: middle;
border: 3px groove lightgray;
border-radius: 1em;
}
</style>
</head>
<script>
function open_url() {
const url = document.querySelector('#url_entry').value;
window.location.href = (url.startsWith('http')) ? url : 'http://' + url;
}
</script>
<body>
<div class="content">
<h3>WebKit Test Page</h3>
<span>URL:</span>
<input type="text" id="url_entry" />
<input type="button" value="Open" onclick="open_url()" />
<br/>
<br/>
<a href="https://gitlab.gnome.org/jpu/cambalache">Cambalache</a>
<a href="https://webkitgtk.org/">WebKitGtk</a>
</div>
</body>
</html>
""",
".",
)
class MrgDummyWebViewProxy(Gtk.Label):
__gtype_name__ = "MrgDummyWebViewProxy"
automation_presentation_type = GObject.Property(
type=WebKit.AutomationBrowsingContextPresentation,
default=WebKit.AutomationBrowsingContextPresentation.WINDOW,
flags=GObject.ParamFlags.READWRITE,
)
camera_capture_state = GObject.Property(
type=WebKit.MediaCaptureState, default=WebKit.MediaCaptureState.NONE, flags=GObject.ParamFlags.READWRITE
)
default_content_security_policy = GObject.Property(type=str, flags=GObject.ParamFlags.READWRITE)
display_capture_state = GObject.Property(
type=WebKit.MediaCaptureState, default=WebKit.MediaCaptureState.NONE, flags=GObject.ParamFlags.READWRITE
)
editable = GObject.Property(type=bool, default=False, flags=GObject.ParamFlags.READWRITE)
is_controlled_by_automation = GObject.Property(type=bool, default=False, flags=GObject.ParamFlags.READWRITE)
is_ephemeral = GObject.Property(type=bool, default=False, flags=GObject.ParamFlags.READWRITE)
is_muted = GObject.Property(type=bool, default=False, flags=GObject.ParamFlags.READWRITE)
microphone_capture_state = GObject.Property(
type=WebKit.MediaCaptureState, default=WebKit.MediaCaptureState.NONE, flags=GObject.ParamFlags.READWRITE
)
related_view = GObject.Property(type=WebKit.WebView, flags=GObject.ParamFlags.READWRITE)
settings = GObject.Property(type=WebKit.Settings, flags=GObject.ParamFlags.READWRITE)
user_content_manager = GObject.Property(type=WebKit.UserContentManager, flags=GObject.ParamFlags.READWRITE)
web_context = GObject.Property(type=WebKit.WebContext, flags=GObject.ParamFlags.READWRITE)
web_extension_mode = GObject.Property(
type=WebKit.WebExtensionMode, default=WebKit.WebExtensionMode.NONE, flags=GObject.ParamFlags.READWRITE
)
website_policies = GObject.Property(type=WebKit.WebsitePolicies, flags=GObject.ParamFlags.READWRITE)
zoom_level = GObject.Property(type=float, flags=GObject.ParamFlags.READWRITE)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.props.label = "WebKit.WebView\nplaceholder"
self.props.justify = Gtk.Justification.CENTER
class MrgDummyWebView(MrgGtkWidget):
object = GObject.Property(type=MrgDummyWebViewProxy, flags=GObject.ParamFlags.READWRITE)
def __init__(self, **kwargs):
super().__init__(**kwargs)

View File

@ -1,12 +1,12 @@
project( project(
'cambalache', 'c', 'cambalache', 'c',
version: '0.17.3', version: '0.17.2',
meson_version: '>= 0.50.0' meson_version: '>= 0.50.0'
) )
# File format version follows app version and only changes when there is a # File format version follows app version and only changes when there is a
# change that prevents older versions to load it. # change that prevents older versions to load it.
fileformatversion = '0.17.3' fileformatversion = '0.17.1'
python = import('python') python = import('python')
python_bin = python.find_installation('python3') python_bin = python.find_installation('python3')