Example #1
0
    def cut_items(self, no_confirm=False):
        if core_api.block_databases():
            # get_tree_selections() arguments must be compatible with the
            # ones used in self.delete_items()
            selection = wxgui_api.get_tree_selections(self.filename,
                                                none=False, descendants=True)

            if selection:
                items = []

                for item in selection:
                    id_ = wxgui_api.get_tree_item_id(self.filename, item)

                    if not wxgui_api.close_editor(self.filename, id_,
                                    ask='quiet' if no_confirm else 'discard'):
                        core_api.release_databases()
                        return False

                    items.append(id_)

                copypaste_api.copy_items(self.filename, items)

                wxgui_api.delete_items(self.filename, items,
                                description='Cut {} items'.format(len(items)))
                wxgui_api.refresh_history(self.filename)
                cut_items_event.signal()

            core_api.release_databases()
Example #2
0
 def _activate_occurrences_block(self, time, occsd):
     # It's important that the databases are blocked on this thread, and not
     # on the search thread, otherwise the program would hang if some
     # occurrences are activated while the user is performing an action
     core_api.block_databases(block=True)
     self._activate_occurrences(time, occsd)
     core_api.release_databases()
Example #3
0
def move_item():
    if _select_database():
        if _select_items(False):
            c = random.randint(0, 2)
            if c == 0:
                log.debug('Simulate move item up')
                # Databases are blocked in simulator._do_action
                core_api.release_databases()
                wxgui_api.simulate_move_item_up()
            elif c == 1:
                log.debug('Simulate move item down')
                # Databases are blocked in simulator._do_action
                core_api.release_databases()
                wxgui_api.simulate_move_item_down()
            else:
                log.debug('Simulate move item to parent')
                # Databases are blocked in simulator._do_action
                core_api.release_databases()
                wxgui_api.simulate_move_item_to_parent()
        else:
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            return False
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #4
0
    def dismiss(self, event):
        if core_api.block_databases():
            organism_alarms_api.dismiss_alarms({self.filename: {self.id_:
                                                            [self.alarmid, ]}})
            # Let the alarm off event close the alarm

            core_api.release_databases()
Example #5
0
 def _activate_occurrences_block(self, time, occsd):
     # It's important that the databases are blocked on this thread, and not
     # on the search thread, otherwise the program would hang if some
     # occurrences are activated while the user is performing an action
     core_api.block_databases(block=True)
     self._activate_occurrences(time, occsd)
     core_api.release_databases()
Example #6
0
    def _continue(self):
        # It's important that the databases are blocked on this thread, and not
        # on the main thread, otherwise the program would hang if some
        # occurrences are activated while the user is performing an action
        core_api.block_databases(block=True)
        search_old_occurrences_event.signal(filename=self.filename,
                                                    last_search=self.exclmint)
        self.state = 0

        while self.state < 1:
            self.search = organism_api.get_occurrences_range(
                                        mint=self.exclmint, maxt=self.whileago,
                                        filenames=(self.filename, ))
            self.state = 2

            # Make sure to bind *after* self.search is instantiated and
            # self.state is set to 2, but *before* it's started
            core_api.bind_to_closing_database(self._handle_closing_database)

            self.search.start()

        if self.state == 1:
            self._abort()
        else:
            self._process_results()

        core_api.release_databases()
Example #7
0
    def _continue(self):
        # It's important that the databases are blocked on this thread, and not
        # on the main thread, otherwise the program would hang if some
        # occurrences are activated while the user is performing an action
        core_api.block_databases(block=True)
        search_old_occurrences_event.signal(filename=self.filename,
                                                    last_search=self.exclmint)
        self.state = 0

        while self.state < 1:
            self.search = organism_api.get_occurrences_range(
                                        mint=self.exclmint, maxt=self.whileago,
                                        filenames=(self.filename, ))
            self.state = 2

            # Make sure to bind *after* self.search is instantiated and
            # self.state is set to 2, but *before* it's started
            core_api.bind_to_closing_database(self._handle_closing_database)

            self.search.start()

        if self.state == 1:
            self._abort()
        else:
            self._process_results()

        core_api.release_databases()
