First Commit

Signed-off-by: balazs <contact@balazsbirtalan.com>
main
Balazs Birtalan 2023-05-17 11:16:15 +01:00
parent 8b2688ba7d
commit 997d9e87c5
82 changed files with 2302 additions and 0 deletions

0
__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

48
base.py Normal file
View File

@ -0,0 +1,48 @@
import sys
import os
import configparser
from mouseevents import MouseEvents
from pynput import mouse
from sightfactory import SightFactory
from PyQt6.QtWidgets import QApplication
from pynput.mouse import Controller
def init():
global data, sights, mousectrl, app
#init the basic values
app = QApplication(sys.argv)
mousectrl = Controller()
sights = SightFactory()
data = {}
data["move"] = False
data["active_sight"] = "main"
data["sight_processes"] = {}
data["mouse_distance_x"] = 0
data["mouse_distance_y"] = 0
data["base_dir"]=os.path.abspath(os.getcwd())+os.path.sep
data["template_dir"]=data["base_dir"]+"place"+os.path.sep+"templates"+os.path.sep
#LOAD the template config content
loadConfigTemplate()
#Events
mouseevent = MouseEvents()
start()
def loadConfigTemplate():
config = configparser.ConfigParser()
config.sections()
config.read(data["template_dir"]+"config.ini")
if "DEFAULT" in config:
data["default_template"] = config["DEFAULT"]["default_template"]
data["default_template_dir"] = data["template_dir"]+data["default_template"]+os.path.sep
data["sight_mode"] = config["DEFAULT"]["sight_mode"]
print("Template config is loaded!")
else:
print("Missing 'DEFAULT' data from the templates config.ini folder. It can't start!")
def start():
# Creating the main Sight
sights.create("main","main");
sights.processes();
sights.show("main");
app.exec()

47
base.py.bak Normal file
View File

@ -0,0 +1,47 @@
import sys
import os
import configparser
from mouseevents import MouseEvents
from pynput import mouse
from sightfactory import SightFactory
from PyQt6.QtWidgets import QApplication
from pynput.mouse import Controller
def init():
global data, sights, mousectrl, app
#init the basic values
app = QApplication(sys.argv)
mousectrl = Controller()
sights = SightFactory()
data = {}
data["move"] = False
data["active_sight"] = "main"
data["sight_processes"] = {}
data["mouse_distance_x"] = 0
data["mouse_distance_y"] = 0
data["base_dir"]=os.path.abspath(os.getcwd())+os.path.sep
data["template_dir"]=data["base_dir"]+"place"+os.path.sep+"templates"+os.path.sep
#LOAD the template config content
loadConfigTemplate()
#Events
mouseevent = MouseEvents()
start()
def loadConfigTemplate():
config = configparser.ConfigParser()
config.sections()
config.read(data["template_dir"]+"config.ini")
if "DEFAULT" in config:
data["default_template"] = config["DEFAULT"]["default_template"]
data["default_template_dir"] = data["template_dir"]+data["default_template"]+os.path.sep
print("Template config is loaded!")
else:
print("Missing 'DEFAULT' data from the templates config.ini folder. It can't start!")
def start():
# Creating the main Sight
sights.create("main","main");
sights.processes();
sights.show("main");
app.exec()

19
browser.py Normal file
View File

@ -0,0 +1,19 @@
import base
from PyQt6.QtWebChannel import QWebChannel
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtCore import QUrl
class Browser(QWebEngineView):
def __init__(self):
super().__init__()
self.channel = QWebChannel()
def addObject(self, id, call_handler):
self.handler = call_handler
self.channel.registerObject(id, self.handler)
self.page().setWebChannel(self.channel)
def loadContent(self, type):
print(base.data["default_template_dir"]+type+".html")
self.load(QUrl.fromLocalFile(base.data["default_template_dir"]+type+".html"))

19
browser.py.bak Normal file
View File

@ -0,0 +1,19 @@
import base
from PyQt6.QtWebChannel import QWebChannel
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtCore import QUrl
class Browser(QWebEngineView):
def __init__(self):
super().__init__()
self.channel = QWebChannel()
def addObject(self, id, call_handler):
self.handler = call_handler
self.channel.registerObject(id, self.handler)
self.page().setWebChannel(self.channel)
def loadContent(self, type):
print(base.data["default_template_dir"]+type+".html"))
self.load(QUrl.fromLocalFile(base.data["default_template_dir"]+type+".html"))

101
callhandler.py Normal file
View File

@ -0,0 +1,101 @@
import base
import random
from PyQt6.QtCore import QObject, pyqtSlot
class CallHandler(QObject):
def __init__(self, sight):
super().__init__()
self.sight = sight
@pyqtSlot(str)
def test(self, t):
print(t)
@pyqtSlot(str, result=str)
def test2(self, t):
print(t)
return t+"_return"
@pyqtSlot(result=str)
def getDefaultTemplate(self):
return base.data["default_template"]
@pyqtSlot(int)
def setWidth(self, width):
self.sight.resize(width, self.sight.height());
@pyqtSlot(int)
def setHeight(self, height):
self.sight.resize(self.sight.width(), height);
@pyqtSlot(str, str, result = str)
def create(self, id, type):
new_id = base.sights.create(id, type)
if new_id is not None:
base.sights.show(new_id)
return new_id;
@pyqtSlot(str, str, bool)
def addData(self, key, value, is_global = False):
if is_global:
base.sights.addGlobalData(key,value)
else:
self.sight.addData(key,value)
@pyqtSlot(str, bool, result=str)
def getData(self, key, is_global = False):
if is_global:
return base.sights.getGlobalData(key)
return self.sight.getData(key)
@pyqtSlot()
def activeSight(self):
print("active")
if base.data["active_sight"] != self.sight.getId():
print(self.sight.getId())
base.data["active_sight"] = self.sight.getId()
@pyqtSlot()
def close(self):
base.sights.close(self.sight.getId())
@pyqtSlot()
def setMaximized(self):
self.sight.showMaximized()
self.sight.setLayoutContentMargins(0,0,0,0) #because there will be a transparented line as a border
@pyqtSlot()
def setMinimize(self):
self.sight.showMinimized()
@pyqtSlot()
def restoreDown(self):
self.sight.showNormal()
self.sight.setLayoutContentMargins(1,1,1,1) #because if it is no border then I get setgeometry warning what can't be set
@pyqtSlot()
def setFullscreen(self):
self.sight.showFullScreen()
"""@pyqtSlot(result=str)
def getTitle(self):
return self.sight.getTitle();
"""
@pyqtSlot()
def move(self):
base.data["move"] = True
@pyqtSlot()
def endmove(self):
base.data["move"] = False
@pyqtSlot()
def resize(self):
new_height = base.mousectrl.position[1]-self.sight.pos().y()
new_width = base.mousectrl.position[0]-self.sight.pos().x()
if(new_height<250):
new_height = 250
if(new_width<250):
new_width = 250
self.sight.resize( new_width, new_height)

100
callhandler.py.bak Normal file
View File

