コード例 #1
0
class ImagesDialog(Dialog, BaseWidget):
    def __init__(self, parent_win=None):
        BaseWidget.__init__(self, 'Images selector', parent_win=parent_win)

        self._videos = ControlCheckBoxList('Videos filter')
        self._images = ControlCheckBoxList('Images filter')

        Dialog.__init__(self)

        self.formset = [('_videos', '||', '_images')]
        self._videos.selection_changed_event = self.__selection_changed_event
        self._videos.changed_event = self.__update_images

        #for video in conf.PROJECT.videos: self += video

    #####################################################################
    ### PRIVATE FUNCTIONS ###############################################
    #####################################################################

    def __selection_changed_event(self):
        self.video_selection_changed_event()

    #####################################################################
    ### EVENTS ##########################################################
    #####################################################################

    def video_selection_changed_event(self):
        pass

    #####################################################################
    ### FUNCTIONS #######################################################
    #####################################################################

    # used to update automaticly the name of the videos, objects and paths
    def refresh(self):
        self._videos.refresh()
        self._images.refresh()

    def __add__(self, other):
        if isinstance(other, Video): self._videos += (other, False)
        if isinstance(other, Image): self.__update_images()
        return self

    def __sub__(self, other):
        if isinstance(other, Video):
            self._videos -= other
            self.__update_images()
        if isinstance(other, Image): self.__update_images()
        return self

    def __update_images(self):
        """
		Update the objects in the list
		"""
        images = [elem for elem, checked in self._images.items]

        images_list = []
        for video, checked in self._videos.items:
            for img in video.images:
                images_list.append(img)
                if not checked and img in images:
                    self._images -= img
                elif checked and img not in images:
                    self._images += (img, False)

        for img in images:
            if img not in images_list: self._images -= img

    #####################################################################
    ### PROPERTIES ######################################################
    #####################################################################

    @property
    def single_select(self):
        return self._images.value

    @single_select.setter
    def single_select(self, value):
        return self._images.value

    @property
    def images(self):
        return self._images.value

    @property
    def selected_data(self):
        videos = self._videos.value
        images = self._images.value
        res = []
        for video in videos:
            images_list = []
            for img in video.images:
                images_list.append(img)
            res.append((video, images_list))
        return res

    @property
    def selected_video(self):
        ###########################################
        # current mouse selected video
        ###########################################
        index = self._videos.selected_row_index
        if index < 0: return None

        video, selected = self._videos.items[index]
        return video
class VideosSelectorDialog(Dialog, BaseWidget):
    def __init__(self, parent_win=None):
        BaseWidget.__init__(self, 'Videos selector', parent_win=parent_win)
        self._videos = ControlCheckBoxList('Videos filter')

        Dialog.__init__(self)

        self.formset = ['_videos']
        self._videos.selection_changed_event = self.__selection_changed_event

        #for video in conf.PROJECT.videos: self += video

    #####################################################################
    ### PRIVATE FUNCTIONS ###############################################
    #####################################################################

    def __selection_changed_event(self):
        self.video_selection_changed_event()

    #####################################################################
    ### EVENTS ##########################################################
    #####################################################################

    def video_selection_changed_event(self):
        pass

    #####################################################################
    ### FUNCTIONS #######################################################
    #####################################################################

    # used to update automaticly the name of the videos, objects and paths
    def refresh(self):
        self._videos.refresh()

    def clear(self):
        self._videos.clear()

    def __add__(self, other):
        if isinstance(other, Video): self._videos += (other, False)
        return self

    def __sub__(self, other):
        if isinstance(other, Video): self._videos -= other
        return self

    #####################################################################
    ### PROPERTIES ######################################################
    #####################################################################

    @property
    def selected_data(self):
        return self._videos.value

    @property
    def selected_video(self):
        ###########################################
        # current mouse selected video
        ###########################################
        index = self._videos.selected_row_index
        if index < 0: return None

        video, selected = self._videos.items[index]
        return video

    @property
    def videos(self):
        return self._videos.value
