Пример #1
0
class SaludameActivity(Activity):
    ''' Clase llamada por sugar cuando se ejecuta la actividad.
        El nombre de esta clase está señalada en el archivo activity/activity.info '''
        
    def __init__(self, handle):
        
        self.game_init = False          # Tells if game engine was initialized
        self.loaded_game = None
        
        Activity.__init__(self, handle)
        
        # Creates the activiy box for toolbars
        self.toolbox = ActivityToolbox(self)
        self.set_toolbox(self.toolbox)
        self.toolbox.show()
        
        # Retrieves the Activity standard toolbar
        self.activity_toolbar = self.toolbox.get_activity_toolbar()

        # Creates other toolbars
        # Game toolbar gets created on demand
        # Library toolbar gets created on demand
        self.guides_toolbar = gtk.Toolbar()
        self.credits_toolbar = gtk.Toolbar()
        
        self.indexes = ["activity"] # right now only activity toolbar

        # Create startup windows
        self.startup_window = startup_window.StartupWindow(self._start_cb, self._load_last_cb)
        
        # Create the canvas to embbed pygame
        self.pygame_canvas = PygameCanvas(self, False)
        
        # Create Health Library Window
        self.health_library = content_window.ContentWindow()
        
        # Create Guides Window
        self.guides = guides_window.GuidesWindow()
        
        # Create Credits Window
        self.credits = credits.Credits()
        
        self.startup_window.show()
        self.pygame_canvas.show()
        self.health_library.show()
        self.guides.show()
        self.credits.show()
        
        self.items = gtk.Notebook()
        self.items.set_show_tabs(False)
        self.items.set_show_border(False)
        self.items.append_page(self.startup_window)
        self.items.append_page(self.pygame_canvas)
        self.items.append_page(self.health_library)
        self.items.append_page(self.guides)
        self.items.append_page(self.credits)
        self.items.show()
        
        self.set_canvas(self.items)

        logging.debug("Create main")
        self.game = game.Main()
        self.game.set_game_over_callback(self.game_over_callback)
        
        self.toolbox.connect('current-toolbar-changed', self.change_mode)
        self.make_toolbox(False)
        self.toolbox.set_current_toolbar(0)     # Start in activity tab
        
        # force the toolbar change
        self.change_mode(None, self.toolbox.get_current_toolbar())
        
        game.set_library_function = self.set_library    # Sets the callback to put links in the library
        
        self.show()
    
    def make_toolbox(self, add_game):
        toolbars = len(self.indexes)
        for i in range(toolbars, 0, -1):
            self.toolbox.remove_toolbar(i)
        
        self.indexes = ["activity"]     # activity toolbar never gets removed
        
        if add_game:
            self.toolbox.add_toolbar(_("Game"), self.get_game_toolbar())
            self.indexes += ["game"]
        
        self.indexes += ["library", "guides", "credits"]
        self.toolbox.add_toolbar(_("Health Library"), self.health_library.get_toolbar())
        self.toolbox.add_toolbar(_("Guides"), self.guides_toolbar)
        self.toolbox.add_toolbar(_("Credits"), self.credits_toolbar)
        
    def change_mode(self, notebook, index):
        game.pause = True
        self.pygame_canvas.translator.unhook_pygame()
        self.health_library.ditch()
        self.guides.ditch()
        self.guides.ditch()
        
        gc.collect()    # Collects garbaje
        
        if self.indexes[index] == "activity":
            self.items.set_current_page(0)
            
        if self.indexes[index] == "game":
            game.pause = False
            self.show_game()
            self.items.set_current_page(1)

        elif self.indexes[index] == "library":
            self.items.set_current_page(2)
            
        elif self.indexes[index] == "guides":
            self.items.set_current_page(3)
            
        elif self.indexes[index] == "credits":
            self.credits.before_show()
            self.items.set_current_page(4)
    
    #Override activity.Activity's can_close method
    def can_close(self):
        game.running = False
        return True
    
    def _start_cb(self, gender, name):
        #self.create_in_journal()
        self.metadata['title'] = _("Saludame") + " " + name
        self.game.gender = gender
        self.game.name = name
        self.startup_window.set_welcome()
        
        if self.game.started:
            self.game.main(True)
        
        self.make_toolbox(True)
        self.toolbox.set_current_toolbar(1)             # Move to game tab
    
    def show_game(self):
        if self.game.started:
            self.game.windows_controller.reload_main = True       # Repaints the whole screen
        
        if self.game_init:
            self.pygame_canvas.translator.hook_pygame()
        else:
            self.game_init = True
            # Start pygame
            self.pygame_canvas.run_pygame(lambda:self.game.main(True))    # Indico que llame a la función local para iniciar el juego pygame

    def set_library(self, link, anchor=None):
        self.toolbox.set_current_toolbar(2)
        self.health_library.set_url(link, anchor)
    
    def _load_last_cb(self, event):
        metadata = self.get_last_game()
        if metadata:
            self.metadata['title'] = metadata['title']
            self.make_toolbox(True)
            self.toolbox.set_current_toolbar(1)
    
    def game_over_callback(self):
        self.make_toolbox(False)
        self.toolbox.set_current_toolbar(0)             # Move to game tab
        
    def write_file(self, file_path):
        if self.game.started:
            try:
                self.game.save_game(file_path)
            except Exception,e:
                print "Error writting to file"
                print e
                raise e
        else:
Пример #2
0
    def instance(self):
        book.wiki = book.WikiBook()
        if not book.custom:
            book.custom = book.CustomBook()

        self.edit_page = 1
        self.edit = edit.View()
        self.library = library.View(self)

        if OLD_TOOLBAR:
            self.edit_toolbar = gtk.Toolbar()
            self.edit_bar = edit.ToolbarBuilder(self.edit, self.edit_toolbar)
            self.edit_toolbar.show_all()

            self.library_toolbar = gtk.Toolbar()
            self.library_bar = library.ToolbarBuilder(self.library,
                                                      self.library_toolbar)
            self.library_toolbar.show_all()

            toolbox = ActivityToolbox(self)
            toolbox.connect('current-toolbar-changed',
                            self._toolbar_changed_cb)
            self.set_toolbox(toolbox)
            toolbox.add_toolbar(_('Library'), self.library_toolbar)
            toolbox.add_toolbar(_('Edit'), self.edit_toolbar)
            toolbox.set_current_toolbar(1)
        else:
            toolbar_box = ToolbarBox()
            activity_button = ActivityToolbarButton(self)
            toolbar_box.toolbar.insert(activity_button, 0)
            self.set_toolbar_box(toolbar_box)
            self._toolbar = toolbar_box.toolbar

            tool_group = None
            search_button = RadioToolButton()
            search_button.props.group = tool_group
            tool_group = search_button
            search_button.props.icon_name = 'white-search'
            search_button.set_tooltip(_('Library'))
            search_button.mode = 'search'
            search_button.connect('clicked', self.__mode_button_clicked)
            self._toolbar.insert(search_button, -1)

            edit_button = RadioToolButton()
            edit_button.props.group = tool_group
            edit_button.props.icon_name = 'toolbar-edit'
            edit_button.set_tooltip(_('Edit'))
            edit_button.mode = 'edit'
            edit_button.connect('clicked', self.__mode_button_clicked)
            self._toolbar.insert(edit_button, -1)
            self._toolbar.insert(gtk.SeparatorToolItem(), -1)
            self.edit_bar = edit.ToolbarBuilder(self.edit, self._toolbar)
            self.library_bar = library.ToolbarBuilder(self.library,
                                                      self._toolbar)

        edit_fake = gtk.EventBox()

        self.notebook.append_page(self.library)
        self.notebook.append_page(self.edit)
        self.notebook.append_page(edit_fake)

        self.show_all()

        if not OLD_TOOLBAR:
            self.__mode_button_clicked(search_button)
            separator = gtk.SeparatorToolItem()
            separator.props.draw = False
            separator.set_expand(True)
            separator.show()
            self._toolbar.insert(separator, -1)
            stop_button = StopButton(self)
            stop_button.show()
            self._toolbar.insert(stop_button, -1)