@ -0,0 +1,100 @@
import base
import random
from PyQt6.QtCore import QObject, pyqtSlot
class CallHandler(QObject):
def __init__(self, sight):
super().__init__()
self.sight = sight
@pyqtSlot(str)
def test(self, t):
print(t)
@pyqtSlot(str, result=str)
def test2(self, t):
print(t)
return t+"_return"
@pyqtSlot(result=str)
def getDefaultTemplate(self):
return base.data["default_template"]
@pyqtSlot(int)
def setWidth(self, width):
self.sight.resize(width, self.sight.height());
@pyqtSlot(int)
def setHeight(self, height):
self.sight.resize(self.sight.width(), height);
@pyqtSlot(str, str, result = str)
def create(self, id, type):
new_id = base.sights.create(id, type)
base.sights.show(new_id)
return new_id;
@pyqtSlot(str, str, bool)
def addData(self, key, value, is_global = False):
if is_global:
base.sights.addGlobalData(key,value)
else:
self.sight.addData(key,value)
@pyqtSlot(str, bool, result=str)
def getData(self, key, is_global = False):
if is_global:
return base.sights.getGlobalData(key)
return self.sight.getData(key)
@pyqtSlot()
def activeSight(self):
print("active")
if base.data["active_sight"] != self.sight.getId():
print(self.sight.getId())
base.data["active_sight"] = self.sight.getId()
@pyqtSlot()
def close(self):
base.sights.close(self.sight.getId())
@pyqtSlot()
def setMaximized(self):
self.sight.showMaximized()
self.sight.setLayoutContentMargins(0,0,0,0) #because there will be a transparented line as a border
@pyqtSlot()
def setMinimize(self):
self.sight.showMinimized()
@pyqtSlot()
def restoreDown(self):
self.sight.showNormal()
self.sight.setLayoutContentMargins(1,1,1,1) #because if it is no border then I get setgeometry warning what can't be set
@pyqtSlot()
def setFullscreen(self):
self.sight.showFullScreen()
"""@pyqtSlot(result=str)
def getTitle(self):
return self.sight.getTitle();
"""
@pyqtSlot()
def move(self):
base.data["move"] = True
@pyqtSlot()
def endmove(self):
base.data["move"] = False
@pyqtSlot()
def resize(self):
new_height = base.mousectrl.position[1]-self.sight.pos().y()
new_width = base.mousectrl.position[0]-self.sight.pos().x()
if(new_height<250):
new_height = 250
if(new_width<250):
new_width = 250
self.sight.resize( new_width, new_height)

View File

@ -0,0 +1 @@
<a href="#" id="screate" data-type="other" data-id="other">Create an "Other" sight!</a>

View File

@ -0,0 +1 @@
<a href="#" id="screate" data-type="other">Create an "Other" sight!</a>

View File

@ -0,0 +1,6 @@
<link rel="stylesheet" type="text/css" href="content/main_text/test.css">
<div id="example">This is a sentence.</div>
<script>
window.sight.test("This appear in the console from the content/main_text. The content files reach the window.sight.")
</script>

View File

@ -0,0 +1,6 @@
<link rel="stylesheet" type="text/css" href="content/main_text/test.css">
<div id="example">This is a sentence.</div>
<script>
window.sight.test("This appear in the console. The content files reach the window.sight.")
</script>

View File

@ -0,0 +1,3 @@
#example {
background-color: yellow;
}

View File

@ -0,0 +1,26 @@
body {
background-color: white;
}
#sight #stitlebar {
background-color: #4f9af3;
}
#sight #stitle {
color: white;
padding: 2px;
font-weight: bold;
font-family: monospace;
font-size: larger;
float: left;
}
#sight {
border: 4px solid #4f9af3;
}
#sight #content {
padding: 5px;
}
#sight #sclose:not([except]), #sight #sminimize:not([except]), #sight #stoggled:not([except]) {
height: 20px;
width: 20px;
float: right;
margin-left: 5px;
}

View File

@ -0,0 +1,35 @@
body {
background-color: white;
}
#sight #stitlebar {
background-color: #4f9af3;
}
#sight #stitle {
color: white;
padding: 2px;
font-weight: bold;
font-family: monospace;
font-size: larger;
float: left;
}
#sight #sresize {
width: 15px;
height: 15px;
background-color: none;
right: 0;
float: right;
bottom: 0;
position: absolute;
}
#sight {
border: 4px solid #4f9af3;
}
#sight #content {
padding: 5px;
}
#sight #sclose:not([except]), #sight #sminimize:not([except]), #sight #stoggled:not([except]) {
height: 20px;
width: 20px;
float: right;
margin-left: 5px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

View File

@ -0,0 +1,40 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/sight.css">
<link rel="stylesheet" type="text/css" href="css/template.css">
<script src="template.js"></script>
<script src="../../js/jquery-3.6.4.min.js"></script>
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script>
var init_sight={
'width' : 300,
'height' : 300
}
</script>
<script src="../../js/sight.js"></script>
<script>
$(document).ready(function(){
/*addData("name", "Balazs", true);
getData("name");*/
});
</script>
</head>
<body>
<main id="sight">
<div id="stitlebar">
<div id="stitle">Main Template</div>
<div id="sclose"></div>
<div id="stoggled"></div>
<div id="sminimize"></div>
</div>
<div id="content">
<div id="main_content"></div>
MAIN
<div id="main_text"></div>
</div>
<div id="sresize"></div>
</main>
</body>
</html>

View File

@ -0,0 +1,40 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/sight.css">
<link rel="stylesheet" type="text/css" href="css/template.css">
<script src="template.js"></script>
<script src="../../js/jquery-3.6.4.min.js"></script>
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script>
var init_sight={
'width' : 300,
'height' : 300
}
</script>
<script src="../../js/sight.js"></script>
<script>
$(document).ready(function(){
addData("name", "Balazs", true);
getData("name");
});
</script>
</head>
<body>
<main id="sight">
<div id="stitlebar">
<div id="stitle">Main Template</div>
<div id="sclose"></div>
<div id="stoggled"></div>
<div id="sminimize"></div>
</div>
<div id="content">
<div id="main_content"></div>
MAIN
<div id="main_text"></div>
</div>
<div id="sresize"></div>
</main>
</body>
</html>

View File

@ -0,0 +1,30 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/sight.css">
<link rel="stylesheet" type="text/css" href="css/template.css">
<script src="../../js/jquery-3.6.4.min.js"></script>
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script src="../../js/sight.js"></script>
<script>
$(document).ready(function(){
//getData("name", true);
});
</script>
</head>
<body>
<main id="sight">
<div id="stitlebar">
<div id="stitle">TITLE</div>
<div id="sclose"></div>
<div id="stoggled"></div>
<div id="sminimize"></div>
</div>
<div id="content">
OTHER
<a href="main.html">Open the main inside this sight!</a>
</div>
<div id="sresize"></div>
</main>
</body>
</html>

View File

@ -0,0 +1,30 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/sight.css">
<link rel="stylesheet" type="text/css" href="css/template.css">
<script src="../../js/jquery-3.6.4.min.js"></script>
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script src="../../js/sight.js"></script>
<script>
$(document).ready(function(){
getData("name", true);
});
</script>
</head>
<body>
<main id="sight">
<div id="stitlebar">
<div id="stitle">TITLE</div>
<div id="sclose"></div>
<div id="stoggled"></div>
<div id="sminimize"></div>
</div>
<div id="content">
OTHER
<a href="main.html">Open the main inside this sight!</a>
</div>
<div id="sresize"></div>
</main>
</body>
</html>

View File

View File

@ -0,0 +1,13 @@
var s_template={
'name' : "Base",
'author' : 'Balazs Birtalan',
'URL' : '/template/base',
'created': '2023'
}
// first element: "key" is the ID where the content html will be embedded
// second element: "value" is the folder name of that content folder where the content.html file's contents will be embedded
var s_contents={
'main_content':"main",
'main_text':"main_text",
}

View File

@ -0,0 +1,13 @@
var s_template={
'name' : "Base",
'author' : 'Balazs Birtalan',
'URL' : '/template/base',
'created': '2023'
}
// first element "key" is the ID where the content html will be embedded
// second element "value" is the folder name of that content folder where the content.html file's contents will be embedded
var s_contents={
'main_content':"main",
'main_text':"main_text",
}

