gtk4: settings dialog

This commit is contained in:
deltragon 2024-01-02 13:36:45 +01:00
parent dca82f090c
commit 4415da6f3b
No known key found for this signature in database
GPG Key ID: 41F552553C6D94B5
4 changed files with 360 additions and 856 deletions

View File

@ -20,76 +20,49 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkImage" id="img_properties">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-properties</property>
</object>
<object class="GtkImage" id="img_delete">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-delete</property>
</object>
<requires lib="gtk" version="4.0"/>
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">3</property>
<property name="vexpand">0</property>
<child>
<object class="GtkLabel" id="lbl_name">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="valign">center</property>
<property name="label" translatable="yes">label</property>
<property name="xalign">0</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_properties">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="receives-default">1</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="image">img_properties</property>
<property name="always_show_image">True</property>
<property name="icon-name">gtk-properties</property>
<style>
<class name="btn_circle"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_delete">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="image">img_delete</property>
<property name="always_show_image">True</property>
<property name="icon-name">edit-delete</property>
<style>
<class name="btn_circle"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</interface>

View File

@ -20,127 +20,88 @@
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkImage" id="img_properties">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-properties</property>
</object>
<requires lib="gtk" version="4.0"/>
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="vexpand">0</property>
<child>
<object class="GtkImage" id="img_plugin_icon">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="stock">gtk-about</property>
<property name="icon-name">gtk-about</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="visible">1</property>
<property name="margin-start">5</property>
<property name="orientation">vertical</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<child>
<object class="GtkLabel" id="lbl_plugin_name">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">end</property>
<property name="label" translatable="yes">Plugin Name</property>
<property name="xalign">0.05000000074505806</property>
<property name="yalign">1</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<style>
<class name="lbl_plugin_name"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="lbl_plugin_description">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="halign">start</property>
<property name="valign">start</property>
<property name="label" translatable="yes">Plugin Description</property>
<property name="xalign">0.05000000074505806</property>
<property name="yalign">0</property>
<property name="hexpand">1</property>
<property name="vexpand">1</property>
<style>
<class name="lbl_plugin_description"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="visible">1</property>
<property name="spacing">5</property>
<child>
<object class="GtkSwitch" id="switch_enable">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="halign">end</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_properties">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<!-- TODO: check that this is right, had packing:fill 0 -->
<property name="visible">1</property>
<property name="can-focus">1</property>
<property name="receives-default">1</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="image">img_properties</property>
<property name="always_show_image">True</property>
<property name="icon-name">gtk-properties</property>
<style>
<class name="btn_circle"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</interface>

File diff suppressed because it is too large Load Diff

View File

@ -55,7 +55,6 @@ class SettingsDialog:
self.warn_bar_rpc_server_shown = False
builder = utility.create_gtk_builder(SETTINGS_DIALOG_GLADE)
builder.connect_signals(self)
self.window = builder.get_object('window_settings')
self.box_short_breaks = builder.get_object('box_short_breaks')
@ -80,18 +79,26 @@ class SettingsDialog:
self.info_bar_long_break.hide()
self.warn_bar_rpc_server.hide()
self.window.connect("close-request", self.on_window_delete)
builder.get_object('reset_menu').connect('clicked', self.on_reset_menu_clicked)
self.spin_short_break_interval.connect('value-changed', self.on_spin_short_break_interval_change)
self.info_bar_long_break.connect('close', self.on_info_bar_long_break_close)
self.info_bar_long_break.connect('response', self.on_info_bar_long_break_close)
self.spin_long_break_interval.connect('value-changed', self.on_spin_long_break_interval_change)
self.warn_bar_rpc_server.connect('close', self.on_warn_bar_rpc_server_close)
self.warn_bar_rpc_server.connect('response', self.on_warn_bar_rpc_server_close)
builder.get_object('btn_add_break').connect('clicked', self.add_break)
# Set the current values of input fields
self.__initialize(config)
# Update relative states
# GtkSwitch state-set signal is available only from 3.14
if Gtk.get_minor_version() >= 14:
# Add event listener to postpone switch
self.switch_postpone.connect('state-set', self.on_switch_postpone_activate)
self.on_switch_postpone_activate(self.switch_postpone, self.switch_postpone.get_active())
# Add event listener to RPC server switch
self.switch_rpc_server.connect('state-set', self.on_switch_rpc_server_activate)
self.on_switch_rpc_server_activate(self.switch_rpc_server, self.switch_rpc_server.get_active())
# Add event listener to postpone switch
self.switch_postpone.connect('state-set', self.on_switch_postpone_activate)
self.on_switch_postpone_activate(self.switch_postpone, self.switch_postpone.get_active())
# Add event listener to RPC server switch
self.switch_rpc_server.connect('state-set', self.on_switch_rpc_server_activate)
self.on_switch_rpc_server_activate(self.switch_rpc_server, self.switch_rpc_server.get_active())
self.initializing = False
def __initialize(self, config):
@ -103,7 +110,7 @@ class SettingsDialog:
self.__create_break_item(long_break, False)
for plugin_config in utility.load_plugins_config(config):
self.box_plugins.pack_start(self.__create_plugin_item(plugin_config), False, False, 0)
self.box_plugins.append(self.__create_plugin_item(plugin_config))
self.spin_short_break_duration.set_value(config.get('short_break_duration'))
self.spin_long_break_duration.set_value(config.get('long_break_duration'))
@ -152,7 +159,7 @@ class SettingsDialog:
)
)
box.set_visible(True)
parent_box.pack_start(box, False, False, 0)
parent_box.append(box)
return box
def on_reset_menu_clicked(self, button):
@ -258,7 +265,7 @@ class SettingsDialog:
"""
Show the SettingsDialog.
"""
self.window.show_all()
self.window.present()
def on_switch_postpone_activate(self, switch, state):
"""