Example #8
0
    def snooze(self, event):
        if core_api.block_databases():
            organism_alarms_api.snooze_alarms({self.filename: {self.id_:
                    [self.alarmid, ]}}, stime=self.awindow.get_snooze_time())
            # Let the alarm off event close the alarm

            core_api.release_databases()
Example #9
0
    def _handle_page_closing(self, event):
        # Veto the event, page deletion is managed explicitly later
        event.Veto()

        if core_api.block_databases():
            self.GetCurrentPage().close_tab()
            core_api.release_databases()
Example #10
0
    def dismiss_all(self, event):
        if core_api.block_databases():
            organism_alarms_api.dismiss_alarms(
                                        self._get_shown_alarms_dictionary())
            # Let the alarm off event close the alarms

            core_api.release_databases()
Example #11
0
    def create_sibling(self):
        if core_api.block_databases():
            # Do not use none=False in order to allow the creation of the
            # first item
            selection = self.get_selections(many=False)

            # If multiple items are selected, selection will be False
            if selection is not False:
                text = 'New item'

                if len(selection) > 0:
                    previd = self.get_item_id(selection[0])
                    parid = core_api.get_item_parent(self.filename, previd)

                    id_ = core_api.create_sibling(filename=self.filename,
                                parent=parid, previous=previd,
                                text=text, description='Insert item')
                else:
                    id_ = core_api.create_child(filename=self.filename,
                                                parent=0, text=text,
                                                description='Insert item')

                self.select_item(id_)
                self.dbhistory.refresh()

            core_api.release_databases()
Example #12
0
    def paste_items_as_siblings(self, no_confirm=False):
        if core_api.block_databases():
            if no_confirm or copypaste_api.can_paste_safely(self.filename) or \
                    msgboxes.unsafe_paste_confirm().ShowModal() == wx.ID_OK:
                # Do not use none=False in order to allow pasting in an empty
                # database
                selection = wxgui_api.get_tree_selections(self.filename,
                                                          many=False)

                # If multiple items are selected, selection will be False
                if selection is not False:
                    if len(selection) > 0:
                        baseid = wxgui_api.get_tree_item_id(
                            self.filename, selection[0])

                        roots, ids = copypaste_api.paste_items_as_siblings(
                            self.filename, baseid, description='Paste items')
                    else:
                        roots, ids = copypaste_api.paste_items_as_children(
                            self.filename, 0, description='Paste items')

                    wxgui_api.refresh_history(self.filename)

                    items_pasted_event.signal(filename=self.filename,
                                              roots=roots,
                                              ids=ids)

            core_api.release_databases()
Example #13
0
    def move_item_to_parent(self):
        if core_api.block_databases():
            selection = self.get_selections(none=False, many=False)

            if selection:
                item = selection[0]
                id_ = self.get_item_id(item)
                oldpid = core_api.get_item_parent(self.filename, id_)

                if core_api.move_item_to_parent(self.filename, id_,
                                        description='Move item to parent'):

                    newpid = core_api.get_item_parent(self.filename, id_)

                    # oldpid cannot be 0 here because
                    # core_api.move_item_to_parent succeded, which means that
                    # it wasn't the root item
                    oldparent = self.get_tree_item(oldpid)
                    newparent = self.get_tree_item_safe(newpid)

                    self.dvmodel.ItemDeleted(oldparent, item)
                    self.dvmodel.ItemAdded(newparent, item)
                    self._reset_children(id_, item)
                    self._refresh_item_arrow(newparent, oldpid, oldparent)
                    self.select_item(id_)
                    self.dbhistory.refresh()

            core_api.release_databases()