Пример #3
0
class XoScopeActivity(activity.Activity):
    """XoScopeActivity class as specified in activity.info"""

    def __init__(self, handle):
        """Set up the XoScope activity."""
        activity.Activity.__init__(self, handle)

        self._instance_directory = os.path.join(self.get_activity_root(),\
                'instance')

        # we do not have collaboration features
        # make the share option insensitive
        self.max_participants = 1
        self._capturing = False
        self._mode = 'live'

        # 0, 2 or 5 second delay before capturing the image
        self._delay = 0

        # Zoom 1x, 2x, 4x
        self._zoom = 1

        # Exposure bracketing
        self._bracketing = '0'

        # Preview mode stuff
        self._num_pics = 0

        # Index of pic to be displayed in preview mode
        self._pic_index = 0

        # This holds the image titles and name information. Saved
        # across activity instances
        self._images = []

        # Flag to store whether image preview element needs to resize
        # the pixbuf
        self._needs_resize = False

        if OLD_TOOLBAR:
            self.toolbox = ActivityToolbox(self)
            self.set_toolbox(self.toolbox)
            self.toolbox.show()

            activity_toolbar = self.toolbox.get_activity_toolbar()
            activity_toolbar = gtk.Toolbar()
            self.toolbox.add_toolbar(_('Control'), activity_toolbar)
            self.toolbox.set_current_toolbar(1)
            self._controls_toolbar = activity_toolbar

            advanced_toolbar = self.toolbox.get_activity_toolbar()
            advanced_toolbar = gtk.Toolbar()
            #self.toolbox.add_toolbar(_('Advanced controls'), advanced_toolbar)
        else:
            toolbar_box = ToolbarBox()
            self.activity_button = ActivityToolbarButton(self)
            toolbar_box.toolbar.insert(self.activity_button, 0)
            self.activity_button.show()
            self.set_toolbar_box(toolbar_box)

            toolbar_box.show()
            activity_toolbar = self.activity_button.page
            self._controls_toolbar = self.get_toolbar_box().toolbar
            self._controls_toolbar.show()

            advanced_toolbar = gtk.Toolbar()
            #advanced_toolbar.show_all()
            advanced_button = ToolbarButton()
            advanced_button.props.page = advanced_toolbar
            advanced_button.props.label = _('Advanced controls')
            advanced_button.props.icon_name = 'advanced'
            #advanced_button.show()
            #toolbar_box.toolbar.insert(advanced_button, -1)

        self._live_toolitem = gtk.ToolItem()
        self._live_toolbar_container = gtk.HBox()

        self._preview_toolitem = gtk.ToolItem()
        self._preview_toolbar_container = gtk.HBox()

        separator = gtk.SeparatorToolItem()
        if not OLD_TOOLBAR:
            separator.props.draw = True
        else:
            separator.props.draw = False
        separator.set_expand(False)
        self._controls_toolbar.insert(separator, -1)
        separator.show()

        self._photo_button = ToolButton('photo')
        self._photo_button.props.label = _('Capture photo')
        self._photo_button.connect('clicked',
                self.__capture_image_cb)
        self._live_toolbar_container.add(self._photo_button)
        self._photo_button.show()

        self._delay_button = ToolButton('delay_%d' % self._delay)
        self._delay_button.props.label = _('Capture delay')
        self._delay_button.connect('clicked',
                self.__change_capture_delay_cb)
        self._live_toolbar_container.add(self._delay_button)
        self._delay_button.show()

        self._zoom_button = ToolButton('zoom_%d' % self._zoom)
        self._zoom_button.props.label = _('Image Zoom')
        self._zoom_button.connect('clicked',
                self.__change_image_zoom_cb)
        self._live_toolbar_container.add(self._zoom_button)
        self._zoom_button.show()

        #if self._check_available_control(v4l2.V4L2_CID_EXPOSURE):
        #    self._bracketing_button = ToolButton('bracketing_%s' % self._bracketing)
        #    self._bracketing_button.props.label = _('bracketing mode')
        #    self._bracketing_button.connect('clicked',
        #            self.__change_capture_bracketing_cb)
        #    self._live_toolbar_container.add(self._bracketing_button)
        #    self._bracketing_button.show()

        separator = gtk.SeparatorToolItem()
        separator.props.draw = True
        separator.set_expand(False)
        self._live_toolbar_container.add(separator)
        separator.show()

        # Camera control settings follow

        if self._check_available_control(v4l2.V4L2_CID_EXPOSURE):
            self._exposure_button = ToolButton('exposure')
            self._exposure_button.set_palette(ScalePalette('Exposure',\
                    v4l2.V4L2_CID_EXPOSURE))
            self._exposure_button.connect('clicked',
                    self.__button_clicked_cb)
            self._live_toolbar_container.add(self._exposure_button)
            self._exposure_button.show()

        if self._check_available_control(v4l2.V4L2_CID_GAIN):
            self._gain_button = ToolButton('gain')
            self._gain_button.set_palette(ScalePalette('Gain',\
                    v4l2.V4L2_CID_GAIN,
                    self._check_available_control(v4l2.V4L2_CID_AUTOGAIN)))
            self._gain_button.connect('clicked',
                    self.__button_clicked_cb)
            advanced_toolbar.insert(self._gain_button, -1)
            self._gain_button.show()

        if self._check_available_control(v4l2.V4L2_CID_BRIGHTNESS):
            self._brightness_button = ToolButton('brightness')
            self._brightness_button.set_palette(ScalePalette('Brightness',\
                    v4l2.V4L2_CID_BRIGHTNESS,
                    self._check_available_control(
                        v4l2.V4L2_CID_AUTOBRIGHTNESS)))
            self._brightness_button.connect('clicked',
                    self.__button_clicked_cb)
            self._live_toolbar_container.add(self._brightness_button)
            self._brightness_button.show()

        if self._check_available_control(v4l2.V4L2_CID_CONTRAST):
            self._contrast_button = ToolButton('contrast')
            self._contrast_button.set_palette(ScalePalette('Contrast',\
                    v4l2.V4L2_CID_CONTRAST))
            self._contrast_button.connect('clicked',
                    self.__button_clicked_cb)
            self._live_toolbar_container.add(self._contrast_button)
            self._contrast_button.show()

        if self._check_available_control(v4l2.V4L2_CID_SATURATION):
            self._saturation_button = ToolButton('saturation')
            self._saturation_button.set_palette(ScalePalette('Saturation',\
                    v4l2.V4L2_CID_SATURATION))
            self._saturation_button.connect('clicked',
                    self.__button_clicked_cb)
            advanced_toolbar.insert(self._saturation_button, -1)
            self._saturation_button.show()

        if self._check_available_control(
                v4l2.V4L2_CID_WHITE_BALANCE_TEMPERATURE):
            self._white_balance_button = ToolButton('white_balance')
            self._white_balance_button.set_palette(ScalePalette('White'
                    ' balance', v4l2.V4L2_CID_WHITE_BALANCE_TEMPERATURE,
                    self._check_available_control(
                        v4l2.V4L2_CID_AUTO_WHITE_BALANCE)))
            self._white_balance_button.connect('clicked',
                    self.__button_clicked_cb)
            advanced_toolbar.insert(self._white_balance_button, -1)
            self._white_balance_button.show()

        if self._check_available_control(v4l2.V4L2_CID_HUE):
            self._color_tone_button = ToolButton('color_tone')
            self._color_tone_button.set_palette(ScalePalette('Color'
                    ' tone', v4l2.V4L2_CID_HUE,
                    self._check_available_control(
                        v4l2.V4L2_CID_HUE_AUTO)))
            self._color_tone_button.connect('clicked',
                    self.__button_clicked_cb)
            advanced_toolbar.insert(self._color_tone_button, -1)
            self._color_tone_button.show()

        #if self._check_available_control(v4l2.V4L2_CID_NIGHT_MODE):
        #    self._night_mode_button = ToolButton('night_mode')
        #    self._night_mode_button.set_palette(ScalePalette('Night mode',\
        #            v4l2.V4L2_CID_NIGHT_MODE))
        #    self._night_mode_button.connect('clicked',
        #            self.__button_clicked_cb)
        #    self._live_toolbar_container.add(self._night_mode_button)
        #    self._night_mode_button.show()

        self._previous_image = ToolButton('go-previous-paired')
        self._previous_image.label = _('Previous image')
        self._previous_image.connect('clicked',
                self.__previous_image_clicked_cb)
        self._preview_toolbar_container.add(self._previous_image)
        self._previous_image.show()

        self._next_image = ToolButton('go-next-paired')
        self._next_image.label = _('Next image')
        self._next_image.connect('clicked',
                self.__next_image_clicked_cb)
        self._preview_toolbar_container.add(self._next_image)
        self._next_image.show()

        self._image_name_entry = gtk.Entry()
        self._image_name_entry.set_text('')
        self._image_name_entry.set_size_request(400, -1)
        self._image_name_entry.connect('activate',
                self.__image_name_entry_activated_cb)
        self._preview_toolbar_container.add(self._image_name_entry)
        self._image_name_entry.show()

        self._save_to_journal = ToolButton('save_to_journal')
        self._save_to_journal.label = _('Save to journal')
        self._save_to_journal.connect('clicked',
                self.__save_to_journal_clicked_cb)
        self._preview_toolbar_container.add(self._save_to_journal)
        self._save_to_journal.show()

        self._trash = ToolButton('trash')
        self._trash.label = _('Delete')
        self._trash.connect('clicked',
                self.__trash_clicked_cb)
        self._preview_toolbar_container.add(self._trash)
        self._trash.show()

        separator = gtk.SeparatorToolItem()
        separator.props.draw = False
        separator.set_expand(True)
        self._controls_toolbar.insert(separator, -1)
        separator.show()

        self._mode_button = ToolButton('%s_mode' % self._mode)
        self._mode_button.props.label = _('Mode')
        self._mode_button.connect('clicked',
                self.__switch_modes_cb)
        self._controls_toolbar.insert(self._mode_button, -1)
        self._mode_button.show()

        if not OLD_TOOLBAR:
            separator = gtk.SeparatorToolItem()
            separator.props.draw = True
            separator.set_expand(False)
            self._controls_toolbar.insert(separator, -1)
            separator.show()

            activity_stop = StopButton(self)
            toolbar_box.toolbar.insert(activity_stop, -1)
            activity_stop.show()

        self._preview_toolitem.add(self._preview_toolbar_container)
        self._live_toolitem.add(self._live_toolbar_container)
        self._preview_toolbar_container.show()
        self._live_toolbar_container.show()

        if self._mode == 'preview':
            self._controls_toolbar.insert(self._preview_toolitem, 1)
            self._preview_toolitem.show()
        else:
            self._controls_toolbar.insert(self._live_toolitem, 1)
            self._live_toolitem.show()
            self._mode = 'live'

        self._controls_toolbar.show()
        activity_toolbar.show()

        self._main_view = gtk.HBox()
        self._movie_window = gtk.DrawingArea()
        self._movie_window.connect('realize',
                self.__movie_window_realize_cb)
        self._movie_window.unset_flags(gtk.DOUBLE_BUFFERED)
        self._movie_window.set_flags(gtk.APP_PAINTABLE)
        self._main_view.add(self._movie_window)

        self._preview_frame = gtk.AspectFrame(None, 0.5, 0.5, 1, True)
        self._preview_window = gtk.Image()
        self._preview_frame.add(self._preview_window)
        self._preview_window.connect('size_allocate',
                self.__preview_window_size_allocate_cb)

        self.xoscope = gst.Pipeline('xoscope_pipe')
        camsrc = gst.element_factory_make('v4l2src', 'camsrc')

        caps = gst.Caps('video/x-raw-yuv')

        filt = gst.element_factory_make('capsfilter', 'filter')
        filt.set_property('caps', caps)
        ffmpegcolorspace = gst.element_factory_make('ffmpegcolorspace',
                'ffmpegcolorspace')
        self._disp_sink = gst.element_factory_make('xvimagesink', 'disp_sink')

        # http://thread.gmane.org/gmane.comp.video.gstreamer.devel/29644
        self._disp_sink.set_property('sync', False)

        self.image_sink = gst.element_factory_make('fakesink',
                'image_sink')
        self.image_sink.set_property('silent', True)

        tee = gst.element_factory_make('tee', 'tee')
        queue = gst.element_factory_make('queue', 'dispqueue')
        queue.set_property('leaky', True)
        queue.set_property('max-size-buffers', 20)

        queue2 = gst.element_factory_make('queue', 'imagequeue')
        queue2.set_property('leaky', True)
        queue2.set_property('max-size-buffers', 20)

        self._zoom_element = gst.element_factory_make('videobox', 'zoombox')

        jpeg = gst.element_factory_make('jpegenc', 'pbjpeg')
        jpeg.set_property('quality', 100)

        self.xoscope.add(camsrc, filt, ffmpegcolorspace,\
                self._zoom_element, self._disp_sink, tee, queue, queue2,\
                self.image_sink, jpeg)
        gst.element_link_many(camsrc, filt, self._zoom_element,\
                ffmpegcolorspace, tee, queue, self._disp_sink)
        gst.element_link_many(tee, queue2, jpeg, self.image_sink)

        bus = self.xoscope.get_bus()
        bus.add_signal_watch()
        bus.enable_sync_message_emission()
        bus.connect('message', self.__on_message_cb)
        bus.connect('sync-message::element', self.__on_sync_message_cb)

        self._main_view.show()
        self._movie_window.show()
        self.set_canvas(self._main_view)

        # If we start playing without a delay, the live view window
        # doesn't get attached to the main canvas properly (This is
        # a problem on slow computers like xo1).
        gobject.timeout_add(2000, self.__start_live_view)

    def __preview_window_size_allocate_cb(self, gobject, allocation):
        # Make sure we don't get stuck in an infinite loop
        if self._needs_resize:
            pixbuf = self._preview_window.get_pixbuf()
            new_pixbuf = pixbuf.scale_simple(allocation.width,\
                    allocation.height, gtk.gdk.INTERP_BILINEAR)
            self._preview_window.set_from_pixbuf(new_pixbuf)
            self._preview_window.show()
            self._needs_resize = False
        else:
            return

    def read_file(self, path):
        logging.debug('read_file %s' % path)
        try:
            dom = minidom.parse(path)
        except Exception, e:
            logging.error('read_file: %s' % e)
            return

        logging.debug('read file, now filling hash')
        self._fill_info_hash(dom)
        self._update_zoom_element_and_button()
        self._delay_button.set_icon('delay_%d' % self._delay)
