Пример #1
0
    def __init__(self,
                 parent,
                 headers,
                 buttons,
                 border=10,
                 edit_callback=None):
        super().__init__(parent)

        self._listbox = Table(self,
                              headers=[str(x.value) for x in headers],
                              callback=edit_callback)

        # CONTROL FRAMES
        button_frame = Panel(self)
        button_sizer = BoxSizer(HORIZONTAL)
        for callback, text in buttons:
            button_sizer.Add(SimpleButton(button_frame,
                                          text_button=text,
                                          callback=callback),
                             flag=TOP,
                             border=border)
        button_frame.SetSizer(button_sizer)
        # ALIGN
        sizer = BoxSizer(VERTICAL)
        sizer.Add(self._listbox, 1, EXPAND)
        sizer.Add(button_frame)
        self.SetSizer(sizer)
Пример #2
0
 def construct_notebook(self):
     """Constructs the main Notebook panel"""
     panel = Panel(self)
     self.notebook = Notebook(panel, style=NB_LEFT)
     self.construct_tabs()
     sizer = BoxSizer(HORIZONTAL)
     sizer.Add(self.notebook, 1, EXPAND)
     panel.SetSizer(sizer)
Пример #3
0
    def __init__(self, *callbacks):
        Frame.__init__(self, None, ID_ANY, "CUT")
        self.Bind(EVT_CLOSE, lambda x: self.Destroy())
        root = Panel(self, EXPAND)
        sizer = BoxSizer(VERTICAL)

        elements = []
        for element in callbacks:
            sizer.Add(element, 1, EXPAND)

        root.SetSizer(sizer)
Пример #4
0
 def field_from_value(self, window, value, field):
     item = None
     if isinstance(value, six.string_types):
         item = TextCtrl(window, value=value)
         field.text_type = STRING_SETTING
     elif isinstance(value, list):
         if isinstance(value[0], six.string_types):
             item = TextCtrl(window, value=", ".join(value))
             field.text_type = STRING_LIST_SETTING
         elif isinstance(value[0], numbers.Real):
             item = TextCtrl(window,
                             value=", ".join((str(x) for x in value)))
             field.text_type = NUMBER_LIST_SETTING
     elif isinstance(value, bool):
         item = CheckBox(window, -1, '', (120, 75))
         item.SetValue(value)
     elif isinstance(value, numbers.Real):
         item = TextCtrl(window, value=str(value))
         field.text_type = NUMBER_SETTING
     elif isinstance(value, dict):
         subpage = Panel(window)
         vbox = BoxSizer(VERTICAL)
         for lbl in sorted(value.keys()):
             hbox = BoxSizer(HORIZONTAL)
             value2 = value[lbl]
             label = StaticText(subpage, label=lbl)
             hbox.Add(label, flag=RIGHT, border=8)
             subfield = Field(None, lbl)
             item = self.field_from_value(subpage, value2, subfield)
             field.add_child(subfield)
             if item is not None:
                 hbox.Add(item, proportion=1)
             vbox.Add(hbox, flag=EXPAND | LEFT | RIGHT | TOP, border=5)
             vbox.Add((-1, 5))
         subpage.SetSizer(vbox)
         subpage.Show()
         item = subpage
     else:
         # This is left for bug reporting purposes.
         printer.out(("{} from the field {} was not assigned to " +
                      "{} because type {} wasn't properly handled.").format(
                          value, field, window, type(value)))
     field.widget = item
     return item