Example #14
0
def move_item():
    if _select_database():
        if _select_items(False):
            c = random.randint(0, 2)
            if c == 0:
                log.debug('Simulate move item up')
                # Databases are blocked in simulator._do_action
                core_api.release_databases()
                wxgui_api.simulate_move_item_up()
            elif c == 1:
                log.debug('Simulate move item down')
                # Databases are blocked in simulator._do_action
                core_api.release_databases()
                wxgui_api.simulate_move_item_down()
            else:
                log.debug('Simulate move item to parent')
                # Databases are blocked in simulator._do_action
                core_api.release_databases()
                wxgui_api.simulate_move_item_to_parent()
        else:
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            return False
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #15
0
    def dismiss(self, event):
        if core_api.block_databases():
            organism_alarms_api.dismiss_alarms({self.filename: {self.id_:
                                                            [self.alarmid, ]}})
            # Let the alarm off event close the alarm

            core_api.release_databases()
Example #16
0
    def snooze(self, event):
        if core_api.block_databases():
            organism_alarms_api.snooze_alarms({self.filename: {self.id_:
                    [self.alarmid, ]}}, stime=self.awindow.get_snooze_time())
            # Let the alarm off event close the alarm

            core_api.release_databases()
Example #17
0
    def cut_items(self, no_confirm=False):
        if core_api.block_databases():
            # get_tree_selections() arguments must be compatible with the
            # ones used in self.delete_items()
            selection = wxgui_api.get_tree_selections(self.filename,
                                                      none=False,
                                                      descendants=True)

            if selection:
                items = []

                for item in selection:
                    id_ = wxgui_api.get_tree_item_id(self.filename, item)

                    if not wxgui_api.close_editor(
                            self.filename,
                            id_,
                            ask='quiet' if no_confirm else 'discard'):
                        core_api.release_databases()
                        return False

                    items.append(id_)

                copypaste_api.copy_items(self.filename, items)

                wxgui_api.delete_items(self.filename,
                                       items,
                                       description='Cut {} items'.format(
                                           len(items)))
                wxgui_api.refresh_history(self.filename)
                cut_items_event.signal()

            core_api.release_databases()
Example #18
0
    def dismiss_all(self, event):
        if core_api.block_databases():
            organism_alarms_api.dismiss_alarms(
                                        self._get_shown_alarms_dictionary())
            # Let the alarm off event close the alarms

            core_api.release_databases()
Example #19
0
    def create_sibling(self):
        if core_api.block_databases():
            # Do not use none=False in order to allow the creation of the
            # first item
            selection = self.get_selections(many=False)

            # If multiple items are selected, selection will be False
            if selection is not False:
                text = 'New item'

                if len(selection) > 0:
                    previd = self.get_item_id(selection[0])
                    parid = core_api.get_item_parent(self.filename, previd)

                    id_ = core_api.create_sibling(filename=self.filename,
                                parent=parid, previous=previd,
                                text=text, description='Insert item')
                else:
                    id_ = core_api.create_child(filename=self.filename,
                                                parent=0, text=text,
                                                description='Insert item')

                self.select_item(id_)
                self.dbhistory.refresh()

            core_api.release_databases()
Example #20
0
    def move_item_to_parent(self):
        if core_api.block_databases():
            selection = self.get_selections(none=False, many=False)

            if selection:
                item = selection[0]
                id_ = self.get_item_id(item)
                oldpid = core_api.get_item_parent(self.filename, id_)

                if core_api.move_item_to_parent(self.filename, id_,
                                        description='Move item to parent'):

                    newpid = core_api.get_item_parent(self.filename, id_)

                    # oldpid cannot be 0 here because
                    # core_api.move_item_to_parent succeded, which means that
                    # it wasn't the root item
                    oldparent = self.get_tree_item(oldpid)
                    newparent = self.get_tree_item_safe(newpid)

                    self.dvmodel.ItemDeleted(oldparent, item)
                    self.dvmodel.ItemAdded(newparent, item)
                    self._reset_children(id_, item)
                    self._refresh_item_arrow(newparent, oldpid, oldparent)
                    self.select_item(id_)
                    self.dbhistory.refresh()

            core_api.release_databases()
