def __init__(self, entry, store, initial_value=None, parent=None, run_editor=None): """ :param entry: The entry that we should modify :param store: The store that will be used for database queries :param initial_value: Initial value for the entry :param parent: The parent that should be respected when running other dialogs """ super(QueryEntryGadget, self).__init__() self._current_obj = None self._parent = parent self._on_run_editor = run_editor self.entry = entry self.entry.set_mode(ENTRY_MODE_DATA) self.store = store # The filter that will be used. This is not really in the interface. # We will just use it to perform the search. self._filter = StringSearchFilter('') self._executer = QueryExecuter(self.store) self._executer.set_search_spec(self.SEARCH_SPEC) self._executer.set_filter_columns(self._filter, self.SEARCH_COLUMNS) self._last_operation = None self._source_id = None self._is_person = issubclass(self.ITEM_EDITOR, BasePersonRoleEditor) self._setup() self.set_value(initial_value, force=True)
def __init__(self, entry, store, initial_value=None, parent=None, run_editor=None, edit_button=None, info_button=None, search_clause=None): """ :param entry: The entry that we should modify :param store: The store that will be used for database queries :param initial_value: Initial value for the entry :param parent: The parent that should be respected when running other dialogs """ super(QueryEntryGadget, self).__init__() self._parent = parent self._on_run_editor = run_editor self._can_edit = False self._search_clause = search_clause self.entry = entry self.entry.set_mode(ENTRY_MODE_DATA) self.edit_button = edit_button self.info_button = info_button self.store = store # The filter that will be used. This is not really in the interface. # We will just use it to perform the search. self._filter = StringSearchFilter('') self._executer = QueryExecuter(self.store) self._executer.set_search_spec(self.search_spec) self._executer.set_filter_columns(self._filter, self.search_columns) self._last_operation = None self._source_id = None self._setup() self.set_value(initial_value, force=True)
def _setup_widgets(self): self._replace_widget() # Add the two buttons self.find_button = self._create_button(gtk.STOCK_FIND) self.edit_button = self._create_button(gtk.STOCK_NEW) can_edit = self._entry.get_editable() and self._entry.get_sensitive() self.find_button.set_sensitive(can_edit) self.find_button.set_tooltip_text(self.find_tooltip) self.edit_button.set_tooltip_text(self.new_tooltip) # the entry needs a completion to work in MODE_DATA self._completion = gtk.EntryCompletion() self._entry.set_completion(self._completion) self._entry.set_mode(ENTRY_MODE_DATA) initial_value = getattr(self._model, self._model_property) self.set_value(initial_value) # The filter that will be used. This is not really in the interface. We # will just use it to perform the search. self._filter = StringSearchFilter('') self._executer = QueryExecuter(self.store) self._executer.set_search_spec(self._search_class.search_spec) self._executer.set_filter_columns(self._filter, self._search_columns)
def _date_query(self, search_spec, column): sfilter = object() executer = QueryExecuter(self.store) executer.set_filter_columns(sfilter, [column]) executer.set_search_spec(search_spec) state = DateIntervalQueryState(filter=sfilter, start=self.start, end=self.end) return executer.search([state])
def _create_search(self): self.search = SearchSlave(self._get_columns(self.model.kind)) self.search.connect('result-item-activated', self._on_search__item_activated) self.search.enable_advanced_search() self.query = QueryExecuter(self.app.store) self.search.set_query_executer(self.query) self.search.set_result_view(FinancialSearchResults) self.result_view = self.search.result_view self.result_view.page = self tree_view = self.search.result_view.get_treeview() tree_view.set_rules_hint(True) tree_view.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_BOTH)
def setup_slaves(self): self.search = SearchSlave(self._get_columns(), restore_name=self.__class__.__name__) self.search.enable_advanced_search() self.attach_slave('place_holder', self.search) self.executer = QueryExecuter(self.store) self.search.set_query_executer(self.executer) self.executer.set_table(LoanView) self.executer.add_query_callback(self.get_extra_query) self._create_filters() self.search.results.connect('selection-changed', self._on_results_selection_changed) self.search.results.set_selection_mode(gtk.SELECTION_MULTIPLE) self.search.focus_search_entry()
def get_query_executer(self): """ Fetchs the QueryExecuter for the SearchContainer :returns: a querty executer :rtype: a :class:`QueryExecuter` subclass """ if self._query_executer is None: executer = QueryExecuter(self.store) if not self._lazy_search: executer.set_limit(sysparam.get_int('MAX_SEARCH_RESULTS')) if self._search_spec is not None: executer.set_search_spec(self._search_spec) self._query_executer = executer return self._query_executer
def _create_search(self): self.search = SearchSlave(self._get_columns(), restore_name=self.__class__.__name__) self.search.enable_advanced_search() self.attach_slave('searchbar_holder', self.search) self.executer = QueryExecuter(self.store) self.search.set_query_executer(self.executer) self.executer.set_table(PurchaseOrderView) self.executer.add_query_callback(self.get_extra_query) self._create_filters() self.search.results.connect('selection-changed', self._on_results__selection_changed) self.search.results.connect('row-activated', self._on_results__row_activated) self.search.focus_search_entry()
def __init__(self, store, search_table=None, hide_footer=True, title='', selection_mode=None, double_click_confirm=False): """ A base class for search dialog inheritance :param store: a store :param table: :param search_table: :param hide_footer: :param title: :param selection_mode: :param double_click_confirm: If double click a item in the list should automatically confirm """ self.store = store self.search_table = search_table or self.search_table if not self.search_table: raise ValueError("%r needs a search table" % self) self.selection_mode = self._setup_selection_mode(selection_mode) self.summary_label = None self.double_click_confirm = double_click_confirm BasicDialog.__init__(self, hide_footer=hide_footer, main_label_text=self.main_label_text, title=title or self.title, size=self.size) self.executer = QueryExecuter(store) # FIXME: Remove this limit, but we need to migrate all existing # searches to use lazy lists first. That in turn require # us to rewrite the queries in such a way that count(*) # will work properly. self.executer.set_limit(sysparam(self.store).MAX_SEARCH_RESULTS) self.set_table(self.search_table) self.enable_window_controls() self.disable_ok() self.set_ok_label(_('Se_lect Items')) self._setup_search() self._setup_details_slave() self.create_filters() self.setup_widgets() if self.search_label: self.set_searchbar_label(self.search_label)
def _create_search(self): # This does the first part of the search creation, # this need to be done here so that self.results is set when we # call GladeDelegate.__init__() self.executer = QueryExecuter(self.store) # FIXME: Remove this limit, but we need to migrate all existing # searches to use lazy lists first. That in turn require # us to rewrite the queries in such a way that count(*) # will work properly. self.executer.set_limit(sysparam(self.store).MAX_SEARCH_RESULTS) self.executer.set_table(self.search_table) self.search = SearchSlave(self.get_columns(), restore_name=self.__class__.__name__) self.search.enable_advanced_search() self.search.set_query_executer(self.executer) self.search.connect("search-completed", self._on_search__search_completed) self.results = self.search.result_view search_filter = self.search.get_primary_filter() search_filter.set_label(self.search_label)
def _setup_slaves(self): self.search = SearchSlave(self._get_columns(), restore_name=self.__class__.__name__) self.attach_slave('search_group_holder', self.search) executer = QueryExecuter(self.store) executer.set_table(QuotationView) self.search.set_query_executer(executer) self.search.set_text_field_columns(['supplier_name']) filter = self.search.get_primary_filter() filter.set_label(_(u'Supplier:')) self.search.focus_search_entry() self.search.results.connect('selection-changed', self._on_searchlist__selection_changed) self.search.results.connect('row-activated', self._on_searchlist__row_activated) date_filter = DateSearchFilter(_('Date:')) self.search.add_filter(date_filter, columns=['open_date', 'deadline']) self.edit_button.set_sensitive(False) self.remove_button.set_sensitive(False)
def _date_filter_query(self, search_spec, column): executer = QueryExecuter(self.store) executer.set_filter_columns(self.date_filter, [column]) executer.set_table(search_spec) return executer.search([self.date_filter.get_state()])
def setUp(self): DomainTest.setUp(self) self.qe = QueryExecuter(self.store) self.qe.set_search_spec(ClientCategory) self.sfilter = mock.Mock() self.qe.set_filter_columns(self.sfilter, ['name'])