Пример #5
0
 def field_from_value(self, window, value, field):
     item = None
     if isinstance(value, basestring):
         item = TextCtrl(window, value=value)
         field.text_type = STRING_SETTING
     elif isinstance(value, list):
         if isinstance(value[0], basestring):
             item = TextCtrl(window, value=", ".join(value))
             field.text_type = STRINGLIST_SETTING
         elif isinstance(value[0], int):
             item = TextCtrl(window,
                             value=", ".join((str(x) for x in value)))
             field.text_type = INTEGERLIST_SETTING
     elif isinstance(value, bool):
         item = CheckBox(window, -1, '', (120, 75))
         item.SetValue(value)
     elif isinstance(value, int):
         item = TextCtrl(window, value=str(value))
         field.text_type = INTEGER_SETTING
     elif isinstance(value, dict):
         subpage = Panel(window)
         vbox = BoxSizer(VERTICAL)
         alpha = value.keys()
         alpha.sort()
         for lbl in alpha:
             hbox = BoxSizer(HORIZONTAL)
             value2 = value[lbl]
             label = StaticText(subpage, label=lbl)
             hbox.Add(label, flag=RIGHT, border=8)
             subfield = Field(None, lbl)
             item = self.field_from_value(subpage, value2, subfield)
             field.add_child(subfield)
             if item is not None:
                 hbox.Add(item, proportion=1)
             vbox.Add(hbox, flag=EXPAND | LEFT | RIGHT | TOP, border=5)
             vbox.Add((-1, 5))
         subpage.SetSizer(vbox)
         subpage.Show()
         item = subpage
     field.wx_field = item
     return item
Пример #6
0
class PreviewWindow(Frame):
    def __init__(self, setting_maneger: SettingManeger,
                 contents_display: ContentsDisplay, *args, **kw):
        super().__init__(*args, **kw)
        icon_bundle = self.GetParent().GetIcons()
        if not icon_bundle.IsEmpty():
            self.SetIcon(icon_bundle.GetIconByIndex(0))

        self.sm = setting_maneger
        self.main_window = self.GetParent()
        self.contents_display = contents_display

        self.panel = Panel(self)

        space_length, wrap_length, newline_count = self.sm.formmat_parameter
        self.space_lbl = NormalText(self.panel)
        self.space_display = IncrementWidget(space_length,
                                             min_=0,
                                             parent=self.panel,
                                             listener=self.check)

        self.wrap_lbl = NormalText(self.panel)
        self.wrap_length_display = IncrementWidget(wrap_length,
                                                   parent=self.panel,
                                                   listener=self.check)

        self.newline_lbl = NormalText(self.panel)
        self.newline_display = IncrementWidget(newline_count,
                                               min_=0,
                                               parent=self.panel,
                                               listener=self.check)

        self.entry = PreviewEntry(self.panel,
                                  style=TE_MULTILINE | TE_READONLY | HSCROLL)

        self.change_language()
        self.set_color()
        self.layout()
        self.update()

        self.contents_display.Bind(EVT_TEXT, self.update)

    def layout(self):
        master_grid = FlexGridSizer(rows=2, cols=1, gap=(0, 0))
        grid = GridSizer(rows=2, cols=3, gap=(0, 0))
        grid.Add(self.space_lbl, 0, ALIGN_CENTER)
        grid.Add(self.wrap_lbl, 0, ALIGN_CENTER)
        grid.Add(self.newline_lbl, 0, ALIGN_CENTER)
        grid.Add(self.space_display, 0, ALIGN_CENTER)
        grid.Add(self.wrap_length_display, 0, ALIGN_CENTER)
        grid.Add(self.newline_display, 0, ALIGN_CENTER)
        master_grid.Add(grid, 0, ALIGN_CENTER | ALL, 10)
        master_grid.Add(self.entry, 1, EXPAND)
        master_grid.AddGrowableRow(1)
        master_grid.AddGrowableCol(0)
        self.panel.SetSizer(master_grid)
        self.panel.Fit()
        self.Fit()
        width, height = self.GetSize()
        height = WINDOW_HEIGHT
        self.SetSize(-1, -1, width, height)

    def set_color(self):
        self.entry.SetBackgroundColour('#eee')

    def change_language(self):
        language = self.sm.selected_language
        space_length_lbl = language[SPACE_LENGTH_LABEL]
        wrap_length_lbl = language[WRAP_LENGTH_LABEL]
        newline_count_lbl = language[NEWLINE_COUNT_LABEL]

        self.space_lbl.SetLabel(space_length_lbl)
        self.wrap_lbl.SetLabel(wrap_length_lbl)
        self.newline_lbl.SetLabel(newline_count_lbl)

        self.panel.Layout()
        self.Layout()

    def check(self):
        space = self.space_display.value
        max_len = self.wrap_length_display.value
        margin = 2
        indent = 8 + space
        if max_len - indent < margin:
            max_len = indent + margin
            self.wrap_length_display.set_value(max_len)

        if indent + margin == max_len:
            self.wrap_length_display.left_btn.Disable()
        else:
            self.wrap_length_display.left_btn.Enable()

        self.panel.Layout()
        self.sm.set_parameter([
            self.space_display.value, self.wrap_length_display.value,
            self.newline_display.value
        ])
        self.update()

    def update(self, event=None):
        space_length, wrap_length, newline_count = self.sm.formmat_parameter
        output = self.contents_display.convert_string(space_length,
                                                      wrap_length,
                                                      newline_count)
        self.entry.SetValue(output)

        if event is not None:
            event.Skip()

    def Destroy(self, is_destroy=False):
        self.Hide()
        return False