Example #21
0
    def paste_items_as_siblings(self, no_confirm=False):
        if core_api.block_databases():
            if no_confirm or copypaste_api.can_paste_safely(self.filename) or \
                    msgboxes.unsafe_paste_confirm().ShowModal() == wx.ID_OK:
                # Do not use none=False in order to allow pasting in an empty
                # database
                selection = wxgui_api.get_tree_selections(self.filename,
                                                                    many=False)

                # If multiple items are selected, selection will be False
                if selection is not False:
                    if len(selection) > 0:
                        baseid = wxgui_api.get_tree_item_id(self.filename,
                                                                selection[0])

                        roots, ids = copypaste_api.paste_items_as_siblings(
                            self.filename, baseid, description='Paste items')
                    else:
                        roots, ids = copypaste_api.paste_items_as_children(
                                self.filename, 0, description='Paste items')

                    wxgui_api.refresh_history(self.filename)

                    items_pasted_event.signal(filename=self.filename,
                                                        roots=roots, ids=ids)

            core_api.release_databases()
Example #22
0
    def delete_selected_items(self, no_confirm=False):
        if core_api.block_databases():
            selection = self.get_selections(none=False, descendants=True)

            if selection:
                items = []

                for item in selection:
                    id_ = self.get_item_id(item)
                    tab = editor.Editor.make_tabid(self.filename, id_)

                    if tab in editor.tabs and not editor.tabs[tab].close(
                            'quiet' if no_confirm else 'discard'):
                        core_api.release_databases()
                        return False

                    items.append(id_)

                self.delete_items(items,
                                  description='Delete {} items'.format(
                                      len(items)))
                self.dbhistory.refresh()
                delete_items_event.signal()

            core_api.release_databases()
Example #23
0
    def snooze_all(self, event):
        if core_api.block_databases():
            organism_alarms_api.snooze_alarms(
                                        self._get_shown_alarms_dictionary(),
                                        stime=self.get_snooze_time())
            # Let the alarm off event close the alarms

            core_api.release_databases()
Example #24
0
    def snooze_all(self, event):
        if core_api.block_databases():
            organism_alarms_api.snooze_alarms(
                                        self._get_shown_alarms_dictionary(),
                                        stime=self.get_snooze_time())
            # Let the alarm off event close the alarms

            core_api.release_databases()
Example #25
0
    def _handle_page_closing(self, event):
        # Veto the event, page deletion is managed explicitly later
        event.Veto()

        if core_api.block_databases():
            page = self.GetCurrentPage()
            databases.close_database(page.get_filename())
            core_api.release_databases()
Example #26
0
def redo_database_history():
    if _select_database():
        log.debug('Simulate redo history')
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        wxgui_api.simulate_redo_tree(no_confirm=True)
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #27
0
def redo_database_history():
    if _select_database():
        log.debug('Simulate redo history')
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        wxgui_api.simulate_redo_tree(no_confirm=True)
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #28
0
    def populate_tree(self, event):
        if core_api.block_databases():
            filename = wxgui_api.get_selected_database_filename()

            # This method may be launched even if no database is open
            if filename:
                group = core_api.get_next_history_group(filename)
                description = 'Populate tree'
                i = 0

                while i < 10:
                    dbitems = core_api.get_items_ids(filename)

                    try:
                        itemid = random.choice(dbitems)
                    except IndexError:
                        # No items in the database yet
                        itemid = 0
                        mode = 'child'
                    else:
                        mode = random.choice(('child', 'sibling'))

                        # See the comment in wxgui.tree.expand_item_ancestors
                        #  for the reason why calling this method is necessary
                        wxgui_api.expand_item_ancestors(filename, itemid)


                    text = self._populate_tree_text()

                    id_ = self._populate_tree_item(mode, filename, itemid,
                                                    group, text, description)

                    # It should also be checked if the database supports
                    #  organism_basicrules (bug #330)
                    if organism_api and wxscheduler_basicrules_api and \
                            filename in \
                            organism_api.get_supported_open_databases():
                        self._populate_tree_rules(filename, id_, group,
                                                            description)

                    if links_api and wxlinks_api and len(dbitems) > 0 and \
                                    filename in \
                                    links_api.get_supported_open_databases():
                        self._populate_tree_link(filename, id_, dbitems, group,
                                                                description)

                    i += 1

                wxgui_api.refresh_history(filename)
            core_api.release_databases()
