def runTouchApp(widget=None, slave=False): '''Static main function that starts the application loop. You got some magic things, if you are using argument like this : :Parameters: `<empty>` To make dispatching work, you need at least one input listener. If not, application will leave. (MTWindow act as an input listener) `widget` If you pass only a widget, a MTWindow will be created, and your widget will be added on the window as the root widget. `slave` No event dispatching are done. This will be your job. `widget + slave` No event dispatching are done. This will be your job, but we are trying to get the window (must be created by you before), and add the widget on it. Very usefull for embedding PyMT in another toolkit. (like Qt, check pymt-designed) ''' global pymt_evloop global pymt_providers # Ok, we got one widget, and we are not in slave mode # so, user don't create the window, let's create it for him ! ### Not needed, since we always create window ?! #if not slave and widget: # global pymt_window # from ui.window import MTWindow # pymt_window = MTWindow() # Check if we show event stats if pymt.pymt_config.getboolean('pymt', 'show_eventstats'): pymt.widget.event_stats_activate() # Instance all configured input for key, value in pymt.pymt_config.items('input'): pymt_logger.debug('Base: Create provider from %s' % (str(value))) # split value args = str(value).split(',', 1) if len(args) == 1: args.append('') provider_id, args = args provider = TouchFactory.get(provider_id) if provider is None: pymt_logger.warning('Base: Unknown <%s> provider' % str(provider_id)) continue # create provider p = provider(key, args) if p: pymt_providers.append(p) pymt_evloop = TouchEventLoop() # add postproc modules for mod in pymt_postproc_modules: pymt_evloop.add_postproc_module(mod) # add main widget if widget and getWindow(): getWindow().add_widget(widget) # start event loop pymt_logger.info('Base: Start application main loop') pymt_evloop.start() # we are in a slave mode, don't do dispatching. if slave: return # in non-slave mode, they are 2 issues # # 1. if user created a window, call the mainloop from window. # This is due to glut, it need to be called with # glutMainLoop(). Only FreeGLUT got a gluMainLoopEvent(). # So, we are executing the dispatching function inside # a redisplay event. # # 2. if no window is created, we are dispatching event lopp # ourself (previous behavior.) # try: if pymt_window is None: _run_mainloop() else: pymt_window.mainloop() finally: stopTouchApp() # Show event stats if pymt.pymt_config.getboolean('pymt', 'show_eventstats'): pymt.widget.event_stats_print()
pymt_config.adddefaultsection('keyboard') pymt_config.adddefaultsection('graphics') pymt_config.adddefaultsection('input') pymt_config.adddefaultsection('dump') pymt_config.adddefaultsection('modules') # Upgrade default configuration until having the current version need_save = False if pymt_config_version != PYMT_CONFIG_VERSION: pymt_logger.warning('Config: Older configuration version detected (%d instead of %d)' % ( pymt_config_version, PYMT_CONFIG_VERSION)) pymt_logger.warning('Config: Upgrading configuration in progress.') need_save = True while pymt_config_version < PYMT_CONFIG_VERSION: pymt_logger.debug('Config: Upgrading from %d' % pymt_config_version) # Versionning introduced in version 0.4. if pymt_config_version == 0: pymt_config.setdefault('pymt', 'show_fps', '0') pymt_config.setdefault('pymt', 'show_eventstats', '0') pymt_config.setdefault('pymt', 'log_level', 'info') pymt_config.setdefault('pymt', 'double_tap_time', '250') pymt_config.setdefault('pymt', 'double_tap_distance', '20') pymt_config.setdefault('pymt', 'enable_simulator', '1') pymt_config.setdefault('pymt', 'ignore', '[]') pymt_config.setdefault('keyboard', 'layout', 'qwerty') pymt_config.setdefault('graphics', 'fbo', 'hardware') pymt_config.setdefault('graphics', 'fullscreen', '0') pymt_config.setdefault('graphics', 'width', '640')
if len(args) == 1: args += [''] pymt_config.set('modules', args[0], args[1]) elif opt in ('-s', '--save'): need_save = True elif opt in ('-n', ): options['shadow_window'] = False if need_save: try: with open(pymt_config_fn, 'w') as fd: pymt_config.write(fd) except Exception, e: pymt_logger.exception('Core: error while saving default configuration file') pymt_logger.info('Core: PyMT configuration saved.') sys.exit(0) # last initialization if options['shadow_window']: pymt_logger.debug('Core: Creating PyMT Window') shadow_window = MTWindow() pymt_configure() except getopt.GetoptError, err: pymt_logger.error('Core: %s' % str(err)) pymt_usage() sys.exit(2) # cleanup namespace del sys, getopt, os
pymt_config.adddefaultsection('keyboard') pymt_config.adddefaultsection('graphics') pymt_config.adddefaultsection('input') pymt_config.adddefaultsection('dump') pymt_config.adddefaultsection('modules') # Upgrade default configuration until having the current version need_save = False if pymt_config_version != PYMT_CONFIG_VERSION: pymt_logger.warning('Config: Older configuration version detected (%d instead of %d)' % ( pymt_config_version, PYMT_CONFIG_VERSION)) pymt_logger.warning('Config: Upgrading configuration in progress.') need_save = True while pymt_config_version != PYMT_CONFIG_VERSION: pymt_logger.debug('Config: Upgrading from %d' % pymt_config_version) # Versionning introduced in version 0.4. if pymt_config_version == 0: pymt_config.setdefault('pymt', 'show_fps', '0') pymt_config.setdefault('pymt', 'show_eventstats', '0') pymt_config.setdefault('pymt', 'log_level', 'info') pymt_config.setdefault('pymt', 'double_tap_time', '250') pymt_config.setdefault('pymt', 'double_tap_distance', '20') pymt_config.setdefault('pymt', 'enable_simulator', '1') pymt_config.setdefault('pymt', 'ignore', '[]') pymt_config.setdefault('keyboard', 'layout', 'qwerty') pymt_config.setdefault('graphics', 'fbo', 'hardware') pymt_config.setdefault('graphics', 'fullscreen', '1') pymt_config.setdefault('graphics', 'width', '640')