3
core/template/config.ini Normal file
View File

@ -0,0 +1,3 @@
[DEFAULT]
default_template = base
sight_mode = single

View File

@ -0,0 +1,3 @@
[DEFAULT]
default_template = base
sight_mode = multiple

2
lib/jquery-3.6.4.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2
main.py Normal file
View File

@ -0,0 +1,2 @@
import base
base.init()

9
main.py.bak Normal file
View File

@ -0,0 +1,9 @@
import base
base.init()
"""
base.sights.create("main");
base.sights.processes();
base.sights.show("main");
base.app.exec()
"""

40
main.spec Normal file
View File

@ -0,0 +1,40 @@
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=['S:\\SIGHTPLACE\\DEV'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )

37
mouseevents.py Normal file
View File

@ -0,0 +1,37 @@
import base
from pynput import mouse
class MouseEvents():
def __init__(self):
listener = mouse.Listener(
on_move=on_move,
on_click=on_click,
on_scroll=on_scroll)
listener.start()
# MOUSE EVENTS/LISTENER
def on_move(x, y):
if base.data["move"]:
if base.data["mouse_distance_x"] == 0:
base.data["mouse_distance_x"] = base.sights.get(base.data["active_sight"]).pos().x()-x
if base.data["mouse_distance_y"] == 0:
base.data["mouse_distance_y"] = base.sights.get(base.data["active_sight"]).pos().y()-y
x_point = x+base.data["mouse_distance_x"]
y_point = y+base.data["mouse_distance_y"]
#print( str(x_point) + " x " + str(y_point))
base.sights.get(base.data["active_sight"]).move(x_point, y_point)
def on_click(x, y, button, pressed):
if pressed:
print("pressed on " +base.data["active_sight"])
else:
print("released")
base.data["mouse_distance_x"] = 0
base.data["mouse_distance_y"] = 0
base.data["move"] = False
def on_scroll(x, y, dx, dy):
print('Scrolled {0} at {1}'.format(
'down' if dy < 0 else 'up',
(x, y)))

39
mouseevents.py.bak Normal file
View File

@ -0,0 +1,39 @@
import base
from pynput import mouse
class MouseEvents():
def __init__(self):
listener = mouse.Listener(
on_move=on_move,
on_click=on_click,
on_scroll=on_scroll)
listener.start()
# MOUSE EVENTS/LISTENER
def on_move(x, y):
if base.data["move"]:
if base.data["mouse_distance_x"] == 0:
base.data["mouse_distance_x"] = base.sights.get(base.data["active_sight"]).pos().x()-x
if base.data["mouse_distance_y"] == 0:
base.data["mouse_distance_y"] = base.sights.get(base.data["active_sight"]).pos().y()-y
try:
x_point = x+base.data["mouse_distance_x"]
y_point = y+base.data["mouse_distance_y"]
#print( str(x_point) + " x " + str(y_point))
base.sights.get(base.data["active_sight"]).move(x_point, y_point)
except:
print("e")
def on_click(x, y, button, pressed):
if pressed:
print("pressed on " +base.data["active_sight"])
else:
print("released")
base.data["mouse_distance_x"] = 0
base.data["mouse_distance_y"] = 0
base.data["move"] = False
def on_scroll(x, y, dx, dy):
print('Scrolled {0} at {1}'.format(
'down' if dy < 0 else 'up',
(x, y)))

41
place/css/sight.css Normal file
View File

@ -0,0 +1,41 @@
body {
background-color: white;
}
* {
cursor: default;
}
a {
cursor: pointer;
}
body {
margin: 0px;
display: flex;
}
#sight #smove, #sight #sresize {
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Chrome/Safari/Opera */
-khtml-user-select: none; /* Konqueror */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently supported by any browser but < IE9 */
}
#sight #sresize {
cursor: nw-resize;
width: 15px;
height: 15px;
background-color: none;
right: 0;
float: right;
bottom: 0;
position: absolute;
}
#sight {
border: 4px solid grey;
display: block;
width: 100%;
}
#sight #stitlebar {
width: 100%;
height: 25px;
background-color: grey;
}

34
place/css/sight.css.bak Normal file
View File

@ -0,0 +1,34 @@
body {
background-color: white;
}
* {
cursor: default;
}
a {
cursor: pointer;
}
body {
margin: 0px;
display: flex;
}
#sight #smove, #sight #sresize {
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Chrome/Safari/Opera */
-khtml-user-select: none; /* Konqueror */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently supported by any browser but < IE9 */
}
#sight #sresize {
cursor: nw-resize;
}
#sight {
border: 4px solid grey;
display: block;
width: 100%;
}
#sight #stitlebar {
width: 100%;
height: 25px;
background-color: grey;
}

2
place/js/jquery-3.6.4.min.js vendored Normal file

File diff suppressed because one or more lines are too long

207
place/js/sight.js Normal file
View File