Example #29
0
    def populate_tree(self, event):
        if core_api.block_databases():
            filename = wxgui_api.get_selected_database_filename()

            # This method may be launched even if no database is open
            if filename:
                group = core_api.get_next_history_group(filename)
                description = 'Populate tree'
                i = 0

                while i < 10:
                    dbitems = core_api.get_items_ids(filename)

                    try:
                        itemid = random.choice(dbitems)
                    except IndexError:
                        # No items in the database yet
                        itemid = 0
                        mode = 'child'
                    else:
                        mode = random.choice(('child', 'sibling'))

                        # See the comment in wxgui.tree.expand_item_ancestors
                        #  for the reason why calling this method is necessary
                        wxgui_api.expand_item_ancestors(filename, itemid)

                    text = self._populate_tree_text()

                    id_ = self._populate_tree_item(mode, filename, itemid,
                                                   group, text, description)

                    # It should also be checked if the database supports
                    #  organism_basicrules (bug #330)
                    if organism_api and wxscheduler_basicrules_api and \
                            filename in \
                            organism_api.get_supported_open_databases():
                        self._populate_tree_rules(filename, id_, group,
                                                  description)

                    if links_api and wxlinks_api and len(dbitems) > 0 and \
                                    filename in \
                                    links_api.get_supported_open_databases():
                        self._populate_tree_link(filename, id_, dbitems, group,
                                                 description)

                    i += 1

                wxgui_api.refresh_history(filename)
            core_api.release_databases()
Example #30
0
    def create_child(self):
        if core_api.block_databases():
            selection = self.get_selections(none=False, many=False)

            if selection:
                pid = self.get_item_id(selection[0])

                id_ = core_api.create_child(filename=self.filename,
                                            parent=pid, text='New item',
                                            description='Insert sub-item')

                self.select_item(id_)
                self.dbhistory.refresh()

            core_api.release_databases()
Example #31
0
    def create_child(self):
        if core_api.block_databases():
            selection = self.get_selections(none=False, many=False)

            if selection:
                pid = self.get_item_id(selection[0])

                id_ = core_api.create_child(filename=self.filename,
                                            parent=pid, text='New item',
                                            description='Insert sub-item')

                self.select_item(id_)
                self.dbhistory.refresh()

            core_api.release_databases()
Example #32
0
    def move_item_down(self):
        if core_api.block_databases():
            selection = self.get_selections(none=False, many=False)

            if selection:
                item = selection[0]
                id_ = self.get_item_id(item)

                if core_api.move_item_down(self.filename, id_,
                                            description='Move item down'):
                    self._move_item(id_, item)
                    self.select_item(id_)
                    self.dbhistory.refresh()

            core_api.release_databases()
Example #33
0
    def copy_items(self):
        if core_api.block_databases():
            # get_tree_selections() arguments must be compatible with the
            # ones used in self.delete_items()
            selection = wxgui_api.get_tree_selections(self.filename, none=False, descendants=True)

            if selection:
                items = []

                for item in selection:
                    items.append(wxgui_api.get_tree_item_id(self.filename, item))

                copypaste_api.copy_items(self.filename, items)

            core_api.release_databases()
Example #34
0
    def move_item_down(self):
        if core_api.block_databases():
            selection = self.get_selections(none=False, many=False)

            if selection:
                item = selection[0]
                id_ = self.get_item_id(item)

                if core_api.move_item_down(self.filename, id_,
                                            description='Move item down'):
                    self._move_item(id_, item)
                    self.select_item(id_)
                    self.dbhistory.refresh()

            core_api.release_databases()
