WIP: total désordre, mais quel bonheur !

This commit is contained in:
Jean Sirmai 2022-01-11 19:09:55 +01:00
parent fbb0dfcfb6
commit 124b314271
Signed by: jean
GPG Key ID: FB3115C340E057E3
14 changed files with 828 additions and 56 deletions

View File

@ -102,6 +102,8 @@
<condition site="2" weight="2" node_id="7" parent="3" x="1"/> <condition site="2" weight="2" node_id="7" parent="3" x="1"/>
<condition site="0" weight="3" node_id="8" parent="6" x="1"/> <condition site="0" weight="3" node_id="8" parent="6" x="1"/>
<condition site="0" weight="4" node_id="9" parent="6" x="1"/> <condition site="0" weight="4" node_id="9" parent="6" x="1"/>
<condition site="0" weight="5" node_id="10" parent="8" x="1"/>
<condition site="9" weight="6" node_id="11" parent="1" x="1"/>
</conditions> </conditions>
<transitions> <transitions>
@ -117,7 +119,7 @@
</transition> </transition>
<transition id="move_a_dimer_to_west" date="1630000000" author="Ni moi !" <transition id="move_a_dimer_to_west" date="1630000000" author="Ni moi !"
parent="8" probability="1"> parent="10" probability="1">
<arrow site="1" weight="0" x="0"/> <arrow site="1" weight="0" x="0"/>
<arrow site="2" weight="0" x="1"/> <arrow site="2" weight="0" x="1"/>
@ -146,6 +148,26 @@
</transition> </transition>
<transition id="di da doo da da !" date="1630000000" author="Ni moi !"
parent="11" probability="1">
<arrow site="1" weight="0" x="0"/>
<arrow site="2" weight="0" x="1"/>
<arrow site="2" weight="1" x="0"/>
<arrow site="1" weight="1" x="1"/>
</transition>
<transition id="ba di bou bi dou whaaa..." date="1630000000" author="Ni moi !"
parent="11" probability="1">
<arrow site="1" weight="0" x="0"/>
<arrow site="2" weight="0" x="1"/>
<arrow site="2" weight="1" x="0"/>
<arrow site="1" weight="1" x="1"/>
</transition>
</transitions> </transitions>
</gem-graph-model> </gem-graph-model>

1
models/newick_first Normal file
View File

@ -0,0 +1 @@
('(b,(c,(d,(e,(f,g))h)i)a)')[0]

Binary file not shown.

248
src/engine.py Normal file
View File

