gtk-stream 0.10__py3-none-any.whl → 0.11.1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
gtk_stream/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.10'
16
- __version_tuple__ = version_tuple = (0, 10)
15
+ __version__ = version = '0.11.1'
16
+ __version_tuple__ = version_tuple = (0, 11, 1)
gtk_stream/application.py CHANGED
@@ -19,14 +19,33 @@ from . import Gtk, GLib, Gdk
19
19
  from .common import printEvent
20
20
  from .properties import parse_property, get_prop_type, set_parse_prop
21
21
 
22
- def piloted(f):
22
+ class _Object:
23
+ pass
24
+
25
+ def app_message(name, store = None):
23
26
  """A decorator for methods that are both called from the pilot
24
27
  application and need access to the gtk main thread"""
25
- def ret(self, *args, **kwargs):
26
- def cb():
27
- f(self, *args, **kwargs)
28
- self.run_when_idle(cb)
29
- return ret
28
+ def app_message_f(f):
29
+ def ret(self, *args, **kwargs):
30
+ def cb():
31
+ f(self, *args, **kwargs)
32
+ self.run_when_idle(cb)
33
+ ret.__tag_name__ = name
34
+ ret.__store__ = store
35
+ return ret
36
+ return app_message_f
37
+
38
+ def single_store():
39
+ store = _Object()
40
+ def setChild(child):
41
+ store.child = child
42
+ return (lambda: store.child, setChild, None)
43
+ def multiple_store():
44
+ children = []
45
+ return (lambda: children, children.append, None)
46
+ def style_store():
47
+ style = []
48
+ return (lambda: " ".join(style),None, style.append)
30
49
 
31
50
  class GtkStreamApp(Gtk.Application):
32
51
  def __init__(self, logger, name = None, **kwargs):
@@ -57,7 +76,7 @@ class GtkStreamApp(Gtk.Application):
57
76
  if id is not None:
58
77
  self.namedWidgets[id] = w
59
78
 
60
- @piloted
79
+ @app_message('file-dialog')
61
80
  def openFileDialog(self, id, parent):
62
81
  dialog = Gtk.FileDialog()
63
82
  dialog.props.modal = True
@@ -72,45 +91,50 @@ class GtkStreamApp(Gtk.Application):
72
91
 
73
92
  dialog.open(parent = self.namedWindows[parent], callback = on_choose)
74
93
 
75
- @piloted
94
+ @app_message('window', single_store)
76
95
  def newWindow(self, document, id, **attrs):
77
96
  win = Gtk.Window(application=self)
78
97
  for (attr_name, attr_val) in attrs.items():
98
+ self.logger.debug("Setting attr '%s' on window", attr_name)
79
99
  set_parse_prop(self, win, attr_name, attr_val)
80
100
  self.namedWindows[id] = win
81
101
  win.set_child(document.render())
82
102
  win.connect('close-request', printEvent(self.logger, 'close-request', id))
83
103
  win.present()
84
104
 
85
- @piloted
105
+ @app_message('style', style_store)
86
106
  def addStyle(self, style):
87
107
  provider = Gtk.CssProvider()
88
108
  provider.load_from_data(style)
89
109
  Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
90
110
 
91
- @piloted
111
+ @app_message('add-icon-path')
92
112
  def addIconPath(self, path):
93
113
  theme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default())
94
114
  theme.add_search_path(path)
95
115
 
96
- @piloted
116
+ @app_message('close-window')
97
117
  def closeWindow(self, id):
98
118
  self.namedWindows[id].close()
99
119
 
100
- @piloted
120
+ @app_message('remove')
101
121
  def removeWidget(self, id):
102
122
  w = self.namedWidgets[id]
103
123
  w.get_parent().remove(w)
104
124
 
105
- @piloted
106
- def insertWidget(self, to, document):
107
- if to in self.namedWidgets:
108
- w = self.namedWidgets[to]
125
+ @app_message('insert', multiple_store)
126
+ def insertWidgets(self, documents, into):
127
+ for doc in documents:
128
+ self.insertWidget(doc, into)
129
+
130
+ def insertWidget(self, document, into):
131
+ if into in self.namedWidgets:
132
+ w = self.namedWidgets[into]
109
133
  w.insert_child(document)
110
134
  else:
111
- raise Exception(f"Error: unknown widget id '{to}'")
135
+ raise Exception(f"Error: unknown widget id '{into}'")
112
136
 
113
- @piloted
137
+ @app_message('set-prop')
114
138
  def setProp(self, id, name, value):
115
139
  w = self.namedWidgets[id]
116
140
  w.set_property(name, parse_property(get_prop_type(w.__class__, name), value)(self))
@@ -6,6 +6,7 @@ from .classes.ProgressBar import ProgressBar
6
6
  from .classes.Separator import Separator
7
7
 
8
8
  from .classes.Button import Button, LinkButton
9
+ from .classes.Scale import Scale
9
10
  from .classes.Dropdown import Dropdown, Item
10
11
  from .classes.Switch import Switch
11
12
  from .classes.Entry import Entry
@@ -15,7 +15,6 @@
15
15
  # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
16
 
17
17
  from ... import Gtk
18
- from ...common import printEvent
19
18
  from .. import Document
20
19
 
21
20
  class Button(Document):
@@ -24,7 +23,7 @@ class Button(Document):
24
23
  super().__init__(app, id = id, **kwargs)
25
24
  def render_raw(self):
26
25
  button = Gtk.Button()
27
- button.connect('clicked', printEvent(self.app.logger, 'clicked', self.id))
26
+ self.connect_event(button, 'clicked', 'clicked')
28
27
  return button
29
28
  def insert_child(self, w, d):
30
29
  w.set_child(d.render())
@@ -35,7 +34,9 @@ class LinkButton(Button):
35
34
  super().__init__(app, id=id, **kwargs)
36
35
  def render_raw(self):
37
36
  button = Gtk.LinkButton()
38
- button.connect('activate-link', printEvent(self.app.logger, 'clicked', self.id, True))
37
+ self.connect_event(
38
+ button, 'activate-link', 'clicked',
39
+ retval = True)
39
40
  return button
40
41
  def insert_child(self, w, d):
41
42
  w.set_child(d.render())
@@ -15,15 +15,21 @@
15
15
  # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
16
 
17
17
  from ...properties import parse_property, get_prop_type
18
+ from ...common import printEvent
18
19
 
19
20
  class Document:
20
21
  __g_class__ = None
21
22
  def __init__(self, app, id = None, **attrs):
22
23
  self.id = id
23
24
  self.app = app
24
- self.props = { attr: parse_property(get_prop_type(self.__g_class__, attr), val) for (attr, val) in attrs.items() }
25
+ self.props = {
26
+ attr: parse_property(get_prop_type(self.__g_class__, attr), val)
27
+ for (attr, val) in attrs.items()
28
+ }
25
29
  self.children = []
26
30
 
31
+ def connect_event(self, w, event, name, **printEvent_kwargs):
32
+ w.connect(event, printEvent(self.app.logger, name, self.id, **printEvent_kwargs))
27
33
  def add_child(self, child):
28
34
  self.children.append(child)
29
35
 
@@ -16,7 +16,6 @@
16
16
 
17
17
  from ... import Gtk, Gio, GObject
18
18
  from .. import Document
19
- from ...common import printEvent
20
19
 
21
20
  class Item(Document):
22
21
  def __init__(self, app, value, **kwargs):
@@ -57,9 +56,14 @@ class Dropdown(Document):
57
56
  factory.connect("setup", on_list_setup)
58
57
  factory.connect("bind", on_list_bind)
59
58
 
60
- ret = Gtk.DropDown(model=model, expression=Gtk.PropertyExpression.new(_ItemObject, None, 'item_value'), factory=factory)
59
+ ret = Gtk.DropDown(
60
+ model=model,
61
+ expression=Gtk.PropertyExpression.new(_ItemObject, None, 'item_value'),
62
+ factory=factory)
61
63
 
62
- ret.connect('notify::selected-item', printEvent(self.app.logger, 'selected', self.id, get_data = lambda w,_: w.get_selected_item().value))
64
+ self.connect_event(
65
+ ret, 'notify::selected-item', 'selected',
66
+ get_data = lambda w,_: w.get_selected_item().value)
63
67
  return ret
64
68
  def insert_child(self, w, d):
65
69
  pass
@@ -15,7 +15,6 @@
15
15
  # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
16
 
17
17
  from ... import Gtk