@ -0,0 +1,207 @@
if(navigator.userAgent.indexOf("QtWebEngine") > 0) {
new QWebChannel(qt.webChannelTransport, function (channel) {
// now I retrieve my object
window.sight = channel.objects.handler;
});
}
(function ( $ ) {
$.fn.s_create = function() {
$(document).on( "click", "#screate", function() {
event.preventDefault();
window.sight.create($(this).data("id"), $(this).data("type"), function(sight_id) {
/*alert(sight_id)*/
});
})
};
$.fn.s_close = function() {
$("body").on( "click", "#sclose", function() {
event.preventDefault();
window.sight.close();
})
};
$.fn.s_exit = function() {
this.bind("click.s_exit", function (event) {
event.preventDefault();
window.sight.exit();
});
};
$.fn.s_toggled = function() {
this.bind("click.s_toggled", function (event) {
event.preventDefault();
$(this).empty();
if($(this).attr('state') != "maximized") { // set to the maximized
window.sight.setMaximized();
$(this).attr("state", "maximized");
$(this).prepend('<img src="img/restoredown.png" height="20px" />')
} else { // set to the restore down
window.sight.restoreDown();
$(this).attr("state", "restoredown");
$(this).prepend('<img src="img/maximized.png" height="20px" />')
}
});
};
$.fn.s_maximized = function() {
this.bind("click.s_maximized", function (event) {
if($(this).attr('state') != "maximized") {
event.preventDefault();
$("#stoggled").empty();
window.sight.setMaximized()
$("#stoggled").prepend('<img src="img/restoredown.png" height="20px" />')
$("#stoggled").attr("state", "maximized");
}
});
};
$.fn.s_restoredown = function() {
this.bind("click.s_restoredown", function (event) {
if($(this).attr('state') != "restoredown") {
event.preventDefault();
$("#stoggled").empty();
window.sight.restoreDown();
$("#stoggled").attr("state", "restoredown");
$("#stoggled").prepend('<img src="img/maximized.png" height="20px" />')
}
});
};
$.fn.s_minimize = function() {
this.bind("click.s_minimize", function (event) {
event.preventDefault();
window.sight.setMinimize();
});
};
$.fn.s_fullscreen = function() {
this.bind("click.s_fullscreen", function (event) {
event.preventDefault();
window.sight.setFullscreen();
});
};
$.fn.s_title = function() {
$(this).text(window.sight.getTitle());
};
$.fn.s_titlebar = function() {
/* DISABLE TEXT SELECT */
$( this ).attr('unselectable', 'on').css('user-select', 'none').on('selectstart dragstart', false);
$( this ).mousedown(function() {
/*$( "body" ).attr('unselectable', 'on').css('user-select', 'none').on('selectstart dragstart', false);*/
if($(this).children("#stoggled").attr('state') == "restoredown")
window.sight.move();
})
.mouseup(function() {
/*$( "body" ).attr('unselectable', 'off').css('user-select', 'yes').on('selectstart dragstart', true);*/
window.sight.endmove();
});
};
$.fn.s_global_add = function() {
this.bind("click.s_global_add", function (event) {
event.preventDefault();
//window.sight.global($(this));
});
};
$(document).mousemove(function(e){
if(resizing)
window.sight.resize();
});
$(document).mouseup(function(e){
resizing = false
});
$(document).mousedown(function(e){
window.sight.activeSight();
});
var resizing = false;
$.fn.s_resize = function() {
$(this).mousemove(function(e){
event.preventDefault();
if(e.buttons==1)
resizing = true
});
};
}( jQuery ));
function addData(key, value, is_global = false) {
window.sight.addData(key,value, is_global);
}
function getData(key, is_global = false) {
window.sight.getData(key, is_global, function(result) {
alert(result)
});
}
function sclose() {
window.sight.close();
}
function setTitle(title) {
$("#stitle").text(title);
}
$(document).ready(function(){
// LOAD the contents into the Sight
if (typeof s_contents !== 'undefined') {
for ( const [id_name,content_folder] of Object.entries( s_contents ) ) {
$("#"+id_name).load("content/"+content_folder+"/content.html");
}
}
// INIT the Sight from init_sight variable
if (typeof init_sight !== 'undefined') {
for ( const [key,value] of Object.entries( init_sight ) ) {
window.sight.test(key + " - " + value)
switch(key) {
case 'width':
window.sight.setWidth(value)
break;
case 'height':
window.sight.setHeight(value)
break;
}
}
}
// INIT
/*window.sight.getDefaultTemplate(function(default_template) {
$('a[href]:not([href^="http://"]), a[href]:not([href^="https://"]), a[href]:not([href^="#"])').each(function(){
if(!$(this).hasClass( "nav-link" )) {
window.sight.test($(this).attr("href") + " je1");
var newUrl = './templates/'+default_template+'/'+$(this).attr("href");
$(this).attr("href", newUrl);
window.sight.test(newUrl + " je2");
}
});
});*/
if($("#stoggled").length) {
var attr = $("#stoggled").attr("state")
if (typeof attr !== 'undefined' && attr !== false && (attr == "restoredown" || attr == "maximized")) {
png_button = "restoredown"
if(attr == "restoredown")
png_button = "maximized"
$("#stoggled").prepend('<img src="img/'+png_button+'.png" height="20px" />');
if(attr == "maximized")
window.sight.setMaximized();
} else {
$("#stoggled").attr("state", "restoredown");
$("#stoggled").prepend('<img src="img/maximized.png" height="20px" />');
}
}
if($("#sclose").length) {
$("#sclose:not([except])").empty();
$("#sclose:not([except])").prepend('<img src="img/close.png" height="20px" />');
}
if($("#sminimize").length) {
$("#sminimize").empty();
$("#sminimize").prepend('<img src="img/minimize.png" height="20px" />');
}
/*window.sight.getTitle(function(result) {
setTitle(result);
});*/
// INIT END
$( "#screate" ).s_create();
$( "#sclose" ).s_close();
$( "#sexit" ).s_exit();
$( "#smaximized" ).s_maximized();
$( "#sminimize" ).s_minimize();
$( "#sresize" ).s_resize();
$( "#srestoredown" ).s_restoredown();
$( "#sfullscreen" ).s_fullscreen();
$( "#stitlebar" ).s_titlebar();
$( "#stoggled" ).s_toggled();
});

208
place/js/sight.js.bak Normal file
View File

@ -0,0 +1,208 @@
if(navigator.userAgent.indexOf("QtWebEngine") > 0) {
new QWebChannel(qt.webChannelTransport, function (channel) {
// now I retrieve my object
window.sight = channel.objects.handler;
});
}
(function ( $ ) {
$.fn.s_create = function() {
$(document).on( "click", "#screate", function() {
event.preventDefault();
var data_id = ""
window.sight.create(data_id, $(this).data("type"), function(sight_id) {
/*alert(sight_id)*/
});
})
};
$.fn.s_close = function() {
$("body").on( "click", "#sclose", function() {
event.preventDefault();
window.sight.close();
})
};
$.fn.s_exit = function() {
this.bind("click.s_exit", function (event) {
event.preventDefault();
window.sight.exit();
});
};
$.fn.s_toggled = function() {
this.bind("click.s_toggled", function (event) {
event.preventDefault();
$(this).empty();
if($(this).attr('state') != "maximized") { // set to the maximized
window.sight.setMaximized();
$(this).attr("state", "maximized");
$(this).prepend('<img src="img/restoredown.png" height="20px" />')
} else { // set to the restore down
window.sight.restoreDown();
$(this).attr("state", "restoredown");
$(this).prepend('<img src="img/maximized.png" height="20px" />')
}
});
};
$.fn.s_maximized = function() {
this.bind("click.s_maximized", function (event) {
if($(this).attr('state') != "maximized") {
event.preventDefault();
$("#stoggled").empty();
window.sight.setMaximized()
$("#stoggled").prepend('<img src="img/restoredown.png" height="20px" />')
$("#stoggled").attr("state", "maximized");
}
});
};
$.fn.s_restoredown = function() {
this.bind("click.s_restoredown", function (event) {
if($(this).attr('state') != "restoredown") {
event.preventDefault();
$("#stoggled").empty();
window.sight.restoreDown();
$("#stoggled").attr("state", "restoredown");
$("#stoggled").prepend('<img src="img/maximized.png" height="20px" />')
}
});
};
$.fn.s_minimize = function() {
this.bind("click.s_minimize", function (event) {
event.preventDefault();
window.sight.setMinimize();
});
};
$.fn.s_fullscreen = function() {
this.bind("click.s_fullscreen", function (event) {
event.preventDefault();
window.sight.setFullscreen();
});
};
$.fn.s_title = function() {
$(this).text(window.sight.getTitle());
};
$.fn.s_titlebar = function() {
/* DISABLE TEXT SELECT */
$( this ).attr('unselectable', 'on').css('user-select', 'none').on('selectstart dragstart', false);
$( this ).mousedown(function() {
/*$( "body" ).attr('unselectable', 'on').css('user-select', 'none').on('selectstart dragstart', false);*/
if($(this).children("#stoggled").attr('state') == "restoredown")
window.sight.move();
})
.mouseup(function() {
/*$( "body" ).attr('unselectable', 'off').css('user-select', 'yes').on('selectstart dragstart', true);*/
window.sight.endmove();
});
};
$.fn.s_global_add = function() {
this.bind("click.s_global_add", function (event) {
event.preventDefault();
//window.sight.global($(this));
});
};
$(document).mousemove(function(e){
if(resizing)
window.sight.resize();
});
$(document).mouseup(function(e){
resizing = false
});
$(document).mousedown(function(e){
window.sight.activeSight();
});
var resizing = false;
$.fn.s_resize = function() {
$(this).mousemove(function(e){
event.preventDefault();
if(e.buttons==1)
resizing = true
});
};
}( jQuery ));
function addData(key, value, is_global = false) {
window.sight.addData(key,value, is_global);
}
function getData(key, is_global = false) {
window.sight.getData(key, is_global, function(result) {
alert(result)
});
}
function sclose() {
window.sight.close();
}
function setTitle(title) {
$("#stitle").text(title);
}
$(document).ready(function(){
// LOAD the contents into the Sight
if (typeof s_contents !== 'undefined') {
for ( const [id_name,content_folder] of Object.entries( s_contents ) ) {
$("#"+id_name).load("content/"+content_folder+"/content.html");
}
}
// INIT the Sight from init_sight variable
if (typeof init_sight !== 'undefined') {
for ( const [key,value] of Object.entries( init_sight ) ) {
window.sight.test(key + " - " + value)
switch(key) {
case 'width':
window.sight.setWidth(value)
break;
case 'height':
window.sight.setHeight(value)
break;
}
}
}
// INIT
/*window.sight.getDefaultTemplate(function(default_template) {
$('a[href]:not([href^="http://"]), a[href]:not([href^="https://"]), a[href]:not([href^="#"])').each(function(){
if(!$(this).hasClass( "nav-link" )) {
window.sight.test($(this).attr("href") + " je1");
var newUrl = './templates/'+default_template+'/'+$(this).attr("href");
$(this).attr("href", newUrl);
window.sight.test(newUrl + " je2");
}
});
});*/
if($("#stoggled").length) {
var attr = $("#stoggled").attr("state")
if (typeof attr !== 'undefined' && attr !== false && (attr == "restoredown" || attr == "maximized")) {
png_button = "restoredown"
if(attr == "restoredown")
png_button = "maximized"
$("#stoggled").prepend('<img src="img/'+png_button+'.png" height="20px" />');
if(attr == "maximized")
window.sight.setMaximized();
} else {
$("#stoggled").attr("state", "restoredown");
$("#stoggled").prepend('<img src="img/maximized.png" height="20px" />');
}
}
if($("#sclose").length) {
$("#sclose:not([except])").empty();
$("#sclose:not([except])").prepend('<img src="img/close.png" height="20px" />');
}
if($("#sminimize").length) {
$("#sminimize").empty();
$("#sminimize").prepend('<img src="img/minimize.png" height="20px" />');
}
/*window.sight.getTitle(function(result) {
setTitle(result);
});*/
// INIT END
$( "#screate" ).s_create();
$( "#sclose" ).s_close();
$( "#sexit" ).s_exit();
$( "#smaximized" ).s_maximized();
$( "#sminimize" ).s_minimize();
$( "#sresize" ).s_resize();
$( "#srestoredown" ).s_restoredown();
$( "#sfullscreen" ).s_fullscreen();
$( "#stitlebar" ).s_titlebar();
$( "#stoggled" ).s_toggled();
});