@ -0,0 +1,248 @@
# import measures.MeasuresManager
# import rule.FormulasManager
# import rule.FormulasManagerAccess
# import session.ViewControls
# import state.StateManager
# import state.StateManagerLocal
# import views.MODEL
# import views.ViewsManagerAccess
# @see MonoThread
class Formula():
def getFormula():
return 0
def doActions():
pass
class ViewControls():
def isDoSelected():
return True
def execDo():
pass
class ViewsManagerAccess():
pass
class StateManagerLocal():
def getReferenceOrientation_1():
pass
class FormulasManager():
def iterateToFindAFormula():
return 1
def getFormula(formula_key):
return 0
class MeasuresManager():
def startMeasuringAFormulaEffect(formula_key):
pass
def endMeasuringAFormulaEffect(formula_key):
pass
class SingleTransition:
'''
SingleTransition is a loop with one interruption and two instructions:
if (session.MainView.isStartStopButtonSelected())
state.StateManagerLocal.chooseLocalOrigin(false)
new SingleTransition(true)
'''
is_done = False
elapsed = ''
present = 0
selected_formula = -1
undoStackSize = 100 # used by ViewControls (for image of the buffer state)
formula = [0, 1, 2]
x = []
y = []
z = []
o = [0, 1, 2]
DO_UNDO_REDO_comment = False
def __init__(self):
self.present = 0
# if (step_by_step) StateManagerLocal.circlePresentState()
if ViewControls.isDoSelected():
self.execute_do(self.prepare_do(False))
elif ViewControls.isUndoSelected():
SingleTransition.execute_undo(SingleTransition.prepare_undo(False))
elif ViewControls.isRedoSelected():
SingleTransition.execute_redo(SingleTransition.prepare_redo(False))
# if (ViewControls.undo_buffer < undoStackSize): do something
# ViewControls.setTimeBufferBar(ViewControls.undo_buffer)
# MainView.addElapsedTime() Clock should be independent from any view
def prepare_do(self, step_by_step) :
# ThreadsManager.addCycle() > nb_cycles ++ < no formula may be applied
selected_formula = FormulasManager.iterateToFindAFormula()
return selected_formula
def execute_do(self, formula_key):
# formula.doActions()
# print(" execute_do: formula key=" + formula_key +" ")
if formula_key < 0:
if StateManagerLocal.comment_origins:
print("execute_do failure: formula key=", formula_key)
return
MeasuresManager.startMeasuringAFormulaEffect(formula_key)
# print("execute_do "+ FormulasManager.formula.get(formula_key).name)
# TODO FormulasManager.getFormula().get(formula_key).doActions()
# for (i = 0 i < action.length i++): action[i].doAction ()
# StateManagerLocal.endRule(action_swap, action_name)}
MeasuresManager.endMeasuringAFormulaEffect(formula_key)
self.writePresentState(formula_key)
self.present += 1
if self.present == self.undoStackSize:
self.present = 0
# MainView.setStartStopButtonSelected(False)
# if (present == 1):
# MainView.setStartStopButtonSelected(False)
# out.println("MonoThread.execute_do > stop ! (present == 1)")
ViewControls.execDo()
# doRepaint()
if self.DO_UNDO_REDO_comment:
self.comment_do(formula_key)
def prepare_undo(self, step_by_step):
# MonoTest.present-- return MonoTest.f[MonoTest.present]
if (ViewControls.isUndoBufferEmpty()):
print("prepare_undo stop !")
# undo_buffer is always >= 0
else:
self.present -= 1
if self.present == -1:
self.present = self.undoStackSize - 1
ViewControls.execUndo()
self.formula_key = self.readPresentState(step_by_step)
# if (step_by_step) StateManagerLocal.circlePresentState()
return self.formula_key
def execute_undo(self, formula_key):
# formula.unDoActions() {for (i = 0 i < action.length i++) ...}
FormulasManager.getFormula().get(formula_key).unDoActions()
# for (i = 0 i < action.length i++) action[i].doAction ()
# StateManagerLocal.endRule(action_swap, action_name)
ViewControls.setRedoSelected()
# StateManagerLocal.circlePresentState()
# ThreadsManager.removeEfficientCycle() {nb_effective_cycles --}
self.doRepaint()
if self.DO_UNDO_REDO_comment:
self.comment_undo()
def prepare_redo(self, step_by_step):
# return MonoThread
# Test.f[MonoThreadTest.pStateManagerLocalresent]
self.formula_key = self.readPresentState(step_by_step)
# ThreadsManager.addEfficientCycle() # {nb_effective_cycles ++}
# if (step_by_step) StateManagerLocal.circlePresentState()
return self.formula_key
def execute_redo(self, formula_key):
# formula.doActions() {for (i = 0 i < action.length i++) ...}
# the redo_buffer is always >= 0
# (if the re_do buffer is empty, the re_do button is deactivated)
if not ViewControls.isRedoBufferEmpty():
FormulasManager.getFormula().get(formula_key).doActions()
# {for (i = 0 i < action.length i++) action[i].doAction()
# StateManagerLocal.endRule(action_swap, action_name)}
self.present += 1
if self.present == self.undoStackSize:
self.present = 0
ViewControls.execRedo()
ViewControls.setUndoSelected()
self.doRepaint()
if self.DO_UNDO_REDO_comment:
self.comment_redo()
def writePresentState(self, formula_key):
# x[present] = StateManagerLocal.local_space_origin_X ...
self.formula[self.present] = formula_key
self.o[self.present] = StateManagerLocal.getReferenceOrientation_1()
'''
switch(StateManager.space_dimension) { # no break in this switch
case THREE: z[present] = (byte) StateManagerLocal.local_space_origin_Z
case TWO: y[present] = (byte) StateManagerLocal.local_space_origin_Y
case ONE: x[present] = (byte) StateManagerLocal.local_space_origin_X
default: }
'''
def readPresentState(self, step_by_step):
# StateManagerLocal.local_space_origin_X = x [present] ...
'''
switch(StateManager.space_dimension) { # no break in this switch
case THREE : StateManagerLocal.local_space_origin_Z = z[present]
case TWO : StateManagerLocal.local_space_origin_Y = y[present]
case ONE : StateManagerLocal.local_space_origin_X = x[present]
default: }
'''
StateManagerLocal.setReferenceOrientation_1(self.o[self.present])
return self.formula[self.present]
def doRepaint(self):
# plus tard !
# ViewsManagerAccess.getView(MODEL.SPACE, "MonoThread.",
# "execute_do_undo_redo()").repaint()
pass
def comment_do(self, rank) :
if self.present == 0:
self.present = self.undoStackSize
print(" do -----> ", self.present,
" (", ViewControls.undo_buffer - 1,
"+1=", ViewControls.undo_buffer, " /",
ViewControls.redo_buffer,
" -", ViewControls.redo_buffer, ") xyzo (",
self.x[self.present - 1], ",",
self.y[self.present - 1], ",",
self.z[self.present - 1], ") ",
self.o[self.present - 1], " f=",
self.formula[self.present - 1])
if self.present == self.undoStackSize:
self.present = 0
def comment_undo(self):
# present ++ if (present == stack_size) present = 0
# This comment is triggered after present was decreased of one unit
print(" undo <--| ", self.present,
" (", (ViewControls.undo_buffer + 1),
"-1=", ViewControls.undo_buffer + " /",
ViewControls.redo_buffer - 1, "+1=",
ViewControls.redo_buffer, ") ", "xyzo (",
self.x[self.present], ",",
self.y[self.present], ",",
self.z[self.present], ") ",
self.o[self.present], " f=",
self.formula[self.present])
def comment_redo(self):
if self.present == 0:
self.present = self.undoStackSize
print(" redo |--> ", self.present,
" (" + (ViewControls.undo_buffer - 1),
"+1=" + ViewControls.undo_buffer + " /",
ViewControls.redo_buffer + 1, "-1=",
ViewControls.redo_buffer, ") xyzo (",
self.x[self.present - 1], ",",
self.y[self.present - 1], ",",
self.z[self.present - 1], ") ",
self.o[self.present - 1], " f=",
self.formula[self.present - 1])
if self.present == self.undoStackSize:
self.present = 0
SingleTransition()

