VertexEngine-WebEngine 1.2.dev2__tar.gz → 1.2rc1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vertexengine_webengine-1.2.dev2/src/VertexEngine_WebEngine.egg-info → vertexengine_webengine-1.2rc1}/PKG-INFO +6 -2
- {vertexengine_webengine-1.2.dev2 → vertexengine_webengine-1.2rc1}/README.md +3 -1
- {vertexengine_webengine-1.2.dev2 → vertexengine_webengine-1.2rc1}/pyproject.toml +4 -2
- vertexengine_webengine-1.2rc1/src/VertexEngine/VertexWebEngineCore/JSBridge.py +17 -0
- vertexengine_webengine-1.2rc1/src/VertexEngine/VertexWebEngineCore/WebScene.py +46 -0
- vertexengine_webengine-1.2rc1/src/VertexEngine/VertexWebEngineWidgets/EngineView.py +24 -0
- {vertexengine_webengine-1.2.dev2 → vertexengine_webengine-1.2rc1/src/VertexEngine_WebEngine.egg-info}/PKG-INFO +6 -2
- vertexengine_webengine-1.2rc1/src/VertexEngine_WebEngine.egg-info/SOURCES.txt +11 -0
- {vertexengine_webengine-1.2.dev2 → vertexengine_webengine-1.2rc1}/src/VertexEngine_WebEngine.egg-info/requires.txt +1 -0
- vertexengine_webengine-1.2.dev2/src/VertexEngine/BrowserTools/Tabs.py +0 -80
- vertexengine_webengine-1.2.dev2/src/VertexEngine/WebEngine/WebEngine.py +0 -84
- vertexengine_webengine-1.2.dev2/src/VertexEngine/WebView/WebPage.py +0 -22
- vertexengine_webengine-1.2.dev2/src/VertexEngine/WebView/bridge.py +0 -19
- vertexengine_webengine-1.2.dev2/src/VertexEngine/WebView/profile.py +0 -27
- vertexengine_webengine-1.2.dev2/src/VertexEngine/main.py +0 -17
- vertexengine_webengine-1.2.dev2/src/VertexEngine/test.py +0 -61
- vertexengine_webengine-1.2.dev2/src/VertexEngine_WebEngine.egg-info/SOURCES.txt +0 -15
- {vertexengine_webengine-1.2.dev2 → vertexengine_webengine-1.2rc1}/LICENSE +0 -0
- {vertexengine_webengine-1.2.dev2 → vertexengine_webengine-1.2rc1}/setup.cfg +0 -0
- {vertexengine_webengine-1.2.dev2 → vertexengine_webengine-1.2rc1}/src/VertexEngine_WebEngine.egg-info/dependency_links.txt +0 -0
- {vertexengine_webengine-1.2.dev2 → vertexengine_webengine-1.2rc1}/src/VertexEngine_WebEngine.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: VertexEngine-WebEngine
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2rc1
|
|
4
|
+
Summary: The offical WebEngine Extension of the VertexEngine SDK.
|
|
4
5
|
Author-email: Tyrel Miguel <annbasilan0828@gmail.com>
|
|
5
6
|
License: MIT
|
|
6
7
|
Project-URL: Documentation, https://vertexenginedocs.netlify.app/
|
|
@@ -11,6 +12,7 @@ License-File: LICENSE
|
|
|
11
12
|
Requires-Dist: pygame>=2.0
|
|
12
13
|
Requires-Dist: PyQt6>=6.7
|
|
13
14
|
Requires-Dist: VertexEngine>=1.0.1
|
|
15
|
+
Requires-Dist: PyQt6-WebEngine>=6.3.0
|
|
14
16
|
Dynamic: license-file
|
|
15
17
|
|
|
16
18
|
# VertexEngine/Vertex-WebEngine
|
|
@@ -20,7 +22,9 @@ VertexEngine-WebEngine is a WebEngine built for the VertexEngine SDK. It's a sep
|
|
|
20
22
|
The documentation is in the following link:
|
|
21
23
|
[Project Documentation](https://vertexenginedocs.netlify.app/) for help.
|
|
22
24
|
|
|
23
|
-
## Change Logs (1.
|
|
25
|
+
## Change Logs (1.2rc1), NEW!
|
|
26
|
+
### 1.2rc1
|
|
27
|
+
- FULL ENGINE REVAMP! Check Documentation for more details.
|
|
24
28
|
### Version 1.1
|
|
25
29
|
- Added 1 New Library!
|
|
26
30
|
~ BrowserTools.Tabs
|
|
@@ -5,7 +5,9 @@ VertexEngine-WebEngine is a WebEngine built for the VertexEngine SDK. It's a sep
|
|
|
5
5
|
The documentation is in the following link:
|
|
6
6
|
[Project Documentation](https://vertexenginedocs.netlify.app/) for help.
|
|
7
7
|
|
|
8
|
-
## Change Logs (1.
|
|
8
|
+
## Change Logs (1.2rc1), NEW!
|
|
9
|
+
### 1.2rc1
|
|
10
|
+
- FULL ENGINE REVAMP! Check Documentation for more details.
|
|
9
11
|
### Version 1.1
|
|
10
12
|
- Added 1 New Library!
|
|
11
13
|
~ BrowserTools.Tabs
|
|
@@ -4,7 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "VertexEngine-WebEngine"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.2rc1"
|
|
8
|
+
description = "The offical WebEngine Extension of the VertexEngine SDK."
|
|
8
9
|
authors = [
|
|
9
10
|
{ name="Tyrel Miguel", email="annbasilan0828@gmail.com" }
|
|
10
11
|
]
|
|
@@ -15,7 +16,8 @@ requires-python = ">=3.10"
|
|
|
15
16
|
dependencies = [
|
|
16
17
|
"pygame>=2.0",
|
|
17
18
|
"PyQt6>=6.7",
|
|
18
|
-
"VertexEngine>=1.0.1"
|
|
19
|
+
"VertexEngine>=1.0.1",
|
|
20
|
+
"PyQt6-WebEngine>=6.3.0"
|
|
19
21
|
]
|
|
20
22
|
|
|
21
23
|
[tool.setuptools.packages.find]
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from PyQt6.QtCore import QObject, pyqtSlot, pyqtSignal
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class JSBridge(QObject):
|
|
5
|
+
|
|
6
|
+
sceneChanged = pyqtSignal(str)
|
|
7
|
+
|
|
8
|
+
def __init__(self, scene_manager):
|
|
9
|
+
super().__init__()
|
|
10
|
+
self.scene_manager = scene_manager
|
|
11
|
+
|
|
12
|
+
@pyqtSlot(str)
|
|
13
|
+
def loadScene(self, name):
|
|
14
|
+
print("🎮 JS Requested Scene:", name)
|
|
15
|
+
|
|
16
|
+
self.scene_manager.load_scene(name)
|
|
17
|
+
self.sceneChanged.emit(name)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class SceneManager:
|
|
5
|
+
def __init__(self, webview):
|
|
6
|
+
self.webview = webview
|
|
7
|
+
|
|
8
|
+
# Folder where scenes live
|
|
9
|
+
self.scene_path = Path("scenes")
|
|
10
|
+
|
|
11
|
+
def load_scene(self, name: str):
|
|
12
|
+
file = self.scene_path / f"{name}.html"
|
|
13
|
+
|
|
14
|
+
if not file.exists():
|
|
15
|
+
print("❌ Scene not found:", file)
|
|
16
|
+
return
|
|
17
|
+
|
|
18
|
+
html = file.read_text(encoding="utf-8")
|
|
19
|
+
|
|
20
|
+
# Inject bridge + wrapper script
|
|
21
|
+
full_html = f"""
|
|
22
|
+
<!DOCTYPE html>
|
|
23
|
+
<html>
|
|
24
|
+
<head>
|
|
25
|
+
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
|
|
26
|
+
</head>
|
|
27
|
+
|
|
28
|
+
<body style="font-family: Arial; padding: 20px;">
|
|
29
|
+
<div id="scene">
|
|
30
|
+
{html}
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<script>
|
|
34
|
+
let Vertex;
|
|
35
|
+
|
|
36
|
+
new QWebChannel(qt.webChannelTransport, function(channel) {{
|
|
37
|
+
Vertex = channel.objects.bridge;
|
|
38
|
+
console.log("✅ Vertex Bridge Ready!");
|
|
39
|
+
}});
|
|
40
|
+
</script>
|
|
41
|
+
</body>
|
|
42
|
+
</html>
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
print(f"🗺️ Loading Scene: {name}")
|
|
46
|
+
self.webview.setHtml(full_html)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from PyQt6.QtWebEngineWidgets import QWebEngineView
|
|
2
|
+
from PyQt6.QtWebChannel import QWebChannel
|
|
3
|
+
|
|
4
|
+
from VertexWebEngineCore.WebScene import SceneManager
|
|
5
|
+
from VertexWebEngineCore.JSBridge import JSBridge
|
|
6
|
+
|
|
7
|
+
class WebEngine(QWebEngineView):
|
|
8
|
+
def __init__(self):
|
|
9
|
+
super().__init__()
|
|
10
|
+
|
|
11
|
+
# Scene system
|
|
12
|
+
self.scene_manager = SceneManager(self)
|
|
13
|
+
|
|
14
|
+
# Bridge
|
|
15
|
+
self.bridge = JSBridge(self.scene_manager)
|
|
16
|
+
|
|
17
|
+
# Channel
|
|
18
|
+
self.channel = QWebChannel()
|
|
19
|
+
self.channel.registerObject("bridge", self.bridge)
|
|
20
|
+
|
|
21
|
+
self.page().setWebChannel(self.channel)
|
|
22
|
+
|
|
23
|
+
# Start on menu
|
|
24
|
+
self.scene_manager.load_scene("menu")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: VertexEngine-WebEngine
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2rc1
|
|
4
|
+
Summary: The offical WebEngine Extension of the VertexEngine SDK.
|
|
4
5
|
Author-email: Tyrel Miguel <annbasilan0828@gmail.com>
|
|
5
6
|
License: MIT
|
|
6
7
|
Project-URL: Documentation, https://vertexenginedocs.netlify.app/
|
|
@@ -11,6 +12,7 @@ License-File: LICENSE
|
|
|
11
12
|
Requires-Dist: pygame>=2.0
|
|
12
13
|
Requires-Dist: PyQt6>=6.7
|
|
13
14
|
Requires-Dist: VertexEngine>=1.0.1
|
|
15
|
+
Requires-Dist: PyQt6-WebEngine>=6.3.0
|
|
14
16
|
Dynamic: license-file
|
|
15
17
|
|
|
16
18
|
# VertexEngine/Vertex-WebEngine
|
|
@@ -20,7 +22,9 @@ VertexEngine-WebEngine is a WebEngine built for the VertexEngine SDK. It's a sep
|
|
|
20
22
|
The documentation is in the following link:
|
|
21
23
|
[Project Documentation](https://vertexenginedocs.netlify.app/) for help.
|
|
22
24
|
|
|
23
|
-
## Change Logs (1.
|
|
25
|
+
## Change Logs (1.2rc1), NEW!
|
|
26
|
+
### 1.2rc1
|
|
27
|
+
- FULL ENGINE REVAMP! Check Documentation for more details.
|
|
24
28
|
### Version 1.1
|
|
25
29
|
- Added 1 New Library!
|
|
26
30
|
~ BrowserTools.Tabs
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
src/VertexEngine/VertexWebEngineCore/JSBridge.py
|
|
5
|
+
src/VertexEngine/VertexWebEngineCore/WebScene.py
|
|
6
|
+
src/VertexEngine/VertexWebEngineWidgets/EngineView.py
|
|
7
|
+
src/VertexEngine_WebEngine.egg-info/PKG-INFO
|
|
8
|
+
src/VertexEngine_WebEngine.egg-info/SOURCES.txt
|
|
9
|
+
src/VertexEngine_WebEngine.egg-info/dependency_links.txt
|
|
10
|
+
src/VertexEngine_WebEngine.egg-info/requires.txt
|
|
11
|
+
src/VertexEngine_WebEngine.egg-info/top_level.txt
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
from PyQt6.QtWidgets import QTabWidget, QToolButton
|
|
2
|
-
from PyQt6.QtCore import QUrl
|
|
3
|
-
from PyQt6.QtGui import QKeySequence, QShortcut
|
|
4
|
-
from PyQt6.QtCore import Qt
|
|
5
|
-
|
|
6
|
-
from WebEngine.WebEngine import WebEngine
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class BrowserTabs(QTabWidget):
|
|
10
|
-
def __init__(self, parent=None):
|
|
11
|
-
super().__init__(parent)
|
|
12
|
-
|
|
13
|
-
self.setTabsClosable(True)
|
|
14
|
-
self.setMovable(True)
|
|
15
|
-
|
|
16
|
-
self.tabCloseRequested.connect(self.close_tab)
|
|
17
|
-
self.currentChanged.connect(self.on_tab_changed)
|
|
18
|
-
|
|
19
|
-
# Keyboard shortcuts
|
|
20
|
-
QShortcut(QKeySequence("Ctrl+T"), self).activated.connect(self.new_tab)
|
|
21
|
-
QShortcut(QKeySequence("Ctrl+W"), self).activated.connect(self.close_current_tab)
|
|
22
|
-
# ➕ New Tab button
|
|
23
|
-
self.new_tab_btn = QToolButton(self)
|
|
24
|
-
self.new_tab_btn.setText("+")
|
|
25
|
-
self.new_tab_btn.setAutoRaise(True)
|
|
26
|
-
self.new_tab_btn.setToolTip("New Tab")
|
|
27
|
-
|
|
28
|
-
self.new_tab_btn.clicked.connect(self.new_tab)
|
|
29
|
-
|
|
30
|
-
self.setCornerWidget(
|
|
31
|
-
self.new_tab_btn,
|
|
32
|
-
Qt.Corner.TopRightCorner
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
self.new_tab("https://www.google.com")
|
|
36
|
-
|
|
37
|
-
# ➕ Create tab
|
|
38
|
-
def new_tab(self, url=None):
|
|
39
|
-
if not isinstance(url, str):
|
|
40
|
-
url = "https://www.google.com"
|
|
41
|
-
|
|
42
|
-
print("🆕 New tab:", url)
|
|
43
|
-
|
|
44
|
-
engine = WebEngine()
|
|
45
|
-
index = self.addTab(engine, "New Tab")
|
|
46
|
-
self.setCurrentIndex(index)
|
|
47
|
-
|
|
48
|
-
engine.load_url(url)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
# ❌ Close tab by index
|
|
52
|
-
def close_tab(self, index):
|
|
53
|
-
if self.count() <= 1:
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
widget = self.widget(index)
|
|
57
|
-
self.removeTab(index)
|
|
58
|
-
widget.deleteLater()
|
|
59
|
-
|
|
60
|
-
# ❌ Close current tab
|
|
61
|
-
def close_current_tab(self):
|
|
62
|
-
self.close_tab(self.currentIndex())
|
|
63
|
-
|
|
64
|
-
def safe_remove(self, index):
|
|
65
|
-
if 0 <= index < self.count():
|
|
66
|
-
self.removeTab(index)
|
|
67
|
-
|
|
68
|
-
def update_tab_title(self, engine, title):
|
|
69
|
-
index = self.indexOf(engine)
|
|
70
|
-
if index != -1:
|
|
71
|
-
self.setTabText(index, title[:24])
|
|
72
|
-
|
|
73
|
-
# 🔀 Tab switch handler
|
|
74
|
-
def on_tab_changed(self, index):
|
|
75
|
-
engine = self.widget(index)
|
|
76
|
-
if not engine:
|
|
77
|
-
return
|
|
78
|
-
|
|
79
|
-
url = engine.url().toString()
|
|
80
|
-
print("🔀 Switched to tab:", url)
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
from PyQt6.QtWebEngineWidgets import QWebEngineView
|
|
2
|
-
from PyQt6.QtGui import QKeySequence, QShortcut
|
|
3
|
-
from PyQt6.QtWebChannel import QWebChannel
|
|
4
|
-
from PyQt6.QtCore import QUrl
|
|
5
|
-
from WebView.profile import WebProfile
|
|
6
|
-
from WebView.WebPage import WebPage
|
|
7
|
-
from WebView.bridge import JSBridge
|
|
8
|
-
|
|
9
|
-
class WebEngine(QWebEngineView):
|
|
10
|
-
def __init__(self, parent=None):
|
|
11
|
-
super().__init__(parent)
|
|
12
|
-
|
|
13
|
-
self.profile = WebProfile(parent=self)
|
|
14
|
-
self.webpage = WebPage(self.profile, self)
|
|
15
|
-
self.setPage(self.webpage)
|
|
16
|
-
|
|
17
|
-
# JS Bridge
|
|
18
|
-
self.channel = QWebChannel()
|
|
19
|
-
self.bridge = JSBridge(self.webpage)
|
|
20
|
-
self.channel.registerObject("bridge", self.bridge)
|
|
21
|
-
self.webpage.setWebChannel(self.channel)
|
|
22
|
-
|
|
23
|
-
# DevTools
|
|
24
|
-
self._devtools = None
|
|
25
|
-
QShortcut(QKeySequence("Ctrl+Shift+I"), self).activated.connect(self.toggle_devtools)
|
|
26
|
-
|
|
27
|
-
self.load_home()
|
|
28
|
-
|
|
29
|
-
def toggle_devtools(self):
|
|
30
|
-
if self._devtools is None:
|
|
31
|
-
self._devtools = QWebEngineView()
|
|
32
|
-
self.webpage.setDevToolsPage(self._devtools.page())
|
|
33
|
-
self._devtools.resize(800, 600)
|
|
34
|
-
self._devtools.show()
|
|
35
|
-
else:
|
|
36
|
-
self._devtools.close()
|
|
37
|
-
self._devtools = None
|
|
38
|
-
|
|
39
|
-
def load_home(self):
|
|
40
|
-
html = """
|
|
41
|
-
<!DOCTYPE html>
|
|
42
|
-
<html>
|
|
43
|
-
<head>
|
|
44
|
-
<meta charset="utf-8">
|
|
45
|
-
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
|
|
46
|
-
<style>
|
|
47
|
-
body {
|
|
48
|
-
background:#0f0f14;
|
|
49
|
-
color:white;
|
|
50
|
-
font-family:monospace;
|
|
51
|
-
text-align:center;
|
|
52
|
-
margin-top:20vh;
|
|
53
|
-
}
|
|
54
|
-
button {
|
|
55
|
-
padding:10px 20px;
|
|
56
|
-
font-size:16px;
|
|
57
|
-
}
|
|
58
|
-
</style>
|
|
59
|
-
</head>
|
|
60
|
-
<body>
|
|
61
|
-
|
|
62
|
-
<h1>🔥 Vertex WebEngine</h1>
|
|
63
|
-
<button onclick="openSite()">Open example.com</button>
|
|
64
|
-
|
|
65
|
-
<script>
|
|
66
|
-
new QWebChannel(qt.webChannelTransport, channel => {
|
|
67
|
-
window.bridge = channel.objects.bridge;
|
|
68
|
-
bridge.log("Home loaded");
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
function openSite() {
|
|
72
|
-
bridge.emit("open_url", JSON.stringify({
|
|
73
|
-
url: "https://example.com"
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
76
|
-
</script>
|
|
77
|
-
|
|
78
|
-
</body>
|
|
79
|
-
</html>
|
|
80
|
-
"""
|
|
81
|
-
self.webpage.setHtml(html, QUrl("https://www.google.com"))
|
|
82
|
-
|
|
83
|
-
def load_url(self, url):
|
|
84
|
-
self.load(QUrl(url))
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from PyQt6.QtWebEngineCore import QWebEnginePage
|
|
2
|
-
|
|
3
|
-
class WebPage(QWebEnginePage):
|
|
4
|
-
|
|
5
|
-
BLOCKED = ["malware", "phishing"]
|
|
6
|
-
|
|
7
|
-
def __init__(self, profile, parent=None):
|
|
8
|
-
super().__init__(profile, parent)
|
|
9
|
-
|
|
10
|
-
def acceptNavigationRequest(self, url, nav_type, is_main_frame):
|
|
11
|
-
url_str = url.toString()
|
|
12
|
-
print("➡️ Navigating to:", url_str)
|
|
13
|
-
|
|
14
|
-
for bad in self.BLOCKED:
|
|
15
|
-
if bad in url_str:
|
|
16
|
-
print("🚫 Blocked URL")
|
|
17
|
-
return False
|
|
18
|
-
|
|
19
|
-
return True
|
|
20
|
-
|
|
21
|
-
def javaScriptConsoleMessage(self, level, message, line, source):
|
|
22
|
-
print(f"[JS:{level.name}] {message} ({source}:{line})")
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from PyQt6.QtCore import QObject, pyqtSlot
|
|
2
|
-
from PyQt6.QtCore import QUrl
|
|
3
|
-
import json
|
|
4
|
-
|
|
5
|
-
class JSBridge(QObject):
|
|
6
|
-
def __init__(self, page):
|
|
7
|
-
super().__init__()
|
|
8
|
-
self.page = page
|
|
9
|
-
|
|
10
|
-
@pyqtSlot(str)
|
|
11
|
-
def log(self, msg):
|
|
12
|
-
print("[JS → Python]", msg)
|
|
13
|
-
|
|
14
|
-
@pyqtSlot(str, str)
|
|
15
|
-
def emit(self, event, payload):
|
|
16
|
-
data = json.loads(payload)
|
|
17
|
-
|
|
18
|
-
if event == "open_url":
|
|
19
|
-
self.page.load(QUrl(data["url"]))
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
from PyQt6.QtWebEngineCore import QWebEngineProfile
|
|
2
|
-
import os
|
|
3
|
-
|
|
4
|
-
class WebProfile(QWebEngineProfile):
|
|
5
|
-
def __init__(self, name="CustomProfile", parent=None):
|
|
6
|
-
super().__init__(name, parent)
|
|
7
|
-
|
|
8
|
-
os.makedirs("downloads", exist_ok=True)
|
|
9
|
-
|
|
10
|
-
self.setHttpUserAgent(
|
|
11
|
-
"VertexWebEngine/1.0 (PyQt6)"
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
self.setPersistentCookiesPolicy(
|
|
15
|
-
QWebEngineProfile.PersistentCookiesPolicy.AllowPersistentCookies
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
self.setCachePath("webcache")
|
|
19
|
-
self.setPersistentStoragePath("webstorage")
|
|
20
|
-
|
|
21
|
-
self.downloadRequested.connect(self.on_download)
|
|
22
|
-
|
|
23
|
-
def on_download(self, download):
|
|
24
|
-
path = f"downloads/{download.downloadFileName()}"
|
|
25
|
-
download.setPath(path)
|
|
26
|
-
download.accept()
|
|
27
|
-
print("⬇️ Downloading:", path)
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
from PyQt6.QtWidgets import QApplication, QMainWindow
|
|
3
|
-
|
|
4
|
-
from BrowserTools.Tabs import BrowserTabs
|
|
5
|
-
|
|
6
|
-
app = QApplication(sys.argv)
|
|
7
|
-
|
|
8
|
-
window = QMainWindow()
|
|
9
|
-
window.setWindowTitle("Vertex Browser")
|
|
10
|
-
|
|
11
|
-
tabs = BrowserTabs()
|
|
12
|
-
window.setCentralWidget(tabs)
|
|
13
|
-
|
|
14
|
-
window.resize(1280, 800)
|
|
15
|
-
window.show()
|
|
16
|
-
|
|
17
|
-
sys.exit(app.exec())
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
from PyQt6.QtWidgets import (
|
|
2
|
-
QMainWindow, QWidget, QVBoxLayout,
|
|
3
|
-
QHBoxLayout, QPushButton, QLineEdit
|
|
4
|
-
)
|
|
5
|
-
from VertexEngine.WebEngine.WebEngine import WebEngine
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class MainWindow(QMainWindow):
|
|
9
|
-
def __init__(self):
|
|
10
|
-
super().__init__()
|
|
11
|
-
|
|
12
|
-
self.setWindowTitle("Vertex Browser")
|
|
13
|
-
self.resize(1100, 700)
|
|
14
|
-
|
|
15
|
-
# Central widget
|
|
16
|
-
central = QWidget()
|
|
17
|
-
self.setCentralWidget(central)
|
|
18
|
-
|
|
19
|
-
layout = QVBoxLayout(central)
|
|
20
|
-
|
|
21
|
-
# 🔧 Toolbar
|
|
22
|
-
toolbar = QHBoxLayout()
|
|
23
|
-
|
|
24
|
-
self.back_btn = QPushButton("←")
|
|
25
|
-
self.reload_btn = QPushButton("⟳")
|
|
26
|
-
self.home_btn = QPushButton("🏠")
|
|
27
|
-
self.url_bar = QLineEdit()
|
|
28
|
-
|
|
29
|
-
toolbar.addWidget(self.back_btn)
|
|
30
|
-
toolbar.addWidget(self.reload_btn)
|
|
31
|
-
toolbar.addWidget(self.home_btn)
|
|
32
|
-
toolbar.addWidget(self.url_bar)
|
|
33
|
-
|
|
34
|
-
layout.addLayout(toolbar)
|
|
35
|
-
|
|
36
|
-
# 🌐 WebEngine
|
|
37
|
-
self.web = WebEngine()
|
|
38
|
-
layout.addWidget(self.web)
|
|
39
|
-
|
|
40
|
-
# 🔗 Signals
|
|
41
|
-
self.back_btn.clicked.connect(self.web.back)
|
|
42
|
-
self.reload_btn.clicked.connect(self.web.reload)
|
|
43
|
-
self.home_btn.clicked.connect(self.go_home)
|
|
44
|
-
self.url_bar.returnPressed.connect(self.load_url)
|
|
45
|
-
|
|
46
|
-
self.web.urlChanged.connect(self.update_url)
|
|
47
|
-
|
|
48
|
-
# 🏠 Home
|
|
49
|
-
self.go_home()
|
|
50
|
-
|
|
51
|
-
def load_url(self):
|
|
52
|
-
url = self.url_bar.text()
|
|
53
|
-
if not url.startswith("http"):
|
|
54
|
-
url = "https://" + url
|
|
55
|
-
self.web.load_url(url)
|
|
56
|
-
|
|
57
|
-
def update_url(self, qurl):
|
|
58
|
-
self.url_bar.setText(qurl.toString())
|
|
59
|
-
|
|
60
|
-
def go_home(self):
|
|
61
|
-
self.web.load_url("https://example.com")
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
LICENSE
|
|
2
|
-
README.md
|
|
3
|
-
pyproject.toml
|
|
4
|
-
src/VertexEngine/main.py
|
|
5
|
-
src/VertexEngine/test.py
|
|
6
|
-
src/VertexEngine/BrowserTools/Tabs.py
|
|
7
|
-
src/VertexEngine/WebEngine/WebEngine.py
|
|
8
|
-
src/VertexEngine/WebView/WebPage.py
|
|
9
|
-
src/VertexEngine/WebView/bridge.py
|
|
10
|
-
src/VertexEngine/WebView/profile.py
|
|
11
|
-
src/VertexEngine_WebEngine.egg-info/PKG-INFO
|
|
12
|
-
src/VertexEngine_WebEngine.egg-info/SOURCES.txt
|
|
13
|
-
src/VertexEngine_WebEngine.egg-info/dependency_links.txt
|
|
14
|
-
src/VertexEngine_WebEngine.egg-info/requires.txt
|
|
15
|
-
src/VertexEngine_WebEngine.egg-info/top_level.txt
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|