7b6ab367426ce9b1dc31c8692ce4a6408aee82c1
[platform/upstream/python-gobject.git] / gi / _gobject / __init__.py
1 # -*- Mode: Python; py-indent-offset: 4 -*-
2 # pygobject - Python bindings for the GObject library
3 # Copyright (C) 2006-2012  Johan Dahlin
4 #
5 #   gobject/__init__.py: initialisation file for gobject module
6 #
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License, or (at your option) any later version.
11 #
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 # Lesser General Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
20 # USA
21
22 # this can go when things are a little further along
23
24 import sys
25
26 # we can't have pygobject 2 loaded at the same time we load the internal _gobject
27 if 'gobject' in sys.modules:
28     raise ImportError('When using gi.repository you must not import static modules like "gobject". Please change all occurrences of "import gobject" to "from gi.repository import GObject".')
29
30 from .. import _glib
31 from . import _gobject
32 from . import constants
33 from .propertyhelper import Property
34 from . import signalhelper
35
36 GBoxed = _gobject.GBoxed
37 GEnum = _gobject.GEnum
38 GFlags = _gobject.GFlags
39 GInterface = _gobject.GInterface
40 GObject = _gobject.GObject
41 GObjectWeakRef = _gobject.GObjectWeakRef
42 GParamSpec = _gobject.GParamSpec
43 GPointer = _gobject.GPointer
44 GType = _gobject.GType
45 PARAM_CONSTRUCT = _gobject.PARAM_CONSTRUCT
46 PARAM_CONSTRUCT_ONLY = _gobject.PARAM_CONSTRUCT_ONLY
47 PARAM_LAX_VALIDATION = _gobject.PARAM_LAX_VALIDATION
48 PARAM_READABLE = _gobject.PARAM_READABLE
49 PARAM_READWRITE = _gobject.PARAM_READWRITE
50 PARAM_WRITABLE = _gobject.PARAM_WRITABLE
51 SIGNAL_ACTION = _gobject.SIGNAL_ACTION
52 SIGNAL_DETAILED = _gobject.SIGNAL_DETAILED
53 SIGNAL_NO_HOOKS = _gobject.SIGNAL_NO_HOOKS
54 SIGNAL_NO_RECURSE = _gobject.SIGNAL_NO_RECURSE
55 SIGNAL_RUN_CLEANUP = _gobject.SIGNAL_RUN_CLEANUP
56 SIGNAL_RUN_FIRST = _gobject.SIGNAL_RUN_FIRST
57 SIGNAL_RUN_LAST = _gobject.SIGNAL_RUN_LAST
58 TYPE_GSTRING = _gobject.TYPE_GSTRING
59 TYPE_INVALID = _gobject.TYPE_INVALID
60 Warning = _gobject.Warning
61 _PyGObject_API = _gobject._PyGObject_API
62 add_emission_hook = _gobject.add_emission_hook
63 features = _gobject.features
64 list_properties = _gobject.list_properties
65 new = _gobject.new
66 pygobject_version = _gobject.pygobject_version
67 remove_emission_hook = _gobject.remove_emission_hook
68 signal_accumulator_true_handled = _gobject.signal_accumulator_true_handled
69 signal_list_ids = _gobject.signal_list_ids
70 signal_list_names = _gobject.signal_list_names
71 signal_lookup = _gobject.signal_lookup
72 signal_name = _gobject.signal_name
73 signal_new = _gobject.signal_new
74 signal_query = _gobject.signal_query
75 threads_init = _gobject.threads_init
76 type_children = _gobject.type_children
77 type_from_name = _gobject.type_from_name
78 type_interfaces = _gobject.type_interfaces
79 type_is_a = _gobject.type_is_a
80 type_name = _gobject.type_name
81 type_parent = _gobject.type_parent
82 type_register = _gobject.type_register
83
84 spawn_async = _glib.spawn_async
85 idle_add = _glib.idle_add
86 timeout_add = _glib.timeout_add
87 timeout_add_seconds = _glib.timeout_add_seconds
88 io_add_watch = _glib.io_add_watch
89 source_remove = _glib.source_remove
90 child_watch_add = _glib.child_watch_add
91 markup_escape_text = _glib.markup_escape_text
92 get_current_time = _glib.get_current_time
93 filename_display_name = _glib.filename_display_name
94 filename_display_basename = _glib.filename_display_basename
95 filename_from_utf8 = _glib.filename_from_utf8
96 get_application_name = _glib.get_application_name
97 set_application_name = _glib.set_application_name
98 get_prgname = _glib.get_prgname
99 set_prgname = _glib.set_prgname
100 main_depth = _glib.main_depth
101 Pid = _glib.Pid
102 GError = _glib.GError
103 glib_version = _glib.glib_version
104 MainLoop = _glib.MainLoop
105 MainContext = _glib.MainContext
106 main_context_default = _glib.main_context_default
107 IOChannel = _glib.IOChannel
108 Source = _glib.Source
109 Idle = _glib.Idle
110 Timeout = _glib.Timeout
111 PollFD = _glib.PollFD
112 OptionGroup = _glib.OptionGroup
113 OptionContext = _glib.OptionContext
114 uri_list_extract_uris = _glib.uri_list_extract_uris
115
116 SPAWN_LEAVE_DESCRIPTORS_OPEN = _glib.SPAWN_LEAVE_DESCRIPTORS_OPEN
117 SPAWN_DO_NOT_REAP_CHILD = _glib.SPAWN_DO_NOT_REAP_CHILD
118 SPAWN_SEARCH_PATH = _glib.SPAWN_SEARCH_PATH
119 SPAWN_STDOUT_TO_DEV_NULL = _glib.SPAWN_STDOUT_TO_DEV_NULL
120 SPAWN_STDERR_TO_DEV_NULL = _glib.SPAWN_STDERR_TO_DEV_NULL
121 SPAWN_CHILD_INHERITS_STDIN = _glib.SPAWN_CHILD_INHERITS_STDIN
122 SPAWN_FILE_AND_ARGV_ZERO = _glib.SPAWN_FILE_AND_ARGV_ZERO
123 PRIORITY_HIGH = _glib.PRIORITY_HIGH
124 PRIORITY_DEFAULT = _glib.PRIORITY_DEFAULT
125 PRIORITY_HIGH_IDLE = _glib.PRIORITY_HIGH_IDLE
126 PRIORITY_DEFAULT_IDLE = _glib.PRIORITY_DEFAULT_IDLE
127 PRIORITY_LOW = _glib.PRIORITY_LOW
128 IO_IN = _glib.IO_IN
129 IO_OUT = _glib.IO_OUT
130 IO_PRI = _glib.IO_PRI
131 IO_ERR = _glib.IO_ERR
132 IO_HUP = _glib.IO_HUP
133 IO_NVAL = _glib.IO_NVAL
134 IO_STATUS_ERROR = _glib.IO_STATUS_ERROR
135 IO_STATUS_NORMAL = _glib.IO_STATUS_NORMAL
136 IO_STATUS_EOF = _glib.IO_STATUS_EOF
137 IO_STATUS_AGAIN = _glib.IO_STATUS_AGAIN
138 IO_FLAG_APPEND = _glib.IO_FLAG_APPEND
139 IO_FLAG_NONBLOCK = _glib.IO_FLAG_NONBLOCK
140 IO_FLAG_IS_READABLE = _glib.IO_FLAG_IS_READABLE
141 IO_FLAG_IS_WRITEABLE = _glib.IO_FLAG_IS_WRITEABLE
142 IO_FLAG_IS_SEEKABLE = _glib.IO_FLAG_IS_SEEKABLE
143 IO_FLAG_MASK = _glib.IO_FLAG_MASK
144 IO_FLAG_GET_MASK = _glib.IO_FLAG_GET_MASK
145 IO_FLAG_SET_MASK = _glib.IO_FLAG_SET_MASK
146 OPTION_FLAG_HIDDEN = _glib.OPTION_FLAG_HIDDEN
147 OPTION_FLAG_IN_MAIN = _glib.OPTION_FLAG_IN_MAIN
148 OPTION_FLAG_REVERSE = _glib.OPTION_FLAG_REVERSE
149 OPTION_FLAG_NO_ARG = _glib.OPTION_FLAG_NO_ARG
150 OPTION_FLAG_FILENAME = _glib.OPTION_FLAG_FILENAME
151 OPTION_FLAG_OPTIONAL_ARG = _glib.OPTION_FLAG_OPTIONAL_ARG
152 OPTION_FLAG_NOALIAS = _glib.OPTION_FLAG_NOALIAS
153 OPTION_ERROR_UNKNOWN_OPTION = _glib.OPTION_ERROR_UNKNOWN_OPTION
154 OPTION_ERROR_BAD_VALUE = _glib.OPTION_ERROR_BAD_VALUE
155 OPTION_ERROR_FAILED = _glib.OPTION_ERROR_FAILED
156 OPTION_REMAINING = _glib.OPTION_REMAINING
157 OPTION_ERROR = _glib.OPTION_ERROR
158
159 TYPE_NONE = constants.TYPE_NONE
160 TYPE_INTERFACE = constants.TYPE_INTERFACE
161 TYPE_CHAR = constants.TYPE_CHAR
162 TYPE_UCHAR = constants.TYPE_UCHAR
163 TYPE_BOOLEAN = constants.TYPE_BOOLEAN
164 TYPE_INT = constants.TYPE_INT
165 TYPE_UINT = constants.TYPE_UINT
166 TYPE_LONG = constants.TYPE_LONG
167 TYPE_ULONG = constants.TYPE_ULONG
168 TYPE_INT64 = constants.TYPE_INT64
169 TYPE_UINT64 = constants.TYPE_UINT64
170 TYPE_ENUM = constants.TYPE_ENUM
171 TYPE_FLAGS = constants.TYPE_FLAGS
172 TYPE_FLOAT = constants.TYPE_FLOAT
173 TYPE_DOUBLE = constants.TYPE_DOUBLE
174 TYPE_STRING = constants.TYPE_STRING
175 TYPE_POINTER = constants.TYPE_POINTER
176 TYPE_BOXED = constants.TYPE_BOXED
177 TYPE_PARAM = constants.TYPE_PARAM
178 TYPE_OBJECT = constants.TYPE_OBJECT
179 TYPE_PYOBJECT = constants.TYPE_PYOBJECT
180 TYPE_GTYPE = constants.TYPE_GTYPE
181 TYPE_UNICHAR = constants.TYPE_UNICHAR
182 TYPE_STRV = constants.TYPE_STRV
183 TYPE_VARIANT = constants.TYPE_VARIANT
184 G_MINFLOAT = constants.G_MINFLOAT
185 G_MAXFLOAT = constants.G_MAXFLOAT
186 G_MINDOUBLE = constants.G_MINDOUBLE
187 G_MAXDOUBLE = constants.G_MAXDOUBLE
188 G_MINSHORT = constants.G_MINSHORT
189 G_MAXSHORT = constants.G_MAXSHORT
190 G_MAXUSHORT = constants.G_MAXUSHORT
191 G_MININT = constants.G_MININT
192 G_MAXINT = constants.G_MAXINT
193 G_MAXUINT = constants.G_MAXUINT
194 G_MINLONG = constants.G_MINLONG
195 G_MAXLONG = constants.G_MAXLONG
196 G_MAXULONG = constants.G_MAXULONG
197 G_MININT8 = constants.G_MININT8
198 G_MAXINT8 = constants.G_MAXINT8
199 G_MAXUINT8 = constants.G_MAXUINT8
200 G_MININT16 = constants.G_MININT16
201 G_MAXINT16 = constants.G_MAXINT16
202 G_MAXUINT16 = constants.G_MAXUINT16
203 G_MININT32 = constants.G_MININT32
204 G_MAXINT32 = constants.G_MAXINT32
205 G_MAXUINT32 = constants.G_MAXUINT32
206 G_MININT64 = constants.G_MININT64
207 G_MAXINT64 = constants.G_MAXINT64
208 G_MAXUINT64 = constants.G_MAXUINT64
209 G_MAXSIZE = constants.G_MAXSIZE
210 G_MAXSSIZE = constants.G_MAXSSIZE
211 G_MINOFFSET = constants.G_MINOFFSET
212 G_MAXOFFSET = constants.G_MAXOFFSET
213
214 Signal = signalhelper.Signal
215 SignalOverride = signalhelper.SignalOverride
216
217 from .._glib import option
218 sys.modules['gi._gobject.option'] = option
219
220
221 class GObjectMeta(type):
222     "Metaclass for automatically registering GObject classes"
223     def __init__(cls, name, bases, dict_):
224         type.__init__(cls, name, bases, dict_)
225         cls._install_properties()
226         signalhelper.install_signals(cls)
227         cls._type_register(cls.__dict__)
228
229     def _install_properties(cls):
230         gproperties = getattr(cls, '__gproperties__', {})
231
232         props = []
233         for name, prop in cls.__dict__.items():
234             if isinstance(prop, Property):  # not same as the built-in
235                 if name in gproperties:
236                     raise ValueError
237                 prop.name = name
238                 gproperties[name] = prop.get_pspec_args()
239                 props.append(prop)
240
241         if not props:
242             return
243
244         cls.__gproperties__ = gproperties
245
246         if 'do_get_property' in cls.__dict__ or 'do_set_property' in cls.__dict__:
247             for prop in props:
248                 if prop.fget != prop._default_getter or prop.fset != prop._default_setter:
249                     raise TypeError(
250                         "GObject subclass %r defines do_get/set_property"
251                         " and it also uses a property with a custom setter"
252                         " or getter. This is not allowed" % (
253                         cls.__name__,))
254
255         def obj_get_property(self, pspec):
256             name = pspec.name.replace('-', '_')
257             prop = getattr(cls, name, None)
258             if prop:
259                 return prop.fget(self)
260         cls.do_get_property = obj_get_property
261
262         def obj_set_property(self, pspec, value):
263             name = pspec.name.replace('-', '_')
264             prop = getattr(cls, name, None)
265             if prop:
266                 prop.fset(self, value)
267         cls.do_set_property = obj_set_property
268
269     def _type_register(cls, namespace):
270         ## don't register the class if already registered
271         if '__gtype__' in namespace:
272             return
273
274         # Do not register a new GType for the overrides, as this would sort of
275         # defeat the purpose of overrides...
276         if cls.__module__.startswith('gi.overrides.'):
277             return
278
279         type_register(cls, namespace.get('__gtype_name__'))
280
281 _gobject._install_metaclass(GObjectMeta)
282
283 # Deprecated naming still available for backwards compatibility.
284 property = Property