Example #35
0
    def redo(self, no_confirm=False):
        if core_api.block_databases():
            read = core_api.preview_redo_tree(self.filename)

            if read:
                for id_ in read:
                    item = editor.Editor.make_tabid(self.filename, id_)

                    if item in editor.tabs and not editor.tabs[item].close(
                                    ask='quiet' if no_confirm else 'discard'):
                        break
                else:
                    core_api.redo_tree(self.filename)
                    self.dbhistory.refresh()
                    redo_tree_event.signal(filename=self.filename)

            core_api.release_databases()
Example #36
0
    def redo(self, no_confirm=False):
        if core_api.block_databases():
            read = core_api.preview_redo_tree(self.filename)

            if read:
                for id_ in read:
                    item = editor.Editor.make_tabid(self.filename, id_)

                    if item in editor.tabs and not editor.tabs[item].close(
                                    ask='quiet' if no_confirm else 'discard'):
                        break
                else:
                    core_api.redo_tree(self.filename)
                    self.dbhistory.refresh()
                    redo_tree_event.signal(filename=self.filename)

            core_api.release_databases()
Example #37
0
def edit_editor_text():
    if _select_editor():
        text = ''
        words = ('the quick brown fox jumps over the lazy dog ' * 6).split()
        seps = ' ' * 6 + '\n'
        for x in xrange(random.randint(10, 100)):
            words.append(str(random.randint(0, 100)))
            text = ''.join((text, random.choice(words), random.choice(seps)))
        text = ''.join((text, random.choice(words))).capitalize()

        log.debug('Simulate replace editor text')
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        wxgui_api.simulate_replace_editor_text(text)
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #38
0
    def paste_items_as_children(self, no_confirm=False):
        if core_api.block_databases():
            selection = wxgui_api.get_tree_selections(self.filename, none=False, many=False)

            if selection and (
                no_confirm
                or copypaste_api.can_paste_safely(self.filename)
                or msgboxes.unsafe_paste_confirm().ShowModal() == wx.ID_OK
            ):
                baseid = wxgui_api.get_tree_item_id(self.filename, selection[0])

                roots, ids = copypaste_api.paste_items_as_children(self.filename, baseid, description="Paste sub-items")

                wxgui_api.refresh_history(self.filename)

                items_pasted_event.signal(filename=self.filename, roots=roots, ids=ids)

            core_api.release_databases()
Example #39
0
    def copy_items(self):
        if core_api.block_databases():
            # get_tree_selections() arguments must be compatible with the
            # ones used in self.delete_items()
            selection = wxgui_api.get_tree_selections(self.filename,
                                                      none=False,
                                                      descendants=True)

            if selection:
                items = []

                for item in selection:
                    items.append(
                        wxgui_api.get_tree_item_id(self.filename, item))

                copypaste_api.copy_items(self.filename, items)

            core_api.release_databases()
Example #40
0
    def _finish_search_restart(self):
        self._set_tab_icon_ongoing()

        string = self.filters.text.GetValue()
        self._set_title(string)

        if not self.filters.option4.GetValue():
            string = re.escape(string)

        self.results.reset()
        self.search_threaded_action = self._search_threaded_continue
        self.finish_search_action = self._finish_search_dummy

        flags = re.MULTILINE

        if not self.filters.option5.GetValue():
            flags |= re.IGNORECASE

        try:
            regexp = re.compile(string, flags)
        except re.error:
            msgboxes.bad_regular_expression().ShowModal()
            self.finish_search()
        else:
            # Note that the databases are released *before* the threads are
            # terminated: this is safe as no more calls to the databases are
            # made after core_api.get_all_items_text in
            # self._finish_search_restart_database
            if core_api.block_databases():
                if self.filters.option1.GetValue():
                    filename = wxgui_api.get_selected_database_filename()
                    self._finish_search_restart_database(filename, regexp)
                else:
                    for filename in core_api.get_open_databases():
                        self._finish_search_restart_database(filename, regexp)

                # Note that the databases are released *before* the threads are
                # terminated: this is safe as no more calls to the databases
                # are made after core_api.get_all_items_text in
                # self._finish_search_restart_database
                core_api.release_databases()
            else:
                self.finish_search()
