Move WrapperLayout to miscwidgets

This commit is contained in:
Florian Bruhin 2016-08-03 13:08:25 +02:00
parent fa7f9955a3
commit dbccb12b49
3 changed files with 58 additions and 36 deletions

View File

@ -23,11 +23,12 @@ import itertools
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QUrl, QObject, QPoint, QSizeF from PyQt5.QtCore import pyqtSignal, pyqtSlot, QUrl, QObject, QPoint, QSizeF
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QLayout from PyQt5.QtWidgets import QWidget
from qutebrowser.keyinput import modeman from qutebrowser.keyinput import modeman
from qutebrowser.config import config from qutebrowser.config import config
from qutebrowser.utils import utils, objreg, usertypes, message, log, qtutils from qutebrowser.utils import utils, objreg, usertypes, message, log, qtutils
from qutebrowser.misc import miscwidgets
tab_id_gen = itertools.count(0) tab_id_gen = itertools.count(0)
@ -57,35 +58,6 @@ class WebTabError(Exception):
"""Base class for various errors.""" """Base class for various errors."""
class WrapperLayout(QLayout):
"""A Qt layout which simply wraps a single widget.
This is used so the widget is hidden behind a AbstractTab API and can't
easily be accidentally accessed.
"""
def __init__(self, widget, parent=None):
super().__init__(parent)
self._widget = widget
def addItem(self, _widget):
raise AssertionError("Should never be called!")
def sizeHint(self):
return self._widget.sizeHint()
def itemAt(self, _index): # pragma: no cover
# For some reason this sometimes gets called by Qt.
return None
def takeAt(self, _index):
raise AssertionError("Should never be called!")
def setGeometry(self, rect):
self._widget.setGeometry(rect)
class TabData: class TabData:
"""A simple namespace with a fixed set of attributes. """A simple namespace with a fixed set of attributes.
@ -512,7 +484,7 @@ class AbstractTab(QWidget):
def _set_widget(self, widget): def _set_widget(self, widget):
# pylint: disable=protected-access # pylint: disable=protected-access
self._layout = WrapperLayout(widget, self) self._layout = miscwidgets.WrapperLayout(widget, self)
self._widget = widget self._widget = widget
self.history._history = widget.history() self.history._history = widget.history()
self.scroller._init_widget(widget) self.scroller._init_widget(widget)

View File

@ -21,7 +21,7 @@
from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QSize from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QSize
from PyQt5.QtWidgets import (QLineEdit, QWidget, QHBoxLayout, QLabel, from PyQt5.QtWidgets import (QLineEdit, QWidget, QHBoxLayout, QLabel,
QStyleOption, QStyle) QStyleOption, QStyle, QLayout)
from PyQt5.QtGui import QValidator, QPainter from PyQt5.QtGui import QValidator, QPainter
from qutebrowser.utils import utils from qutebrowser.utils import utils
@ -225,3 +225,32 @@ class _FoldArrow(QWidget):
def minimumSizeHint(self): def minimumSizeHint(self):
"""Return a sensible size.""" """Return a sensible size."""
return QSize(8, 8) return QSize(8, 8)
class WrapperLayout(QLayout):
"""A Qt layout which simply wraps a single widget.
This is used so the widget is hidden behind a defined API and can't
easily be accidentally accessed.
"""
def __init__(self, widget, parent=None):
super().__init__(parent)
self._widget = widget
def addItem(self, _widget):
raise AssertionError("Should never be called!")
def sizeHint(self):
return self._widget.sizeHint()
def itemAt(self, _index): # pragma: no cover
# For some reason this sometimes gets called by Qt.
return None
def takeAt(self, _index):
raise AssertionError("Should never be called!")
def setGeometry(self, rect):
self._widget.setGeometry(rect)

View File

@ -20,11 +20,11 @@
"""Test widgets in miscwidgets module.""" """Test widgets in miscwidgets module."""
from unittest import mock from unittest import mock
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt, QSize
from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QApplication, QWidget
import pytest import pytest
from qutebrowser.misc.miscwidgets import CommandLineEdit from qutebrowser.misc import miscwidgets
class TestCommandLineEdit: class TestCommandLineEdit:
@ -34,7 +34,7 @@ class TestCommandLineEdit:
@pytest.yield_fixture @pytest.yield_fixture
def cmd_edit(self, qtbot): def cmd_edit(self, qtbot):
"""Fixture to initialize a CommandLineEdit.""" """Fixture to initialize a CommandLineEdit."""
cmd_edit = CommandLineEdit(None) cmd_edit = miscwidgets.CommandLineEdit(None)
cmd_edit.set_prompt(':') cmd_edit.set_prompt(':')
qtbot.add_widget(cmd_edit) qtbot.add_widget(cmd_edit)
assert cmd_edit.text() == '' assert cmd_edit.text() == ''
@ -73,3 +73,24 @@ class TestCommandLineEdit:
"""Test preventing of an invalid prompt being entered.""" """Test preventing of an invalid prompt being entered."""
qtbot.keyClicks(cmd_edit, '$hello') qtbot.keyClicks(cmd_edit, '$hello')
assert cmd_edit.text() == '' assert cmd_edit.text() == ''
class WrappedWidget(QWidget):
def sizeHint(self):
return QSize(23, 42)
class TestWrapperLayout:
@pytest.fixture
def container(self, qtbot):
wrapped = WrappedWidget()
parent = QWidget()
qtbot.add_widget(wrapped)
qtbot.add_widget(parent)
miscwidgets.WrapperLayout(wrapped, parent)
return parent
def test_size_hint(self, container):
assert container.sizeHint() == QSize(23, 42)