Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 40 additions & 12 deletions newprinter.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ def __init__(self):
"ntbkPPDSource",
"rbtnNPPPD",
"tvNPMakes",
"entryNPModelsSearch",
"rbtnNPFoomatic",
"filechooserPPD",
"rbtnNPDownloadableDriverSearch",
Expand Down Expand Up @@ -394,6 +395,13 @@ def __init__(self):
treeview.append_column(column)
treeview.get_selection().set_mode(selection_mode)

# Set up filter for Models list
self.models_liststore = self.tvNPModels.get_model()
self.models_filter = self.models_liststore.filter_new()
self.models_filter.set_visible_func(self.models_visible_func)
self.tvNPModels.set_model(self.models_filter)
self.entryNPModelsSearch.connect("changed", self.on_entryNPModelsSearch_changed)

# Since some dialogs are reused we can't let the delete-event's
# default handler destroy them
self.SMBBrowseDialog.connect ("delete-event", on_delete_just_hide)
Expand Down Expand Up @@ -1356,11 +1364,12 @@ def _handlePrinterInstallationMode (self, step):
# is available, based on the model the user has
# selected.
try:
model, iter = self.tvNPModels.get_selection ().\
get_selected ()
name = model.get(iter, 0)[0]
name = self.makeNameUnique (name)
self.entNPName.set_text (name)
selection = self.tvNPModels.get_selection ()
model, iter = selection.get_selected ()
if iter is not None:
name = model.get(iter, 0)[0]
name = self.makeNameUnique (name)
self.entNPName.set_text (name)
except:
nonfatalException ()

Expand Down Expand Up @@ -3866,11 +3875,27 @@ def on_tvNPMakes_cursor_changed(self, tvNPMakes):
self.recommended_make_selected = recommended_make
self.fillModelList()

def models_visible_func(self, model, iter, data):
"""Filter function for models list."""
search_text = self.entryNPModelsSearch.get_text().lower()
if not search_text:
return True
# Check both the display text (column 0) and the actual model name (column 1)
display_text = model.get(iter, 0)[0].lower()
model_name = model.get(iter, 1)[0].lower()
return search_text in display_text or search_text in model_name

def on_entryNPModelsSearch_changed(self, entry):
"""Handle search text changes."""
if self.models_filter:
self.models_filter.refilter()

def fillModelList(self):
self.recommended_model_selected = False
self.entryNPModelsSearch.set_text("") # Clear filter when make changes
models = self.ppds.getModels(self.NPMake)
model = self.tvNPModels.get_model()
model.clear()
# Clear the underlying liststore, not the filter model
self.models_liststore.clear()
selected = False
is_auto_make = (cupshelpers.ppds.normalize (self.NPMake) ==
cupshelpers.ppds.normalize (self.auto_make))
Expand All @@ -3886,12 +3911,15 @@ def fillModelList(self):
else:
text = pmodel

iter = model.append((text, pmodel,))
iter = self.models_liststore.append((text, pmodel,))
if recommended:
path = model.get_path(iter)
self.tvNPModels.set_cursor (path, None, False)
self.tvNPModels.scroll_to_cell(path, None,
True, 0.5, 0.5)
# Get the path in the filter model, not the liststore
child_path = self.models_liststore.get_path(iter)
filter_path = self.models_filter.convert_child_path_to_path(child_path)
if filter_path is not None:
self.tvNPModels.set_cursor (filter_path, None, False)
self.tvNPModels.scroll_to_cell(filter_path, None,
True, 0.5, 0.5)
selected = True
if not selected:
self.tvNPModels.set_cursor (Gtk.TreePath(), None, False)
Expand Down
8 changes: 8 additions & 0 deletions po/ru.po
Original file line number Diff line number Diff line change
Expand Up @@ -4112,6 +4112,14 @@ msgstr "Апплет очереди печати"
msgid "System tray icon for managing print jobs"
msgstr "Значок на панели задач для управления заданиями печати"

#: ../ui/NewPrinterWindow.ui:1938
msgid "Filter models..."
msgstr "Модель..."

#: ../ui/NewPrinterWindow.ui:1940
msgid "Type to filter the list of printer models"
msgstr "Введите текст для фильтрации списка моделей"

#~ msgid "Option '%s' has value '%s' and cannot be edited."
#~ msgstr "Параметр «%s» имеет значение «%s» и не может быть изменён."

Expand Down
8 changes: 8 additions & 0 deletions po/system-config-printer.pot
Original file line number Diff line number Diff line change
Expand Up @@ -2939,6 +2939,14 @@ msgstr ""
msgid "_Forward"
msgstr ""

#: ../ui/NewPrinterWindow.ui.h:107
msgid "Filter models..."
msgstr ""

#: ../ui/NewPrinterWindow.ui.h:108
msgid "Type to filter the list of printer models"
msgstr ""

#: ../ui/PrinterPropertiesDialog.ui.h:1
msgid "Printer Properties"
msgstr ""
Expand Down
43 changes: 35 additions & 8 deletions ui/NewPrinterWindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -1927,20 +1927,47 @@ ipp://printer.mydomain/ipp</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow13">
<property name="width_request">250</property>
<object class="GtkBox" id="vboxNPModels">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkTreeView" id="tvNPModels">
<object class="GtkEntry" id="entryNPModelsSearch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<signal name="cursor-changed" handler="on_tvNPModels_cursor_changed" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection4"/>
<property name="placeholder_text" translatable="yes">Filter models...</property>
<property name="tooltip_text" translatable="yes">Type to filter the list of printer models</property>
<signal name="changed" handler="on_entryNPModelsSearch_changed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow13">
<property name="width_request">250</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="tvNPModels">
<property name="visible">True</property>
<property name="can_focus">True</property>
<signal name="cursor-changed" handler="on_tvNPModels_cursor_changed" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection4"/>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
Expand Down