Example #41
0
    def _finish_search_restart(self):
        self._set_tab_icon_ongoing()

        string = self.filters.text.GetValue()
        self._set_title(string)

        if not self.filters.option4.GetValue():
            string = re.escape(string)

        self.results.reset()
        self.search_threaded_action = self._search_threaded_continue
        self.finish_search_action = self._finish_search_dummy

        flags = re.MULTILINE

        if not self.filters.option5.GetValue():
            flags |= re.IGNORECASE

        try:
            regexp = re.compile(string, flags)
        except re.error:
            msgboxes.bad_regular_expression().ShowModal()
            self.finish_search()
        else:
            # Note that the databases are released *before* the threads are
            # terminated: this is safe as no more calls to the databases are
            # made after core_api.get_all_items_text in
            # self._finish_search_restart_database
            if core_api.block_databases():
                if self.filters.option1.GetValue():
                    filename = wxgui_api.get_selected_database_filename()
                    self._finish_search_restart_database(filename, regexp)
                else:
                    for filename in core_api.get_open_databases():
                        self._finish_search_restart_database(filename, regexp)

                # Note that the databases are released *before* the threads are
                # terminated: this is safe as no more calls to the databases
                # are made after core_api.get_all_items_text in
                # self._finish_search_restart_database
                core_api.release_databases()
            else:
                self.finish_search()
Example #42
0
def open_database():
    testfilesd = coreaux_api.get_plugin_configuration('wxdevelopment')(
                                                                'TestFiles')
    testfiles = [os.path.expanduser(testfilesd[key]) for key in testfilesd]
    random.shuffle(testfiles)

    while testfiles:
        filename = testfiles.pop()
        if not core_api.is_database_open(filename) and \
                                                    os.path.isfile(filename):
            log.debug('Simulate open database')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_open_database(filename)
            break
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #43
0
def open_database():
    testfilesd = coreaux_api.get_plugin_configuration('wxdevelopment')(
        'TestFiles')
    testfiles = [os.path.expanduser(testfilesd[key]) for key in testfilesd]
    random.shuffle(testfiles)

    while testfiles:
        filename = testfiles.pop()
        if not core_api.is_database_open(filename) and \
                                                    os.path.isfile(filename):
            log.debug('Simulate open database')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_open_database(filename)
            break
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #44
0
def edit_editor_text():
    if _select_editor():
        text = ''
        words = ('the quick brown fox jumps over the lazy dog ' * 6).split()
        seps = ' ' * 6 + '\n'
        for x in xrange(random.randint(10, 100)):
            words.append(str(random.randint(0, 100)))
            text = ''.join((text, random.choice(words),
                            random.choice(seps)))
        text = ''.join((text, random.choice(words))).capitalize()

        log.debug('Simulate replace editor text')
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        wxgui_api.simulate_replace_editor_text(text)
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #45
0
    def paste_items_as_children(self, no_confirm=False):
        if core_api.block_databases():
            selection = wxgui_api.get_tree_selections(self.filename,
                                                      none=False,
                                                      many=False)

            if selection and (no_confirm
                              or copypaste_api.can_paste_safely(self.filename)
                              or msgboxes.unsafe_paste_confirm().ShowModal()
                              == wx.ID_OK):
                baseid = wxgui_api.get_tree_item_id(self.filename,
                                                    selection[0])

                roots, ids = copypaste_api.paste_items_as_children(
                    self.filename, baseid, description='Paste sub-items')

                wxgui_api.refresh_history(self.filename)

                items_pasted_event.signal(filename=self.filename,
                                          roots=roots,
                                          ids=ids)

            core_api.release_databases()
