コード例 #1
0
ファイル: app.py プロジェクト: ivpusic/kivy-designer
    def _show_open_dialog(self, *args):
        '''To show FileBrowser to "Open" a project
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        self._fbrowser = FileBrowser(select_string='Open')

        def_path = os.getcwd()
        if not self.project_loader.new_project and \
                self.project_loader.proj_dir:
            def_path = self.project_loader.proj_dir

        if self._fbrowser.ids.tabbed_browser.current_tab.text == 'List View':
            self._fbrowser.ids.list_view.path = def_path
        else:
            self._fbrowser.ids.icon_view.path = def_path

        self._fbrowser.bind(on_success=self._fbrowser_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title="Open",
                            content=self._fbrowser,
                            size_hint=(0.9, 0.9),
                            auto_dismiss=False)
        self._popup.open()
コード例 #2
0
ファイル: main.py プロジェクト: dworak/SWD2014
 def przegladajDysk(self):
     user_path = expanduser('~') + sep + 'Documents'
     browser = FileBrowser(select_string='Select',
                           favorites=[(user_path, 'Documents')])
     browser.bind(on_success=self._fbrowser_success,
                  on_canceled=self._fbrowser_canceled)
     return browser
コード例 #3
0
    def __init__(self, short_text='File Browser'):

        try:
            f = open('./Appdata/config.txt')
            lines = f.readlines()
            video_input_path = lines[0]
            video_input_path = video_input_path[:-1]
            video_input_path = os.path.abspath(video_input_path)
            video_output_path = lines[1]
            video_output_path = video_output_path[:-1]
            video_output_path = os.path.abspath(video_output_path)
            f.close()

        except:
            video_input_path = './Appdata/InputVideos/'
            video_output_path = './Appdata/output/'

        browser = FileBrowser(select_string='Select',
                              cancel_state='down',
                              favorites=[(video_input_path, "Input Folder"),
                                         (video_output_path, "Output Folder")])
        browser.bind(
            on_success=self._fbrowser_success,
            on_canceled=self._fbrowser_canceled,
        )

        self.popup = Popup(title=short_text,
                           content=browser,
                           size_hint=(0.7, 0.7),
                           auto_dismiss=False,
                           background_color=rgba('#2f323a'),
                           separator_color=rgba('#DAA520'),
                           title_color=rgba('#DAA520'))
コード例 #4
0
    def show_load(self):
        """  Display a pop up windows with the FileChooser for loading purpose
                        """

        self.hauteur = "1/3"
        self.nb = 2

        if platform == 'win':
            user_path = dirname(expanduser('~')) + sep + 'Documents'
        else:
            user_path = expanduser('~') + sep + 'Documents'

        browser = FileBrowser(select_string='Sélectionner',
                              path=self.memory_path,
                              favorites=[(user_path, 'Documents')],
                              filters=["*.txt"],
                              dirselect=True)
        browser.bind(on_success=self._fbrowser_success,
                     on_submit=self._fbrowser_submit,
                     on_canceled=self.dismiss_load)

        self._popup = Popup(title='Ouvrir un fichier',
                            content=browser,
                            size_hint=(0.9, 0.9))
        self._popup.open()
        if self.retour:
            return True
コード例 #5
0
ファイル: app.py プロジェクト: ivpusic/kivy-designer
    def action_btn_save_as_pressed(self, *args):
        '''Event Handler when ActionButton "Save As" is pressed.
        '''

        if self.project_loader.root_rule:
            self._curr_proj_changed = False

            self._save_as_browser = FileBrowser(select_string='Save')

            def_path = os.getcwd()
            if not self.project_loader.new_project and \
                    self.project_loader.proj_dir:
                def_path = self.project_loader.proj_dir

            if self._save_as_browser.ids.tabbed_browser.current_tab.text == \
                    'List View':
                self._save_as_browser.ids.list_view.path = def_path
            else:
                self._save_as_browser.ids.icon_view.path = def_path

            self._save_as_browser.bind(on_success=self._perform_save_as,
                                       on_canceled=self._cancel_popup)

            self._popup = Popup(title="Enter Folder Name",
                                content=self._save_as_browser,
                                size_hint=(0.9, 0.9),
                                auto_dismiss=False)
            self._popup.open()
コード例 #6
0
 def build(self):
     user_path = dirname(expanduser('~')) + sep + 'Documents'
     browser = FileBrowser(select_string='Select',
                           favorites=[(user_path, 'Documents')])
     browser.bind(on_success=self._fbrowser_success,
                  on_canceled=self._fbrowser_canceled)
     return browser
コード例 #7
0
ファイル: main.py プロジェクト: dworak/SWD2014
 def przegladajDysk(self):
     user_path = expanduser('~') + sep + 'Documents'
     browser = FileBrowser(select_string='Select',
                           favorites=[(user_path, 'Documents')])
     browser.bind(
                 on_success=self._fbrowser_success,
                 on_canceled=self._fbrowser_canceled)
     return browser
コード例 #8
0
    def open_prof_file_btn_pressed(self, *args):
        self._fbrowser = FileBrowser(select_string='Open')
        self._fbrowser.bind(on_success=self._prof_file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()
コード例 #9
0
ファイル: pictureGallery.py プロジェクト: simon0729/Test
class PictureGallery(BoxLayout):
    def __init__(self, **kwargs):
        super(PictureGallery, self).__init__(**kwargs)
        self.menu = self.ids['_menu']
        self.image_frame = self.ids['_image_frame']
        self.image_name = self.ids['_image_name']
        self.image_scatter = self.ids['_image_scatter']
        self.file_browser = FileBrowser()
        self.file_browser.bind(on_success=self.addImageEvent,
                               on_canceled=self.cancelFileBrowser)
        self.file_browser_popup = Popup(content=self.file_browser,
                                        size_hint=(.8, .8))
        self.loadPictureMenu()

    def loadPictureMenu(self):
        '''Load Dir and Add Button to Menu'''
        last_dir = ''
        self.menu.clear_widgets()
        for dir in os.listdir(PICTURE_DIR):
            splitname = os.path.splitext(dir)
            if splitname[1].strip('.') not in PICTURE_EXT:
                continue
            button_temp = MenuButton(text=splitname[0])
            button_temp.ext = splitname[1]
            button_temp.bind(on_release=self.loadPicture)
            self.menu.add_widget(button_temp)
            last_dir = dir
        self.image_name.text = os.path.splitext(last_dir)[0]
        self.image_frame.source = PICTURE_DIR + os.sep + last_dir

    def loadPicture(self, obj):
        dir = PICTURE_DIR + os.sep + obj.text + obj.ext
        self.image_name.text = obj.text
        self.image_frame.source = dir

    def showFileBrowser(self):
        self.file_browser_popup.open()

    def addImageEvent(self, obj):
        try:
            selection = obj.selection[0]
        except:
            return
        if os.path.splitext(selection)[1].strip('.') in PICTURE_EXT:
            print selection, PICTURE_DIR
            copy2(selection, PICTURE_DIR)
            self.file_browser_popup.dismiss()
            self.loadPictureMenu()

    def cancelFileBrowser(self, obj):
        self.file_browser_popup.dismiss()

    def setDefaultImageState(self):
        self.image_scatter.scale = 1.0
        self.image_scatter.pos = (self.image_name.x,
                                  self.image_name.y + self.image_name.height)
コード例 #10
0
    def __init__(self, **kwargs):
        super(BrowseLayout, self).__init__(**kwargs)
        user_path = dirname(expanduser('~')) + sep + 'Documents'

        browser = FileBrowser(select_string='Select',
                              favorites=[(user_path, 'Documents')])
        browser.bind(on_success=self._fbrowser_success,
                     on_canceled=self._fbrowser_canceled)

        self.add_widget(browser)
コード例 #11
0
 def explorer(self):
     if platform == 'win':
         user_path = dirname(expanduser('~')) + sep + 'Documents'
     else:
         user_path = expanduser('~') + sep + 'Documents'
     browser = FileBrowser(select_string='Select',
                           favorites=[(user_path, 'Documents')])
     browser.bind(on_success=self._fbrowser_success,
                  on_canceled=self._fbrowser_canceled)
     return browser
コード例 #12
0
ファイル: pictureGallery.py プロジェクト: simon0729/Test
 def __init__(self, **kwargs):
     super(PictureGallery, self).__init__(**kwargs)
     self.menu = self.ids['_menu']
     self.image_frame = self.ids['_image_frame']
     self.image_name = self.ids['_image_name']
     self.image_scatter = self.ids['_image_scatter']
     self.file_browser = FileBrowser()
     self.file_browser.bind(on_success=self.addImageEvent,
                            on_canceled=self.cancelFileBrowser)
     self.file_browser_popup = Popup(content=self.file_browser,
                                     size_hint=(.8, .8))
     self.loadPictureMenu()
コード例 #13
0
    def open_stud_file_btn_pressed(self, *args):
        user_path = os.getcwd()
        #user_path = '~/ece5725_final_project/demo' #CHANGE USER PATH OF DOWNLOADS 
        self._fbrowser = FileBrowser(select_string='Open', favorites=[
                                     (user_path, 'Documents')])
        self._fbrowser.bind(on_success=self._stud_file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()
コード例 #14
0
ファイル: app.py プロジェクト: ivpusic/kivy-designer
    def action_btn_add_custom_widget_press(self, *args):
        '''Event Handler when ActionButton "Add Custom Widget" is pressed.
        '''

        self._custom_browser = FileBrowser(select_string='Add')
        self._custom_browser.bind(on_success=self._custom_browser_load,
                                  on_canceled=self._cancel_popup)

        self._popup = Popup(title="Add Custom Widget",
                            content=self._custom_browser,
                            size_hint=(0.9, 0.9),
                            auto_dismiss=False)
        self._popup.open()
コード例 #15
0
 def chooseFile(self):
     if sys.platform == 'win':
         user_path = dirname(expanduser('~')) + sep + 'Documents'
     else:
         user_path = expanduser('~') + sep + 'Documents'
     browser = FileBrowser(select_string='Select',
                           favorites=[(user_path, 'Documents')])
     self.popup = Popup(size_hint=(None, None),
                        content=browser,
                        auto_dismiss=False,
                        size=(700, 500))
     browser.bind(on_success=self.selectFile,
                  on_canceled=self.popup.dismiss)
     self.popup.open()
コード例 #16
0
    def open_folder_btn_pressed(self, *args):
        '''To load File Browser for selected folder when 'Open Folder'
           is clicked
        '''

        self._fbrowser = FileBrowser(select_string='Open Folder')
        self._fbrowser.ids.list_view.path = self.project.path
        self._fbrowser.bind(on_success=self._folder_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open Folder', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()
コード例 #17
0
ファイル: GUI.py プロジェクト: kmmcconnaughay/teamLEGGO
 def __init__(self, **kwargs):
     '''
     Creates a browser that uses the Kivy Garden FileBrowser add-on to allow
     the user to select a .png file to pixelate.
     '''
     super(SelectFile, self).__init__(**kwargs)
     if platform == 'win':
         user_path = dirname(expanduser('~')) + sep + 'Documents'
     else:
         user_path = expanduser('~') + sep + 'Documents'
     self.browser = FileBrowser(select_string='Select',
                                favorites=[(user_path, 'Documents')])
     self.browser.bind(on_success=self._fbrowser_success,
                       on_canceled=self._fbrowser_canceled)
コード例 #18
0
def choose_file(filters, cb, dirselect=True):
    browser = FileBrowser(select_string='Select',
                          filters=filters,
                          path='/home/illia/images',
                          dirselect=dirselect)
    browser.bind(
        on_success=lambda instance: file_chosen(
            instance.selection[0],
            filters,
            popup,
            cb,
        ),
        on_canceled=lambda _: popup.dismiss(),
    )
    popup = Popup(title='Choose directory', content=browser)
    popup.open()
コード例 #19
0
ファイル: app.py プロジェクト: ivpusic/kivy-designer
    def _show_open_dialog(self, *args):
        '''To show FileBrowser to "Open" a project
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        self._fbrowser = FileBrowser(select_string='Open')

        def_path = os.getcwd()
        if not self.project_loader.new_project and \
                self.project_loader.proj_dir:
            def_path = self.project_loader.proj_dir

        if self._fbrowser.ids.tabbed_browser.current_tab.text == 'List View':
            self._fbrowser.ids.list_view.path = def_path
        else:
            self._fbrowser.ids.icon_view.path = def_path

        self._fbrowser.bind(on_success=self._fbrowser_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title="Open", content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)
        self._popup.open()
コード例 #20
0
ファイル: app.py プロジェクト: abhijangda/kivy-designer
    def action_btn_save_as_pressed(self, *args):
        '''Event Handler when ActionButton "Save As" is pressed.
        '''

        if self.project_loader.root_rule:
            self._curr_proj_changed = False

            self._save_as_browser = FileBrowser(select_string='Save')

            def_path = os.getcwd() 
            if not self.project_loader.new_project and self.project_loader.proj_dir:
                def_path = self.project_loader.proj_dir

            if self._save_as_browser.ids.tabbed_browser.current_tab.text == 'List View':
                self._save_as_browser.ids.list_view.path = def_path
            else:
                self._save_as_browser.ids.icon_view.path = def_path

            self._save_as_browser.bind(on_success=self._perform_save_as,
                                       on_canceled=self._cancel_popup)
    
            self._popup = Popup(title="Enter Folder Name",
                                content = self._save_as_browser,
                                size_hint=(0.9, 0.9), auto_dismiss=False)
            self._popup.open()