View File

@ -0,0 +1,82 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
<meta name="viewport" id="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="styles.css" />
<link href="http://www.jqueryscript.net/css/jquerysctipttop.css" rel="stylesheet" type="text/css">
<title>jQuery xtr.js plugin Demo</title>
<style>
body { font-family:'Roboto'; background-color:#333; color:#fafafa;}
#wrapper {
margin: 150px auto;
width: 400px;
text-align: center
}
#wrapper div {
color:#fff;
}
</style>
</head>
<body>
<div id="jquery-script-menu">
<div class="jquery-script-center">
<ul>
<li><a href="http://www.jqueryscript.net/text/jQuery-Client-side-Translation-xtr/">Download This Plugin</a></li>
<li><a href="http://www.jqueryscript.net/">Back To jQueryScript.Net</a></li>
</ul>
<div class="jquery-script-ads"><script type="text/javascript"><!--
google_ad_client = "ca-pub-2783044520727903";
/* jQuery_demo */
google_ad_slot = "2780937993";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<div class="jquery-script-clear"></div>
</div>
</div>
<div id="wrapper">
<h1>jQuery xtr.js plugin Demo</h1>
<div xtr>Welcome</div>
<div xtr>Hello</div>
<div data-xtr-key="bye">Good Bye</div>
<label for="lang">Current language</label>
<select name="lang" id="lang">
<option value="reset">EN</option>
<option value="de">DE</option>
<option value="fr">FR</option>
<option value="es">ES</option>
</select>
</div>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="../jquery.xtr.min.js"></script>
<script>
$('body').xtr({t: data});
$('#lang').on('change', function() {
$('body').data('plugin_xtr').lang($(this).val());
});
</script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-36251023-1']);
_gaq.push(['_setDomainName', 'jqueryscript.net']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>

View File

@ -0,0 +1,27 @@
#wrapper {
font: 16px/18px Calibri;
margin: 0 auto;
width: 200px;
text-align: center
}
#wrapper div {
background: #28b7ff;
padding: 15px;
margin: 10px;
text-align: center
}
label {
font-weight: 700;
margin: 25px 0 5px;
display: block
}
select {
width: 100%;
height: 30px;
outline: 0;
cursor: pointer
}

View File

@ -0,0 +1,23 @@
#wrapper {
font: 16px / 18px Calibri;
margin: 0 auto;
width: 200px;
text-align: center;
div {
background: #28b7ff;
padding: 15px;
margin: 10px;
text-align: center;
}
}
label {
font-weight: bold;
margin: 25px 0 5px;
display: block;
}
select {
width: 100%;
height: 30px;
outline: none;
cursor: pointer;
}

View File

@ -0,0 +1,8 @@
var data = {
"close": {
en: "close",
hu: "Bezar",
it: "Vicino"
},
};

View File