18
src/erreur.py Normal file
View File

@ -0,0 +1,18 @@
class XXX:
present = 8
def __init__(self):
self.present = 0
print(self.present,
'UnboundLocalError: local variable referenced before assignment')
def do_something(self):
# instance.present = 5
# self.present = 7
pass
instance = XXX()
instance.do_something()
print(XXX.present, instance.present)

18
src/newick.py Normal file
View File

@ -0,0 +1,18 @@
# https://evolution.genetics.washington.edu/phylip/newicktree.html
# import io
import newick
# from newick import loads
tree = newick.loads('(b,(c,(d,(e,(f,g))h)i)a)')[0]
print(tree.ascii_art())
'''
from newick import loads
newick.loads('[a comment](a,b)c;', strip_comments=True)[0].newick '(a,b)c'
with io.open('../models/newick_first', encoding='utf8') as fp:
trees = loads(fp)
print(tree.ascii_art())
print(trees[0].name, [n.name for n in trees[0].descendants])
'''

View File

@ -1,12 +1,13 @@
# https://anytree.readthedocs.io/en/latest/_modules/anytree/node/nodemixin.html # https://anytree.readthedocs.io/en/latest/_modules/anytree/node/nodemixin.html
from anytree import NodeMixin, LevelOrderIter # , RenderTree from anytree import NodeMixin, LevelOrderIter # , RenderTree
# from newick import loads
import model import model
# TODO Contrôles de cohérence des données # TODO Contrôles de cohérence des données
# 1) node_id <> pas de doublons # 1) node_id <> pas de doublons
# 2) tout node doit avoir un node_parent_id # 2) tout node doit avoir un node_parent_id
# Process # Process
# 1) lors de l'adoption, le parent doit exister # 1) lors de l'adoption, le parent doit être une feuille et exister
class TreeNode(NodeMixin): class TreeNode(NodeMixin):