Пример #4
0
class GuiView(gtk.ScrolledWindow):
    """
    This class is used to just remove the table setup from the main file
    """
    def __init__(self, activity):
        gtk.ScrolledWindow.__init__(self)
        self.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC )
        self.activity = activity
        self.treeview = gtk.TreeView(gtk.TreeStore(str,object))
        self.guiHandler = GuiHandler( activity, self.treeview, self )
        #self.build_table(activity)

    def build_toolbars(self):
        self.action_buttons = {}

        # BUILD CUSTOM TOOLBAR
        self.action_bar = gtk.Toolbar()
        self.action_buttons['add'] = ToolButton('fs_gtk-add')
        self.action_buttons['add'].set_tooltip(_("Add Object"))

        self.action_buttons['rem'] = ToolButton('fs_gtk-remove')
        self.action_buttons['rem'].set_tooltip(_("Remove Object(s)"))

        self.action_buttons['save'] = ToolButton('filesave')
        self.action_buttons['save'].set_tooltip( _("Copy Object(s) to Journal") )


        self.action_buttons['down'] = ToolButton('epiphany-download')
        self.action_buttons['down'].set_tooltip( _('Download Object(s)') )

        self.action_buttons['admin'] = ToolButton('gtk-network')
        self.action_buttons['admin'].set_tooltip( _('Server Permissions') )

        self.action_buttons['server'] = ToolButton('gaim-link')
        self.action_buttons['server'].set_tooltip( _('Connect to Server') )
        self.action_buttons['server'].set_sensitive( False )

        if self.activity.isServer:
            self.action_buttons['add'].connect("clicked", self.guiHandler.requestAddFile, None)
            self.action_buttons['save'].connect("clicked", self.guiHandler.requestInsFile, None)
            self.action_buttons['rem'].connect("clicked", self.guiHandler.requestRemFile, None)
            self.action_buttons['server'].connect("clicked", self.guiHandler.switch_to_server, None)

            self.action_bar.insert(self.action_buttons['add'], -1)
            self.action_bar.insert(self.action_buttons['save'], -1)
            self.action_bar.insert(self.action_buttons['rem'], -1)
            self.action_bar.insert(self.action_buttons['server'], -1)

            # Check for server, if found activate connect link
            def check_server_status():
                try:
                    if self.activity.check_for_server():
                        self.action_buttons['server'].set_sensitive( True )
                except ServerRequestFailure:
                    pass
            threading.Thread(target=check_server_status).start()

        else:
            self.action_buttons['down'].connect("clicked", self.guiHandler.requestDownloadFile, None)
            self.action_bar.insert(self.action_buttons['down'], -1)

            if self.activity._mode == 'SERVER' and self.activity._user_permissions != 0:
                self.action_buttons['add'].connect("clicked", self.guiHandler.requestAddFile, {'upload':True})
                self.action_buttons['rem'].connect("clicked", self.guiHandler.requestRemFile, {'remove':True})

                self.action_bar.insert(self.action_buttons['add'], -1)
                self.action_bar.insert(self.action_buttons['rem'], -1)

                if self.activity._user_permissions == 2:
                    self.action_buttons['admin'].connect("clicked", self.guiHandler.showAdmin, None)
                    self.action_bar.insert(self.action_buttons['admin'], -1)

        self.action_bar.show_all()

        self.toolbar_set_selection( False )

        # Create Toolbox
        self.toolbox = ActivityToolbox(self.activity)

        self.toolbox.add_toolbar(_("Actions"), self.action_bar)

        self.activity.set_toolbox(self.toolbox)
        self.toolbox.show()
        self.toolbox.set_current_toolbar(1)

    def on_selection_changed(self, selection):
        if selection.count_selected_rows() == 0:
            self.toolbar_set_selection(False)
        else:
            self.toolbar_set_selection(True)

    def toolbar_set_selection(self, selected):
        require_selection = ['save', 'rem', 'down']
        for key in require_selection:
            if selected:
                self.action_buttons[key].set_sensitive( True )
            else:
                self.action_buttons[key].set_sensitive( False )

    def build_table(self):
        # Create File Tree
        ##################

        #       Name            Cell_data_Func      Expand  Cell Renderer
        text_cells = [
            [ _('Name'),   FileInfo.file_name, False,  gtk.CellRendererText()],
            [ _('Description'), FileInfo.file_desc, True,   gtk.CellRendererText()],
            [ _('Tags'),        FileInfo.file_tags, False,  gtk.CellRendererText()],
            [ _('Size'),   FileInfo.file_size, False,  gtk.CellRendererText()],
            [ '',               FileInfo.load_bar,  False,  gtk.CellRendererProgress()]
        ]

        for col_data in text_cells:
            cell = col_data[3]
            colName = gtk.TreeViewColumn(col_data[0], cell)
            colName.set_cell_data_func(cell, col_data[1])

            # Should the col expand
            colName.set_expand(col_data[2])

            # Add to tree
            self.treeview.append_column(colName)

        # make it searchable by name
        self.treeview.set_search_column(1)

        # Allow Multiple Selections
        self.treeview.get_selection().set_mode( gtk.SELECTION_MULTIPLE )
        self.treeview.get_selection().connect('changed', self.on_selection_changed )

        # Put table into scroll window to allow it to scroll
        self.add_with_viewport(self.treeview)

    def clear_files(self, deleteFile = True):
        model = self.treeview.get_model()
        iter = model.get_iter_root()
        while iter:
            key = model.get_value(iter, 0)

            # Remove file from UI
            self.guiHandler._remFileFromUIList(key)

            # UnRegister File with activity share list
            self.activity._unregisterShareFile( key )

            # Attempt to remove file from system
            if deleteFile:
                self.activity.delete_file( key )

            iter = model.iter_next(iter)

    def update_progress(self, id, bytes ):
        model = self.treeview.get_model()
        iter = model.get_iter_first()
        while iter:
            if model.get_value( iter, 0 ) == id:
                break
            iter = model.iter_next( iter )

        if iter:
            obj = model.get_value( iter, 1 )
            obj.update_aquired( bytes )

            # Store updated versoin of the object
            self.activity.updateFileObj( id, obj )
            model.set_value( iter, 1, obj)

            model.row_changed(model.get_path(iter), iter)

    def set_installed( self, id, sucessful=True ):
        model = self.treeview.get_model()
        iter = model.get_iter_first()
        while iter:
            if model.get_value( iter, 0 ) == id:
                break
            iter = model.iter_next( iter )

        if iter:
            obj = model.get_value( iter, 1 )
            if sucessful:
                obj.set_installed()
            else:
                obj.set_failed()

            # Store updated versoin of the object
            self.activity.updateFileObj( id, obj )
            model.set_value( iter, 1, obj)
            model.row_changed(model.get_path(iter), iter)