@ -0,0 +1,88 @@
/*!
* July 2017
* xtr 1.0.0
* @author Mario Vidov
* @url http://vidov.it
* @twitter MarioVidov
* MIT license
*/
(function($) {
var pluginName = 'xtr';
var settings = {
default: 'en',
lang: 'en',
regExp: {
'': /\s/g,
'_': /[&<>"'`\/=]/g
}
};
var config = {
defaultClass: 'data-xtr-default',
langClass: 'data-xtr-lang',
langKey : 'data-xtr-key',
langOrig : 'data-xtr-original'
};
function Plugin(element, options) {
options = options || {};
this.$element = $(element);
this.options = $.extend(true, {}, settings, options);
this.selector = '[xtr]';
this.regExp = this.options.regExp;
this.default = this.options.default;
this.t = this.options.t;
this.l = this.options.lang;
this.$element.attr(config.langClass, this.l)
.attr(config.defaultClass, this.default);
this.init();
}
Plugin.prototype.lang = function(l) {
if (l && l === 'reset') {
this.l = this.default;
} else if (l) {
this.l = l;
}
this.init();
};
Plugin.prototype.set = function(index) {
var $el = $('[' + config.langKey + '="' + index + '"]');
var original = $el && $el.attr(config.langOrig) || index;
return (this.t && this.t[index] && this.t[index][this.l]) ? this.t[index][this.l] : original;
};
Plugin.prototype.init = function() {
var self = this;
this.$element.attr(config.langClass, this.l);
$(self.selector).add('[' + config.langKey + ']').each(function () {
var $this = $(this);
var key = $this.attr(config.langKey);
var original = $this.attr(config.langOrig);
var text = $this.text();
if (!key) {
key = text;
for (var i in self.regExp) {
key = key.replace(self.regExp[i], i);
}
$this.attr(config.langKey, key);
}
if (!original) {
$this.attr(config.langOrig, text);
}
$this.html(self.set(key));
});
};
$.fn[pluginName] = function (options) {
return this.each(function () {
if (!$.data(this, 'plugin_' + pluginName)) {
$.data(this, 'plugin_' + pluginName, new Plugin(this, options));
}
});
};
})(jQuery);

View File

@ -0,0 +1 @@
(function(t){var i="xtr";var a={"default":"en",lang:"en",regExp:{"":/\s/g,_:/[&<>"'`\/=]/g}};var e={defaultClass:"data-xtr-default",langClass:"data-xtr-lang",langKey:"data-xtr-key",langOrig:"data-xtr-original"};function s(i,s){s=s||{};this.$element=t(i);this.options=t.extend(true,{},a,s);this.selector="[xtr]";this.regExp=this.options.regExp;this.default=this.options.default;this.t=this.options.t;this.l=this.options.lang;this.$element.attr(e.langClass,this.l).attr(e.defaultClass,this.default);this.init()}s.prototype.lang=function(t){if(t&&t==="reset"){this.l=this.default}else if(t){this.l=t}this.init()};s.prototype.set=function(i){var a=t("["+e.langKey+'="'+i+'"]');var s=a&&a.attr(e.langOrig)||i;return this.t&&this.t[i]&&this.t[i][this.l]?this.t[i][this.l]:s};s.prototype.init=function(){var i=this;this.$element.attr(e.langClass,this.l);t(i.selector).add("["+e.langKey+"]").each(function(){var a=t(this);var s=a.attr(e.langKey);var n=a.attr(e.langOrig);var r=a.text();if(!s){s=r;for(var l in i.regExp){s=s.replace(i.regExp[l],l)}a.attr(e.langKey,s)}if(!n){a.attr(e.langOrig,r)}a.html(i.set(s))})};t.fn[i]=function(a){return this.each(function(){if(!t.data(this,"plugin_"+i)){t.data(this,"plugin_"+i,new s(this,a))}})}})(jQuery);

View File

@ -0,0 +1 @@
<a href="#" id="screate" data-type="other" data-id="other">Create an "Other" sight!</a>

View File

@ -0,0 +1 @@
<a href="#" id="screate" data-type="other">Create an "Other" sight!</a>

View File

@ -0,0 +1,6 @@
<link rel="stylesheet" type="text/css" href="content/main_text/test.css">
<div id="example">This is a sentence.</div>
<script>
window.sight.test("This appear in the console from the content/main_text. The content files reach the window.sight.")
</script>

View File

@ -0,0 +1,6 @@
<link rel="stylesheet" type="text/css" href="content/main_text/test.css">
<div id="example">This is a sentence.</div>
<script>
window.sight.test("This appear in the console. The content files reach the window.sight.")
</script>

View File

@ -0,0 +1,3 @@
#example {
background-color: yellow;
}

View File

@ -0,0 +1,26 @@
body {
background-color: white;
}
#sight #stitlebar {
background-color: #4f9af3;
}
#sight #stitle {
color: white;
padding: 2px;
font-weight: bold;
font-family: monospace;
font-size: larger;
float: left;
}
#sight {
border: 4px solid #4f9af3;
}
#sight #content {
padding: 5px;
}
#sight #sclose:not([except]), #sight #sminimize:not([except]), #sight #stoggled:not([except]) {
height: 20px;
width: 20px;
float: right;
margin-left: 5px;
}

View File

@ -0,0 +1,35 @@
body {
background-color: white;
}
#sight #stitlebar {
background-color: #4f9af3;
}
#sight #stitle {
color: white;
padding: 2px;
font-weight: bold;
font-family: monospace;
font-size: larger;
float: left;
}
#sight #sresize {
width: 15px;
height: 15px;
background-color: none;
right: 0;
float: right;
bottom: 0;
position: absolute;
}
#sight {
border: 4px solid #4f9af3;
}
#sight #content {
padding: 5px;
}
#sight #sclose:not([except]), #sight #sminimize:not([except]), #sight #stoggled:not([except]) {
height: 20px;
width: 20px;
float: right;
margin-left: 5px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 775 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

View File

@ -0,0 +1,40 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/sight.css">
<link rel="stylesheet" type="text/css" href="css/template.css">
<script src="template.js"></script>
<script src="../../js/jquery-3.6.4.min.js"></script>
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script>
var init_sight={
'width' : 300,
'height' : 300
}
</script>
<script src="../../js/sight.js"></script>
<script>
$(document).ready(function(){
/*addData("name", "Balazs", true);
getData("name");*/
});
</script>
</head>
<body>
<main id="sight">
<div id="stitlebar">
<div id="stitle">Main Template</div>
<div id="sclose"></div>
<div id="stoggled"></div>
<div id="sminimize"></div>
</div>
<div id="content">
<div id="main_content"></div>
MAIN
<div id="main_text"></div>
</div>
<div id="sresize"></div>
</main>
</body>
</html>

View File

@ -0,0 +1,40 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/sight.css">
<link rel="stylesheet" type="text/css" href="css/template.css">
<script src="template.js"></script>
<script src="../../js/jquery-3.6.4.min.js"></script>
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script>
var init_sight={
'width' : 300,
'height' : 300
}
</script>
<script src="../../js/sight.js"></script>
<script>
$(document).ready(function(){
addData("name", "Balazs", true);
getData("name");
});
</script>
</head>
<body>
<main id="sight">
<div id="stitlebar">
<div id="stitle">Main Template</div>
<div id="sclose"></div>
<div id="stoggled"></div>
<div id="sminimize"></div>
</div>
<div id="content">
<div id="main_content"></div>
MAIN
<div id="main_text"></div>
</div>
<div id="sresize"></div>
</main>
</body>
</html>

View File

@ -0,0 +1,30 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/sight.css">
<link rel="stylesheet" type="text/css" href="css/template.css">
<script src="../../js/jquery-3.6.4.min.js"></script>
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script src="../../js/sight.js"></script>
<script>
$(document).ready(function(){
//getData("name", true);
});
</script>
</head>
<body>
<main id="sight">
<div id="stitlebar">
<div id="stitle">TITLE</div>
<div id="sclose"></div>
<div id="stoggled"></div>
<div id="sminimize"></div>
</div>
<div id="content">
OTHER
<a href="main.html">Open the main inside this sight!</a>
</div>
<div id="sresize"></div>
</main>
</body>
</html>

View File

@ -0,0 +1,30 @@
<html>
<head>
<link rel="stylesheet" type="text/css" href="../../css/sight.css">
<link rel="stylesheet" type="text/css" href="css/template.css">
<script src="../../js/jquery-3.6.4.min.js"></script>
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script src="../../js/sight.js"></script>
<script>
$(document).ready(function(){
getData("name", true);
});
</script>
</head>
<body>
<main id="sight">
<div id="stitlebar">
<div id="stitle">TITLE</div>
<div id="sclose"></div>
<div id="stoggled"></div>
<div id="sminimize"></div>
</div>
<div id="content">
OTHER
<a href="main.html">Open the main inside this sight!</a>
</div>
<div id="sresize"></div>
</main>
</body>
</html>

View File

View File

@ -0,0 +1,13 @@
var s_template={
'name' : "Base",
'author' : 'Balazs Birtalan',
'URL' : '/template/base',
'created': '2023'
}
// first element: "key" is the ID where the content html will be embedded
// second element: "value" is the folder name of that content folder where the content.html file's contents will be embedded
var s_contents={
'main_content':"main",
'main_text':"main_text",
}

View File

@ -0,0 +1,13 @@
var s_template={
'name' : "Base",
'author' : 'Balazs Birtalan',
'URL' : '/template/base',
'created': '2023'
}
// first element "key" is the ID where the content html will be embedded
// second element "value" is the folder name of that content folder where the content.html file's contents will be embedded
var s_contents={
'main_content':"main",
'main_text':"main_text",
}

View File

@ -0,0 +1,3 @@
[DEFAULT]
default_template = base
sight_mode = single

View File

@ -0,0 +1,3 @@
[DEFAULT]
default_template = base
sight_mode = multiple

4
settings.py.bak Normal file
View File

@ -0,0 +1,4 @@
def init():
global data
data = []

194
sight .py.back Normal file
View File