コード例 #3
0
class ObjectsDialog(Dialog, BaseWidget):
    def __init__(self, parent_win=None, title='Objects selector'):
        BaseWidget.__init__(self, title, parent_win=parent_win)

        self._objects_filter = None

        self._videos = ControlCheckBoxList('Videos filter')
        self._objects = ControlCheckBoxList('Objects filter')

        self._videos.add_popup_menu_option('Select video',
                                           self.__selection_changed_event)

        Dialog.__init__(self)

        self.formset = [('_videos', '||', '_objects')]
        self._videos.selection_changed_event = self.__selection_changed_event
        self._videos.changed_event = self.update_objects
        self._objects.changed_event = self.__objects_changed_event

    #####################################################################
    ### PRIVATE FUNCTIONS ###############################################
    #####################################################################

    def __selection_changed_event(self):
        self.video_selection_changed_event()

    def __objects_changed_event(self):
        self.objects_changed_event()

    #####################################################################
    ### EVENTS ##########################################################
    #####################################################################

    def video_selection_changed_event(self):
        pass

    def objects_changed_event(self):
        pass

    #####################################################################
    ### FUNCTIONS #######################################################
    #####################################################################

    # used to update automaticly the name of the videos, objects and paths
    def refresh(self):
        self._videos.refresh()
        self._objects.refresh()

    def __add__(self, other):
        if isinstance(other, Video): self._videos += (other, False)
        if isinstance(other, VideoObject): self.update_objects()
        return self

    def __sub__(self, other):
        if isinstance(other, Video):
            self._videos -= other
            self.update_objects()
        if isinstance(other, VideoObject): self.update_objects()
        return self

    def update_objects(self):
        """
		Update the objects in the list
		"""
        objects = [elem for elem, checked in self._objects.items]

        objects_list = []
        for video, checked in self._videos.items:
            for obj in video.objects:
                if self._objects_filter and not self._objects_filter(obj):
                    continue

                objects_list.append(obj)
                if not checked and obj in objects:
                    self._objects -= obj
                elif checked and obj not in objects:
                    self._objects += (obj, False)

        for obj in objects:
            if obj not in objects_list: self._objects -= obj

    #####################################################################
    ### PROPERTIES ######################################################
    #####################################################################

    @property
    def objects(self):
        return self._objects.value

    @property
    def selected_video(self):
        ###########################################
        # current mouse selected video
        ###########################################
        index = self._videos.selected_row_index
        if index < 0: return None

        video, selected = self._videos.items[index]
        return video

    @property
    def selected_data(self):
        videos = self._videos.value
        objects = self._objects.value
        res = []
        for video in videos:
            objects_list = []
            for obj in video.objects:
                if obj in objects: objects_list.append(obj)
            res.append((video, objects_list))
        return res

    @property
    def objects_filter(self):
        return self._objects_filter

    @objects_filter.setter
    def objects_filter(self, value):
        self._objects_filter = value
class DatasetsSelectorDialog(ObjectsDialog):
    def __init__(self, parent_win=None):
        ObjectsDialog.__init__(
            self,
            parent_win=parent_win,
            title='Datasets selector',
        )

        self._datasets = ControlCheckBoxList('Datasets filter')

        self.formset = [('_videos', '||', '_objects', '||', '_datasets')]

        self._objects.changed_event = self.__update_datasets
        self._datasets.changed_event = self.__datasets_changed_event

        self.load_order = ['_videos', '_objects', '_datasets']

        #for video in conf.PROJECT.videos: self += video

    #####################################################################
    ### PRIVATE FUNCTIONS ###############################################
    #####################################################################

    def __datasets_changed_event(self):
        self.datasets_changed_event()

    #####################################################################
    ### EVENTS ##########################################################
    #####################################################################

    def datasets_changed_event(self):
        pass

    #####################################################################
    ### FUNCTIONS #######################################################
    #####################################################################
    """
    def save_form(self, data={}, path=None):
        allparams = self.controls

        if hasattr(self, 'load_order'):
            for name in self.load_order:
                param = allparams[name]
                data[name] = {}
                param.save_form(data[name])
        else:
            for name, param in allparams.items():
                data[name] = {}
                param.save_form(data[name])
        return data
    """

    # used to update automaticly the name of the videos, objects and paths
    def refresh(self):
        ObjectsDialog.refresh(self)
        self._datasets.refresh()

    def clear(self):
        ObjectsDialog.clear(self)
        self._datasets.clear()

    def __add__(self, other):
        ObjectsDialog.__add__(self, other)
        if isinstance(other, Dataset): self.__update_datasets()
        return self

    def __sub__(self, other):
        ObjectsDialog.__sub__(self, other)
        if isinstance(other, Dataset): self.__update_datasets()
        return self

    def update_objects(self):
        """
        Update the objects in the list
        """
        ObjectsDialog.update_objects(self)
        self.__update_datasets()

    def __update_datasets(self):
        """
        Update the paths in the list
        """
        datasets = [elem for elem, checked in self._datasets.items]

        datasets_list = []
        for obj, checked in self._objects.items:
            if not isinstance(obj, Object2D): continue

            for dataset in obj.datasets:
                if hasattr(self, '_datasets_filter'
                           ) and not self._datasets_filter(dataset):
                    continue

                if dataset not in datasets_list: datasets_list.append(dataset)

                if not checked and dataset in datasets:
                    self._datasets -= dataset
                elif checked and dataset not in datasets:
                    self._datasets += (dataset, False)

        for dataset in datasets:
            if dataset not in datasets_list: self._datasets -= dataset

    #####################################################################
    ### PROPERTIES ######################################################
    #####################################################################

    @property
    def datasets(self):
        return self._datasets.value

    @property
    def selected_data(self):
        videos = self._videos.value
        datasets = self._datasets.value

        res = []
        for video in videos:
            datasets_list = []
            for obj in video.objects2D:
                for dataset in obj.datasets:
                    if dataset in datasets:
                        datasets_list.append(dataset)
            res.append((video, datasets_list))
        return res

    @property
    def datasets_filter(self):
        return self._datasets_filter

    @datasets_filter.setter
    def datasets_filter(self, value):
        self._datasets_filter = value