Пример #7
0
class MainWindow(Frame):
    def __init__(self, *args, **kw):
        super().__init__(*args, **kw)
        self.sm = SettingManeger()

        icon_file = get_data_safety(self.sm.setting, ICON_FILE)
        if icon_file is not None and exists(icon_file):
            icon = Icon(find_data_file(icon_file))
            self.SetIcon(icon)
        self.menubar, self.language_menu_item_list = self.create_menubar(
            self.sm.language_list)
        self.SetMenuBar(self.menubar)

        if 0 <= len(
                self.language_menu_item_list) - 1 <= self.sm.language_index:
            self.language_menu_item_list[self.sm.language_index].Check()

        self.panel = Panel(self)
        self.preview_button = NormalButton(self.panel,
                                           label=SHOW_LABEL,
                                           size=(40, 40),
                                           pos=(10, 10))
        self.separeter_line = StaticLine(self.panel, size=(3000, 2))
        self.add_button = NormalButton(self.panel,
                                       label=ADD_LABEL,
                                       size=(40, 40))

        self.timer_display = TimerDisplay(self, parent=self.panel)
        self.contents_display = ContentsDisplay(self,
                                                self.timer_display,
                                                parent=self.panel,
                                                style=ALWAYS_SHOW_SB)

        self.preview_window = PreviewWindow(self.sm,
                                            self.contents_display,
                                            parent=self)
        welcome_contents = self.sm.welcome_contents_list[
            self.sm.
            language_index] if self.sm.welcome_contents_list is not None else ERROR_MESSAGE
        self.welcome_window = ScrolledWindow(welcome_contents, parent=self)
        about_contents = self.sm.about_contents_list[
            self.sm.
            language_index] if self.sm.about_contents_list is not None else ERROR_MESSAGE
        self.about_window = ScrolledWindow(about_contents, parent=self)

        self.reset()

        self.change_language()
        self.connect()
        self.set_color()
        self.layout()

    def connect(self):
        self.menubar.Bind(EVT_MENU,
                          lambda x: self.contents_display.export(),
                          id=ID_FILE_EXPORT)
        self.menubar.Bind(EVT_MENU, lambda x: self.Destroy(), id=ID_FILE_EXIT)
        self.menubar.Bind(EVT_MENU,
                          lambda x: self.run(),
                          id=ID_EDIT_TIMER_START)
        self.menubar.Bind(EVT_MENU,
                          lambda x: self.pause(),
                          id=ID_EDIT_TIMER_PAUSE)
        self.menubar.Bind(EVT_MENU,
                          lambda x: self.reset(),
                          id=ID_EDIT_TIMER_RESET)
        self.menubar.Bind(EVT_MENU,
                          lambda x: self.new(),
                          id=ID_EDIT_TIME_STAMP_NEW)
        self.menubar.Bind(EVT_MENU,
                          lambda x: self.show_preview(),
                          id=ID_VIEW_SHOW_PREVIEW)
        self.menubar.Bind(EVT_MENU,
                          lambda x: self.welcome_window.Show(),
                          id=ID_HELP_WELCOME)
        self.menubar.Bind(EVT_MENU,
                          lambda x: open_github(),
                          id=ID_HELP_VISIT_GITHUB)
        self.menubar.Bind(EVT_MENU,
                          lambda x: self.about_window.Show(),
                          id=ID_HELP_ABOUT)

        self.timer_display.start_btn.Bind(EVT_BUTTON, lambda x: self.run())
        self.timer_display.pause_btn.Bind(EVT_BUTTON, lambda x: self.pause())
        self.timer_display.reset_btn.Bind(EVT_BUTTON, lambda x: self.reset())
        self.preview_button.Bind(EVT_BUTTON, lambda x: self.show_preview())
        self.add_button.Bind(EVT_BUTTON, lambda x: self.new())

    def set_color(self):
        pass

    def layout(self):
        vbox = BoxSizer(VERTICAL)

        vbox.Add(self.timer_display, 0, EXPAND)
        vbox.Add(self.contents_display, 1, EXPAND | LEFT, 10)
        vbox.Add(self.separeter_line, 0, TOP, 5)
        vbox.Add(self.add_button, 0, ALIGN_CENTER | TOP | BOTTOM, 5)
        self.panel.SetSizer(vbox)
        self.Show()

    def create_menubar(self, language_list, style=0):
        modifier = 'Ctrl' if name == 'nt' else 'Opt'
        menubar = MenuBar()
        menubar_file = Menu()
        menubar_file.Append(ID_FILE_EXPORT, '&Export\t' + modifier + 'E')
        menubar_file.AppendSeparator()
        menubar_file.Append(ID_FILE_EXIT, 'E&xit\t' + modifier + 'W')

        menubar_edit = Menu()
        menubar_edit_timer = Menu()
        menubar_edit.AppendSubMenu(menubar_edit_timer, '&Timer')
        menubar_edit_timer.Append(ID_EDIT_TIMER_START,
                                  '&Start\t' + modifier + 'S')
        menubar_edit_timer.Append(ID_EDIT_TIMER_PAUSE,
                                  '&Pause\t' + modifier + 'P')
        menubar_edit_timer.Append(ID_EDIT_TIMER_RESET,
                                  '&Reset\t' + modifier + 'R')
        menubar_edit_time_stamp = Menu()
        menubar_edit.AppendSubMenu(menubar_edit_time_stamp, 'Time &Stamp')
        menubar_edit_time_stamp.Append(ID_EDIT_TIME_STAMP_NEW,
                                       '&New\t' + modifier + 'N')

        menubar_view = Menu()
        menubar_view.AppendCheckItem(ID_VIEW_SHOW_PREVIEW,
                                     'Show &Preview\t' + modifier + 'Shift+P')
        menubar_view_language = Menu()

        language_menu_item_list = []
        if language_list is not None:
            menubar_view_language.Bind(EVT_MENU,
                                       lambda x: self.change_language())
            menubar_view.AppendSubMenu(menubar_view_language, '&Language')

            for n in range(len(language_list)):
                language_menu_item_list.append(
                    menubar_view_language.AppendRadioItem(
                        ID_ANY, language_list[n]['Language Setting']))

        menubar_help = Menu()
        menubar_help.Append(ID_HELP_WELCOME,
                            '&Welcome\t' + modifier + 'Shift+H')
        menubar_help.AppendSeparator()
        menubar_help.Append(ID_HELP_VISIT_GITHUB, 'Visit &Github')
        menubar_help.AppendSeparator()
        menubar_help.Append(ID_HELP_ABOUT, '&About')

        menubar.Append(menubar_file, '&File')
        menubar.Append(menubar_edit, '&Edit')
        menubar.Append(menubar_view, '&View')
        menubar.Append(menubar_help, '&Help')

        return menubar, language_menu_item_list

    def change_language(self):
        modifier = 'Ctrl' if name == 'nt' else 'Opt'
        self.sm.language_index = self.selected_language
        selected_language = self.sm.selected_language

        file_ = get_data_safety(selected_language, 'File', '&File')
        export = get_data_safety(selected_language, 'Export',
                                 '&Export\t' + modifier + 'E')
        exit_ = get_data_safety(selected_language, 'Exit',
                                'E&xit\t' + modifier + 'W')
        self.menubar.SetMenuLabel(ID_FILE, file_)
        self.menubar.FindItemById(ID_FILE_EXPORT).SetItemLabel(export)
        self.menubar.FindItemById(ID_FILE_EXIT).SetItemLabel(exit_)

        edit = get_data_safety(selected_language, 'Edit', '&Edit')
        timer = get_data_safety(selected_language, 'Timer', '&Timer')
        start = get_data_safety(selected_language, 'Start',
                                '&Start\t' + modifier + 'S')
        pause = get_data_safety(selected_language, 'Pause',
                                '&Pause\t' + modifier + 'P')
        reset = get_data_safety(selected_language, 'Reset',
                                '&Reset\t' + modifier + 'R')
        time_stamp = get_data_safety(selected_language, 'Time Stamp',
                                     'Time &Stamp')
        new = get_data_safety(selected_language, 'New',
                              '&New\t' + modifier + 'N')
        self.menubar.SetMenuLabel(ID_EDIT, edit)
        self.menubar.GetMenu(ID_EDIT).FindItemByPosition(0).SetItemLabel(timer)
        self.menubar.FindItemById(ID_EDIT_TIMER_START).SetItemLabel(start)
        self.menubar.FindItemById(ID_EDIT_TIMER_PAUSE).SetItemLabel(pause)
        self.menubar.FindItemById(ID_EDIT_TIMER_RESET).SetItemLabel(reset)
        self.menubar.GetMenu(ID_EDIT).FindItemByPosition(1).SetItemLabel(
            time_stamp)
        self.menubar.FindItemById(ID_EDIT_TIME_STAMP_NEW).SetItemLabel(new)

        view = get_data_safety(selected_language, 'View', '&View')
        show_preview = get_data_safety(
            selected_language, 'Show Preview',
            'Show &Preview\t' + modifier + 'Shift+P')
        language = get_data_safety(selected_language, 'Language', '&Language')
        self.menubar.SetMenuLabel(ID_VIEW, view)
        self.menubar.FindItemById(ID_VIEW_SHOW_PREVIEW).SetItemLabel(
            show_preview)
        self.menubar.GetMenu(ID_VIEW).FindItemByPosition(1).SetItemLabel(
            language)

        help_ = get_data_safety(selected_language, 'Help', '&Help')
        welcome = get_data_safety(selected_language, 'Welcome',
                                  '&Welcome\t' + modifier + 'Shift+H')
        visit_github = get_data_safety(selected_language, 'Visit Github',
                                       'Visit &Github')
        about = get_data_safety(selected_language, 'About', '&About')
        self.menubar.SetMenuLabel(ID_HELP, help_)
        self.menubar.FindItemById(ID_HELP_WELCOME).SetItemLabel(welcome)
        self.menubar.FindItemById(ID_HELP_VISIT_GITHUB).SetItemLabel(
            visit_github)
        self.menubar.FindItemById(ID_HELP_ABOUT).SetItemLabel(about)

        shown_welcome_window = self.welcome_window.IsShown()
        self.welcome_window.Destroy(True)
        welcome_content = self.sm.welcome_contents_list[
            self.
            selected_language] if self.sm.welcome_contents_list is not None else ERROR_MESSAGE
        self.welcome_window = ScrolledWindow(welcome_content, parent=self)
        self.welcome_window.Show(shown_welcome_window)

        shown_about_window = self.about_window.IsShown()
        self.about_window.Destroy(True)
        about_content = self.sm.about_contents_list[
            self.
            selected_language] if self.sm.about_contents_list is not None else ERROR_MESSAGE
        self.about_window = ScrolledWindow(about_content, parent=self)
        self.about_window.Show(shown_about_window)

        shown_preview_window = self.preview_window.IsShown()
        self.preview_window.Destroy(True)
        self.preview_window = PreviewWindow(self.sm,
                                            self.contents_display,
                                            parent=self)
        self.preview_window.Show(shown_preview_window)

    def run(self):
        self.add_button.Enable()
        self.preview_button.Enable()
        self.menubar.FindItemById(ID_FILE_EXPORT).Enable(True)
        self.menubar.FindItemById(ID_EDIT_TIMER_START).Enable(False)
        self.menubar.FindItemById(ID_EDIT_TIMER_PAUSE).Enable(True)
        self.menubar.FindItemById(ID_EDIT_TIMER_RESET).Enable(True)
        self.menubar.FindItemById(ID_EDIT_TIME_STAMP_NEW).Enable(True)
        self.menubar.FindItemById(ID_VIEW_SHOW_PREVIEW).Enable(True)
        self.timer_display.start()

    def pause(self):
        self.menubar.FindItemById(ID_EDIT_TIMER_START).Enable(True)
        self.menubar.FindItemById(ID_EDIT_TIMER_PAUSE).Enable(False)
        self.menubar.FindItemById(ID_EDIT_TIMER_RESET).Enable(True)

        self.timer_display.pause()

    def reset(self):
        self.menubar.FindItemById(ID_FILE_EXPORT).Enable(False)
        self.menubar.FindItemById(ID_EDIT_TIMER_START).Enable(True)
        self.menubar.FindItemById(ID_EDIT_TIMER_PAUSE).Enable(False)
        self.menubar.FindItemById(ID_EDIT_TIMER_RESET).Enable(False)
        self.menubar.FindItemById(ID_EDIT_TIME_STAMP_NEW).Enable(False)
        self.menubar.FindItemById(ID_VIEW_SHOW_PREVIEW).Enable(False)
        if self.preview_window.IsShown():
            self.show_preview()

        self.add_button.Disable()
        self.preview_button.Disable()

        self.timer_display.reset()
        self.contents_display.reset()

    def new(self):
        self.contents_display.add_contents_panel()
        self.preview_window.update()

    def show_preview(self):
        menu_show_preview = self.menubar.FindItemById(ID_VIEW_SHOW_PREVIEW)
        if self.preview_window.IsShown():
            self.preview_button.SetLabel(SHOW_LABEL)
            menu_show_preview.Check(False)
            self.preview_window.Hide()
        else:
            self.preview_button.SetLabel(HIDE_LABEL)
            menu_show_preview.Check(True)
            self.preview_window.update()
            self.preview_window.Show()

    def Destroy(self):
        self.sm.save_setting()
        return super().Destroy()

    @property
    def selected_language(self):
        for n, menu_item in enumerate(self.language_menu_item_list):
            if menu_item.IsChecked():
                return n