@ -0,0 +1,194 @@
import os
import sys
import random
import base
from PyQt6.QtCore import QUrl, QObject, pyqtSlot, Qt
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWebChannel import QWebChannel
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout
class CallHandler(QObject):
def __init__(self, sight):
super().__init__()
self.sight = sight
@pyqtSlot(str)
def test(self, t):
print(t)
@pyqtSlot(str, result=str)
def test2(self, t):
print(t)
return t+"_return"
@pyqtSlot(str)
def create(self, t):
id = str(random.randrange(1000,9999))
createSight(id)
base.data["sight_processes"][id].show()
@pyqtSlot()
def activeSight(self):
print("active")
if base.data["active_sight"] != self.sight.getId():
print(self.sight.getId())
base.data["active_sight"] = self.sight.getId()
@pyqtSlot()
def close(self):
closeSight(self.sight.id)
"""if self.sight.id == "main":
app.exit(0)
else:
try:
base.data["sight_processes"][self.sight.id].close()
base.data["sight_processes"][self.sight.id].destroy()
del base.data["sight_processes"][self.sight.id]
print("The '"+self.sight.id+"' is closed now!")
base.processSight()
except KeyError:
print("KeyError: when closing "+self.sight.id)"""
@pyqtSlot()
def setMaximized(self):
self.sight.showMaximized()
@pyqtSlot()
def setMinimize(self):
self.sight.showMinimized()
@pyqtSlot()
def restoreDown(self):
self.sight.showNormal()
@pyqtSlot()
def setFullscreen(self):
self.sight.showFullScreen()
@pyqtSlot(result=str)
def getTitle(self):
print("IIIIID: ")
return self.sight.getTitle();
@pyqtSlot()
def move(self):
base.data["move"] = True
@pyqtSlot()
def endmove(self):
base.data["move"] = False
@pyqtSlot()
def resize(self):
global mousectrl
new_height = base.mousectrl.position[1]-self.sight.pos().y()
new_width = base.mousectrl.position[0]-self.sight.pos().x()
if(new_height<250):
new_height = 250
if(new_width<250):
new_width = 250
self.sight.resize( new_width, new_height)
class Browser(QWebEngineView):
def __init__(self, sight_id):
super().__init__()
self.id = sight_id
self.channel = QWebChannel()
self.handler = CallHandler(self)
self.channel.registerObject('handler', self.handler)
self.page().setWebChannel(self.channel)
self.title = sight_id
def getId(self):
return self.id
def setTitle(self, title):
self.title = title
def getTitle(self):
return self.title
def mouseMoveEvent(self, e):
print("mouseMoveEvent")
def mousePressEvent(self, e):
print("mousePressEvent")
def mouseReleaseEvent(self, e):
print("mouseReleaseEvent")
def mouseDoubleClickEvent(self, e):
print("mouseDoubleClickEvent")
class Sight(QWidget):
def __init__(self, sight_id):
super().__init__()
self.id = sight_id
base.data["active_sight"] = self.id
self.title = sight_id
self.setWindowFlags(Qt.WindowType.FramelessWindowHint | self.windowFlags())
self.browser = Browser(sight_id)
current_folder = os.path.abspath(os.getcwd())
html_file = current_folder + os.path.sep + "place" + os.path.sep + "templates" + os.path.sep + "base" + os.path.sep + "index.html"
print(html_file)
url = QUrl.fromLocalFile(html_file)
self.browser.load(url)
lay = QVBoxLayout(self)
lay.setSpacing(0);
lay.setContentsMargins(0, 0, 0, 0);
lay.addWidget(self.browser)
#self.setCentralWidget(self.browser)
def mouseMoveEvent(self, e):
print("mouseMoveEvent")
def mousePressEvent(self, e):
print("mousePressEvent")
def mouseReleaseEvent(self, e):
print("mouseReleaseEvent")
def mouseDoubleClickEvent(self, e):
print("mouseDoubleClickEvent")
def getId(self):
return self.id
def createSight(id):
if id != "main":
base.data["sight_processes"][id] = Sight(id)
base.data["sight_processes"][id].show()
print("The '"+id+"' is opened now!")
base.processSight()
else:
print("The 'main' id is the main active windows which is occupied!")
def closeSight(id):
if id == "main":
app.exit(0)
else:
try:
base.data["sight_processes"][id] .close()
base.data["sight_processes"][id] .destroy()
del base.data["sight_processes"][id]
print("The '"+id+"' is closed now!")
base.processSight()
except KeyError:
print("KeyError: when closing "+id)
app = QApplication(sys.argv)
base.data["sight_processes"]["main"] = Sight("main")
base.data["sight_processes"]["main"].show()
app.exec()

47
sight.py Normal file
View File

@ -0,0 +1,47 @@
import base
from callhandler import CallHandler
from browser import Browser
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QMainWindow, QWidget, QVBoxLayout
class Sight(QWidget):
def __init__(self, id, type):
super().__init__()
self.id = id
self.type = type
self.data = {} # private data(s) of the sight
base.data["active_sight"] = self.id
self.title = id
self.setWindowFlags(Qt.WindowType(0x00000800)) # remove the os windows frame (borders, close and other buttons
self.setAttribute(Qt.WidgetAttribute(0x78)) # (int: 120)) # Make Transparent
self.browser = Browser()
self.browser.addObject('handler', CallHandler(self) )
self.browser.loadContent(type)
self.layout = QVBoxLayout()
self.layout.addWidget(self.browser)
self.layout.setSpacing(0);
self.layout.setContentsMargins(1, 1, 1, 1); #Need 1,1,1,1 if it is 0,0,0,0 I got setgeometry warnings
self.setLayout(self.layout)
def setLayoutContentMargins(self,a,b,c,d):
self.layout.setContentsMargins(a, b, c, d)
def setTitle(self, title):
self.title = title
def getTitle(self):
return self.title
def getId(self):
return self.id
def addData(self, key, value):
self.data[key] = value
def getData(self, key):
if key in self.data:
return self.data[key]
return None

168
sight.py.2back Normal file
View File