Пример #5
0
class GuiView(gtk.ScrolledWindow):
    """
    This class is used to just remove the table setup from the main file
    """
    def __init__(self, activity):
        gtk.ScrolledWindow.__init__(self)
        self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.activity = activity
        self.treeview = gtk.TreeView(gtk.TreeStore(str, object))
        self.guiHandler = GuiHandler(activity, self.treeview, self)
        #self.build_table(activity)

    def build_toolbars(self):
        self.action_buttons = {}

        # BUILD CUSTOM TOOLBAR
        self.action_bar = gtk.Toolbar()
        self.action_buttons['add'] = ToolButton('fs_gtk-add')
        self.action_buttons['add'].set_tooltip(_("Add Object"))

        self.action_buttons['rem'] = ToolButton('fs_gtk-remove')
        self.action_buttons['rem'].set_tooltip(_("Remove Object(s)"))

        self.action_buttons['save'] = ToolButton('filesave')
        self.action_buttons['save'].set_tooltip(_("Copy Object(s) to Journal"))

        self.action_buttons['down'] = ToolButton('epiphany-download')
        self.action_buttons['down'].set_tooltip(_('Download Object(s)'))

        self.action_buttons['admin'] = ToolButton('gtk-network')
        self.action_buttons['admin'].set_tooltip(_('Server Permissions'))

        self.action_buttons['server'] = ToolButton('gaim-link')
        self.action_buttons['server'].set_tooltip(_('Connect to Server'))
        self.action_buttons['server'].set_sensitive(False)

        if self.activity.isServer:
            self.action_buttons['add'].connect("clicked",
                                               self.guiHandler.requestAddFile,
                                               None)
            self.action_buttons['save'].connect("clicked",
                                                self.guiHandler.requestInsFile,
                                                None)
            self.action_buttons['rem'].connect("clicked",
                                               self.guiHandler.requestRemFile,
                                               None)
            self.action_buttons['server'].connect(
                "clicked", self.guiHandler.switch_to_server, None)

            self.action_bar.insert(self.action_buttons['add'], -1)
            self.action_bar.insert(self.action_buttons['save'], -1)
            self.action_bar.insert(self.action_buttons['rem'], -1)
            self.action_bar.insert(self.action_buttons['server'], -1)

            # Check for server, if found activate connect link
            def check_server_status():
                try:
                    if self.activity.check_for_server():
                        self.action_buttons['server'].set_sensitive(True)
                except ServerRequestFailure:
                    pass

            threading.Thread(target=check_server_status).start()

        else:
            self.action_buttons['down'].connect(
                "clicked", self.guiHandler.requestDownloadFile, None)
            self.action_bar.insert(self.action_buttons['down'], -1)

            if self.activity._mode == 'SERVER' and self.activity._user_permissions != 0:
                self.action_buttons['add'].connect(
                    "clicked", self.guiHandler.requestAddFile,
                    {'upload': True})
                self.action_buttons['rem'].connect(
                    "clicked", self.guiHandler.requestRemFile,
                    {'remove': True})

                self.action_bar.insert(self.action_buttons['add'], -1)
                self.action_bar.insert(self.action_buttons['rem'], -1)

                if self.activity._user_permissions == 2:
                    self.action_buttons['admin'].connect(
                        "clicked", self.guiHandler.showAdmin, None)
                    self.action_bar.insert(self.action_buttons['admin'], -1)

        self.action_bar.show_all()

        self.toolbar_set_selection(False)

        # Create Toolbox
        self.toolbox = ActivityToolbox(self.activity)

        self.toolbox.add_toolbar(_("Actions"), self.action_bar)

        self.activity.set_toolbox(self.toolbox)
        self.toolbox.show()
        self.toolbox.set_current_toolbar(1)

    def on_selection_changed(self, selection):
        if selection.count_selected_rows() == 0:
            self.toolbar_set_selection(False)
        else:
            self.toolbar_set_selection(True)

    def toolbar_set_selection(self, selected):
        require_selection = ['save', 'rem', 'down']
        for key in require_selection:
            if selected:
                self.action_buttons[key].set_sensitive(True)
            else:
                self.action_buttons[key].set_sensitive(False)

    def build_table(self):
        # Create File Tree
        ##################

        #       Name            Cell_data_Func      Expand  Cell Renderer
        text_cells = [
            [_('Name'), FileInfo.file_name, False,
             gtk.CellRendererText()],
            [
                _('Description'), FileInfo.file_desc, True,
                gtk.CellRendererText()
            ], [_('Tags'), FileInfo.file_tags, False,
                gtk.CellRendererText()],
            [_('Size'), FileInfo.file_size, False,
             gtk.CellRendererText()],
            ['', FileInfo.load_bar, False,
             gtk.CellRendererProgress()]
        ]

        for col_data in text_cells:
            cell = col_data[3]
            colName = gtk.TreeViewColumn(col_data[0], cell)
            colName.set_cell_data_func(cell, col_data[1])

            # Should the col expand
            colName.set_expand(col_data[2])

            # Add to tree
            self.treeview.append_column(colName)

        # make it searchable by name
        self.treeview.set_search_column(1)

        # Allow Multiple Selections
        self.treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
        self.treeview.get_selection().connect('changed',
                                              self.on_selection_changed)

        # Put table into scroll window to allow it to scroll
        self.add_with_viewport(self.treeview)

    def clear_files(self, deleteFile=True):
        model = self.treeview.get_model()
        iter = model.get_iter_root()
        while iter:
            key = model.get_value(iter, 0)

            # Remove file from UI
            self.guiHandler._remFileFromUIList(key)

            # UnRegister File with activity share list
            self.activity._unregisterShareFile(key)

            # Attempt to remove file from system
            if deleteFile:
                self.activity.delete_file(key)

            iter = model.iter_next(iter)

    def update_progress(self, id, bytes):
        model = self.treeview.get_model()
        iter = model.get_iter_first()
        while iter:
            if model.get_value(iter, 0) == id:
                break
            iter = model.iter_next(iter)

        if iter:
            obj = model.get_value(iter, 1)
            obj.update_aquired(bytes)

            # Store updated versoin of the object
            self.activity.updateFileObj(id, obj)
            model.set_value(iter, 1, obj)

            model.row_changed(model.get_path(iter), iter)

    def set_installed(self, id, sucessful=True):
        model = self.treeview.get_model()
        iter = model.get_iter_first()
        while iter:
            if model.get_value(iter, 0) == id:
                break
            iter = model.iter_next(iter)

        if iter:
            obj = model.get_value(iter, 1)
            if sucessful:
                obj.set_installed()
            else:
                obj.set_failed()

            # Store updated versoin of the object
            self.activity.updateFileObj(id, obj)
            model.set_value(iter, 1, obj)
            model.row_changed(model.get_path(iter), iter)