View File

@ -1,37 +0,0 @@
# from ete2 import Tree
from anytree import RenderTree
import rules_tree
tree = rules_tree.get_tree()
for pre, fill, node in RenderTree(tree):
treestr = u"%s%s" % (pre, node.id)
print(treestr.ljust(0))
print('\ntype: ', type(tree))
print('path: ', tree.path)
print('children: ', tree.children)
print('descendants[0]: ', tree.descendants[0])
print(tree.depth, ' < depth')
print(tree.is_leaf, ' < is_leaf')
print(tree.is_root, ' < is_root')
print(tree.height, ' < height')
print(tree.parent, ' < parent')
print(tree.ancestors, ' < ancestors')
print(tree.anchestors, ' < anchestors')
print(tree.siblings, ' < siblings')
print(len(tree.leaves), ' < len(tree.leaves)')
print(len(tree.path), ' < len(tree.path)\n')
for pre, fill, node in RenderTree(tree):
if node.path[len(node.path) - 1].is_leaf:
print('at depth', len(node.path),
'is rule', node.path[len(node.path) - 1].parent_id,
'whose path (tracked by conditions weights) is:', end=' ')
for i in range(0, len(node.path) - 1):
print(node.path[i].weight, ',', end='')
print(' transition', node.path[len(node.path) - 1].id)
print('\nNext step: single rule extraction from tree.',
' 😃️\nand learn how to use the Newick format.')
# http://etetoolkit.org/docs/2.3/tutorial/tutorial_trees.html

29
src/view_rule.py Normal file
View File

@ -0,0 +1,29 @@
from anytree import RenderTree
import rules_tree
tree = rules_tree.get_tree()
any_node = tree.children[1].children[0]
print('\nproperties of node: ', any_node.id)
print('type: ', type(any_node))
print('len(path): ', len(any_node.path))
print('nb children: ', len(any_node.children))
# print('descendants[0]: ', any_node.descendants[0])
print('depth ', any_node.depth)
print('is_leaf ', any_node.is_leaf)
print('is_root ', any_node.is_root)
print('height ', any_node.height)
print('parent ', any_node.parent)
print('nb ancestors ', len(any_node.ancestors))
print('nb anchestors ', len(any_node.anchestors))
print('siblings ', any_node.siblings)
print('nb (subtree.leaves) ', len(any_node.leaves), '\n')
for pre, fill, node in RenderTree(tree):
if node.path[len(node.path) - 1].is_leaf:
print('at depth', len(node.path),
'is rule', node.path[len(node.path) - 1].parent_id,
'whose path (tracked by conditions weights) is:', end=' ')
for i in range(0, len(node.path) - 1):
print(node.path[i].weight, ',', end='')
print(' transition is:', node.path[len(node.path) - 1].id)

40
src/view_tree.py Normal file
View File

@ -0,0 +1,40 @@
# from ete2 import Tree
from anytree import RenderTree
import rules_tree
tree = rules_tree.get_tree()
for pre, fill, node in RenderTree(tree):
treestr = u"%s%s" % (pre, node.id)
print(treestr.ljust(0))
'''
any_node = tree.children[1].children[0].children[0]
print('\nproperties of node: ', any_node.id)
print('type: ', type(any_node))
print('len(path): ', len(any_node.path))
print('nb children: ', len(any_node.children))
print('descendants[0]: ', any_node.descendants[0])
print('depth ', any_node.depth)
print('is_leaf ', any_node.is_leaf)
print('is_root ', any_node.is_root)
print('height ', any_node.height)
print('parent ', any_node.parent)
print('nb ancestors ', len(any_node.ancestors))
print('nb anchestors ', len(any_node.anchestors))
print('siblings ', any_node.siblings)
print('nb (subtree.leaves) ', len(any_node.leaves), '\n')
'''
'''
print()
for pre, fill, node in RenderTree(tree):
if node.path[len(node.path) - 1].is_leaf:
print('at depth', len(node.path),
'is rule', node.path[len(node.path) - 1].parent_id,
'whose path (tracked by conditions weights) is:', end=' ')
for i in range(0, len(node.path) - 1):
print(node.path[i].weight, ',', end='')
print(' transition is:', node.path[len(node.path) - 1].id)
print('\nNext step: learn how to use the Newick format.')
# http://etetoolkit.org/docs/2.3/tutorial/tutorial_trees.html
'''