Пример #8
0
    def __create_widgets(self):
        panel = Panel(self)

        sizer = GridBagSizer(5, 5)
        row = 0
        col = 0
        label = StaticText(panel, label=u'Root folder:')
        sizer.Add(label, pos=(row, col))

        col += 1
        col_width = 4
        self.__txt_root_path = TextCtrl(panel)
        sizer.Add(self.__txt_root_path,
                  pos=(row, col),
                  span=(1, col_width),
                  flag=FLAG_ALL_AND_EXPAND)

        col += col_width
        self.__btn_set_root = Button(panel, label=u'Set root folder')
        self.__btn_set_root.Bind(EVT_BUTTON, self.__set_root_folder)
        sizer.Add(self.__btn_set_root,
                  pos=(row, col),
                  flag=FLAG_ALL_AND_EXPAND)

        row += 1
        col = 0
        label = StaticText(panel, label=u'Url:')
        sizer.Add(label, pos=(row, col))

        col += 1
        self.__txt_url = TextCtrl(
            panel, value=u'https://www.google.com/')  # TODO: remove url
        sizer.Add(self.__txt_url, pos=(row, col), flag=FLAG_ALL_AND_EXPAND)

        col += 1
        label = StaticText(panel, label=u'Browser:')
        sizer.Add(label, pos=(row, col), flag=FLAG_ALL_AND_EXPAND)

        col += 1
        self.__cb_browser = Choice(panel,
                                   choices=Browser.get_supported_browsers())
        self.__cb_browser.Select(0)
        sizer.Add(self.__cb_browser, pos=(row, col), flag=FLAG_ALL_AND_EXPAND)

        col += 1
        self.bth_open_url = Button(panel, label=u'Open url')
        self.bth_open_url.Bind(EVT_BUTTON, self.__open_url)
        sizer.Add(self.bth_open_url, pos=(row, col), flag=FLAG_ALL_AND_EXPAND)

        col += 1
        self.bth_close_url = Button(panel, label=u'Close browser')
        self.bth_close_url.Bind(EVT_BUTTON, self.__close_browser)
        sizer.Add(self.bth_close_url, pos=(row, col), flag=FLAG_ALL_AND_EXPAND)

        row += 1
        col = 0
        tabs = Tabs(panel, [(GeneratorTab, "Generator"), (EditorTab, "Editor"),
                            (TestRunnerTab, "Test runner"),
                            (SelectorFinderTab, "Selector finder")])
        sizer.Add(tabs, pos=(row, col), span=(1, 6), flag=FLAG_ALL_AND_EXPAND)

        sizer.AddGrowableCol(1, 1)
        sizer.AddGrowableRow(2, 1)
        panel.SetSizer(sizer)
        self.Layout()
