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
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