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.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.completion import completiondelegate, completer
from qutebrowser.utils import usertypes, qtutils, objreg, utils
@ -245,6 +245,15 @@ class CompletionView(QTreeView):
"""Select the next completion item."""
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):
"""Extend selectionChanged to call completers selection_changed."""
super().selectionChanged(selected, deselected)

View File

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

View File

@ -23,7 +23,7 @@ import datetime
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.config import config
@ -174,3 +174,27 @@ class UrlCompletionModel(base.BaseCompletionModel):
if url_item.data(Qt.DisplayRole) == url:
self._bookmark_cat.removeRow(i)
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>']),
('completion-item-prev', ['<Shift-Tab>', '<Up>']),
('completion-item-next', ['<Tab>', '<Down>']),
('completion-item-del', ['<Ctrl-D>']),
('command-accept', RETURN_KEYS),
])),

View File

@ -26,7 +26,7 @@ from qutebrowser.keyinput import modeman, modeparsers
from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.misc import cmdhistory
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):
@ -211,31 +211,7 @@ class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit):
e.ignore()
return
else:
if e.key() == Qt.Key_D and (e.modifiers() & Qt.ControlModifier ==
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")
super().keyPressEvent(e)
def sizeHint(self):
"""Dynamically calculate the needed size."""