221
ui/#GLArea.glade# Normal file
View File

@ -0,0 +1,221 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<!-- This file is temporary and meant to test graphic features -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hexpand">False</property>
<property name="vexpand">False</property>
<property name="window-position">center</property>
<property name="default-width">1860</property>
<property name="default-height">160</property>
<property name="gravity">static</property>
<property name="has-resize-grip">True</property>
<child>
<object class="GtkPaned">
<property name="name">tout ce qui est sous la 'header bar'</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkPaned">
<property name="name">Image 1D + contrôles</property>
<property name="height-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixbuf">espace 1D projet.jpg</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="height-request">18</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Zoom</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Filtres</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Apparences</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkPaned">
<property name="name">tout ce qui est sous l'image 1D et ses contrôles</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">transitions </property>
<property name="width-request">700</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">objets</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="can-default">True</property>
<property name="tooltip-text" translatable="yes">Salut ! Je suis la nouvelle barre de commandes.</property>
<property name="title" translatable="yes">Gem-graph</property>
<property name="has-subtitle">False</property>
<property name="spacing">2</property>
<property name="show-close-button">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">2</property>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">utilisateur (préférences)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="mon_bouton">
<property name="label" translatable="yes">modèle (load / save)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="toggled" handler="tilt" object="__glade_Hi" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">états / transitions</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">monitoring et contrôles / éditions</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>

View File

@ -6,10 +6,13 @@
<object class="GtkWindow"> <object class="GtkWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="hexpand">False</property>
<property name="vexpand">False</property>
<property name="window-position">center</property> <property name="window-position">center</property>
<property name="default-width">800</property> <property name="default-width">1860</property>
<property name="default-height">600</property> <property name="default-height">160</property>
<property name="gravity">static</property> <property name="gravity">static</property>
<property name="has-resize-grip">True</property>
<child> <child>
<object class="GtkPaned"> <object class="GtkPaned">
<property name="name">tout ce qui est sous la 'header bar'</property> <property name="name">tout ce qui est sous la 'header bar'</property>
@ -24,21 +27,7 @@
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkViewport"> <placeholder/>
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixbuf">espace 1D projet.jpg</property>
</object>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">

222
ui/GLArea.glade~ Normal file
View File

@ -0,0 +1,222 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<!-- This file is temporary and meant to test graphic features -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hexpand">False</property>
<property name="vexpand">False</property>
<property name="window-position">center</property>
<property name="default-width">1860</property>
<property name="default-height">160</property>
<property name="gravity">static</property>
<property name="has-resize-grip">True</property>
<child>
<object class="GtkPaned">
<property name="name">tout ce qui est sous la 'header bar'</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkPaned">
<property name="name">Image 1D + contrôles</property>
<property name="height-request">100</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">3</property>
<property name="margin-right">3</property>
<property name="hexpand">False</property>
<property name="vexpand">False</property>
<property name="resize-mode">immediate</property>
<property name="hscroll-policy">natural</property>
<property name="vscroll-policy">natural</property>
<property name="shadow-type">none</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixbuf">espace 1D projet.jpg</property>
</object>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="height-request">18</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Zoom</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Filtres</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Apparences</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkPaned">
<property name="name">tout ce qui est sous l'image 1D et ses contrôles</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">transitions </property>
<property name="width-request">700</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">objets</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="can-default">True</property>
<property name="tooltip-text" translatable="yes">Salut ! Je suis la nouvelle barre de commandes.</property>
<property name="title" translatable="yes">Gem-graph</property>
<property name="has-subtitle">False</property>
<property name="spacing">2</property>
<property name="show-close-button">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">2</property>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">utilisateur (préférences)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="mon_bouton">
<property name="label" translatable="yes">modèle (load / save)</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<signal name="toggled" handler="tilt" object="__glade_Hi" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">états / transitions</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">monitoring et contrôles / éditions</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>