@ -0,0 +1,168 @@
import os
import sys
import random
import base
from PyQt6.QtCore import QUrl, QObject, pyqtSlot, Qt
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWebChannel import QWebChannel
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout
class CallHandler(QObject):
def __init__(self, sight):
super().__init__()
self.sight = sight
@pyqtSlot(str)
def test(self, t):
print(t)
@pyqtSlot(str, result=str)
def test2(self, t):
print(t)
return t+"_return"
@pyqtSlot(str)
def create(self, t):
id = str(random.randrange(1000,9999))
createSight(id)
base.data["sight_processes"][id].show()
@pyqtSlot()
def activeSight(self):
print("active")
if base.data["active_sight"] != self.sight.getId():
print(self.sight.getId())
base.data["active_sight"] = self.sight.getId()
@pyqtSlot()
def close(self):
closeSight(self.sight.id)
"""if self.sight.id == "main":
app.exit(0)
else:
try:
base.data["sight_processes"][self.sight.id].close()
base.data["sight_processes"][self.sight.id].destroy()
del base.data["sight_processes"][self.sight.id]
print("The '"+self.sight.id+"' is closed now!")
base.processSight()
except KeyError:
print("KeyError: when closing "+self.sight.id)"""
@pyqtSlot()
def setMaximized(self):
self.sight.showMaximized()
@pyqtSlot()
def setMinimize(self):
self.sight.showMinimized()
@pyqtSlot()
def restoreDown(self):
self.sight.showNormal()
@pyqtSlot()
def setFullscreen(self):
self.sight.showFullScreen()
@pyqtSlot(result=str)
def getTitle(self):
print("IIIIID: ")
return self.sight.getTitle();
@pyqtSlot()
def move(self):
base.data["move"] = True
@pyqtSlot()
def endmove(self):
base.data["move"] = False
@pyqtSlot()
def resize(self):
global mousectrl
new_height = base.mousectrl.position[1]-self.sight.pos().y()
new_width = base.mousectrl.position[0]-self.sight.pos().x()
if(new_height<250):
new_height = 250
if(new_width<250):
new_width = 250
self.sight.resize( new_width, new_height)
class Browser(QWebEngineView):
def __init__(self):
super().__init__()
self.channel = QWebChannel()
def addHandler(self, id, call_handler):
self.handler = call_handler
self.channel.registerObject(id, self.handler)
self.page().setWebChannel(self.channel)
class Sight(QWidget):
def __init__(self, sight_id):
super().__init__()
self.id = sight_id
base.data["active_sight"] = self.id
self.title = sight_id
self.setWindowFlags(Qt.WindowType.FramelessWindowHint | self.windowFlags())
self.browser = Browser()
self.browser.addHandler('handler', CallHandler(self) )
#self.channel = QWebChannel()
#self.handler = CallHandler(self)
#self.channel.registerObject('handler', self.handler)
#self.browser.page().setWebChannel(self.channel)
current_folder = os.path.abspath(os.getcwd())
html_file = current_folder + os.path.sep + "place" + os.path.sep + "templates" + os.path.sep + "base" + os.path.sep + "index.html"
print(html_file)
url = QUrl.fromLocalFile(html_file)
self.browser.load(url)
lay = QVBoxLayout(self)
lay.setSpacing(0);
lay.setContentsMargins(0, 0, 0, 0);
lay.addWidget(self.browser)
#self.setCentralWidget(self.browser)
def setTitle(self, title):
self.title = title
def getTitle(self):
return self.title
def getId(self):
return self.id
def createSight(id):
if id != "main":
base.data["sight_processes"][id] = Sight(id)
base.data["sight_processes"][id].show()
print("The '"+id+"' is opened now!")
base.processSight()
else:
print("The 'main' id is the main active windows which is occupied!")
def closeSight(id):
if id == "main":
app.exit(0)
else:
try:
base.data["sight_processes"][id] .close()
base.data["sight_processes"][id] .destroy()
del base.data["sight_processes"][id]
print("The '"+id+"' is closed now!")
base.processSight()
except KeyError:
print("KeyError: when closing "+id)
app = QApplication(sys.argv)
base.data["sight_processes"]["main"] = Sight("main")
base.data["sight_processes"]["main"].show()
app.exec()

47
sight.py.bak Normal file
View File

@ -0,0 +1,47 @@
import base
from callhandler import CallHandler
from browser import Browser
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QMainWindow, QWidget, QVBoxLayout
class Sight(QWidget):
def __init__(self, id, type):
super().__init__()
self.id = id
self.type = type
self.data = {} # private data of the sight
base.data["active_sight"] = self.id
self.title = id
self.setWindowFlags(Qt.WindowType(0x00000800)) # remove the os windows frame (borders, close and other buttons
self.setAttribute(Qt.WidgetAttribute(0x78)) # (int: 120)) # Make Transparent
self.browser = Browser()
self.browser.addObject('handler', CallHandler(self) )
self.browser.loadContent(type)
self.layout = QVBoxLayout()
self.layout.addWidget(self.browser)
self.layout.setSpacing(0);
self.layout.setContentsMargins(1, 1, 1, 1); #Need 1,1,1,1 if it is 0,0,0,0 I got setgeometry warnings
self.setLayout(self.layout)
def setLayoutContentMargins(self,a,b,c,d):
self.layout.setContentsMargins(a, b, c, d)
def setTitle(self, title):
self.title = title
def getTitle(self):
return self.title
def getId(self):
return self.id
def addData(self, key, value):
self.data[key] = value
def getData(self, key):
if key in self.data:
return self.data[key]
return None

79
sightfactory.py Normal file
View File

@ -0,0 +1,79 @@
import base
import random
from sight import Sight
class SightFactory():
def __init__(self):
self.list = {}
self.data = {} #Global data(s) for the sight(s)
def create(self, id, type):
print("----- "+type+"-"+str(id)+"-------")
if str(id) == "main" and self.checkKey(id):
print("The 'main' window already exist! You can't create more than one 'main' type window!")
return None
if base.data["sight_mode"] == "single":
if len(id) == 0:
print("No ID was given! In single mode need declare an ID to the Sight in advance!")
return None
if self.checkKey(id):
print("This ['"+type+"'-'"+str(id)+"'] already exist!")
return None
if base.data["sight_mode"] == "multiple":
if len(id) == 0:
id = self.createUniqueId()
if len(id) > 0 and self.checkKey(id) and str(id) != "main":
id = self.createUniqueId()
self.list[id] = Sight(id,type)
print("The ['"+type+"'-'"+str(id)+"'] is created now!")
return id
def show(self, id):
if self.checkKey(id):
self.list[id].show()
print("The '"+str(id)+"' sight is showed!")
return True
print("This '"+str(id)+"' id isn't exist to show!")
return False
def get(self, id):
if self.checkKey(id):
return self.list[id]
print("This '"+str(id)+"' id isn't exist to get!")
def close(self, id):
if self.checkKey(id):
if id == "main":
print("Program Exit!")
base.app.exit(0)
self.list[id].close()
self.list[id].deleteLater()
del self.list[id]
print("The '"+str(id)+"' is closed now!")
return True
else:
print("The '"+str(id)+"' isn't exist'")
return False
def processes(self):
print(self.list)
def checkKey(self, id):
if id in self.list:
return True
return False
def addGlobalData(self, key, value):
self.data[key] = value
def getGlobalData(self, key):
if key in self.data:
return self.data[key]
return None
def createUniqueId(self):
new_id = str(random.randint(1000, 9999))
if self.checkKey(new_id):
self.createUniqueId()
return new_id

79
sightfactory.py.bak Normal file
View File

@ -0,0 +1,79 @@
import base
import random
from sight import Sight
class SightFactory():
def __init__(self):
self.list = {}
self.data = {} #Global data(s) for the sight(s)
def create(self, id, type):
print("----- "+type+"-"+str(id)+"-------")
if str(id) == "main" and self.checkKey(id):
print("The 'main' window already exist! You can't create more than one 'main' type window!")
return None
if base.data["sight_mode"] == "single":
if len(id) == 0:
print("No ID was given! In single mode need declare an ID to the Sight in advance!")
return None
if self.checkKey(id):
print("This ['"+type+"'-'"+str(id)+"'] already exist!")
return None
if base.data["sight_mode"] == "multiple":
if len(id) == 0:
id = self.createUniqueId()
if len(id) > 0 and self.checkKey(id) and str(id) != "main":
id = self.createUniqueId()
self.list[id] = Sight(id,type)
print("The ['"+type+"'-'"+str(id)+"'] is created now!")
return id
def show(self, id):
if self.checkKey(id):
self.list[id].show()
print("The '"+str(id)+"' sight is showed!")
return True
print("This '"+str(id)+"' id isn't exist to show!")
return False
def get(self, id):
if self.checkKey(id):
return self.list[id]
print("This '"+str(id)+"' id isn't exist to get!")
def close(self, id):
if self.checkKey(id):
if id == "main":
print("Program Exit!")
base.app.exit(0)
self.list[id].close()
self.list[id].destroy()
del self.list[id]
print("The '"+str(id)+"' is closed now!")
return True
else:
print("The '"+str(id)+"' isn't exist'")
return False
def processes(self):
print(self.list)
def checkKey(self, id):
if id in self.list:
return True
return False
def addGlobalData(self, key, value):
self.data[key] = value
def getGlobalData(self, key):
if key in self.data:
return self.data[key]
return None
def createUniqueId(self):
new_id = str(random.randint(1000, 9999))
if self.checkKey(new_id):
self.createUniqueId()
return new_id