Пример #9
0
class Window(Frame):
    def __init__(self):
        self.files = []
        self.path = None

        # init window
        Frame.__init__(self, None, ID_ANY, "CUT", size=(688, 800))
        self.Bind(EVT_CLOSE, lambda x: self.Destroy())
        loc = Icon()
        loc.CopyFromBitmap(Bitmap('icon.ico', BITMAP_TYPE_ANY))
        self.SetIcon(loc)
        self.panel = Panel(self, EXPAND)
        self.sizer = BoxSizer(VERTICAL)
        self.sizer.Add(
            FileInput(self.panel,
                      text_button="Open File",
                      callback=self._set_file,
                      file_type=file_exts,
                      text_title="OPEN",
                      text_open_file="File"), 1, EXPAND)

        #  Create Input fields
        self._start_input = TimeInput(self.panel, label='START')
        self._end_input = TimeInput(self.panel, label='END')
        self._scale_input = SimpleInput(self.panel,
                                        label='Width:Height',
                                        initial='-1:-1')
        self._webm_input = SimpleInput(self.panel,
                                       label='WEBM Quality',
                                       initial='36')
        self._framerate_input = SimpleInput(self.panel,
                                            label='INPUT FRAMES FRAMERATE',
                                            initial='')

        # Create check inputs
        font = Font(20, MODERN, NORMAL, NORMAL, False, u'Consolas')

        self._audio_select = StandardSelection(parent=self.panel,
                                               options=list(
                                                   audio_options.keys()),
                                               callback=None,
                                               title='Audio codec')

        self._video_select = StandardSelection(parent=self.panel,
                                               options=list(
                                                   video_options.keys()),
                                               callback=None,
                                               title='Video format')

        # Add inputs to self.sizer
        self.sizer.Add(self._video_select, 1, EXPAND)
        self.sizer.Add(self._audio_select, 1, EXPAND)
        self.sizer.Add(
            FileInput(self.panel,
                      text_button="Clone time",
                      callback=self._clone_time,
                      file_type=file_exts,
                      text_title="OPEN",
                      text_open_file="File"), 1, EXPAND)
        self.sizer.Add(self._start_input, 1, EXPAND)
        self.sizer.Add(self._end_input, 1, EXPAND)
        self.sizer.Add(self._scale_input, 1, EXPAND)
        self.sizer.Add(self._webm_input, 1, EXPAND)
        self.sizer.Add(self._framerate_input, 1, EXPAND)

        # Add Button
        self.sizer.Add(
            SimpleButton(self.panel,
                         text_button='CUT',
                         callback=self._submit_task), 1, EXPAND)
        self.panel.SetSizer(self.sizer)

    @property
    def start_time(self):
        return self._start_input.get_value()

    @property
    def end_time(self):
        return self._end_input.get_value()

    @property
    def video_selection(self):
        return video_options[self._video_select.get_selection()]

    @property
    def audio_selection(self):
        return self._audio_select.get_selection()

    @property
    def input_framerate(self):
        return self._framerate_input.get_value()

    @property
    def scale_input(self):
        return self._scale_input.get_value()

    @property
    def webm_input(self):
        return self._webm_input.get_value()

    def _clone_time(self, path, files):
        data = files[-1]
        start, end = findall(r"\[([\d+|-]+)_([\d+|-]+)\]", data)[-1]
        self._start_input.set_value(unformat_time(start))
        self._end_input.set_value(unformat_time(end))

    def _set_file(self, path, files):
        self.path = path
        self.files = files

    def _add_progress_bar(self):
        progress_bar = ProgressBar(self.panel, style=GA_HORIZONTAL)
        self.sizer.Add(progress_bar, 0, EXPAND)
        self.Size = (self.Size[0], self.Size[1] + 20
                     )  # Enlarge window to fit new progress bar
        self.Update()
        return progress_bar

    def _submit_task(self, event):
        info('START TASK')

        if self._video_select.get_selection() == 'gif':
            task = TaskGif
        else:
            task = Task

        bar = self._add_progress_bar()
        task(self, bar).start()