mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-13 19:21:50 +02:00
feat(widget): added simple website widget with rpc
This commit is contained in:
@ -1932,3 +1932,79 @@ class Ring(RPCBase):
|
|||||||
"""
|
"""
|
||||||
Reset the connections for the ring widget. Disconnect the current slot and endpoint.
|
Reset the connections for the ring widget. Disconnect the current slot and endpoint.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class WebsiteWidget(RPCBase):
|
||||||
|
@rpc_call
|
||||||
|
def set_url(self, url: str) -> None:
|
||||||
|
"""
|
||||||
|
Set the url of the website widget
|
||||||
|
|
||||||
|
Args:
|
||||||
|
url (str): The url to set
|
||||||
|
"""
|
||||||
|
|
||||||
|
@rpc_call
|
||||||
|
def get_url(self) -> str:
|
||||||
|
"""
|
||||||
|
Get the current url of the website widget
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The current url
|
||||||
|
"""
|
||||||
|
|
||||||
|
@rpc_call
|
||||||
|
def reload(self):
|
||||||
|
"""
|
||||||
|
Reload the website
|
||||||
|
"""
|
||||||
|
|
||||||
|
@rpc_call
|
||||||
|
def back(self):
|
||||||
|
"""
|
||||||
|
Go back in the history
|
||||||
|
"""
|
||||||
|
|
||||||
|
@rpc_call
|
||||||
|
def forward(self):
|
||||||
|
"""
|
||||||
|
Go forward in the history
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class WebsiteWidget(RPCBase):
|
||||||
|
@rpc_call
|
||||||
|
def set_url(self, url: str) -> None:
|
||||||
|
"""
|
||||||
|
Set the url of the website widget
|
||||||
|
|
||||||
|
Args:
|
||||||
|
url (str): The url to set
|
||||||
|
"""
|
||||||
|
|
||||||
|
@rpc_call
|
||||||
|
def get_url(self) -> str:
|
||||||
|
"""
|
||||||
|
Get the current url of the website widget
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The current url
|
||||||
|
"""
|
||||||
|
|
||||||
|
@rpc_call
|
||||||
|
def reload(self):
|
||||||
|
"""
|
||||||
|
Reload the website
|
||||||
|
"""
|
||||||
|
|
||||||
|
@rpc_call
|
||||||
|
def back(self):
|
||||||
|
"""
|
||||||
|
Go back in the history
|
||||||
|
"""
|
||||||
|
|
||||||
|
@rpc_call
|
||||||
|
def forward(self):
|
||||||
|
"""
|
||||||
|
Go forward in the history
|
||||||
|
"""
|
||||||
|
@ -117,6 +117,7 @@ if __name__ == "__main__": # pragma: no cover
|
|||||||
from bec_widgets.widgets.figure.plots.waveform.waveform import BECWaveform
|
from bec_widgets.widgets.figure.plots.waveform.waveform import BECWaveform
|
||||||
from bec_widgets.widgets.figure.plots.waveform.waveform_curve import BECCurve
|
from bec_widgets.widgets.figure.plots.waveform.waveform_curve import BECCurve
|
||||||
from bec_widgets.widgets.spiral_progress_bar.ring import Ring
|
from bec_widgets.widgets.spiral_progress_bar.ring import Ring
|
||||||
|
from bec_widgets.widgets.website.website import WebsiteWidget
|
||||||
|
|
||||||
current_path = os.path.dirname(__file__)
|
current_path = os.path.dirname(__file__)
|
||||||
client_path = os.path.join(current_path, "client.py")
|
client_path = os.path.join(current_path, "client.py")
|
||||||
@ -133,6 +134,7 @@ if __name__ == "__main__": # pragma: no cover
|
|||||||
BECDockArea,
|
BECDockArea,
|
||||||
SpiralProgressBar,
|
SpiralProgressBar,
|
||||||
Ring,
|
Ring,
|
||||||
|
WebsiteWidget,
|
||||||
]
|
]
|
||||||
generator = ClientGenerator()
|
generator = ClientGenerator()
|
||||||
generator.generate_client(clss)
|
generator.generate_client(clss)
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
from bec_widgets.utils import BECConnector
|
from bec_widgets.utils import BECConnector
|
||||||
from bec_widgets.widgets.figure import BECFigure
|
from bec_widgets.widgets.figure import BECFigure
|
||||||
from bec_widgets.widgets.spiral_progress_bar.spiral_progress_bar import SpiralProgressBar
|
from bec_widgets.widgets.spiral_progress_bar.spiral_progress_bar import SpiralProgressBar
|
||||||
|
from bec_widgets.widgets.website.website import WebsiteWidget
|
||||||
|
|
||||||
|
|
||||||
class RPCWidgetHandler:
|
class RPCWidgetHandler:
|
||||||
"""Handler class for creating widgets from RPC messages."""
|
"""Handler class for creating widgets from RPC messages."""
|
||||||
|
|
||||||
widget_classes = {"BECFigure": BECFigure, "SpiralProgressBar": SpiralProgressBar}
|
widget_classes = {
|
||||||
|
"BECFigure": BECFigure,
|
||||||
|
"SpiralProgressBar": SpiralProgressBar,
|
||||||
|
"Website": WebsiteWidget,
|
||||||
|
}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_widget(widget_type, **kwargs) -> BECConnector:
|
def create_widget(widget_type, **kwargs) -> BECConnector:
|
||||||
|
0
bec_widgets/widgets/website/__init__.py
Normal file
0
bec_widgets/widgets/website/__init__.py
Normal file
65
bec_widgets/widgets/website/website.py
Normal file
65
bec_widgets/widgets/website/website.py
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
from qtpy.QtCore import QUrl
|
||||||
|
from qtpy.QtWebEngineWidgets import QWebEngineView
|
||||||
|
from qtpy.QtWidgets import QApplication
|
||||||
|
|
||||||
|
from bec_widgets.utils import BECConnector
|
||||||
|
|
||||||
|
|
||||||
|
class WebsiteWidget(BECConnector, QWebEngineView):
|
||||||
|
"""
|
||||||
|
A simple widget to display a website
|
||||||
|
"""
|
||||||
|
|
||||||
|
USER_ACCESS = ["set_url", "get_url", "reload", "back", "forward"]
|
||||||
|
|
||||||
|
def __init__(self, url: str = None, parent=None, config=None, client=None, gui_id=None):
|
||||||
|
super().__init__(client=client, config=config, gui_id=gui_id)
|
||||||
|
QWebEngineView.__init__(self, parent=parent)
|
||||||
|
self.set_url(url)
|
||||||
|
|
||||||
|
def set_url(self, url: str) -> None:
|
||||||
|
"""
|
||||||
|
Set the url of the website widget
|
||||||
|
|
||||||
|
Args:
|
||||||
|
url (str): The url to set
|
||||||
|
"""
|
||||||
|
if not url:
|
||||||
|
return
|
||||||
|
self.setUrl(QUrl(url))
|
||||||
|
|
||||||
|
def get_url(self) -> str:
|
||||||
|
"""
|
||||||
|
Get the current url of the website widget
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The current url
|
||||||
|
"""
|
||||||
|
return self.url().toString()
|
||||||
|
|
||||||
|
def reload(self):
|
||||||
|
"""
|
||||||
|
Reload the website
|
||||||
|
"""
|
||||||
|
QWebEngineView.reload(self)
|
||||||
|
|
||||||
|
def back(self):
|
||||||
|
"""
|
||||||
|
Go back in the history
|
||||||
|
"""
|
||||||
|
QWebEngineView.back(self)
|
||||||
|
|
||||||
|
def forward(self):
|
||||||
|
"""
|
||||||
|
Go forward in the history
|
||||||
|
"""
|
||||||
|
QWebEngineView.forward(self)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
mainWin = WebsiteWidget("https://scilog.psi.ch")
|
||||||
|
mainWin.show()
|
||||||
|
sys.exit(app.exec())
|
27
tests/unit_tests/test_website_widget.py
Normal file
27
tests/unit_tests/test_website_widget.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import pytest
|
||||||
|
from qtpy.QtCore import QUrl
|
||||||
|
|
||||||
|
from bec_widgets.widgets.website.website import WebsiteWidget
|
||||||
|
|
||||||
|
from .client_mocks import mocked_client
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def website_widget(qtbot, mocked_client):
|
||||||
|
widget = WebsiteWidget(client=mocked_client)
|
||||||
|
qtbot.addWidget(widget)
|
||||||
|
qtbot.waitExposed(widget)
|
||||||
|
yield widget
|
||||||
|
widget.page().deleteLater()
|
||||||
|
qtbot.wait(1000)
|
||||||
|
|
||||||
|
|
||||||
|
def test_website_widget_set_url(website_widget):
|
||||||
|
website_widget.set_url("https://scilog.psi.ch")
|
||||||
|
assert website_widget.url() == QUrl("https://scilog.psi.ch")
|
||||||
|
|
||||||
|
website_widget.set_url(None)
|
||||||
|
assert website_widget.url() == QUrl("https://scilog.psi.ch")
|
||||||
|
|
||||||
|
website_widget.set_url("https://google.com")
|
||||||
|
assert website_widget.get_url() == "https://google.com"
|
Reference in New Issue
Block a user