Skip to content

Commit

Permalink
feat(webenginewidgets): add WebEngineContextMenuData class
Browse files Browse the repository at this point in the history
  • Loading branch information
phil65 committed Nov 4, 2020
1 parent 5a93aff commit 21805f8
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 0 deletions.
2 changes: 2 additions & 0 deletions prettyqt/webenginewidgets/__init__.py
Expand Up @@ -13,6 +13,7 @@
from .webenginehistoryitem import WebEngineHistoryItem
from .webenginehistory import WebEngineHistory
from .webenginesettings import WebEngineSettings
from .webenginecontextmenudata import WebEngineContextMenuData
from .webenginescript import WebEngineScript
from .webenginescriptcollection import WebEngineScriptCollection
from .webengineview import WebEngineView
Expand All @@ -23,6 +24,7 @@
__all__ = [
"WebEngineHistoryItem",
"WebEngineSettings",
"WebEngineContextMenuData",
"WebEngineHistory",
"WebEngineView",
"WebEnginePage",
Expand Down
104 changes: 104 additions & 0 deletions prettyqt/webenginewidgets/webenginecontextmenudata.py
@@ -0,0 +1,104 @@
# -*- coding: utf-8 -*-

from typing import List

from qtpy import PYQT5, PYSIDE2

if PYQT5:
from PyQt5 import QtWebEngineWidgets # type: ignore
elif PYSIDE2:
from PySide2 import QtWebEngineWidgets

from prettyqt import core
from prettyqt.utils import bidict

mod = QtWebEngineWidgets.QWebEngineContextMenuData

EDIT_FLAGS = bidict(
undo=mod.CanUndo,
redo=mod.CanRedo,
cut=mod.CanCut,
copy=mod.CanCopy,
paste=mod.CanPaste,
delete=mod.CanDelete,
select_all=mod.CanSelectAll,
translate=mod.CanTranslate,
edit_richly=mod.CanEditRichly,
)


MEDIA_FLAGS = bidict(
in_error=mod.MediaInError,
paused=mod.MediaPaused,
muted=mod.MediaMuted,
loop=mod.MediaLoop,
can_save=mod.MediaCanSave,
has_audio=mod.MediaHasAudio,
can_toggle_controls=mod.MediaCanToggleControls,
controls=mod.MediaControls,
can_print=mod.MediaCanPrint,
can_rotate=mod.MediaCanRotate,
)

MEDIA_TYPES = bidict(
none=mod.MediaTypeNone,
image=mod.MediaTypeImage,
video=mod.MediaTypeVideo,
audio=mod.MediaTypeAudio,
canvas=mod.MediaTypeCanvas,
file=mod.MediaTypeFile,
plugin=mod.MediaTypePlugin,
)


class WebEngineContextMenuData(QtWebEngineWidgets.QWebEngineContextMenuData):
def get_media_url(self) -> core.Url:
return core.Url(self.mediaUrl())

def get_link_url(self) -> core.Url:
return core.Url(self.linkUrl())

def get_media_type(self) -> str:
return MEDIA_TYPES.inv[self.mediaType()]

def get_media_flags(self) -> List[str]:
return [k for k, v in MEDIA_FLAGS.items() if v & self.mediaFlags()]

def get_edit_flags(self) -> List[str]:
return [k for k, v in EDIT_FLAGS.items() if v & self.editFlags()]

def can_undo(self) -> bool:
return mod.CanUndo & self.editFlags()

def can_redo(self) -> bool:
return mod.CanRedo & self.editFlags()

def can_cut(self) -> bool:
return mod.CanCut & self.editFlags()

def can_copy(self) -> bool:
return mod.CanCopy & self.editFlags()

def can_paste(self) -> bool:
return mod.CanPaste & self.editFlags()

def can_delete(self) -> bool:
return mod.CanDelete & self.editFlags()

def can_select_all(self) -> bool:
return mod.CanSelectAll & self.editFlags()

def can_translate(self) -> bool:
return mod.CanTranslate & self.editFlags()

def can_edit_richly(self) -> bool:
return mod.CanEditRichly & self.editFlags()


if __name__ == "__main__":
from prettyqt import widgets, webenginewidgets

app = widgets.app()
page = webenginewidgets.WebEnginePage()
context_menu_data = page.get_context_menu_data()
app.main_loop()
3 changes: 3 additions & 0 deletions prettyqt/webenginewidgets/webenginepage.py
Expand Up @@ -274,6 +274,9 @@ def get_setting(self, setting_name: str) -> bool:
def get_scripts(self) -> webenginewidgets.WebEngineScriptCollection:
return webenginewidgets.WebEngineScriptCollection(self.scripts())

def get_context_menu_data(self) -> webenginewidgets.WebEngineContextMenuData:
return webenginewidgets.WebEngineContextMenuData(self.contextMenuData())


if __name__ == "__main__":
from prettyqt import widgets
Expand Down
18 changes: 18 additions & 0 deletions tests/test_webenginewidgets.py
Expand Up @@ -9,6 +9,24 @@
from prettyqt.utils import InvalidParamError


# def test_webenginecontextmenudata(qapp):
# page = webenginewidgets.WebEnginePage()
# data = page.get_context_menu_data()
# data.get_media_url()
# data.get_link_url()
# data.get_media_flags()
# data.get_edit_flags()
# assert data.can_undo() is True
# assert data.can_redo() is True
# assert data.can_cut() is True
# assert data.can_copy() is True
# assert data.can_paste() is True
# assert data.can_delete() is True
# assert data.can_select_all() is True
# assert data.can_translate() is True
# assert data.can_edit_richly() is True


def test_webengineview(qapp):
widget = webenginewidgets.WebEngineView()
widget.set_zoom(1.5)
Expand Down

0 comments on commit 21805f8

Please sign in to comment.