コード例 #21
0
ファイル: add_file.py プロジェクト: Lh4cKg/kivy-designer
    def open_file_btn_pressed(self, *args):
        """To load File Browser for selected file when 'Open File' is clicked
        """

        self._fbrowser = FileBrowser(select_string="Open")
        self._fbrowser.bind(on_success=self._file_load, on_canceled=self._cancel_popup)

        self._popup = Popup(title="Open File", content=self._fbrowser, size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()
コード例 #22
0
ファイル: app.py プロジェクト: kingctan/kivy-designer
    def action_btn_add_custom_widget_press(self, *args):
        """Event Handler when ActionButton "Add Custom Widget" is pressed.
        """

        self._custom_browser = FileBrowser(select_string="Add")
        self._custom_browser.bind(on_success=self._custom_browser_load, on_canceled=self._cancel_popup)

        self._popup = Popup(
            title="Add Custom Widget", content=self._custom_browser, size_hint=(0.9, 0.9), auto_dismiss=False
        )
        self._popup.open()
コード例 #23
0
    def __init__(self, root, directory):
        super(DirectoryWidget, self).__init__()
        self.root = root
        self.directory = directory
        user_path = None
        docs_path = ""
        current_label = self.root.ids[directory].text
        if 'win' in sys.platform.lower():
            docs_path = dirname(expanduser('~')) + sep + 'Documents'
        else:
            docs_path = expanduser('~') + sep + 'Documents'

        if current_label is not None and len(current_label) > 0:
            user_path = current_label
        if user_path is None:
            user_path = docs_path
        browser = FileBrowser(select_string='Select', path=user_path, favorites=[(docs_path, "Documents")])
        browser.dirselect = True
        browser.bind(on_success=self._fbrowser_success, on_canceled=self._fbrowser_canceled)
        self.add_widget(browser)
        self.browser = browser
コード例 #24
0
ファイル: add_file.py プロジェクト: Lh4cKg/kivy-designer
    def open_folder_btn_pressed(self, *args):
        """To load File Browser for selected folder when 'Open Folder'
           is clicked
        """

        self._fbrowser = FileBrowser(select_string="Open Folder")
        self._fbrowser.ids.list_view.path = self.project.path
        self._fbrowser.bind(on_success=self._folder_load, on_canceled=self._cancel_popup)

        self._popup = Popup(title="Open Folder", content=self._fbrowser, size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()
コード例 #25
0
    def menu_basedatos(self, dbPath=''):
        # TODO: al hacer click en menu -> base de datos, se tiene que abrir popup de aviso, hacer logout y ponerte pantalla de login
        # TODO: simplificar llamadas de menu y que cargue menu en forma dinamica
        #pag_bd = PaginaBd()
        #conf_path = self.config.get('last_session', 'dbpath')
        #if not dbPath == conf_path and dbPath.startswith('/'):
        #    conf_path = dbPath
        #if not conf_path:
        #    conf_path = os.path.dirname(os.path.expanduser('~'))
        #pag_bd.ids['lvl_bd'].text = conf_path
        #pag_bd.ids['filechooser'].path = conf_path

        #self._switch_main_page('Base de datos', pag_bd)

        self._fbrowser = FileBrowser(select_string='Open')
        self._fbrowser.bind(on_success=self._file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File',
                            content=self._fbrowser,
                            size_hint=(0.9, 0.9),
                            auto_dismiss=False)

        self._popup.open()
コード例 #26
0
    def onButtonPress2(self, button):

        user_path = dirname('Documents')
        layout = FileBrowser(select_string='select',
                             favorites=[(user_path, 'Documents')])

        layout.bind(on_success=self._fbroswer_success2,
                    on_canceled=self._fbroswer_canceled)

        closeButton = Button(text="Return to Main")

        layout.add_widget(closeButton)

        #intsntiate the modal popup and display
        popup = Popup(title='Application', content=layout)
        #content = (Lablel(text='This is a demo popup')))
        popup.open()

        #attach close button press with popup.dismiss action

        closeButton.bind(on_press=popup.dismiss)
コード例 #27
0
class MenuFunctions:
    def menu_inicio(self):
        self._switch_main_page('MainPanel', MainPanel)

    def menu_basedatos(self, dbPath=''):
        # TODO: al hacer click en menu -> base de datos, se tiene que abrir popup de aviso, hacer logout y ponerte pantalla de login
        # TODO: simplificar llamadas de menu y que cargue menu en forma dinamica
        #pag_bd = PaginaBd()
        #conf_path = self.config.get('last_session', 'dbpath')
        #if not dbPath == conf_path and dbPath.startswith('/'):
        #    conf_path = dbPath
        #if not conf_path:
        #    conf_path = os.path.dirname(os.path.expanduser('~'))
        #pag_bd.ids['lvl_bd'].text = conf_path
        #pag_bd.ids['filechooser'].path = conf_path

        #self._switch_main_page('Base de datos', pag_bd)

        self._fbrowser = FileBrowser(select_string='Open')
        self._fbrowser.bind(on_success=self._file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File',
                            content=self._fbrowser,
                            size_hint=(0.9, 0.9),
                            auto_dismiss=False)

        self._popup.open()

    def _cancel_popup(self, *args):
        '''To dismiss popup when cancel is pressed.
        '''

        self._popup.dismiss()

    def _file_load(self, instance):
        '''To set the text of text_file, to the file selected.
        '''

        self._popup.dismiss()
        if instance.selection:
            self.text_file.text = instance.selection[0]

    def menu_cuentas(self):
        self._switch_main_page('Cuentas', PaginaCuentas)

    def menu_monedas(self):
        self._switch_main_page('Monedas', PaginaMonedas)

    def menu_sincro(self):
        self._switch_main_page('Sincronizar', PaginaSincro)

    def menu_plugins(self):
        self._switch_main_page('Plugins', PaginaPlugins)

    def menu_opciones(self):
        self.open_settings()

    def menu_categorias(self):
        self._switch_main_page('Categorías', PaginaCategorias)

    def menu_usuarios(self):
        pass

    def menu_mantenimiento(self):
        # llenar las tablas vacias si se upgradeo de version
        app = App.get_running_app()
        populate_db(app.backend.db, True)

    def menu_presupuestos(self):
        pass

    def menu_reportes(self):
        pass

    def menu_ayuda(self):
        pass

    def menu_preguntas(self):
        pass

    def menu_acercade(self):
        pass
コード例 #28
0
ファイル: app.py プロジェクト: abhijangda/kivy-designer
class Designer(FloatLayout):
    '''Designer is the Main Window class of Kivy Designer
       :data:`message` is a :class:`~kivy.properties.StringProperty`
    '''
    
    designer_console = ObjectProperty(None)
    '''Instance of :class:`designer.designer_console.ConsoleDialog`
    '''

    statusbar = ObjectProperty(None)
    '''Reference to the :class:`~designer.statusbar.StatusBar` instance.
       :data:`statusbar` is a :class:`~kivy.properties.ObjectProperty`
    '''

    editcontview = ObjectProperty(None)
    '''Reference to the :class:`~designer.uix.EditContView` instance.
       :data:`v` is a :class:`~kivy.properties.ObjectProperty`
    '''

    actionbar = ObjectProperty(None)
    '''Reference to the :class:`~kivy.actionbar.ActionBar` instance. 
       ActionBar is used as a MenuBar to display bunch of menu items.
       :data:`actionbar` is a :class:`~kivy.properties.ObjectProperty`
    '''

    undo_manager = ObjectProperty(UndoManager())
    '''Reference to the :class:`~designer.UndoManager` instance.
       :data:`undo_manager` is a :class:`~kivy.properties.ObjectProperty`
    '''

    project_watcher = ObjectProperty(None)
    '''Reference to the :class:`~designer.project_watcher.ProjectWatcher`.
       :data:`project_watcher` is a :class:`~kivy.properties.ObjectProperty`
    '''

    project_loader = ObjectProperty(None)
    '''Reference to the :class:`~designer.project_loader.ProjectLoader`.
       :data:`project_loader` is a :class:`~kivy.properties.ObjectProperty`
    '''
    
    proj_settings = ObjectProperty(None)
    '''Reference of :class:`~designer.project_settings.ProjectSettings`.
       :data:`proj_settings` is a :class:`~kivy.properties.ObjectProperty`
    '''

    _curr_proj_changed = BooleanProperty(False)
    '''Specifies whether current project has been changed inside Kivy Designer
       :data:`_curr_proj_changed` is a :class:`~kivy.properties.BooleanProperty`
    '''

    _proj_modified_outside = BooleanProperty(False)
    '''Specifies whether current project has been changed outside Kivy Designer
       :data:`_proj_modified_outside` is a :class:`~kivy.properties.BooleanProperty`
    '''

    ui_creator = ObjectProperty(None)
    '''Reference to :class:`~designer.ui_creator.UICreator` instance.
       :data:`ui_creator` is a :class:`~kivy.properties.ObjectProperty`
    '''

    designer_content = ObjectProperty(None)
    '''Reference to :class:`~designer.designer_content.DesignerContent` instance.
       :data:`designer_content` is a :class:`~kivy.properties.ObjectProperty`
    '''

    proj_tree_view = ObjectProperty(None)
    '''Reference to Project Tree instance
       :data:`proj_tree_view` is a :class:`~kivy.properties.ObjectProperty`
    '''

    designer_settings = ObjectProperty(None)
    '''Reference of :class:`~designer.designer_settings.DesignerSettings`.
       :data:`designer_settings` is a :class:`~kivy.properties.ObjectProperty`
    '''
    
    start_page = ObjectProperty(None)
    '''Reference of :class:`~designer.start_page.DesignerStartPage`.
       :data:`start_page` is a :class:`~kivy.properties.ObjectProperty`
    '''

    recent_files_cont_menu = ObjectProperty(None)
    '''The context sub menu, containing the recently opened/saved projects.
       Reference of :class:`~designer.uix.contextual.ContextSubMenu`.
       :data:`recent_files_cont_menu` is a :class:`~kivy.properties.ObjectProperty`
    '''

    def __init__(self, **kwargs):
        super(Designer, self).__init__(**kwargs)
        self.project_watcher = ProjectWatcher(self.project_modified)
        self.project_loader = ProjectLoader(self.project_watcher)
        self.recent_manager = RecentManager()
        self.widget_to_paste = None
        self.designer_content = DesignerContent(size_hint=(1, None))

        self.designer_settings = DesignerSettings()
        self.designer_settings.bind(on_config_change=self._config_change)
        self.designer_settings.load_settings()
        self.designer_settings.bind(on_close=self._cancel_popup)

        Clock.schedule_interval(self.project_loader.perform_auto_save,
                                int(self.designer_settings.config_parser.getdefault(
                                    'global', 'auto_save_time', 5))*60)

    def _config_change(self, *args):
        '''Event Handler for 'on_config_change' event of self.designer_settings.
        '''

        Clock.unschedule(self.project_loader.perform_auto_save)
        Clock.schedule_interval(self.project_loader.perform_auto_save,
                                int(self.designer_settings.config_parser.getdefault(
                                    'global', 'auto_save_time', 5))*60)

        self.ui_creator.kv_code_input.reload_kv = \
            bool(self.designer_settings.config_parser.getdefault(
                 'global', 'reload_kv', True))

        self.recent_manager.max_recent_files = \
            int(self.designer_settings.config_parser.getdefault(
                'global', 'num_recent_files', 5))

    def _add_designer_content(self):
        '''Add designer_content to Designer, when a project is loaded
        '''

        for _child in self.children[:]:
            if _child == self.designer_content:
                return

        self.remove_widget(self.start_page)
        self.add_widget(self.designer_content, 1)

        self.ids['actn_btn_save'].disabled = False
        self.ids['actn_btn_save_as'].disabled = False
        self.ids['actn_chk_proj_tree'].disabled = False
        self.ids['actn_chk_prop_event'].disabled = False
        self.ids['actn_chk_widget_tree'].disabled = False
        self.ids['actn_chk_status_bar'].disabled = False
        self.ids['actn_chk_kv_lang_area'].disabled = False
        self.ids['actn_btn_add_file'].disabled = False
        self.ids['actn_btn_custom_widget'].disabled = False
        self.ids['actn_btn_proj_pref'].disabled = False
        self.ids['actn_btn_run_proj'].disabled = False

    def on_statusbar_height(self, *args):
        '''Callback for statusbar.height
        '''

        self.designer_content.y = self.statusbar.height
        self.on_height(*args)

    def on_actionbar_height(self, *args):
        '''Callback for actionbar.height
        '''

        self.on_height(*args)
    
    def on_height(self, *args):
        '''Callback for self.height
        '''

        if self.actionbar and self.statusbar:
            self.designer_content.height = self.height - \
                self.actionbar.height - self.statusbar.height

            self.designer_content.y = self.statusbar.height

    def project_modified(self, *args):
        '''Event Handler called when Project is modified outside Kivy Designer
        '''

        #To dispatch modified event only once for all files/folders of proj_dir
        if self._proj_modified_outside:
            return

        self._confirm_dlg = ConfirmationDialog(message="Current Project has "
                                               "been modified\n"
                                               "outside the Kivy Designer.\n"
                                               "Do you want to reload project?")
        self._confirm_dlg.bind(on_ok=self._perform_reload,
                               on_cancel=self._cancel_popup)
        self._popup = Popup(title='Kivy Designer', content=self._confirm_dlg,
                            size_hint=(None, None),size=('200pt', '150pt'),
                            auto_dismiss=False)
        self._popup.open()

        self._proj_modified_outside = True
    
    def _perform_reload(self, *args):
        '''Perform reload of project after it is modified
        ''' 

        #Perform reload of project after it is modified
        self._popup.dismiss()
        self.project_watcher.allow_event_dispatch = False
        self._perform_open(self.project_loader.proj_dir)
        self.project_watcher.allow_event_dispatch = True
        self._proj_modified_outside = False

    def on_show_edit(self, *args):
        '''Event Handler of 'on_show_edit' event. This will show EditContView
           in ActionBar
        '''

        if isinstance(self.actionbar.children[0], EditContView):
            return
        
        if self.editcontview == None:
            self.editcontview = EditContView(
                on_undo=self.action_btn_undo_pressed,
                on_redo=self.action_btn_redo_pressed,
                on_cut=self.action_btn_cut_pressed,
                on_copy=self.action_btn_copy_pressed,
                on_paste=self.action_btn_paste_pressed,
                on_delete=self.action_btn_delete_pressed,
                on_selectall=self.action_btn_select_all_pressed,
                on_next_screen=self._next_screen,
                on_prev_screen=self._prev_screen)

        self.actionbar.add_widget(self.editcontview)
        
        widget = self.ui_creator.propertyviewer.widget

        if isinstance(widget, Carousel) or\
            isinstance(widget, ScreenManager) or\
            isinstance(widget, TabbedPanel):
            self.editcontview.show_action_btn_screen(True)
        else:
            self.editcontview.show_action_btn_screen(False)

        if self.ui_creator.kv_code_input.clicked:
            self._edit_selected = 'KV'
        elif self.ui_creator.playground.clicked:
            self._edit_selected = 'Play'
        else:
            self._edit_selected = 'Py'

        self.ui_creator.playground.clicked = False
        self.ui_creator.kv_code_input.clicked = False

    def _prev_screen(self, *args):
        widget = self.ui_creator.propertyviewer.widget
        if isinstance(widget, Carousel):
            widget.load_previous()

        elif isinstance(widget, ScreenManager):
            widget.current = widget.previous()
        
        elif isinstance(widget, TabbedPanel):
            index = widget.tab_list.index(widget.current_tab)
            if len(widget.tab_list) <= index + 1:
                return
            
            widget.switch_to(widget.tab_list[index + 1])
     
    def _next_screen(self, *args):
        widget = self.ui_creator.propertyviewer.widget
        if isinstance(widget, Carousel):
            widget.load_next()

        elif isinstance(widget, ScreenManager):
            widget.current = widget.next()

        elif isinstance(widget, TabbedPanel):
            index = widget.tab_list.index(widget.current_tab)
            if index == 0:
                return
            
            widget.switch_to(widget.tab_list[index - 1])
            

    def on_touch_down(self, touch):
        '''Override of FloatLayout.on_touch_down. Used to determine where
           touch is down and to call self.actionbar.on_previous
        '''

        if not isinstance(self.actionbar.children[0], EditContView) or\
           self.actionbar.collide_point(*touch.pos):
            return super(FloatLayout, self).on_touch_down(touch)

        self.actionbar.on_previous(self)
        
        return super(FloatLayout, self).on_touch_down(touch)  

    def action_btn_new_pressed(self, *args):
        '''Event Handler when ActionButton "New" is pressed.
        '''

        if not self._curr_proj_changed:
            self._show_new_dialog()
            return

        self._confirm_dlg = ConfirmationDialog('All unsaved changes will be'
                                               ' lost.\n'
                                               'Do you want to continue?')
        self._confirm_dlg.bind(on_ok=self._show_new_dialog,
                               on_cancel=self._cancel_popup)

        self._popup = Popup(title='New', content = self._confirm_dlg, 
                            size_hint=(None,None),size=('200pt', '150pt'),
                            auto_dismiss=False)
        self._popup.open()
    
    def _show_new_dialog(self, *args):
        if hasattr(self, '_popup'):
            self._popup.dismiss()
        
        self._new_dialog = NewProjectDialog()
        self._new_dialog.bind(on_select=self._perform_new,
                               on_cancel=self._cancel_popup)
        self._popup = Popup(title='New Project', content = self._new_dialog, 
                            size_hint=(None,None),size=('650pt', '450pt'),
                            auto_dismiss=False)
        self._popup.open()

    def _perform_new(self, *args):
        '''To load new project
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()
        
        self.cleanup()
        new_proj_dir = os.path.join(get_kivy_designer_dir(),
                                    NEW_PROJECT_DIR_NAME)
        if os.path.exists(new_proj_dir):
            shutil.rmtree(new_proj_dir)
        
        os.mkdir(new_proj_dir)
        
        template = self._new_dialog.adapter.selection[0].text
        kv_file = NEW_PROJECTS[template][0]
        py_file = NEW_PROJECTS[template][1]

        templates_dir = os.path.join(os.getcwd(), NEW_TEMPLATES_DIR)
        shutil.copy(os.path.join(templates_dir, py_file),
                    os.path.join(new_proj_dir, "main.py"))

        shutil.copy(os.path.join(templates_dir, kv_file),
                    os.path.join(new_proj_dir, "main.kv"))
        
        self.ui_creator.playground.sandbox.error_active = True
        with self.ui_creator.playground.sandbox:
            self.project_loader.load_new_project(os.path.join(new_proj_dir, 
                                                              "main.kv"))
            root_wigdet = self.project_loader.get_root_widget()
            self.ui_creator.playground.add_widget_to_parent(root_wigdet, None,
                                                            from_undo=True)
            self.ui_creator.kv_code_input.text = self.project_loader.get_full_str()
            self.designer_content.update_tree_view(self.project_loader)
            self._add_designer_content()
            if self.project_loader.class_rules:
                for i, _rule in enumerate(self.project_loader.class_rules):
                    widgets.append((_rule.name, 'custom'))

                self.designer_content.toolbox.add_custom()
        
        self.ui_creator.playground.sandbox.error_active = False

    def cleanup(self):
        '''To cleanup everything loaded by the current project before loading
           another project.
        '''

        self.project_loader.cleanup()
        self.ui_creator.cleanup()
        self.undo_manager.cleanup()
        self.designer_content.toolbox.cleanup()

        for node in self.proj_tree_view.root.nodes[:]:
            self.proj_tree_view.remove_node(node)

        for widget in widgets[:]:
            if widget[1] == 'custom':
                widgets.remove(widget)

        self._curr_proj_changed = False
        self.ui_creator.kv_code_input.text = ""

        self.designer_content.tab_pannel.list_py_code_inputs = []
        for th in self.designer_content.tab_pannel.tab_list[:-1]:
            self.designer_content.tab_pannel.remove_widget(th)

    def action_btn_open_pressed(self, *args):
        '''Event Handler when ActionButton "Open" is pressed.
        '''

        if not self._curr_proj_changed:
            self._show_open_dialog()
            return

        self._confirm_dlg = ConfirmationDialog('All unsaved changes will be '
                                                'lost.\n'
                                                'Do you want to continue?')

        self._confirm_dlg.bind(on_ok=self._show_open_dialog,
                               on_cancel=self._cancel_popup)

        self._popup = Popup(title='Kivy Designer', content = self._confirm_dlg, 
                            size_hint=(None,None),size=('200pt', '150pt'),
                            auto_dismiss=False)
        self._popup.open()

    def _show_open_dialog(self, *args):
        '''To show FileBrowser to "Open" a project
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        self._fbrowser = FileBrowser(select_string='Open')

        def_path = os.getcwd() 
        if not self.project_loader.new_project and self.project_loader.proj_dir:
            def_path = self.project_loader.proj_dir            

        if self._fbrowser.ids.tabbed_browser.current_tab.text == 'List View':
            self._fbrowser.ids.list_view.path = def_path
        else:
            self._fbrowser.ids.icon_view.path = def_path

        self._fbrowser.bind(on_success=self._fbrowser_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title="Open", content = self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)
        self._popup.open()
    
    def _select_class_selected(self, *args):
        '''Event Handler for 'on_select' event of self._select_class
        '''

        selection = self._select_class.listview.adapter.selection[0].text

        with self.ui_creator.playground.sandbox:
            root_widget = self.project_loader.set_root_widget(selection)
            self.ui_creator.playground.add_widget_to_parent(root_widget, None, from_undo=True)
            self.ui_creator.kv_code_input.text = self.project_loader.get_root_str()

        self._select_class_popup.dismiss()
    
    def _select_class_cancel(self, *args):
        '''Event Handler for 'on_cancel' event of self._select_class
        '''

        self._select_class_popup.dismiss()

    def _fbrowser_load(self, instance):
        '''Event Handler for 'on_load' event of self._fbrowser
        '''
        if instance.selection == []:
            return

        file_path = instance.selection[0]
        self._popup.dismiss()
        self._perform_open(file_path)

    def _perform_open(self, file_path):
        '''To open a project given by file_path
        '''

        for widget in widgets[:]:
            if widget[1] == 'custom':
                widgets.remove(widget)

        self.cleanup()

        self.ui_creator.playground.sandbox.error_active = True

        root_widget = None

        with self.ui_creator.playground.sandbox:
            try:
                self.project_loader.load_project(file_path)

                if self.project_loader.class_rules:
                    for i, _rule in enumerate(self.project_loader.class_rules):
                        widgets.append((_rule.name, 'custom'))

                    self.designer_content.toolbox.add_custom()

                #to test listview
                #root_wigdet = None
                root_wigdet = self.project_loader.get_root_widget()

                if not root_wigdet:
                    #Show list box showing widgets
                    self._select_class = SelectClass(
                        self.project_loader.class_rules)
    
                    self._select_class.bind(on_select=self._select_class_selected,
                                            on_cancel=self._select_class_cancel)
    
                    self._select_class_popup = Popup(title="Select Root Widget",
                                                     content = self._select_class,
                                                     size_hint=(0.5, 0.5),
                                                     auto_dismiss=False)
                    self._select_class_popup.open()

                else:
                    self.ui_creator.playground.add_widget_to_parent(root_wigdet,
                                                                    None,
                                                                    from_undo=True)
                    self.ui_creator.kv_code_input.text = self.project_loader.get_full_str()

                self.recent_manager.add_file(file_path)
                #Record everything for later use
                self.project_loader.record()
                self.designer_content.update_tree_view(self.project_loader)
                self._add_designer_content()

            except Exception as e:
                self.statusbar.show_message('Cannot load Project: %s'%(str(e)))
        
        self.ui_creator.playground.sandbox.error_active = False

    def _cancel_popup(self, *args):
        '''EventHandler for all self._popup when self._popup.content
           emits 'on_cancel' or equivalent.
        '''

        self._proj_modified_outside = False
        self._popup.dismiss()

    def action_btn_save_pressed(self, *args):
        '''Event Handler when ActionButton "Save" is pressed.
        '''

        if self.project_loader.root_rule:
            try:
                if self.project_loader.new_project:
                    self.action_btn_save_as_pressed()
                    return

                else:
                    self.project_loader.save_project()
                    projdir = self.project_loader.proj_dir
                    self.project_loader.cleanup(stop_watcher=False)
                    self.ui_creator.playground.cleanup()
                    self.project_loader.load_project(projdir)
                    root_wigdet = self.project_loader.get_root_widget()
                    self.ui_creator.playground.add_widget_to_parent(root_wigdet,
                                                                    None,
                                                                    from_undo=True,
                                                                    from_kv=True)
                    

                self._curr_proj_changed = False
                self.statusbar.show_message('Project saved successfully')

            except:
                self.statusbar.show_message('Cannot save project')

    def action_btn_save_as_pressed(self, *args):
        '''Event Handler when ActionButton "Save As" is pressed.
        '''

        if self.project_loader.root_rule:
            self._curr_proj_changed = False

            self._save_as_browser = FileBrowser(select_string='Save')

            def_path = os.getcwd() 
            if not self.project_loader.new_project and self.project_loader.proj_dir:
                def_path = self.project_loader.proj_dir

            if self._save_as_browser.ids.tabbed_browser.current_tab.text == 'List View':
                self._save_as_browser.ids.list_view.path = def_path
            else:
                self._save_as_browser.ids.icon_view.path = def_path

            self._save_as_browser.bind(on_success=self._perform_save_as,
                                       on_canceled=self._cancel_popup)
    
            self._popup = Popup(title="Enter Folder Name",
                                content = self._save_as_browser,
                                size_hint=(0.9, 0.9), auto_dismiss=False)
            self._popup.open()

    def _perform_save_as(self, instance):
        '''Event handler for 'on_success' event of self._save_as_browser
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        proj_dir = ''
        if instance.ids.tabbed_browser.current_tab.text == 'List View':
            proj_dir = instance.ids.list_view.path
        else:
            proj_dir = instance.ids.icon_view.path

        proj_dir = os.path.join(proj_dir, instance.filename)
        #try:
        if True:
            self.project_loader.save_project(proj_dir)
            self.recent_manager.add_file(proj_dir)
            projdir = self.project_loader.proj_dir
            self.project_loader.cleanup()
            self.ui_creator.playground.cleanup()
            self.project_loader.load_project(projdir)
            root_wigdet = self.project_loader.get_root_widget()
            self.ui_creator.playground.add_widget_to_parent(root_wigdet,
                                                            None,
                                                            from_undo=True)
            self.statusbar.show_message('Project saved successfully')

        #except:
        #    self.statusbar.show_message('Cannot save project')
    
    def action_btn_settings_pressed(self, *args):
        self.designer_settings.parent = None
        self._popup = Popup(title="Kivy Designer Settings",
                            content = self.designer_settings,
                            size_hint=(None, None), 
                            size=(600, 400), auto_dismiss=False)

        self._popup.open()

    def action_btn_recent_files_pressed(self, *args):
        '''Event Handler when ActionButton "Recent Files" is pressed.
        '''
        pass
    
    def fill_recent_menu(self, *args):
        recent_menu = self.recent_files_cont_menu
        for _file in self.recent_manager.list_files:
            act_btn = DesignerActionButton(text=_file, shorten=True)
            recent_menu.add_widget(act_btn)
            act_btn.bind(on_release=self._recent_file_release)

    def _recent_file_release(self, instance, *args):
        '''Event Handler for 'on_select' event of self._recent_dlg.
        '''
        self._perform_open(instance.text)

    def action_btn_quit_pressed(self, *args):
        '''Event Handler when ActionButton "Quit" is pressed.
        '''

        App.get_running_app().stop()

    def action_btn_undo_pressed(self, *args):
        '''Event Handler when ActionButton "Undo" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.undo_manager.do_undo()
        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_undo()
        elif self._edit_selected == 'Py':
            for code_input in self.designer_content.tab_pannel.list_py_code_inputs:
                if code_input.clicked == True:
                    code_input.clicked = False
                    code_input.do_undo()

    def action_btn_redo_pressed(self, *args):
        '''Event Handler when ActionButton "Redo" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.undo_manager.do_redo()
        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_redo()
        elif self._edit_selected == 'Py':
            for code_input in self.designer_content.tab_pannel.list_py_code_inputs:
                if code_input.clicked == True:
                    code_input.clicked = False
                    code_input.do_redo()

    def action_btn_cut_pressed(self, *args):
        '''Event Handler when ActionButton "Cut" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_cut()

        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_cut()

        elif self._edit_selected == 'Py':
            for code_input in self.designer_content.tab_pannel.list_py_code_inputs:
                if code_input.clicked == True:
                    code_input.clicked = False
                    code_input.do_cut()

    def action_btn_copy_pressed(self, *args):
        '''Event Handler when ActionButton "Copy" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_copy()
         
        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_copy()

        elif self._edit_selected == 'Py':
            for code_input in self.designer_content.tab_pannel.list_py_code_inputs:
                if code_input.clicked == True:
                    code_input.clicked = False
                    code_input.do_copy()
        
    def action_btn_paste_pressed(self, *args):
        '''Event Handler when ActionButton "Paste" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_paste()

        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_paste()

        elif self._edit_selected == 'Py':
            for code_input in self.designer_content.tab_pannel.list_py_code_inputs:
                if code_input.clicked == True:
                    code_input.clicked = False
                    code_input.do_paste()

    def action_btn_delete_pressed(self, *args):
        '''Event Handler when ActionButton "Delete" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_delete()

        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_delete()

        elif self._edit_selected == 'Py':
            for code_input in self.designer_content.tab_pannel.list_py_code_inputs:
                if code_input.clicked == True:
                    code_input.clicked = False
                    code_input.do_delete()

    def action_btn_select_all_pressed(self, *args):
        '''Event Handler when ActionButton "Select All" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_select_all()

        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_select_all()

        elif self._edit_selected == 'Py':
            for code_input in self.designer_content.tab_pannel.list_py_code_inputs:
                if code_input.clicked == True:
                    code_input.clicked = False
                    code_input.do_select_all()

    def action_btn_add_custom_widget_press(self, *args):
        '''Event Handler when ActionButton "Add Custom Widget" is pressed.
        '''

        self._custom_browser = FileBrowser(select_string='Add')
        self._custom_browser.bind(on_success=self._custom_browser_load,
                                  on_canceled=self._cancel_popup)

        self._popup = Popup(title="Add Custom Widget",
                            content = self._custom_browser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)
        self._popup.open()

    def _custom_browser_load(self, instance):
        '''Event Handler for 'on_success' event of self._custom_browser
        '''

        file_path = instance.selection[0]
        self._popup.dismiss()
        
        self.ui_creator.playground.sandbox.error_active = True

        with self.ui_creator.playground.sandbox:
            try:
                self.project_loader.add_custom_widget(file_path)

                self.designer_content.toolbox.cleanup()
                for _rule in (self.project_loader.custom_widgets):
                    widgets.append((_rule.name, 'custom'))

                self.designer_content.toolbox.add_custom()

            except ProjectLoaderException as e:
                self.statusbar.show_message('Cannot load widget. %s'%str(e))
        
        self.ui_creator.playground.sandbox.error_active = False

    def action_chk_btn_toolbox_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "Toolbox" is activated.
        '''

        if chk_btn.checkbox.active:
            self._toolbox_parent.add_widget(self.designer_content.splitter_tree)
            self.designer_content.splitter_tree.width = self._toolbox_width

        else:
            self._toolbox_parent = self.designer_content.splitter_tree.parent
            self._toolbox_parent.remove_widget(self.designer_content.splitter_tree)
            self._toolbox_width = self.designer_content.splitter_tree.width
            self.designer_content.splitter_tree.width = 0

    def action_chk_btn_property_viewer_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "Property Viewer" is activated.
        '''

        if chk_btn.checkbox.active:
            self._toggle_splitter_widget_tree()
            if self.ui_creator.splitter_widget_tree.parent is None:
                self._splitter_widget_tree_parent.add_widget(self.ui_creator.splitter_widget_tree)
                self.ui_creator.splitter_widget_tree.width = self._splitter_widget_tree_width

            add_tree = False
            if self.ui_creator.grid_widget_tree.parent is not None:
                add_tree = True
                self.ui_creator.splitter_property.size_hint_y = None
                self.ui_creator.splitter_property.height = 300

            self._splitter_property_parent.clear_widgets()
            if add_tree:
                self._splitter_property_parent.add_widget(self.ui_creator.grid_widget_tree)

            self._splitter_property_parent.add_widget(self.ui_creator.splitter_property)
        else:
            self._splitter_property_parent = self.ui_creator.splitter_property.parent
            self._splitter_property_parent.remove_widget(self.ui_creator.splitter_property)
            self._toggle_splitter_widget_tree()

    def action_chk_btn_widget_tree_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "Widget Tree" is activated.
        '''

        if chk_btn.checkbox.active:
            self._toggle_splitter_widget_tree()
            add_prop = False
            if self.ui_creator.splitter_property.parent is not None:
                add_prop = True

            self._grid_widget_tree_parent.clear_widgets()
            self._grid_widget_tree_parent.add_widget(self.ui_creator.grid_widget_tree)
            if add_prop:
                self._grid_widget_tree_parent.add_widget(self.ui_creator.splitter_property)
                self.ui_creator.splitter_property.size_hint_y = None
                self.ui_creator.splitter_property.height = 300
        else:
            self._grid_widget_tree_parent = self.ui_creator.grid_widget_tree.parent
            self._grid_widget_tree_parent.remove_widget(self.ui_creator.grid_widget_tree)
            self.ui_creator.splitter_property.size_hint_y = 1
            self._toggle_splitter_widget_tree()

    def _toggle_splitter_widget_tree(self):
        '''To show/hide splitter_widget_tree
        '''

        if self.ui_creator.splitter_widget_tree.parent is not None and\
            self.ui_creator.splitter_property.parent is None and\
            self.ui_creator.grid_widget_tree.parent is None:

            self._splitter_widget_tree_parent = self.ui_creator.splitter_widget_tree.parent
            self._splitter_widget_tree_parent.remove_widget(self.ui_creator.splitter_widget_tree)
            self._splitter_widget_tree_width = self.ui_creator.splitter_widget_tree.width
            self.ui_creator.splitter_widget_tree.width = 0

        elif self.ui_creator.splitter_widget_tree.parent is None:
            self._splitter_widget_tree_parent.add_widget(self.ui_creator.splitter_widget_tree)
            self.ui_creator.splitter_widget_tree.width = self._splitter_widget_tree_width

    def action_chk_btn_status_bar_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "StatusBar" is activated.
        '''

        if chk_btn.checkbox.active:
            self._statusbar_parent.add_widget(self.statusbar)
            self.statusbar.height = self._statusbar_height
        else:
            self._statusbar_parent = self.statusbar.parent
            self._statusbar_height = self.statusbar.height
            self._statusbar_parent.remove_widget(self.statusbar)
            self.statusbar.height = 0
    
    def action_chk_btn_kv_area_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "KVLangArea" is activated.
        '''

        if chk_btn.checkbox.active:
            self.ui_creator.splitter_kv_code_input.height = self._kv_area_height
            self._kv_area_parent.add_widget(self.ui_creator.splitter_kv_code_input)
        else:
            self._kv_area_parent = self.ui_creator.splitter_kv_code_input.parent
            self._kv_area_height = self.ui_creator.splitter_kv_code_input.height
            self.ui_creator.splitter_kv_code_input.height = 0
            self._kv_area_parent.remove_widget(self.ui_creator.splitter_kv_code_input)

    def _error_adding_file(self, *args):
        '''Event Handler for 'on_error' event of self._add_file_dlg
        '''

        self.statusbar.show_message('Error while adding file to project')
        self._popup.dismiss()
    
    def _added_file(self, *args):
        '''Event Handler for 'on_added' event of self._add_file_dlg
        '''

        self.statusbar.show_message('File successfully added to project')
        self._popup.dismiss()
        if self._add_file_dlg.target_file[3:] == '.py':
            self.designer_content.add_file_to_tree_view(
                self._add_file_dlg.target_file)

    def action_btn_add_file_pressed(self, *args):
        '''Event Handler when ActionButton "Add File" is pressed.
        '''

        self._add_file_dlg = AddFileDialog(self.project_loader)
        self._add_file_dlg.bind(on_added=self._added_file,
                                on_error=self._error_adding_file,
                                on_cancel=self._cancel_popup)

        self._popup = Popup(title="Add File",
                            content = self._add_file_dlg,
                            size_hint=(None, None), 
                            size=(400, 300), auto_dismiss=False)

        self._popup.open()
    
    def action_btn_project_pref_pressed(self, *args):
        '''Event Handler when ActionButton "Project Prefences" is pressed.
        '''
        self.proj_settings = ProjectSettings(proj_loader=self.project_loader)
        self.proj_settings.load_proj_settings()
        self.proj_settings.bind(on_close=self._cancel_popup)
        self._popup = Popup(title="Project Preferences",
                            content = self.proj_settings,
                            size_hint=(None, None), 
                            size=(600, 400), auto_dismiss=False)

        self._popup.open()

    def action_btn_run_project_pressed(self, *args):
        '''Event Handler when ActionButton "Run" is pressed.
        '''
        if self.project_loader.file_list == []:
            return
        args = ''
        envs = ''
        
        python_path = self.designer_settings.config_parser.getdefault(
            'global', 'python_shell_path', '')
        
        if python_path == '':
            self.statusbar.show_message("Python Shell Path not specified,"
                                        " please specify it before running"
                                        " project")
            return

        if self.proj_settings and self.proj_settings.config_parser:
            args = self.proj_settings.config_parser.getdefault('arguments', 'arg', '')
            envs = self.proj_settings.config_parser.getdefault('env variables', 'env', '')
            for env in envs.split(' '):
                self.ui_creator.kivy_console.environment[env[:env.find('=')]] = env[env.find('=')+1:]

        for _file in self.project_loader.file_list:
            if 'main.py' in os.path.basename(_file):
                self.ui_creator.kivy_console.stdin.write('%s %s %s'%
                                                         (python_path,
                                                          _file, args))
                self.ui_creator.tab_pannel.switch_to(
                    self.ui_creator.tab_pannel.tab_list[2])
                return

        self.ui_creator.kivy_console.stdin.write('%s %s %s'%
                                                 (python_path, 
                                                  self.project_loader._app_file,
                                                  args))
        self.ui_creator.tab_pannel.switch_to(
            self.ui_creator.tab_pannel.tab_list[2])

    def on_sandbox_getting_exception(self, *args):
        '''Event Handler for 
           :class:`~designer.uix.designer_sandbox.DesignerSandbox`
           on_getting_exception event. This function will add exception 
           string in error_console.
        '''

        s = traceback.format_list(traceback.extract_tb(
            self.ui_creator.playground.sandbox.tb))
        s = '\n'.join(s)
        to_insert = "Exception:\n" + s + '\n' + \
            "{!r}".format(self.ui_creator.playground.sandbox.exception)
        text = self.ui_creator.error_console.text + to_insert + '\n\n'
        self.ui_creator.error_console.text = text
        if self.ui_creator.playground.sandbox.error_active:
            self.ui_creator.tab_pannel.switch_to(
                self.ui_creator.tab_pannel.tab_list[0])
        
        self.ui_creator.playground.sandbox.error_active = False
コード例 #29
0
class AddFileDialog(BoxLayout):
    '''AddFileDialog is a dialog for adding files to current project. It emits
       'on_added' event if file has been added successfully, 'on_error' if
       there has been some error in adding file and 'on_cancel' when user
       wishes to cancel the operation.
    '''

    text_file = ObjectProperty()
    '''An instance to TextInput showing file path to be added.
       :data:`text_file` is a :class:`~kivy.properties.ObjectProperty`
    '''

    text_folder = ObjectProperty()
    '''An instance to TextInput showing folder where file has to be added.
       :data:`text_folder` is a :class:`~kivy.properties.ObjectProperty`
    '''

    lbl_error = ObjectProperty()
    '''An instance to Label to display errors.
       :data:`lbl_error` is a :class:`~kivy.properties.ObjectProperty`
    '''

    __events__ = ('on_cancel', 'on_added', 'on_error')

    def __init__(self, project, **kwargs):
        super(AddFileDialog, self).__init__(**kwargs)
        self.project = project
        self._popup = None
        self._fbrowser = None

    def on_cancel(self):
        pass

    def on_added(self):
        pass

    def on_error(self):
        pass

    @ignore_proj_watcher
    def _perform_add_file(self):
        '''To copy file from its original path to new path
        '''

        if self.text_file.text == '':
            self.lbl_error.text = "Select the File"
            return

        target_folder = self.text_folder.text

        folder = os.path.join(self.project.path, target_folder)
        if not os.path.exists(folder):
            os.mkdir(folder)

        if os.path.exists(os.path.join(folder,
                                       os.path.basename(self.text_file.text))):
            self.lbl_error.text = "There is a file with the same name!"
            return

        try:
            shutil.copy(self.text_file.text,
                        os.path.join(folder,
                                     os.path.basename(self.text_file.text)))

            self.dispatch('on_added')

        except (OSError, IOError):
            self.dispatch('on_error')

    def _cancel_popup(self, *args):
        '''To dismiss popup when cancel is pressed.
        '''

        self._popup.dismiss()

    def _file_load(self, instance):
        '''To set the text of text_file, to the file selected.
        '''

        self._popup.dismiss()
        if instance.selection:
            self.text_file.text = instance.selection[0]

    def open_file_btn_pressed(self, *args):
        '''To load File Browser for selected file when 'Open File' is clicked
        '''

        self._fbrowser = FileBrowser(select_string='Open')
        self._fbrowser.bind(on_success=self._file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()

    def _folder_load(self, instance):
        '''To set the text of text_folder, to the folder selected.
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        if instance.ids.tabbed_browser.current_tab.text == 'List View':
            proj_dir = instance.ids.list_view.path
        else:
            proj_dir = instance.ids.icon_view.path

        proj_dir = os.path.join(proj_dir, instance.filename)

        target_dir = self.project.path

        if os.path.isdir(proj_dir):
            target_dir = os.path.relpath(proj_dir, self.project.path)
        elif os.path.isfile(proj_dir):
            proj_dir = os.path.dirname(proj_dir)
            target_dir = os.path.relpath(proj_dir, self.project.path)

        self.text_folder.text = target_dir

    def open_folder_btn_pressed(self, *args):
        '''To load File Browser for selected folder when 'Open Folder'
           is clicked
        '''

        self._fbrowser = FileBrowser(select_string='Open Folder')
        self._fbrowser.ids.list_view.path = self.project.path
        self._fbrowser.bind(on_success=self._folder_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open Folder', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()
コード例 #30
0
class AddFileDialog(BoxLayout):
    '''AddFileDialog is a dialog for adding files to current project. It emits
       'on_added' event if file has been added successfully, 'on_error' if
       there has been some error in adding file and 'on_cancel' when user
       wishes to cancel the operation.
    '''

    text_file = ObjectProperty()
    '''An instance to TextInput showing file path to be added.
       :data:`text_file` is a :class:`~kivy.properties.ObjectProperty`
    '''

    text_folder = ObjectProperty()
    '''An instance to TextInput showing folder where file has to be added.
       :data:`text_folder` is a :class:`~kivy.properties.ObjectProperty`
    '''

    always_check = ObjectProperty()
    '''An instance to :class:`~kivy.uix.checkbox.CheckBox`, which will
       determine whether same folder will be used for all files of
       same type or not.
       :data:`always_check` is a :class:`~kivy.properties.ObjectProperty`
    '''

    lbl_error = ObjectProperty()
    '''An instance to Label to display errors.
       :data:`lbl_error` is a :class:`~kivy.properties.ObjectProperty`
    '''

    __events__ = ('on_cancel', 'on_added', 'on_error')

    def __init__(self, project, **kwargs):
        super(AddFileDialog, self).__init__(**kwargs)
        self.project = project

    def on_cancel(self):
        pass

    def on_added(self):
        pass

    def on_error(self):
        pass

    @ignore_proj_watcher
    def _perform_add_file(self):
        '''To copy file from its original path to new path
        '''

        if self.text_file.text == '':
            self.lbl_error.text = "Select the File"
            return

        target_folder = self.text_folder.text

        folder = os.path.join(self.project.path, target_folder)
        if not os.path.exists(folder):
            os.mkdir(folder)

        if os.path.exists(os.path.join(folder,
                                       os.path.basename(self.text_file.text))):
            self.lbl_error.text = "There is a file with the same name!"
            return

        try:
            shutil.copy(self.text_file.text,
                        os.path.join(folder,
                                     os.path.basename(self.text_file.text)))

            self.dispatch('on_added')

        except (OSError, IOError):
            self.dispatch('on_error')

    def _cancel_popup(self, *args):
        '''To dismiss popup when cancel is pressed.
        '''

        self._popup.dismiss()

    def _file_load(self, instance):
        '''To set the text of text_file, to the file selected.
        '''

        self._popup.dismiss()
        if instance.selection != []:
            self.text_file.text = instance.selection[0]

    def open_file_btn_pressed(self, *args):
        '''To load File Browser for selected file when 'Open File' is clicked
        '''

        self._fbrowser = FileBrowser(select_string='Open')
        self._fbrowser.bind(on_success=self._file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()

    def _folder_load(self, instance):
        '''To set the text of text_folder, to the folder selected.
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        if instance.ids.tabbed_browser.current_tab.text == 'List View':
            proj_dir = instance.ids.list_view.path
        else:
            proj_dir = instance.ids.icon_view.path

        proj_dir = os.path.join(proj_dir, instance.filename)

        target_dir = self.project.path

        if os.path.isdir(proj_dir):
            target_dir = os.path.relpath(proj_dir, self.project.path)
        elif os.path.isfile(proj_dir):
            proj_dir = os.path.dirname(proj_dir)
            target_dir = os.path.relpath(proj_dir, self.project.path)

        self.text_folder.text = target_dir

    def open_folder_btn_pressed(self, *args):
        '''To load File Browser for selected folder when 'Open Folder'
           is clicked
        '''

        self._fbrowser = FileBrowser(select_string='Open Folder')
        self._fbrowser.ids.list_view.path = self.project.path
        self._fbrowser.bind(on_success=self._folder_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open Folder', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()
コード例 #31
0
ファイル: main.py プロジェクト: cruor99/dupthingy
 def on_enter(self):
     user_path = ''
     browser = FileBrowser(select_string="Select", dirselect=True)
     browser.bind(on_success=self.storefilepath,
                 on_canceled=self.canceled)
     self.add_widget(browser)
コード例 #32
0
ファイル: add_file.py プロジェクト: Lh4cKg/kivy-designer
class AddFileDialog(BoxLayout):
    """AddFileDialog is a dialog for adding files to current project. It emits
       'on_added' event if file has been added successfully, 'on_error' if
       there has been some error in adding file and 'on_cancel' when user
       wishes to cancel the operation.
    """

    text_file = ObjectProperty()
    """An instance to TextInput showing file path to be added.
       :data:`text_file` is a :class:`~kivy.properties.ObjectProperty`
    """

    text_folder = ObjectProperty()
    """An instance to TextInput showing folder where file has to be added.
       :data:`text_folder` is a :class:`~kivy.properties.ObjectProperty`
    """

    always_check = ObjectProperty()
    """An instance to :class:`~kivy.uix.checkbox.CheckBox`, which will
       determine whether same folder will be used for all files of
       same type or not.
       :data:`always_check` is a :class:`~kivy.properties.ObjectProperty`
    """

    lbl_error = ObjectProperty()
    """An instance to Label to display errors.
       :data:`lbl_error` is a :class:`~kivy.properties.ObjectProperty`
    """

    __events__ = ("on_cancel", "on_added", "on_error")

    def __init__(self, project, **kwargs):
        super(AddFileDialog, self).__init__(**kwargs)
        self.project = project

    def on_cancel(self):
        pass

    def on_added(self):
        pass

    def on_error(self):
        pass

    @ignore_proj_watcher
    def _perform_add_file(self):
        """To copy file from its original path to new path
        """

        if self.text_file.text == "":
            self.lbl_error.text = "Select the File"
            return

        target_folder = self.text_folder.text

        folder = os.path.join(self.project.path, target_folder)
        if not os.path.exists(folder):
            os.mkdir(folder)

        if os.path.exists(os.path.join(folder, os.path.basename(self.text_file.text))):
            self.lbl_error.text = "There is a file with the same name!"
            return

        try:
            shutil.copy(self.text_file.text, os.path.join(folder, os.path.basename(self.text_file.text)))

            self.dispatch("on_added")

        except (OSError, IOError):
            self.dispatch("on_error")

    def _cancel_popup(self, *args):
        """To dismiss popup when cancel is pressed.
        """

        self._popup.dismiss()

    def _file_load(self, instance):
        """To set the text of text_file, to the file selected.
        """

        self._popup.dismiss()
        if instance.selection != []:
            self.text_file.text = instance.selection[0]

    def open_file_btn_pressed(self, *args):
        """To load File Browser for selected file when 'Open File' is clicked
        """

        self._fbrowser = FileBrowser(select_string="Open")
        self._fbrowser.bind(on_success=self._file_load, on_canceled=self._cancel_popup)

        self._popup = Popup(title="Open File", content=self._fbrowser, size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()

    def _folder_load(self, instance):
        """To set the text of text_folder, to the folder selected.
        """

        if hasattr(self, "_popup"):
            self._popup.dismiss()

        if instance.ids.tabbed_browser.current_tab.text == "List View":
            proj_dir = instance.ids.list_view.path
        else:
            proj_dir = instance.ids.icon_view.path

        proj_dir = os.path.join(proj_dir, instance.filename)

        target_dir = self.project.path

        if os.path.isdir(proj_dir):
            target_dir = os.path.relpath(proj_dir, self.project.path)
        elif os.path.isfile(proj_dir):
            proj_dir = os.path.dirname(proj_dir)
            target_dir = os.path.relpath(proj_dir, self.project.path)

        self.text_folder.text = target_dir

    def open_folder_btn_pressed(self, *args):
        """To load File Browser for selected folder when 'Open Folder'
           is clicked
        """

        self._fbrowser = FileBrowser(select_string="Open Folder")
        self._fbrowser.ids.list_view.path = self.project.path
        self._fbrowser.bind(on_success=self._folder_load, on_canceled=self._cancel_popup)

        self._popup = Popup(title="Open Folder", content=self._fbrowser, size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()
コード例 #33
0
ファイル: add_file.py プロジェクト: AM7000000/kivy-designer
class AddFileDialog(BoxLayout):
    '''AddFileDialog is a dialog for adding files to current project. It emits
       'on_added' event if file has been added successfully, 'on_error' if
       there has been some error in adding file and 'on_cancel' when user
       wishes to cancel the operation.
    '''

    text_file = ObjectProperty()
    '''An instance to TextInput showing file path to be added.
       :data:`text_file` is a :class:`~kivy.properties.ObjectProperty`
    '''

    text_folder = ObjectProperty()
    '''An instance to TextInput showing folder where file has to be added.
       :data:`text_folder` is a :class:`~kivy.properties.ObjectProperty`
    '''

    always_check = ObjectProperty()
    '''An instance to :class:`~kivy.uix.checkbox.CheckBox`, which will
       determine whether same folder will be used for all files of
       same type or not.
       :data:`always_check` is a :class:`~kivy.properties.ObjectProperty`
    '''

    lbl_error = ObjectProperty()
    '''An instance to Label to display errors.
       :data:`lbl_error` is a :class:`~kivy.properties.ObjectProperty`
    '''

    __events__ = ('on_cancel', 'on_added', 'on_error')

    def __init__(self, proj_loader, **kwargs):
        super(AddFileDialog, self).__init__(**kwargs)
        self.proj_loader = proj_loader

    def on_cancel(self):
        pass

    def on_added(self):
        pass

    def on_error(self):
        pass

    def _perform_add_file(self):
        '''To copy file from its original path to new path
        '''

        if self.text_file.text == '':
            self.lbl_error.text = "Select the File"
            return

        self.proj_loader.proj_watcher.stop()

        target_folder = "" if self.text_folder.text == "." \
                                        else self.text_folder.text

        folder = os.path.join(self.proj_loader.proj_dir, target_folder)
        if not os.path.exists(folder):
            os.mkdir(folder)

        if os.path.exists(os.path.join(folder,
                                       os.path.basename(self.text_file.text))):
            self.lbl_error.text = "There is a file with the same name!"
            return

        try:
            shutil.copy(self.text_file.text,
                        os.path.join(folder,
                                     os.path.basename(self.text_file.text)))

            if self.always_check.active:
                self.proj_loader.add_dir_for_file_type(
                    self.text_file.text[self.text_file.text.rfind('.') + 1:],
                    target_folder)
            self.proj_loader.proj_watcher.start_watching(
                self.proj_loader.proj_dir)
            self.dispatch('on_added')

        except (OSError, IOError):
            self.dispatch('on_error')

    def update_from_file(self, *args):
        '''To determine the folder associated with current file type.
        '''

        curr_type = self.text_file.text
        curr_type = curr_type[curr_type.find('.') + 1:]
        if curr_type == '':
            return

        try:
            folder = self.proj_loader.dict_file_type_and_path[curr_type]
            self.text_folder.text = folder
            self.always_check.active = True

        except KeyError:
            pass

    def _cancel_popup(self, *args):
        '''To dismiss popup when cancel is pressed.
        '''

        self._popup.dismiss()

    def _file_load(self, instance):
        '''To set the text of text_file, to the file selected.
        '''

        self._popup.dismiss()
        if instance.selection != []:
            self.text_file.text = instance.selection[0]

    def open_file_btn_pressed(self, *args):
        '''To load File Browser for selected file when 'Open File' is clicked
        '''

        self._fbrowser = FileBrowser(select_string='Open')
        self._fbrowser.bind(on_success=self._file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()

    def _folder_load(self, instance):
        '''To set the text of text_folder, to the folder selected.
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        if instance.ids.tabbed_browser.current_tab.text == 'List View':
            proj_dir = instance.ids.list_view.path
        else:
            proj_dir = instance.ids.icon_view.path

        proj_dir = os.path.join(proj_dir, instance.filename)

        target_dir = self.proj_loader.proj_dir

        if os.path.isdir(proj_dir):
            target_dir = os.path.relpath(proj_dir, self.proj_loader.proj_dir)
        elif os.path.isfile(proj_dir):
            proj_dir = os.path.dirname(proj_dir)
            target_dir = os.path.relpath(proj_dir, self.proj_loader.proj_dir)

        self.text_folder.text = target_dir

    def open_folder_btn_pressed(self, *args):
        '''To load File Browser for selected folder when 'Open Folder'
           is clicked
        '''

        self._fbrowser = FileBrowser(select_string='Open Folder')
        self._fbrowser.ids.list_view.path = self.proj_loader.proj_dir
        self._fbrowser.bind(on_success=self._folder_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open Folder', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()
コード例 #34
0
 def build_browser(self, **kwargs):
     kwargs.setdefault('select_string', self.get_select_string())
     kwargs.setdefault('path', self.last_path)
     kwargs.setdefault('filters', self.get_filters())
     return FileBrowser(**kwargs)
コード例 #35
0
class AddFileDialog(BoxLayout):
    '''AddFileDialog is a dialog for adding files to current project. It emits
       'on_added' event if file has been added successfully, 'on_error' if
       there has been some error in adding file and 'on_cancel' when user
       wishes to cancel the operation.
    '''

    text_file = ObjectProperty()
    '''An instance to TextInput showing file path to be added.
       :data:`text_file` is a :class:`~kivy.properties.ObjectProperty`
    '''

    text_folder = ObjectProperty()
    '''An instance to TextInput showing folder where file has to be added.
       :data:`text_folder` is a :class:`~kivy.properties.ObjectProperty`
    '''

    always_check = ObjectProperty()
    '''An instance to :class:`~kivy.uix.checkbox.CheckBox`, which will
       determine whether same folder will be used for all files of
       same type or not.
       :data:`always_check` is a :class:`~kivy.properties.ObjectProperty`
    '''

    __events__ = ('on_cancel', 'on_added', 'on_error')

    def __init__(self, proj_loader, **kwargs):
        super(AddFileDialog, self).__init__(**kwargs)
        self.proj_loader = proj_loader

    def on_cancel(self):
        pass

    def on_added(self):
        pass

    def on_error(self):
        pass

    def _perform_add_file(self):
        '''To copy file from its original path to new path
        '''

        if self.text_file.text == '' or self.text_folder.text == '':
            return

        self.proj_loader.proj_watcher.stop()

        folder = os.path.join(self.proj_loader.proj_dir, self.text_folder.text)
        if not os.path.exists(folder):
            os.mkdir(folder)

        try:
            shutil.copy(
                self.text_file.text,
                os.path.join(folder, os.path.basename(self.text_file.text)))

            if self.always_check.active:
                self.proj_loader.add_dir_for_file_type(
                    self.text_file.text[self.text_file.text.rfind('.') + 1:],
                    self.text_folder.text)

            self.proj_loader.proj_watcher.start_watching(
                self.proj_loader.proj_dir)
            self.dispatch('on_added')

        except (OSError, IOError):
            self.dispatch('on_error')

    def update_from_file(self, *args):
        '''To determine the folder associated with current file type.
        '''

        curr_type = self.text_file.text
        curr_type = curr_type[curr_type.find('.') + 1:]
        if curr_type == '':
            return

        try:
            folder = self.proj_loader.dict_file_type_and_path[curr_type]
            self.text_folder.text = folder
            self.always_check.active = True

        except KeyError:
            pass

    def _cancel_popup(self, *args):
        '''To dismiss popup when cancel is pressed.
        '''

        self._popup.dismiss()

    def _file_load(self, instance):
        '''To set the text of text_file, to the file selected.
        '''

        self._popup.dismiss()
        if instance.selection != []:
            self.text_file.text = instance.selection[0]

    def open_file_btn_pressed(self, *args):
        '''To load File Browser for selected file when 'Open File' is clicked
        '''

        self._fbrowser = FileBrowser(select_string='Open')
        self._fbrowser.bind(on_success=self._file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File',
                            content=self._fbrowser,
                            size_hint=(0.9, 0.9),
                            auto_dismiss=False)

        self._popup.open()

    def _folder_load(self, instance):
        '''To set the text of text_folder, to the folder selected.
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        proj_dir = ''
        if instance.ids.tabbed_browser.current_tab.text == 'List View':
            proj_dir = instance.ids.list_view.path
        else:
            proj_dir = instance.ids.icon_view.path

        proj_dir = os.path.join(proj_dir, instance.filename)
        if proj_dir.find(self.proj_loader.proj_dir) != -1:
            proj_dir = proj_dir.replace(self.proj_loader.proj_dir, '')
            if proj_dir[0] == '/':
                proj_dir = proj_dir[1:]

            self.text_folder.text = proj_dir

    def open_folder_btn_pressed(self, *args):
        '''To load File Browser for selected folder when 'Open Folder'
           is clicked
        '''

        self._fbrowser = FileBrowser(select_string='Open')
        self._fbrowser.ids.list_view.path = self.proj_loader.proj_dir
        self._fbrowser.bind(on_success=self._folder_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File',
                            content=self._fbrowser,
                            size_hint=(0.9, 0.9),
                            auto_dismiss=False)

        self._popup.open()
コード例 #36
0
ファイル: app.py プロジェクト: Naegling001/CodeCloneDetector
    def __init__(self, **kwargs):
        super(MainScreen, self).__init__(**kwargs)

        #Callback Methods
        def analyzeButtonCallback(instance):
            print('analyze button was pressed')
            self.current = 'Setup'

        def exitButtonCallback(instance):
            print('exit button was pressed')

        def browseInputButtonCallback(instance):
            print('browse button was pressed')
            self.current = 'input'

        def fbrowser_canceled(instance):
            print 'cancelled, Close self.'

        def fbrowser_success(instance):
            projectTextInput.text = str(instance.selection)
            self.current = 'Setup'

        self.transition = NoTransition()

        #Labels
        welcomeLabel = Label(text='Clone Detective',
                             halign='center',
                             font_size=72,
                             pos=(5, -10))

        #Buttons
        analyzeButton = Button(text='New Analysis',
                               pos=(170, 100),
                               font_size=14,
                               size_hint=(.2, .1))
        analyzeButton.bind(on_press=analyzeButtonCallback)

        exitButton = Button(text='Exit',
                            pos=(450, 100),
                            font_size=14,
                            size_hint=(.2, .1))
        exitButton.bind(on_press=exitButtonCallback)

        #Welcome screen
        layout = BoxLayout(orientation='vertical')
        layout2 = BoxLayout(orientation='horizontal')

        layout.add_widget(welcomeLabel)
        layout2.add_widget(analyzeButton)
        layout2.add_widget(exitButton)
        layout.add_widget(layout2)

        WelcomeScreen = Screen(name='Welcome')
        WelcomeScreen.add_widget(layout)

        #Setup screen
        layout3 = BoxLayout(orientation='vertical')
        browseInputLabel = Label(text='Input Project',
                                 halign='center',
                                 valign='middle',
                                 font_size=72,
                                 pos=(5, -10))
        projectTextInput = TextInput(text="path to input project goes here")
        browseInputButton = Button(text='Browse',
                                   pos=(450, 100),
                                   font_size=14,
                                   size_hint=(.2, .1))
        browseInputButton.bind(on_press=browseInputButtonCallback)
        layout4 = BoxLayout(orientation='horizontal')
        layout4.add_widget(browseInputLabel)
        layout4.add_widget(projectTextInput)
        layout4.add_widget(browseInputButton)

        layout3.add_widget(layout4)
        SetupScreen = Screen(name='Setup')
        SetupScreen.add_widget(layout3)

        #InputBrowserScreen
        if platform == 'win':
            user_path = dirname(expanduser('~')) + sep + 'Documents'
        else:
            user_path = expanduser('~') + sep + 'Documents'

        InputBrowserScreen = Screen(name='input')
        inputFileBrowser = FileBrowser(select_string='Select',
                                       favorites=[(user_path, 'Documents')])
        inputFileBrowser.bind(on_success=fbrowser_success,
                              on_canceled=fbrowser_canceled)
        InputBrowserScreen.add_widget(inputFileBrowser)

        #Status Screen
        StatusScreen = Screen(name='Analysis In Progress')

        #Report Screen
        ReportScreen = Screen(name='Report')

        #Add screens to the screen manager
        self.add_widget(WelcomeScreen)
        self.add_widget(SetupScreen)
        self.add_widget(InputBrowserScreen)
        self.add_widget(StatusScreen)
        self.add_widget(ReportScreen)

        #Set the initial screen
        self.current = 'Welcome'
コード例 #37
0
ファイル: app.py プロジェクト: ivpusic/kivy-designer
class Designer(FloatLayout):
    '''Designer is the Main Window class of Kivy Designer
       :data:`message` is a :class:`~kivy.properties.StringProperty`
    '''

    designer_console = ObjectProperty(None)
    '''Instance of :class:`designer.designer_console.ConsoleDialog`
    '''

    statusbar = ObjectProperty(None)
    '''Reference to the :class:`~designer.statusbar.StatusBar` instance.
       :data:`statusbar` is a :class:`~kivy.properties.ObjectProperty`
    '''

    editcontview = ObjectProperty(None)
    '''Reference to the :class:`~designer.uix.EditContView` instance.
       :data:`v` is a :class:`~kivy.properties.ObjectProperty`
    '''

    actionbar = ObjectProperty(None)
    '''Reference to the :class:`~kivy.actionbar.ActionBar` instance.
       ActionBar is used as a MenuBar to display bunch of menu items.
       :data:`actionbar` is a :class:`~kivy.properties.ObjectProperty`
    '''

    undo_manager = ObjectProperty(UndoManager())
    '''Reference to the :class:`~designer.UndoManager` instance.
       :data:`undo_manager` is a :class:`~kivy.properties.ObjectProperty`
    '''

    project_watcher = ObjectProperty(None)
    '''Reference to the :class:`~designer.project_watcher.ProjectWatcher`.
       :data:`project_watcher` is a :class:`~kivy.properties.ObjectProperty`
    '''

    project_loader = ObjectProperty(None)
    '''Reference to the :class:`~designer.project_loader.ProjectLoader`.
       :data:`project_loader` is a :class:`~kivy.properties.ObjectProperty`
    '''

    proj_settings = ObjectProperty(None)
    '''Reference of :class:`~designer.project_settings.ProjectSettings`.
       :data:`proj_settings` is a :class:`~kivy.properties.ObjectProperty`
    '''

    _curr_proj_changed = BooleanProperty(False)
    '''Specifies whether current project has been changed inside Kivy Designer
       :data:`_curr_proj_changed` is
       a :class:`~kivy.properties.BooleanProperty`
    '''

    _proj_modified_outside = BooleanProperty(False)
    '''Specifies whether current project has been changed outside Kivy Designer
       :data:`_proj_modified_outside` is a
       :class:`~kivy.properties.BooleanProperty`
    '''

    ui_creator = ObjectProperty(None)
    '''Reference to :class:`~designer.ui_creator.UICreator` instance.
       :data:`ui_creator` is a :class:`~kivy.properties.ObjectProperty`
    '''

    designer_content = ObjectProperty(None)
    '''Reference to
       :class:`~designer.designer_content.DesignerContent` instance.
       :data:`designer_content` is a :class:`~kivy.properties.ObjectProperty`
    '''

    proj_tree_view = ObjectProperty(None)
    '''Reference to Project Tree instance
       :data:`proj_tree_view` is a :class:`~kivy.properties.ObjectProperty`
    '''

    designer_settings = ObjectProperty(None)
    '''Reference of :class:`~designer.designer_settings.DesignerSettings`.
       :data:`designer_settings` is a :class:`~kivy.properties.ObjectProperty`
    '''

    start_page = ObjectProperty(None)
    '''Reference of :class:`~designer.start_page.DesignerStartPage`.
       :data:`start_page` is a :class:`~kivy.properties.ObjectProperty`
    '''

    recent_files_cont_menu = ObjectProperty(None)
    '''The context sub menu, containing the recently opened/saved projects.
       Reference of :class:`~designer.uix.contextual.ContextSubMenu`.
       :data:`recent_files_cont_menu` is a
       :class:`~kivy.properties.ObjectProperty`
    '''
    def __init__(self, **kwargs):
        super(Designer, self).__init__(**kwargs)
        self.project_watcher = ProjectWatcher(self.project_modified)
        self.project_loader = ProjectLoader(self.project_watcher)
        self.recent_manager = RecentManager()
        self.widget_to_paste = None
        self.designer_content = DesignerContent(size_hint=(1, None))

        self.designer_settings = DesignerSettings()
        self.designer_settings.bind(on_config_change=self._config_change)
        self.designer_settings.load_settings()
        self.designer_settings.bind(on_close=self._cancel_popup)

        Clock.schedule_interval(
            self.project_loader.perform_auto_save,
            int(
                self.designer_settings.config_parser.getdefault(
                    'global', 'auto_save_time', 5)) * 60)

    def show_help(self, *args):
        '''Event handler for 'on_help' event of self.start_page
        '''

        self.help_dlg = HelpDialog()
        self._popup = Popup(title='Kivy Designer Help',
                            content=self.help_dlg,
                            size_hint=(0.95, 0.95),
                            auto_dismiss=False)
        self._popup.open()
        self.help_dlg.bind(on_cancel=self._cancel_popup)

        self.help_dlg.rst.source = 'help.rst'

    def _config_change(self, *args):
        '''Event Handler for 'on_config_change'
           event of self.designer_settings.
        '''

        Clock.unschedule(self.project_loader.perform_auto_save)
        Clock.schedule_interval(
            self.project_loader.perform_auto_save,
            int(
                self.designer_settings.config_parser.getdefault(
                    'global', 'auto_save_time', 5)) * 60)

        self.ui_creator.kv_code_input.reload_kv = \
            bool(self.designer_settings.config_parser.getdefault(
                 'global', 'reload_kv', True))

        self.recent_manager.max_recent_files = \
            int(self.designer_settings.config_parser.getdefault(
                'global', 'num_recent_files', 5))

    def _add_designer_content(self):
        '''Add designer_content to Designer, when a project is loaded
        '''

        for _child in self.children[:]:
            if _child == self.designer_content:
                return

        self.remove_widget(self.start_page)
        self.add_widget(self.designer_content, 1)

        self.ids['actn_btn_save'].disabled = False
        self.ids['actn_btn_save_as'].disabled = False
        self.ids['actn_chk_proj_tree'].disabled = False
        self.ids['actn_chk_prop_event'].disabled = False
        self.ids['actn_chk_widget_tree'].disabled = False
        self.ids['actn_chk_status_bar'].disabled = False
        self.ids['actn_chk_kv_lang_area'].disabled = False
        self.ids['actn_btn_add_file'].disabled = False
        self.ids['actn_btn_custom_widget'].disabled = False
        self.ids['actn_btn_proj_pref'].disabled = False
        self.ids['actn_btn_run_proj'].disabled = False

    def on_statusbar_height(self, *args):
        '''Callback for statusbar.height
        '''

        self.designer_content.y = self.statusbar.height
        self.on_height(*args)

    def on_actionbar_height(self, *args):
        '''Callback for actionbar.height
        '''

        self.on_height(*args)

    def on_height(self, *args):
        '''Callback for self.height
        '''

        if self.actionbar and self.statusbar:
            self.designer_content.height = self.height - \
                self.actionbar.height - self.statusbar.height

            self.designer_content.y = self.statusbar.height

    def project_modified(self, *args):
        '''Event Handler called when Project is modified outside Kivy Designer
        '''

        #To dispatch modified event only once for all files/folders of proj_dir
        if self._proj_modified_outside:
            return

        self._confirm_dlg = ConfirmationDialog(
            message="Current Project has been modified\n"
            "outside the Kivy Designer.\nDo you want to reload project?")
        self._confirm_dlg.bind(on_ok=self._perform_reload,
                               on_cancel=self._cancel_popup)
        self._popup = Popup(title='Kivy Designer',
                            content=self._confirm_dlg,
                            size_hint=(None, None),
                            size=('200pt', '150pt'),
                            auto_dismiss=False)
        self._popup.open()

        self._proj_modified_outside = True

    def _perform_reload(self, *args):
        '''Perform reload of project after it is modified
        '''

        #Perform reload of project after it is modified
        self._popup.dismiss()
        self.project_watcher.allow_event_dispatch = False
        self._perform_open(self.project_loader.proj_dir)
        self.project_watcher.allow_event_dispatch = True
        self._proj_modified_outside = False

    def on_show_edit(self, *args):
        '''Event Handler of 'on_show_edit' event. This will show EditContView
           in ActionBar
        '''

        if isinstance(self.actionbar.children[0], EditContView):
            return

        if self.editcontview is None:
            self.editcontview = EditContView(
                on_undo=self.action_btn_undo_pressed,
                on_redo=self.action_btn_redo_pressed,
                on_cut=self.action_btn_cut_pressed,
                on_copy=self.action_btn_copy_pressed,
                on_paste=self.action_btn_paste_pressed,
                on_delete=self.action_btn_delete_pressed,
                on_selectall=self.action_btn_select_all_pressed,
                on_next_screen=self._next_screen,
                on_prev_screen=self._prev_screen)

        self.actionbar.add_widget(self.editcontview)

        widget = self.ui_creator.propertyviewer.widget

        if isinstance(widget, Carousel) or\
                isinstance(widget, ScreenManager) or\
                isinstance(widget, TabbedPanel):
            self.editcontview.show_action_btn_screen(True)
        else:
            self.editcontview.show_action_btn_screen(False)

        if self.ui_creator.kv_code_input.clicked:
            self._edit_selected = 'KV'
        elif self.ui_creator.playground.clicked:
            self._edit_selected = 'Play'
        else:
            self._edit_selected = 'Py'

        self.ui_creator.playground.clicked = False
        self.ui_creator.kv_code_input.clicked = False

    def _prev_screen(self, *args):
        '''Event handler for 'on_prev_screen' for self.editcontview
        '''

        widget = self.ui_creator.propertyviewer.widget
        if isinstance(widget, Carousel):
            widget.load_previous()

        elif isinstance(widget, ScreenManager):
            widget.current = widget.previous()

        elif isinstance(widget, TabbedPanel):
            index = widget.tab_list.index(widget.current_tab)
            if len(widget.tab_list) <= index + 1:
                return

            widget.switch_to(widget.tab_list[index + 1])

    def _next_screen(self, *args):
        '''Event handler for 'on_next_screen' for self.editcontview
        '''

        widget = self.ui_creator.propertyviewer.widget
        if isinstance(widget, Carousel):
            widget.load_next()

        elif isinstance(widget, ScreenManager):
            widget.current = widget.next()

        elif isinstance(widget, TabbedPanel):
            index = widget.tab_list.index(widget.current_tab)
            if index == 0:
                return

            widget.switch_to(widget.tab_list[index - 1])

    def on_touch_down(self, touch):
        '''Override of FloatLayout.on_touch_down. Used to determine where
           touch is down and to call self.actionbar.on_previous
        '''

        if not isinstance(self.actionbar.children[0], EditContView) or\
           self.actionbar.collide_point(*touch.pos):
            return super(FloatLayout, self).on_touch_down(touch)

        self.actionbar.on_previous(self)

        return super(FloatLayout, self).on_touch_down(touch)

    def action_btn_new_pressed(self, *args):
        '''Event Handler when ActionButton "New" is pressed.
        '''

        if not self._curr_proj_changed:
            self._show_new_dialog()
            return

        self._confirm_dlg = ConfirmationDialog('All unsaved changes will be'
                                               ' lost.\n'
                                               'Do you want to continue?')
        self._confirm_dlg.bind(on_ok=self._show_new_dialog,
                               on_cancel=self._cancel_popup)

        self._popup = Popup(title='New',
                            content=self._confirm_dlg,
                            size_hint=(None, None),
                            size=('200pt', '150pt'),
                            auto_dismiss=False)
        self._popup.open()

    def _show_new_dialog(self, *args):
        if hasattr(self, '_popup'):
            self._popup.dismiss()

        self._new_dialog = NewProjectDialog()
        self._new_dialog.bind(on_select=self._perform_new,
                              on_cancel=self._cancel_popup)
        self._popup = Popup(title='New Project',
                            content=self._new_dialog,
                            size_hint=(None, None),
                            size=('650pt', '450pt'),
                            auto_dismiss=False)
        self._popup.open()

    def _perform_new(self, *args):
        '''To load new project
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        self.cleanup()
        new_proj_dir = os.path.join(get_kivy_designer_dir(),
                                    NEW_PROJECT_DIR_NAME)
        if os.path.exists(new_proj_dir):
            shutil.rmtree(new_proj_dir)

        os.mkdir(new_proj_dir)

        template = self._new_dialog.adapter.selection[0].text
        kv_file = NEW_PROJECTS[template][0]
        py_file = NEW_PROJECTS[template][1]

        _dir = os.path.dirname(designer.__file__)
        _dir = os.path.split(_dir)[0]
        templates_dir = os.path.join(_dir, NEW_TEMPLATES_DIR)
        shutil.copy(os.path.join(templates_dir, py_file),
                    os.path.join(new_proj_dir, "main.py"))

        shutil.copy(os.path.join(templates_dir, kv_file),
                    os.path.join(new_proj_dir, "main.kv"))

        self.ui_creator.playground.sandbox.error_active = True
        with self.ui_creator.playground.sandbox:
            self.project_loader.load_new_project(
                os.path.join(new_proj_dir, "main.kv"))
            root_wigdet = self.project_loader.get_root_widget()
            self.ui_creator.playground.add_widget_to_parent(root_wigdet,
                                                            None,
                                                            from_undo=True)
            self.ui_creator.kv_code_input.text = \
                self.project_loader.get_full_str()
            self.designer_content.update_tree_view(self.project_loader)
            self._add_designer_content()
            if self.project_loader.class_rules:
                for i, _rule in enumerate(self.project_loader.class_rules):
                    widgets.append((_rule.name, 'custom'))

                self.designer_content.toolbox.add_custom()

        self.ui_creator.playground.sandbox.error_active = False

    def cleanup(self):
        '''To cleanup everything loaded by the current project before loading
           another project.
        '''

        self.project_loader.cleanup()
        self.ui_creator.cleanup()
        self.undo_manager.cleanup()
        self.designer_content.toolbox.cleanup()

        for node in self.proj_tree_view.root.nodes[:]:
            self.proj_tree_view.remove_node(node)

        for widget in widgets[:]:
            if widget[1] == 'custom':
                widgets.remove(widget)

        self._curr_proj_changed = False
        self.ui_creator.kv_code_input.text = ""

        self.designer_content.tab_pannel.list_py_code_inputs = []
        for th in self.designer_content.tab_pannel.tab_list[:-1]:
            self.designer_content.tab_pannel.remove_widget(th)

    def action_btn_open_pressed(self, *args):
        '''Event Handler when ActionButton "Open" is pressed.
        '''

        if not self._curr_proj_changed:
            self._show_open_dialog()
            return

        self._confirm_dlg = ConfirmationDialog('All unsaved changes will be '
                                               'lost.\n'
                                               'Do you want to continue?')

        self._confirm_dlg.bind(on_ok=self._show_open_dialog,
                               on_cancel=self._cancel_popup)

        self._popup = Popup(title='Kivy Designer',
                            content=self._confirm_dlg,
                            size_hint=(None, None),
                            size=('200pt', '150pt'),
                            auto_dismiss=False)
        self._popup.open()

    def _show_open_dialog(self, *args):
        '''To show FileBrowser to "Open" a project
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        self._fbrowser = FileBrowser(select_string='Open')

        def_path = os.getcwd()
        if not self.project_loader.new_project and \
                self.project_loader.proj_dir:
            def_path = self.project_loader.proj_dir

        if self._fbrowser.ids.tabbed_browser.current_tab.text == 'List View':
            self._fbrowser.ids.list_view.path = def_path
        else:
            self._fbrowser.ids.icon_view.path = def_path

        self._fbrowser.bind(on_success=self._fbrowser_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title="Open",
                            content=self._fbrowser,
                            size_hint=(0.9, 0.9),
                            auto_dismiss=False)
        self._popup.open()

    def _select_class_selected(self, *args):
        '''Event Handler for 'on_select' event of self._select_class
        '''

        selection = self._select_class.listview.adapter.selection[0].text

        with self.ui_creator.playground.sandbox:
            root_widget = self.project_loader.set_root_widget(selection)
            self.ui_creator.playground.add_widget_to_parent(root_widget,
                                                            None,
                                                            from_undo=True)
            self.ui_creator.kv_code_input.text = \
                self.project_loader.get_root_str()

        self._select_class_popup.dismiss()

    def _select_class_cancel(self, *args):
        '''Event Handler for 'on_cancel' event of self._select_class
        '''

        self._select_class_popup.dismiss()

    def _fbrowser_load(self, instance):
        '''Event Handler for 'on_load' event of self._fbrowser
        '''
        if instance.selection == []:
            return

        file_path = instance.selection[0]
        self._popup.dismiss()
        self._perform_open(file_path)

    def _perform_open(self, file_path):
        '''To open a project given by file_path
        '''

        for widget in widgets[:]:
            if widget[1] == 'custom':
                widgets.remove(widget)

        self.cleanup()

        self.ui_creator.playground.sandbox.error_active = True

        root_widget = None

        with self.ui_creator.playground.sandbox:
            try:
                self.project_loader.load_project(file_path)

                if self.project_loader.class_rules:
                    for i, _rule in enumerate(self.project_loader.class_rules):
                        widgets.append((_rule.name, 'custom'))

                    self.designer_content.toolbox.add_custom()

                #to test listview
                #root_wigdet = None
                root_wigdet = self.project_loader.get_root_widget()

                if not root_wigdet:
                    #Show list box showing widgets
                    self._select_class = SelectClass(
                        self.project_loader.class_rules)

                    self._select_class.bind(
                        on_select=self._select_class_selected,
                        on_cancel=self._select_class_cancel)

                    self._select_class_popup = Popup(
                        title="Select Root Widget",
                        content=self._select_class,
                        size_hint=(0.5, 0.5),
                        auto_dismiss=False)
                    self._select_class_popup.open()

                else:
                    self.ui_creator.playground.add_widget_to_parent(
                        root_wigdet, None, from_undo=True)
                    self.ui_creator.kv_code_input.text = \
                        self.project_loader.get_full_str()

                self.recent_manager.add_file(file_path)
                #Record everything for later use
                self.project_loader.record()
                self.designer_content.update_tree_view(self.project_loader)
                self._add_designer_content()

            except Exception as e:
                self.statusbar.show_message('Cannot load Project: %s' %
                                            (str(e)))

        self.ui_creator.playground.sandbox.error_active = False

    def _cancel_popup(self, *args):
        '''EventHandler for all self._popup when self._popup.content
           emits 'on_cancel' or equivalent.
        '''

        self._proj_modified_outside = False
        self._popup.dismiss()

    def action_btn_save_pressed(self, *args):
        '''Event Handler when ActionButton "Save" is pressed.
        '''

        if self.project_loader.root_rule:
            try:
                if self.project_loader.new_project:
                    self.action_btn_save_as_pressed()
                    return

                else:
                    self.project_loader.save_project()
                    projdir = self.project_loader.proj_dir
                    self.project_loader.cleanup(stop_watcher=False)
                    self.ui_creator.playground.cleanup()
                    self.project_loader.load_project(projdir)
                    root_wigdet = self.project_loader.get_root_widget()
                    self.ui_creator.playground.add_widget_to_parent(
                        root_wigdet, None, from_undo=True, from_kv=True)
                self._curr_proj_changed = False
                self.statusbar.show_message('Project saved successfully')

            except:
                self.statusbar.show_message('Cannot save project')

    def action_btn_save_as_pressed(self, *args):
        '''Event Handler when ActionButton "Save As" is pressed.
        '''

        if self.project_loader.root_rule:
            self._curr_proj_changed = False

            self._save_as_browser = FileBrowser(select_string='Save')

            def_path = os.getcwd()
            if not self.project_loader.new_project and \
                    self.project_loader.proj_dir:
                def_path = self.project_loader.proj_dir

            if self._save_as_browser.ids.tabbed_browser.current_tab.text == \
                    'List View':
                self._save_as_browser.ids.list_view.path = def_path
            else:
                self._save_as_browser.ids.icon_view.path = def_path

            self._save_as_browser.bind(on_success=self._perform_save_as,
                                       on_canceled=self._cancel_popup)

            self._popup = Popup(title="Enter Folder Name",
                                content=self._save_as_browser,
                                size_hint=(0.9, 0.9),
                                auto_dismiss=False)
            self._popup.open()

    def _perform_save_as(self, instance):
        '''Event handler for 'on_success' event of self._save_as_browser
        '''

        if hasattr(self, '_popup'):
            self._popup.dismiss()

        proj_dir = ''
        if instance.ids.tabbed_browser.current_tab.text == 'List View':
            proj_dir = instance.ids.list_view.path
        else:
            proj_dir = instance.ids.icon_view.path

        proj_dir = os.path.join(proj_dir, instance.filename)
        try:
            self.project_loader.save_project(proj_dir)
            self.recent_manager.add_file(proj_dir)
            projdir = self.project_loader.proj_dir
            self.project_loader.cleanup()
            self.ui_creator.playground.cleanup()
            self.project_loader.load_project(projdir)
            root_wigdet = self.project_loader.get_root_widget()
            self.ui_creator.playground.add_widget_to_parent(root_wigdet,
                                                            None,
                                                            from_undo=True)
            self.statusbar.show_message('Project saved successfully')

        except:
            self.statusbar.show_message('Cannot save project')

    def action_btn_settings_pressed(self, *args):
        '''Event handler for 'on_release' event of
           DesignerActionButton "Settings"
        '''

        self.designer_settings.parent = None
        self._popup = Popup(title="Kivy Designer Settings",
                            content=self.designer_settings,
                            size_hint=(None, None),
                            size=(600, 400),
                            auto_dismiss=False)

        self._popup.open()

    def action_btn_recent_files_pressed(self, *args):
        '''Event Handler when ActionButton "Recent Files" is pressed.
        '''
        pass

    def fill_recent_menu(self, *args):
        '''Fill self.recent_files_cont_menu with DesignerActionButton
           of all Recent Files
        '''
        recent_menu = self.recent_files_cont_menu
        for _file in self.recent_manager.list_files:
            act_btn = DesignerActionButton(text=_file, shorten=True)
            recent_menu.add_widget(act_btn)
            act_btn.bind(on_release=self._recent_file_release)

    def _recent_file_release(self, instance, *args):
        '''Event Handler for 'on_select' event of self._recent_dlg.
        '''
        self._perform_open(instance.text)

    def action_btn_quit_pressed(self, *args):
        '''Event Handler when ActionButton "Quit" is pressed.
        '''

        App.get_running_app().stop()

    def action_btn_undo_pressed(self, *args):
        '''Event Handler when ActionButton "Undo" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.undo_manager.do_undo()
        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_undo()
        elif self._edit_selected == 'Py':
            list_py = self.designer_content.tab_pannel.list_py_code_inputs
            for code_input in list_py:
                if code_input.clicked is True:
                    code_input.clicked = False
                    code_input.do_undo()

    def action_btn_redo_pressed(self, *args):
        '''Event Handler when ActionButton "Redo" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.undo_manager.do_redo()
        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_redo()
        elif self._edit_selected == 'Py':
            list_py = self.designer_content.tab_pannel.list_py_code_inputs
            for code_input in list_py:
                if code_input.clicked is True:
                    code_input.clicked = False
                    code_input.do_redo()

    def action_btn_cut_pressed(self, *args):
        '''Event Handler when ActionButton "Cut" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_cut()

        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_cut()

        elif self._edit_selected == 'Py':
            list_py = self.designer_content.tab_pannel.list_py_code_inputs
            for code_input in list_py:
                if code_input.clicked is True:
                    code_input.clicked = False
                    code_input.do_cut()

    def action_btn_copy_pressed(self, *args):
        '''Event Handler when ActionButton "Copy" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_copy()

        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_copy()

        elif self._edit_selected == 'Py':
            list_py = self.designer_content.tab_pannel.list_py_code_inputs
            for code_input in list_py:
                if code_input.clicked is True:
                    code_input.clicked = False
                    code_input.do_copy()

    def action_btn_paste_pressed(self, *args):
        '''Event Handler when ActionButton "Paste" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_paste()

        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_paste()

        elif self._edit_selected == 'Py':
            list_py = self.designer_content.tab_pannel.list_py_code_inputs
            for code_input in list_py:
                if code_input.clicked is True:
                    code_input.clicked = False
                    code_input.do_paste()

    def action_btn_delete_pressed(self, *args):
        '''Event Handler when ActionButton "Delete" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_delete()

        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_delete()

        elif self._edit_selected == 'Py':
            list_py = self.designer_content.tab_pannel.list_py_code_inputs
            for code_input in list_py:
                if code_input.clicked is True:
                    code_input.clicked = False
                    code_input.do_delete()

    def action_btn_select_all_pressed(self, *args):
        '''Event Handler when ActionButton "Select All" is pressed.
        '''

        if self._edit_selected == 'Play':
            self.ui_creator.playground.do_select_all()

        elif self._edit_selected == 'KV':
            self.ui_creator.kv_code_input.do_select_all()

        elif self._edit_selected == 'Py':
            list_py = self.designer_content.tab_pannel.list_py_code_inputs
            for code_input in list_py:
                if code_input.clicked is True:
                    code_input.clicked = False
                    code_input.do_select_all()

    def action_btn_add_custom_widget_press(self, *args):
        '''Event Handler when ActionButton "Add Custom Widget" is pressed.
        '''

        self._custom_browser = FileBrowser(select_string='Add')
        self._custom_browser.bind(on_success=self._custom_browser_load,
                                  on_canceled=self._cancel_popup)

        self._popup = Popup(title="Add Custom Widget",
                            content=self._custom_browser,
                            size_hint=(0.9, 0.9),
                            auto_dismiss=False)
        self._popup.open()

    def _custom_browser_load(self, instance):
        '''Event Handler for 'on_success' event of self._custom_browser
        '''

        file_path = instance.selection[0]
        self._popup.dismiss()

        self.ui_creator.playground.sandbox.error_active = True

        with self.ui_creator.playground.sandbox:
            try:
                self.project_loader.add_custom_widget(file_path)

                self.designer_content.toolbox.cleanup()
                for _rule in (self.project_loader.custom_widgets):
                    widgets.append((_rule.name, 'custom'))

                self.designer_content.toolbox.add_custom()

            except ProjectLoaderException as e:
                self.statusbar.show_message('Cannot load widget. %s' % str(e))

        self.ui_creator.playground.sandbox.error_active = False

    def action_chk_btn_toolbox_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "Toolbox" is activated.
        '''

        if chk_btn.checkbox.active:
            self._toolbox_parent.add_widget(
                self.designer_content.splitter_tree)
            self.designer_content.splitter_tree.width = self._toolbox_width

        else:
            self._toolbox_parent = self.designer_content.splitter_tree.parent
            self._toolbox_parent.remove_widget(
                self.designer_content.splitter_tree)
            self._toolbox_width = self.designer_content.splitter_tree.width
            self.designer_content.splitter_tree.width = 0

    def action_chk_btn_property_viewer_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "Property Viewer" is activated.
        '''

        if chk_btn.checkbox.active:
            self._toggle_splitter_widget_tree()
            if self.ui_creator.splitter_widget_tree.parent is None:
                self._splitter_widget_tree_parent.add_widget(
                    self.ui_creator.splitter_widget_tree)
                self.ui_creator.splitter_widget_tree.width = \
                    self._splitter_widget_tree_width

            add_tree = False
            if self.ui_creator.grid_widget_tree.parent is not None:
                add_tree = True
                self.ui_creator.splitter_property.size_hint_y = None
                self.ui_creator.splitter_property.height = 300

            self._splitter_property_parent.clear_widgets()
            if add_tree:
                self._splitter_property_parent.add_widget(
                    self.ui_creator.grid_widget_tree)

            self._splitter_property_parent.add_widget(
                self.ui_creator.splitter_property)
        else:
            self._splitter_property_parent = \
                self.ui_creator.splitter_property.parent
            self._splitter_property_parent.remove_widget(
                self.ui_creator.splitter_property)
            self._toggle_splitter_widget_tree()

    def action_chk_btn_widget_tree_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "Widget Tree" is activated.
        '''

        if chk_btn.checkbox.active:
            self._toggle_splitter_widget_tree()
            add_prop = False
            if self.ui_creator.splitter_property.parent is not None:
                add_prop = True

            self._grid_widget_tree_parent.clear_widgets()
            self._grid_widget_tree_parent.add_widget(
                self.ui_creator.grid_widget_tree)
            if add_prop:
                self._grid_widget_tree_parent.add_widget(
                    self.ui_creator.splitter_property)
                self.ui_creator.splitter_property.size_hint_y = None
                self.ui_creator.splitter_property.height = 300
        else:
            self._grid_widget_tree_parent = \
                self.ui_creator.grid_widget_tree.parent
            self._grid_widget_tree_parent.remove_widget(
                self.ui_creator.grid_widget_tree)
            self.ui_creator.splitter_property.size_hint_y = 1
            self._toggle_splitter_widget_tree()

    def _toggle_splitter_widget_tree(self):
        '''To show/hide splitter_widget_tree
        '''

        if self.ui_creator.splitter_widget_tree.parent is not None and\
                self.ui_creator.splitter_property.parent is None and\
                self.ui_creator.grid_widget_tree.parent is None:

            self._splitter_widget_tree_parent = \
                self.ui_creator.splitter_widget_tree.parent
            self._splitter_widget_tree_parent.remove_widget(
                self.ui_creator.splitter_widget_tree)
            self._splitter_widget_tree_width = \
                self.ui_creator.splitter_widget_tree.width
            self.ui_creator.splitter_widget_tree.width = 0

        elif self.ui_creator.splitter_widget_tree.parent is None:
            self._splitter_widget_tree_parent.add_widget(
                self.ui_creator.splitter_widget_tree)
            self.ui_creator.splitter_widget_tree.width = \
                self._splitter_widget_tree_width

    def action_chk_btn_status_bar_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "StatusBar" is activated.
        '''

        if chk_btn.checkbox.active:
            self._statusbar_parent.add_widget(self.statusbar)
            self.statusbar.height = self._statusbar_height
        else:
            self._statusbar_parent = self.statusbar.parent
            self._statusbar_height = self.statusbar.height
            self._statusbar_parent.remove_widget(self.statusbar)
            self.statusbar.height = 0

    def action_chk_btn_kv_area_active(self, chk_btn):
        '''Event Handler when ActionCheckButton "KVLangArea" is activated.
        '''

        if chk_btn.checkbox.active:
            self.ui_creator.splitter_kv_code_input.height = \
                self._kv_area_height
            self._kv_area_parent.add_widget(
                self.ui_creator.splitter_kv_code_input)
        else:
            self._kv_area_parent = \
                self.ui_creator.splitter_kv_code_input.parent
            self._kv_area_height = \
                self.ui_creator.splitter_kv_code_input.height
            self.ui_creator.splitter_kv_code_input.height = 0
            self._kv_area_parent.remove_widget(
                self.ui_creator.splitter_kv_code_input)

    def _error_adding_file(self, *args):
        '''Event Handler for 'on_error' event of self._add_file_dlg
        '''

        self.statusbar.show_message('Error while adding file to project')
        self._popup.dismiss()

    def _added_file(self, *args):
        '''Event Handler for 'on_added' event of self._add_file_dlg
        '''

        self.statusbar.show_message('File successfully added to project')
        self._popup.dismiss()
        if self._add_file_dlg.target_file[3:] == '.py':
            self.designer_content.add_file_to_tree_view(
                self._add_file_dlg.target_file)

    def action_btn_add_file_pressed(self, *args):
        '''Event Handler when ActionButton "Add File" is pressed.
        '''

        self._add_file_dlg = AddFileDialog(self.project_loader)
        self._add_file_dlg.bind(on_added=self._added_file,
                                on_error=self._error_adding_file,
                                on_cancel=self._cancel_popup)

        self._popup = Popup(title="Add File",
                            content=self._add_file_dlg,
                            size_hint=(None, None),
                            size=(400, 300),
                            auto_dismiss=False)

        self._popup.open()

    def action_btn_project_pref_pressed(self, *args):
        '''Event Handler when ActionButton "Project Prefences" is pressed.
        '''
        self.proj_settings = ProjectSettings(proj_loader=self.project_loader)
        self.proj_settings.load_proj_settings()
        self.proj_settings.bind(on_close=self._cancel_popup)
        self._popup = Popup(title="Project Preferences",
                            content=self.proj_settings,
                            size_hint=(None, None),
                            size=(600, 400),
                            auto_dismiss=False)

        self._popup.open()

    def action_btn_run_project_pressed(self, *args):
        '''Event Handler when ActionButton "Run" is pressed.
        '''
        if self.project_loader.file_list == []:
            return
        args = ''
        envs = ''

        python_path = self.designer_settings.config_parser.getdefault(
            'global', 'python_shell_path', '')

        if python_path == '':
            self.statusbar.show_message("Python Shell Path not specified,"
                                        " please specify it before running"
                                        " project")
            return

        if self.proj_settings and self.proj_settings.config_parser:
            args = self.proj_settings.config_parser.getdefault(
                'arguments', 'arg', '')
            envs = self.proj_settings.config_parser.getdefault(
                'env variables', 'env', '')
            for env in envs.split(' '):
                self.ui_creator.kivy_console.environment[
                    env[:env.find('=')]] = env[env.find('=') + 1:]

        for _file in self.project_loader.file_list:
            if 'main.py' in os.path.basename(_file):
                self.ui_creator.kivy_console.stdin.write(
                    '%s %s %s' % (python_path, _file, args))
                self.ui_creator.tab_pannel.switch_to(
                    self.ui_creator.tab_pannel.tab_list[2])
                return

        self.ui_creator.kivy_console.stdin.write(
            '%s %s %s' % (python_path, self.project_loader._app_file, args))

        self.ui_creator.tab_pannel.switch_to(
            self.ui_creator.tab_pannel.tab_list[2])

    def on_sandbox_getting_exception(self, *args):
        '''Event Handler for
           :class:`~designer.uix.designer_sandbox.DesignerSandbox`
           on_getting_exception event. This function will add exception
           string in error_console.
        '''

        s = traceback.format_list(
            traceback.extract_tb(self.ui_creator.playground.sandbox.tb))
        s = '\n'.join(s)
        to_insert = "Exception:\n" + s + '\n' + \
            "{!r}".format(self.ui_creator.playground.sandbox.exception)
        text = self.ui_creator.error_console.text + to_insert + '\n\n'
        self.ui_creator.error_console.text = text
        if self.ui_creator.playground.sandbox.error_active:
            self.ui_creator.tab_pannel.switch_to(
                self.ui_creator.tab_pannel.tab_list[0])

        self.ui_creator.playground.sandbox.error_active = False

    def action_btn_about_pressed(self, *args):
        '''Event handler for 'on_release' event of DesignerActionButton
           "About Kivy Designer"
        '''
        self.about_dlg = AboutDialog()
        self._popup = Popup(title='About Kivy Designer',
                            content=self.about_dlg,
                            size_hint=(None, None),
                            size=(600, 400),
                            auto_dismiss=False)
        self._popup.open()
        self.about_dlg.bind(on_cancel=self._cancel_popup)
コード例 #38
0
class SessionSettings(Screen):
    def __init__(self, screen_manager, game_inspector):
        super(SessionSettings, self).__init__(name='SessionSettings')
        self.pid_value = None
        self.game_inspector = game_inspector
        self.default_video_hotkey = 'shift+i'
        self.default_screenshot_hotkey = 'shift+o'
        self.default_fps_hotkey = 'shift+p'
        self.screen_manager = screen_manager
        self.layout = BoxLayout(orientation='horizontal')
        self.first_col = BoxLayout(orientation='vertical')
        self.second_col = BoxLayout(orientation='vertical')

        self.filebrowser = FileBrowser()
        self.filebrowser.bind(on_success=self.fbrowser_success,
                              on_canceled=self.fbrowser_canceled)
        self.first_col.add_widget(self.filebrowser)

        self.pid = TextInput(hint_text='PID e.g.13876 (without game overlay)',
                             size_hint=(1, 0.1))
        self.pid.bind(text=self.on_pid)
        self.second_col.add_widget(self.pid)

        self.process_path = TextInput(
            hint_text=
            'Path to Game e.g. D:\\Steam\\steamapps\\common\\Shadow of the Tomb Raider Trial\\SOTTR.exe (will enable game overlay)',
            size_hint=(1, 0.1))
        self.process_path.bind(text=self.on_path)
        self.second_col.add_widget(self.process_path)

        self.process_name = TextInput(
            hint_text=
            'Process Name to Monitor e.g. SOTTR.exe (will enable game overlay)',
            size_hint=(1, 0.1))
        self.process_name.bind(text=self.on_process_name)
        self.second_col.add_widget(self.process_name)

        self.steam_app_id = TextInput(
            size_hint=(1, 0.1),
            hint_text=
            'Optional: Steam App Id e.g 974630\nOnly for Steam Games and in case if you run it for the first time\nIt works only with Path to Game param\nhttps://steamdb.info/search/'
        )
        self.second_col.add_widget(self.steam_app_id)

        self.video_hotkey = TextInput(
            hint_text='Optional: video recording hotkey, default is %s' %
            self.default_video_hotkey,
            size_hint=(1, 0.1))
        self.second_col.add_widget(self.video_hotkey)

        self.screenshot_hotkey = TextInput(
            hint_text='Optional: screenshot hotkey, default is %s' %
            self.default_screenshot_hotkey,
            size_hint=(1, 0.1))
        self.second_col.add_widget(self.screenshot_hotkey)

        self.fps_hotkey = TextInput(
            hint_text='Optional: fps recording hotkey, default is %s' %
            self.default_fps_hotkey,
            size_hint=(1, 0.1))
        self.second_col.add_widget(self.fps_hotkey)

        self.start_button = Button(text='Run Session',
                                   font_size=20,
                                   size_hint=(1, 0.3))
        self.start_button.background_normal = ''
        self.start_button.background_color = [0.3, .4, .3, .85]
        self.start_button.bind(on_press=self.run_pressed)
        self.second_col.add_widget(self.start_button)

        self.layout.add_widget(self.first_col)
        self.layout.add_widget(self.second_col)

        self.add_widget(self.layout)

    def fbrowser_canceled(self, instance):
        self.process_path.text = ''

    def fbrowser_success(self, instance):
        self.process_path.text = str(instance.selection[0])

    def on_pid(self, instance, value):
        if value:
            self.process_path.text = ''
            self.process_name.text = ''
            self.steam_app_id.text = ''

    def on_path(self, instance, value):
        if value:
            self.pid.text = ''
            self.process_name.text = ''

    def on_process_name(self, instance, value):
        if value:
            self.pid.text = ''
            self.process_path.text = ''
            self.steam_app_id.text = ''

    def run_pressed(self, instance):
        try:
            screen_recorder.enable_log()
            fps_inspector.enable_fliprate_log()
            ready = True
            if self.pid.text:
                self.pid_value = int(self.pid.text)
                screen_recorder.init_resources(self.pid_value)
                self.game_inspector.config.pid = self.pid_value
                self.game_inspector.config.use_overlay = False
            elif self.process_path.text:
                game_overlay_sdk.injector.enable_monitor_logger()
                if self.steam_app_id.text:
                    game_overlay_sdk.injector.run_process(
                        self.process_path.text, '',
                        int(self.steam_app_id.text))
                else:
                    game_overlay_sdk.injector.run_process(
                        self.process_path.text, '', None)
                self.pid_value = game_overlay_sdk.injector.get_pid()
                screen_recorder.init_resources(self.pid_value)
                self.game_inspector.config.pid = self.pid_value
                self.game_inspector.config.use_overlay = True
            elif self.process_name.text:
                game_overlay_sdk.injector.enable_monitor_logger()
                game_overlay_sdk.injector.start_monitor(self.process_name.text)
                # wait for process creation
                Alert(title='Waiting for process with name %s' %
                      self.process_name.text,
                      text='now you need to start target process manually',
                      condition=self.check_pid)
            else:
                Alert(
                    title='Invalid input',
                    text=
                    'nor PID nor Process Name nor Process Path were specified')
                ready = False
            if ready:
                self.register_callbacks()
                self.screen_manager.current = 'GameInspector'
        except Exception as e:
            Alert(title='Excpetion occured', text=str(e))
            raise e

    def register_callbacks(self):
        if self.video_hotkey.text:
            video_hotkey = self.video_hotkey.text
        else:
            video_hotkey = self.default_video_hotkey
        if self.screenshot_hotkey.text:
            screenshot_hotkey = self.screenshot_hotkey.text
        else:
            screenshot_hotkey = self.default_screenshot_hotkey
        if self.fps_hotkey.text:
            fps_hotkey = self.fps_hotkey.text
        else:
            fps_hotkey = self.default_fps_hotkey

        keyboard.add_hotkey(video_hotkey, self.video_callback)
        keyboard.add_hotkey(screenshot_hotkey, self.screenshot_callback)
        keyboard.add_hotkey(fps_hotkey, self.fps_callback)

    def video_callback(self):
        self.game_inspector.config.start_video.trigger_action()

    def fps_callback(self):
        self.game_inspector.config.start_fps.trigger_action()

    def screenshot_callback(self):
        self.game_inspector.config.take_screen.trigger_action()

    def check_pid(self):
        try:
            self.pid_value = game_overlay_sdk.injector.get_pid()
            self.game_inspector.config.pid = self.pid_value
            self.game_inspector.config.use_overlay = True
            return True
        except game_overlay_sdk.injector.InjectionError as err:
            if err.exit_code != game_overlay_sdk.injector.CustomExitCodes.TARGET_PROCESS_IS_NOT_CREATED_ERROR.value:
                raise err
            else:
                return False
コード例 #39
0
    def __init__(self, screen_manager, game_inspector):
        super(SessionSettings, self).__init__(name='SessionSettings')
        self.pid_value = None
        self.game_inspector = game_inspector
        self.default_video_hotkey = 'shift+i'
        self.default_screenshot_hotkey = 'shift+o'
        self.default_fps_hotkey = 'shift+p'
        self.screen_manager = screen_manager
        self.layout = BoxLayout(orientation='horizontal')
        self.first_col = BoxLayout(orientation='vertical')
        self.second_col = BoxLayout(orientation='vertical')

        self.filebrowser = FileBrowser()
        self.filebrowser.bind(on_success=self.fbrowser_success,
                              on_canceled=self.fbrowser_canceled)
        self.first_col.add_widget(self.filebrowser)

        self.pid = TextInput(hint_text='PID e.g.13876 (without game overlay)',
                             size_hint=(1, 0.1))
        self.pid.bind(text=self.on_pid)
        self.second_col.add_widget(self.pid)

        self.process_path = TextInput(
            hint_text=
            'Path to Game e.g. D:\\Steam\\steamapps\\common\\Shadow of the Tomb Raider Trial\\SOTTR.exe (will enable game overlay)',
            size_hint=(1, 0.1))
        self.process_path.bind(text=self.on_path)
        self.second_col.add_widget(self.process_path)

        self.process_name = TextInput(
            hint_text=
            'Process Name to Monitor e.g. SOTTR.exe (will enable game overlay)',
            size_hint=(1, 0.1))
        self.process_name.bind(text=self.on_process_name)
        self.second_col.add_widget(self.process_name)

        self.steam_app_id = TextInput(
            size_hint=(1, 0.1),
            hint_text=
            'Optional: Steam App Id e.g 974630\nOnly for Steam Games and in case if you run it for the first time\nIt works only with Path to Game param\nhttps://steamdb.info/search/'
        )
        self.second_col.add_widget(self.steam_app_id)

        self.video_hotkey = TextInput(
            hint_text='Optional: video recording hotkey, default is %s' %
            self.default_video_hotkey,
            size_hint=(1, 0.1))
        self.second_col.add_widget(self.video_hotkey)

        self.screenshot_hotkey = TextInput(
            hint_text='Optional: screenshot hotkey, default is %s' %
            self.default_screenshot_hotkey,
            size_hint=(1, 0.1))
        self.second_col.add_widget(self.screenshot_hotkey)

        self.fps_hotkey = TextInput(
            hint_text='Optional: fps recording hotkey, default is %s' %
            self.default_fps_hotkey,
            size_hint=(1, 0.1))
        self.second_col.add_widget(self.fps_hotkey)

        self.start_button = Button(text='Run Session',
                                   font_size=20,
                                   size_hint=(1, 0.3))
        self.start_button.background_normal = ''
        self.start_button.background_color = [0.3, .4, .3, .85]
        self.start_button.bind(on_press=self.run_pressed)
        self.second_col.add_widget(self.start_button)

        self.layout.add_widget(self.first_col)
        self.layout.add_widget(self.second_col)

        self.add_widget(self.layout)
コード例 #40
0
	def __init__(self, **kwargs):
		super(MainScreen, self).__init__(**kwargs)

		#Main Methods
		def RunAnalysis():
			formatted = projectTextInput.text.split("[u'")[1]
			formatted = formatted.split("']")[0]
			pathForJArchitect = formatted
			print "\n\n" + "pathForJArchitect = "+ pathForJArchitect + "\n\n"
			formatted = formatted.split("\\")
			arrLength = len(formatted)
			#print formatted
			#print "\n\n"
			pathForMetrix = "..\\" + formatted[arrLength - 5] + "\\" + formatted[arrLength - 3]
			print "\n\n" + "pathForMetrix = "+ pathForMetrix + "\n\n"
			statusLabel.text = "Running Metrix++..."
			print "Running Metrix++..."
			L1 = get_metrix(pathForMetrix)

			statusLabel.text = "Running JArchitect..."
			print "Running JArchitect..."
			L2 = get_jarch_metrices(pathForJArchitect)

			statusLabel.text = "Parsing Data..."
			print "Parsing Data..."
			CombineAndExportData(L1, L2)

			statusLabel.text = "Analysis Complete!"
			print "Analysis Complete!"

		#Callback Methods
		def analyzeButtonCallback(instance):
			print('analyze button was pressed')
			self.current = 'Setup'
			
		def exitButtonCallback(instance):
			print('exit button was pressed')

		def browseInputButtonCallback(instance):
			print('browse button was pressed')
			self.current = 'inputscreen'

		def browseOutputButtonCallback(instance):
			self.current = 'outputscreen'

		def runButtonCallback(instance):
			self.current = 'status'
			RunAnalysis()

		def viewReportButtonCallback(instance):
			print "View Report Button Pressed"

		def fbrowser_canceled(instance):
			print 'cancelled, Close self.'

		def fbrowser_success(instance):
			projectTextInput.text = str(instance.selection)
			self.current = 'Setup'

		def outfbrowser_success(instance):
			outputPathTextInput.text = str(instance.selection)
			self.current = 'Setup'

		self.transition = NoTransition()

		#Labels
		welcomeLabel = Label(text='Clone Detective', halign='center', font_size=72, pos=(5, -10))

		#Buttons
		analyzeButton = Button(text='New Analysis', pos=(170, 100), font_size=14, size_hint = (.2,.1))
		analyzeButton.bind(on_press=analyzeButtonCallback)

		exitButton = Button(text='Exit', pos=(450, 100), font_size=14, size_hint = (.2,.1))
		exitButton.bind(on_press=exitButtonCallback)

		#Welcome screen
		layout = BoxLayout(orientation='vertical')
		layout2 = BoxLayout(orientation='horizontal')

		layout.add_widget(welcomeLabel)
		layout2.add_widget(analyzeButton)
		layout2.add_widget(exitButton)
		layout.add_widget(layout2)

		WelcomeScreen = Screen(name='Welcome')
		WelcomeScreen.add_widget(layout)

		#Setup screen
		#Main Layout for the setup screen
		mainSetupLayout = BoxLayout(orientation='vertical')

		#Layout that contains the widgets for the input project
		browseInputLabel = Label(text='Input Project', halign='center', valign='middle', font_size=24)#, pos=(5, -10))
		projectTextInput = TextInput(text="path to input project goes here")
		browseInputButton = Button(text='Browse', pos=(450, 100), font_size=14, size_hint = (.2,.1))
		browseInputButton.bind(on_press=browseInputButtonCallback)
		inputlayout = BoxLayout(orientation='horizontal')
		inputlayout.add_widget(browseInputLabel)
		inputlayout.add_widget(projectTextInput)
		inputlayout.add_widget(browseInputButton)

		"""#Layout that contains the widgets for the output project
		browseOutputLabel = Label(text='Output Folder', halign='center', valign='middle', font_size=24)
		outputPathTextInput = TextInput(text="path to where we will create the report .csv file")
		browseOutputButton = Button(text='Browse', pos=(450, 100), font_size=14, size_hint = (.2,.1))
		browseOutputButton.bind(on_press=browseOutputButtonCallback)
		outputlayout = BoxLayout(orientation='horizontal')
		outputlayout.add_widget(browseOutputLabel)
		outputlayout.add_widget(outputPathTextInput)
		outputlayout.add_widget(browseOutputButton)"""

		#Last but not least....the run button!
		runButton = Button(text='RUN', pos=(450, 100), font_size=14)
		runButton.bind(on_press=runButtonCallback)

		mainSetupLayout.add_widget(inputlayout)
		#mainSetupLayout.add_widget(outputlayout)
		mainSetupLayout.add_widget(runButton)

		#Add the mainSetupLayout to the Setup Screen
		SetupScreen = Screen(name='Setup')
		SetupScreen.add_widget(mainSetupLayout)


		#InputBrowserScreen
		if platform=='win':
			user_path = dirname(expanduser('~')) + sep + 'Documents'
		else:
			user_path = expanduser('~') + sep + 'Documents'

		InputBrowserScreen = Screen(name='inputscreen')
		inputFileBrowser = FileBrowser(select_string='Select', favorites=[(user_path, 'Documents')])
		inputFileBrowser.bind(on_success=fbrowser_success, on_canceled=fbrowser_canceled)
		InputBrowserScreen.add_widget(inputFileBrowser)

		OutputBrowserScreen = Screen(name='outputscreen')
		OutputFileBrowser = FileBrowser(select_string='Select', favorites=[(user_path, 'Documents')])
		OutputFileBrowser.bind(on_success=outfbrowser_success, on_canceled=fbrowser_canceled)
		OutputBrowserScreen.add_widget(OutputFileBrowser)

		#Status Screen
		statusLabel = Label(text='Starting Analysis....', halign='center', font_size=72, pos=(5, -10))	
		reportButton = Button(text='View Report', pos=(170, 100), font_size=14)
		reportButton.bind(on_press=viewReportButtonCallback)
		statusMainLayout = BoxLayout(orientation='vertical')
		statusSubLayout = BoxLayout(orientation='horizontal')

		statusMainLayout.add_widget(statusLabel)
		statusMainLayout.add_widget(reportButton)

		StatusScreen = Screen(name='status')
		StatusScreen.add_widget(statusMainLayout)

		#Add screens to the screen manager
		self.add_widget(WelcomeScreen)
		self.add_widget(SetupScreen)
		self.add_widget(StatusScreen)

		self.add_widget(InputBrowserScreen)
		self.add_widget(OutputBrowserScreen)

		#Set the initial screen
		self.current = 'Welcome'
コード例 #41
0
class HomeWidget(FloatLayout):

    def __init__(self, **kwargs):
        # make sure we aren't overriding any important functionality
        super(HomeWidget, self).__init__(**kwargs)
        with self.canvas:
            self.rect = Rectangle(pos=self.pos, size=self.size)
        self.bind(pos=self.update_rect)
        self.bind(size=self.update_rect)

        record_stud = Button(
            id="record_stud",
            size_hint=(0.3, 0.06),
            pos_hint={'center_x': .5, 'center_y': .6},
            text="Record the student",
            background_normal='',
            background_color=[0, 0, 0, 1]
        )

        self.add_widget(record_stud)
        self.add_widget(Button(
            size_hint=(0.4, 0.06),
            pos_hint={'center_x': .5, 'center_y': .8},
            text="Piano Performance Tracking",
            background_normal='',
            background_color=[0, 0, 0, 1]
        ))

        record_prof = Button(
            id="record_prof",
            size_hint=(0.35, 0.06),
            pos_hint={'center_x': .5, 'center_y': .5},
            text="Record the professional",
            background_normal='',
            background_color=[0, 0, 0, 1]
        )

        self.add_widget(record_prof)

        upload_stud = Button(
            id="upload_stud",
            size_hint=(0.4, 0.06),
            pos_hint={'center_x': .5, 'center_y': .4},
            text="Upload the student recording",
            background_normal='',
            background_color=[0, 0, 0, 1]
        )

        self.add_widget(upload_stud)

        upload_prof = Button(
            id="upload_prof",
            size_hint=(0.4, 0.06),
            pos_hint={'center_x': .5, 'center_y': .3},
            text="Upload the professional recording",
            background_normal='',
            background_color=[0, 0, 0, 1]
        )

        self.add_widget(upload_prof)

        process = Button(
            id="process",
            size_hint=(0.1, 0.06),
            pos_hint={'center_x': .5, 'center_y': .2},
            text="Process",
            background_normal='',
            background_color=[0.5, 0.5, 0.6, 0.7]
        )

        self.add_widget(process)

        quit = Button(
            id="quit",
            size_hint=(0.1, 0.06),
            pos_hint={'center_x': .9, 'center_y': .05},
            text="Quit",
            background_normal='',
            background_color=[0.5, 0.5, 0.6, 0.7]
        )

        process.bind(on_release=self.process_callback)
        quit.bind(on_release=self.quit_callback)
        upload_stud.bind(on_release=self.open_stud_file_btn_pressed)
        upload_prof.bind(on_release=self.open_prof_file_btn_pressed)
        record_stud.bind(on_release=self.bash_record_stud)
        record_prof.bind(on_release=self.bash_record_prof)

        self.add_widget(quit)

    def process_callback(self, instance):
        if stud_file == "" or prof_file == "":
            print("Select both files.")
            print(stud_file)
            print(prof_file)
        else:
            self.add_widget(
                process.ProcessWidget(
                    id="process",
                    stud=stud_file,
                    prof=prof_file,
                    size_hint=(1, 1),
                    pos_hint={'center_x': .5, 'center_y': .5})
            )

    def quit_callback(self, instance):
        for file in os.listdir(os.getcwd()):
            if file.endswith(".pyc"):
                os.remove(file)
        quit()

    def bash_record_stud(self, *args):
        global stud_file
        bash_record.record_stud()
        stud_file = 'stud.wav'

    def bash_record_prof(self, *args):
        global prof_file
        bash_record.record_prof()
        prof_file = 'prof.wav'

    def open_stud_file_btn_pressed(self, *args):
        user_path = os.getcwd()
        #user_path = '~/ece5725_final_project/demo' #CHANGE USER PATH OF DOWNLOADS 
        self._fbrowser = FileBrowser(select_string='Open', favorites=[
                                     (user_path, 'Documents')])
        self._fbrowser.bind(on_success=self._stud_file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()

    def open_prof_file_btn_pressed(self, *args):
        self._fbrowser = FileBrowser(select_string='Open')
        self._fbrowser.bind(on_success=self._prof_file_load,
                            on_canceled=self._cancel_popup)

        self._popup = Popup(title='Open File', content=self._fbrowser,
                            size_hint=(0.9, 0.9), auto_dismiss=False)

        self._popup.open()

    def _cancel_popup(self, instance):
        print('cancelled, Close self.')
        self._popup.dismiss()

    def _stud_file_load(self, instance):
        print("in stud file load")
        global stud_file
        stud_file = os.path.basename(instance.filename)
        print(stud_file)
        self._popup.dismiss()

    def _prof_file_load(self, instance):
        print("in prof file load")
        global prof_file
        prof_file = os.path.basename(instance.filename)
        print(prof_file)
        self._popup.dismiss()

    def update_rect(self, *kargs):
        self.rect.pos = self.pos
        self.rect.size = self.size