Source code for simba.ui.import_videos_frame

import os
from tkinter import *
from tkinter import ttk
from typing import Optional, Union

from simba.mixins.config_reader import ConfigReader
from simba.mixins.pop_up_mixin import PopUpMixin
from simba.ui.tkinter_functions import (CreateLabelFrameWithIcon, FileSelect,
                                        FolderSelect, SimbaButton,
                                        SimbaCheckbox, SimBADropDown)
from simba.utils.checks import (check_file_exist_and_readable,
                                check_if_dir_exists, check_instance, check_int)
from simba.utils.enums import Formats, Options
from simba.utils.errors import InvalidInputError
from simba.utils.read_write import (copy_multiple_videos_to_project,
                                    copy_single_video_to_project)

#from simba.sandbox.tkinter_drag_and_drop import FileDropBox


[docs]class ImportVideosFrame(PopUpMixin, ConfigReader): """ .. image:: _static/img/ImportVideosFrame.webp :alt: Import Videos Frame :width: 500 :align: center :param Optional[Union[Frame, Canvas, LabelFrame, ttk.Frame]] parent_frm: Parent frame to insert the Import Videos frame into. If None, one is created. :param Optional[Union[str, os.PathLike]] config_path: :param Optional[int] idx_row: The row in parent_frm to insert the Videos frame into. Default: 0. :param Optional[int] idx_column: The column in parent_frm to insert the Videos frame into. Default: 0. :example: >>> ImportVideosFrame(config_path='/Users/simon/Desktop/envs/simba/troubleshooting/two_black_animals_14bp/project_folder/project_config.ini') """ def __init__(self, parent_frm: Optional[Union[Frame, Canvas, LabelFrame, ttk.Frame]] = None, config_path: Optional[Union[str, os.PathLike]] = None, idx_row: Optional[int] = 0, idx_column: Optional[int] = 0): if parent_frm is None and config_path is None: raise InvalidInputError(msg='If parent_frm is None, please pass config_path', source=self.__class__.__name__) elif parent_frm is None and config_path is not None: PopUpMixin.__init__(self, config_path=config_path, title='IMPORT VIDEO FILES', icon='import') parent_frm = self.main_frm check_instance(source=f'{ImportVideosFrame} parent_frm', accepted_types=(Frame, Canvas, LabelFrame, ttk.Frame), instance=parent_frm) check_int(name=f'{ImportVideosFrame} idx_row', value=idx_row, min_value=0) check_int(name=f'{ImportVideosFrame} idx_column', value=idx_column, min_value=0) import_videos_frm = CreateLabelFrameWithIcon(parent=parent_frm, header="IMPORT VIDEOS", icon_name='import', relief='solid', padx=5, pady=5) if config_path is None: Label(import_videos_frm, text="Please CREATE PROJECT CONFIG before importing VIDEOS \n", font=Formats.FONT_REGULAR.value).grid(row=0, column=0, sticky=NW) import_videos_frm.grid(row=0, column=0, sticky=NW) else: ConfigReader.__init__(self, config_path=config_path, read_video_info=False) import_multiple_videos_frm = CreateLabelFrameWithIcon(parent=import_videos_frm, header="IMPORT MULTIPLE VIDEOS", icon_name='stack') self.video_directory_select = FolderSelect(import_multiple_videos_frm, "VIDEO DIRECTORY: ", lblwidth=25, entry_width=25, tooltip_key='IMPORT_VIDEOS_VIDEO_DIRECTORY') self.video_type = SimBADropDown(parent=import_multiple_videos_frm, dropdown_options=Options.VIDEO_FORMAT_OPTIONS.value, label="VIDEO FILE FORMAT: ", label_width=25, dropdown_width=25, value=Options.VIDEO_FORMAT_OPTIONS.value[0], tooltip_key='IMPORT_VIDEOS_VIDEO_FILE_FORMAT') import_multiple_btn = SimbaButton(parent=import_multiple_videos_frm, txt="Import MULTIPLE videos", txt_clr='blue', font=Formats.FONT_REGULAR.value, cmd=self.__run_video_import, cmd_kwargs={"multiple_videos": lambda: True}) multiple_videos_symlink_cb, self.multiple_videos_symlink_var = SimbaCheckbox(parent=import_multiple_videos_frm, txt="Import SYMLINKS", txt_img='link', tooltip_key='IMPORT_VIDEOS_IMPORT_SYMLINKS') import_single_frm = CreateLabelFrameWithIcon(parent=import_videos_frm, header="IMPORT SINGLE VIDEO", icon_name='video') self.video_file_select = FileSelect(import_single_frm, "VIDEO PATH: ", title="Select a video file", lblwidth=25, file_types=[("VIDEO FILE", Options.ALL_VIDEO_FORMAT_STR_OPTIONS.value)], entry_width=25, tooltip_key='IMPORT_VIDEOS_VIDEO_PATH') import_single_btn = SimbaButton(parent=import_single_frm, txt="Import SINGLE video", txt_clr='blue', font=Formats.FONT_REGULAR.value, cmd=self.__run_video_import, cmd_kwargs={"multiple_videos": lambda: False}) single_video_symlink_cb, self.single_video_symlink_var = SimbaCheckbox(parent=import_single_frm, txt="Import SYMLINKS", txt_img='link', tooltip_key='IMPORT_VIDEOS_IMPORT_SYMLINKS') import_videos_frm.grid(row=0, column=0, sticky=NW) import_multiple_videos_frm.grid(row=0, sticky=W) self.video_directory_select.grid(row=1, sticky=W) self.video_type.grid(row=2, sticky=W) multiple_videos_symlink_cb.grid(row=3, sticky=W) import_multiple_btn.grid(row=4, sticky=W) import_single_frm.grid(row=1, column=0, sticky=NW) self.video_file_select.grid(row=0, sticky=W) single_video_symlink_cb.grid(row=1, sticky=W) import_single_btn.grid(row=2, sticky=W) import_videos_frm.grid(row=idx_row, column=idx_column, sticky=NW) #video_drop_box = FileDropBox(parent=import_videos_frm) #video_drop_box.drop_box_frm.grid(row=2, column=1, sticky=NW) #parent_frm.mainloop() def __run_video_import(self, multiple_videos: bool): if multiple_videos: check_if_dir_exists(in_dir=self.video_directory_select.folder_path) copy_multiple_videos_to_project(config_path=self.config_path, source=self.video_directory_select.folder_path, symlink=self.multiple_videos_symlink_var.get(), file_type=self.video_type.getChoices()) else: check_file_exist_and_readable(file_path=self.video_file_select.file_path) copy_single_video_to_project(simba_ini_path=self.config_path, symlink=self.single_video_symlink_var.get(), source_path=self.video_file_select.file_path)
#ImportVideosFrame(config_path=r"C:\troubleshooting\RAT_NOR\project_folder\project_config.ini")