Refactored bookmark removal to use a command.

This commit is contained in:
Antoni Boucher 2015-06-07 19:36:19 -04:00
parent cf4b89efe3
commit 57a72a7120
5 changed files with 42 additions and 28 deletions

View File

@ -26,7 +26,7 @@ subclasses to provide completions.
from PyQt5.QtWidgets import QStyle, QTreeView, QSizePolicy from PyQt5.QtWidgets import QStyle, QTreeView, QSizePolicy
from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QItemSelectionModel from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QItemSelectionModel
from qutebrowser.commands import cmdutils from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.config import config, style from qutebrowser.config import config, style
from qutebrowser.completion import completiondelegate, completer from qutebrowser.completion import completiondelegate, completer
from qutebrowser.utils import usertypes, qtutils, objreg, utils from qutebrowser.utils import usertypes, qtutils, objreg, utils
@ -245,6 +245,15 @@ class CompletionView(QTreeView):
"""Select the next completion item.""" """Select the next completion item."""
self._next_prev_item(prev=False) self._next_prev_item(prev=False)
@cmdutils.register(instance='completion', hide=True,
modes=[usertypes.KeyMode.command], scope='window')
def completion_item_del(self):
"""Delete the current completion item."""
try:
self.model().srcmodel.delete_cur_item(self._win_id)
except NotImplementedError:
raise cmdexc.CommandError("Cannot delete this item.")
def selectionChanged(self, selected, deselected): def selectionChanged(self, selected, deselected):
"""Extend selectionChanged to call completers selection_changed.""" """Extend selectionChanged to call completers selection_changed."""
super().selectionChanged(selected, deselected) super().selectionChanged(selected, deselected)

View File

@ -95,6 +95,10 @@ class BaseCompletionModel(QStandardItemModel):
nameitem.setData(userdata, Role.userdata) nameitem.setData(userdata, Role.userdata)
return nameitem, descitem, miscitem return nameitem, descitem, miscitem
def delete_cur_item(self, win_id):
"""Delete the selected item."""
raise NotImplementedError
def flags(self, index): def flags(self, index):
"""Return the item flags for index. """Return the item flags for index.

View File

@ -23,7 +23,7 @@ import datetime
from PyQt5.QtCore import pyqtSlot, Qt from PyQt5.QtCore import pyqtSlot, Qt
from qutebrowser.utils import objreg, utils from qutebrowser.utils import message, objreg, utils
from qutebrowser.completion.models import base from qutebrowser.completion.models import base
from qutebrowser.config import config from qutebrowser.config import config
@ -174,3 +174,27 @@ class UrlCompletionModel(base.BaseCompletionModel):
if url_item.data(Qt.DisplayRole) == url: if url_item.data(Qt.DisplayRole) == url:
self._bookmark_cat.removeRow(i) self._bookmark_cat.removeRow(i)
break break
def delete_cur_item(self, win_id):
"""Delete the selected item.
Args:
win_id: The current windows id.
"""
completion = objreg.get('completion', scope='window',
window=win_id)
index = completion.currentIndex()
model = completion.model()
url = model.data(index)
category = index.parent()
if category.isValid():
if category.data() == 'Bookmarks':
bookmark_manager = objreg.get('bookmark-manager')
bookmark_manager.bookmark_del(url)
message.info(win_id, "Bookmarks deleted")
elif category.data() == 'Quickmarks':
quickmark_manager = objreg.get('quickmark-manager')
name = model.data(index.sibling(index.row(),
index.column() + 1))
quickmark_manager.quickmark_del(name)
message.info(win_id, "Quickmarks deleted")

View File

@ -1280,6 +1280,7 @@ KEY_DATA = collections.OrderedDict([
('command-history-next', ['<Ctrl-N>']), ('command-history-next', ['<Ctrl-N>']),
('completion-item-prev', ['<Shift-Tab>', '<Up>']), ('completion-item-prev', ['<Shift-Tab>', '<Up>']),
('completion-item-next', ['<Tab>', '<Down>']), ('completion-item-next', ['<Tab>', '<Down>']),
('completion-item-del', ['<Ctrl-D>']),
('command-accept', RETURN_KEYS), ('command-accept', RETURN_KEYS),
])), ])),

View File

@ -26,7 +26,7 @@ from qutebrowser.keyinput import modeman, modeparsers
from qutebrowser.commands import cmdexc, cmdutils from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.misc import cmdhistory from qutebrowser.misc import cmdhistory
from qutebrowser.misc import miscwidgets as misc from qutebrowser.misc import miscwidgets as misc
from qutebrowser.utils import message, usertypes, log, objreg, qtutils from qutebrowser.utils import usertypes, log, objreg, qtutils
class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit): class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit):
@ -211,31 +211,7 @@ class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit):
e.ignore() e.ignore()
return return
else: else:
if e.key() == Qt.Key_D and (e.modifiers() & Qt.ControlModifier == super().keyPressEvent(e)
Qt.ControlModifier):
self.delete_current_item()
else:
super().keyPressEvent(e)
def delete_current_item(self):
"""Delete the selected bookmark/quickmark."""
completion = objreg.get('completion', scope='window',
window=self._win_id)
index = completion.currentIndex()
model = completion.model()
url = model.data(index)
category = index.parent()
if category.isValid():
if category.data() == 'Bookmarks':
bookmark_manager = objreg.get('bookmark-manager')
bookmark_manager.bookmark_del(url)
message.info(self._win_id, "Bookmarks deleted")
elif category.data() == 'Quickmarks':
quickmark_manager = objreg.get('quickmark-manager')
name = model.data(index.sibling(index.row(),
index.column() + 1))
quickmark_manager.quickmark_del(name)
message.info(self._win_id, "Quickmarks deleted")
def sizeHint(self): def sizeHint(self):
"""Dynamically calculate the needed size.""" """Dynamically calculate the needed size."""