18
- from ...common import printEvent
19
18
  from .. import Document
20
19
 
21
20
  class Entry(Document):
@@ -24,5 +23,8 @@ class Entry(Document):
24
23
  super().__init__(app, id = id, **kwargs)
25
24
  def render_raw(self):
26
25
  entry = Gtk.Entry()
27
- entry.connect('changed', printEvent(self.app.logger, 'changed', self.id, get_data = lambda _: entry.get_text()))
26
+ self.connect_event(
27
+ entry, 'changed', 'changed',
28
+ get_data = lambda _: entry.get_text()
29
+ )
28
30
  return entry
@@ -0,0 +1,30 @@
1
+ # Gtk-Stream : A stream-based GUI protocol
2
+ # Copyright (C) 2024 Marc Coiffier
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
+
17
+ from ... import Gtk
18
+ from .. import Document
19
+
20
+ class Scale(Document):
21
+ __g_class__ = Gtk.Scale
22
+ def __init__(self, app, id, **kwargs):
23
+ super().__init__(app, id = id, **kwargs)
24
+ def render_raw(self):
25
+ scale = Gtk.Scale()
26
+ self.connect_event(
27
+ scale, 'value-changed', 'changed',
28
+ get_data = lambda _: str(scale.get_value())
29
+ )
30
+ return scale
@@ -15,7 +15,6 @@
15
15
  # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
16
 
17
17
  from ... import Gtk
18
- from ...common import printEvent
19
18
  from .. import Document
20
19
  from ...properties import parse_property
21
20
 
@@ -26,7 +25,8 @@ class Switch(Document):
26
25
  self.managed = parse_property('gboolean', managed)(app)
27
26
  def render_raw(self):
28
27
  ret = Gtk.Switch()
29
- ret.connect('state-set', printEvent(self.app.logger, 'switch', self.id,
30
- retval = self.managed,
31
- get_data = lambda _,state: "on" if state else "off"))
28
+ self.connect_event(
29
+ ret, 'state-set', 'switch',
30
+ retval = self.managed,
31
+ get_data = lambda _,state: "on" if state else "off")
32
32
  return ret
gtk_stream/parser.py CHANGED
@@ -14,6 +14,7 @@
14
14
  # You should have received a copy of the GNU General Public License
15
15
  # along with this program. If not, see <https://www.gnu.org/licenses/>.
16
16
 
17
+ import functools
17
18
  import threading
18
19
  import signal
19
20
  import sys
@@ -24,9 +25,6 @@ from . import documents as docs
24
25
 
25
26
  from .application import GtkStreamApp
26
27
 