Example #46
0
def create_database():
    testfilesd = coreaux_api.get_plugin_configuration('wxdevelopment')(
        'TestFiles')
    testfiles = [os.path.expanduser(testfilesd[key]) for key in testfilesd]
    random.shuffle(testfiles)

    while testfiles:
        filename = testfiles.pop()
        if not core_api.is_database_open(filename):
            try:
                os.remove(filename)
            except OSError:
                # filename doesn't exist yet
                pass

            log.debug('Simulate create database')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_create_database(filename)
            break
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #47
0
def create_database():
    testfilesd = coreaux_api.get_plugin_configuration('wxdevelopment')(
                                                                'TestFiles')
    testfiles = [os.path.expanduser(testfilesd[key]) for key in testfilesd]
    random.shuffle(testfiles)

    while testfiles:
        filename = testfiles.pop()
        if not core_api.is_database_open(filename):
            try:
                os.remove(filename)
            except OSError:
                # filename doesn't exist yet
                pass

            log.debug('Simulate create database')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_create_database(filename)
            break
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #48
0
    def delete_selected_items(self, no_confirm=False):
        if core_api.block_databases():
            selection = self.get_selections(none=False, descendants=True)

            if selection:
                items = []

                for item in selection:
                    id_ = self.get_item_id(item)
                    tab = editor.Editor.make_tabid(self.filename, id_)

                    if tab in editor.tabs and not editor.tabs[tab].close(
                                    'quiet' if no_confirm else 'discard'):
                        core_api.release_databases()
                        return False

                    items.append(id_)

                self.delete_items(items,
                        description='Delete {} items'.format(len(items)))
                self.dbhistory.refresh()
                delete_items_event.signal()

            core_api.release_databases()
Example #49
0
def delete_items():
    if _select_database():
        if _select_items(True):
            log.debug('Simulate delete items')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_delete_items(no_confirm=True)
        else:
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            return False
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #50
0
def edit_item():
    if _select_database():
        if _select_items(False):
            log.debug('Simulate edit item')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_edit_item()
        else:
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            return False
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #51
0
def copy_items():
    if wxcopypaste_api and _select_database():
        if _select_items(True):
            log.debug('Simulate copy items')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxcopypaste_api.simulate_copy_items()
        else:
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            return False
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #52
0
def copy_items():
    if wxcopypaste_api and _select_database():
        if _select_items(True):
            log.debug('Simulate copy items')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxcopypaste_api.simulate_copy_items()
        else:
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            return False
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #53
0
def delete_items():
    if _select_database():
        if _select_items(True):
            log.debug('Simulate delete items')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_delete_items(no_confirm=True)
        else:
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            return False
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #54
0
def edit_item():
    if _select_database():
        if _select_items(False):
            log.debug('Simulate edit item')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_edit_item()
        else:
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            return False
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #55
0
def apply_editor():
    if _select_editor():
        if random.randint(0, 9) < 9:
            log.debug('Simulate apply editor')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_apply_editor()
        else:
            log.debug('Simulate apply all editors')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_apply_all_editors()
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #56
0
def apply_editor():
    if _select_editor():
        if random.randint(0, 9) < 9:
            log.debug('Simulate apply editor')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_apply_editor()
        else:
            log.debug('Simulate apply all editors')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_apply_all_editors()
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #57
0
def save_database():
    if _select_database():
        if random.randint(0, 9) < 9:
            log.debug('Simulate save database')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_save_database()
        else:
            log.debug('Simulate save all databases')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_save_all_databases()
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False
Example #58
0
def save_database():
    if _select_database():
        if random.randint(0, 9) < 9:
            log.debug('Simulate save database')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_save_database()
        else:
            log.debug('Simulate save all databases')
            # Databases are blocked in simulator._do_action
            core_api.release_databases()
            wxgui_api.simulate_save_all_databases()
    else:
        # Databases are blocked in simulator._do_action
        core_api.release_databases()
        return False