Implemented work mode with GtkStacks

This commit is contained in:
Adrien Bourmault 2022-07-28 23:27:24 +02:00
parent b33e9806c7
commit d00e036a7e
No known key found for this signature in database
GPG Key ID: 6EB408FE0ACEC664
3 changed files with 135 additions and 18 deletions

View File

@ -65,18 +65,26 @@ class GemGraphApplication(Adw.Application):
def on_editmode_action(self, widget, _):
"""Callback for the app.editmode action."""
print('app.editmode action activated')
win = self.props.active_window
win.stack_switch_mode("edit")
def on_runmode_action(self, widget, _):
"""Callback for the app.runmode action."""
print('app.runmode action activated')
win = self.props.active_window
win.stack_switch_mode("run")
def on_presentmode_action(self, widget, _):
"""Callback for the app.presentmode action."""
print('app.presentmode action activated')
win = self.props.active_window
win.stack_switch_mode("presentation")
def on_togglesidebar_action(self, widget, _):
"""Callback for the app.togglesidebar action."""
print('app.togglesidebar action activated')
win = self.props.active_window
win.toggle_sidebar()
def create_action(self, name, callback, shortcuts=None):
"""Add an application action.

View File

@ -22,14 +22,61 @@ from gi.repository import Gtk
@Gtk.Template(filename='ui/gemgraph.ui')
class GemGraphWindow(Gtk.ApplicationWindow):
"""
Window class
"""
__gtype_name__ = 'main'
# label = Gtk.Template.Child()
main_stack = Gtk.Template.Child()
side_stack = Gtk.Template.Child()
main_paned = Gtk.Template.Child()
main_box_edit = Gtk.Template.Child()
main_box_run = Gtk.Template.Child()
main_box_presentation = Gtk.Template.Child()
side_box_edit = Gtk.Template.Child()
side_box_run = Gtk.Template.Child()
side_box_presentation = Gtk.Template.Child()
__STACK_OK = False
def __init__(self, **kwargs):
super().__init__(**kwargs)
def init_stack(self):
# Init both mode stacks
self.main_stack.add_named(self.main_box_edit, "main_box_edit")
self.main_stack.add_named(self.main_box_run, "main_box_run")
self.main_stack.add_named(self.main_box_presentation,
"main_box_presentation")
self.side_stack.add_named(self.side_box_edit, "side_box_edit")
self.side_stack.add_named(self.side_box_run, "side_box_run")
self.side_stack.add_named(self.side_box_presentation,
"side_box_presentation")
def toggle_sidebar(self):
"""
Sets the sidebar position to open or closed
"""
position = self.main_paned.get_position()
if position != 0:
self.main_paned.set_position(0)
else:
self.main_paned.set_position(250)
def stack_switch_mode(self, mode):
"""
Sets the active mode from stack. Mode is the name of the mode (string)
"""
if not self.__STACK_OK:
self.init_stack()
self.__STACK_OK = True
main_newmode = self.main_stack.set_visible_child_name ("main_box_"+mode)
side_newmode = self.side_stack.set_visible_child_name ("side_box_"+mode)
class AboutDialog(Gtk.AboutDialog):
def __init__(self, parent):

View File

@ -30,7 +30,7 @@
<object class="GtkToggleButton" id="main_button_sidebar">
<property name="icon-name">sidebar-show-symbolic</property>
<property name="tooltip-text" translatable="yes">Display/hide sidebar</property>
<property name="action-name">app.togglesidebar</property>
<property name="action-name">app.togglesidebar</property>
</object>
<!-- <object class="GtkLabel" id="is_modified"> -->
<!-- <property name="halign">end</property> -->
@ -46,20 +46,82 @@
<object class="GtkPaned" id="main_paned">
<property name="position">250</property>
<child>
<object class="GtkFrame" id="main_sideframe">
<property name="opacity">0.0</property>
<object class="GtkStack" id="side_stack">
<child>
<object class="GtkBox" id="side_box_run">
<property name="halign">center</property>
<child>
<object class="GtkLabel" id="labelsiderun">
<property name="justify">center</property>
<property name="label" translatable="yes">&lt;b&gt;Sidebar: run mode&lt;/b&gt;</property>
<property name="use-markup">True</property>
</object>
</child>
</object>
<object class="GtkBox" id="side_box_presentation">
<property name="halign">center</property>
<child>
<object class="GtkLabel" id="labelsidepresentation">
<property name="justify">center</property>
<property name="label" translatable="yes">&lt;b&gt;Sidebar: presentation mode&lt;/b&gt;</property>
<property name="use-markup">True</property>
</object>
</child>
</object>
<object class="GtkBox" id="side_box_edit">
<property name="halign">center</property>
<child>
<object class="GtkLabel" id="labelsideedit">
<property name="justify">center</property>
<property name="label" translatable="yes">&lt;b&gt;Sidebar: edit mode&lt;/b&gt;</property>
<property name="use-markup">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkFrame" id="main_frame">
<property name="opacity">0.0</property>
<object class="GtkStack" id="main_stack">
<property name="halign">center</property>
<child>
<object class="GtkBox" id="main_box_run">
<child>
<object class="GtkLabel">
<property name="halign">center</property>
<property name="label" translatable="yes">&lt;b&gt;Main zone: run mode&lt;/b&gt;</property>
<property name="use-markup">True</property>
</object>
</child>
</object>
<object class="GtkBox" id="main_box_presentation">
<property name="halign">center</property>
<child>
<object class="GtkLabel">
<property name="halign">center</property>
<property name="label" translatable="yes">&lt;b&gt;Main zone: presentation mode&lt;/b&gt;</property>
<property name="use-markup">True</property>
</object>
</child>
</object>
<object class="GtkBox" id="main_box_edit">
<property name="halign">center</property>
<child>
<object class="GtkLabel">
<property name="halign">center</property>
<property name="label" translatable="yes">&lt;b&gt;Main zone: edit mode&lt;/b&gt;</property>
<property name="use-markup">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</template>
<menu id="main_menu">
<menu id="main_menu">
<section>
<item>
<attribute name="label" translatable="yes">_Preferences</attribute>
@ -74,30 +136,30 @@
<attribute name="action">app.about</attribute>
</item>
</section>
</menu>
<menu id="mode_menu">
</menu>
<menu id="mode_menu">
<section>
<attribute name="label" translatable="yes">Switch session mode</attribute>
<item>
<attribute name="icon">document-edit-symbolic</attribute>
<attribute name="icon">document-edit-symbolic</attribute>
<attribute name="label" translatable="yes">_Edit</attribute>
<attribute name="action">app.editmode</attribute>
<attribute name="use-icon">True</attribute>
<attribute name="action">app.editmode</attribute>
<attribute name="use-icon">True</attribute>
</item>
<item>
<attribute name="icon">run-start-symbolic</attribute>
<attribute name="icon">run-start-symbolic</attribute>
<attribute name="label" translatable="yes">_Run</attribute>
<attribute name="action">app.runmode</attribute>
<attribute name="use-icon">True</attribute>
<attribute name="action">app.runmode</attribute>
<attribute name="use-icon">True</attribute>
</item>
<item>
<attribute name="icon">run-start-symbolic</attribute>
<attribute name="label" translatable="yes">_Presentation</attribute>
<attribute name="action">app.presentmode</attribute>
<attribute name="use-icon">True</attribute>
<attribute name="action">app.presentmode</attribute>
<attribute name="use-icon">True</attribute>
</item>
</section>
</menu>
</menu>
</interface>