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.QtGui import QIcon
from PyQt5.QtWidgets import QWidget, QLayout
from PyQt5.QtWidgets import QWidget
from qutebrowser.keyinput import modeman
from qutebrowser.config import config
from qutebrowser.utils import utils, objreg, usertypes, message, log, qtutils
from qutebrowser.misc import miscwidgets
tab_id_gen = itertools.count(0)
@ -57,35 +58,6 @@ class WebTabError(Exception):
"""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:
"""A simple namespace with a fixed set of attributes.
@ -512,7 +484,7 @@ class AbstractTab(QWidget):
def _set_widget(self, widget):
# pylint: disable=protected-access
self._layout = WrapperLayout(widget, self)
self._layout = miscwidgets.WrapperLayout(widget, self)
self._widget = widget
self.history._history = widget.history()
self.scroller._init_widget(widget)

View File

@ -21,7 +21,7 @@
from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QSize
from PyQt5.QtWidgets import (QLineEdit, QWidget, QHBoxLayout, QLabel,
QStyleOption, QStyle)
QStyleOption, QStyle, QLayout)
from PyQt5.QtGui import QValidator, QPainter
from qutebrowser.utils import utils
@ -225,3 +225,32 @@ class _FoldArrow(QWidget):
def minimumSizeHint(self):
"""Return a sensible size."""
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."""
from unittest import mock
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtWidgets import QApplication, QWidget
import pytest
from qutebrowser.misc.miscwidgets import CommandLineEdit
from qutebrowser.misc import miscwidgets
class TestCommandLineEdit:
@ -34,7 +34,7 @@ class TestCommandLineEdit:
@pytest.yield_fixture
def cmd_edit(self, qtbot):
"""Fixture to initialize a CommandLineEdit."""
cmd_edit = CommandLineEdit(None)
cmd_edit = miscwidgets.CommandLineEdit(None)
cmd_edit.set_prompt(':')
qtbot.add_widget(cmd_edit)
assert cmd_edit.text() == ''
@ -73,3 +73,24 @@ class TestCommandLineEdit:
"""Test preventing of an invalid prompt being entered."""
qtbot.keyClicks(cmd_edit, '$hello')
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)