27
- class _Object:
28
- pass
29
-
30
28
  WIDGET_DOCUMENTS = {
31
29
  'progress-bar' : docs.ProgressBar,
32
30
  'label' : docs.Label,
@@ -49,7 +47,9 @@ WIDGET_DOCUMENTS = {
49
47
  'stack' : docs.Stack,
50
48
  'flow-box' : docs.FlowBox,
51
49
  'flow-box-prepend': docs.FlowBoxPrepend,
52
- 'entry' : docs.Entry
50
+ 'entry' : docs.Entry,
51
+ 'scale' : docs.Scale
52
+
53
53
  }
54
54
 
55
55
  class GtkStreamXMLHandler(sax.ContentHandler):
@@ -109,90 +109,48 @@ class GtkStreamXMLHandler(sax.ContentHandler):
109
109
  self.quit_application()
110
110
  signal.signal(signal.SIGINT, on_sigint)
111
111
 
112
+ # Get all messages directly from the application
113
+ # class. This allows defining new messages without
114
+ # touching the parser
115
+ self.messages = {
116
+ f.__tag_name__: self.startMessage(functools.partial(f,self.app), f.__store__)
117
+ for f in GtkStreamApp.__dict__.values()
118
+ if hasattr(f, '__tag_name__')
119
+ }
120
+ self.logger.debug("Messages: %s", self.messages)
121
+
112
122
  self.transition_enter = self.transE_message
113
123
  self.transition_leave = self.transL_tag('application', self.transE_final, self.transL_final)
114
124
  case _:
115
125
  raise Exception("Error: expected 'application' tag")
116
- def transE_message(self, name, attrs):
117
- leave_parent = self.transition_leave
118
- match name:
119
- case 'style':
120
- style = _Object()
121
- style.chars = []
122
- def onchars(s):
123
- style.chars.append(s)
124
- def leave():
125
- self.transition_chars = self.ignore_chars
126
- self.app.addStyle(" ".join(style.chars))
127
- self.transition_chars = onchars
128
- self.transition_enter = self.transE_final
129
- self.transition_leave = self.transL_tag('style', self.transE_message, leave_parent, leave)
130
-
131
- case 'add-icon-path':
132
- if 'path' in attrs:
133
- def leave():
134
- self.app.addIconPath(attrs['path'])
135
- self.transition_enter = self.transE_final
136
- self.transition_leave = self.transL_tag('add-icon-path', self.transE_message, leave_parent, leave)
137
-
138
- case 'window':
139
- if 'id' in attrs:
140
- store = _Object()
141
- def leave():
142
- self.app.newWindow(store.child, **attrs)
143
- def setChild(c):
144
- store.child = c
145
- self.transition_enter = self.transE_addChild(setChild)
146
- self.transition_leave = self.transL_tag('window', self.transE_message, leave_parent, leave)
147
- else:
148
- raise Exception("Error: expected attribute 'id' in 'window' tag")
149
-
150
- case 'file-dialog':
151
- id = attrs.get('id')
152
- parent = attrs.get('parent')
153
- if id != None and parent != None:
154
- self.app.openFileDialog(id, parent)
155
- self.transition_enter = self.transE_final
156
- self.transition_leave = self.transL_tag('file-dialog', self.transE_message, leave_parent)
157
- else:
158
- raise Exception("Error: expected 'id' and 'parent' attributes on 'file-chooser'")
159
-
160
- case 'close-window':
161
- if 'id' in attrs:
162
- def leave():
163
- self.app.closeWindow(attrs['id'])
164
- self.transition_enter = self.transE_final
165
- self.transition_leave = self.transL_tag('close-window', self.transE_message, leave_parent, leave)
166
- else:
167
- raise Exception("Error: expected 'id' attribute in 'close-window' tag")
168
126
 
169
- case 'set-prop':
170
- self.app.setProp(**attrs)
127
+ def startMessage(self, f, child = None):
128
+ if child != None:
129
+ def ret(name,attrs):
130
+ getC, setC, setChars = child()
131
+ old_chars = self.transition_chars
132
+ def leave():
133
+ if setChars != None:
134
+ self.transition_chars = old_chars
135
+ f(getC(),**attrs)
136
+ if setChars != None:
137
+ self.transition_chars = setChars
138
+ self.transition_enter = self.transE_addChild(setC)
139
+ self.transition_leave = self.transL_tag(name, self.transE_message, self.transition_leave, leave)
140
+ else:
141
+ def ret(name, attrs):
142
+ def leave():
143
+ f(**attrs)
171
144
  self.transition_enter = self.transE_final
172
- self.transition_leave = self.transL_tag('set-prop', self.transE_message, leave_parent)
173
-
174
- case 'insert':
175
- if 'into' in attrs:
176
- children = []
177
- def leave():
178
- for child in children:
179
- self.app.insertWidget(attrs['into'], child)
180
- self.transition_enter = self.transE_addChild(lambda child: children.append(child))
181
- self.transition_leave = self.transL_tag('insert', self.transE_message, leave_parent, leave)
182
- else:
183
- raise Exception("Expected 'to' attribute of 'append' message")
184
-
185
- case 'remove':
186
- if 'id' in attrs:
187
- def leave():
188
- self.app.removeWidget(attrs['id'])
189
- self.transition_enter = self.transE_final
190
- self.transition_leave = self.transL_tag('remove', self.transE_message, leave_parent, leave)
191
- else:
192
- raise Exception("Expected 'id' attribute of 'remove' message")
145
+ self.transition_leave = self.transL_tag(name, self.transE_message, self.transition_leave, leave)
146
+ return ret
193
147
 
194
- case _:
195
- raise Exception(f"Error: unknown message '{name}'")
148
+ def transE_message(self, name, attrs):
149
+ start = self.messages.get(name)
150
+ if start != None:
151
+ start(name,attrs)
152
+ else:
153
+ raise Exception(f"Error: unknown message '{name}'")
196
154
 
197
155
  def transE_addChild(self, addChild):
198
156
  def ret(name, attrs):
@@ -204,7 +162,7 @@ class GtkStreamXMLHandler(sax.ContentHandler):
204
162
  self.transition_enter = self.transE_addChild(lambda child: doc.add_child(child))
205
163
  self.transition_leave = self.transL_tag(name, self.transE_addChild(addChild), leave_parent)
206
164
  else:
207
- raise Exception(f"Error: Unknown widget {name}")
165
+ raise Exception(f"Error: Unknown widget type '{name}'")
208
166
  return ret
209
167
 
210
168
  def characters(self, s):
gtk_stream/properties.py CHANGED
@@ -36,11 +36,24 @@ def _parse_searchMode_property(val):
36
36
  return _const(Gtk.StringFilterMatchMode.SUBSTRING)
37
37
  case _:
38
38
  return _const(Gtk.StringFilterMatchMode.PREFIX)
39
+ def _parse_adjustment_property(val):
40
+ adj = Gtk.Adjustment()
41
+ start, end, *rest = val.split(':')
42
+ adj.set_lower(int(start))
43
+ adj.set_upper(int(end))
44
+ if len(rest) > 0:
45
+ default = rest[0]
46
+ else:
47
+ default = start
48
+ adj.set_value(int(default))
49
+ return _const(adj)
39
50
  def _parse_css_classes_property(val):
40
51
  return _const(val.split())
41
52
  def _parse_widget_property(val):
42
53
  return lambda app: app.namedWidgets[val]
43
-
54
+ def _parse_window_property(val):
55
+ return lambda app: app.namedWindows[val]
56
+
44
57
  _PARSE_TYPE_PROPERTY = {
45
58
  'GStrv' : _parse_css_classes_property,
46
59
  'GtkOrientation' : _parse_orientation_property,
@@ -50,6 +63,8 @@ _PARSE_TYPE_PROPERTY = {
50
63
  'gboolean' : _parse_boolean_property,
51
64
  'GtkStringFilterMatchMode' : _parse_searchMode_property,
52
65
  'GtkWidget' : _parse_widget_property,
66
+ 'GtkWindow' : _parse_window_property,
67
+ 'GtkAdjustment' : _parse_adjustment_property,
53
68
  'gchararray' : _const,
54
69
  }
55
70
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gtk-stream
3
- Version: 0.10
3
+ Version: 0.11.1
4
4
  Summary: A simple stream-oriented GUI protocol
5
5
  Author-email: Marc Coiffier <marc.coiffier@univ-grenoble-alpes.fr>
6
6
  Project-URL: Homepage, https://coiffier.net/projects/gtk-stream/
@@ -0,0 +1,31 @@
1
+ gtk_stream/__init__.py,sha256=y6JLknVFexWrSo_Zl7-TXrPR6EQ5XVMeFO1bUzLN9Lg,98
2
+ gtk_stream/_version.py,sha256=GfnRHfD9z98AbNAoXaNE50CPUnbpEikyDWn-_mn0J2Q,413
3
+ gtk_stream/application.py,sha256=uFquTXCV0fbGlSURBmjrg9BK3Enf9N0_WKX6Lv-5Fko,4993
4
+ gtk_stream/command_line.py,sha256=Ej4mmPiuYjr5-1JrvjGK0BDitKUCfVEI9uHp1p_FAr4,1520
5
+ gtk_stream/common.py,sha256=xdscxYgBg_Ux6iyk26gB-AMSgoUIqlZUPgso5YS_gKE,2106
6
+ gtk_stream/parser.py,sha256=LOCGoTT_L5Qf29YJ2wFfTYLHtH0al-QjpFWf9HEHYxU,6561
7
+ gtk_stream/properties.py,sha256=Pgu59t3K-SkHXCZzkrk2DU8ODtjOhkZmf7dLqDYiDqc,3116
8
+ gtk_stream/documents/__init__.py,sha256=T9mIonSi9DWrpXQzbjq0s0TPU0hB7HylfhMA20OfWIg,831
9
+ gtk_stream/documents/classes/Box.py,sha256=d01o2-JQ3-k0VjvvY8E7mly-u_f1v1NqYz1IDjHZLUo,1381
10
+ gtk_stream/documents/classes/Button.py,sha256=21bVI7DUWmiusboxdsimTgcqKtLqzQydhS9ifIt4R64,1512
11
+ gtk_stream/documents/classes/Document.py,sha256=eZ-nT62UfO_ZUsxOR89hFLiBzpxMuNlbcjdZ4yJIzZo,2356
12
+ gtk_stream/documents/classes/Dropdown.py,sha256=8fIUX1HCWIjUfKLPy9NYsW6OskhkontoNDTsCZ7qKxw,2446
13
+ gtk_stream/documents/classes/Entry.py,sha256=KcBwjSu4tI30bQxPlSFSLPxFEUbTaqAdoAzd0XSQciY,1112
14
+ gtk_stream/documents/classes/FlowBox.py,sha256=UoVYS2j_osOV-IgbVoaqluTBCiaXus5dq2e9qhAu2Xo,1225
15
+ gtk_stream/documents/classes/Frame.py,sha256=zAZvsT-YTZMijsgk7p0YVf6siAmFoCCSXouZo9XDpsA,1222
16
+ gtk_stream/documents/classes/Grid.py,sha256=jDJ9U1GJZ45hi1VvPsCwFILN7CwEkgjqYqhTzMdtX9o,1249
17
+ gtk_stream/documents/classes/Label.py,sha256=bBNBTvGs6fM8uLf4EDb2Ro8FmCeS27cnU1Ao-44nRYs,1023
18
+ gtk_stream/documents/classes/Paned.py,sha256=q1goKJMWBg1d3hS0eanPBxzBqLB-Pz5hUnH9N-RXXh8,1392
19
+ gtk_stream/documents/classes/Picture.py,sha256=QCLQNuQxfXmaasd-bPgXxJZYyc1e1DQkLdxCZ39gvlI,1251
20
+ gtk_stream/documents/classes/ProgressBar.py,sha256=NPJtP3qaKiZUEAYEHZk4FEoWSFn2KVorI2SVb8cDnW0,966
21
+ gtk_stream/documents/classes/Scale.py,sha256=6rW6sBCdpPaqgDEGUPZi5UR8CT3bPmaZQqXXhnl-oaw,1124
22
+ gtk_stream/documents/classes/ScrolledWindow.py,sha256=WaTPgz6GBC-hjH83SQT2OGUdCapHAgO3xEmSMJZ8q70,1041
23
+ gtk_stream/documents/classes/Separator.py,sha256=uw_EgAKs_6pNA8nrOLzruIlJfk4uaogB0p_jeoY0PHM,960
24
+ gtk_stream/documents/classes/Stack.py,sha256=YA6NDzZL2u4Ko8GXtx8Or-jEWGMCEw2cC1HNkAMRw-8,1030
25
+ gtk_stream/documents/classes/Switch.py,sha256=jQVuxqS9Pmpp1ymB_dbJPxasJNpm4e35ry0JYPHdAsk,1275
26
+ gtk_stream/documents/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ gtk_stream-0.11.1.dist-info/METADATA,sha256=iwqbihyKY2PV24joIWUqAAt6D8npjUmm6T4GVOFCD4I,807
28
+ gtk_stream-0.11.1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
29
+ gtk_stream-0.11.1.dist-info/entry_points.txt,sha256=PmhKTb4MMQM6dN2HJcoDSMI8L0lZIFIlFn-BgdfPDpo,60
30
+ gtk_stream-0.11.1.dist-info/top_level.txt,sha256=vE9zfHGe9Ke7FSe0wBK2WYJI-BpcQNu6xDC3Cu5O8rQ,11
31
+ gtk_stream-0.11.1.dist-info/RECORD,,
@@ -1,30 +0,0 @@
1
- gtk_stream/__init__.py,sha256=y6JLknVFexWrSo_Zl7-TXrPR6EQ5XVMeFO1bUzLN9Lg,98
2
- gtk_stream/_version.py,sha256=wg35lkz1DoondiGS1z7m4ZtbxPvMGnIj2qR4wzIH4-U,408
3
- gtk_stream/application.py,sha256=s-2A8JSSIum9QDo35oxri-10OLg5BUIfTKS0FZDQd6A,4114
4
- gtk_stream/command_line.py,sha256=Ej4mmPiuYjr5-1JrvjGK0BDitKUCfVEI9uHp1p_FAr4,1520
5
- gtk_stream/common.py,sha256=xdscxYgBg_Ux6iyk26gB-AMSgoUIqlZUPgso5YS_gKE,2106
6
- gtk_stream/parser.py,sha256=rcZtH0T5s6ttVXvbHZjX2hBoasWNbtDR5LEa8yiHUj4,8772
7
- gtk_stream/properties.py,sha256=oCG4EIMWS4WdKY4YzQZzllddoIY33GvnbgvMG3C5Muo,2630
8
- gtk_stream/documents/__init__.py,sha256=MVqnPXrTuoKyUHJ41jgqbFr3VA5JWfI6QFfXAIE6DuQ,789
9
- gtk_stream/documents/classes/Box.py,sha256=d01o2-JQ3-k0VjvvY8E7mly-u_f1v1NqYz1IDjHZLUo,1381
10
- gtk_stream/documents/classes/Button.py,sha256=0Cs5DOt-FoDVLWIktJHuH6OasI58TNI0Gs3uIKJDj2o,1563
11
- gtk_stream/documents/classes/Document.py,sha256=drWy-2HzgmpxSmRR27uIydlTJbaYTiRJPWwpELXrGSk,2135
12
- gtk_stream/documents/classes/Dropdown.py,sha256=1azU_iHbr_-099wj0_TDfDfZ5xKyh9xLFd5GvbNMw14,2443
13
- gtk_stream/documents/classes/Entry.py,sha256=MuhoUMAKKSj24KA77VCqBtedE_lStMrXvR-3wB9amSw,1137
14
- gtk_stream/documents/classes/FlowBox.py,sha256=UoVYS2j_osOV-IgbVoaqluTBCiaXus5dq2e9qhAu2Xo,1225
15
- gtk_stream/documents/classes/Frame.py,sha256=zAZvsT-YTZMijsgk7p0YVf6siAmFoCCSXouZo9XDpsA,1222
16
- gtk_stream/documents/classes/Grid.py,sha256=jDJ9U1GJZ45hi1VvPsCwFILN7CwEkgjqYqhTzMdtX9o,1249
17
- gtk_stream/documents/classes/Label.py,sha256=bBNBTvGs6fM8uLf4EDb2Ro8FmCeS27cnU1Ao-44nRYs,1023
18
- gtk_stream/documents/classes/Paned.py,sha256=q1goKJMWBg1d3hS0eanPBxzBqLB-Pz5hUnH9N-RXXh8,1392
19
- gtk_stream/documents/classes/Picture.py,sha256=QCLQNuQxfXmaasd-bPgXxJZYyc1e1DQkLdxCZ39gvlI,1251
20
- gtk_stream/documents/classes/ProgressBar.py,sha256=NPJtP3qaKiZUEAYEHZk4FEoWSFn2KVorI2SVb8cDnW0,966
21
- gtk_stream/documents/classes/ScrolledWindow.py,sha256=WaTPgz6GBC-hjH83SQT2OGUdCapHAgO3xEmSMJZ8q70,1041
22
- gtk_stream/documents/classes/Separator.py,sha256=uw_EgAKs_6pNA8nrOLzruIlJfk4uaogB0p_jeoY0PHM,960
23
- gtk_stream/documents/classes/Stack.py,sha256=YA6NDzZL2u4Ko8GXtx8Or-jEWGMCEw2cC1HNkAMRw-8,1030
24
- gtk_stream/documents/classes/Switch.py,sha256=OLCWWNeVyNrk4Tu3JDe64FqsLhedh3dDzKDKne2CyDw,1382
25
- gtk_stream/documents/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- gtk_stream-0.10.dist-info/METADATA,sha256=Tmq513moUwqczsg1EYEh0-eBcz-SJs3gTVAXUHGlt_Y,805
27
- gtk_stream-0.10.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
28
- gtk_stream-0.10.dist-info/entry_points.txt,sha256=PmhKTb4MMQM6dN2HJcoDSMI8L0lZIFIlFn-BgdfPDpo,60
29
- gtk_stream-0.10.dist-info/top_level.txt,sha256=vE9zfHGe9Ke7FSe0wBK2WYJI-BpcQNu6xDC3Cu5O8rQ,11
30
- gtk_stream-0.10.dist-info/RECORD,,