add files
This commit is contained in:
@@ -3,3 +3,20 @@ select = ["B", "D3", "D4", "E", "F"]
|
|||||||
|
|
||||||
# Never enforce `E501` (line length violations). This should be handled by formatters.
|
# Never enforce `E501` (line length violations). This should be handled by formatters.
|
||||||
ignore = ["E501","F401"]
|
ignore = ["E501","F401"]
|
||||||
|
exclude = [
|
||||||
|
".trunk",
|
||||||
|
".git",
|
||||||
|
".github",
|
||||||
|
"build",
|
||||||
|
"dist",
|
||||||
|
"docs",
|
||||||
|
"examples",
|
||||||
|
"tests",
|
||||||
|
".history",
|
||||||
|
".vscode",
|
||||||
|
"venv",
|
||||||
|
".venv",
|
||||||
|
"__pycache__",
|
||||||
|
]
|
||||||
|
line-length = 88
|
||||||
|
indent-width = 4
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ lint:
|
|||||||
- trivy
|
- trivy
|
||||||
- trufflehog
|
- trufflehog
|
||||||
enabled:
|
enabled:
|
||||||
|
- osv-scanner@1.6.1
|
||||||
- sql-formatter@15.1.2
|
- sql-formatter@15.1.2
|
||||||
- sqlfluff@2.3.5
|
- sqlfluff@2.3.5
|
||||||
- isort@5.13.2
|
- isort@5.13.2
|
||||||
|
|||||||
0
__main__.py
Normal file
0
__main__.py
Normal file
19
database_testing.py
Normal file
19
database_testing.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
from src.backend.database import Database
|
||||||
|
from src.logic.dataclass import ApparatData
|
||||||
|
|
||||||
|
apparat = ApparatData()
|
||||||
|
apparat.appname = "testapparat123"
|
||||||
|
apparat.appnr = 155
|
||||||
|
apparat.dauerapp = True
|
||||||
|
apparat.profname = "Mustermanns, Max"
|
||||||
|
apparat.subject = "Physik"
|
||||||
|
apparat.semester = "SoSe 2021"
|
||||||
|
|
||||||
|
|
||||||
|
files = {"name": "test.png", "type": "png",
|
||||||
|
"path": r"C:\Users\aky547\Desktop\test.png"}
|
||||||
|
db = Database()
|
||||||
|
# print(db.recreate_file("testfile.pdf",files,3))
|
||||||
|
# db.insert_file(files,3)
|
||||||
|
# recreate_file("test.pdf",files,1))#insert_file(files,1))
|
||||||
|
db.get_apparats_name(70)
|
||||||
46
db_testing.py
Normal file
46
db_testing.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
from omegaconf import OmegaConf
|
||||||
|
|
||||||
|
from codebase import Database
|
||||||
|
from codebase.pickles import load_pickle, make_pickle
|
||||||
|
from webrequest import BibTextTransformer, WebRequest
|
||||||
|
|
||||||
|
config = OmegaConf.load("config.yaml")
|
||||||
|
db = Database()
|
||||||
|
# # # f = db.get_media(1, 1)
|
||||||
|
# # # dataclass_objects = []
|
||||||
|
|
||||||
|
# # # for dataclass_str in f:
|
||||||
|
# # # print(f"dataclass {dataclass_str}")
|
||||||
|
# # # # dataclass_obj = ast.literal_eval(dataclass_str[0])
|
||||||
|
# # # dataclass_objects.append(dataclass_str)
|
||||||
|
|
||||||
|
# # # cla = BookData().from_string(dataclass_objects[0])
|
||||||
|
# # # print(type(cla))
|
||||||
|
# # book = (
|
||||||
|
# # BibTextTransformer("ARRAY")
|
||||||
|
# # .get_data(WebRequest().get_ppn("ST 250 U42 (15)").get_data())
|
||||||
|
# # .return_data()
|
||||||
|
# # )
|
||||||
|
# # print(book)
|
||||||
|
|
||||||
|
# # bpickle = make_pickle(book)
|
||||||
|
# # print(bpickle)
|
||||||
|
|
||||||
|
# # print(load_pickle(bpickle))
|
||||||
|
|
||||||
|
|
||||||
|
# # # print(pickle.dumps(book), type(pickle.dumps(book)))
|
||||||
|
|
||||||
|
# # # db.add_medium(book, "2", "1")
|
||||||
|
# # # db.get_app_data("1", "Testapparat")
|
||||||
|
|
||||||
|
# # books = db.get_media(1, 1, 0)
|
||||||
|
|
||||||
|
# # print(len(books))
|
||||||
|
# book = db.get_specific_book(16)
|
||||||
|
|
||||||
|
# print(book)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(db.get_media(15, 2))
|
||||||
65
log.py
Normal file
65
log.py
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
if not os.path.exists("logs"):
|
||||||
|
os.mkdir("logs")
|
||||||
|
with open("logs/application.log", "w") as f:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Create a common file handler for all loggers
|
||||||
|
common_file_handler = logging.FileHandler("logs/application.log")
|
||||||
|
common_file_handler.setLevel(logging.DEBUG)
|
||||||
|
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||||
|
common_file_handler.setFormatter(formatter)
|
||||||
|
|
||||||
|
|
||||||
|
class MyLogger:
|
||||||
|
def __init__(self, logger_name):
|
||||||
|
self.logger = logging.getLogger(logger_name)
|
||||||
|
self.logger.setLevel(logging.DEBUG)
|
||||||
|
self.logger.addHandler(common_file_handler)
|
||||||
|
self.encoding = "utf-8"
|
||||||
|
|
||||||
|
def log_info(self, message: str):
|
||||||
|
# ensure that the message is encoded in utf-8
|
||||||
|
self.logger.info(message.encode(self.encoding))
|
||||||
|
|
||||||
|
def log_debug(self, message: str):
|
||||||
|
self.logger.debug(message.encode(self.encoding))
|
||||||
|
|
||||||
|
def log_warning(self, message: str):
|
||||||
|
self.logger.warning(message.encode(self.encoding))
|
||||||
|
|
||||||
|
def log_error(self, message: str):
|
||||||
|
self.logger.error(message.encode(self.encoding))
|
||||||
|
|
||||||
|
def log_critical(self, message: str):
|
||||||
|
self.logger.critical(message.encode(self.encoding))
|
||||||
|
|
||||||
|
def log_exception(self, message: str):
|
||||||
|
self.logger.exception(message)
|
||||||
|
|
||||||
|
|
||||||
|
# Usage example:
|
||||||
|
if __name__ == "__main__":
|
||||||
|
logger1 = MyLogger("Logger1")
|
||||||
|
logger2 = MyLogger("Logger2")
|
||||||
|
|
||||||
|
logger1.log_info("This is an info message from Logger1")
|
||||||
|
logger1.log_debug("This is a debug message from Logger1")
|
||||||
|
logger1.log_warning("This is a warning message from Logger1")
|
||||||
|
logger1.log_error("This is an error message from Logger1")
|
||||||
|
logger1.log_critical("This is a critical message from Logger1")
|
||||||
|
|
||||||
|
logger2.log_info("This is an info message from Logger2")
|
||||||
|
logger2.log_debug("This is a debug message from Logger2")
|
||||||
|
logger2.log_warning("This is a warning message from Logger2")
|
||||||
|
logger2.log_error("This is an error message from Logger2")
|
||||||
|
logger2.log_critical("This is a critical message from Logger2")
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Simulate an exception
|
||||||
|
raise Exception("An exception occurred")
|
||||||
|
except Exception as e:
|
||||||
|
logger1.log_exception("An exception occurred in Logger1")
|
||||||
|
logger2.log_exception("An exception occurred in Logger2")
|
||||||
0
src/__init__.py
Normal file
0
src/__init__.py
Normal file
0
src/backend/__init__.py
Normal file
0
src/backend/__init__.py
Normal file
52
src/backend/admin_console.py
Normal file
52
src/backend/admin_console.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
import hashlib
|
||||||
|
import random
|
||||||
|
|
||||||
|
from src.backend.database import Database
|
||||||
|
|
||||||
|
|
||||||
|
# change passwords for apparats, change passwords for users, list users, create and delete users etc
|
||||||
|
# create a class that has all commands. for each command, create a function that does the thing
|
||||||
|
class AdminCommands:
|
||||||
|
def __init__(self):
|
||||||
|
self.db = Database()
|
||||||
|
|
||||||
|
def create_password(self, password):
|
||||||
|
salt = self.create_salt()
|
||||||
|
hashed_password = self.hash_password(password)
|
||||||
|
return (hashed_password,salt)
|
||||||
|
def create_salt(self):
|
||||||
|
return "".join(
|
||||||
|
random.choices(
|
||||||
|
"abcdefghijklmnopqrstuvwxyzQWERTZUIOPLKJHGFDSAYXCVBNM0123456789", k=16
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def create_admin(self):
|
||||||
|
salt = self.create_salt()
|
||||||
|
hashed_password = self.hash_password("admin")
|
||||||
|
self.db.create_user("admin", salt+hashed_password, "admin", salt)
|
||||||
|
|
||||||
|
def hash_password(self, password):
|
||||||
|
hashed = hashlib.sha256((password).encode("utf-8")).hexdigest()
|
||||||
|
return hashed
|
||||||
|
|
||||||
|
def list_users(self):
|
||||||
|
return self.db.get_users()
|
||||||
|
|
||||||
|
def delete_user(self, username):
|
||||||
|
self.db.delete_user(username)
|
||||||
|
|
||||||
|
def change_password(self, username, password):
|
||||||
|
hashed_password = self.hash_password(password)
|
||||||
|
self.db.change_password(username, hashed_password)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
c = AdminCommands()
|
||||||
|
c.create_user("test", "test", "user")
|
||||||
|
c.create_user("admin", "admin", "admin")
|
||||||
|
print(c.list_users())
|
||||||
|
c.delete_user("test")
|
||||||
|
print(c.list_users())
|
||||||
|
c.change_password("admin", "nopass")
|
||||||
|
print(c.list_users())
|
||||||
748
src/backend/database.py
Normal file
748
src/backend/database.py
Normal file
@@ -0,0 +1,748 @@
|
|||||||
|
import datetime
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
import sqlite3 as sql3
|
||||||
|
import tempfile
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from omegaconf import OmegaConf
|
||||||
|
|
||||||
|
from src.backend.db import main as template
|
||||||
|
# from src.data import pickles
|
||||||
|
import pickle
|
||||||
|
from src.logic.constants import SEMAP_MEDIA_ACCOUNTS
|
||||||
|
from src.logic.dataclass import ApparatData, BookData
|
||||||
|
from log import MyLogger
|
||||||
|
from icecream import ic
|
||||||
|
config = OmegaConf.load("config.yaml")
|
||||||
|
|
||||||
|
logger = MyLogger("Database")
|
||||||
|
|
||||||
|
|
||||||
|
class Database:
|
||||||
|
logger.log_info("Database imported")
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
# TODO: change path later on to a variable based on the settings
|
||||||
|
self.database_path = f"{config.database.path}{config.database.name}"
|
||||||
|
ic(self.database_path)
|
||||||
|
# self.database_path = "sap.db"
|
||||||
|
logger.log_info("Connecting to database")
|
||||||
|
self.database = sql3.connect(self.database_path)
|
||||||
|
self.cur = self.database.cursor()
|
||||||
|
|
||||||
|
pass
|
||||||
|
def create_database(self):
|
||||||
|
#create database from template
|
||||||
|
template(self.database_path)
|
||||||
|
subjects = config.subjects
|
||||||
|
for subject in subjects:
|
||||||
|
self.cur.execute(f"INSERT INTO subjects (name) VALUES ('{subject}')")
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def create_blob(self, file):
|
||||||
|
with open(file, "rb") as f:
|
||||||
|
blob = f.read()
|
||||||
|
return blob
|
||||||
|
|
||||||
|
def recreate_file(self, filename, app_id: int):
|
||||||
|
blob = self.get_blob(filename, app_id)
|
||||||
|
# write the blob to the file and save it to a preset destination
|
||||||
|
# with open(filename, "wb") as f:
|
||||||
|
# f.write(blob)
|
||||||
|
#use tempfile to create a temporary file
|
||||||
|
if not os.path.exists(config.database.tempdir):
|
||||||
|
os.mkdir(config.database.tempdir)
|
||||||
|
tempfile.NamedTemporaryFile(filename=filename,delete=False,dir=config.database.tempdir,mode="wb").write(blob)
|
||||||
|
|
||||||
|
# user = os.getlogin()
|
||||||
|
# home = os.path.expanduser("~")
|
||||||
|
|
||||||
|
# # check if the folder exists, if not, create it
|
||||||
|
# if not os.path.exists(f"{home}/Desktop/SemApp/{user}"):
|
||||||
|
# os.mkdir(f"{home}/Desktop/SemApp/{user}")
|
||||||
|
# shutil.move(filename, f"{home}/Desktop/SemApp/{user}")
|
||||||
|
|
||||||
|
def get_blob(self, filename: str, app_id: int):
|
||||||
|
query = f"SELECT fileblob FROM files WHERE filename='{filename}' AND app_id={app_id}"
|
||||||
|
logger.log_info(f"Retrieving blob for {filename}, Appid {app_id} from database")
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
def get_kto_no(self, app_id: int):
|
||||||
|
query = f"SELECT konto FROM semesterapparat WHERE id={app_id}"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
def insert_file(self, file: list[dict], app_id: int, prof_id):
|
||||||
|
for f in file:
|
||||||
|
filename = f["name"]
|
||||||
|
path = f["path"]
|
||||||
|
filetyp = f["type"]
|
||||||
|
print(f"filename: {filename}, path: {path}, filetyp: {filetyp}")
|
||||||
|
if path == "Database":
|
||||||
|
continue
|
||||||
|
blob = self.create_blob(path)
|
||||||
|
|
||||||
|
query = "INSERT OR IGNORE INTO files (filename, fileblob, app_id, filetyp,prof_id) VALUES (?, ?, ?, ?,?)"
|
||||||
|
params = (filename, blob, app_id, filetyp, prof_id)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
logger.log_info(
|
||||||
|
f"Inserted {len(file)} file(s) of Apparat {app_id} into database"
|
||||||
|
)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def get_files(self, app_id: int, prof_id: int):
|
||||||
|
query = f"SELECT filename, filetyp FROM files WHERE app_id={app_id} AND prof_id={prof_id}"
|
||||||
|
result: list[tuple] = self.cur.execute(query).fetchall()
|
||||||
|
return result
|
||||||
|
|
||||||
|
def get_prof_name_by_id(self, id, add_title: bool = False):
|
||||||
|
if add_title is True:
|
||||||
|
query = f"SELECT titel, fname, lname FROM prof WHERE id={id}"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
name = " ".join(result[0:3])
|
||||||
|
return name
|
||||||
|
else:
|
||||||
|
query = f"SELECT fullname FROM prof WHERE id={id}"
|
||||||
|
print(query)
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
name = result[0]
|
||||||
|
return name
|
||||||
|
|
||||||
|
def get_prof_id(self, profname: str):
|
||||||
|
query = f"SELECT id FROM prof WHERE fullname='{profname.replace(',', '')}'"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
if result is None:
|
||||||
|
return None
|
||||||
|
return self.cur.execute(query).fetchone()[0]
|
||||||
|
|
||||||
|
def get_app_id(self, appname: str):
|
||||||
|
query = f"SELECT id FROM semesterapparat WHERE name='{appname}'"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
if result is None:
|
||||||
|
return None
|
||||||
|
return self.cur.execute(query).fetchone()[0]
|
||||||
|
|
||||||
|
def get_profs(self):
|
||||||
|
query = "select * from prof"
|
||||||
|
return self.cur.execute(query).fetchall()
|
||||||
|
|
||||||
|
def app_exists(self, appnr: str) -> bool:
|
||||||
|
query = f"SELECT appnr FROM semesterapparat WHERE appnr='{appnr}'"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
if result is None:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def get_prof_data(self, profname: str = None, id: int = None) -> dict[str, str]:
|
||||||
|
if profname is not None:
|
||||||
|
profname = profname.replace(",", "")
|
||||||
|
profname = re.sub(r"\s+", " ", profname).strip()
|
||||||
|
if id:
|
||||||
|
query = "Select prof_id FROM semesterapparat WHERE appnr=?"
|
||||||
|
params = (id,)
|
||||||
|
result = self.cur.execute(query, params).fetchone()
|
||||||
|
id = result[0]
|
||||||
|
query = (
|
||||||
|
f"SELECT * FROM prof WHERE fullname='{profname}'"
|
||||||
|
if id is None
|
||||||
|
else f"SELECT * FROM prof WHERE id={id}"
|
||||||
|
)
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
return_data = {
|
||||||
|
"prof_title": result[1],
|
||||||
|
"profname": f"{result[3], result[2]}",
|
||||||
|
"prof_mail": result[5],
|
||||||
|
"prof_tel": result[6],
|
||||||
|
"id": result[0],
|
||||||
|
}
|
||||||
|
print(return_data)
|
||||||
|
# select the entry that contains the first name
|
||||||
|
return return_data
|
||||||
|
|
||||||
|
def set_new_sem_date(self, appnr, new_sem_date, dauerapp=False):
|
||||||
|
# Todo: use extend_semester in new release
|
||||||
|
date = datetime.datetime.now().strftime("%Y-%m-%d")
|
||||||
|
|
||||||
|
query = f"UPDATE semesterapparat SET verlängert_am='{date}', verlängerung_bis='{new_sem_date}' WHERE appnr='{appnr}'"
|
||||||
|
if dauerapp is not False:
|
||||||
|
query = f"UPDATE semesterapparat SET verlängert_am='{date}', verlängerung_bis='{new_sem_date}', dauerapp='{dauerapp} WHERE appnr='{appnr}'"
|
||||||
|
self.cur.execute(query)
|
||||||
|
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def create_apparat(self, ApparatData: ApparatData):
|
||||||
|
prof_id = self.get_prof_id(ApparatData.profname)
|
||||||
|
app_id = self.get_app_id(ApparatData.appname)
|
||||||
|
if app_id is None:
|
||||||
|
if prof_id is None:
|
||||||
|
self.create_prof(ApparatData.get_prof_details())
|
||||||
|
prof_id = self.get_prof_id(ApparatData.profname)
|
||||||
|
|
||||||
|
query = f"INSERT OR IGNORE INTO semesterapparat (appnr, name, erstellsemester, dauer, prof_id, fach,deletion_status,konto) VALUES ('{ApparatData.appnr}', '{ApparatData.appname}', '{ApparatData.semester}', '{ApparatData.dauerapp}', {prof_id}, '{ApparatData.app_fach}', '{ApparatData.deleted}', '{SEMAP_MEDIA_ACCOUNTS[ApparatData.appnr]}')"
|
||||||
|
print(query)
|
||||||
|
self.cur.execute(query)
|
||||||
|
self.database.commit()
|
||||||
|
logger.log_info(f"Created new apparat {ApparatData.appname}")
|
||||||
|
app_id = self.get_app_id(ApparatData.appname)
|
||||||
|
# if ApparatData.media_list is not None: #! Deprecated
|
||||||
|
# for media in ApparatData.media_list:
|
||||||
|
# self.insert_file(media, app_id)
|
||||||
|
# self.database.commit()
|
||||||
|
return app_id
|
||||||
|
|
||||||
|
def create_prof(self, prof_details: dict):
|
||||||
|
prof_title = prof_details["prof_title"]
|
||||||
|
prof_fname = prof_details["profname"].split(",")[1]
|
||||||
|
prof_fname = prof_fname.strip()
|
||||||
|
prof_lname = prof_details["profname"].split(",")[0]
|
||||||
|
prof_lname = prof_lname.strip()
|
||||||
|
prof_fullname = prof_details["profname"].replace(",", "")
|
||||||
|
prof_mail = prof_details["prof_mail"]
|
||||||
|
prof_tel = prof_details["prof_tel"]
|
||||||
|
|
||||||
|
query = f'INSERT OR IGNORE INTO prof (titel, fname, lname, fullname, mail, telnr) VALUES ("{prof_title}", "{prof_fname}", "{prof_lname}", "{prof_fullname}", "{prof_mail}", "{prof_tel}")'
|
||||||
|
self.cur.execute(query)
|
||||||
|
self.database.commit()
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_apparat_nrs(self) -> list:
|
||||||
|
try:
|
||||||
|
self.cur.execute(
|
||||||
|
"SELECT appnr FROM semesterapparat Where deletion_status=0"
|
||||||
|
)
|
||||||
|
except sql3.OperationalError:
|
||||||
|
return []
|
||||||
|
return [i[0] for i in self.cur.fetchall()]
|
||||||
|
|
||||||
|
def get_all_apparts(self, deleted=0):
|
||||||
|
|
||||||
|
self.cur.execute(
|
||||||
|
f"SELECT * FROM semesterapparat WHERE deletion_status={deleted}"
|
||||||
|
)
|
||||||
|
return self.cur.fetchall()
|
||||||
|
|
||||||
|
#
|
||||||
|
def get_app_data(self, appnr, appname) -> ApparatData:
|
||||||
|
result = self.cur.execute(
|
||||||
|
f"SELECT * FROM semesterapparat WHERE appnr='{appnr}' AND name='{appname}'"
|
||||||
|
).fetchone()
|
||||||
|
print(f"result: {result}")
|
||||||
|
# app_id=result[0]
|
||||||
|
data = ApparatData()
|
||||||
|
data.appnr = appnr
|
||||||
|
data.app_fach = result[3]
|
||||||
|
data.appname = result[1]
|
||||||
|
profname = self.get_prof_name_by_id(result[2])
|
||||||
|
# set profname to lastname, firstname
|
||||||
|
profname = f"{profname.split(' ')[0]}, {profname.split(' ')[1]}"
|
||||||
|
data.profname = profname
|
||||||
|
prof_data = self.get_prof_data(data.profname)
|
||||||
|
data.prof_mail = prof_data["prof_mail"]
|
||||||
|
data.prof_tel = prof_data["prof_tel"]
|
||||||
|
data.prof_title = prof_data["prof_title"]
|
||||||
|
data.erstellsemester = result[5]
|
||||||
|
data.semester = result[8]
|
||||||
|
data.deleted = result[9]
|
||||||
|
data.apparat_adis_id = result[12]
|
||||||
|
data.prof_adis_id = None
|
||||||
|
|
||||||
|
print(data)
|
||||||
|
# data.media_list=self.get_media(app_id)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def add_medium(self, bookdata: BookData, app_id: str, prof_id: str, *args):
|
||||||
|
# insert the bookdata into the media table
|
||||||
|
# try to retrieve the bookdata from the media table, check if the to be inserted bookdata is already in the table for the corresponding apparat
|
||||||
|
# if yes, do not insert the bookdata
|
||||||
|
# if no, insert the bookdata
|
||||||
|
t_query = (
|
||||||
|
f"SELECT bookdata FROM media WHERE app_id={app_id} AND prof_id={prof_id}"
|
||||||
|
)
|
||||||
|
# print(t_query)
|
||||||
|
result = self.cur.execute(t_query).fetchall()
|
||||||
|
result = [pickle.loads(i[0]) for i in result]
|
||||||
|
if bookdata in result:
|
||||||
|
print("Bookdata already in database")
|
||||||
|
# check if the book was deleted in the apparat
|
||||||
|
query = (
|
||||||
|
"SELECT deleted FROM media WHERE app_id=? AND prof_id=? AND bookdata=?"
|
||||||
|
)
|
||||||
|
params = (app_id, prof_id, pickle.dumps(bookdata))
|
||||||
|
result = self.cur.execute(query, params).fetchone()
|
||||||
|
if result[0] == 1:
|
||||||
|
print("Book was deleted, updating bookdata")
|
||||||
|
query = "UPDATE media SET deleted=0 WHERE app_id=? AND prof_id=? AND bookdata=?"
|
||||||
|
params = (app_id, prof_id, pickle.dumps(bookdata))
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
return
|
||||||
|
|
||||||
|
query = (
|
||||||
|
"INSERT INTO media (bookdata, app_id, prof_id,deleted) VALUES (?, ?, ?,?)"
|
||||||
|
)
|
||||||
|
converted = pickle.dumps(bookdata)
|
||||||
|
params = (converted, app_id, prof_id, 0)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def request_medium(self, app_id, prof_id, signature) -> int:
|
||||||
|
query = "SELECT bookdata, id FROM media WHERE app_id=? AND prof_id=?"
|
||||||
|
params = (app_id, prof_id)
|
||||||
|
result = self.cur.execute(query, params).fetchall()
|
||||||
|
books = [(i[1], pickle.loads(i[0])) for i in result]
|
||||||
|
print(books)
|
||||||
|
book = [i[0] for i in books if i[1].signature == signature]
|
||||||
|
return book[0]
|
||||||
|
|
||||||
|
def add_message(self, message: dict, user, appnr):
|
||||||
|
def __get_user_id(user):
|
||||||
|
query = "SELECT id FROM user WHERE username=?"
|
||||||
|
params = (user,)
|
||||||
|
result = self.cur.execute(query, params).fetchone()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
user_id = __get_user_id(user)
|
||||||
|
query = "INSERT INTO messages (message, user_id, remind_at) VALUES (?, ?, ?)"
|
||||||
|
params = (message["message"], user_id, message["remind_at"])
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def get_messages(self, date: str):
|
||||||
|
def __get_user_name(id):
|
||||||
|
query = "SELECT username FROM user WHERE id=?"
|
||||||
|
params = (id,)
|
||||||
|
result = self.cur.execute(query, params).fetchone()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
query = f"SELECT * FROM messages WHERE remind_at='{date}'"
|
||||||
|
result = self.cur.execute(query).fetchall()
|
||||||
|
ret = [
|
||||||
|
{
|
||||||
|
"message": i[2],
|
||||||
|
"user": __get_user_name(i[4]),
|
||||||
|
"apparatnr": i[5],
|
||||||
|
"id": i[0],
|
||||||
|
}
|
||||||
|
for i in result
|
||||||
|
]
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def get_apparat_id(self, appname):
|
||||||
|
query = f"SELECT appnr FROM semesterapparat WHERE name='{appname}'"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
|
||||||
|
def get_apparats_by_semester(self, semester: str):
|
||||||
|
query = f"SELECT * FROM semesterapparat WHERE erstellsemester='{semester}'"
|
||||||
|
result = self.cur.execute(query).fetchall()
|
||||||
|
return result
|
||||||
|
|
||||||
|
def get_semester(self) -> list[str]:
|
||||||
|
query = "SELECT DISTINCT erstellsemester FROM semesterapparat"
|
||||||
|
result = self.cur.execute(query).fetchall()
|
||||||
|
return [i for i in result]
|
||||||
|
|
||||||
|
def is_eternal(self, id):
|
||||||
|
query = f"SELECT dauer FROM semesterapparat WHERE id={id}"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
def statistic_request(self, **kwargs: Any):
|
||||||
|
def __query(query):
|
||||||
|
result = self.cur.execute(query).fetchall()
|
||||||
|
for result_a in result:
|
||||||
|
orig_value = result_a
|
||||||
|
prof_name = self.get_prof_name_by_id(result_a[2])
|
||||||
|
# replace the prof_id with the prof_name
|
||||||
|
result_a = list(result_a)
|
||||||
|
result_a[2] = prof_name
|
||||||
|
result_a = tuple(result_a)
|
||||||
|
result[result.index(orig_value)] = result_a
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
if "deletable" in kwargs.keys():
|
||||||
|
query = f"SELECT * FROM semesterapparat WHERE deletion_status=0 AND dauer=0 AND (erstellsemester!='{kwargs['deletesemester']}' OR verlängerung_bis!='{kwargs['deletesemester']}')"
|
||||||
|
return __query(query)
|
||||||
|
|
||||||
|
if "dauer" in kwargs.keys():
|
||||||
|
kwargs["dauer"] = kwargs["dauer"].replace("Ja", "1").replace("Nein", "0")
|
||||||
|
query = "SELECT * FROM semesterapparat WHERE "
|
||||||
|
for key, value in kwargs.items() if kwargs.items() is not None else {}:
|
||||||
|
print(key, value)
|
||||||
|
query += f"{key}='{value}' AND "
|
||||||
|
print(query)
|
||||||
|
# remove deletesemester part from normal query, as this will be added to the database upon deleting the apparat
|
||||||
|
if "deletesemester" in kwargs.keys():
|
||||||
|
query = query.replace(
|
||||||
|
f"deletesemester='{kwargs['deletesemester']}' AND ", ""
|
||||||
|
)
|
||||||
|
if "endsemester" in kwargs.keys():
|
||||||
|
if "erstellsemester" in kwargs.keys():
|
||||||
|
query = query.replace(f"endsemester='{kwargs['endsemester']}' AND ", "")
|
||||||
|
query = query.replace(
|
||||||
|
f"erstellsemester='{kwargs['erstellsemester']} AND ", "xyz"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
query = query.replace(
|
||||||
|
f"endsemester='{kwargs['endsemester']}' AND ", "xyz"
|
||||||
|
)
|
||||||
|
print("replaced")
|
||||||
|
query = query.replace(
|
||||||
|
"xyz",
|
||||||
|
f"(erstellsemester='{kwargs['endsemester']}' OR verlängerung_bis='{kwargs['endsemester']}') AND ",
|
||||||
|
)
|
||||||
|
#remove all x="" parts from the query where x is a key in kwargs
|
||||||
|
|
||||||
|
query = query[:-5]
|
||||||
|
print(query)
|
||||||
|
return __query(query)
|
||||||
|
|
||||||
|
def get_app_count_by_semester(self) -> tuple[list[str], list[int]]:
|
||||||
|
"""get the apparats created and deleted in the distinct semesters"""
|
||||||
|
|
||||||
|
# get unique semesters
|
||||||
|
query = "SELECT DISTINCT erstellsemester FROM semesterapparat"
|
||||||
|
result = self.cur.execute(query).fetchall()
|
||||||
|
semesters = [i[0] for i in result]
|
||||||
|
created = []
|
||||||
|
deleted = []
|
||||||
|
for semester in semesters:
|
||||||
|
query = f"SELECT COUNT(*) FROM semesterapparat WHERE erstellsemester='{semester}'"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
created.append(result[0])
|
||||||
|
query = f"SELECT COUNT(*) FROM semesterapparat WHERE deletion_status=1 AND deleted_date='{semester}'"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
deleted.append(result[0])
|
||||||
|
# store data in a tuple
|
||||||
|
ret = []
|
||||||
|
e_tuple = ()
|
||||||
|
for sem in semesters:
|
||||||
|
e_tuple = (
|
||||||
|
sem,
|
||||||
|
created[semesters.index(sem)],
|
||||||
|
deleted[semesters.index(sem)],
|
||||||
|
)
|
||||||
|
ret.append(e_tuple)
|
||||||
|
return ret
|
||||||
|
# get the count of apparats created in the semesters
|
||||||
|
|
||||||
|
def apparats_by_semester(self, semester: str):
|
||||||
|
"""Get a list of all created and deleted apparats in the given semester"""
|
||||||
|
# get a list of apparats created and in the given semester
|
||||||
|
query = f"SELECT name,prof_id FROM semesterapparat WHERE erstellsemester='{semester}'"
|
||||||
|
result = self.cur.execute(query).fetchall()
|
||||||
|
c_tmp = []
|
||||||
|
for i in result:
|
||||||
|
c_tmp.append((i[0], self.get_prof_name_by_id(i[1])))
|
||||||
|
query = (
|
||||||
|
f"SELECT name,prof_id FROM semesterapparat WHERE deleted_date='{semester}'"
|
||||||
|
)
|
||||||
|
result = self.cur.execute(query).fetchall()
|
||||||
|
d_tmp = []
|
||||||
|
for i in result:
|
||||||
|
d_tmp.append((i[0], self.get_prof_name_by_id(i[1])))
|
||||||
|
# group the apparats by prof
|
||||||
|
c_ret = {}
|
||||||
|
for i in c_tmp:
|
||||||
|
if i[1] not in c_ret.keys():
|
||||||
|
c_ret[i[1]] = [i[0]]
|
||||||
|
else:
|
||||||
|
c_ret[i[1]].append(i[0])
|
||||||
|
d_ret = {}
|
||||||
|
for i in d_tmp:
|
||||||
|
if i[1] not in d_ret.keys():
|
||||||
|
d_ret[i[1]] = [i[0]]
|
||||||
|
else:
|
||||||
|
d_ret[i[1]].append(i[0])
|
||||||
|
return {"created": c_ret, "deleted": d_ret}
|
||||||
|
|
||||||
|
def delete_message(self, message_id):
|
||||||
|
query = "DELETE FROM messages WHERE id=?"
|
||||||
|
params = (message_id,)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def delete_medium(self, title_id):
|
||||||
|
# delete the bookdata from the media table
|
||||||
|
query = "UPDATE media SET deleted=1 WHERE id=?"
|
||||||
|
params = (title_id,)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
pass
|
||||||
|
|
||||||
|
def update_bookdata(self, bookdata: BookData, title_id):
|
||||||
|
query = "UPDATE media SET bookdata=? WHERE id=?"
|
||||||
|
converted = pickle.dumps(bookdata)
|
||||||
|
params = (converted, title_id)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def get_specific_book(self, book_id):
|
||||||
|
query = "SELECT bookdata FROM media WHERE id=?"
|
||||||
|
params = (book_id,)
|
||||||
|
result = self.cur.execute(query, params).fetchone()
|
||||||
|
return pickle.loads(result[0])
|
||||||
|
|
||||||
|
def get_media(self, app_id, prof_id, del_state=0) -> list[dict[int, BookData, int]]:
|
||||||
|
"""request media from database and return result as list.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
----
|
||||||
|
- app_id (int): ID of the apparat
|
||||||
|
- prof_id (int): ID of the prof
|
||||||
|
- del_state (int, optional): If deleted books should be requested as well. 1 = yes 0 = no. Defaults to 0.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
-------
|
||||||
|
- list[dict[int,BookData,int]]: Returns a list of dictionaries containing the bookdata, the id and the availability of the book in the following format:
|
||||||
|
-------
|
||||||
|
{"id": int,
|
||||||
|
"bookdata": BookData,
|
||||||
|
"available": int}
|
||||||
|
"""
|
||||||
|
query = f"SELECT id,bookdata,available FROM media WHERE (app_id={app_id} AND prof_id={prof_id}) AND (deleted={del_state if del_state == 0 else '1 OR deleted=0'})"
|
||||||
|
logger.log_info(f"Requesting media from database with query: {query}")
|
||||||
|
result = self.cur.execute(query).fetchall()
|
||||||
|
ret_result = []
|
||||||
|
for result_a in result:
|
||||||
|
ic(result_a)
|
||||||
|
data = {"id": int, "bookdata": BookData, "available": int}
|
||||||
|
data["id"] = result_a[0]
|
||||||
|
data["bookdata"] = pickle.loads(result_a[1])
|
||||||
|
data["available"] = result_a[2]
|
||||||
|
ret_result.append(data)
|
||||||
|
return ret_result
|
||||||
|
|
||||||
|
def get_subjects_and_aliases(self):
|
||||||
|
query = "SELECT subjects.name, aliases.name FROM subjects LEFT JOIN aliases ON subjects.id = aliases.subject_id"
|
||||||
|
return self.cur.execute(query).fetchall()
|
||||||
|
|
||||||
|
def get_subjects(self):
|
||||||
|
query = "SELECT id,name FROM subjects"
|
||||||
|
return self.cur.execute(query).fetchall()
|
||||||
|
|
||||||
|
def get_aliases(self,subject_id):
|
||||||
|
query = f"SELECT name FROM aliases WHERE subject_id={subject_id}"
|
||||||
|
return self.cur.execute(query).fetchall()
|
||||||
|
|
||||||
|
def add_subject(self,subject_name):
|
||||||
|
query = f"INSERT INTO subjects (name) VALUES ('{subject_name}')"
|
||||||
|
self.cur.execute(query)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def get_apparats_by_prof(self,prof_id):
|
||||||
|
query = f"SELECT * FROM semesterapparat WHERE prof_id={prof_id}"
|
||||||
|
return self.cur.execute(query).fetchall()
|
||||||
|
def add_alias(self,alias_name,subject):
|
||||||
|
query = f"SELECT id FROM subjects WHERE name='{subject}'"
|
||||||
|
subject_id = self.cur.execute(query).fetchone()[0]
|
||||||
|
query = f"INSERT INTO aliases (name,subject_id) VALUES ('{alias_name}',{subject_id})"
|
||||||
|
self.cur.execute(query)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def update_apparat(self, apparat_data: ApparatData):
|
||||||
|
data = apparat_data
|
||||||
|
query = f"UPDATE semesterapparat SET name = ?, fach = ?, dauer = ?, prof_id = ? WHERE appnr = ?"
|
||||||
|
params = (
|
||||||
|
data.appname,
|
||||||
|
data.app_fach,
|
||||||
|
data.dauerapp,
|
||||||
|
self.get_prof_id(data.profname),
|
||||||
|
data.appnr,
|
||||||
|
)
|
||||||
|
print(query)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def delete_apparat(self, appnr: str, semester: str):
|
||||||
|
# update the deletion status to 1 and the deleted_state to semester for the given apparat
|
||||||
|
query = f"UPDATE semesterapparat SET deletion_status=1, deleted_date='{semester}' WHERE appnr='{appnr}'"
|
||||||
|
self.cur.execute(query)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def get_book_id(self, bookdata: BookData, app_id: int, prof_id: int):
|
||||||
|
query = "SELECT id FROM media WHERE bookdata=? AND app_id=? AND prof_id=?"
|
||||||
|
params = (pickle.loads(bookdata), app_id, prof_id)
|
||||||
|
result = self.cur.execute(query, params).fetchone()
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def set_availability(self, book_id, available):
|
||||||
|
query = "UPDATE media SET available=? WHERE id=?"
|
||||||
|
params = (available, book_id)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def get_latest_book_id(self):
|
||||||
|
query = "SELECT id FROM media ORDER BY id DESC LIMIT 1"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
self.database.close()
|
||||||
|
|
||||||
|
def login(self, username, hashed_password) -> bool:
|
||||||
|
# check if the user and password exist in the database
|
||||||
|
# if yes, return True
|
||||||
|
# if no, return False
|
||||||
|
query = "SELECT salt FROM user WHERE username=?"
|
||||||
|
params = (username,)
|
||||||
|
result = self.cur.execute(query, params).fetchone()
|
||||||
|
|
||||||
|
if result is None:
|
||||||
|
return False
|
||||||
|
salt = result[0]
|
||||||
|
print(salt)
|
||||||
|
query = "SELECT password FROM user WHERE username=?"
|
||||||
|
params = (str(username),)
|
||||||
|
result = self.cur.execute(query, params).fetchone()
|
||||||
|
password = result[0]
|
||||||
|
if password == f"{salt}{hashed_password}":
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# admin stuff below here
|
||||||
|
def get_users(self):
|
||||||
|
query = "SELECT * FROM user"
|
||||||
|
return self.cur.execute(query).fetchall()
|
||||||
|
|
||||||
|
def get_apparats(self) -> list[tuple]:
|
||||||
|
query = "SELECT * FROM semesterapparat"
|
||||||
|
return self.cur.execute(query).fetchall()
|
||||||
|
|
||||||
|
def change_password(self, user, password):
|
||||||
|
saltq = "SELECT salt FROM user WHERE username=?"
|
||||||
|
params = (user,)
|
||||||
|
salt = self.cur.execute(saltq, params).fetchone()[0]
|
||||||
|
password = f"{salt}{password}"
|
||||||
|
query = "UPDATE user SET password=? WHERE username=?"
|
||||||
|
params = (password, user)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def get_role(self, username):
|
||||||
|
query = "SELECT role FROM user WHERE username=?"
|
||||||
|
params = (username,)
|
||||||
|
result = self.cur.execute(query,params).fetchone()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
def get_roles(self):
|
||||||
|
query = "SELECT role FROM user"
|
||||||
|
return self.cur.execute(query).fetchall()
|
||||||
|
|
||||||
|
def create_user(self, username, password, role, salt):
|
||||||
|
"""Create a user based on passed data.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
----
|
||||||
|
- username (str): Username to be used
|
||||||
|
- password (str): the salted password
|
||||||
|
- role (str): Role of the user
|
||||||
|
- salt (str): a random salt for the user
|
||||||
|
"""
|
||||||
|
query = "INSERT OR IGNORE INTO user (username, password, role, salt) VALUES (?, ?, ?, ?)"
|
||||||
|
params = (username, password, role, salt)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def delete_user(self, user):
|
||||||
|
query = "DELETE FROM user WHERE username=?"
|
||||||
|
params = (user,)
|
||||||
|
self.cur.execute(query, params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def get_faculty_members(self,name:str=None):
|
||||||
|
query = "SELECT titel, fname,lname,mail,telnr,fullname FROM prof"
|
||||||
|
if name:
|
||||||
|
query = query.replace(",fullname", "")
|
||||||
|
query += f" WHERE fullname='{name}'"
|
||||||
|
return self.cur.execute(query).fetchall()
|
||||||
|
|
||||||
|
def update_faculty_member(self,data,oldlname,oldfname):
|
||||||
|
placeholders = ', '.join(f"{k} = :{k}" for k in data.keys())
|
||||||
|
sql = f"UPDATE prof SET {placeholders} WHERE lname = :oldlname AND fname = :oldfname"
|
||||||
|
data["oldlname"] = oldlname
|
||||||
|
data["oldfname"] = oldfname
|
||||||
|
print(sql, data)
|
||||||
|
self.cur.execute(sql, data)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def faculty_data(self,name):
|
||||||
|
query = f"SELECT * FROM prof WHERE fullname='{name}'"
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
return result
|
||||||
|
|
||||||
|
def update_user(self,username, data:dict[str,str]):
|
||||||
|
|
||||||
|
query = "UPDATE user SET "
|
||||||
|
for key,value in data.items():
|
||||||
|
if key == "username":
|
||||||
|
continue
|
||||||
|
query += f"{key}='{value}',"
|
||||||
|
query = query[:-1]
|
||||||
|
query += " WHERE username=?"
|
||||||
|
params = (username,)
|
||||||
|
|
||||||
|
self.cur.execute(query,params)
|
||||||
|
self.database.commit()
|
||||||
|
|
||||||
|
def check_username(self,username):
|
||||||
|
query = "SELECT username FROM user WHERE username=?"
|
||||||
|
params = (username,)
|
||||||
|
result = self.cur.execute(query,params).fetchone()
|
||||||
|
if result is None:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
def get_apparats_name(self, app_id,prof_id):
|
||||||
|
query = f"SELECT name FROM semesterapparat WHERE appnr={app_id} AND prof_id={prof_id}"
|
||||||
|
ic(query)
|
||||||
|
result = self.cur.execute(query).fetchone()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
def search_book(self, data:dict[str,str])->list[tuple[BookData,int]]:
|
||||||
|
query = "SELECT * FROM media "
|
||||||
|
result = self.database.execute(query).fetchall()
|
||||||
|
ret = []
|
||||||
|
#get length of data dict
|
||||||
|
length = len(data)
|
||||||
|
mode = 0
|
||||||
|
if length == 1:
|
||||||
|
if "signature" in data.keys():
|
||||||
|
mode = 1
|
||||||
|
elif "title" in data.keys():
|
||||||
|
mode = 2
|
||||||
|
elif length == 2:
|
||||||
|
mode = 3
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
print(len(result))
|
||||||
|
for res in result:
|
||||||
|
bookdata = pickle.loads(res[1])
|
||||||
|
app_id = res[2]
|
||||||
|
prof_id = res[3]
|
||||||
|
#if signature and title present in dict:
|
||||||
|
#if signature present in dict:
|
||||||
|
if mode == 1:
|
||||||
|
if data["signature"] in bookdata.signature:
|
||||||
|
ret.append((bookdata,app_id,prof_id))
|
||||||
|
#if title present in dict:
|
||||||
|
elif mode == 2:
|
||||||
|
if data["title"] in bookdata.title:
|
||||||
|
ret.append((bookdata,app_id,prof_id))
|
||||||
|
elif mode == 3:
|
||||||
|
if data["signature"] in bookdata.signature and data["title"] in bookdata.title:
|
||||||
|
ret.append((bookdata,app_id,prof_id))
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
db = Database()
|
||||||
|
print(db.login("kirchner", "loginpass"))
|
||||||
130
src/backend/db.py
Normal file
130
src/backend/db.py
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
import sqlite3
|
||||||
|
from omegaconf import OmegaConf
|
||||||
|
config = OmegaConf.load("config.yaml")
|
||||||
|
subjects = config.subjects
|
||||||
|
|
||||||
|
# Connect to the database
|
||||||
|
def main(database):
|
||||||
|
conn = sqlite3.connect(database)
|
||||||
|
conn.execute(
|
||||||
|
"""CREATE TABLE app_kontos (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
app_id INTEGER,
|
||||||
|
konto INTEGER,
|
||||||
|
passwort TEXT,
|
||||||
|
FOREIGN KEY (app_id) REFERENCES semesterapparat (id)
|
||||||
|
)"""
|
||||||
|
)
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"""CREATE TABLE files (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
filename TEXT,
|
||||||
|
fileblob BLOB,
|
||||||
|
app_id INTEGER,
|
||||||
|
filetyp TEXT,
|
||||||
|
prof_id INTEGER REFERENCES prof (id),
|
||||||
|
FOREIGN KEY (app_id) REFERENCES semesterapparat (id)
|
||||||
|
)"""
|
||||||
|
)
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"""CREATE TABLE media (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
bookdata BLOB,
|
||||||
|
app_id INTEGER,
|
||||||
|
prof_id INTEGER,
|
||||||
|
deleted INTEGER DEFAULT (0),
|
||||||
|
available BOOLEAN,
|
||||||
|
reservation BOOLEAN,
|
||||||
|
FOREIGN KEY (prof_id) REFERENCES prof (id),
|
||||||
|
FOREIGN KEY (app_id) REFERENCES semesterapparat (id)
|
||||||
|
)"""
|
||||||
|
)
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"""CREATE TABLE messages (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
created_at date NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
message TEXT NOT NULL,
|
||||||
|
remind_at date NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
appnr INTEGER,
|
||||||
|
FOREIGN KEY (user_id) REFERENCES user (id)
|
||||||
|
)"""
|
||||||
|
)
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"""CREATE TABLE prof (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
titel TEXT,
|
||||||
|
fname TEXT,
|
||||||
|
lname TEXT,
|
||||||
|
fullname TEXT NOT NULL UNIQUE,
|
||||||
|
mail TEXT,
|
||||||
|
telnr TEXT
|
||||||
|
)"""
|
||||||
|
)
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"""CREATE TABLE semesterapparat (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
name TEXT,
|
||||||
|
prof_id INTEGER,
|
||||||
|
fach TEXT,
|
||||||
|
appnr INTEGER,
|
||||||
|
erstellsemester TEXT,
|
||||||
|
verlängert_am TEXT,
|
||||||
|
dauer BOOLEAN,
|
||||||
|
verlängerung_bis TEXT,
|
||||||
|
deletion_status INTEGER,
|
||||||
|
deleted_date TEXT,
|
||||||
|
apparat_id_adis INTEGER,
|
||||||
|
prof_id_adis INTEGER,
|
||||||
|
konto INTEGER REFERENCES app_kontos (id),
|
||||||
|
FOREIGN KEY (prof_id) REFERENCES prof (id)
|
||||||
|
)"""
|
||||||
|
)
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"""CREATE TABLE user (
|
||||||
|
id integer NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||||
|
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
username TEXT NOT NULL UNIQUE,
|
||||||
|
password TEXT NOT NULL,
|
||||||
|
salt TEXT NOT NULL,
|
||||||
|
role TEXT NOT NULL,
|
||||||
|
email TEXT UNIQUE,
|
||||||
|
name TEXT
|
||||||
|
)"""
|
||||||
|
)
|
||||||
|
conn.execute(
|
||||||
|
"""
|
||||||
|
CREATE TABLE subjects (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
name TEXT NOT NULL UNIQUE
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"""
|
||||||
|
CREATE TABLE aliases (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
name TEXT NOT NULL UNIQUE,
|
||||||
|
subject_id INTEGER,
|
||||||
|
FOREIGN KEY (subject_id) REFERENCES subjects (id)
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
# Commit the changes and close the connection
|
||||||
|
conn.commit()
|
||||||
|
#insert subjects
|
||||||
|
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
9
src/backend/pickles.py
Normal file
9
src/backend/pickles.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import pickle
|
||||||
|
from typing import ByteString, Any
|
||||||
|
|
||||||
|
def make_pickle(data:Any):
|
||||||
|
return pickle.dumps(data)
|
||||||
|
|
||||||
|
|
||||||
|
def load_pickle(data:ByteString):
|
||||||
|
return pickle.loads(data)
|
||||||
26
src/backend/settings.py
Normal file
26
src/backend/settings.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
from dataclasses import dataclass, field
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Settings:
|
||||||
|
"""Settings for the app."""
|
||||||
|
|
||||||
|
save_path: str
|
||||||
|
database_name: str
|
||||||
|
database_path: str
|
||||||
|
bib_id: str
|
||||||
|
default_apps: bool = True
|
||||||
|
custom_applications: list[dict] = field(default_factory=list)
|
||||||
|
|
||||||
|
def save_settings(self):
|
||||||
|
"""Save the settings to the config file."""
|
||||||
|
with open("config.yaml", "w") as f:
|
||||||
|
yaml.dump(self.__dict__, f)
|
||||||
|
|
||||||
|
def load_settings(self):
|
||||||
|
"""Load the settings from the config file."""
|
||||||
|
with open("config.yaml", "r") as f:
|
||||||
|
data = yaml.safe_load(f)
|
||||||
|
return data
|
||||||
0
src/logic/__init__.py
Normal file
0
src/logic/__init__.py
Normal file
59
src/logic/c_sort.py
Normal file
59
src/logic/c_sort.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
from typing import List, Tuple
|
||||||
|
|
||||||
|
from natsort import natsorted
|
||||||
|
|
||||||
|
|
||||||
|
def custom_sort(unsorted: List[Tuple[str, int, int]]) -> List[Tuple[str, int, int]]:
|
||||||
|
"""Sort a list of semesters in the format "SoSe n" and "WiSe n/n+1" in the correct order.
|
||||||
|
Where n == year in 2 digit format
|
||||||
|
|
||||||
|
Args:
|
||||||
|
----
|
||||||
|
unsorted (list[tuple]): List of semesters in the format "SoSe n" and "WiSe n/n+1"
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
-------
|
||||||
|
ret (list[tuple]): Sorted list in correct order of WiSe n/n+1 and SoSe n
|
||||||
|
"""
|
||||||
|
summer = natsorted([i for i in unsorted if "SoSe" in i[0]])
|
||||||
|
winter = natsorted([i for i in unsorted if "WiSe" in i[0]])
|
||||||
|
summer = natsorted(summer, key=lambda x: x[0])
|
||||||
|
winter = natsorted(winter, key=lambda x: x[0])
|
||||||
|
|
||||||
|
# Merge the lists
|
||||||
|
ret = []
|
||||||
|
i = 0
|
||||||
|
j = 0
|
||||||
|
while i < len(summer) and j < len(winter):
|
||||||
|
if summer[i][0][5:] <= winter[j][0][5:]:
|
||||||
|
ret.append(summer[i])
|
||||||
|
i += 1
|
||||||
|
else:
|
||||||
|
ret.append(winter[j])
|
||||||
|
j += 1
|
||||||
|
|
||||||
|
# Append the remaining items
|
||||||
|
while i < len(summer):
|
||||||
|
ret.append(summer[i])
|
||||||
|
i += 1
|
||||||
|
while j < len(winter):
|
||||||
|
ret.append(winter[j])
|
||||||
|
j += 1
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
# Test the function
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unsorted = [
|
||||||
|
("WiSe 23/24", 7, 5),
|
||||||
|
("SoSe 23", 5, 0),
|
||||||
|
("SoSe 22", 1, 0),
|
||||||
|
("WiSe 22/23", 1, 0),
|
||||||
|
("SoSe 15", 1, 0),
|
||||||
|
]
|
||||||
|
|
||||||
|
print(custom_sort(unsorted))
|
||||||
221
src/logic/constants.py
Normal file
221
src/logic/constants.py
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
APP_NRS = [i for i in range(1, 181)]
|
||||||
|
|
||||||
|
PROF_TITLES = [
|
||||||
|
"Dr. mult.",
|
||||||
|
"Dr. paed.",
|
||||||
|
"Dr. rer. pol.",
|
||||||
|
"Dr. sc. techn.",
|
||||||
|
"Drs.",
|
||||||
|
"Dr. agr.",
|
||||||
|
"Dr. habil.",
|
||||||
|
"Dr. oec.",
|
||||||
|
"Dr. med.",
|
||||||
|
"Dr. e. h.",
|
||||||
|
"Dr. oec. publ.",
|
||||||
|
"Dr. -Ing.",
|
||||||
|
"Dr. theol.",
|
||||||
|
"Dr. med. vet.",
|
||||||
|
"Dr. ing.",
|
||||||
|
"Dr. rer. nat.",
|
||||||
|
"Dr. des.",
|
||||||
|
"Dr. sc. mus.",
|
||||||
|
"Dr. h. c.",
|
||||||
|
"Dr. pharm.",
|
||||||
|
"Dr. med. dent.",
|
||||||
|
"Dr. phil. nat.",
|
||||||
|
"Dr. phil.",
|
||||||
|
"Dr. iur.",
|
||||||
|
"Dr.",
|
||||||
|
"Kein Titel",
|
||||||
|
]
|
||||||
|
SEMAP_MEDIA_ACCOUNT_PREFIX = "10080"
|
||||||
|
semaps = {
|
||||||
|
"1": "0005",
|
||||||
|
"2": "0018",
|
||||||
|
"3": "0021",
|
||||||
|
"4": "0034",
|
||||||
|
"5": "0047",
|
||||||
|
"6": "0050",
|
||||||
|
"7": "0063",
|
||||||
|
"8": "0076",
|
||||||
|
"9": "0089",
|
||||||
|
"10": "0092",
|
||||||
|
"11": "0104",
|
||||||
|
"12": "0117",
|
||||||
|
"13": "0120",
|
||||||
|
"14": "0133",
|
||||||
|
"15": "0146",
|
||||||
|
"16": "0159",
|
||||||
|
"17": "0162",
|
||||||
|
"18": "0175",
|
||||||
|
"19": "0188",
|
||||||
|
"20": "0191",
|
||||||
|
"21": "0203",
|
||||||
|
"22": "0216",
|
||||||
|
"23": "0229",
|
||||||
|
"24": "0232",
|
||||||
|
"25": "0245",
|
||||||
|
"26": "0258",
|
||||||
|
"27": "0261",
|
||||||
|
"28": "0274",
|
||||||
|
"29": "0287",
|
||||||
|
"30": "0290",
|
||||||
|
"31": "0302",
|
||||||
|
"32": "0315",
|
||||||
|
"33": "0328",
|
||||||
|
"34": "0331",
|
||||||
|
"35": "0344",
|
||||||
|
"36": "0357",
|
||||||
|
"37": "0360",
|
||||||
|
"38": "0373",
|
||||||
|
"39": "0386",
|
||||||
|
"40": "0399",
|
||||||
|
"41": "0401",
|
||||||
|
"42": "0414",
|
||||||
|
"43": "0427",
|
||||||
|
"44": "0430",
|
||||||
|
"45": "0443",
|
||||||
|
"46": "0456",
|
||||||
|
"47": "0469",
|
||||||
|
"48": "0472",
|
||||||
|
"49": "0485",
|
||||||
|
"50": "0498",
|
||||||
|
"51": "0500",
|
||||||
|
"52": "0513",
|
||||||
|
"53": "0526",
|
||||||
|
"54": "0539",
|
||||||
|
"55": "0542",
|
||||||
|
"56": "0555",
|
||||||
|
"57": "0568",
|
||||||
|
"58": "0571",
|
||||||
|
"59": "0584",
|
||||||
|
"60": "0597",
|
||||||
|
"61": "0609",
|
||||||
|
"62": "0612",
|
||||||
|
"63": "0625",
|
||||||
|
"64": "0638",
|
||||||
|
"65": "0641",
|
||||||
|
"66": "0654",
|
||||||
|
"67": "0667",
|
||||||
|
"68": "0670",
|
||||||
|
"69": "0683",
|
||||||
|
"70": "0696",
|
||||||
|
"71": "0708",
|
||||||
|
"72": "0711",
|
||||||
|
"73": "0724",
|
||||||
|
"74": "0737",
|
||||||
|
"75": "0740",
|
||||||
|
"76": "0753",
|
||||||
|
"77": "0766",
|
||||||
|
"78": "0779",
|
||||||
|
"79": "0782",
|
||||||
|
"80": "0795",
|
||||||
|
"81": "0807",
|
||||||
|
"82": "0810",
|
||||||
|
"83": "0823",
|
||||||
|
"84": "0836",
|
||||||
|
"85": "0849",
|
||||||
|
"86": "0852",
|
||||||
|
"87": "0865",
|
||||||
|
"88": "0878",
|
||||||
|
"89": "0881",
|
||||||
|
"90": "0894",
|
||||||
|
"91": "0906",
|
||||||
|
"92": "0919",
|
||||||
|
"93": "0922",
|
||||||
|
"94": "0935",
|
||||||
|
"95": "0948",
|
||||||
|
"96": "0951",
|
||||||
|
"97": "0964",
|
||||||
|
"98": "0977",
|
||||||
|
"99": "0980",
|
||||||
|
"100": "0993",
|
||||||
|
"101": "1002",
|
||||||
|
"102": "1015",
|
||||||
|
"103": "1028",
|
||||||
|
"104": "1031",
|
||||||
|
"105": "1044",
|
||||||
|
"106": "1057",
|
||||||
|
"107": "1060",
|
||||||
|
"108": "1073",
|
||||||
|
"109": "1086",
|
||||||
|
"110": "1099",
|
||||||
|
"111": "1101",
|
||||||
|
"112": "1114",
|
||||||
|
"113": "1127",
|
||||||
|
"114": "1130",
|
||||||
|
"115": "1143",
|
||||||
|
"116": "1156",
|
||||||
|
"117": "1169",
|
||||||
|
"118": "1172",
|
||||||
|
"119": "1185",
|
||||||
|
"120": "1198",
|
||||||
|
"121": "1200",
|
||||||
|
"122": "1213",
|
||||||
|
"123": "1226",
|
||||||
|
"124": "1239",
|
||||||
|
"125": "1242",
|
||||||
|
"126": "1255",
|
||||||
|
"127": "1268",
|
||||||
|
"128": "1271",
|
||||||
|
"129": "1284",
|
||||||
|
"130": "1297",
|
||||||
|
"131": "1309",
|
||||||
|
"132": "1312",
|
||||||
|
"133": "1325",
|
||||||
|
"134": "1338",
|
||||||
|
"135": "1341",
|
||||||
|
"136": "1354",
|
||||||
|
"137": "1367",
|
||||||
|
"138": "1370",
|
||||||
|
"139": "1383",
|
||||||
|
"140": "1396",
|
||||||
|
"141": "1408",
|
||||||
|
"142": "1411",
|
||||||
|
"143": "1424",
|
||||||
|
"144": "1437",
|
||||||
|
"145": "1440",
|
||||||
|
"146": "1453",
|
||||||
|
"147": "1466",
|
||||||
|
"148": "1479",
|
||||||
|
"149": "1482",
|
||||||
|
"150": "1495",
|
||||||
|
"151": "1507",
|
||||||
|
"152": "1510",
|
||||||
|
"153": "1523",
|
||||||
|
"154": "1536",
|
||||||
|
"155": "1549",
|
||||||
|
"156": "1552",
|
||||||
|
"157": "1565",
|
||||||
|
"158": "1578",
|
||||||
|
"159": "1581",
|
||||||
|
"160": "1594",
|
||||||
|
"161": "1606",
|
||||||
|
"162": "1619",
|
||||||
|
"163": "1622",
|
||||||
|
"164": "1635",
|
||||||
|
"165": "1648",
|
||||||
|
"166": "1651",
|
||||||
|
"167": "1664",
|
||||||
|
"168": "1677",
|
||||||
|
"169": "1680",
|
||||||
|
"170": "1693",
|
||||||
|
"171": "1705",
|
||||||
|
"172": "1718",
|
||||||
|
"173": "1721",
|
||||||
|
"174": "1734",
|
||||||
|
"175": "1747",
|
||||||
|
"176": "1750",
|
||||||
|
"177": "1763",
|
||||||
|
"178": "1776",
|
||||||
|
"179": "1789",
|
||||||
|
"180": "1792",
|
||||||
|
}
|
||||||
|
# take the semaps dict and add the prefix to the values
|
||||||
|
for key, value in semaps.items():
|
||||||
|
semaps[key] = f"{SEMAP_MEDIA_ACCOUNT_PREFIX}{value}{value[-1]}"
|
||||||
|
SEMAP_MEDIA_ACCOUNTS = semaps
|
||||||
|
|
||||||
|
# for s in SEMAP_MEDIA_ACCOUNTS:
|
||||||
|
# assert len(SEMAP_MEDIA_ACCOUNTS[s]) == 10, f"semap {s} has wrong length"
|
||||||
|
# print(f"{SEMAP_MEDIA_ACCOUNTS[s]}")
|
||||||
27
src/logic/csvparser.py
Normal file
27
src/logic/csvparser.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import csv
|
||||||
|
|
||||||
|
import pandas as pdf
|
||||||
|
|
||||||
|
|
||||||
|
def csv_to_list(path: str) -> list[str]:
|
||||||
|
"""
|
||||||
|
Extracts the data from a csv file and returns it as a pandas dataframe
|
||||||
|
"""
|
||||||
|
with open(path, newline='') as csvfile:
|
||||||
|
reader = csv.reader(csvfile, delimiter=';', quotechar='|')
|
||||||
|
data = []
|
||||||
|
for row in reader:
|
||||||
|
for i in range(len(row)):
|
||||||
|
row[i] = row[i].replace('"', "")
|
||||||
|
data.append(row)
|
||||||
|
ret= []
|
||||||
|
for i in data:
|
||||||
|
ret.append(i[0])
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
text = csv_to_list("C:/Users/aky547/Desktop/semap/71.csv")
|
||||||
|
#remove linebreaks
|
||||||
|
print(text)
|
||||||
76
src/logic/dataclass.py
Normal file
76
src/logic/dataclass.py
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
import re
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class ApparatData:
|
||||||
|
prof_title: str | None = None
|
||||||
|
profname: str | None = None
|
||||||
|
dauerapp: bool = False
|
||||||
|
appnr: int | None = None
|
||||||
|
appname: str | None = None
|
||||||
|
app_fach: str | None = None
|
||||||
|
semester: str | None = None
|
||||||
|
erstellsemester: str | None = None
|
||||||
|
prof_mail: str | None = None
|
||||||
|
prof_tel: int | None = None
|
||||||
|
deleted: int = 0
|
||||||
|
prof_adis_id: int | None = None
|
||||||
|
apparat_adis_id: int | None = None
|
||||||
|
|
||||||
|
def get_prof_details(self) -> dict:
|
||||||
|
return {
|
||||||
|
"prof_title": self.prof_title,
|
||||||
|
"profname": self.profname,
|
||||||
|
"prof_mail": self.prof_mail,
|
||||||
|
"prof_tel": self.prof_tel,
|
||||||
|
"fullname": self.profname,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BookData:
|
||||||
|
ppn: str | None = None
|
||||||
|
title: str | None = None
|
||||||
|
signature: str | None = None
|
||||||
|
edition: str | None = None
|
||||||
|
link: str | None = None
|
||||||
|
isbn: str | list | None = field(default_factory=list)
|
||||||
|
author: str | None = None
|
||||||
|
language: str | list | None = field(default_factory=list)
|
||||||
|
publisher: str | None = None
|
||||||
|
year: str | None = None
|
||||||
|
pages: str | None = None
|
||||||
|
# avaliability: dict | None = field(default_factory=dict)
|
||||||
|
# def assign(self, field,value):
|
||||||
|
# self.__setattr__(field,value)
|
||||||
|
|
||||||
|
def from_dict(self, data: dict):
|
||||||
|
for key, value in data.items():
|
||||||
|
setattr(self, key, value)
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return self.__dict__
|
||||||
|
|
||||||
|
def from_dataclass(self, dataclass):
|
||||||
|
for key, value in dataclass.__dict__.items():
|
||||||
|
setattr(self, key, value)
|
||||||
|
|
||||||
|
def from_string(self, data: str):
|
||||||
|
if not data.startswith("BookData"):
|
||||||
|
raise ValueError("No valid BookData string")
|
||||||
|
else:
|
||||||
|
pattern = r"(\w+)='([^']*)'"
|
||||||
|
data_dict = dict(re.findall(pattern, data))
|
||||||
|
print(data_dict)
|
||||||
|
for key, value in data_dict.items():
|
||||||
|
setattr(self, key, value)
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MailData:
|
||||||
|
subject: str | None = None
|
||||||
|
body: str | None = None
|
||||||
|
mailto: str | None = None
|
||||||
|
prof: str | None = None
|
||||||
45
src/logic/fileparser.py
Normal file
45
src/logic/fileparser.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import csv
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
from docx import Document
|
||||||
|
|
||||||
|
|
||||||
|
def csv_to_list(path: str) -> list[str]:
|
||||||
|
"""
|
||||||
|
Extracts the data from a csv file and returns it as a pandas dataframe
|
||||||
|
"""
|
||||||
|
with open(path, newline="") as csvfile:
|
||||||
|
reader = csv.reader(csvfile, delimiter=";", quotechar="|")
|
||||||
|
data = []
|
||||||
|
for row in reader:
|
||||||
|
for i in range(len(row)):
|
||||||
|
row[i] = row[i].replace('"', "")
|
||||||
|
data.append(row)
|
||||||
|
ret = []
|
||||||
|
for i in data:
|
||||||
|
ret.append(i[0])
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def word_docx_to_csv(path) -> pd.DataFrame:
|
||||||
|
doc = Document(path)
|
||||||
|
tables = doc.tables
|
||||||
|
|
||||||
|
m_data = []
|
||||||
|
for table in tables:
|
||||||
|
data = []
|
||||||
|
for row in table.rows:
|
||||||
|
row_data = []
|
||||||
|
for cell in row.cells:
|
||||||
|
text = cell.text
|
||||||
|
text = text.replace("\n", "")
|
||||||
|
row_data.append(text)
|
||||||
|
data.append(row_data)
|
||||||
|
df = pd.DataFrame(data)
|
||||||
|
df.columns = df.iloc[0]
|
||||||
|
df = df.iloc[1:]
|
||||||
|
|
||||||
|
m_data.append(df)
|
||||||
|
|
||||||
|
df = m_data[2]
|
||||||
|
return df
|
||||||
31
src/logic/get_msword_content.py
Normal file
31
src/logic/get_msword_content.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
from docx import Document
|
||||||
|
|
||||||
|
data={}
|
||||||
|
wordDoc = Document('files/Semesterapparat - Anmeldung.docx')
|
||||||
|
paragraphs = wordDoc.tables
|
||||||
|
for table in paragraphs:
|
||||||
|
for column in table.columns:
|
||||||
|
cellcount=0
|
||||||
|
for cell in column.cells:
|
||||||
|
if cellcount<12:
|
||||||
|
cellcount+=1
|
||||||
|
print(f'cell:{cell.text}')
|
||||||
|
|
||||||
|
|
||||||
|
# print(f'paragraphs[{i}]: {paragraphs[i]}')
|
||||||
|
# data[i] = paragraphs[i]
|
||||||
|
|
||||||
|
# for i in range(0, len(paragraphs)):
|
||||||
|
# for i in range(2, len(paragraphs)):
|
||||||
|
# data[i] = paragraphs[i]
|
||||||
|
|
||||||
|
print(data)
|
||||||
|
|
||||||
|
# for table in wordDoc.tables:
|
||||||
|
# for row in table.rows:
|
||||||
|
# print('---')
|
||||||
|
# for cell in row.cells:
|
||||||
|
# print(f'cell:{cell.text}')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
11
src/logic/get_pdf_content.py
Normal file
11
src/logic/get_pdf_content.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import tabula
|
||||||
|
|
||||||
|
|
||||||
|
file="files/Semesterapparat - Anmeldung.pdf"
|
||||||
|
|
||||||
|
def extract_book_data(file):
|
||||||
|
tables=tabula.read_pdf(file,pages="all",encoding="utf-8",multiple_tables=True)
|
||||||
|
tabula.convert_into(file, file.replace(".pdf"), output_format="csv", pages="all")
|
||||||
|
with open("files/Semesterapparat - Anmeldung.csv", "r") as f:
|
||||||
|
content=f.read()
|
||||||
|
|
||||||
0
src/logic/mail.py
Normal file
0
src/logic/mail.py
Normal file
30
src/logic/pdfparser.py
Normal file
30
src/logic/pdfparser.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# add depend path to system path
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
from pdfquery import PDFQuery
|
||||||
|
|
||||||
|
|
||||||
|
def pdf_to_csv(path: str) -> pd.DataFrame:
|
||||||
|
"""
|
||||||
|
Extracts the data from a pdf file and returns it as a pandas dataframe
|
||||||
|
"""
|
||||||
|
file = PDFQuery(path)
|
||||||
|
file.load()
|
||||||
|
#get the text from the pdf file
|
||||||
|
text_elems = file.extract([
|
||||||
|
('with_formatter', 'text'),
|
||||||
|
('all_text', '*')
|
||||||
|
])
|
||||||
|
extracted_text = text_elems['all_text']
|
||||||
|
|
||||||
|
return extracted_text
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
text = pdf_to_csv("54_pdf.pdf")
|
||||||
|
#remove linebreaks
|
||||||
|
text = text.replace("\n", "")
|
||||||
|
print(text)
|
||||||
|
|
||||||
20
src/logic/settings.py
Normal file
20
src/logic/settings.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import yaml
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Settings:
|
||||||
|
"""Settings for the app."""
|
||||||
|
save_path: str
|
||||||
|
database_name: str
|
||||||
|
database_path: str
|
||||||
|
default_apps:bool = True
|
||||||
|
custom_applications: list[dict] = field(default_factory=list)
|
||||||
|
def save_settings(self):
|
||||||
|
"""Save the settings to the config file."""
|
||||||
|
with open("config.yaml", "w") as f:
|
||||||
|
yaml.dump(self.__dict__, f)
|
||||||
|
|
||||||
|
#open the config file and load the settings
|
||||||
|
with open("config.yaml", "r") as f:
|
||||||
|
data = yaml.safe_load(f)
|
||||||
|
|
||||||
195
src/logic/threads.py
Normal file
195
src/logic/threads.py
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
|
from PyQt6.QtCore import QThread, pyqtSignal
|
||||||
|
|
||||||
|
from src.backend.database import Database
|
||||||
|
from log import MyLogger
|
||||||
|
from src.transformers import RDS_AVAIL_DATA
|
||||||
|
from src.logic.webrequest import BibTextTransformer, WebRequest
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
class BookGrabber(QThread):
|
||||||
|
updateSignal = pyqtSignal(int, int)
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
mode: str = None,
|
||||||
|
data: list = None,
|
||||||
|
app_id: int = None,
|
||||||
|
prof_id: int = None,
|
||||||
|
parent=None,
|
||||||
|
):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.logger = MyLogger("Worker")
|
||||||
|
self.logger.log_info("Starting worker thread")
|
||||||
|
self.logger.log_info("Worker thread started")
|
||||||
|
self.app_id = app_id
|
||||||
|
self.prof_id = prof_id
|
||||||
|
self.mode = mode
|
||||||
|
self.data = data
|
||||||
|
self.book_id = None
|
||||||
|
self.db_lock = threading.Lock()
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.db = Database()
|
||||||
|
item = 0
|
||||||
|
for entry in self.data:
|
||||||
|
signature = str(entry)
|
||||||
|
self.logger.log_info("Processing entry: " + signature)
|
||||||
|
|
||||||
|
webdata = WebRequest().get_ppn(entry).get_data()
|
||||||
|
if webdata == "error":
|
||||||
|
continue
|
||||||
|
bd = BibTextTransformer(self.mode).get_data(webdata).return_data()
|
||||||
|
transformer = BibTextTransformer("RDS")
|
||||||
|
rds = transformer.get_data(webdata).return_data("rds_availability")
|
||||||
|
bd.signature = entry
|
||||||
|
with self.db_lock:
|
||||||
|
#confirm lock is acquired
|
||||||
|
print("lock acquired, adding book to database")
|
||||||
|
self.db.add_medium(bd, self.app_id, self.prof_id)
|
||||||
|
# get latest book id
|
||||||
|
self.book_id = self.db.get_latest_book_id()
|
||||||
|
self.logger.log_info("Added book to database")
|
||||||
|
state = 0
|
||||||
|
for rds_item in rds.items:
|
||||||
|
sign = rds_item.superlocation
|
||||||
|
loc = rds_item.location
|
||||||
|
# print(item.location)
|
||||||
|
if self.app_id in sign or self.app_id in loc:
|
||||||
|
state = 1
|
||||||
|
book_id = None
|
||||||
|
# for book in self.books:
|
||||||
|
# if book["bookdata"].signature == entry:
|
||||||
|
# book_id = book["id"]
|
||||||
|
# break
|
||||||
|
self.logger.log_info(f"State of {signature}: {state}")
|
||||||
|
with self.db_lock:
|
||||||
|
print(
|
||||||
|
"lock acquired, updating availability of "
|
||||||
|
+ str(book_id)
|
||||||
|
+ " to "
|
||||||
|
+ str(state)
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
self.db.set_availability(self.book_id, state)
|
||||||
|
except sqlite3.OperationalError as e:
|
||||||
|
self.logger.log_error(f"Failed to update availability: {e}")
|
||||||
|
break
|
||||||
|
|
||||||
|
# time.sleep(5)
|
||||||
|
item += 1
|
||||||
|
self.updateSignal.emit(item, len(self.data))
|
||||||
|
self.logger.log_info("Worker thread finished")
|
||||||
|
# teminate thread
|
||||||
|
|
||||||
|
self.quit()
|
||||||
|
|
||||||
|
|
||||||
|
class AvailChecker(QThread):
|
||||||
|
updateSignal = pyqtSignal(str, int)
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, links: list = [], appnumber: int = None, parent=None, books=list[dict]
|
||||||
|
):
|
||||||
|
if links is None:
|
||||||
|
links = []
|
||||||
|
super().__init__(parent)
|
||||||
|
self.logger = MyLogger("AvailChecker")
|
||||||
|
self.logger.log_info("Starting worker thread")
|
||||||
|
self.logger.log_info(
|
||||||
|
"Checking availability for "
|
||||||
|
+ str(links)
|
||||||
|
+ " with appnumber "
|
||||||
|
+ str(appnumber)
|
||||||
|
+ "..."
|
||||||
|
)
|
||||||
|
self.links = links
|
||||||
|
self.appnumber = appnumber
|
||||||
|
self.books = books
|
||||||
|
self.db_lock = threading.Lock()
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.db = Database()
|
||||||
|
state = 0
|
||||||
|
|
||||||
|
for link in self.links:
|
||||||
|
self.logger.log_info("Processing entry: " + str(link))
|
||||||
|
data = WebRequest().get_ppn(link).get_data()
|
||||||
|
transformer = BibTextTransformer("RDS")
|
||||||
|
rds = transformer.get_data(data).return_data("rds_availability")
|
||||||
|
print(rds)
|
||||||
|
for item in rds.items:
|
||||||
|
sign = item.superlocation
|
||||||
|
loc = item.location
|
||||||
|
# print(item.location)
|
||||||
|
if self.appnumber in sign or self.appnumber in loc:
|
||||||
|
state = 1
|
||||||
|
book_id = None
|
||||||
|
for book in self.books:
|
||||||
|
if book["bookdata"].signature == link:
|
||||||
|
book_id = book["id"]
|
||||||
|
break
|
||||||
|
self.logger.log_info(f"State of {link}: " + str(state))
|
||||||
|
with self.db_lock:
|
||||||
|
print(
|
||||||
|
"lock acquired, updating availability of "
|
||||||
|
+ str(book_id)
|
||||||
|
+ " to "
|
||||||
|
+ str(state)
|
||||||
|
)
|
||||||
|
self.db.set_availability(book_id, state)
|
||||||
|
break
|
||||||
|
self.updateSignal.emit(item.callnumber, state)
|
||||||
|
|
||||||
|
self.logger.log_info("Worker thread finished")
|
||||||
|
# teminate thread
|
||||||
|
|
||||||
|
self.quit()
|
||||||
|
|
||||||
|
|
||||||
|
class AutoAdder(QThread):
|
||||||
|
updateSignal = pyqtSignal(int)
|
||||||
|
|
||||||
|
setTextSignal = pyqtSignal(int)
|
||||||
|
progress = pyqtSignal(int)
|
||||||
|
|
||||||
|
def __init__(self, data=None, app_id=None, prof_id=None, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.logger = MyLogger("AutoAdder")
|
||||||
|
self.data = data
|
||||||
|
self.app_id = app_id
|
||||||
|
self.prof_id = prof_id
|
||||||
|
|
||||||
|
print("Launched AutoAdder")
|
||||||
|
print(self.data, self.app_id, self.prof_id)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.db = Database()
|
||||||
|
# show the dialog, start the thread to gather data and dynamically update progressbar and listwidget
|
||||||
|
self.logger.log_info("Starting worker thread")
|
||||||
|
item = 0
|
||||||
|
for entry in self.data:
|
||||||
|
try:
|
||||||
|
# webdata = WebRequest().get_ppn(entry).get_data()
|
||||||
|
# bd = BibTextTransformer("ARRAY").get_data(webdata).return_data()
|
||||||
|
# bd.signature = entry
|
||||||
|
self.updateSignal.emit(item)
|
||||||
|
self.setTextSignal.emit(entry)
|
||||||
|
# qsleep
|
||||||
|
item += 1
|
||||||
|
self.progress.emit(item)
|
||||||
|
print(item, len(self.data))
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
self.logger.log_exception(
|
||||||
|
f"The query failed with message {e} for signature {entry}"
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
if item == len(self.data):
|
||||||
|
self.logger.log_info("Worker thread finished")
|
||||||
|
# teminate thread
|
||||||
|
self.finished.emit()
|
||||||
1974
src/logic/userInterface.py
Normal file
1974
src/logic/userInterface.py
Normal file
File diff suppressed because it is too large
Load Diff
176
src/logic/webrequest.py
Normal file
176
src/logic/webrequest.py
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
import requests
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
from omegaconf import OmegaConf
|
||||||
|
|
||||||
|
from src.logic.dataclass import BookData
|
||||||
|
from log import MyLogger
|
||||||
|
from src.transformers import ARRAYData, BibTeXData, COinSData, RDSData, RISData
|
||||||
|
#import sleep_and_retry decorator to retry requests
|
||||||
|
from ratelimit import limits, sleep_and_retry
|
||||||
|
|
||||||
|
logger = MyLogger(__name__)
|
||||||
|
config = OmegaConf.load("config.yaml")
|
||||||
|
|
||||||
|
API_URL = "https://rds.ibs-bw.de/phfreiburg/opac/RDSIndexrecord/{}/"
|
||||||
|
PPN_URL = 'https://rds.ibs-bw.de/phfreiburg/opac/RDSIndex/Search?lookfor="{}"+&type=AllFields&limit=10&sort=py+desc%2C+title'
|
||||||
|
TITLE = "RDS_TITLE"
|
||||||
|
SIGNATURE = "RDS_SIGNATURE"
|
||||||
|
EDITION = "RDS_EDITION"
|
||||||
|
ISBN = "RDS_ISBN"
|
||||||
|
AUTHOR = "RDS_PERSON"
|
||||||
|
|
||||||
|
HEADERS = {
|
||||||
|
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
|
||||||
|
(KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36",
|
||||||
|
"Accept-Language": "en-US, en;q=0.5",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class WebRequest:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
"""Request data from the web, and format it depending on the mode."""
|
||||||
|
self.signature = None
|
||||||
|
self.ppn = None
|
||||||
|
self.data = None
|
||||||
|
logger.log_info("Initialized WebRequest")
|
||||||
|
|
||||||
|
def get_ppn(self, signature):
|
||||||
|
self.signature = signature
|
||||||
|
if "+" in signature:
|
||||||
|
signature = signature.replace("+", "%2B")
|
||||||
|
if "doi.org" in signature:
|
||||||
|
signature = signature.split("/")[-1]
|
||||||
|
url = PPN_URL.format(signature)
|
||||||
|
page = requests.get(url)
|
||||||
|
|
||||||
|
soup = BeautifulSoup(page.content, "html.parser", from_encoding="utf-8")
|
||||||
|
if soup.find("div", class_="media") is None:
|
||||||
|
logger.log_error(f"No data found for {signature}")
|
||||||
|
return self
|
||||||
|
ppn = soup.find("div", class_="media").get("id")
|
||||||
|
self.ppn = ppn
|
||||||
|
return self
|
||||||
|
|
||||||
|
def get_link_data(self):
|
||||||
|
page = requests.get(PPN_URL.format(self.ppn))
|
||||||
|
soup = BeautifulSoup(page.content, "html.parser")
|
||||||
|
# find div that contains daia_ in the id
|
||||||
|
# find the pre tag in that div
|
||||||
|
# return the text
|
||||||
|
# div = soup.find("div",id=lambda x: x and "daia_" in x)
|
||||||
|
# pre = div.find("pre")
|
||||||
|
return soup
|
||||||
|
|
||||||
|
def get_data(self) -> list[str] | str:
|
||||||
|
# url = API_URL.format(self.ppn)
|
||||||
|
if self.ppn is None:
|
||||||
|
logger.log_error("No PPN found")
|
||||||
|
return "error"
|
||||||
|
page = requests.get(API_URL.format(self.ppn))
|
||||||
|
logger.log_info(f"Requesting data from {API_URL.format(self.ppn)}")
|
||||||
|
logger.log_info(f"Status code: {page.status_code}")
|
||||||
|
# print(page.content)
|
||||||
|
soup = BeautifulSoup(page.content, "html.parser")
|
||||||
|
pre_tag = soup.find_all("pre")
|
||||||
|
# print(pre_tag)
|
||||||
|
return_data = []
|
||||||
|
|
||||||
|
if pre_tag:
|
||||||
|
for tag in pre_tag:
|
||||||
|
data = tag.text.strip()
|
||||||
|
return_data.append(data)
|
||||||
|
return return_data
|
||||||
|
else:
|
||||||
|
print("No <pre> tag found")
|
||||||
|
logger.log_error("No <pre> tag found")
|
||||||
|
return return_data
|
||||||
|
|
||||||
|
|
||||||
|
class BibTextTransformer:
|
||||||
|
def __init__(self, mode: str) -> None:
|
||||||
|
self.mode = mode
|
||||||
|
self.field = None
|
||||||
|
# print(self.field)
|
||||||
|
self.data = None
|
||||||
|
# self.bookdata = BookData(**self.data)
|
||||||
|
|
||||||
|
def get_data(self, data: list) -> str:
|
||||||
|
RIS_IDENT = "TY -"
|
||||||
|
ARRAY_IDENT = "[kid]"
|
||||||
|
COinS_IDENT = "ctx_ver"
|
||||||
|
BIBTEX_IDENT = "@book"
|
||||||
|
RDS_IDENT = "RDS ---------------------------------- "
|
||||||
|
if self.mode == "RIS":
|
||||||
|
for line in data:
|
||||||
|
if RIS_IDENT in line:
|
||||||
|
self.data = line
|
||||||
|
elif self.mode == "ARRAY":
|
||||||
|
for line in data:
|
||||||
|
if ARRAY_IDENT in line:
|
||||||
|
self.data = line
|
||||||
|
elif self.mode == "COinS":
|
||||||
|
for line in data:
|
||||||
|
if COinS_IDENT in line:
|
||||||
|
self.data = line
|
||||||
|
elif self.mode == "BibTeX":
|
||||||
|
for line in data:
|
||||||
|
if BIBTEX_IDENT in line:
|
||||||
|
self.data = line
|
||||||
|
elif self.mode == "RDS":
|
||||||
|
for line in data:
|
||||||
|
if RDS_IDENT in line:
|
||||||
|
self.data = line
|
||||||
|
return self
|
||||||
|
|
||||||
|
def return_data(self, option=None) -> BookData:
|
||||||
|
"""Return Data to caller.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
option (string, optional): Option for RDS as there are two filetypes. Use rds_availability or rds_data. Anything else gives a dict of both responses. Defaults to None.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
BookData: _description_
|
||||||
|
"""
|
||||||
|
if self.mode == "ARRAY":
|
||||||
|
return ARRAYData().transform(self.data)
|
||||||
|
elif self.mode == "COinS":
|
||||||
|
return COinSData().transform(self.data)
|
||||||
|
elif self.mode == "BibTeX":
|
||||||
|
return BibTeXData().transform(self.data)
|
||||||
|
elif self.mode == "RIS":
|
||||||
|
return RISData().transform(self.data)
|
||||||
|
elif self.mode == "RDS":
|
||||||
|
return RDSData().transform(self.data).return_data(option)
|
||||||
|
|
||||||
|
|
||||||
|
def cover(isbn):
|
||||||
|
test_url = f"https://www.buchhandel.de/cover/{isbn}/{isbn}-cover-m.jpg"
|
||||||
|
print(test_url)
|
||||||
|
data = requests.get(test_url, stream=True)
|
||||||
|
return data.content
|
||||||
|
|
||||||
|
|
||||||
|
def get_content(soup, css_class):
|
||||||
|
return soup.find("div", class_=css_class).text.strip()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print("main")
|
||||||
|
link = "ZE 77000 W492"
|
||||||
|
data = WebRequest().get_ppn(link).get_data()
|
||||||
|
|
||||||
|
print(data)
|
||||||
|
# # data.get_ppn("ME 3000 S186 (2)")
|
||||||
|
# # print(data.ppn)
|
||||||
|
# # desc=data.get_data()
|
||||||
|
# # print(type(desc))
|
||||||
|
# # print(desc)
|
||||||
|
# txt = (
|
||||||
|
# BibTextTransformer("RIS")
|
||||||
|
# .get_data(WebRequest().get_ppn("ST 250 U42 (15)").get_data())
|
||||||
|
# .return_data()
|
||||||
|
# )
|
||||||
|
# print(txt)
|
||||||
|
|
||||||
|
# print(data)
|
||||||
|
# print(BibTextTransformer(data).bookdata)
|
||||||
26
src/logic/wordparser.py
Normal file
26
src/logic/wordparser.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from docx import Document
|
||||||
|
|
||||||
|
|
||||||
|
def word_docx_to_csv(path) -> pd.DataFrame:
|
||||||
|
doc = Document(path)
|
||||||
|
tables = doc.tables
|
||||||
|
|
||||||
|
m_data = []
|
||||||
|
for table in tables:
|
||||||
|
data = []
|
||||||
|
for row in table.rows:
|
||||||
|
row_data = []
|
||||||
|
for cell in row.cells:
|
||||||
|
text = cell.text
|
||||||
|
text = text.replace("\n", "")
|
||||||
|
row_data.append(text)
|
||||||
|
data.append(row_data)
|
||||||
|
df = pd.DataFrame(data)
|
||||||
|
df.columns = df.iloc[0]
|
||||||
|
df = df.iloc[1:]
|
||||||
|
|
||||||
|
m_data.append(df)
|
||||||
|
|
||||||
|
df = m_data[2]
|
||||||
|
return df
|
||||||
1
src/transformers/__init__.py
Normal file
1
src/transformers/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .transformers import RDS_AVAIL_DATA, ARRAYData, COinSData, BibTeXData, RISData, RDSData
|
||||||
310
src/transformers/transformers.py
Normal file
310
src/transformers/transformers.py
Normal file
@@ -0,0 +1,310 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from dataclasses import field as dataclass_field
|
||||||
|
from typing import Any, List, Optional
|
||||||
|
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
from src.logic.dataclass import BookData
|
||||||
|
from log import MyLogger
|
||||||
|
|
||||||
|
logger = MyLogger("transformers.py")
|
||||||
|
|
||||||
|
|
||||||
|
###Pydatnic models
|
||||||
|
@dataclass
|
||||||
|
class Item:
|
||||||
|
superlocation: str | None = dataclass_field(default_factory=str)
|
||||||
|
status: str | None = dataclass_field(default_factory=str)
|
||||||
|
availability: str | None = dataclass_field(default_factory=str)
|
||||||
|
notes: str | None = dataclass_field(default_factory=str)
|
||||||
|
limitation: str | None = dataclass_field(default_factory=str)
|
||||||
|
duedate: str | None = dataclass_field(default_factory=str)
|
||||||
|
id: str | None = dataclass_field(default_factory=str)
|
||||||
|
item_id: str | None = dataclass_field(default_factory=str)
|
||||||
|
ilslink: str | None = dataclass_field(default_factory=str)
|
||||||
|
number: int | None = dataclass_field(default_factory=int)
|
||||||
|
barcode: str | None = dataclass_field(default_factory=str)
|
||||||
|
reserve: str | None = dataclass_field(default_factory=str)
|
||||||
|
callnumber: str | None = dataclass_field(default_factory=str)
|
||||||
|
department: str | None = dataclass_field(default_factory=str)
|
||||||
|
locationhref: str | None = dataclass_field(default_factory=str)
|
||||||
|
location: str | None = dataclass_field(default_factory=str)
|
||||||
|
|
||||||
|
def from_dict(self, data: dict) -> self:
|
||||||
|
"""Import data from dict"""
|
||||||
|
data = data["items"]
|
||||||
|
for entry in data:
|
||||||
|
for key, value in entry.items():
|
||||||
|
setattr(self, key, value)
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class RDS_AVAIL_DATA:
|
||||||
|
"""Class to store RDS availability data"""
|
||||||
|
|
||||||
|
library_sigil: str = dataclass_field(default_factory=str)
|
||||||
|
items: List[Item] = dataclass_field(default_factory=list)
|
||||||
|
|
||||||
|
def import_from_dict(self, data: str) -> self:
|
||||||
|
"""Import data from dict"""
|
||||||
|
edata = json.loads(data)
|
||||||
|
# library sigil is first key
|
||||||
|
|
||||||
|
self.library_sigil = str(list(edata.keys())[0])
|
||||||
|
# get data from first key
|
||||||
|
edata = edata[self.library_sigil]
|
||||||
|
for location in edata:
|
||||||
|
item = Item(superlocation=location).from_dict(edata[location])
|
||||||
|
|
||||||
|
self.items.append(item)
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class RDS_DATA:
|
||||||
|
"""Class to store RDS data"""
|
||||||
|
|
||||||
|
RDS_SIGNATURE: str = dataclass_field(default_factory=str)
|
||||||
|
RDS_STATUS: str = dataclass_field(default_factory=str)
|
||||||
|
RDS_LOCATION: str = dataclass_field(default_factory=str)
|
||||||
|
RDS_URL: Any = dataclass_field(default_factory=str)
|
||||||
|
RDS_HINT: Any = dataclass_field(default_factory=str)
|
||||||
|
RDS_COMMENT: Any = dataclass_field(default_factory=str)
|
||||||
|
RDS_HOLDING: Any = dataclass_field(default_factory=str)
|
||||||
|
RDS_HOLDING_LEAK: Any = dataclass_field(default_factory=str)
|
||||||
|
RDS_INTERN: Any = dataclass_field(default_factory=str)
|
||||||
|
RDS_PROVENIENCE: Any = dataclass_field(default_factory=str)
|
||||||
|
RDS_LOCAL_NOTATION: str = dataclass_field(default_factory=str)
|
||||||
|
RDS_LEA: Any = dataclass_field(default_factory=str)
|
||||||
|
|
||||||
|
def import_from_dict(self, data: dict) -> RDS_DATA:
|
||||||
|
"""Import data from dict"""
|
||||||
|
for key, value in data.items():
|
||||||
|
setattr(self, key, value)
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class RDS_GENERIC_DATA:
|
||||||
|
LibrarySigil: str = dataclass_field(default_factory=str)
|
||||||
|
RDS_DATA: List[RDS_DATA] = dataclass_field(default_factory=list)
|
||||||
|
|
||||||
|
def import_from_dict(self, data: str) -> RDS_GENERIC_DATA:
|
||||||
|
"""Import data from dict"""
|
||||||
|
edata = json.loads(data)
|
||||||
|
# library sigil is first key
|
||||||
|
self.LibrarySigil = str(list(edata.keys())[0])
|
||||||
|
# get data from first key
|
||||||
|
edata = edata[self.LibrarySigil]
|
||||||
|
for entry in edata:
|
||||||
|
rds_data = RDS_DATA() # Create a new RDS_DATA instance
|
||||||
|
# Populate the RDS_DATA instance from the entry
|
||||||
|
# This assumes that the entry is a dictionary that matches the structure of the RDS_DATA class
|
||||||
|
rds_data.import_from_dict(entry)
|
||||||
|
self.RDS_DATA.append(rds_data) # Add the RDS_DATA instance to the list
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
class BaseStruct:
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
for key, value in kwargs.items():
|
||||||
|
setattr(self, key, value)
|
||||||
|
|
||||||
|
|
||||||
|
class ARRAYData:
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def transform(self, data: str) -> BookData:
|
||||||
|
def _get_line(source: str, search: str) -> str:
|
||||||
|
try:
|
||||||
|
return (
|
||||||
|
source.split(search)[1]
|
||||||
|
.split("\n")[0]
|
||||||
|
.strip()
|
||||||
|
.replace("=>", "")
|
||||||
|
.strip()
|
||||||
|
)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.log_exception("ARRAYData.transform failed")
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def _get_list_entry(source: str, search: str, entry: str) -> str:
|
||||||
|
try:
|
||||||
|
source = source.replace("\t", "").replace("\r", "")
|
||||||
|
source = source.split(search)[1].split(")")[0]
|
||||||
|
return _get_line(source, entry).replace("=>", "").strip()
|
||||||
|
except:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def _get_isbn(source: str) -> list:
|
||||||
|
try:
|
||||||
|
isbn = source.split("[isbn]")[1].split(")")[0].strip()
|
||||||
|
isbn = isbn.split("(")[1]
|
||||||
|
isbns = isbn.split("=>")
|
||||||
|
ret = []
|
||||||
|
for _ in isbns:
|
||||||
|
# remove _ from list
|
||||||
|
isb = _.split("\n")[0].strip()
|
||||||
|
if isb == "":
|
||||||
|
continue
|
||||||
|
ret.append(isb) if isb not in ret else None
|
||||||
|
return ret
|
||||||
|
except:
|
||||||
|
isbn = []
|
||||||
|
return isbn
|
||||||
|
|
||||||
|
return BookData(
|
||||||
|
ppn=_get_line(data, "[kid]"),
|
||||||
|
title=_get_line(data, "[ti_long]").split("/")[0].strip(),
|
||||||
|
author=_get_list_entry(data, "[au]", "[0]"),
|
||||||
|
edition=_get_list_entry(data, "[ausgabe]", "[0]").replace(",", ""),
|
||||||
|
link=f"https://rds.ibs-bw.de/phfreiburg/link?kid={_get_line(data,'[kid]')}",
|
||||||
|
isbn=_get_isbn(data),
|
||||||
|
# [self._get_list_entry(data,"[isbn]","[0]"),self._get_list_entry(data,"[is]","[1]")],
|
||||||
|
language=_get_list_entry(data, "[la_facet]", "[0]"),
|
||||||
|
publisher=_get_list_entry(data, "[hg]", "[0]"),
|
||||||
|
year=_get_line(data, "[py]"),
|
||||||
|
pages=_get_list_entry(data, "[umfang]", "[0]").split(":")[0].strip(),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class COinSData:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def transform(self, data: str) -> BookData:
|
||||||
|
def _get_line(source: str, search: str) -> str:
|
||||||
|
try:
|
||||||
|
data = source.split(f"{search}=")[1] # .split("")[0].strip()
|
||||||
|
return data.split("rft")[0].strip() if "rft" in data else data
|
||||||
|
except:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
return BookData(
|
||||||
|
ppn=_get_line(data, "rft_id").split("=")[1],
|
||||||
|
title=_get_line(data, "rft.btitle"),
|
||||||
|
author=f"{_get_line(data,'rft.aulast')}, {_get_line(data,'rft.aufirst')}",
|
||||||
|
edition=_get_line(data, "rft.edition"),
|
||||||
|
link=_get_line(data, "rft_id"),
|
||||||
|
isbn=_get_line(data, "rft.isbn"),
|
||||||
|
publisher=_get_line(data, "rft.pub"),
|
||||||
|
year=_get_line(data, "rft.date"),
|
||||||
|
pages=_get_line(data, "rft.tpages").split(":")[0].strip(),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class RISData:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def transform(self, data: str) -> BookData:
|
||||||
|
def _get_line(source: str, search: str) -> str:
|
||||||
|
try:
|
||||||
|
data = source.split(f"{search} - ")[1] # .split("")[0].strip()
|
||||||
|
return data.split("\n")[0].strip() if "\n" in data else data
|
||||||
|
except:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
return BookData(
|
||||||
|
ppn=_get_line(data, "DP").split("=")[1],
|
||||||
|
title=_get_line(data, "TI"),
|
||||||
|
signature=_get_line(data, "CN"),
|
||||||
|
edition=_get_line(data, "ET").replace(",", ""),
|
||||||
|
link=_get_line(data, "DP"),
|
||||||
|
isbn=_get_line(data, "SN").split(","),
|
||||||
|
author=_get_line(data, "AU").split("[")[0].strip(),
|
||||||
|
language=_get_line(data, "LA"),
|
||||||
|
publisher=_get_line(data, "PB"),
|
||||||
|
year=_get_line(data, "PY"),
|
||||||
|
pages=_get_line(data, "SP"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class BibTeXData:
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def transform(self, data: str) -> BookData:
|
||||||
|
def _get_line(source: str, search: str) -> str:
|
||||||
|
try:
|
||||||
|
return (
|
||||||
|
data.split(search)[1]
|
||||||
|
.split("\n")[0]
|
||||||
|
.strip()
|
||||||
|
.split("=")[1]
|
||||||
|
.strip()
|
||||||
|
.replace("{", "")
|
||||||
|
.replace("}", "")
|
||||||
|
.replace(",", "")
|
||||||
|
.replace("[", "")
|
||||||
|
.replace("];", "")
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
return BookData(
|
||||||
|
ppn=None,
|
||||||
|
title=_get_line(data, "title"),
|
||||||
|
signature=_get_line(data, "bestand"),
|
||||||
|
edition=_get_line(data, "edition"),
|
||||||
|
isbn=_get_line(data, "isbn"),
|
||||||
|
author=";".join(_get_line(data, "author").split(" and ")),
|
||||||
|
language=_get_line(data, "language"),
|
||||||
|
publisher=_get_line(data, "publisher"),
|
||||||
|
year=_get_line(data, "year"),
|
||||||
|
pages=_get_line(data, "pages"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class RDSData:
|
||||||
|
retlist = []
|
||||||
|
|
||||||
|
def transform(self, data: str):
|
||||||
|
# rds_availability = RDS_AVAIL_DATA()
|
||||||
|
# rds_data = RDS_GENERIC_DATA()
|
||||||
|
def __get_raw_data(data: str) -> list:
|
||||||
|
# create base data to be turned into pydantic classes
|
||||||
|
data = data.split("RDS ----------------------------------")[1]
|
||||||
|
edata = data.strip()
|
||||||
|
edata = edata.split("\n", 9)[9]
|
||||||
|
edata = edata.split("\n")[1:]
|
||||||
|
entry_1 = edata[0]
|
||||||
|
edata = edata[1:]
|
||||||
|
entry_2 = "".join(edata)
|
||||||
|
edata = []
|
||||||
|
edata.append(entry_1)
|
||||||
|
edata.append(entry_2)
|
||||||
|
return edata
|
||||||
|
|
||||||
|
ret_data = __get_raw_data(data)
|
||||||
|
# assign data[1] to RDS_AVAIL_DATA
|
||||||
|
# assign data[0] to RDS_DATA
|
||||||
|
self.rds_data = RDS_GENERIC_DATA().import_from_dict(ret_data[1])
|
||||||
|
self.rds_availability = RDS_AVAIL_DATA().import_from_dict(ret_data[0])
|
||||||
|
self.retlist.append(self.rds_availability)
|
||||||
|
self.retlist.append(self.rds_data)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def return_data(self, option=None):
|
||||||
|
if option == "rds_availability":
|
||||||
|
return self.retlist[0]
|
||||||
|
elif option == "rds_data":
|
||||||
|
return self.retlist[1]
|
||||||
|
else:
|
||||||
|
return {"rds_availability": self.retlist[0], "rds_data": self.retlist[1]}
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
with open("daiadata", "r") as f:
|
||||||
|
data = f.read()
|
||||||
|
|
||||||
|
ret = RDSData().transform(data)
|
||||||
|
data = ret.return_data("rds_availability")
|
||||||
|
print(data)
|
||||||
47
src/ui/Ui_plotdata.py
Normal file
47
src/ui/Ui_plotdata.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\plotdata.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(640, 480)
|
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget)
|
||||||
|
self.graphicsView.setGeometry(QtCore.QRect(330, 10, 256, 192))
|
||||||
|
self.graphicsView.setObjectName("graphicsView")
|
||||||
|
self.widget = QtWidgets.QWidget(self.centralwidget)
|
||||||
|
self.widget.setGeometry(QtCore.QRect(10, 0, 251, 271))
|
||||||
|
self.widget.setObjectName("widget")
|
||||||
|
self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
|
||||||
|
self.stackedWidget.setGeometry(QtCore.QRect(300, 220, 291, 201))
|
||||||
|
self.stackedWidget.setObjectName("stackedWidget")
|
||||||
|
self.page = QtWidgets.QWidget()
|
||||||
|
self.page.setObjectName("page")
|
||||||
|
self.stackedWidget.addWidget(self.page)
|
||||||
|
self.page_2 = QtWidgets.QWidget()
|
||||||
|
self.page_2.setObjectName("page_2")
|
||||||
|
self.stackedWidget.addWidget(self.page_2)
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||||
|
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
|
||||||
|
self.menubar.setObjectName("menubar")
|
||||||
|
MainWindow.setMenuBar(self.menubar)
|
||||||
|
self.statusbar = QtWidgets.QStatusBar(MainWindow)
|
||||||
|
self.statusbar.setObjectName("statusbar")
|
||||||
|
MainWindow.setStatusBar(self.statusbar)
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||||
1445
src/ui/Ui_semesterapparat_ui.py
Normal file
1445
src/ui/Ui_semesterapparat_ui.py
Normal file
File diff suppressed because it is too large
Load Diff
232
src/ui/Ui_semesterapparat_ui.ts
Normal file
232
src/ui/Ui_semesterapparat_ui.ts
Normal file
@@ -0,0 +1,232 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1" language="de_DE" sourcelanguage="de_DE">
|
||||||
|
<context>
|
||||||
|
<name>MainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="543"/>
|
||||||
|
<source>MainWindow</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="544"/>
|
||||||
|
<source>Load the Semesterapparate from the database</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="545"/>
|
||||||
|
<source>App. aufrufen</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="546"/>
|
||||||
|
<source>neu. App anlegen</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="547"/>
|
||||||
|
<source>Auswahl abbrechen</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="550"/>
|
||||||
|
<source>AppNr</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="552"/>
|
||||||
|
<source>App Name</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="554"/>
|
||||||
|
<source>Professor</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="556"/>
|
||||||
|
<source>gültig bis</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="580"/>
|
||||||
|
<source>Dauerapparat</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="560"/>
|
||||||
|
<source>KontoNr</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="561"/>
|
||||||
|
<source>Apparatsdetails</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="563"/>
|
||||||
|
<source>Dokumentname</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="565"/>
|
||||||
|
<source>Dateityp</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="567"/>
|
||||||
|
<source>Neu?</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="569"/>
|
||||||
|
<source>path</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="570"/>
|
||||||
|
<source>Apparatsname</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="571"/>
|
||||||
|
<source>Winter</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="572"/>
|
||||||
|
<source>Prof. Name</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="573"/>
|
||||||
|
<source>Sommer</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="574"/>
|
||||||
|
<source>Prof. Titel</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="575"/>
|
||||||
|
<source>Semester</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="576"/>
|
||||||
|
<source>2023</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="577"/>
|
||||||
|
<source>Apparatsnummer</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="578"/>
|
||||||
|
<source>Speichern</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="579"/>
|
||||||
|
<source>Aktualisieren</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="581"/>
|
||||||
|
<source>Mail</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="582"/>
|
||||||
|
<source>Tel</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="583"/>
|
||||||
|
<source>Fach</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="589"/>
|
||||||
|
<source>*</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="590"/>
|
||||||
|
<source>Dokument hinzufügen</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="591"/>
|
||||||
|
<source>Dokument öffnen</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="594"/>
|
||||||
|
<source>Buchtitel</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="596"/>
|
||||||
|
<source>Signatur</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="598"/>
|
||||||
|
<source>Auflage</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="600"/>
|
||||||
|
<source>Autor</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="602"/>
|
||||||
|
<source>Link</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="603"/>
|
||||||
|
<source> Medienliste</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="604"/>
|
||||||
|
<source>gel. Medien anzeigen</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="605"/>
|
||||||
|
<source>Medien hinzufügen</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="606"/>
|
||||||
|
<source>Tab 1</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="607"/>
|
||||||
|
<source>Tab 2</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="608"/>
|
||||||
|
<source>Datei</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="609"/>
|
||||||
|
<source>Einstellungen</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="Ui_semesterapparat_ui.py" line="610"/>
|
||||||
|
<source>Beenden</source>
|
||||||
|
<translation></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
||||||
71
src/ui/Ui_setupwizard.py
Normal file
71
src/ui/Ui_setupwizard.py
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\setupwizard.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Wizard(object):
|
||||||
|
def setupUi(self, Wizard):
|
||||||
|
Wizard.setObjectName("Wizard")
|
||||||
|
Wizard.resize(640, 480)
|
||||||
|
Wizard.setMaximumSize(QtCore.QSize(640, 480))
|
||||||
|
self.wizardPage1 = QtWidgets.QWizardPage()
|
||||||
|
self.wizardPage1.setObjectName("wizardPage1")
|
||||||
|
self.textBrowser = QtWidgets.QTextBrowser(self.wizardPage1)
|
||||||
|
self.textBrowser.setGeometry(QtCore.QRect(200, 10, 256, 192))
|
||||||
|
self.textBrowser.setObjectName("textBrowser")
|
||||||
|
Wizard.addPage(self.wizardPage1)
|
||||||
|
self.wizardPage2 = QtWidgets.QWizardPage()
|
||||||
|
self.wizardPage2.setObjectName("wizardPage2")
|
||||||
|
self.label = QtWidgets.QLabel(self.wizardPage2)
|
||||||
|
self.label.setGeometry(QtCore.QRect(10, 0, 131, 16))
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.wizardPage2)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(10, 40, 71, 16))
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.default_apps = QtWidgets.QCheckBox(self.wizardPage2)
|
||||||
|
self.default_apps.setGeometry(QtCore.QRect(100, 40, 70, 17))
|
||||||
|
self.default_apps.setText("")
|
||||||
|
self.default_apps.setObjectName("default_apps")
|
||||||
|
self.label_3 = QtWidgets.QLabel(self.wizardPage2)
|
||||||
|
self.label_3.setGeometry(QtCore.QRect(10, 70, 61, 16))
|
||||||
|
self.label_3.setObjectName("label_3")
|
||||||
|
self.custom_applications = QtWidgets.QFrame(self.wizardPage2)
|
||||||
|
self.custom_applications.setGeometry(QtCore.QRect(280, 10, 331, 361))
|
||||||
|
self.custom_applications.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.custom_applications.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.custom_applications.setObjectName("custom_applications")
|
||||||
|
self.save_path = QtWidgets.QLineEdit(self.wizardPage2)
|
||||||
|
self.save_path.setGeometry(QtCore.QRect(80, 70, 113, 20))
|
||||||
|
self.save_path.setObjectName("save_path")
|
||||||
|
self.btn_save_path_select = QtWidgets.QToolButton(self.wizardPage2)
|
||||||
|
self.btn_save_path_select.setGeometry(QtCore.QRect(200, 70, 25, 19))
|
||||||
|
self.btn_save_path_select.setObjectName("btn_save_path_select")
|
||||||
|
Wizard.addPage(self.wizardPage2)
|
||||||
|
|
||||||
|
self.retranslateUi(Wizard)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Wizard)
|
||||||
|
|
||||||
|
def retranslateUi(self, Wizard):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Wizard.setWindowTitle(_translate("Wizard", "Wizard"))
|
||||||
|
self.textBrowser.setHtml(_translate("Wizard", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
|
||||||
|
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
|
||||||
|
"p, li { white-space: pre-wrap; }\n"
|
||||||
|
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
|
||||||
|
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Setup für das Semesterapparatsprogram.</p>\n"
|
||||||
|
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
|
||||||
|
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Im Anschluss werden wichtige Einstellungen gesetzt, welche auch im späteren Verlauf verändert werden können.</p>\n"
|
||||||
|
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
|
||||||
|
self.label.setText(_translate("Wizard", "Grundeinstellungen"))
|
||||||
|
self.label_2.setToolTip(_translate("Wizard", "Opens the downloaded files with the default applications set in the OS"))
|
||||||
|
self.label_2.setText(_translate("Wizard", "Default Apps"))
|
||||||
|
self.label_3.setToolTip(_translate("Wizard", "Path where the downloaded files are stored. Defaults to ~/Desktop/SemapFiles"))
|
||||||
|
self.label_3.setText(_translate("Wizard", "Save Path"))
|
||||||
|
self.save_path.setPlaceholderText(_translate("Wizard", "~/Desktop/SemapFiles"))
|
||||||
|
self.btn_save_path_select.setText(_translate("Wizard", "..."))
|
||||||
29
src/ui/__init__.py
Normal file
29
src/ui/__init__.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import pathlib
|
||||||
|
|
||||||
|
from .dialogs import (
|
||||||
|
App_Ext_Dialog,
|
||||||
|
Mail_Dialog,
|
||||||
|
Settings,
|
||||||
|
edit_bookdata_ui,
|
||||||
|
fileparser_ui,
|
||||||
|
login_ui,
|
||||||
|
medienadder_ui,
|
||||||
|
parsed_titles_ui,
|
||||||
|
popus_confirm,
|
||||||
|
reminder_ui,
|
||||||
|
settings_ui,
|
||||||
|
new_subject_ui,
|
||||||
|
)
|
||||||
|
from .Ui_semesterapparat_ui import Ui_MainWindow as Ui_Semesterapparat
|
||||||
|
from .Ui_setupwizard import Ui_Wizard as SetupWizard
|
||||||
|
from .widgets import (
|
||||||
|
FilePicker,
|
||||||
|
GraphWidget,
|
||||||
|
Message_Widget,
|
||||||
|
StatusWidget,
|
||||||
|
)
|
||||||
|
|
||||||
|
path = pathlib.Path(__file__).parent.absolute()
|
||||||
|
# from .mainwindow import Ui_MainWindow as Ui_MainWindow
|
||||||
|
# from .sap import Ui_MainWindow as MainWindow_SAP
|
||||||
|
__all__ = ["mainwindow", "sap", "dialogs", "widgets"]
|
||||||
157
src/ui/dialogs/Ui_edit_bookdata.py
Normal file
157
src/ui/dialogs/Ui_edit_bookdata.py
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\dialogs\edit_bookdata.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
from src.logic.dataclass import BookData
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Metadaten")
|
||||||
|
Dialog.resize(448, 572)
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(260, 530, 161, 32))
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
|
||||||
|
self.buttonBox.setStandardButtons(
|
||||||
|
QtWidgets.QDialogButtonBox.StandardButton.Cancel
|
||||||
|
| QtWidgets.QDialogButtonBox.StandardButton.Ok
|
||||||
|
)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.gridLayoutWidget = QtWidgets.QWidget(Dialog)
|
||||||
|
self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 0, 441, 531))
|
||||||
|
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
|
||||||
|
self.gridLayout.setSizeConstraint(
|
||||||
|
QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint
|
||||||
|
)
|
||||||
|
self.gridLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.label_10 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_10.setObjectName("label_10")
|
||||||
|
self.gridLayout.addWidget(self.label_10, 10, 1, 1, 1)
|
||||||
|
self.label = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.gridLayout.addWidget(self.label, 0, 1, 1, 1)
|
||||||
|
self.label_9 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_9.setObjectName("label_9")
|
||||||
|
self.gridLayout.addWidget(self.label_9, 9, 1, 1, 1)
|
||||||
|
self.label_8 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_8.setObjectName("label_8")
|
||||||
|
self.gridLayout.addWidget(self.label_8, 8, 1, 1, 1)
|
||||||
|
self.label_12 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_12.setObjectName("label_12")
|
||||||
|
self.gridLayout.addWidget(self.label_12, 6, 1, 1, 1)
|
||||||
|
self.line_edition = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_edition.setObjectName("line_edition")
|
||||||
|
self.gridLayout.addWidget(self.line_edition, 2, 2, 1, 1)
|
||||||
|
self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_3.setObjectName("label_3")
|
||||||
|
self.gridLayout.addWidget(self.label_3, 2, 1, 1, 1)
|
||||||
|
self.label_4 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_4.setObjectName("label_4")
|
||||||
|
self.gridLayout.addWidget(self.label_4, 3, 1, 1, 1)
|
||||||
|
self.line_link = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_link.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
|
||||||
|
self.line_link.setReadOnly(True)
|
||||||
|
self.line_link.setObjectName("line_link")
|
||||||
|
self.gridLayout.addWidget(self.line_link, 6, 2, 1, 1)
|
||||||
|
self.label_5 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.gridLayout.addWidget(self.label_5, 4, 1, 1, 1)
|
||||||
|
self.label_7 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_7.setObjectName("label_7")
|
||||||
|
self.gridLayout.addWidget(self.label_7, 7, 1, 1, 1)
|
||||||
|
self.label_6 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_6.setObjectName("label_6")
|
||||||
|
self.gridLayout.addWidget(self.label_6, 5, 1, 1, 1)
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.gridLayout.addWidget(self.label_2, 1, 1, 1, 1)
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(
|
||||||
|
5,
|
||||||
|
20,
|
||||||
|
QtWidgets.QSizePolicy.Policy.Fixed,
|
||||||
|
QtWidgets.QSizePolicy.Policy.Minimum,
|
||||||
|
)
|
||||||
|
self.gridLayout.addItem(spacerItem, 8, 0, 1, 1)
|
||||||
|
self.line_title = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_title.setObjectName("line_title")
|
||||||
|
self.gridLayout.addWidget(self.line_title, 0, 2, 1, 1)
|
||||||
|
self.line_signature = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_signature.setObjectName("line_signature")
|
||||||
|
self.gridLayout.addWidget(self.line_signature, 1, 2, 1, 1)
|
||||||
|
self.line_author = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_author.setObjectName("line_author")
|
||||||
|
self.gridLayout.addWidget(self.line_author, 3, 2, 1, 1)
|
||||||
|
self.line_lang = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_lang.setObjectName("line_lang")
|
||||||
|
self.gridLayout.addWidget(self.line_lang, 8, 2, 1, 1)
|
||||||
|
self.line_ppn = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_ppn.setObjectName("line_ppn")
|
||||||
|
self.gridLayout.addWidget(self.line_ppn, 5, 2, 1, 1)
|
||||||
|
self.line_isbn = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_isbn.setObjectName("line_isbn")
|
||||||
|
self.gridLayout.addWidget(self.line_isbn, 7, 2, 1, 1)
|
||||||
|
self.line_year = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_year.setObjectName("line_year")
|
||||||
|
self.gridLayout.addWidget(self.line_year, 9, 2, 1, 1)
|
||||||
|
self.line_pages = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_pages.setObjectName("line_pages")
|
||||||
|
self.gridLayout.addWidget(self.line_pages, 10, 2, 1, 1)
|
||||||
|
self.line_publisher = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.line_publisher.setObjectName("line_publisher")
|
||||||
|
self.gridLayout.addWidget(self.line_publisher, 4, 2, 1, 1)
|
||||||
|
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label_10.setText(_translate("Dialog", "Seiten"))
|
||||||
|
self.label.setText(_translate("Dialog", "Titel"))
|
||||||
|
self.label_9.setText(_translate("Dialog", "Jahr"))
|
||||||
|
self.label_8.setText(_translate("Dialog", "Sprache"))
|
||||||
|
self.label_12.setText(_translate("Dialog", "Link"))
|
||||||
|
self.label_3.setText(_translate("Dialog", "Auflage"))
|
||||||
|
self.label_4.setText(_translate("Dialog", "Autor"))
|
||||||
|
self.label_5.setText(_translate("Dialog", "Herausgeber"))
|
||||||
|
self.label_7.setText(_translate("Dialog", "ISBN(s)"))
|
||||||
|
self.label_6.setText(_translate("Dialog", "PPN"))
|
||||||
|
self.label_2.setText(_translate("Dialog", "Signatur"))
|
||||||
|
|
||||||
|
def populate_fields(self, data: BookData):
|
||||||
|
self.line_author.setText(data.author)
|
||||||
|
self.line_edition.setText(data.edition)
|
||||||
|
self.line_isbn.setText(", ".join(data.isbn))
|
||||||
|
self.line_lang.setText(data.language)
|
||||||
|
self.line_link.setText(data.link)
|
||||||
|
self.line_pages.setText(data.pages)
|
||||||
|
self.line_ppn.setText(data.ppn)
|
||||||
|
self.line_publisher.setText(data.publisher)
|
||||||
|
self.line_signature.setText(data.signature)
|
||||||
|
self.line_title.setText(data.title)
|
||||||
|
self.line_year.setText(data.year)
|
||||||
|
|
||||||
|
def get_data(self) -> BookData:
|
||||||
|
return BookData(
|
||||||
|
ppn=self.line_ppn.text().strip(),
|
||||||
|
title=self.line_title.text().strip(),
|
||||||
|
signature=self.line_signature.text().strip(),
|
||||||
|
edition=self.line_edition.text().strip(),
|
||||||
|
link=self.line_link.text().strip(),
|
||||||
|
isbn=self.line_isbn.text().split(","),
|
||||||
|
author=self.line_author.text().strip(),
|
||||||
|
language=self.line_lang.text().strip(),
|
||||||
|
publisher=self.line_publisher.text().strip(),
|
||||||
|
year=self.line_year.text().strip(),
|
||||||
|
pages=self.line_pages.text().strip(),
|
||||||
|
)
|
||||||
109
src/ui/dialogs/Ui_fileparser.py
Normal file
109
src/ui/dialogs/Ui_fileparser.py
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\dialogs\fileparser.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
from src.logic.webrequest import BibTextTransformer, WebRequest
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(402, 301)
|
||||||
|
self.progressBar = QtWidgets.QProgressBar(Dialog)
|
||||||
|
self.progressBar.setGeometry(QtCore.QRect(10, 60, 381, 23))
|
||||||
|
self.progressBar.setProperty("value", 24)
|
||||||
|
self.progressBar.setObjectName("progressBar")
|
||||||
|
self.frame = QtWidgets.QFrame(Dialog)
|
||||||
|
self.frame.setGeometry(QtCore.QRect(10, 10, 381, 41))
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.horizontalLayoutWidget = QtWidgets.QWidget(self.frame)
|
||||||
|
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 381, 41))
|
||||||
|
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
|
||||||
|
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
|
||||||
|
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
|
self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.horizontalLayout.addWidget(self.label)
|
||||||
|
self.count = QtWidgets.QLabel(self.horizontalLayoutWidget)
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setBold(True)
|
||||||
|
font.setWeight(75)
|
||||||
|
self.count.setFont(font)
|
||||||
|
self.count.setTextFormat(QtCore.Qt.TextFormat.PlainText)
|
||||||
|
self.count.setObjectName("count")
|
||||||
|
self.horizontalLayout.addWidget(self.count)
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.horizontalLayoutWidget)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.horizontalLayout.addWidget(self.label_2)
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(
|
||||||
|
40,
|
||||||
|
20,
|
||||||
|
QtWidgets.QSizePolicy.Policy.Expanding,
|
||||||
|
QtWidgets.QSizePolicy.Policy.Minimum,
|
||||||
|
)
|
||||||
|
self.horizontalLayout.addItem(spacerItem)
|
||||||
|
self.frame_2 = QtWidgets.QFrame(Dialog)
|
||||||
|
self.frame_2.setGeometry(QtCore.QRect(10, 100, 381, 201))
|
||||||
|
self.frame_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame_2.setObjectName("frame_2")
|
||||||
|
self.listWidget = QtWidgets.QListWidget(self.frame_2)
|
||||||
|
self.listWidget.setGeometry(QtCore.QRect(0, 0, 381, 191))
|
||||||
|
self.listWidget.setObjectName("listWidget")
|
||||||
|
self.signatures = []
|
||||||
|
self.returned = []
|
||||||
|
# self.data_gathering_complete = QtCore.pyqtSignal()
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label.setText(_translate("Dialog", "Es wurden"))
|
||||||
|
self.count.setText(_translate("Dialog", "0"))
|
||||||
|
self.label_2.setText(_translate("Dialog", "Signaturen gefunden."))
|
||||||
|
|
||||||
|
def moveToThread(self, thread):
|
||||||
|
self.progressBar.moveToThread(thread)
|
||||||
|
self.frame.moveToThread(thread)
|
||||||
|
self.horizontalLayoutWidget.moveToThread(thread)
|
||||||
|
self.horizontalLayout.moveToThread(thread)
|
||||||
|
self.label.moveToThread(thread)
|
||||||
|
self.count.moveToThread(thread)
|
||||||
|
self.label_2.moveToThread(thread)
|
||||||
|
self.frame_2.moveToThread(thread)
|
||||||
|
self.listWidget.moveToThread(thread)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
for signature in self.signatures:
|
||||||
|
self.count.setText(str(self.signatures.index(signature) + 1))
|
||||||
|
self.listWidget.addItem(signature)
|
||||||
|
webdata = WebRequest().get_ppn(signature).get_data()
|
||||||
|
bookdata = BibTextTransformer("ARRAY").get_data(webdata).return_data()
|
||||||
|
self.returned.append(bookdata)
|
||||||
|
self.progressBar.setValue(self.signatures.index(signature) + 1)
|
||||||
|
# self.data_gathering_complete.emit()
|
||||||
|
|
||||||
|
def deleteLater(self):
|
||||||
|
self.progressBar.deleteLater()
|
||||||
|
self.frame.deleteLater()
|
||||||
|
self.horizontalLayoutWidget.deleteLater()
|
||||||
|
self.horizontalLayout.deleteLater()
|
||||||
|
self.label.deleteLater()
|
||||||
|
self.count.deleteLater()
|
||||||
|
self.label_2.deleteLater()
|
||||||
|
self.frame_2.deleteLater()
|
||||||
|
self.listWidget.deleteLater()
|
||||||
|
self.signatures = []
|
||||||
|
self.returned = []
|
||||||
|
self.retranslateUi.deleteLater()
|
||||||
|
super().deleteLater()
|
||||||
113
src/ui/dialogs/Ui_login.py
Normal file
113
src/ui/dialogs/Ui_login.py
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
# Form implementation generated from reading ui file '/home/alexander/GitHub/Semesterapparate/ui/dialogs/login.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.5.3
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtWidgets
|
||||||
|
|
||||||
|
from src.backend.database import Database
|
||||||
|
from src.backend.admin_console import AdminCommands
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(218, 190)
|
||||||
|
self.dialog = Dialog
|
||||||
|
self.login_button = QtWidgets.QPushButton(parent=Dialog)
|
||||||
|
self.login_button.setGeometry(QtCore.QRect(30, 140, 76, 32))
|
||||||
|
self.login_button.setObjectName("login_button")
|
||||||
|
self.login_button.setText("Login")
|
||||||
|
self.login_button.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
|
||||||
|
self.cancel_button = QtWidgets.QPushButton(parent=Dialog)
|
||||||
|
self.cancel_button.setGeometry(QtCore.QRect(120, 140, 76, 32))
|
||||||
|
self.cancel_button.setObjectName("cancel_button")
|
||||||
|
self.cancel_button.setText("Cancel")
|
||||||
|
self.cancel_button.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
|
||||||
|
self.cancel_button.clicked.connect(self.cancel_buttonfn)
|
||||||
|
self.label = QtWidgets.QLabel(parent=Dialog)
|
||||||
|
self.label.setGeometry(QtCore.QRect(20, 40, 71, 21))
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.lineEdit = QtWidgets.QLineEdit(parent=Dialog)
|
||||||
|
self.lineEdit.setGeometry(QtCore.QRect(80, 40, 113, 21))
|
||||||
|
self.lineEdit.setObjectName("lineEdit")
|
||||||
|
# set strong focus to lineEdit
|
||||||
|
self.lineEdit.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
|
||||||
|
self.label_2 = QtWidgets.QLabel(parent=Dialog)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(20, 80, 71, 21))
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.lineEdit_2 = QtWidgets.QLineEdit(parent=Dialog)
|
||||||
|
self.lineEdit_2.setGeometry(QtCore.QRect(80, 80, 113, 21))
|
||||||
|
self.lineEdit_2.setInputMethodHints(QtCore.Qt.InputMethodHint.ImhSensitiveData)
|
||||||
|
# set echo mode to password
|
||||||
|
self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
|
||||||
|
self.lineEdit_2.setClearButtonEnabled(True)
|
||||||
|
self.lineEdit_2.setObjectName("lineEdit_2")
|
||||||
|
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
# if buttonbox accepted is clicked, launch login test
|
||||||
|
self.login_button.clicked.connect(self.login)
|
||||||
|
self.lresult = -1
|
||||||
|
self.lusername = ""
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label.setText(_translate("Dialog", "Username"))
|
||||||
|
self.label_2.setText(_translate("Dialog", "Password"))
|
||||||
|
|
||||||
|
def login(self):
|
||||||
|
username = self.lineEdit.text()
|
||||||
|
password = self.lineEdit_2.text()
|
||||||
|
print(type(username), password)
|
||||||
|
# Assuming 'Database' is a class to interact with your database
|
||||||
|
db = Database()
|
||||||
|
|
||||||
|
hashed_password = hashlib.sha256(
|
||||||
|
password.encode()
|
||||||
|
).hexdigest()
|
||||||
|
if len(db.get_users()) == 0:
|
||||||
|
AdminCommands().create_admin()
|
||||||
|
self.lresult = 1 # Indicate successful login
|
||||||
|
self.lusername = username
|
||||||
|
self.dialog.accept()
|
||||||
|
if db.login(username, hashed_password):
|
||||||
|
self.lresult = 1 # Indicate successful login
|
||||||
|
self.lusername = username
|
||||||
|
self.dialog.accept()
|
||||||
|
db.close()
|
||||||
|
else:
|
||||||
|
# Credentials are invalid, display a warning
|
||||||
|
if username == "" or password == "":
|
||||||
|
warning_dialog = QtWidgets.QMessageBox()
|
||||||
|
warning_dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
|
||||||
|
warning_dialog.setText("Please enter a username and password.")
|
||||||
|
warning_dialog.setWindowTitle("Login Failed")
|
||||||
|
warning_dialog.exec()
|
||||||
|
else:
|
||||||
|
warning_dialog = QtWidgets.QMessageBox()
|
||||||
|
warning_dialog.setIcon(QtWidgets.QMessageBox.Icon.Warning)
|
||||||
|
warning_dialog.setText(
|
||||||
|
"Invalid username or password. Please try again."
|
||||||
|
)
|
||||||
|
warning_dialog.setWindowTitle("Login Failed")
|
||||||
|
warning_dialog.exec()
|
||||||
|
|
||||||
|
def cancel_buttonfn(self):
|
||||||
|
self.dialog.reject()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
Dialog = QtWidgets.QDialog()
|
||||||
|
ui = Ui_Dialog()
|
||||||
|
ui.setupUi(Dialog)
|
||||||
|
Dialog.show()
|
||||||
|
sys.exit(app.exec())
|
||||||
240
src/ui/dialogs/Ui_medianadder.py
Normal file
240
src/ui/dialogs/Ui_medianadder.py
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\dialogs\medianadder.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(637, 491)
|
||||||
|
self.label = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label.setGeometry(QtCore.QRect(20, 10, 47, 21))
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.label_2 = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(20, 40, 47, 21))
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.comboBox = QtWidgets.QComboBox(Dialog)
|
||||||
|
self.comboBox.setGeometry(QtCore.QRect(70, 40, 69, 22))
|
||||||
|
self.comboBox.setObjectName("comboBox")
|
||||||
|
self.comboBox.addItem("")
|
||||||
|
self.comboBox.addItem("")
|
||||||
|
self.comboBox.addItem("")
|
||||||
|
self.comboBox.addItem("")
|
||||||
|
self.lineEdit = QtWidgets.QLineEdit(Dialog)
|
||||||
|
self.lineEdit.setGeometry(QtCore.QRect(70, 10, 113, 20))
|
||||||
|
self.lineEdit.setObjectName("lineEdit")
|
||||||
|
self.label_3 = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label_3.setGeometry(QtCore.QRect(20, 70, 47, 21))
|
||||||
|
self.label_3.setObjectName("label_3")
|
||||||
|
self.widget = QtWidgets.QWidget(Dialog)
|
||||||
|
self.widget.setGeometry(QtCore.QRect(330, 90, 301, 341))
|
||||||
|
self.widget.setObjectName("widget")
|
||||||
|
self.treeWidget = QtWidgets.QTreeWidget(self.widget)
|
||||||
|
self.treeWidget.setEnabled(True)
|
||||||
|
self.treeWidget.setGeometry(QtCore.QRect(0, 0, 301, 341))
|
||||||
|
self.treeWidget.setAutoFillBackground(False)
|
||||||
|
self.treeWidget.setLineWidth(0)
|
||||||
|
self.treeWidget.setMidLineWidth(0)
|
||||||
|
self.treeWidget.setVerticalScrollBarPolicy(
|
||||||
|
QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff
|
||||||
|
)
|
||||||
|
self.treeWidget.setHorizontalScrollBarPolicy(
|
||||||
|
QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff
|
||||||
|
)
|
||||||
|
self.treeWidget.setSizeAdjustPolicy(
|
||||||
|
QtWidgets.QAbstractScrollArea.SizeAdjustPolicy.AdjustToContents
|
||||||
|
)
|
||||||
|
self.treeWidget.setEditTriggers(
|
||||||
|
QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers
|
||||||
|
)
|
||||||
|
self.treeWidget.setAlternatingRowColors(True)
|
||||||
|
self.treeWidget.setSelectionMode(
|
||||||
|
QtWidgets.QAbstractItemView.SelectionMode.NoSelection
|
||||||
|
)
|
||||||
|
self.treeWidget.setTextElideMode(QtCore.Qt.TextElideMode.ElideMiddle)
|
||||||
|
self.treeWidget.setUniformRowHeights(True)
|
||||||
|
self.treeWidget.setItemsExpandable(False)
|
||||||
|
self.treeWidget.setExpandsOnDoubleClick(False)
|
||||||
|
self.treeWidget.setObjectName("treeWidget")
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(7)
|
||||||
|
self.treeWidget.headerItem().setFont(0, font)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
brush = QtGui.QBrush(QtGui.QColor(255, 0, 0))
|
||||||
|
brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern)
|
||||||
|
item_0.setBackground(2, brush)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
brush = QtGui.QBrush(QtGui.QColor(0, 255, 0))
|
||||||
|
brush.setStyle(QtCore.Qt.BrushStyle.SolidPattern)
|
||||||
|
item_0.setBackground(2, brush)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
self.treeWidget.header().setCascadingSectionResizes(False)
|
||||||
|
self.treeWidget.header().setDefaultSectionSize(60)
|
||||||
|
self.treeWidget.header().setHighlightSections(False)
|
||||||
|
self.treeWidget.header().setMinimumSectionSize(20)
|
||||||
|
self.listWidget = QtWidgets.QListWidget(Dialog)
|
||||||
|
self.listWidget.setGeometry(QtCore.QRect(10, 90, 281, 341))
|
||||||
|
self.listWidget.setContextMenuPolicy(
|
||||||
|
QtCore.Qt.ContextMenuPolicy.CustomContextMenu
|
||||||
|
)
|
||||||
|
self.listWidget.setObjectName("listWidget")
|
||||||
|
self.label_4 = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label_4.setGeometry(QtCore.QRect(330, 50, 181, 21))
|
||||||
|
self.label_4.setObjectName("label_4")
|
||||||
|
self.label_5 = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label_5.setGeometry(QtCore.QRect(200, 70, 41, 21))
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.list_amount = QtWidgets.QLabel(Dialog)
|
||||||
|
self.list_amount.setGeometry(QtCore.QRect(240, 70, 47, 21))
|
||||||
|
self.list_amount.setObjectName("list_amount")
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(10, 450, 156, 23))
|
||||||
|
self.buttonBox.setStandardButtons(
|
||||||
|
QtWidgets.QDialogButtonBox.StandardButton.Cancel
|
||||||
|
| QtWidgets.QDialogButtonBox.StandardButton.Ok
|
||||||
|
)
|
||||||
|
self.buttonBox.setCenterButtons(False)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.buttonBox.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
|
||||||
|
# self.buttonBox.accepted.disconnect()
|
||||||
|
# set the activation action for the buttonBox to be shift enter
|
||||||
|
self.buttonBox.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
|
||||||
|
|
||||||
|
self.lineEdit.returnPressed.connect(self.add_to_list)
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label.setText(_translate("Dialog", "Signatur"))
|
||||||
|
self.label_2.setText(_translate("Dialog", "Modus"))
|
||||||
|
self.comboBox.setItemText(0, _translate("Dialog", "ARRAY"))
|
||||||
|
self.comboBox.setItemText(1, _translate("Dialog", "BibTeX"))
|
||||||
|
self.comboBox.setItemText(2, _translate("Dialog", "COinS"))
|
||||||
|
self.comboBox.setItemText(3, _translate("Dialog", "RIS"))
|
||||||
|
self.lineEdit.setPlaceholderText(_translate("Dialog", "Signatur / ISBN"))
|
||||||
|
self.label_3.setText(_translate("Dialog", "Queue"))
|
||||||
|
self.treeWidget.headerItem().setText(
|
||||||
|
0, _translate("Dialog", "Datensatz\\Metadata")
|
||||||
|
)
|
||||||
|
self.treeWidget.headerItem().setText(1, _translate("Dialog", "Array"))
|
||||||
|
self.treeWidget.headerItem().setText(2, _translate("Dialog", "BibTeX"))
|
||||||
|
self.treeWidget.headerItem().setText(3, _translate("Dialog", "COinS"))
|
||||||
|
self.treeWidget.headerItem().setText(4, _translate("Dialog", "RIS"))
|
||||||
|
__sortingEnabled = self.treeWidget.isSortingEnabled()
|
||||||
|
self.treeWidget.setSortingEnabled(False)
|
||||||
|
self.treeWidget.topLevelItem(0).setText(0, _translate("Dialog", "PPN"))
|
||||||
|
self.treeWidget.topLevelItem(0).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(0).setText(2, _translate("Dialog", "0"))
|
||||||
|
self.treeWidget.topLevelItem(0).setText(3, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(0).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(1).setText(0, _translate("Dialog", "Signatur"))
|
||||||
|
self.treeWidget.topLevelItem(1).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(1).setText(2, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(1).setText(3, _translate("Dialog", "0"))
|
||||||
|
self.treeWidget.topLevelItem(1).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(2).setText(0, _translate("Dialog", "Autor"))
|
||||||
|
self.treeWidget.topLevelItem(2).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(2).setText(2, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(2).setText(3, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(2).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(3).setText(0, _translate("Dialog", "ISBN"))
|
||||||
|
self.treeWidget.topLevelItem(3).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(3).setText(2, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(3).setText(3, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(3).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(4).setText(0, _translate("Dialog", "Jahr"))
|
||||||
|
self.treeWidget.topLevelItem(4).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(4).setText(2, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(4).setText(3, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(4).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(5).setText(0, _translate("Dialog", "Auflage"))
|
||||||
|
self.treeWidget.topLevelItem(5).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(5).setText(2, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(5).setText(3, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(5).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(6).setText(0, _translate("Dialog", "Sprache"))
|
||||||
|
self.treeWidget.topLevelItem(6).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(6).setText(2, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(6).setText(3, _translate("Dialog", "0"))
|
||||||
|
self.treeWidget.topLevelItem(6).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(7).setText(0, _translate("Dialog", "Herausgeber"))
|
||||||
|
self.treeWidget.topLevelItem(7).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(7).setText(2, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(7).setText(3, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(7).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(8).setText(0, _translate("Dialog", "Seiten"))
|
||||||
|
self.treeWidget.topLevelItem(8).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(8).setText(2, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(8).setText(3, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(8).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(9).setText(0, _translate("Dialog", "Titel"))
|
||||||
|
self.treeWidget.topLevelItem(9).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(9).setText(2, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(9).setText(3, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(9).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(10).setText(0, _translate("Dialog", "Link"))
|
||||||
|
self.treeWidget.topLevelItem(10).setText(1, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(10).setText(2, _translate("Dialog", "0"))
|
||||||
|
self.treeWidget.topLevelItem(10).setText(3, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.topLevelItem(10).setText(4, _translate("Dialog", "1"))
|
||||||
|
self.treeWidget.setSortingEnabled(__sortingEnabled)
|
||||||
|
self.label_4.setText(_translate("Dialog", "Belegbare Felder per Anbieter"))
|
||||||
|
self.label_5.setText(_translate("Dialog", "Anzahl:"))
|
||||||
|
self.list_amount.setText(_translate("Dialog", "0"))
|
||||||
|
self.recolorize()
|
||||||
|
self.listWidget.customContextMenuRequested.connect(self.custom_context_menu)
|
||||||
|
|
||||||
|
def add_to_list(self):
|
||||||
|
text = self.lineEdit.text().strip()
|
||||||
|
if text == "":
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.listWidget.addItem(text)
|
||||||
|
self.list_amount.setText(str(self.listWidget.count()))
|
||||||
|
self.lineEdit.clear()
|
||||||
|
|
||||||
|
def recolorize(self):
|
||||||
|
# set the color of the cells of the treeWidget to red if the field is not supported by the provider
|
||||||
|
# else set it to green
|
||||||
|
for i in range(self.treeWidget.topLevelItemCount()):
|
||||||
|
for j in range(1, self.treeWidget.columnCount()):
|
||||||
|
if self.treeWidget.topLevelItem(i).text(j) == "0":
|
||||||
|
self.treeWidget.topLevelItem(i).setBackground(
|
||||||
|
j, QtGui.QColor(255, 0, 0)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.treeWidget.topLevelItem(i).setBackground(
|
||||||
|
j, QtGui.QColor(0, 255, 0)
|
||||||
|
)
|
||||||
|
# remove the text from the cells
|
||||||
|
self.treeWidget.topLevelItem(i).setText(j, "")
|
||||||
|
|
||||||
|
def custom_context_menu(self):
|
||||||
|
menu = QtWidgets.QMenu()
|
||||||
|
menu.addAction("Remove")
|
||||||
|
|
||||||
|
action = menu.exec(QtGui.QCursor.pos())
|
||||||
|
if action.text() == "Remove":
|
||||||
|
self.remove_from_list()
|
||||||
|
|
||||||
|
def remove_from_list(self):
|
||||||
|
self.listWidget.takeItem(self.listWidget.currentRow())
|
||||||
|
self.list_amount.setText(str(self.listWidget.count()))
|
||||||
4
src/ui/dialogs/Ui_medianadder.ts
Normal file
4
src/ui/dialogs/Ui_medianadder.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1">
|
||||||
|
</TS>
|
||||||
63
src/ui/dialogs/Ui_new_subject.py
Normal file
63
src/ui/dialogs/Ui_new_subject.py
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\dialogs\new_subject.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(448, 165)
|
||||||
|
self.verticalLayout_2 = QtWidgets.QVBoxLayout(Dialog)
|
||||||
|
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||||
|
self.verticalLayout = QtWidgets.QVBoxLayout()
|
||||||
|
self.verticalLayout.setObjectName("verticalLayout")
|
||||||
|
self.label = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.verticalLayout.addWidget(self.label)
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout()
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
|
||||||
|
self.gridLayout.addItem(spacerItem, 0, 1, 1, 1)
|
||||||
|
self.checkBox = QtWidgets.QCheckBox(Dialog)
|
||||||
|
self.checkBox.setObjectName("checkBox")
|
||||||
|
self.gridLayout.addWidget(self.checkBox, 0, 0, 1, 1)
|
||||||
|
self.verticalLayout.addLayout(self.gridLayout)
|
||||||
|
self.verticalLayout_2.addLayout(self.verticalLayout)
|
||||||
|
self.frame = QtWidgets.QFrame(Dialog)
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(0, 10, 141, 16))
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.lineEdit = QtWidgets.QLineEdit(self.frame)
|
||||||
|
self.lineEdit.setGeometry(QtCore.QRect(0, 30, 141, 20))
|
||||||
|
self.lineEdit.setObjectName("lineEdit")
|
||||||
|
self.verticalLayout_2.addWidget(self.frame)
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
|
||||||
|
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.verticalLayout_2.addWidget(self.buttonBox)
|
||||||
|
self.frame.setVisible(False)
|
||||||
|
self.checkBox.stateChanged.connect(lambda: self.frame.setVisible(self.checkBox.isChecked()))
|
||||||
|
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label.setText(_translate("Dialog", "Das eingegebene Fach wurde nicht in der Datenbank gefunden. Soll es angelegt werden?"))
|
||||||
|
self.checkBox.setText(_translate("Dialog", "Ja"))
|
||||||
|
self.label_2.setText(_translate("Dialog", "Name des Neuen Faches:"))
|
||||||
|
def return_state(self):
|
||||||
|
return self.lineEdit.text()
|
||||||
158
src/ui/dialogs/Ui_parsed_titles.py
Normal file
158
src/ui/dialogs/Ui_parsed_titles.py
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\dialogs\parsed_titles.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
from log import MyLogger
|
||||||
|
from src.logic.threads import AutoAdder
|
||||||
|
|
||||||
|
logger = MyLogger("AutoTitleAdder")
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Form(object):
|
||||||
|
def setupUi(self, Form):
|
||||||
|
Form.setObjectName("Form")
|
||||||
|
Form.resize(402, 316)
|
||||||
|
self.frame = QtWidgets.QFrame(Form)
|
||||||
|
self.frame.setGeometry(QtCore.QRect(10, 10, 381, 41))
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.horizontalLayoutWidget = QtWidgets.QWidget(self.frame)
|
||||||
|
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 381, 41))
|
||||||
|
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
|
||||||
|
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
|
||||||
|
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
|
self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.horizontalLayout.addWidget(self.label)
|
||||||
|
self.count = QtWidgets.QLabel(self.horizontalLayoutWidget)
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setBold(True)
|
||||||
|
font.setWeight(75)
|
||||||
|
self.count.setFont(font)
|
||||||
|
self.count.setTextFormat(QtCore.Qt.TextFormat.PlainText)
|
||||||
|
self.count.setObjectName("count")
|
||||||
|
self.horizontalLayout.addWidget(self.count)
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.horizontalLayoutWidget)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.horizontalLayout.addWidget(self.label_2)
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(
|
||||||
|
40,
|
||||||
|
20,
|
||||||
|
QtWidgets.QSizePolicy.Policy.Expanding,
|
||||||
|
QtWidgets.QSizePolicy.Policy.Minimum,
|
||||||
|
)
|
||||||
|
self.horizontalLayout.addItem(spacerItem)
|
||||||
|
self.frame_2 = QtWidgets.QFrame(Form)
|
||||||
|
self.frame_2.setGeometry(QtCore.QRect(10, 80, 381, 201))
|
||||||
|
self.frame_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame_2.setObjectName("frame_2")
|
||||||
|
self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.frame_2)
|
||||||
|
self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(0, 10, 381, 191))
|
||||||
|
self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
|
||||||
|
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
|
||||||
|
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||||
|
self.listWidget = QtWidgets.QListWidget(self.horizontalLayoutWidget_2)
|
||||||
|
self.listWidget.setObjectName("listWidget")
|
||||||
|
self.horizontalLayout_2.addWidget(self.listWidget)
|
||||||
|
self.listWidget_done = QtWidgets.QListWidget(self.horizontalLayoutWidget_2)
|
||||||
|
self.listWidget_done.setObjectName("listWidget_done")
|
||||||
|
self.horizontalLayout_2.addWidget(self.listWidget_done)
|
||||||
|
self.progressBar = QtWidgets.QProgressBar(Form)
|
||||||
|
self.progressBar.setGeometry(QtCore.QRect(10, 60, 381, 23))
|
||||||
|
self.progressBar.setProperty("value", 24)
|
||||||
|
self.progressBar.setObjectName("progressBar")
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Form)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(230, 290, 156, 23))
|
||||||
|
self.buttonBox.setStandardButtons(
|
||||||
|
QtWidgets.QDialogButtonBox.StandardButton.Cancel
|
||||||
|
| QtWidgets.QDialogButtonBox.StandardButton.Ok
|
||||||
|
)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.toolButton = QtWidgets.QToolButton(Form)
|
||||||
|
self.toolButton.setGeometry(QtCore.QRect(20, 290, 25, 19))
|
||||||
|
self.toolButton.setObjectName("toolButton")
|
||||||
|
self.signatures = []
|
||||||
|
self.prof_id = None
|
||||||
|
self.app_id = None
|
||||||
|
self.thread = QtCore.QThread()
|
||||||
|
self.toolButton.hide()
|
||||||
|
self.retranslateUi(Form)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||||
|
self.toolButton.clicked.connect(self.start)
|
||||||
|
# if cancel is clicked, terminate the thread
|
||||||
|
self.buttonBox.rejected.connect(self.thread_quit)
|
||||||
|
|
||||||
|
def retranslateUi(self, Form):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Form.setWindowTitle(_translate("Form", "Form"))
|
||||||
|
self.label.setText(_translate("Form", "Es wurden"))
|
||||||
|
self.count.setText(_translate("Form", "0"))
|
||||||
|
self.label_2.setText(_translate("Form", "Signaturen gefunden."))
|
||||||
|
self.toolButton.setText(_translate("Form", "..."))
|
||||||
|
|
||||||
|
def populate_table(self):
|
||||||
|
for i in range(len(self.signatures)):
|
||||||
|
self.listWidget.addItem(QtWidgets.QListWidgetItem())
|
||||||
|
self.listWidget.item(i).setText(self.signatures[i])
|
||||||
|
self.listWidget.item(i).setToolTip("Daten werden gesammelt")
|
||||||
|
|
||||||
|
def update_progress_bar(self, value: int):
|
||||||
|
self.progressBar.setValue(value)
|
||||||
|
|
||||||
|
def thread_quit(self):
|
||||||
|
print("Terminating thread")
|
||||||
|
self.thread.terminate()
|
||||||
|
self.thread.quit()
|
||||||
|
self.thread.deleteLater()
|
||||||
|
self.thread = None
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
logger.log_info("Starting AutoAdder")
|
||||||
|
|
||||||
|
self.thread = AutoAdder(
|
||||||
|
data=self.signatures,
|
||||||
|
app_id=self.app_id,
|
||||||
|
prof_id=self.prof_id,
|
||||||
|
)
|
||||||
|
self.thread.finished.connect(self.on_completion)
|
||||||
|
self.thread.updateSignal.connect(self.update_progress_bar)
|
||||||
|
self.thread.setTextSignal.connect(self.update_lists)
|
||||||
|
self.thread.progress.connect(self.determine_progress)
|
||||||
|
self.thread.finished.connect(self.thread.quit)
|
||||||
|
self.thread.finished.connect(self.thread.deleteLater)
|
||||||
|
# self.thread.updateSignal.connect(self.update_progress_label)
|
||||||
|
# worker.finished.connect(worker.deleteLater)
|
||||||
|
|
||||||
|
self.thread.start()
|
||||||
|
|
||||||
|
def on_completion(self):
|
||||||
|
logger.log_info("AutoAdder finished")
|
||||||
|
logger.log_info("Returning data")
|
||||||
|
|
||||||
|
# create a function that closes the dialog
|
||||||
|
|
||||||
|
def determine_progress(self, signal):
|
||||||
|
# check length of listWidget
|
||||||
|
length = self.listWidget.count()
|
||||||
|
print(f"Length of listWidget: {length}")
|
||||||
|
if length == 0:
|
||||||
|
logger.log_info("AutoAdder finished")
|
||||||
|
self.buttonBox.accepted.emit()
|
||||||
|
|
||||||
|
def update_lists(self, signal):
|
||||||
|
# get text of first entry in listWidget
|
||||||
|
text = self.listWidget.item(0).text()
|
||||||
|
# remove first entry
|
||||||
|
self.listWidget.takeItem(0)
|
||||||
|
# add first entry to listWidget_done
|
||||||
|
self.listWidget_done.addItem(text)
|
||||||
52
src/ui/dialogs/Ui_reminder.py
Normal file
52
src/ui/dialogs/Ui_reminder.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\dialogs\reminder.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(369, 308)
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(190, 270, 161, 32))
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
|
||||||
|
self.buttonBox.setStandardButtons(
|
||||||
|
QtWidgets.QDialogButtonBox.StandardButton.Cancel
|
||||||
|
| QtWidgets.QDialogButtonBox.StandardButton.Ok
|
||||||
|
)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.message_box = QtWidgets.QTextEdit(Dialog)
|
||||||
|
self.message_box.setGeometry(QtCore.QRect(10, 60, 341, 201))
|
||||||
|
self.message_box.setObjectName("message_box")
|
||||||
|
self.label = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label.setGeometry(QtCore.QRect(10, 30, 61, 21))
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.label_2 = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(150, 30, 81, 21))
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.dateEdit = QtWidgets.QDateEdit(Dialog)
|
||||||
|
self.dateEdit.setGeometry(QtCore.QRect(240, 30, 110, 22))
|
||||||
|
self.dateEdit.setObjectName("dateEdit")
|
||||||
|
self.dateEdit.setDateTime(QtCore.QDateTime.currentDateTime())
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label.setText(_translate("Dialog", "Nachricht:"))
|
||||||
|
self.label_2.setText(_translate("Dialog", "Erinnerung am:"))
|
||||||
|
|
||||||
|
def return_message(self) -> dict:
|
||||||
|
return {
|
||||||
|
"message": self.message_box.toPlainText(),
|
||||||
|
"remind_at": self.dateEdit.date().toString("yyyy-MM-dd"),
|
||||||
|
}
|
||||||
202
src/ui/dialogs/Ui_settings.py
Normal file
202
src/ui/dialogs/Ui_settings.py
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\dialogs\settings.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from omegaconf import OmegaConf
|
||||||
|
from PyQt6 import QtCore, QtWidgets
|
||||||
|
|
||||||
|
config = OmegaConf.load("config.yaml")
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(743, 576)
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(120, 540, 621, 32))
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
|
||||||
|
self.buttonBox.setStandardButtons(
|
||||||
|
QtWidgets.QDialogButtonBox.StandardButton.Cancel
|
||||||
|
| QtWidgets.QDialogButtonBox.StandardButton.Ok
|
||||||
|
)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.frame = QtWidgets.QFrame(Dialog)
|
||||||
|
self.frame.setGeometry(QtCore.QRect(0, 0, 741, 541))
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.label = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label.setGeometry(QtCore.QRect(400, 30, 161, 21))
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.line = QtWidgets.QFrame(self.frame)
|
||||||
|
self.line.setGeometry(QtCore.QRect(370, 0, 20, 541))
|
||||||
|
self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Plain)
|
||||||
|
self.line.setLineWidth(1)
|
||||||
|
self.line.setMidLineWidth(0)
|
||||||
|
self.line.setFrameShape(QtWidgets.QFrame.Shape.VLine)
|
||||||
|
self.line.setObjectName("line")
|
||||||
|
self.textBrowser = QtWidgets.QTextBrowser(self.frame)
|
||||||
|
self.textBrowser.setGeometry(QtCore.QRect(400, 50, 311, 51))
|
||||||
|
self.textBrowser.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.textBrowser.setInputMethodHints(QtCore.Qt.InputMethodHint.ImhNone)
|
||||||
|
self.textBrowser.setObjectName("textBrowser")
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(10, 20, 161, 21))
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.os_apps = QtWidgets.QCheckBox(self.frame)
|
||||||
|
self.os_apps.setGeometry(QtCore.QRect(410, 110, 161, 17))
|
||||||
|
self.os_apps.setObjectName("os_apps")
|
||||||
|
self.formLayoutWidget = QtWidgets.QWidget(self.frame)
|
||||||
|
self.formLayoutWidget.setGeometry(QtCore.QRect(10, 50, 361, 491))
|
||||||
|
self.formLayoutWidget.setObjectName("formLayoutWidget")
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout(self.formLayoutWidget)
|
||||||
|
self.gridLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.label_3 = QtWidgets.QLabel(self.formLayoutWidget)
|
||||||
|
self.label_3.setObjectName("label_3")
|
||||||
|
self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1)
|
||||||
|
self.label_5 = QtWidgets.QLabel(self.formLayoutWidget)
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.gridLayout.addWidget(self.label_5, 2, 0, 1, 1)
|
||||||
|
self.db_path = QtWidgets.QLineEdit(self.formLayoutWidget)
|
||||||
|
self.db_path.setEnabled(False)
|
||||||
|
self.db_path.setObjectName("db_path")
|
||||||
|
self.gridLayout.addWidget(self.db_path, 1, 1, 1, 1)
|
||||||
|
self.save_path = QtWidgets.QLineEdit(self.formLayoutWidget)
|
||||||
|
self.save_path.setObjectName("save_path")
|
||||||
|
self.gridLayout.addWidget(self.save_path, 2, 1, 1, 1)
|
||||||
|
self.label_4 = QtWidgets.QLabel(self.formLayoutWidget)
|
||||||
|
self.label_4.setObjectName("label_4")
|
||||||
|
self.gridLayout.addWidget(self.label_4, 1, 0, 1, 1)
|
||||||
|
self.db_name = QtWidgets.QLineEdit(self.formLayoutWidget)
|
||||||
|
self.db_name.setObjectName("db_name")
|
||||||
|
self.gridLayout.addWidget(self.db_name, 0, 1, 1, 1)
|
||||||
|
self.tb_set_save_path = QtWidgets.QToolButton(self.formLayoutWidget)
|
||||||
|
self.tb_set_save_path.setObjectName("tb_set_save_path")
|
||||||
|
self.gridLayout.addWidget(self.tb_set_save_path, 2, 2, 1, 1)
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(
|
||||||
|
20,
|
||||||
|
40,
|
||||||
|
QtWidgets.QSizePolicy.Policy.Minimum,
|
||||||
|
QtWidgets.QSizePolicy.Policy.Expanding,
|
||||||
|
)
|
||||||
|
self.gridLayout.addItem(spacerItem, 3, 1, 1, 1)
|
||||||
|
self.tb_select_db = QtWidgets.QToolButton(self.formLayoutWidget)
|
||||||
|
self.tb_select_db.setObjectName("tb_select_db")
|
||||||
|
self.gridLayout.addWidget(self.tb_select_db, 0, 2, 1, 1)
|
||||||
|
self.scrollArea = QtWidgets.QScrollArea(self.frame)
|
||||||
|
self.scrollArea.setGeometry(QtCore.QRect(400, 130, 331, 411))
|
||||||
|
self.scrollArea.setWidgetResizable(True)
|
||||||
|
self.scrollArea.setObjectName("scrollArea")
|
||||||
|
self.scrollAreaWidgetContents = QtWidgets.QWidget()
|
||||||
|
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 329, 409))
|
||||||
|
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
|
||||||
|
self.treeWidget = QtWidgets.QTreeWidget(self.scrollAreaWidgetContents)
|
||||||
|
self.treeWidget.setGeometry(QtCore.QRect(0, 0, 331, 411))
|
||||||
|
self.treeWidget.setObjectName("treeWidget")
|
||||||
|
self.treeWidget.setContextMenuPolicy(
|
||||||
|
QtCore.Qt.ContextMenuPolicy.ActionsContextMenu
|
||||||
|
)
|
||||||
|
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
|
||||||
|
self.label_3.setBuddy(self.db_name)
|
||||||
|
self.label_5.setBuddy(self.save_path)
|
||||||
|
self.label_4.setBuddy(self.db_path)
|
||||||
|
self.tb_select_db.clicked.connect(self.select_db)
|
||||||
|
self.tb_set_save_path.clicked.connect(self.set_save_path)
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
Dialog.setTabOrder(self.db_name, self.db_path)
|
||||||
|
Dialog.setTabOrder(self.db_path, self.save_path)
|
||||||
|
Dialog.setTabOrder(self.save_path, self.os_apps)
|
||||||
|
Dialog.setTabOrder(self.os_apps, self.textBrowser)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label.setText(_translate("Dialog", "Dateispezifische Einstellungen"))
|
||||||
|
self.textBrowser.setHtml(
|
||||||
|
_translate(
|
||||||
|
"Dialog",
|
||||||
|
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">\n'
|
||||||
|
'<html><head><meta name="qrichtext" content="1" /><style type="text/css">\n'
|
||||||
|
"p, li { white-space: pre-wrap; }\n"
|
||||||
|
"</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
|
||||||
|
'<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hier können Einstellungen f<>r bestehende Dateiformate geändert, oder neue Dateiformate eingefügt werden</p>\n'
|
||||||
|
'<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html>',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.label_2.setText(_translate("Dialog", "Allgemeine Einstellungen"))
|
||||||
|
self.os_apps.setToolTip(
|
||||||
|
_translate(
|
||||||
|
"Dialog",
|
||||||
|
"Verwendet im Betriebssystem festgelegte Anwendungen um Dateien zu öffnen",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.os_apps.setText(_translate("Dialog", "Standard-Apps verwenden"))
|
||||||
|
self.label_3.setToolTip(
|
||||||
|
_translate(
|
||||||
|
"Dialog",
|
||||||
|
'<html><head/><body><p>Name der Datenbank, welche verwendet werden soll. <span style=" font-weight:600;">Muss</span> auf .db enden</p></body></html>',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.label_3.setText(_translate("Dialog", "Datenbankname"))
|
||||||
|
self.label_5.setToolTip(
|
||||||
|
_translate(
|
||||||
|
"Dialog",
|
||||||
|
"Pfad, an dem heruntergeladene Dateien gespeichert werden sollen",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.label_5.setText(_translate("Dialog", "Speicherpfad"))
|
||||||
|
self.label_4.setText(_translate("Dialog", "Datenbankpfad"))
|
||||||
|
self.db_name.setText(_translate("Dialog", "sap.db"))
|
||||||
|
self.tb_set_save_path.setText(_translate("Dialog", "..."))
|
||||||
|
self.tb_select_db.setText(_translate("Dialog", "..."))
|
||||||
|
self.load_config()
|
||||||
|
|
||||||
|
def load_config(self):
|
||||||
|
self.db_name.setText(config.database.name)
|
||||||
|
self.db_path.setText(config.database.path)
|
||||||
|
self.save_path.setText(config.save_path)
|
||||||
|
self.os_apps.setChecked(config.default_apps)
|
||||||
|
applications = config.custom_applications
|
||||||
|
for application in applications:
|
||||||
|
name = application.application
|
||||||
|
file_type = application.extensions
|
||||||
|
display_name = application.name
|
||||||
|
print(name, file_type, display_name) #
|
||||||
|
# create new item
|
||||||
|
item = QtWidgets.QTreeWidgetItem(self.treeWidget)
|
||||||
|
item.setText(0, display_name)
|
||||||
|
|
||||||
|
def select_db(self):
|
||||||
|
# open file dialog, limit to .db files
|
||||||
|
file_dialog = QtWidgets.QFileDialog()
|
||||||
|
file_dialog.setFileMode(QtWidgets.QFileDialog.FileMode.AnyFile)
|
||||||
|
file_dialog.setNameFilter("Datenbank (*.db)")
|
||||||
|
file_dialog.setViewMode(QtWidgets.QFileDialog.ViewMode.Detail)
|
||||||
|
if file_dialog.exec():
|
||||||
|
self.db_name.setText(file_dialog.selectedFiles()[0].split("/")[-1])
|
||||||
|
self.db_path.setText(
|
||||||
|
file_dialog.selectedFiles()[0].split(self.db_name.text())[0]
|
||||||
|
)
|
||||||
|
|
||||||
|
def set_save_path(self):
|
||||||
|
# open file dialog, limit to .db files
|
||||||
|
file_dialog = QtWidgets.QFileDialog()
|
||||||
|
file_dialog.setFileMode(QtWidgets.QFileDialog.FileMode.Directory)
|
||||||
|
file_dialog.setViewMode(QtWidgets.QFileDialog.ViewMode.Detail)
|
||||||
|
if file_dialog.exec():
|
||||||
|
self.save_path.setText(file_dialog.selectedFiles()[0])
|
||||||
|
|
||||||
|
def return_data(self):
|
||||||
|
config.database.name = self.db_name.text()
|
||||||
|
config.database.path = self.db_path.text()
|
||||||
|
config.save_path = self.save_path.text()
|
||||||
|
config.default_apps = self.os_apps.isChecked()
|
||||||
|
return config
|
||||||
4
src/ui/dialogs/Ui_settings.ts
Normal file
4
src/ui/dialogs/Ui_settings.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1">
|
||||||
|
</TS>
|
||||||
24
src/ui/dialogs/__init__.py
Normal file
24
src/ui/dialogs/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
from .app_ext import Ui_Dialog as App_Ext_Dialog
|
||||||
|
from .ext_app import Ui_Frame as App_Ext_Window
|
||||||
|
from .mail import Mail_Dialog
|
||||||
|
from .popup_confirm import Ui_extend_confirm as popus_confirm
|
||||||
|
from .settings import Settings
|
||||||
|
from .Ui_edit_bookdata import Ui_Dialog as edit_bookdata_ui
|
||||||
|
from .Ui_fileparser import Ui_Dialog as fileparser_ui
|
||||||
|
from .Ui_login import Ui_Dialog as login_ui
|
||||||
|
from .Ui_medianadder import Ui_Dialog as medienadder_ui
|
||||||
|
from .Ui_parsed_titles import Ui_Form as parsed_titles_ui
|
||||||
|
from .Ui_reminder import Ui_Dialog as reminder_ui
|
||||||
|
from .Ui_settings import Ui_Dialog as settings_ui
|
||||||
|
from .Ui_new_subject import Ui_Dialog as new_subject_ui
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"ext_app",
|
||||||
|
"app_ext",
|
||||||
|
"Mail_Dialog",
|
||||||
|
"medianadder_ui",
|
||||||
|
"popup_confirm",
|
||||||
|
"edit_bookdata_ui",
|
||||||
|
"settings_ui",
|
||||||
|
"parsed_titles_ui",
|
||||||
|
]
|
||||||
90
src/ui/dialogs/add_media.ui
Normal file
90
src/ui/dialogs/add_media.ui
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>260</y>
|
||||||
|
<width>341</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="gridLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>241</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Signatur</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="lineEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
114
src/ui/dialogs/app_ext.py
Normal file
114
src/ui/dialogs/app_ext.py
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
# Form implementation generated from reading ui file 'ui\dialogs\apparat_extend.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(388, 103)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(
|
||||||
|
QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed
|
||||||
|
)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
|
||||||
|
Dialog.setSizePolicy(sizePolicy)
|
||||||
|
Dialog.setMinimumSize(QtCore.QSize(388, 103))
|
||||||
|
Dialog.setMaximumSize(QtCore.QSize(388, 103))
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(290, 30, 81, 241))
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Vertical)
|
||||||
|
self.buttonBox.setStandardButtons(
|
||||||
|
QtWidgets.QDialogButtonBox.StandardButton.Abort
|
||||||
|
| QtWidgets.QDialogButtonBox.StandardButton.Save
|
||||||
|
)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.label = QtWidgets.QLabel(Dialog)
|
||||||
|
self.label.setGeometry(QtCore.QRect(10, 0, 281, 31))
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(
|
||||||
|
QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed
|
||||||
|
)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
|
||||||
|
self.label.setSizePolicy(sizePolicy)
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(10)
|
||||||
|
self.label.setFont(font)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.frame = QtWidgets.QFrame(Dialog)
|
||||||
|
self.frame.setGeometry(QtCore.QRect(10, 30, 241, 41))
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.line = QtWidgets.QFrame(self.frame)
|
||||||
|
self.line.setGeometry(QtCore.QRect(120, 0, 3, 61))
|
||||||
|
self.line.setFrameShape(QtWidgets.QFrame.Shape.VLine)
|
||||||
|
self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
|
||||||
|
self.line.setObjectName("line")
|
||||||
|
self.rad_sommer = QtWidgets.QRadioButton(self.frame)
|
||||||
|
self.rad_sommer.setGeometry(QtCore.QRect(10, 10, 82, 21))
|
||||||
|
self.rad_sommer.setObjectName("rad_sommer")
|
||||||
|
self.rad_winter = QtWidgets.QRadioButton(self.frame)
|
||||||
|
self.rad_winter.setGeometry(QtCore.QRect(140, 10, 82, 21))
|
||||||
|
self.rad_winter.setObjectName("rad_winter")
|
||||||
|
self.sem_year = QtWidgets.QLineEdit(Dialog)
|
||||||
|
self.sem_year.setGeometry(QtCore.QRect(10, 70, 121, 20))
|
||||||
|
self.sem_year.setObjectName("sem_year")
|
||||||
|
self.dauerapp = QtWidgets.QCheckBox(Dialog)
|
||||||
|
self.dauerapp.setGeometry(QtCore.QRect(150, 70, 91, 21))
|
||||||
|
self.dauerapp.setObjectName("dauerapp")
|
||||||
|
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label.setText(
|
||||||
|
_translate("Dialog", "Bis wann soll der Apparat verlängert werden?")
|
||||||
|
)
|
||||||
|
self.rad_sommer.setText(_translate("Dialog", "Sommer"))
|
||||||
|
self.rad_winter.setText(_translate("Dialog", "Winter"))
|
||||||
|
self.sem_year.setPlaceholderText(_translate("Dialog", "2023"))
|
||||||
|
self.dauerapp.setText(_translate("Dialog", "Dauerapparat"))
|
||||||
|
|
||||||
|
def get_data(self):
|
||||||
|
# def __select_sem_state():
|
||||||
|
# curr_month=QtCore.QDate.currentDate().month()
|
||||||
|
# if curr_month>=4 and curr_month<=9:
|
||||||
|
# return "SoSe"
|
||||||
|
# else:
|
||||||
|
# return "WiSe"
|
||||||
|
# if __select_sem_state()=="SoSe":
|
||||||
|
# self.rad_sommer.setChecked(True)
|
||||||
|
# else:
|
||||||
|
# self.rad_winter.setChecked(True)
|
||||||
|
return {
|
||||||
|
"semester": f"SoSe {int(self.sem_year.text()[-2:])}"
|
||||||
|
if self.rad_sommer.isChecked()
|
||||||
|
else f"WiSe {int(self.sem_year.text()[-2:])}/{int(self.sem_year.text()[-2:])+1}",
|
||||||
|
"dauerapp": self.dauerapp.isChecked()
|
||||||
|
if self.dauerapp.isChecked()
|
||||||
|
else False,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
Dialog = QtWidgets.QDialog()
|
||||||
|
ui = Ui_Dialog()
|
||||||
|
ui.setupUi(Dialog)
|
||||||
|
Dialog.show()
|
||||||
|
sys.exit(app.exec())
|
||||||
19
src/ui/dialogs/app_status.ui
Normal file
19
src/ui/dialogs/app_status.ui
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Form</class>
|
||||||
|
<widget class="QWidget" name="Form">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>300</width>
|
||||||
|
<height>500</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
191
src/ui/dialogs/apparat_extend.ui
Normal file
191
src/ui/dialogs/apparat_extend.ui
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>388</width>
|
||||||
|
<height>103</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>388</width>
|
||||||
|
<height>103</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>388</width>
|
||||||
|
<height>103</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>290</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>81</width>
|
||||||
|
<height>241</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Abort|QDialogButtonBox::Save</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>281</width>
|
||||||
|
<height>31</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>10</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Bis wann soll der Apparat verlängert werden?</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>241</width>
|
||||||
|
<height>41</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>3</width>
|
||||||
|
<height>61</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="rad_sommer">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>82</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Sommer</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="rad_winter">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>140</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>82</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Winter</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="sem_year">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>121</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>2023</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox" name="dauerapp">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>150</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>91</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dauerapparat</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
83
src/ui/dialogs/apparat_extend_ui.py
Normal file
83
src/ui/dialogs/apparat_extend_ui.py
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
## Form generated from reading UI file 'apparat_extend.ui'
|
||||||
|
##
|
||||||
|
## Created by: Qt User Interface Compiler version 6.4.0
|
||||||
|
##
|
||||||
|
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
|
||||||
|
QMetaObject, QObject, QPoint, QRect,
|
||||||
|
QSize, QTime, QUrl, Qt)
|
||||||
|
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
|
||||||
|
QFont, QFontDatabase, QGradient, QIcon,
|
||||||
|
QImage, QKeySequence, QLinearGradient, QPainter,
|
||||||
|
QPalette, QPixmap, QRadialGradient, QTransform)
|
||||||
|
from PySide6.QtWidgets import (QAbstractButton, QApplication, QCheckBox, QDialog,
|
||||||
|
QDialogButtonBox, QFrame, QLabel, QLineEdit,
|
||||||
|
QRadioButton, QSizePolicy, QWidget)
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
if not Dialog.objectName():
|
||||||
|
Dialog.setObjectName(u"Dialog")
|
||||||
|
Dialog.resize(388, 103)
|
||||||
|
sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
|
||||||
|
Dialog.setSizePolicy(sizePolicy)
|
||||||
|
Dialog.setMinimumSize(QSize(388, 103))
|
||||||
|
Dialog.setMaximumSize(QSize(388, 103))
|
||||||
|
self.buttonBox = QDialogButtonBox(Dialog)
|
||||||
|
self.buttonBox.setObjectName(u"buttonBox")
|
||||||
|
self.buttonBox.setGeometry(QRect(290, 30, 81, 241))
|
||||||
|
self.buttonBox.setOrientation(Qt.Vertical)
|
||||||
|
self.buttonBox.setStandardButtons(QDialogButtonBox.Abort|QDialogButtonBox.Save)
|
||||||
|
self.label = QLabel(Dialog)
|
||||||
|
self.label.setObjectName(u"label")
|
||||||
|
self.label.setGeometry(QRect(10, 0, 281, 31))
|
||||||
|
font = QFont()
|
||||||
|
font.setPointSize(10)
|
||||||
|
self.label.setFont(font)
|
||||||
|
self.frame = QFrame(Dialog)
|
||||||
|
self.frame.setObjectName(u"frame")
|
||||||
|
self.frame.setGeometry(QRect(10, 30, 241, 41))
|
||||||
|
self.frame.setFrameShape(QFrame.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QFrame.Raised)
|
||||||
|
self.line = QFrame(self.frame)
|
||||||
|
self.line.setObjectName(u"line")
|
||||||
|
self.line.setGeometry(QRect(120, 0, 3, 61))
|
||||||
|
self.line.setFrameShape(QFrame.VLine)
|
||||||
|
self.line.setFrameShadow(QFrame.Sunken)
|
||||||
|
self.rad_sommer = QRadioButton(self.frame)
|
||||||
|
self.rad_sommer.setObjectName(u"rad_sommer")
|
||||||
|
self.rad_sommer.setGeometry(QRect(10, 10, 82, 21))
|
||||||
|
self.rad_winter = QRadioButton(self.frame)
|
||||||
|
self.rad_winter.setObjectName(u"rad_winter")
|
||||||
|
self.rad_winter.setGeometry(QRect(140, 10, 82, 21))
|
||||||
|
self.sem_year = QLineEdit(Dialog)
|
||||||
|
self.sem_year.setObjectName(u"sem_year")
|
||||||
|
self.sem_year.setGeometry(QRect(10, 70, 121, 20))
|
||||||
|
self.checkBox = QCheckBox(Dialog)
|
||||||
|
self.checkBox.setObjectName(u"checkBox")
|
||||||
|
self.checkBox.setGeometry(QRect(150, 70, 91, 21))
|
||||||
|
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept)
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject)
|
||||||
|
|
||||||
|
QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
# setupUi
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None))
|
||||||
|
self.label.setText(QCoreApplication.translate("Dialog", u"Bis wann soll der Apparat verl\u00e4ngert werden?", None))
|
||||||
|
self.rad_sommer.setText(QCoreApplication.translate("Dialog", u"Sommer", None))
|
||||||
|
self.rad_winter.setText(QCoreApplication.translate("Dialog", u"Winter", None))
|
||||||
|
self.sem_year.setPlaceholderText(QCoreApplication.translate("Dialog", u"2023", None))
|
||||||
|
self.checkBox.setText(QCoreApplication.translate("Dialog", u"Dauerapparat", None))
|
||||||
|
# retranslateUi
|
||||||
|
|
||||||
78
src/ui/dialogs/confirm_extend.ui
Normal file
78
src/ui/dialogs/confirm_extend.ui
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>extend_confirm</class>
|
||||||
|
<widget class="QDialog" name="extend_confirm">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>380</width>
|
||||||
|
<height>97</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>290</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>81</width>
|
||||||
|
<height>241</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QTextEdit" name="textEdit">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>271</width>
|
||||||
|
<height>81</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>extend_confirm</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>extend_confirm</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
45
src/ui/dialogs/confirm_extend_ui.py
Normal file
45
src/ui/dialogs/confirm_extend_ui.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
## Form generated from reading UI file 'confirm_extend.ui'
|
||||||
|
##
|
||||||
|
## Created by: Qt User Interface Compiler version 6.4.0
|
||||||
|
##
|
||||||
|
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
|
||||||
|
QMetaObject, QObject, QPoint, QRect,
|
||||||
|
QSize, QTime, QUrl, Qt)
|
||||||
|
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
|
||||||
|
QFont, QFontDatabase, QGradient, QIcon,
|
||||||
|
QImage, QKeySequence, QLinearGradient, QPainter,
|
||||||
|
QPalette, QPixmap, QRadialGradient, QTransform)
|
||||||
|
from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox,
|
||||||
|
QSizePolicy, QTextEdit, QWidget)
|
||||||
|
|
||||||
|
class Ui_extend_confirm(object):
|
||||||
|
def setupUi(self, extend_confirm):
|
||||||
|
if not extend_confirm.objectName():
|
||||||
|
extend_confirm.setObjectName(u"extend_confirm")
|
||||||
|
extend_confirm.resize(380, 97)
|
||||||
|
self.buttonBox = QDialogButtonBox(extend_confirm)
|
||||||
|
self.buttonBox.setObjectName(u"buttonBox")
|
||||||
|
self.buttonBox.setGeometry(QRect(290, 20, 81, 241))
|
||||||
|
self.buttonBox.setOrientation(Qt.Vertical)
|
||||||
|
self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)
|
||||||
|
self.textEdit = QTextEdit(extend_confirm)
|
||||||
|
self.textEdit.setObjectName(u"textEdit")
|
||||||
|
self.textEdit.setGeometry(QRect(10, 10, 271, 81))
|
||||||
|
|
||||||
|
self.retranslateUi(extend_confirm)
|
||||||
|
self.buttonBox.accepted.connect(extend_confirm.accept)
|
||||||
|
self.buttonBox.rejected.connect(extend_confirm.reject)
|
||||||
|
|
||||||
|
QMetaObject.connectSlotsByName(extend_confirm)
|
||||||
|
# setupUi
|
||||||
|
|
||||||
|
def retranslateUi(self, extend_confirm):
|
||||||
|
extend_confirm.setWindowTitle(QCoreApplication.translate("extend_confirm", u"Dialog", None))
|
||||||
|
# retranslateUi
|
||||||
|
|
||||||
216
src/ui/dialogs/edit_bookdata.ui
Normal file
216
src/ui/dialogs/edit_bookdata.ui
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>448</width>
|
||||||
|
<height>572</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>260</x>
|
||||||
|
<y>530</y>
|
||||||
|
<width>161</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="gridLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>441</width>
|
||||||
|
<height>531</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<property name="sizeConstraint">
|
||||||
|
<enum>QLayout::SetDefaultConstraint</enum>
|
||||||
|
</property>
|
||||||
|
<item row="10" column="1">
|
||||||
|
<widget class="QLabel" name="label_10">
|
||||||
|
<property name="text">
|
||||||
|
<string>Seiten</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Titel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="9" column="1">
|
||||||
|
<widget class="QLabel" name="label_9">
|
||||||
|
<property name="text">
|
||||||
|
<string>Jahr</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="1">
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>Sprache</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="1">
|
||||||
|
<widget class="QLabel" name="label_12">
|
||||||
|
<property name="text">
|
||||||
|
<string>Link</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_edition"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Auflage</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Autor</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_link">
|
||||||
|
<property name="cursor">
|
||||||
|
<cursorShape>ArrowCursor</cursorShape>
|
||||||
|
</property>
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Herausgeber</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="1">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>ISBN(s)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>PPN</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Signatur</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="0">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Fixed</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>5</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_title"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_signature"/>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_author"/>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_lang"/>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_ppn"/>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_isbn"/>
|
||||||
|
</item>
|
||||||
|
<item row="9" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_year"/>
|
||||||
|
</item>
|
||||||
|
<item row="10" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_pages"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QLineEdit" name="line_publisher"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
51
src/ui/dialogs/ext_app.py
Normal file
51
src/ui/dialogs/ext_app.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Form implementation generated from reading ui file 'ui/dialogs/extend_apparat.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Frame(object):
|
||||||
|
def setupUi(self, Frame):
|
||||||
|
Frame.setObjectName("Frame")
|
||||||
|
Frame.resize(317, 126)
|
||||||
|
self.label = QtWidgets.QLabel(Frame)
|
||||||
|
self.label.setGeometry(QtCore.QRect(60, 20, 231, 16))
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Frame)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(90, 90, 156, 23))
|
||||||
|
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.sem_winter = QtWidgets.QRadioButton(Frame)
|
||||||
|
self.sem_winter.setGeometry(QtCore.QRect(60, 40, 82, 17))
|
||||||
|
self.sem_winter.setObjectName("sem_winter")
|
||||||
|
self.sem_sommer = QtWidgets.QRadioButton(Frame)
|
||||||
|
self.sem_sommer.setGeometry(QtCore.QRect(60, 60, 82, 17))
|
||||||
|
self.sem_sommer.setObjectName("sem_sommer")
|
||||||
|
self.sem_year = QtWidgets.QLineEdit(Frame)
|
||||||
|
self.sem_year.setGeometry(QtCore.QRect(160, 50, 113, 20))
|
||||||
|
self.sem_year.setObjectName("sem_year")
|
||||||
|
|
||||||
|
self.retranslateUi(Frame)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Frame)
|
||||||
|
|
||||||
|
def retranslateUi(self, Frame):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Frame.setWindowTitle(_translate("Frame", "Frame"))
|
||||||
|
self.label.setText(_translate("Frame", "Bis wann soll der Apparat verlängert werden?"))
|
||||||
|
self.sem_winter.setText(_translate("Frame", "Winter"))
|
||||||
|
self.sem_sommer.setText(_translate("Frame", "Sommer"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
Frame = QtWidgets.QFrame()
|
||||||
|
ui = Ui_Frame()
|
||||||
|
ui.setupUi(Frame)
|
||||||
|
Frame.show()
|
||||||
|
sys.exit(app.exec())
|
||||||
81
src/ui/dialogs/extend_apparat.ui
Normal file
81
src/ui/dialogs/extend_apparat.ui
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Frame</class>
|
||||||
|
<widget class="QFrame" name="Frame">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>317</width>
|
||||||
|
<height>126</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Frame</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>60</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>231</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Bis wann soll der Apparat verlängert werden?</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>90</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>156</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="sem_winter">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>60</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>82</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Winter</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="sem_sommer">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>60</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>82</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Sommer</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="sem_year">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>160</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>113</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
129
src/ui/dialogs/fileparser.ui
Normal file
129
src/ui/dialogs/fileparser.ui
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>402</width>
|
||||||
|
<height>301</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QProgressBar" name="progressBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>24</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>41</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="horizontalLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>41</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Es wurden</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="count">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::PlainText</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Signaturen gefunden.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QFrame" name="frame_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>100</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>201</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QListWidget" name="listWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>191</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
120
src/ui/dialogs/login.ui
Normal file
120
src/ui/dialogs/login.ui
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>218</width>
|
||||||
|
<height>190</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>30</x>
|
||||||
|
<y>140</y>
|
||||||
|
<width>161</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>71</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Username</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>80</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>113</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>71</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Password</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>80</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>113</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="inputMethodHints">
|
||||||
|
<set>Qt::ImhSensitiveData</set>
|
||||||
|
</property>
|
||||||
|
<property name="clearButtonEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
69
src/ui/dialogs/mail.py
Normal file
69
src/ui/dialogs/mail.py
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
import subprocess
|
||||||
|
import tempfile
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
from src.ui.dialogs.mail_preview import Ui_Dialog
|
||||||
|
|
||||||
|
|
||||||
|
class Mail_Dialog(QtWidgets.QDialog, Ui_Dialog):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setupUi(self)
|
||||||
|
self.appid = ""
|
||||||
|
self.mail_data = ""
|
||||||
|
self.data = None
|
||||||
|
self.buttonBox.accepted.connect(self.save_mail)
|
||||||
|
|
||||||
|
def set_data(self, data: dict):
|
||||||
|
self.prof_name.setText(data["prof_name"])
|
||||||
|
self.mail_name.setText(data["mail_name"])
|
||||||
|
# assign data["general"] to self.data
|
||||||
|
self.data = data["general"]
|
||||||
|
|
||||||
|
def set_mail(self):
|
||||||
|
email_template = self.comboBox.currentText()
|
||||||
|
with open(f"mail_vorlagen/{email_template}", "r", encoding="utf-8") as f:
|
||||||
|
mail_template = f.read()
|
||||||
|
email_header = email_template.split(".eml")[0]
|
||||||
|
if "{AppNr}" in email_template:
|
||||||
|
email_header = email_template.split(".eml")[0].format(AppNr=self.appid)
|
||||||
|
self.mail_header.setText(email_header)
|
||||||
|
self.mail_data = mail_template.split("<html>")[0]
|
||||||
|
mail_html = mail_template.split("<html>")[1]
|
||||||
|
mail_html = "<html>" + mail_html
|
||||||
|
print(self.data)
|
||||||
|
Appname = self.data["Appname"]
|
||||||
|
mail_html = mail_html.format(
|
||||||
|
Profname=self.prof_name.text().split(" ")[-1], Appname=Appname
|
||||||
|
)
|
||||||
|
|
||||||
|
self.mail_body.setHtml(mail_html)
|
||||||
|
|
||||||
|
def save_mail(self):
|
||||||
|
# create a temporary file
|
||||||
|
mail_header = self.mail_header.text()
|
||||||
|
mail_body = self.mail_body.toHtml()
|
||||||
|
mail = self.mail_data + mail_body
|
||||||
|
mail = mail.replace("Subject:", f"Subject: {mail_header}")
|
||||||
|
with tempfile.NamedTemporaryFile(
|
||||||
|
mode="w", delete=False, suffix=".eml", encoding="utf-8", dir="mails"
|
||||||
|
) as f:
|
||||||
|
f.write(mail)
|
||||||
|
self.mail_path = f.name
|
||||||
|
print(self.mail_path)
|
||||||
|
# open the file using thunderbird
|
||||||
|
subprocess.Popen(["thunderbird", f"{self.mail_path}"])
|
||||||
|
# delete the file
|
||||||
|
# os.remove(self.mail_path)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
Dialog = QtWidgets.QDialog()
|
||||||
|
ui = Mail_Dialog()
|
||||||
|
ui.setupUi(Dialog)
|
||||||
|
Dialog.show()
|
||||||
|
sys.exit(app.exec())
|
||||||
81
src/ui/dialogs/mail_preview.py
Normal file
81
src/ui/dialogs/mail_preview.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# Form implementation generated from reading ui file 'ui\dialogs\mail_preview.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(676, 676)
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(310, 630, 341, 32))
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
|
||||||
|
self.buttonBox.setStandardButtons(
|
||||||
|
QtWidgets.QDialogButtonBox.StandardButton.Cancel
|
||||||
|
| QtWidgets.QDialogButtonBox.StandardButton.Ok
|
||||||
|
)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.gridLayoutWidget = QtWidgets.QWidget(Dialog)
|
||||||
|
self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 10, 661, 621))
|
||||||
|
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
|
||||||
|
self.gridLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.prof_name = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.prof_name.setObjectName("prof_name")
|
||||||
|
self.gridLayout.addWidget(self.prof_name, 2, 2, 1, 1)
|
||||||
|
self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_3.setAlignment(
|
||||||
|
QtCore.Qt.AlignmentFlag.AlignLeading
|
||||||
|
| QtCore.Qt.AlignmentFlag.AlignLeft
|
||||||
|
| QtCore.Qt.AlignmentFlag.AlignTop
|
||||||
|
)
|
||||||
|
self.label_3.setObjectName("label_3")
|
||||||
|
self.gridLayout.addWidget(self.label_3, 4, 0, 1, 1)
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
|
||||||
|
self.label_4 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_4.setObjectName("label_4")
|
||||||
|
self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
|
||||||
|
self.mail_header = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.mail_header.setObjectName("mail_header")
|
||||||
|
self.gridLayout.addWidget(self.mail_header, 3, 2, 1, 1)
|
||||||
|
self.mail_name = QtWidgets.QLineEdit(self.gridLayoutWidget)
|
||||||
|
self.mail_name.setObjectName("mail_name")
|
||||||
|
self.gridLayout.addWidget(self.mail_name, 1, 2, 1, 1)
|
||||||
|
self.mail_body = QtWidgets.QTextEdit(self.gridLayoutWidget)
|
||||||
|
self.mail_body.setObjectName("mail_body")
|
||||||
|
self.gridLayout.addWidget(self.mail_body, 4, 2, 1, 1)
|
||||||
|
self.label = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
|
||||||
|
self.comboBox = QtWidgets.QComboBox(self.gridLayoutWidget)
|
||||||
|
self.comboBox.setObjectName("comboBox")
|
||||||
|
self.gridLayout.addWidget(self.comboBox, 0, 2, 1, 1)
|
||||||
|
self.label_5 = QtWidgets.QLabel(self.gridLayoutWidget)
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.gridLayout.addWidget(self.label_5, 0, 0, 1, 1)
|
||||||
|
# at selection change, load mail text
|
||||||
|
|
||||||
|
self.comboBox.currentIndexChanged.connect(self.set_mail)
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
|
||||||
|
# if the dialog is accepted, save the mail and send it
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label_3.setText(_translate("Dialog", "Mail"))
|
||||||
|
self.label_2.setText(_translate("Dialog", "Prof"))
|
||||||
|
self.label_4.setText(_translate("Dialog", "Betreff"))
|
||||||
|
self.label.setText(_translate("Dialog", "eMail"))
|
||||||
|
self.label_5.setText(_translate("Dialog", "Art"))
|
||||||
133
src/ui/dialogs/mail_preview.ui
Normal file
133
src/ui/dialogs/mail_preview.ui
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>676</width>
|
||||||
|
<height>676</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>310</x>
|
||||||
|
<y>630</y>
|
||||||
|
<width>341</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="gridLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>661</width>
|
||||||
|
<height>621</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QLineEdit" name="prof_name"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Mail</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Prof</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Betreff</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="2">
|
||||||
|
<widget class="QLineEdit" name="mail_header"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QLineEdit" name="mail_name"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QTextEdit" name="mail_body"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>eMail</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QComboBox" name="comboBox"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>Art</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
557
src/ui/dialogs/medianadder.ui
Normal file
557
src/ui/dialogs/medianadder.ui
Normal file
@@ -0,0 +1,557 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>637</width>
|
||||||
|
<height>491</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Signatur</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Modus</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="comboBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>70</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>69</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>ARRAY</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>BibTeX</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>COinS</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>RIS</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>70</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>113</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Signatur / ISBN</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Queue</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="widget" native="true">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>330</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>301</width>
|
||||||
|
<height>341</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QTreeWidget" name="treeWidget">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>301</width>
|
||||||
|
<height>341</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="lineWidth">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="midLineWidth">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="verticalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
|
</property>
|
||||||
|
<property name="horizontalScrollBarPolicy">
|
||||||
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeAdjustPolicy">
|
||||||
|
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
||||||
|
</property>
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
|
</property>
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="selectionMode">
|
||||||
|
<enum>QAbstractItemView::NoSelection</enum>
|
||||||
|
</property>
|
||||||
|
<property name="textElideMode">
|
||||||
|
<enum>Qt::ElideMiddle</enum>
|
||||||
|
</property>
|
||||||
|
<property name="uniformRowHeights">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="itemsExpandable">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="expandsOnDoubleClick">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<attribute name="headerCascadingSectionResizes">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerDefaultSectionSize">
|
||||||
|
<number>96</number>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerHighlightSections">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerMinimumSectionSize">
|
||||||
|
<number>20</number>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="headerStretchLastSection">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Datensatz\Metadata</string>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>7</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Array</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>BibTeX</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>COinS</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>RIS</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>PPN</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
<property name="background">
|
||||||
|
<brush brushstyle="SolidPattern">
|
||||||
|
<color alpha="255">
|
||||||
|
<red>255</red>
|
||||||
|
<green>0</green>
|
||||||
|
<blue>0</blue>
|
||||||
|
</color>
|
||||||
|
</brush>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Signatur</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="background">
|
||||||
|
<brush brushstyle="SolidPattern">
|
||||||
|
<color alpha="255">
|
||||||
|
<red>0</red>
|
||||||
|
<green>255</green>
|
||||||
|
<blue>0</blue>
|
||||||
|
</color>
|
||||||
|
</brush>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Autor</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>ISBN</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Jahr</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Auflage</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Sprache</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Herausgeber</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Seiten</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Titel</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Link</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QListWidget" name="listWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>281</width>
|
||||||
|
<height>341</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>330</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>181</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Belegbare Felder per Anbieter</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>200</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>41</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Anzahl:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="list_amount">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>240</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>450</y>
|
||||||
|
<width>156</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
<property name="centerButtons">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="l_add">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>190</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>21</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::ClickFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Clicken oder Shift Enter drücken um den Eintrag hinzuzufügen</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../resources.qrc">
|
||||||
|
<normaloff>:/information/icons/information.png</normaloff>:/information/icons/information.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="shortcut">
|
||||||
|
<string>Shift+Return</string>
|
||||||
|
</property>
|
||||||
|
<property name="autoDefault">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>lineEdit</tabstop>
|
||||||
|
<tabstop>comboBox</tabstop>
|
||||||
|
<tabstop>listWidget</tabstop>
|
||||||
|
<tabstop>treeWidget</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<resources>
|
||||||
|
<include location="../resources.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>87</x>
|
||||||
|
<y>461</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>318</x>
|
||||||
|
<y>245</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>87</x>
|
||||||
|
<y>461</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>318</x>
|
||||||
|
<y>245</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
47
src/ui/dialogs/medianadder_ui.ts
Normal file
47
src/ui/dialogs/medianadder_ui.ts
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1">
|
||||||
|
<context>
|
||||||
|
<name>Dialog</name>
|
||||||
|
<message>
|
||||||
|
<location filename="medianadder_ui.py" line="60"/>
|
||||||
|
<source>Dialog</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="medianadder_ui.py" line="61"/>
|
||||||
|
<source>Signatur</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="medianadder_ui.py" line="62"/>
|
||||||
|
<source>Modus</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="medianadder_ui.py" line="63"/>
|
||||||
|
<source>ARRAY</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="medianadder_ui.py" line="64"/>
|
||||||
|
<source>BibTeX</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="medianadder_ui.py" line="65"/>
|
||||||
|
<source>COinS</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="medianadder_ui.py" line="66"/>
|
||||||
|
<source>RIS</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="medianadder_ui.py" line="68"/>
|
||||||
|
<source>Queue</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
||||||
82
src/ui/dialogs/medienadder.py
Normal file
82
src/ui/dialogs/medienadder.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
from .Ui_medianadder import Ui_Dialog
|
||||||
|
|
||||||
|
|
||||||
|
class MedienAdder(QtWidgets.QDialog):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.ui = Ui_Dialog()
|
||||||
|
self.ui.setupUi(self)
|
||||||
|
|
||||||
|
# Connect signals and slots for your custom functionality
|
||||||
|
self.ui.buttonBox.accepted.connect(self.accept)
|
||||||
|
self.ui.buttonBox.rejected.connect(self.reject)
|
||||||
|
self.ui.l_add.clicked.connect(self.add_to_list)
|
||||||
|
self.ui.l_add.setShortcut("Shift+Return")
|
||||||
|
# Initialize data variables to store the results
|
||||||
|
self.result_data = []
|
||||||
|
|
||||||
|
self.recolorize()
|
||||||
|
|
||||||
|
def add_to_list(self):
|
||||||
|
text = self.ui.lineEdit.text().strip()
|
||||||
|
if text == "":
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.ui.listWidget.addItem(text)
|
||||||
|
self.ui.list_amount.setText(str(self.ui.listWidget.count()))
|
||||||
|
self.ui.lineEdit.clear()
|
||||||
|
|
||||||
|
def recolorize(self):
|
||||||
|
# set the color of the cells of the treeWidget to red if the field is not supported by the provider
|
||||||
|
# else set it to green
|
||||||
|
for i in range(self.ui.treeWidget.topLevelItemCount()):
|
||||||
|
for j in range(1, self.ui.treeWidget.columnCount()):
|
||||||
|
if self.ui.treeWidget.topLevelItem(i).text(j) == "0":
|
||||||
|
self.ui.treeWidget.topLevelItem(i).setBackground(
|
||||||
|
j, QtGui.QColor(255, 0, 0)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.ui.treeWidget.topLevelItem(i).setBackground(
|
||||||
|
j, QtGui.QColor(0, 255, 0)
|
||||||
|
)
|
||||||
|
# remove the text from the cells
|
||||||
|
self.ui.treeWidget.topLevelItem(i).setText(j, "")
|
||||||
|
|
||||||
|
def custom_context_menu(self):
|
||||||
|
menu = QtWidgets.QMenu()
|
||||||
|
menu.addAction("Remove")
|
||||||
|
|
||||||
|
action = menu.exec(QtGui.QCursor.pos())
|
||||||
|
if action.text() == "Remove":
|
||||||
|
self.remove_from_list()
|
||||||
|
|
||||||
|
def remove_from_list(self):
|
||||||
|
self.ui.listWidget.takeItem(self.ui.listWidget.currentRow())
|
||||||
|
self.ui.list_amount.setText(str(self.ui.listWidget.count()))
|
||||||
|
|
||||||
|
def add_to_list(self):
|
||||||
|
text = self.ui.lineEdit.text().strip()
|
||||||
|
if text:
|
||||||
|
self.ui.listWidget.addItem(text)
|
||||||
|
self.ui.list_amount.setText(str(self.ui.listWidget.count()))
|
||||||
|
self.ui.lineEdit.clear()
|
||||||
|
|
||||||
|
def accept(self):
|
||||||
|
# Gather and store the data you want to return
|
||||||
|
self.result_data = [
|
||||||
|
self.ui.listWidget.item(i).text() for i in range(self.ui.listWidget.count())
|
||||||
|
]
|
||||||
|
super().accept()
|
||||||
|
|
||||||
|
def keyPressEvent(self, event):
|
||||||
|
if (
|
||||||
|
event.key() == QtCore.Qt.Key.Key_Return
|
||||||
|
or event.key() == QtCore.Qt.Key.Key_Enter
|
||||||
|
):
|
||||||
|
# Handle the Return key press as needed (e.g., add to list)
|
||||||
|
self.add_to_list()
|
||||||
|
event.accept()
|
||||||
|
else:
|
||||||
|
super().keyPressEvent(event)
|
||||||
132
src/ui/dialogs/new_subject.ui
Normal file
132
src/ui/dialogs/new_subject.ui
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>448</width>
|
||||||
|
<height>165</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Das eingegebene Fach wurde nicht in der Datenbank gefunden. Soll es angelegt werden?</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="1">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Ja</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Name des Neuen Faches:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
59
src/ui/dialogs/new_subject_ui.py
Normal file
59
src/ui/dialogs/new_subject_ui.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# Form implementation generated from reading ui file '/home/alexander/GitHub/Semesterapparate/ui/dialogs/new_subject.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.5.3
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Dialog(object):
|
||||||
|
def setupUi(self, Dialog):
|
||||||
|
Dialog.setObjectName("Dialog")
|
||||||
|
Dialog.resize(448, 165)
|
||||||
|
self.verticalLayout_2 = QtWidgets.QVBoxLayout(Dialog)
|
||||||
|
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||||
|
self.verticalLayout = QtWidgets.QVBoxLayout()
|
||||||
|
self.verticalLayout.setObjectName("verticalLayout")
|
||||||
|
self.label = QtWidgets.QLabel(parent=Dialog)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.verticalLayout.addWidget(self.label)
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout()
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
|
||||||
|
self.gridLayout.addItem(spacerItem, 0, 1, 1, 1)
|
||||||
|
self.checkBox = QtWidgets.QCheckBox(parent=Dialog)
|
||||||
|
self.checkBox.setObjectName("checkBox")
|
||||||
|
self.gridLayout.addWidget(self.checkBox, 0, 0, 1, 1)
|
||||||
|
self.verticalLayout.addLayout(self.gridLayout)
|
||||||
|
self.verticalLayout_2.addLayout(self.verticalLayout)
|
||||||
|
self.frame = QtWidgets.QFrame(parent=Dialog)
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.label_2 = QtWidgets.QLabel(parent=self.frame)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(0, 10, 141, 16))
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.lineEdit = QtWidgets.QLineEdit(parent=self.frame)
|
||||||
|
self.lineEdit.setGeometry(QtCore.QRect(0, 30, 141, 20))
|
||||||
|
self.lineEdit.setObjectName("lineEdit")
|
||||||
|
self.verticalLayout_2.addWidget(self.frame)
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(parent=Dialog)
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
|
||||||
|
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.verticalLayout_2.addWidget(self.buttonBox)
|
||||||
|
|
||||||
|
self.retranslateUi(Dialog)
|
||||||
|
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||||
|
|
||||||
|
def retranslateUi(self, Dialog):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||||
|
self.label.setText(_translate("Dialog", "Das eingegebene Fach wurde nicht in der Datenbank gefunden. Soll es angelegt werden?"))
|
||||||
|
self.checkBox.setText(_translate("Dialog", "Ja"))
|
||||||
|
self.label_2.setText(_translate("Dialog", "Name des Neuen Faches:"))
|
||||||
163
src/ui/dialogs/parsed_titles.ui
Normal file
163
src/ui/dialogs/parsed_titles.ui
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Form</class>
|
||||||
|
<widget class="QWidget" name="Form">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>402</width>
|
||||||
|
<height>316</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>41</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="horizontalLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>41</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Es wurden</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="count">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>0</string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::PlainText</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Signaturen gefunden.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QFrame" name="frame_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>201</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="horizontalLayoutWidget_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>191</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QListWidget" name="listWidget"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QListWidget" name="listWidget_done"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QProgressBar" name="progressBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>381</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>24</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>230</x>
|
||||||
|
<y>290</y>
|
||||||
|
<width>156</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolButton" name="toolButton">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>290</y>
|
||||||
|
<width>25</width>
|
||||||
|
<height>19</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
81
src/ui/dialogs/parsed_titles_ui.py
Normal file
81
src/ui/dialogs/parsed_titles_ui.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# Form implementation generated from reading ui file '/home/alexander/GitHub/Semesterapparate/ui/dialogs/parsed_titles.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.5.3
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Form(object):
|
||||||
|
def setupUi(self, Form):
|
||||||
|
Form.setObjectName("Form")
|
||||||
|
Form.resize(402, 316)
|
||||||
|
self.frame = QtWidgets.QFrame(parent=Form)
|
||||||
|
self.frame.setGeometry(QtCore.QRect(10, 10, 381, 41))
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.horizontalLayoutWidget = QtWidgets.QWidget(parent=self.frame)
|
||||||
|
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 381, 41))
|
||||||
|
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
|
||||||
|
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
|
||||||
|
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
|
self.label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.horizontalLayout.addWidget(self.label)
|
||||||
|
self.count = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setBold(True)
|
||||||
|
font.setWeight(75)
|
||||||
|
self.count.setFont(font)
|
||||||
|
self.count.setTextFormat(QtCore.Qt.TextFormat.PlainText)
|
||||||
|
self.count.setObjectName("count")
|
||||||
|
self.horizontalLayout.addWidget(self.count)
|
||||||
|
self.label_2 = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.horizontalLayout.addWidget(self.label_2)
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
|
||||||
|
self.horizontalLayout.addItem(spacerItem)
|
||||||
|
self.frame_2 = QtWidgets.QFrame(parent=Form)
|
||||||
|
self.frame_2.setGeometry(QtCore.QRect(10, 80, 381, 201))
|
||||||
|
self.frame_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame_2.setObjectName("frame_2")
|
||||||
|
self.horizontalLayoutWidget_2 = QtWidgets.QWidget(parent=self.frame_2)
|
||||||
|
self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(0, 10, 381, 191))
|
||||||
|
self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
|
||||||
|
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
|
||||||
|
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||||
|
self.listWidget = QtWidgets.QListWidget(parent=self.horizontalLayoutWidget_2)
|
||||||
|
self.listWidget.setObjectName("listWidget")
|
||||||
|
self.horizontalLayout_2.addWidget(self.listWidget)
|
||||||
|
self.listWidget_done = QtWidgets.QListWidget(parent=self.horizontalLayoutWidget_2)
|
||||||
|
self.listWidget_done.setObjectName("listWidget_done")
|
||||||
|
self.horizontalLayout_2.addWidget(self.listWidget_done)
|
||||||
|
self.progressBar = QtWidgets.QProgressBar(parent=Form)
|
||||||
|
self.progressBar.setGeometry(QtCore.QRect(10, 60, 381, 23))
|
||||||
|
self.progressBar.setProperty("value", 24)
|
||||||
|
self.progressBar.setObjectName("progressBar")
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(parent=Form)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(230, 290, 156, 23))
|
||||||
|
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.toolButton = QtWidgets.QToolButton(parent=Form)
|
||||||
|
self.toolButton.setGeometry(QtCore.QRect(20, 290, 25, 19))
|
||||||
|
self.toolButton.setObjectName("toolButton")
|
||||||
|
|
||||||
|
self.retranslateUi(Form)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||||
|
|
||||||
|
def retranslateUi(self, Form):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Form.setWindowTitle(_translate("Form", "Form"))
|
||||||
|
self.label.setText(_translate("Form", "Es wurden"))
|
||||||
|
self.count.setText(_translate("Form", "0"))
|
||||||
|
self.label_2.setText(_translate("Form", "Signaturen gefunden."))
|
||||||
|
self.toolButton.setText(_translate("Form", "..."))
|
||||||
48
src/ui/dialogs/popup_confirm.py
Normal file
48
src/ui/dialogs/popup_confirm.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Form implementation generated from reading ui file 'ui\dialogs\confirm_extend.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_extend_confirm(object):
|
||||||
|
def setupUi(self, extend_confirm):
|
||||||
|
extend_confirm.setObjectName("extend_confirm")
|
||||||
|
extend_confirm.resize(380, 97)
|
||||||
|
# icon=QtGui.QIcon(f"ui/icons/{icon}.png")
|
||||||
|
# extend_confirm.setWindowIcon(icon)
|
||||||
|
self.buttonBox = QtWidgets.QDialogButtonBox(extend_confirm)
|
||||||
|
self.buttonBox.setGeometry(QtCore.QRect(290, 20, 81, 241))
|
||||||
|
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Vertical)
|
||||||
|
self.buttonBox.setStandardButtons(
|
||||||
|
QtWidgets.QDialogButtonBox.StandardButton.Cancel
|
||||||
|
| QtWidgets.QDialogButtonBox.StandardButton.Ok
|
||||||
|
)
|
||||||
|
self.buttonBox.setObjectName("buttonBox")
|
||||||
|
self.textEdit = QtWidgets.QTextEdit(extend_confirm)
|
||||||
|
self.textEdit.setGeometry(QtCore.QRect(10, 10, 271, 81))
|
||||||
|
self.textEdit.setObjectName("textEdit")
|
||||||
|
|
||||||
|
self.retranslateUi(extend_confirm)
|
||||||
|
self.buttonBox.accepted.connect(extend_confirm.accept) # type: ignore
|
||||||
|
self.buttonBox.rejected.connect(extend_confirm.reject) # type: ignore
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(extend_confirm)
|
||||||
|
|
||||||
|
def retranslateUi(self, extend_confirm):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
extend_confirm.setWindowTitle(_translate("extend_confirm", "Dialog"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
extend_confirm = QtWidgets.QDialog()
|
||||||
|
ui = Ui_extend_confirm()
|
||||||
|
ui.setupUi(extend_confirm)
|
||||||
|
extend_confirm.show()
|
||||||
|
sys.exit(app.exec())
|
||||||
114
src/ui/dialogs/reminder.ui
Normal file
114
src/ui/dialogs/reminder.ui
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>369</width>
|
||||||
|
<height>308</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>190</x>
|
||||||
|
<y>270</y>
|
||||||
|
<width>161</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QTextEdit" name="message_box">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>341</width>
|
||||||
|
<height>201</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>61</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Nachricht:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>150</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>81</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Erinnerung am:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QDateEdit" name="dateEdit">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>240</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>110</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>248</x>
|
||||||
|
<y>254</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>316</x>
|
||||||
|
<y>260</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
0
src/ui/dialogs/resources.qrc
Normal file
0
src/ui/dialogs/resources.qrc
Normal file
48
src/ui/dialogs/settings.py
Normal file
48
src/ui/dialogs/settings.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
from omegaconf import OmegaConf
|
||||||
|
from PyQt6 import QtWidgets
|
||||||
|
|
||||||
|
from src.ui.dialogs.Ui_settings import Ui_Dialog as _settings
|
||||||
|
|
||||||
|
config = OmegaConf.load("config.yaml")
|
||||||
|
|
||||||
|
|
||||||
|
class Settings(_settings):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.setupUi(self)
|
||||||
|
self.retranslateUi(self)
|
||||||
|
self.load_config()
|
||||||
|
|
||||||
|
def load_config(self):
|
||||||
|
self.db_name.setText(config.database.name)
|
||||||
|
self.db_path.setText(config.database.path)
|
||||||
|
self.save_path.setText(config.save_path)
|
||||||
|
self.os_apps.setChecked(config.default_apps)
|
||||||
|
|
||||||
|
def select_db(self):
|
||||||
|
# open file dialog, limit to .db files
|
||||||
|
file_dialog = QtWidgets.QFileDialog()
|
||||||
|
file_dialog.setFileMode(QtWidgets.QFileDialog.FileMode.AnyFile)
|
||||||
|
file_dialog.setNameFilter("Datenbank (*.db)")
|
||||||
|
file_dialog.setViewMode(QtWidgets.QFileDialog.ViewMode.Detail)
|
||||||
|
if file_dialog.exec():
|
||||||
|
self.db_name.setText(file_dialog.selectedFiles()[0].split("/")[-1])
|
||||||
|
self.db_path.setText(
|
||||||
|
file_dialog.selectedFiles()[0].split(self.db_name.text())[0]
|
||||||
|
)
|
||||||
|
|
||||||
|
def set_save_path(self):
|
||||||
|
# open file dialog, limit to .db files
|
||||||
|
file_dialog = QtWidgets.QFileDialog()
|
||||||
|
file_dialog.setFileMode(QtWidgets.QFileDialog.FileMode.Directory)
|
||||||
|
file_dialog.setViewMode(QtWidgets.QFileDialog.ViewMode.Detail)
|
||||||
|
if file_dialog.exec():
|
||||||
|
self.save_path.setText(file_dialog.selectedFiles()[0])
|
||||||
|
|
||||||
|
def return_data(self):
|
||||||
|
config.database.name = self.db_name.text()
|
||||||
|
config.database.path = self.db_path.text()
|
||||||
|
config.save_path = self.save_path.text()
|
||||||
|
config.default_apps = self.os_apps.isChecked()
|
||||||
|
|
||||||
|
return config
|
||||||
308
src/ui/dialogs/settings.ui
Normal file
308
src/ui/dialogs/settings.ui
Normal file
@@ -0,0 +1,308 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Dialog</class>
|
||||||
|
<widget class="QDialog" name="Dialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>743</width>
|
||||||
|
<height>576</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Dialog</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>540</y>
|
||||||
|
<width>621</width>
|
||||||
|
<height>32</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>741</width>
|
||||||
|
<height>541</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>400</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>161</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dateispezifische Einstellungen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>370</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>20</width>
|
||||||
|
<height>541</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Plain</enum>
|
||||||
|
</property>
|
||||||
|
<property name="lineWidth">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="midLineWidth">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QTextBrowser" name="textBrowser">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>400</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>311</width>
|
||||||
|
<height>51</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="inputMethodHints">
|
||||||
|
<set>Qt::ImhNone</set>
|
||||||
|
</property>
|
||||||
|
<property name="html">
|
||||||
|
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||||
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
|
p, li { white-space: pre-wrap; }
|
||||||
|
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
||||||
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hier können Einstellungen für bestehende Dateiformate geändert, oder neue Dateiformate eingefügt werden.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>161</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Allgemeine Einstellungen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox" name="os_apps">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>410</x>
|
||||||
|
<y>110</y>
|
||||||
|
<width>161</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Verwendet im Betriebssystem festgelegte Anwendungen um Dateien zu öffnen</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Standard-Apps verwenden</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="formLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>361</width>
|
||||||
|
<height>491</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Name der Datenbank, welche verwendet werden soll. <span style=" font-weight:600;">Muss</span> auf .db enden</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Datenbankname</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>db_name</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Pfad, an dem heruntergeladene Dateien gespeichert werden sollen</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Speicherpfad</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>save_path</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="db_path">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLineEdit" name="save_path"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>Datenbankpfad</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>db_path</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="db_name">
|
||||||
|
<property name="text">
|
||||||
|
<string>sap.db</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QToolButton" name="tb_set_save_path">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QToolButton" name="tb_select_db">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QScrollArea" name="scrollArea">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>400</x>
|
||||||
|
<y>130</y>
|
||||||
|
<width>331</width>
|
||||||
|
<height>381</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="widgetResizable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>329</width>
|
||||||
|
<height>379</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QTreeWidget" name="treeWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>331</width>
|
||||||
|
<height>381</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::ActionsContextMenu</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<tabstops>
|
||||||
|
<tabstop>db_name</tabstop>
|
||||||
|
<tabstop>db_path</tabstop>
|
||||||
|
<tabstop>save_path</tabstop>
|
||||||
|
<tabstop>os_apps</tabstop>
|
||||||
|
<tabstop>textBrowser</tabstop>
|
||||||
|
</tabstops>
|
||||||
|
<resources>
|
||||||
|
<include location="../resources.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>358</x>
|
||||||
|
<y>540</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>Dialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>426</x>
|
||||||
|
<y>540</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
0
src/ui/extensions/__init__.py
Normal file
0
src/ui/extensions/__init__.py
Normal file
BIN
src/ui/icons/critical.png
Normal file
BIN
src/ui/icons/critical.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 252 B |
BIN
src/ui/icons/information.png
Normal file
BIN
src/ui/icons/information.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 245 B |
BIN
src/ui/icons/logo_SAP.ico
Normal file
BIN
src/ui/icons/logo_SAP.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
BIN
src/ui/icons/logo_SAP.png
Normal file
BIN
src/ui/icons/logo_SAP.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 273 KiB |
BIN
src/ui/icons/question.png
Normal file
BIN
src/ui/icons/question.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 252 B |
BIN
src/ui/icons/warning.png
Normal file
BIN
src/ui/icons/warning.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 222 B |
360
src/ui/mainwindow.py
Normal file
360
src/ui/mainwindow.py
Normal file
@@ -0,0 +1,360 @@
|
|||||||
|
# Form implementation generated from reading ui file 'untitled.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(1280, 720)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
|
||||||
|
MainWindow.setSizePolicy(sizePolicy)
|
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
|
||||||
|
self.centralwidget.setSizePolicy(sizePolicy)
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
|
||||||
|
self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 1271, 671))
|
||||||
|
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
|
||||||
|
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
|
||||||
|
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.verticalLayout.setObjectName("verticalLayout")
|
||||||
|
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout()
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.tabWidget = QtWidgets.QTabWidget(self.verticalLayoutWidget)
|
||||||
|
self.tabWidget.setObjectName("tabWidget")
|
||||||
|
self.tab = QtWidgets.QWidget()
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.tab.sizePolicy().hasHeightForWidth())
|
||||||
|
self.tab.setSizePolicy(sizePolicy)
|
||||||
|
self.tab.setObjectName("tab")
|
||||||
|
self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.tab)
|
||||||
|
self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(0, 0, 1261, 161))
|
||||||
|
self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
|
||||||
|
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
|
||||||
|
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||||
|
self.formLayout = QtWidgets.QFormLayout()
|
||||||
|
self.formLayout.setObjectName("formLayout")
|
||||||
|
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
|
||||||
|
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
|
||||||
|
self.verticalLayout_2.addItem(spacerItem)
|
||||||
|
self.load_app = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
|
||||||
|
self.load_app.setObjectName("load_app")
|
||||||
|
self.verticalLayout_2.addWidget(self.load_app)
|
||||||
|
self.create_new_app = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
|
||||||
|
self.create_new_app.setObjectName("create_new_app")
|
||||||
|
self.verticalLayout_2.addWidget(self.create_new_app)
|
||||||
|
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
|
||||||
|
self.verticalLayout_2.addItem(spacerItem1)
|
||||||
|
self.formLayout.setLayout(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.verticalLayout_2)
|
||||||
|
self.tableWidget_apparate = QtWidgets.QTableWidget(self.horizontalLayoutWidget_2)
|
||||||
|
self.tableWidget_apparate.setObjectName("tableWidget_apparate")
|
||||||
|
self.tableWidget_apparate.setColumnCount(4)
|
||||||
|
self.tableWidget_apparate.setRowCount(0)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(0, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(1, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(2, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(3, item)
|
||||||
|
self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.tableWidget_apparate)
|
||||||
|
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||||
|
self.formLayout.setLayout(2, QtWidgets.QFormLayout.ItemRole.LabelRole, self.horizontalLayout_3)
|
||||||
|
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
|
||||||
|
self.formLayout.setLayout(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.horizontalLayout_4)
|
||||||
|
self.horizontalLayout_2.addLayout(self.formLayout)
|
||||||
|
self.line = QtWidgets.QFrame(self.tab)
|
||||||
|
self.line.setGeometry(QtCore.QRect(0, 160, 1261, 21))
|
||||||
|
self.line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
|
||||||
|
self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
|
||||||
|
self.line.setObjectName("line")
|
||||||
|
self.gridLayoutWidget_2 = QtWidgets.QWidget(self.tab)
|
||||||
|
self.gridLayoutWidget_2.setGeometry(QtCore.QRect(0, 180, 1261, 461))
|
||||||
|
self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
|
||||||
|
self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
|
||||||
|
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.gridLayout_2.setObjectName("gridLayout_2")
|
||||||
|
self.tableWidget_apparat_media = QtWidgets.QTableWidget(self.gridLayoutWidget_2)
|
||||||
|
self.tableWidget_apparat_media.setObjectName("tableWidget_apparat_media")
|
||||||
|
self.tableWidget_apparat_media.setColumnCount(4)
|
||||||
|
self.tableWidget_apparat_media.setRowCount(0)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(0, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(1, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(2, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(3, item)
|
||||||
|
self.gridLayout_2.addWidget(self.tableWidget_apparat_media, 3, 0, 1, 1)
|
||||||
|
self.label = QtWidgets.QLabel(self.gridLayoutWidget_2)
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(11)
|
||||||
|
font.setBold(True)
|
||||||
|
font.setWeight(75)
|
||||||
|
self.label.setFont(font)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.gridLayout_2.addWidget(self.label, 1, 0, 1, 1)
|
||||||
|
self.app_group_box = QtWidgets.QGroupBox(self.gridLayoutWidget_2)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.app_group_box.sizePolicy().hasHeightForWidth())
|
||||||
|
self.app_group_box.setSizePolicy(sizePolicy)
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(12)
|
||||||
|
font.setBold(True)
|
||||||
|
font.setWeight(75)
|
||||||
|
self.app_group_box.setFont(font)
|
||||||
|
self.app_group_box.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
|
||||||
|
self.app_group_box.setCheckable(False)
|
||||||
|
self.app_group_box.setObjectName("app_group_box")
|
||||||
|
self.tableWidget = QtWidgets.QTableWidget(self.app_group_box)
|
||||||
|
self.tableWidget.setGeometry(QtCore.QRect(820, 20, 256, 192))
|
||||||
|
self.tableWidget.setObjectName("tableWidget")
|
||||||
|
self.tableWidget.setColumnCount(2)
|
||||||
|
self.tableWidget.setRowCount(0)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget.setHorizontalHeaderItem(0, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget.setHorizontalHeaderItem(1, item)
|
||||||
|
self.frame = QtWidgets.QFrame(self.app_group_box)
|
||||||
|
self.frame.setGeometry(QtCore.QRect(10, 30, 731, 151))
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())
|
||||||
|
self.frame.setSizePolicy(sizePolicy)
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.drpdwn_prof_title = QtWidgets.QComboBox(self.frame)
|
||||||
|
self.drpdwn_prof_title.setGeometry(QtCore.QRect(110, 50, 69, 22))
|
||||||
|
self.drpdwn_prof_title.setObjectName("drpdwn_prof_title")
|
||||||
|
self.label_5 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_5.setGeometry(QtCore.QRect(250, 20, 91, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_5.setFont(font)
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.lineEdit = QtWidgets.QLineEdit(self.frame)
|
||||||
|
self.lineEdit.setGeometry(QtCore.QRect(110, 80, 121, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.lineEdit.setFont(font)
|
||||||
|
self.lineEdit.setObjectName("lineEdit")
|
||||||
|
self.sem_winter = QtWidgets.QRadioButton(self.frame)
|
||||||
|
self.sem_winter.setGeometry(QtCore.QRect(340, 50, 82, 17))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.sem_winter.setFont(font)
|
||||||
|
self.sem_winter.setObjectName("sem_winter")
|
||||||
|
self.label_4 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_4.setGeometry(QtCore.QRect(10, 80, 71, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_4.setFont(font)
|
||||||
|
self.label_4.setObjectName("label_4")
|
||||||
|
self.drpdwn_app_nr = QtWidgets.QComboBox(self.frame)
|
||||||
|
self.drpdwn_app_nr.setGeometry(QtCore.QRect(110, 20, 69, 22))
|
||||||
|
self.drpdwn_app_nr.setObjectName("drpdwn_app_nr")
|
||||||
|
self.app_name = QtWidgets.QLineEdit(self.frame)
|
||||||
|
self.app_name.setGeometry(QtCore.QRect(340, 20, 113, 20))
|
||||||
|
self.app_name.setObjectName("app_name")
|
||||||
|
self.sem_sommer = QtWidgets.QRadioButton(self.frame)
|
||||||
|
self.sem_sommer.setGeometry(QtCore.QRect(340, 70, 82, 17))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.sem_sommer.setFont(font)
|
||||||
|
self.sem_sommer.setObjectName("sem_sommer")
|
||||||
|
self.label_3 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_3.setGeometry(QtCore.QRect(10, 50, 61, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_3.setFont(font)
|
||||||
|
self.label_3.setObjectName("label_3")
|
||||||
|
self.label_6 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_6.setGeometry(QtCore.QRect(270, 60, 51, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_6.setFont(font)
|
||||||
|
self.label_6.setObjectName("label_6")
|
||||||
|
self.sem_year = QtWidgets.QLineEdit(self.frame)
|
||||||
|
self.sem_year.setGeometry(QtCore.QRect(410, 60, 113, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.sem_year.setFont(font)
|
||||||
|
self.sem_year.setObjectName("sem_year")
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(10, 20, 101, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_2.setFont(font)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.btn_apparat_save = QtWidgets.QPushButton(self.frame)
|
||||||
|
self.btn_apparat_save.setGeometry(QtCore.QRect(260, 120, 75, 23))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.btn_apparat_save.setFont(font)
|
||||||
|
self.btn_apparat_save.setObjectName("btn_apparat_save")
|
||||||
|
self.btn_apparat_apply = QtWidgets.QPushButton(self.frame)
|
||||||
|
self.btn_apparat_apply.setGeometry(QtCore.QRect(350, 120, 75, 23))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.btn_apparat_apply.setFont(font)
|
||||||
|
self.btn_apparat_apply.setObjectName("btn_apparat_apply")
|
||||||
|
self.checkBox = QtWidgets.QCheckBox(self.frame)
|
||||||
|
self.checkBox.setGeometry(QtCore.QRect(340, 90, 101, 17))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.checkBox.setFont(font)
|
||||||
|
self.checkBox.setObjectName("checkBox")
|
||||||
|
self.btn_add_document = QtWidgets.QPushButton(self.app_group_box)
|
||||||
|
self.btn_add_document.setGeometry(QtCore.QRect(1100, 40, 131, 25))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.btn_add_document.setFont(font)
|
||||||
|
self.btn_add_document.setObjectName("btn_add_document")
|
||||||
|
self.btn_open_document = QtWidgets.QPushButton(self.app_group_box)
|
||||||
|
self.btn_open_document.setGeometry(QtCore.QRect(1100, 80, 131, 25))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.btn_open_document.setFont(font)
|
||||||
|
self.btn_open_document.setObjectName("btn_open_document")
|
||||||
|
self.toolButton = QtWidgets.QToolButton(self.app_group_box)
|
||||||
|
self.toolButton.setGeometry(QtCore.QRect(1110, 110, 25, 19))
|
||||||
|
self.toolButton.setObjectName("toolButton")
|
||||||
|
self.gridLayout_2.addWidget(self.app_group_box, 2, 0, 1, 1)
|
||||||
|
self.tabWidget.addTab(self.tab, "")
|
||||||
|
self.tab_2 = QtWidgets.QWidget()
|
||||||
|
self.tab_2.setObjectName("tab_2")
|
||||||
|
self.tabWidget.addTab(self.tab_2, "")
|
||||||
|
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
|
||||||
|
self.horizontalLayout.addLayout(self.gridLayout)
|
||||||
|
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||||
|
self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 21))
|
||||||
|
self.menubar.setObjectName("menubar")
|
||||||
|
self.menuDatei = QtWidgets.QMenu(self.menubar)
|
||||||
|
self.menuDatei.setObjectName("menuDatei")
|
||||||
|
self.menuEinstellungen = QtWidgets.QMenu(self.menubar)
|
||||||
|
self.menuEinstellungen.setObjectName("menuEinstellungen")
|
||||||
|
MainWindow.setMenuBar(self.menubar)
|
||||||
|
self.statusbar = QtWidgets.QStatusBar(MainWindow)
|
||||||
|
self.statusbar.setObjectName("statusbar")
|
||||||
|
MainWindow.setStatusBar(self.statusbar)
|
||||||
|
self.menubar.addAction(self.menuDatei.menuAction())
|
||||||
|
self.menubar.addAction(self.menuEinstellungen.menuAction())
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
self.tabWidget.setCurrentIndex(0)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||||
|
self.load_app.setToolTip(_translate("MainWindow", "Load the Semesterapparate from the database"))
|
||||||
|
self.load_app.setText(_translate("MainWindow", "App. Laden"))
|
||||||
|
self.create_new_app.setText(_translate("MainWindow", "neu. App anlegen"))
|
||||||
|
item = self.tableWidget_apparate.horizontalHeaderItem(0)
|
||||||
|
item.setText(_translate("MainWindow", "AppNr"))
|
||||||
|
item = self.tableWidget_apparate.horizontalHeaderItem(1)
|
||||||
|
item.setText(_translate("MainWindow", "App Name"))
|
||||||
|
item = self.tableWidget_apparate.horizontalHeaderItem(2)
|
||||||
|
item.setText(_translate("MainWindow", "Professor"))
|
||||||
|
item = self.tableWidget_apparate.horizontalHeaderItem(3)
|
||||||
|
item.setText(_translate("MainWindow", "Dauerapparat"))
|
||||||
|
item = self.tableWidget_apparat_media.horizontalHeaderItem(0)
|
||||||
|
item.setText(_translate("MainWindow", "Buchtitel"))
|
||||||
|
item = self.tableWidget_apparat_media.horizontalHeaderItem(1)
|
||||||
|
item.setText(_translate("MainWindow", "Autor"))
|
||||||
|
item = self.tableWidget_apparat_media.horizontalHeaderItem(2)
|
||||||
|
item.setText(_translate("MainWindow", "Auflage"))
|
||||||
|
item = self.tableWidget_apparat_media.horizontalHeaderItem(3)
|
||||||
|
item.setText(_translate("MainWindow", "Signatur"))
|
||||||
|
self.label.setText(_translate("MainWindow", "Medienliste"))
|
||||||
|
self.app_group_box.setTitle(_translate("MainWindow", "Apparatsdetails"))
|
||||||
|
item = self.tableWidget.horizontalHeaderItem(0)
|
||||||
|
item.setText(_translate("MainWindow", "Dokumentname"))
|
||||||
|
item = self.tableWidget.horizontalHeaderItem(1)
|
||||||
|
item.setText(_translate("MainWindow", "Typ"))
|
||||||
|
self.label_5.setText(_translate("MainWindow", "Apparatsname"))
|
||||||
|
self.lineEdit.setPlaceholderText(_translate("MainWindow", "Nachname, Vorname"))
|
||||||
|
self.sem_winter.setText(_translate("MainWindow", "Winter"))
|
||||||
|
self.label_4.setText(_translate("MainWindow", "Prof. Name"))
|
||||||
|
self.sem_sommer.setText(_translate("MainWindow", "Sommer"))
|
||||||
|
self.label_3.setText(_translate("MainWindow", "Prof. Titel"))
|
||||||
|
self.label_6.setText(_translate("MainWindow", "Semester"))
|
||||||
|
self.sem_year.setPlaceholderText(_translate("MainWindow", "2023"))
|
||||||
|
self.label_2.setText(_translate("MainWindow", "Apparatsnummer"))
|
||||||
|
self.btn_apparat_save.setText(_translate("MainWindow", "Speichern"))
|
||||||
|
self.btn_apparat_apply.setText(_translate("MainWindow", "Aktualisieren"))
|
||||||
|
self.checkBox.setText(_translate("MainWindow", "Dauerapparat"))
|
||||||
|
self.btn_add_document.setText(_translate("MainWindow", "Dokument hinzufügen"))
|
||||||
|
self.btn_open_document.setText(_translate("MainWindow", "Dokument öffnen"))
|
||||||
|
self.toolButton.setText(_translate("MainWindow", "..."))
|
||||||
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1"))
|
||||||
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2"))
|
||||||
|
self.menuDatei.setTitle(_translate("MainWindow", "Datei"))
|
||||||
|
self.menuEinstellungen.setTitle(_translate("MainWindow", "Einstellungen"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
MainWindow = QtWidgets.QMainWindow()
|
||||||
|
ui = Ui_MainWindow()
|
||||||
|
ui.setupUi(MainWindow)
|
||||||
|
MainWindow.show()
|
||||||
|
sys.exit(app.exec())
|
||||||
64
src/ui/plotdata.ui
Normal file
64
src/ui/plotdata.ui
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>640</width>
|
||||||
|
<height>480</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<widget class="QGraphicsView" name="graphicsView">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>330</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>256</width>
|
||||||
|
<height>192</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="widget" native="true">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>251</width>
|
||||||
|
<height>271</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStackedWidget" name="stackedWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>300</x>
|
||||||
|
<y>220</y>
|
||||||
|
<width>291</width>
|
||||||
|
<height>201</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="page"/>
|
||||||
|
<widget class="QWidget" name="page_2"/>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menubar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>640</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
47
src/ui/plotdata_ui.py
Normal file
47
src/ui/plotdata_ui.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# Form implementation generated from reading ui file '/home/alexander/GitHub/Semesterapparate/ui/plotdata.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.5.3
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(640, 480)
|
||||||
|
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.graphicsView = QtWidgets.QGraphicsView(parent=self.centralwidget)
|
||||||
|
self.graphicsView.setGeometry(QtCore.QRect(330, 10, 256, 192))
|
||||||
|
self.graphicsView.setObjectName("graphicsView")
|
||||||
|
self.widget = QtWidgets.QWidget(parent=self.centralwidget)
|
||||||
|
self.widget.setGeometry(QtCore.QRect(10, 0, 251, 271))
|
||||||
|
self.widget.setObjectName("widget")
|
||||||
|
self.stackedWidget = QtWidgets.QStackedWidget(parent=self.centralwidget)
|
||||||
|
self.stackedWidget.setGeometry(QtCore.QRect(300, 220, 291, 201))
|
||||||
|
self.stackedWidget.setObjectName("stackedWidget")
|
||||||
|
self.page = QtWidgets.QWidget()
|
||||||
|
self.page.setObjectName("page")
|
||||||
|
self.stackedWidget.addWidget(self.page)
|
||||||
|
self.page_2 = QtWidgets.QWidget()
|
||||||
|
self.page_2.setObjectName("page_2")
|
||||||
|
self.stackedWidget.addWidget(self.page_2)
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
|
||||||
|
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
|
||||||
|
self.menubar.setObjectName("menubar")
|
||||||
|
MainWindow.setMenuBar(self.menubar)
|
||||||
|
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
|
||||||
|
self.statusbar.setObjectName("statusbar")
|
||||||
|
MainWindow.setStatusBar(self.statusbar)
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||||
14
src/ui/resources.qrc
Normal file
14
src/ui/resources.qrc
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="warn_image">
|
||||||
|
<file>icons/warning.png</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="critical">
|
||||||
|
<file>icons/critical.png</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="information">
|
||||||
|
<file>icons/information.png</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="question">
|
||||||
|
<file>icons/question.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
||||||
512
src/ui/sap.py
Normal file
512
src/ui/sap.py
Normal file
@@ -0,0 +1,512 @@
|
|||||||
|
# Form implementation generated from reading ui file 'ui/semesterapparat_ui.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(1280, 747)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
|
||||||
|
MainWindow.setSizePolicy(sizePolicy)
|
||||||
|
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
|
||||||
|
self.centralwidget.setSizePolicy(sizePolicy)
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
|
||||||
|
self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 1271, 691))
|
||||||
|
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
|
||||||
|
self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
|
||||||
|
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.verticalLayout.setObjectName("verticalLayout")
|
||||||
|
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout()
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.tabWidget = QtWidgets.QTabWidget(self.verticalLayoutWidget)
|
||||||
|
self.tabWidget.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.tabWidget.setObjectName("tabWidget")
|
||||||
|
self.tab = QtWidgets.QWidget()
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.tab.sizePolicy().hasHeightForWidth())
|
||||||
|
self.tab.setSizePolicy(sizePolicy)
|
||||||
|
self.tab.setObjectName("tab")
|
||||||
|
self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.tab)
|
||||||
|
self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(0, 0, 1261, 161))
|
||||||
|
self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
|
||||||
|
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
|
||||||
|
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||||
|
self.formLayout = QtWidgets.QFormLayout()
|
||||||
|
self.formLayout.setObjectName("formLayout")
|
||||||
|
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
|
||||||
|
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
|
||||||
|
self.verticalLayout_2.addItem(spacerItem)
|
||||||
|
self.load_app = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
|
||||||
|
self.load_app.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.load_app.setObjectName("load_app")
|
||||||
|
self.verticalLayout_2.addWidget(self.load_app)
|
||||||
|
self.create_new_app = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
|
||||||
|
self.create_new_app.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.create_new_app.setObjectName("create_new_app")
|
||||||
|
self.verticalLayout_2.addWidget(self.create_new_app)
|
||||||
|
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
|
||||||
|
self.verticalLayout_2.addItem(spacerItem1)
|
||||||
|
self.formLayout.setLayout(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.verticalLayout_2)
|
||||||
|
self.tableWidget_apparate = QtWidgets.QTableWidget(self.horizontalLayoutWidget_2)
|
||||||
|
self.tableWidget_apparate.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.tableWidget_apparate.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers)
|
||||||
|
self.tableWidget_apparate.setObjectName("tableWidget_apparate")
|
||||||
|
self.tableWidget_apparate.setColumnCount(4)
|
||||||
|
self.tableWidget_apparate.setRowCount(0)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(0, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(1, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(2, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(3, item)
|
||||||
|
self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.tableWidget_apparate)
|
||||||
|
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||||
|
self.formLayout.setLayout(2, QtWidgets.QFormLayout.ItemRole.LabelRole, self.horizontalLayout_3)
|
||||||
|
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
|
||||||
|
self.formLayout.setLayout(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.horizontalLayout_4)
|
||||||
|
self.horizontalLayout_2.addLayout(self.formLayout)
|
||||||
|
self.line = QtWidgets.QFrame(self.tab)
|
||||||
|
self.line.setGeometry(QtCore.QRect(0, 160, 1261, 21))
|
||||||
|
self.line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
|
||||||
|
self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
|
||||||
|
self.line.setObjectName("line")
|
||||||
|
self.gridLayoutWidget_2 = QtWidgets.QWidget(self.tab)
|
||||||
|
self.gridLayoutWidget_2.setGeometry(QtCore.QRect(0, 180, 1261, 461))
|
||||||
|
self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
|
||||||
|
self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
|
||||||
|
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.gridLayout_2.setObjectName("gridLayout_2")
|
||||||
|
self.app_group_box = QtWidgets.QGroupBox(self.gridLayoutWidget_2)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.app_group_box.sizePolicy().hasHeightForWidth())
|
||||||
|
self.app_group_box.setSizePolicy(sizePolicy)
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(12)
|
||||||
|
font.setBold(True)
|
||||||
|
font.setWeight(75)
|
||||||
|
self.app_group_box.setFont(font)
|
||||||
|
self.app_group_box.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
|
||||||
|
self.app_group_box.setCheckable(False)
|
||||||
|
self.app_group_box.setObjectName("app_group_box")
|
||||||
|
self.dokument_list = QtWidgets.QTableWidget(self.app_group_box)
|
||||||
|
self.dokument_list.setGeometry(QtCore.QRect(830, 20, 256, 192))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setKerning(False)
|
||||||
|
self.dokument_list.setFont(font)
|
||||||
|
self.dokument_list.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.dokument_list.setSelectionMode(QtWidgets.QAbstractItemView.SelectionMode.SingleSelection)
|
||||||
|
self.dokument_list.setObjectName("dokument_list")
|
||||||
|
self.dokument_list.setColumnCount(4)
|
||||||
|
self.dokument_list.setRowCount(0)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setFamily("Arial")
|
||||||
|
font.setPointSize(8)
|
||||||
|
item.setFont(font)
|
||||||
|
self.dokument_list.setHorizontalHeaderItem(0, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setFamily("Arial")
|
||||||
|
font.setPointSize(8)
|
||||||
|
item.setFont(font)
|
||||||
|
self.dokument_list.setHorizontalHeaderItem(1, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setFamily("Arial")
|
||||||
|
font.setPointSize(8)
|
||||||
|
item.setFont(font)
|
||||||
|
self.dokument_list.setHorizontalHeaderItem(2, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.dokument_list.setHorizontalHeaderItem(3, item)
|
||||||
|
self.frame = QtWidgets.QFrame(self.app_group_box)
|
||||||
|
self.frame.setEnabled(True)
|
||||||
|
self.frame.setGeometry(QtCore.QRect(10, 30, 731, 151))
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())
|
||||||
|
self.frame.setSizePolicy(sizePolicy)
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.drpdwn_prof_title = QtWidgets.QComboBox(self.frame)
|
||||||
|
self.drpdwn_prof_title.setGeometry(QtCore.QRect(110, 50, 69, 22))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.drpdwn_prof_title.setFont(font)
|
||||||
|
self.drpdwn_prof_title.setEditable(True)
|
||||||
|
self.drpdwn_prof_title.setObjectName("drpdwn_prof_title")
|
||||||
|
self.label_5 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_5.setGeometry(QtCore.QRect(250, 20, 91, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_5.setFont(font)
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.sem_winter = QtWidgets.QRadioButton(self.frame)
|
||||||
|
self.sem_winter.setGeometry(QtCore.QRect(340, 50, 82, 17))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.sem_winter.setFont(font)
|
||||||
|
self.sem_winter.setObjectName("sem_winter")
|
||||||
|
self.label_4 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_4.setGeometry(QtCore.QRect(10, 80, 71, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_4.setFont(font)
|
||||||
|
self.label_4.setObjectName("label_4")
|
||||||
|
self.drpdwn_app_nr = QtWidgets.QComboBox(self.frame)
|
||||||
|
self.drpdwn_app_nr.setGeometry(QtCore.QRect(110, 20, 69, 22))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.drpdwn_app_nr.setFont(font)
|
||||||
|
self.drpdwn_app_nr.setEditable(True)
|
||||||
|
self.drpdwn_app_nr.setObjectName("drpdwn_app_nr")
|
||||||
|
self.app_name = QtWidgets.QLineEdit(self.frame)
|
||||||
|
self.app_name.setGeometry(QtCore.QRect(340, 20, 113, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.app_name.setFont(font)
|
||||||
|
self.app_name.setObjectName("app_name")
|
||||||
|
self.sem_sommer = QtWidgets.QRadioButton(self.frame)
|
||||||
|
self.sem_sommer.setGeometry(QtCore.QRect(340, 70, 82, 17))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.sem_sommer.setFont(font)
|
||||||
|
self.sem_sommer.setObjectName("sem_sommer")
|
||||||
|
self.label_3 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_3.setGeometry(QtCore.QRect(10, 50, 61, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_3.setFont(font)
|
||||||
|
self.label_3.setObjectName("label_3")
|
||||||
|
self.label_6 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_6.setGeometry(QtCore.QRect(270, 60, 51, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_6.setFont(font)
|
||||||
|
self.label_6.setObjectName("label_6")
|
||||||
|
self.sem_year = QtWidgets.QLineEdit(self.frame)
|
||||||
|
self.sem_year.setGeometry(QtCore.QRect(410, 60, 113, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.sem_year.setFont(font)
|
||||||
|
self.sem_year.setMaxLength(4)
|
||||||
|
self.sem_year.setObjectName("sem_year")
|
||||||
|
self.label_2 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(10, 20, 101, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_2.setFont(font)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.btn_apparat_save = QtWidgets.QPushButton(self.frame)
|
||||||
|
self.btn_apparat_save.setGeometry(QtCore.QRect(260, 120, 75, 23))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.btn_apparat_save.setFont(font)
|
||||||
|
self.btn_apparat_save.setObjectName("btn_apparat_save")
|
||||||
|
self.btn_apparat_apply = QtWidgets.QPushButton(self.frame)
|
||||||
|
self.btn_apparat_apply.setGeometry(QtCore.QRect(350, 120, 75, 23))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.btn_apparat_apply.setFont(font)
|
||||||
|
self.btn_apparat_apply.setObjectName("btn_apparat_apply")
|
||||||
|
self.check_eternal_app = QtWidgets.QCheckBox(self.frame)
|
||||||
|
self.check_eternal_app.setGeometry(QtCore.QRect(340, 90, 101, 17))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.check_eternal_app.setFont(font)
|
||||||
|
self.check_eternal_app.setObjectName("check_eternal_app")
|
||||||
|
self.label_8 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_8.setGeometry(QtCore.QRect(10, 110, 71, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_8.setFont(font)
|
||||||
|
self.label_8.setObjectName("label_8")
|
||||||
|
self.prof_mail = QtWidgets.QLineEdit(self.frame)
|
||||||
|
self.prof_mail.setGeometry(QtCore.QRect(110, 110, 121, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.prof_mail.setFont(font)
|
||||||
|
self.prof_mail.setPlaceholderText("")
|
||||||
|
self.prof_mail.setObjectName("prof_mail")
|
||||||
|
self.label_9 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_9.setGeometry(QtCore.QRect(10, 130, 71, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_9.setFont(font)
|
||||||
|
self.label_9.setObjectName("label_9")
|
||||||
|
self.prof_tel_nr = QtWidgets.QLineEdit(self.frame)
|
||||||
|
self.prof_tel_nr.setGeometry(QtCore.QRect(110, 130, 121, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.prof_tel_nr.setFont(font)
|
||||||
|
self.prof_tel_nr.setPlaceholderText("")
|
||||||
|
self.prof_tel_nr.setObjectName("prof_tel_nr")
|
||||||
|
self.label_10 = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_10.setGeometry(QtCore.QRect(470, 20, 51, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_10.setFont(font)
|
||||||
|
self.label_10.setObjectName("label_10")
|
||||||
|
self.app_fach = QtWidgets.QLineEdit(self.frame)
|
||||||
|
self.app_fach.setGeometry(QtCore.QRect(510, 20, 113, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.app_fach.setFont(font)
|
||||||
|
self.app_fach.setObjectName("app_fach")
|
||||||
|
self.drpdwn_prof_name = QtWidgets.QComboBox(self.frame)
|
||||||
|
self.drpdwn_prof_name.setGeometry(QtCore.QRect(110, 80, 121, 22))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(8)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.drpdwn_prof_name.setFont(font)
|
||||||
|
self.drpdwn_prof_name.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
|
||||||
|
self.drpdwn_prof_name.setEditable(True)
|
||||||
|
self.drpdwn_prof_name.setCurrentText("")
|
||||||
|
self.drpdwn_prof_name.setInsertPolicy(QtWidgets.QComboBox.InsertPolicy.InsertAlphabetically)
|
||||||
|
self.drpdwn_prof_name.setFrame(True)
|
||||||
|
self.drpdwn_prof_name.setObjectName("drpdwn_prof_name")
|
||||||
|
self.btn_add_document = QtWidgets.QPushButton(self.app_group_box)
|
||||||
|
self.btn_add_document.setGeometry(QtCore.QRect(1100, 40, 131, 25))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.btn_add_document.setFont(font)
|
||||||
|
self.btn_add_document.setObjectName("btn_add_document")
|
||||||
|
self.btn_open_document = QtWidgets.QPushButton(self.app_group_box)
|
||||||
|
self.btn_open_document.setGeometry(QtCore.QRect(1100, 80, 131, 25))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.btn_open_document.setFont(font)
|
||||||
|
self.btn_open_document.setObjectName("btn_open_document")
|
||||||
|
self.toolButton = QtWidgets.QToolButton(self.app_group_box)
|
||||||
|
self.toolButton.setGeometry(QtCore.QRect(1110, 110, 25, 19))
|
||||||
|
self.toolButton.setObjectName("toolButton")
|
||||||
|
self.label_7 = QtWidgets.QLabel(self.app_group_box)
|
||||||
|
self.label_7.setGeometry(QtCore.QRect(20, 200, 47, 21))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.label_7.setFont(font)
|
||||||
|
self.label_7.setObjectName("label_7")
|
||||||
|
self.search_media = QtWidgets.QLineEdit(self.app_group_box)
|
||||||
|
self.search_media.setGeometry(QtCore.QRect(80, 200, 211, 20))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(9)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.search_media.setFont(font)
|
||||||
|
self.search_media.setObjectName("search_media")
|
||||||
|
self.label = QtWidgets.QLabel(self.app_group_box)
|
||||||
|
self.label.setGeometry(QtCore.QRect(10, 180, 1259, 18))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(11)
|
||||||
|
font.setBold(True)
|
||||||
|
font.setWeight(75)
|
||||||
|
self.label.setFont(font)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.gridLayout_2.addWidget(self.app_group_box, 1, 0, 1, 1)
|
||||||
|
self.tableWidget_apparat_media = QtWidgets.QTableWidget(self.gridLayoutWidget_2)
|
||||||
|
self.tableWidget_apparat_media.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.tableWidget_apparat_media.setObjectName("tableWidget_apparat_media")
|
||||||
|
self.tableWidget_apparat_media.setColumnCount(4)
|
||||||
|
self.tableWidget_apparat_media.setRowCount(0)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(0, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(1, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(2, item)
|
||||||
|
item = QtWidgets.QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(3, item)
|
||||||
|
self.gridLayout_2.addWidget(self.tableWidget_apparat_media, 2, 0, 1, 1)
|
||||||
|
self.search = QtWidgets.QPushButton(self.tab)
|
||||||
|
self.search.setGeometry(QtCore.QRect(130, 640, 75, 20))
|
||||||
|
self.search.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.search.setObjectName("search")
|
||||||
|
self.add_medium = QtWidgets.QPushButton(self.tab)
|
||||||
|
self.add_medium.setGeometry(QtCore.QRect(10, 640, 111, 20))
|
||||||
|
self.add_medium.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.add_medium.setObjectName("add_medium")
|
||||||
|
self.tabWidget.addTab(self.tab, "")
|
||||||
|
self.tab_2 = QtWidgets.QWidget()
|
||||||
|
self.tab_2.setObjectName("tab_2")
|
||||||
|
self.tabWidget.addTab(self.tab_2, "")
|
||||||
|
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
|
||||||
|
self.horizontalLayout.addLayout(self.gridLayout)
|
||||||
|
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||||
|
self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 21))
|
||||||
|
self.menubar.setObjectName("menubar")
|
||||||
|
self.menuDatei = QtWidgets.QMenu(self.menubar)
|
||||||
|
self.menuDatei.setObjectName("menuDatei")
|
||||||
|
self.menuEinstellungen = QtWidgets.QMenu(self.menubar)
|
||||||
|
self.menuEinstellungen.setObjectName("menuEinstellungen")
|
||||||
|
MainWindow.setMenuBar(self.menubar)
|
||||||
|
self.statusbar = QtWidgets.QStatusBar(MainWindow)
|
||||||
|
self.statusbar.setObjectName("statusbar")
|
||||||
|
MainWindow.setStatusBar(self.statusbar)
|
||||||
|
self.menubar.addAction(self.menuDatei.menuAction())
|
||||||
|
self.menubar.addAction(self.menuEinstellungen.menuAction())
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
self.tabWidget.setCurrentIndex(0)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
MainWindow.setTabOrder(self.drpdwn_app_nr, self.drpdwn_prof_title)
|
||||||
|
MainWindow.setTabOrder(self.drpdwn_prof_title, self.drpdwn_prof_name)
|
||||||
|
MainWindow.setTabOrder(self.drpdwn_prof_name, self.prof_mail)
|
||||||
|
MainWindow.setTabOrder(self.prof_mail, self.prof_tel_nr)
|
||||||
|
MainWindow.setTabOrder(self.prof_tel_nr, self.app_name)
|
||||||
|
MainWindow.setTabOrder(self.app_name, self.app_fach)
|
||||||
|
MainWindow.setTabOrder(self.app_fach, self.sem_winter)
|
||||||
|
MainWindow.setTabOrder(self.sem_winter, self.sem_sommer)
|
||||||
|
MainWindow.setTabOrder(self.sem_sommer, self.sem_year)
|
||||||
|
MainWindow.setTabOrder(self.sem_year, self.check_eternal_app)
|
||||||
|
MainWindow.setTabOrder(self.check_eternal_app, self.btn_add_document)
|
||||||
|
MainWindow.setTabOrder(self.btn_add_document, self.btn_open_document)
|
||||||
|
MainWindow.setTabOrder(self.btn_open_document, self.toolButton)
|
||||||
|
MainWindow.setTabOrder(self.toolButton, self.btn_apparat_save)
|
||||||
|
MainWindow.setTabOrder(self.btn_apparat_save, self.btn_apparat_apply)
|
||||||
|
MainWindow.setTabOrder(self.btn_apparat_apply, self.search_media)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||||
|
self.load_app.setToolTip(_translate("MainWindow", "Load the Semesterapparate from the database"))
|
||||||
|
self.load_app.setText(_translate("MainWindow", "App. aufrufen"))
|
||||||
|
self.create_new_app.setText(_translate("MainWindow", "neu. App anlegen"))
|
||||||
|
item = self.tableWidget_apparate.horizontalHeaderItem(0)
|
||||||
|
item.setText(_translate("MainWindow", "AppNr"))
|
||||||
|
item = self.tableWidget_apparate.horizontalHeaderItem(1)
|
||||||
|
item.setText(_translate("MainWindow", "App Name"))
|
||||||
|
item = self.tableWidget_apparate.horizontalHeaderItem(2)
|
||||||
|
item.setText(_translate("MainWindow", "Professor"))
|
||||||
|
item = self.tableWidget_apparate.horizontalHeaderItem(3)
|
||||||
|
item.setText(_translate("MainWindow", "Dauerapparat"))
|
||||||
|
self.app_group_box.setTitle(_translate("MainWindow", "Apparatsdetails"))
|
||||||
|
item = self.dokument_list.horizontalHeaderItem(0)
|
||||||
|
item.setText(_translate("MainWindow", "Dokumentname"))
|
||||||
|
item = self.dokument_list.horizontalHeaderItem(1)
|
||||||
|
item.setText(_translate("MainWindow", "Dateityp"))
|
||||||
|
item = self.dokument_list.horizontalHeaderItem(2)
|
||||||
|
item.setText(_translate("MainWindow", "Neu?"))
|
||||||
|
item = self.dokument_list.horizontalHeaderItem(3)
|
||||||
|
item.setText(_translate("MainWindow", "path"))
|
||||||
|
self.label_5.setText(_translate("MainWindow", "Apparatsname"))
|
||||||
|
self.sem_winter.setText(_translate("MainWindow", "Winter"))
|
||||||
|
self.label_4.setText(_translate("MainWindow", "Prof. Name"))
|
||||||
|
self.sem_sommer.setText(_translate("MainWindow", "Sommer"))
|
||||||
|
self.label_3.setText(_translate("MainWindow", "Prof. Titel"))
|
||||||
|
self.label_6.setText(_translate("MainWindow", "Semester"))
|
||||||
|
self.sem_year.setPlaceholderText(_translate("MainWindow", "2023"))
|
||||||
|
self.label_2.setText(_translate("MainWindow", "Apparatsnummer"))
|
||||||
|
self.btn_apparat_save.setText(_translate("MainWindow", "Speichern"))
|
||||||
|
self.btn_apparat_apply.setText(_translate("MainWindow", "Aktualisieren"))
|
||||||
|
self.check_eternal_app.setText(_translate("MainWindow", "Dauerapparat"))
|
||||||
|
self.label_8.setText(_translate("MainWindow", "Mail"))
|
||||||
|
self.label_9.setText(_translate("MainWindow", "Tel"))
|
||||||
|
self.label_10.setText(_translate("MainWindow", "Fach"))
|
||||||
|
self.btn_add_document.setText(_translate("MainWindow", "Dokument hinzufügen"))
|
||||||
|
self.btn_open_document.setText(_translate("MainWindow", "Dokument öffnen"))
|
||||||
|
self.toolButton.setText(_translate("MainWindow", "..."))
|
||||||
|
self.label_7.setText(_translate("MainWindow", "Suche"))
|
||||||
|
self.search_media.setPlaceholderText(_translate("MainWindow", "Buch oder Signatur"))
|
||||||
|
self.label.setText(_translate("MainWindow", "Medienliste"))
|
||||||
|
item = self.tableWidget_apparat_media.horizontalHeaderItem(0)
|
||||||
|
item.setText(_translate("MainWindow", "Buchtitel"))
|
||||||
|
item = self.tableWidget_apparat_media.horizontalHeaderItem(1)
|
||||||
|
item.setText(_translate("MainWindow", "Autor"))
|
||||||
|
item = self.tableWidget_apparat_media.horizontalHeaderItem(2)
|
||||||
|
item.setText(_translate("MainWindow", "Auflage"))
|
||||||
|
item = self.tableWidget_apparat_media.horizontalHeaderItem(3)
|
||||||
|
item.setText(_translate("MainWindow", "Signatur"))
|
||||||
|
self.search.setToolTip(_translate("MainWindow", "Sucht im Katalog nach allen Medien, die die Apparatsnummer enthalten"))
|
||||||
|
self.search.setText(_translate("MainWindow", "Suche"))
|
||||||
|
self.add_medium.setText(_translate("MainWindow", "Medium hinzufügen"))
|
||||||
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1"))
|
||||||
|
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2"))
|
||||||
|
self.menuDatei.setTitle(_translate("MainWindow", "Datei"))
|
||||||
|
self.menuEinstellungen.setTitle(_translate("MainWindow", "Einstellungen"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
MainWindow = QtWidgets.QMainWindow()
|
||||||
|
ui = Ui_MainWindow()
|
||||||
|
ui.setupUi(MainWindow)
|
||||||
|
MainWindow.show()
|
||||||
|
sys.exit(app.exec())
|
||||||
234
src/ui/semesterapparat_ui.ts
Normal file
234
src/ui/semesterapparat_ui.ts
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE TS>
|
||||||
|
<TS version="2.1">
|
||||||
|
<context>
|
||||||
|
<name>MainWindow</name>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="23"/>
|
||||||
|
<source>MainWindow</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="62"/>
|
||||||
|
<source>Tab 1</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="97"/>
|
||||||
|
<source>Load the Semesterapparate from the database</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="100"/>
|
||||||
|
<source>App. aufrufen</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="110"/>
|
||||||
|
<source>neu. App anlegen</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="139"/>
|
||||||
|
<source>AppNr</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="144"/>
|
||||||
|
<source>App Name</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="149"/>
|
||||||
|
<source>Professor</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="154"/>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="584"/>
|
||||||
|
<source>Dauerapparat</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="159"/>
|
||||||
|
<source>KontoNr</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="254"/>
|
||||||
|
<source>Dateityp</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="265"/>
|
||||||
|
<source>Neu?</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="276"/>
|
||||||
|
<source>path</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="604"/>
|
||||||
|
<source>Mail</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="650"/>
|
||||||
|
<source>Tel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="693"/>
|
||||||
|
<source>Fach</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="762"/>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="782"/>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="802"/>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="822"/>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="842"/>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="862"/>
|
||||||
|
<source>*</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="975"/>
|
||||||
|
<source>Buchtitel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="980"/>
|
||||||
|
<source>Autor</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="985"/>
|
||||||
|
<source>Auflage</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="990"/>
|
||||||
|
<source>Signatur</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="1073"/>
|
||||||
|
<source>Beenden</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="213"/>
|
||||||
|
<source>Apparatsdetails</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="243"/>
|
||||||
|
<source>Dokumentname</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="341"/>
|
||||||
|
<source>Apparatsname</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="361"/>
|
||||||
|
<source>Winter</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="381"/>
|
||||||
|
<source>Prof. Name</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="441"/>
|
||||||
|
<source>Sommer</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="461"/>
|
||||||
|
<source>Prof. Titel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="481"/>
|
||||||
|
<source>Semester</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="504"/>
|
||||||
|
<source>2023</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="524"/>
|
||||||
|
<source>Apparatsnummer</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="544"/>
|
||||||
|
<source>Speichern</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="564"/>
|
||||||
|
<source>Aktualisieren</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="883"/>
|
||||||
|
<source>Dokument hinzufügen</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="903"/>
|
||||||
|
<source>Dokument öffnen</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="923"/>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="1013"/>
|
||||||
|
<source>Suche</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="943"/>
|
||||||
|
<source>Buch oder Signatur</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="963"/>
|
||||||
|
<source>Medienliste</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="1010"/>
|
||||||
|
<source>Sucht im Katalog nach allen Medien, die die Apparatsnummer enthalten</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="1029"/>
|
||||||
|
<source>Medium hinzufügen</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="1035"/>
|
||||||
|
<source>Tab 2</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="1058"/>
|
||||||
|
<source>Datei</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="semesterapparat_ui.ui" line="1064"/>
|
||||||
|
<source>Einstellungen</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
|
</TS>
|
||||||
2890
src/ui/semesterapparat_ui.ui
Normal file
2890
src/ui/semesterapparat_ui.ui
Normal file
File diff suppressed because it is too large
Load Diff
1437
src/ui/semesterapparat_ui_ui.py
Normal file
1437
src/ui/semesterapparat_ui_ui.py
Normal file
File diff suppressed because it is too large
Load Diff
149
src/ui/setupwizard.ui
Normal file
149
src/ui/setupwizard.ui
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Wizard</class>
|
||||||
|
<widget class="QWizard" name="Wizard">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>640</width>
|
||||||
|
<height>480</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>640</width>
|
||||||
|
<height>480</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Wizard</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWizardPage" name="wizardPage1">
|
||||||
|
<widget class="QTextBrowser" name="textBrowser">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>200</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>256</width>
|
||||||
|
<height>192</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="html">
|
||||||
|
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||||
|
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||||
|
p, li { white-space: pre-wrap; }
|
||||||
|
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
||||||
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Setup für das Semesterapparatsprogram.</p>
|
||||||
|
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
||||||
|
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Im Anschluss werden wichtige Einstellungen gesetzt, welche auch im späteren Verlauf verändert werden können.</p>
|
||||||
|
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWizardPage" name="wizardPage2">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Grundeinstellungen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>71</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Opens the downloaded files with the default applications set in the OS</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Default Apps</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox" name="default_apps">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>100</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>70</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>61</width>
|
||||||
|
<height>16</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Path where the downloaded files are stored. Defaults to ~/Desktop/SemapFiles</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save Path</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QFrame" name="custom_applications">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>280</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>331</width>
|
||||||
|
<height>361</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="save_path">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>80</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>113</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>~/Desktop/SemapFiles</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolButton" name="btn_save_path_select">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>200</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>25</width>
|
||||||
|
<height>19</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
90
src/ui/setupwizard_ui.py
Normal file
90
src/ui/setupwizard_ui.py
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
## Form generated from reading UI file 'setupwizard.ui'
|
||||||
|
##
|
||||||
|
## Created by: Qt User Interface Compiler version 6.5.2
|
||||||
|
##
|
||||||
|
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
|
||||||
|
QMetaObject, QObject, QPoint, QRect,
|
||||||
|
QSize, QTime, QUrl, Qt)
|
||||||
|
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
|
||||||
|
QFont, QFontDatabase, QGradient, QIcon,
|
||||||
|
QImage, QKeySequence, QLinearGradient, QPainter,
|
||||||
|
QPalette, QPixmap, QRadialGradient, QTransform)
|
||||||
|
from PySide6.QtWidgets import (QApplication, QCheckBox, QFrame, QLabel,
|
||||||
|
QLineEdit, QSizePolicy, QTextBrowser, QToolButton,
|
||||||
|
QWidget, QWizard, QWizardPage)
|
||||||
|
|
||||||
|
class Ui_Wizard(object):
|
||||||
|
def setupUi(self, Wizard):
|
||||||
|
if not Wizard.objectName():
|
||||||
|
Wizard.setObjectName(u"Wizard")
|
||||||
|
Wizard.resize(640, 480)
|
||||||
|
Wizard.setMaximumSize(QSize(640, 480))
|
||||||
|
self.wizardPage1 = QWizardPage()
|
||||||
|
self.wizardPage1.setObjectName(u"wizardPage1")
|
||||||
|
self.textBrowser = QTextBrowser(self.wizardPage1)
|
||||||
|
self.textBrowser.setObjectName(u"textBrowser")
|
||||||
|
self.textBrowser.setGeometry(QRect(200, 10, 256, 192))
|
||||||
|
Wizard.addPage(self.wizardPage1)
|
||||||
|
self.wizardPage2 = QWizardPage()
|
||||||
|
self.wizardPage2.setObjectName(u"wizardPage2")
|
||||||
|
self.label = QLabel(self.wizardPage2)
|
||||||
|
self.label.setObjectName(u"label")
|
||||||
|
self.label.setGeometry(QRect(10, 0, 131, 16))
|
||||||
|
self.label_2 = QLabel(self.wizardPage2)
|
||||||
|
self.label_2.setObjectName(u"label_2")
|
||||||
|
self.label_2.setGeometry(QRect(10, 40, 71, 16))
|
||||||
|
self.default_apps = QCheckBox(self.wizardPage2)
|
||||||
|
self.default_apps.setObjectName(u"default_apps")
|
||||||
|
self.default_apps.setGeometry(QRect(100, 40, 70, 17))
|
||||||
|
self.label_3 = QLabel(self.wizardPage2)
|
||||||
|
self.label_3.setObjectName(u"label_3")
|
||||||
|
self.label_3.setGeometry(QRect(10, 70, 61, 16))
|
||||||
|
self.custom_applications = QFrame(self.wizardPage2)
|
||||||
|
self.custom_applications.setObjectName(u"custom_applications")
|
||||||
|
self.custom_applications.setGeometry(QRect(280, 10, 331, 361))
|
||||||
|
self.custom_applications.setFrameShape(QFrame.StyledPanel)
|
||||||
|
self.custom_applications.setFrameShadow(QFrame.Raised)
|
||||||
|
self.save_path = QLineEdit(self.wizardPage2)
|
||||||
|
self.save_path.setObjectName(u"save_path")
|
||||||
|
self.save_path.setGeometry(QRect(80, 70, 113, 20))
|
||||||
|
self.btn_save_path_select = QToolButton(self.wizardPage2)
|
||||||
|
self.btn_save_path_select.setObjectName(u"btn_save_path_select")
|
||||||
|
self.btn_save_path_select.setGeometry(QRect(200, 70, 25, 19))
|
||||||
|
Wizard.addPage(self.wizardPage2)
|
||||||
|
|
||||||
|
self.retranslateUi(Wizard)
|
||||||
|
|
||||||
|
QMetaObject.connectSlotsByName(Wizard)
|
||||||
|
# setupUi
|
||||||
|
|
||||||
|
def retranslateUi(self, Wizard):
|
||||||
|
Wizard.setWindowTitle(QCoreApplication.translate("Wizard", u"Wizard", None))
|
||||||
|
self.textBrowser.setHtml(QCoreApplication.translate("Wizard", u"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
|
||||||
|
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
|
||||||
|
"p, li { white-space: pre-wrap; }\n"
|
||||||
|
"</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
|
||||||
|
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Setup f\u00fcr das Semesterapparatsprogram.</p>\n"
|
||||||
|
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
|
||||||
|
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Im Anschluss werden wichtige Einstellungen gesetzt, welche auch im sp\u00e4teren Verlauf ver\u00e4ndert werden k\u00f6nnen.</p>\n"
|
||||||
|
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margi"
|
||||||
|
"n-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>", None))
|
||||||
|
self.label.setText(QCoreApplication.translate("Wizard", u"Grundeinstellungen", None))
|
||||||
|
#if QT_CONFIG(tooltip)
|
||||||
|
self.label_2.setToolTip(QCoreApplication.translate("Wizard", u"Opens the downloaded files with the default applications set in the OS", None))
|
||||||
|
#endif // QT_CONFIG(tooltip)
|
||||||
|
self.label_2.setText(QCoreApplication.translate("Wizard", u"Default Apps", None))
|
||||||
|
self.default_apps.setText("")
|
||||||
|
#if QT_CONFIG(tooltip)
|
||||||
|
self.label_3.setToolTip(QCoreApplication.translate("Wizard", u"Path where the downloaded files are stored. Defaults to ~/Desktop/SemapFiles", None))
|
||||||
|
#endif // QT_CONFIG(tooltip)
|
||||||
|
self.label_3.setText(QCoreApplication.translate("Wizard", u"Save Path", None))
|
||||||
|
self.save_path.setPlaceholderText(QCoreApplication.translate("Wizard", u"~/Desktop/SemapFiles", None))
|
||||||
|
self.btn_save_path_select.setText(QCoreApplication.translate("Wizard", u"...", None))
|
||||||
|
# retranslateUi
|
||||||
|
|
||||||
2146
src/ui/sounds/semesterapparat_ui.ui
Normal file
2146
src/ui/sounds/semesterapparat_ui.ui
Normal file
File diff suppressed because it is too large
Load Diff
1075
src/ui/sounds/semesterapparat_ui_ui.py
Normal file
1075
src/ui/sounds/semesterapparat_ui_ui.py
Normal file
File diff suppressed because it is too large
Load Diff
692
src/ui/untitled.ui
Normal file
692
src/ui/untitled.ui
Normal file
@@ -0,0 +1,692 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1280</width>
|
||||||
|
<height>720</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralwidget">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="verticalLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1271</width>
|
||||||
|
<height>671</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="tab">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Tab 1</string>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QWidget" name="horizontalLayoutWidget_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1261</width>
|
||||||
|
<height>161</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="load_app">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Load the Semesterapparate from the database</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>App. aufrufen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="create_new_app">
|
||||||
|
<property name="text">
|
||||||
|
<string>neu. App anlegen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QTableWidget" name="tableWidget_apparate">
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>AppNr</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>App Name</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Professor</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dauerapparat</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>160</y>
|
||||||
|
<width>1261</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="gridLayoutWidget_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>180</y>
|
||||||
|
<width>1261</width>
|
||||||
|
<height>461</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QTableWidget" name="tableWidget_apparat_media">
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Buchtitel</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Autor</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Auflage</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Signatur</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QGroupBox" name="app_group_box">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Apparatsdetails</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QTableWidget" name="dokument_list">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>820</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>256</width>
|
||||||
|
<height>192</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dokumentname</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Typ</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>731</width>
|
||||||
|
<height>151</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QComboBox" name="drpdwn_prof_title">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>69</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>250</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>91</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Apparatsname</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>121</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Nachname, Vorname</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="sem_winter">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>340</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>82</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Winter</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>71</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Prof. Name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QComboBox" name="drpdwn_app_nr">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>110</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>69</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="app_name">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>340</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>113</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="sem_sommer">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>340</x>
|
||||||
|
<y>70</y>
|
||||||
|
<width>82</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Sommer</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>50</y>
|
||||||
|
<width>61</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Prof. Titel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>270</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>51</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Semester</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="sem_year">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>410</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>113</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>2023</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>20</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Apparatsnummer</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="btn_apparat_save">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>260</x>
|
||||||
|
<y>120</y>
|
||||||
|
<width>75</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Speichern</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="btn_apparat_apply">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>350</x>
|
||||||
|
<y>120</y>
|
||||||
|
<width>75</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Aktualisieren</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QCheckBox" name="checkBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>340</x>
|
||||||
|
<y>90</y>
|
||||||
|
<width>101</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dauerapparat</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="btn_add_document">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>1100</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>25</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dokument hinzufügen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="btn_open_document">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>1100</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>131</width>
|
||||||
|
<height>25</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Dokument öffnen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolButton" name="toolButton">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>1110</x>
|
||||||
|
<y>110</y>
|
||||||
|
<width>25</width>
|
||||||
|
<height>19</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>20</x>
|
||||||
|
<y>200</y>
|
||||||
|
<width>47</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Suche</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_2">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>80</x>
|
||||||
|
<y>200</y>
|
||||||
|
<width>211</width>
|
||||||
|
<height>20</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>9</pointsize>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Buch oder Signatur</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>180</y>
|
||||||
|
<width>1259</width>
|
||||||
|
<height>18</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>11</pointsize>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Medienliste</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_2">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Tab 2</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menubar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>1280</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<widget class="QMenu" name="menuDatei">
|
||||||
|
<property name="title">
|
||||||
|
<string>Datei</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenu" name="menuEinstellungen">
|
||||||
|
<property name="title">
|
||||||
|
<string>Einstellungen</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<addaction name="menuDatei"/>
|
||||||
|
<addaction name="menuEinstellungen"/>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusbar"/>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
476
src/ui/untitled_ui.py
Normal file
476
src/ui/untitled_ui.py
Normal file
@@ -0,0 +1,476 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Form generated from reading UI file 'untitled.ui'
|
||||||
|
##
|
||||||
|
# Created by: Qt User Interface Compiler version 6.5.2
|
||||||
|
##
|
||||||
|
# WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
from PySide6.QtCore import (
|
||||||
|
QCoreApplication,
|
||||||
|
QDate,
|
||||||
|
QDateTime,
|
||||||
|
QLocale,
|
||||||
|
QMetaObject,
|
||||||
|
QObject,
|
||||||
|
QPoint,
|
||||||
|
QRect,
|
||||||
|
QSize,
|
||||||
|
Qt,
|
||||||
|
QTime,
|
||||||
|
QUrl,
|
||||||
|
)
|
||||||
|
from PySide6.QtGui import (
|
||||||
|
QAction,
|
||||||
|
QBrush,
|
||||||
|
QColor,
|
||||||
|
QConicalGradient,
|
||||||
|
QCursor,
|
||||||
|
QFont,
|
||||||
|
QFontDatabase,
|
||||||
|
QGradient,
|
||||||
|
QIcon,
|
||||||
|
QImage,
|
||||||
|
QKeySequence,
|
||||||
|
QLinearGradient,
|
||||||
|
QPainter,
|
||||||
|
QPalette,
|
||||||
|
QPixmap,
|
||||||
|
QRadialGradient,
|
||||||
|
QTransform,
|
||||||
|
)
|
||||||
|
from PySide6.QtWidgets import (
|
||||||
|
QApplication,
|
||||||
|
QCheckBox,
|
||||||
|
QComboBox,
|
||||||
|
QFormLayout,
|
||||||
|
QFrame,
|
||||||
|
QGridLayout,
|
||||||
|
QGroupBox,
|
||||||
|
QHBoxLayout,
|
||||||
|
QHeaderView,
|
||||||
|
QLabel,
|
||||||
|
QLineEdit,
|
||||||
|
QMainWindow,
|
||||||
|
QMenu,
|
||||||
|
QMenuBar,
|
||||||
|
QPushButton,
|
||||||
|
QRadioButton,
|
||||||
|
QSizePolicy,
|
||||||
|
QSpacerItem,
|
||||||
|
QStatusBar,
|
||||||
|
QTableWidget,
|
||||||
|
QTableWidgetItem,
|
||||||
|
QTabWidget,
|
||||||
|
QToolButton,
|
||||||
|
QVBoxLayout,
|
||||||
|
QWidget,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
if not MainWindow.objectName():
|
||||||
|
MainWindow.setObjectName("MainWindow")
|
||||||
|
MainWindow.resize(1280, 720)
|
||||||
|
sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
|
||||||
|
MainWindow.setSizePolicy(sizePolicy)
|
||||||
|
self.centralwidget = QWidget(MainWindow)
|
||||||
|
self.centralwidget.setObjectName("centralwidget")
|
||||||
|
sizePolicy1 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
||||||
|
sizePolicy1.setHorizontalStretch(0)
|
||||||
|
sizePolicy1.setVerticalStretch(0)
|
||||||
|
sizePolicy1.setHeightForWidth(
|
||||||
|
self.centralwidget.sizePolicy().hasHeightForWidth()
|
||||||
|
)
|
||||||
|
self.centralwidget.setSizePolicy(sizePolicy1)
|
||||||
|
self.verticalLayoutWidget = QWidget(self.centralwidget)
|
||||||
|
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
|
||||||
|
self.verticalLayoutWidget.setGeometry(QRect(0, 0, 1271, 671))
|
||||||
|
self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget)
|
||||||
|
self.verticalLayout.setObjectName("verticalLayout")
|
||||||
|
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.horizontalLayout = QHBoxLayout()
|
||||||
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
|
self.gridLayout = QGridLayout()
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.tabWidget = QTabWidget(self.verticalLayoutWidget)
|
||||||
|
self.tabWidget.setObjectName("tabWidget")
|
||||||
|
self.tab = QWidget()
|
||||||
|
self.tab.setObjectName("tab")
|
||||||
|
sizePolicy2 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
|
||||||
|
sizePolicy2.setHorizontalStretch(0)
|
||||||
|
sizePolicy2.setVerticalStretch(0)
|
||||||
|
sizePolicy2.setHeightForWidth(self.tab.sizePolicy().hasHeightForWidth())
|
||||||
|
self.tab.setSizePolicy(sizePolicy2)
|
||||||
|
self.horizontalLayoutWidget_2 = QWidget(self.tab)
|
||||||
|
self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
|
||||||
|
self.horizontalLayoutWidget_2.setGeometry(QRect(0, 0, 1261, 161))
|
||||||
|
self.horizontalLayout_2 = QHBoxLayout(self.horizontalLayoutWidget_2)
|
||||||
|
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||||
|
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.formLayout = QFormLayout()
|
||||||
|
self.formLayout.setObjectName("formLayout")
|
||||||
|
self.verticalLayout_2 = QVBoxLayout()
|
||||||
|
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||||
|
self.verticalSpacer = QSpacerItem(
|
||||||
|
20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding
|
||||||
|
)
|
||||||
|
|
||||||
|
self.verticalLayout_2.addItem(self.verticalSpacer)
|
||||||
|
|
||||||
|
self.load_app = QPushButton(self.horizontalLayoutWidget_2)
|
||||||
|
self.load_app.setObjectName("load_app")
|
||||||
|
|
||||||
|
self.verticalLayout_2.addWidget(self.load_app)
|
||||||
|
|
||||||
|
self.create_new_app = QPushButton(self.horizontalLayoutWidget_2)
|
||||||
|
self.create_new_app.setObjectName("create_new_app")
|
||||||
|
|
||||||
|
self.verticalLayout_2.addWidget(self.create_new_app)
|
||||||
|
|
||||||
|
self.verticalSpacer_2 = QSpacerItem(
|
||||||
|
20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding
|
||||||
|
)
|
||||||
|
|
||||||
|
self.verticalLayout_2.addItem(self.verticalSpacer_2)
|
||||||
|
|
||||||
|
self.formLayout.setLayout(0, QFormLayout.LabelRole, self.verticalLayout_2)
|
||||||
|
|
||||||
|
self.tableWidget_apparate = QTableWidget(self.horizontalLayoutWidget_2)
|
||||||
|
if self.tableWidget_apparate.columnCount() < 4:
|
||||||
|
self.tableWidget_apparate.setColumnCount(4)
|
||||||
|
__qtablewidgetitem = QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(0, __qtablewidgetitem)
|
||||||
|
__qtablewidgetitem1 = QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(1, __qtablewidgetitem1)
|
||||||
|
__qtablewidgetitem2 = QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(2, __qtablewidgetitem2)
|
||||||
|
__qtablewidgetitem3 = QTableWidgetItem()
|
||||||
|
self.tableWidget_apparate.setHorizontalHeaderItem(3, __qtablewidgetitem3)
|
||||||
|
self.tableWidget_apparate.setObjectName("tableWidget_apparate")
|
||||||
|
|
||||||
|
self.formLayout.setWidget(0, QFormLayout.FieldRole, self.tableWidget_apparate)
|
||||||
|
|
||||||
|
self.horizontalLayout_3 = QHBoxLayout()
|
||||||
|
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||||
|
|
||||||
|
self.formLayout.setLayout(2, QFormLayout.LabelRole, self.horizontalLayout_3)
|
||||||
|
|
||||||
|
self.horizontalLayout_4 = QHBoxLayout()
|
||||||
|
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
|
||||||
|
|
||||||
|
self.formLayout.setLayout(1, QFormLayout.FieldRole, self.horizontalLayout_4)
|
||||||
|
|
||||||
|
self.horizontalLayout_2.addLayout(self.formLayout)
|
||||||
|
|
||||||
|
self.line = QFrame(self.tab)
|
||||||
|
self.line.setObjectName("line")
|
||||||
|
self.line.setGeometry(QRect(0, 160, 1261, 21))
|
||||||
|
self.line.setFrameShape(QFrame.HLine)
|
||||||
|
self.line.setFrameShadow(QFrame.Sunken)
|
||||||
|
self.gridLayoutWidget_2 = QWidget(self.tab)
|
||||||
|
self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
|
||||||
|
self.gridLayoutWidget_2.setGeometry(QRect(0, 180, 1261, 461))
|
||||||
|
self.gridLayout_2 = QGridLayout(self.gridLayoutWidget_2)
|
||||||
|
self.gridLayout_2.setObjectName("gridLayout_2")
|
||||||
|
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.tableWidget_apparat_media = QTableWidget(self.gridLayoutWidget_2)
|
||||||
|
if self.tableWidget_apparat_media.columnCount() < 4:
|
||||||
|
self.tableWidget_apparat_media.setColumnCount(4)
|
||||||
|
__qtablewidgetitem4 = QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(0, __qtablewidgetitem4)
|
||||||
|
__qtablewidgetitem5 = QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(1, __qtablewidgetitem5)
|
||||||
|
__qtablewidgetitem6 = QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(2, __qtablewidgetitem6)
|
||||||
|
__qtablewidgetitem7 = QTableWidgetItem()
|
||||||
|
self.tableWidget_apparat_media.setHorizontalHeaderItem(3, __qtablewidgetitem7)
|
||||||
|
self.tableWidget_apparat_media.setObjectName("tableWidget_apparat_media")
|
||||||
|
|
||||||
|
self.gridLayout_2.addWidget(self.tableWidget_apparat_media, 2, 0, 1, 1)
|
||||||
|
|
||||||
|
self.app_group_box = QGroupBox(self.gridLayoutWidget_2)
|
||||||
|
self.app_group_box.setObjectName("app_group_box")
|
||||||
|
sizePolicy3 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
|
||||||
|
sizePolicy3.setHorizontalStretch(0)
|
||||||
|
sizePolicy3.setVerticalStretch(0)
|
||||||
|
sizePolicy3.setHeightForWidth(
|
||||||
|
self.app_group_box.sizePolicy().hasHeightForWidth()
|
||||||
|
)
|
||||||
|
self.app_group_box.setSizePolicy(sizePolicy3)
|
||||||
|
font = QFont()
|
||||||
|
font.setPointSize(12)
|
||||||
|
font.setBold(True)
|
||||||
|
self.app_group_box.setFont(font)
|
||||||
|
self.app_group_box.setAlignment(
|
||||||
|
Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter
|
||||||
|
)
|
||||||
|
self.app_group_box.setCheckable(False)
|
||||||
|
self.dokument_list = QTableWidget(self.app_group_box)
|
||||||
|
if self.dokument_list.columnCount() < 2:
|
||||||
|
self.dokument_list.setColumnCount(2)
|
||||||
|
__qtablewidgetitem8 = QTableWidgetItem()
|
||||||
|
self.dokument_list.setHorizontalHeaderItem(0, __qtablewidgetitem8)
|
||||||
|
__qtablewidgetitem9 = QTableWidgetItem()
|
||||||
|
self.dokument_list.setHorizontalHeaderItem(1, __qtablewidgetitem9)
|
||||||
|
self.dokument_list.setObjectName("dokument_list")
|
||||||
|
self.dokument_list.setGeometry(QRect(820, 20, 256, 192))
|
||||||
|
self.frame = QFrame(self.app_group_box)
|
||||||
|
self.frame.setObjectName("frame")
|
||||||
|
self.frame.setGeometry(QRect(10, 30, 731, 151))
|
||||||
|
sizePolicy1.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())
|
||||||
|
self.frame.setSizePolicy(sizePolicy1)
|
||||||
|
self.frame.setFrameShape(QFrame.StyledPanel)
|
||||||
|
self.frame.setFrameShadow(QFrame.Raised)
|
||||||
|
self.drpdwn_prof_title = QComboBox(self.frame)
|
||||||
|
self.drpdwn_prof_title.setObjectName("drpdwn_prof_title")
|
||||||
|
self.drpdwn_prof_title.setGeometry(QRect(110, 50, 69, 22))
|
||||||
|
self.label_5 = QLabel(self.frame)
|
||||||
|
self.label_5.setObjectName("label_5")
|
||||||
|
self.label_5.setGeometry(QRect(250, 20, 91, 21))
|
||||||
|
font1 = QFont()
|
||||||
|
font1.setPointSize(9)
|
||||||
|
font1.setBold(False)
|
||||||
|
self.label_5.setFont(font1)
|
||||||
|
self.lineEdit = QLineEdit(self.frame)
|
||||||
|
self.lineEdit.setObjectName("lineEdit")
|
||||||
|
self.lineEdit.setGeometry(QRect(110, 80, 121, 20))
|
||||||
|
self.lineEdit.setFont(font1)
|
||||||
|
self.sem_winter = QRadioButton(self.frame)
|
||||||
|
self.sem_winter.setObjectName("sem_winter")
|
||||||
|
self.sem_winter.setGeometry(QRect(340, 50, 82, 17))
|
||||||
|
self.sem_winter.setFont(font1)
|
||||||
|
self.label_4 = QLabel(self.frame)
|
||||||
|
self.label_4.setObjectName("label_4")
|
||||||
|
self.label_4.setGeometry(QRect(10, 80, 71, 21))
|
||||||
|
self.label_4.setFont(font1)
|
||||||
|
self.drpdwn_app_nr = QComboBox(self.frame)
|
||||||
|
self.drpdwn_app_nr.setObjectName("drpdwn_app_nr")
|
||||||
|
self.drpdwn_app_nr.setGeometry(QRect(110, 20, 69, 22))
|
||||||
|
self.app_name = QLineEdit(self.frame)
|
||||||
|
self.app_name.setObjectName("app_name")
|
||||||
|
self.app_name.setGeometry(QRect(340, 20, 113, 20))
|
||||||
|
self.sem_sommer = QRadioButton(self.frame)
|
||||||
|
self.sem_sommer.setObjectName("sem_sommer")
|
||||||
|
self.sem_sommer.setGeometry(QRect(340, 70, 82, 17))
|
||||||
|
self.sem_sommer.setFont(font1)
|
||||||
|
self.label_3 = QLabel(self.frame)
|
||||||
|
self.label_3.setObjectName("label_3")
|
||||||
|
self.label_3.setGeometry(QRect(10, 50, 61, 20))
|
||||||
|
self.label_3.setFont(font1)
|
||||||
|
self.label_6 = QLabel(self.frame)
|
||||||
|
self.label_6.setObjectName("label_6")
|
||||||
|
self.label_6.setGeometry(QRect(270, 60, 51, 21))
|
||||||
|
self.label_6.setFont(font1)
|
||||||
|
self.sem_year = QLineEdit(self.frame)
|
||||||
|
self.sem_year.setObjectName("sem_year")
|
||||||
|
self.sem_year.setGeometry(QRect(410, 60, 113, 20))
|
||||||
|
self.sem_year.setFont(font1)
|
||||||
|
self.label_2 = QLabel(self.frame)
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.label_2.setGeometry(QRect(10, 20, 101, 21))
|
||||||
|
self.label_2.setFont(font1)
|
||||||
|
self.btn_apparat_save = QPushButton(self.frame)
|
||||||
|
self.btn_apparat_save.setObjectName("btn_apparat_save")
|
||||||
|
self.btn_apparat_save.setGeometry(QRect(260, 120, 75, 23))
|
||||||
|
self.btn_apparat_save.setFont(font1)
|
||||||
|
self.btn_apparat_apply = QPushButton(self.frame)
|
||||||
|
self.btn_apparat_apply.setObjectName("btn_apparat_apply")
|
||||||
|
self.btn_apparat_apply.setGeometry(QRect(350, 120, 75, 23))
|
||||||
|
self.btn_apparat_apply.setFont(font1)
|
||||||
|
self.checkBox = QCheckBox(self.frame)
|
||||||
|
self.checkBox.setObjectName("checkBox")
|
||||||
|
self.checkBox.setGeometry(QRect(340, 90, 101, 17))
|
||||||
|
self.checkBox.setFont(font1)
|
||||||
|
self.btn_add_document = QPushButton(self.app_group_box)
|
||||||
|
self.btn_add_document.setObjectName("btn_add_document")
|
||||||
|
self.btn_add_document.setGeometry(QRect(1100, 40, 131, 25))
|
||||||
|
self.btn_add_document.setFont(font1)
|
||||||
|
self.btn_open_document = QPushButton(self.app_group_box)
|
||||||
|
self.btn_open_document.setObjectName("btn_open_document")
|
||||||
|
self.btn_open_document.setGeometry(QRect(1100, 80, 131, 25))
|
||||||
|
self.btn_open_document.setFont(font1)
|
||||||
|
self.toolButton = QToolButton(self.app_group_box)
|
||||||
|
self.toolButton.setObjectName("toolButton")
|
||||||
|
self.toolButton.setGeometry(QRect(1110, 110, 25, 19))
|
||||||
|
self.label_7 = QLabel(self.app_group_box)
|
||||||
|
self.label_7.setObjectName("label_7")
|
||||||
|
self.label_7.setGeometry(QRect(20, 200, 47, 21))
|
||||||
|
self.label_7.setFont(font1)
|
||||||
|
self.lineEdit_2 = QLineEdit(self.app_group_box)
|
||||||
|
self.lineEdit_2.setObjectName("lineEdit_2")
|
||||||
|
self.lineEdit_2.setGeometry(QRect(80, 200, 211, 20))
|
||||||
|
self.lineEdit_2.setFont(font1)
|
||||||
|
self.label = QLabel(self.app_group_box)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.label.setGeometry(QRect(0, 180, 1259, 18))
|
||||||
|
font2 = QFont()
|
||||||
|
font2.setPointSize(11)
|
||||||
|
font2.setBold(True)
|
||||||
|
self.label.setFont(font2)
|
||||||
|
|
||||||
|
self.gridLayout_2.addWidget(self.app_group_box, 1, 0, 1, 1)
|
||||||
|
|
||||||
|
self.tabWidget.addTab(self.tab, "")
|
||||||
|
self.tab_2 = QWidget()
|
||||||
|
self.tab_2.setObjectName("tab_2")
|
||||||
|
self.tabWidget.addTab(self.tab_2, "")
|
||||||
|
|
||||||
|
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
|
||||||
|
|
||||||
|
self.horizontalLayout.addLayout(self.gridLayout)
|
||||||
|
|
||||||
|
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||||
|
|
||||||
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
|
self.menubar = QMenuBar(MainWindow)
|
||||||
|
self.menubar.setObjectName("menubar")
|
||||||
|
self.menubar.setGeometry(QRect(0, 0, 1280, 21))
|
||||||
|
self.menuDatei = QMenu(self.menubar)
|
||||||
|
self.menuDatei.setObjectName("menuDatei")
|
||||||
|
self.menuEinstellungen = QMenu(self.menubar)
|
||||||
|
self.menuEinstellungen.setObjectName("menuEinstellungen")
|
||||||
|
MainWindow.setMenuBar(self.menubar)
|
||||||
|
self.statusbar = QStatusBar(MainWindow)
|
||||||
|
self.statusbar.setObjectName("statusbar")
|
||||||
|
MainWindow.setStatusBar(self.statusbar)
|
||||||
|
|
||||||
|
self.menubar.addAction(self.menuDatei.menuAction())
|
||||||
|
self.menubar.addAction(self.menuEinstellungen.menuAction())
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
|
||||||
|
self.tabWidget.setCurrentIndex(0)
|
||||||
|
|
||||||
|
QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
# setupUi
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
MainWindow.setWindowTitle(
|
||||||
|
QCoreApplication.translate("MainWindow", "MainWindow", None)
|
||||||
|
)
|
||||||
|
# if QT_CONFIG(tooltip)
|
||||||
|
self.load_app.setToolTip(
|
||||||
|
QCoreApplication.translate(
|
||||||
|
"MainWindow", "Load the Semesterapparate from the database", None
|
||||||
|
)
|
||||||
|
)
|
||||||
|
# endif // QT_CONFIG(tooltip)
|
||||||
|
self.load_app.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "App. aufrufen", None)
|
||||||
|
)
|
||||||
|
self.create_new_app.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "neu. App anlegen", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem = self.tableWidget_apparate.horizontalHeaderItem(0)
|
||||||
|
___qtablewidgetitem.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "AppNr", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem1 = self.tableWidget_apparate.horizontalHeaderItem(1)
|
||||||
|
___qtablewidgetitem1.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "App Name", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem2 = self.tableWidget_apparate.horizontalHeaderItem(2)
|
||||||
|
___qtablewidgetitem2.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Professor", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem3 = self.tableWidget_apparate.horizontalHeaderItem(3)
|
||||||
|
___qtablewidgetitem3.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Dauerapparat", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem4 = self.tableWidget_apparat_media.horizontalHeaderItem(0)
|
||||||
|
___qtablewidgetitem4.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Buchtitel", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem5 = self.tableWidget_apparat_media.horizontalHeaderItem(1)
|
||||||
|
___qtablewidgetitem5.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Autor", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem6 = self.tableWidget_apparat_media.horizontalHeaderItem(2)
|
||||||
|
___qtablewidgetitem6.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Auflage", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem7 = self.tableWidget_apparat_media.horizontalHeaderItem(3)
|
||||||
|
___qtablewidgetitem7.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Signatur", None)
|
||||||
|
)
|
||||||
|
self.app_group_box.setTitle(
|
||||||
|
QCoreApplication.translate("MainWindow", "Apparatsdetails", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem8 = self.dokument_list.horizontalHeaderItem(0)
|
||||||
|
___qtablewidgetitem8.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Dokumentname", None)
|
||||||
|
)
|
||||||
|
___qtablewidgetitem9 = self.dokument_list.horizontalHeaderItem(1)
|
||||||
|
___qtablewidgetitem9.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Typ", None)
|
||||||
|
)
|
||||||
|
self.label_5.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Apparatsname", None)
|
||||||
|
)
|
||||||
|
self.lineEdit.setPlaceholderText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Nachname, Vorname", None)
|
||||||
|
)
|
||||||
|
self.sem_winter.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Winter", None)
|
||||||
|
)
|
||||||
|
self.label_4.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Prof. Name", None)
|
||||||
|
)
|
||||||
|
self.sem_sommer.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Sommer", None)
|
||||||
|
)
|
||||||
|
self.label_3.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Prof. Titel", None)
|
||||||
|
)
|
||||||
|
self.label_6.setText(QCoreApplication.translate("MainWindow", "Semester", None))
|
||||||
|
self.sem_year.setPlaceholderText(
|
||||||
|
QCoreApplication.translate("MainWindow", "2023", None)
|
||||||
|
)
|
||||||
|
self.label_2.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Apparatsnummer", None)
|
||||||
|
)
|
||||||
|
self.btn_apparat_save.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Speichern", None)
|
||||||
|
)
|
||||||
|
self.btn_apparat_apply.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Aktualisieren", None)
|
||||||
|
)
|
||||||
|
self.checkBox.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Dauerapparat", None)
|
||||||
|
)
|
||||||
|
self.btn_add_document.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Dokument hinzuf\u00fcgen", None)
|
||||||
|
)
|
||||||
|
self.btn_open_document.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Dokument \u00f6ffnen", None)
|
||||||
|
)
|
||||||
|
self.toolButton.setText(QCoreApplication.translate("MainWindow", "...", None))
|
||||||
|
self.label_7.setText(QCoreApplication.translate("MainWindow", "Suche", None))
|
||||||
|
self.lineEdit_2.setPlaceholderText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Buch oder Signatur", None)
|
||||||
|
)
|
||||||
|
self.label.setText(
|
||||||
|
QCoreApplication.translate("MainWindow", "Medienliste", None)
|
||||||
|
)
|
||||||
|
self.tabWidget.setTabText(
|
||||||
|
self.tabWidget.indexOf(self.tab),
|
||||||
|
QCoreApplication.translate("MainWindow", "Tab 1", None),
|
||||||
|
)
|
||||||
|
self.tabWidget.setTabText(
|
||||||
|
self.tabWidget.indexOf(self.tab_2),
|
||||||
|
QCoreApplication.translate("MainWindow", "Tab 2", None),
|
||||||
|
)
|
||||||
|
self.menuDatei.setTitle(QCoreApplication.translate("MainWindow", "Datei", None))
|
||||||
|
self.menuEinstellungen.setTitle(
|
||||||
|
QCoreApplication.translate("MainWindow", "Einstellungen", None)
|
||||||
|
)
|
||||||
|
|
||||||
|
# retranslateUi
|
||||||
67
src/ui/widgets/Ui_message_widget.py
Normal file
67
src/ui/widgets/Ui_message_widget.py
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\widgets\message_widget.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
from src.backend.database import Database
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Form(object):
|
||||||
|
def setupUi(self, Form):
|
||||||
|
Form.setObjectName("Form")
|
||||||
|
Form.resize(295, 110)
|
||||||
|
self.label = QtWidgets.QLabel(Form)
|
||||||
|
self.label.setGeometry(QtCore.QRect(10, 0, 47, 21))
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.lineEdit = QtWidgets.QLineEdit(Form)
|
||||||
|
self.lineEdit.setEnabled(True)
|
||||||
|
self.lineEdit.setGeometry(QtCore.QRect(60, 0, 41, 20))
|
||||||
|
self.lineEdit.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.lineEdit.setReadOnly(True)
|
||||||
|
self.lineEdit.setObjectName("lineEdit")
|
||||||
|
self.label_2 = QtWidgets.QLabel(Form)
|
||||||
|
self.label_2.setGeometry(QtCore.QRect(10, 20, 51, 21))
|
||||||
|
self.label_2.setObjectName("label_2")
|
||||||
|
self.textEdit = QtWidgets.QTextEdit(Form)
|
||||||
|
self.textEdit.setGeometry(QtCore.QRect(10, 40, 281, 66))
|
||||||
|
self.textEdit.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.textEdit.setInputMethodHints(QtCore.Qt.InputMethodHint.ImhNone)
|
||||||
|
self.textEdit.setReadOnly(True)
|
||||||
|
self.textEdit.setObjectName("textEdit")
|
||||||
|
self.pushButton = QtWidgets.QPushButton(Form)
|
||||||
|
self.pushButton.setGeometry(QtCore.QRect(210, 10, 75, 23))
|
||||||
|
self.pushButton.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.pushButton.setObjectName("pushButton")
|
||||||
|
self.hidden_id = QtWidgets.QLabel(Form)
|
||||||
|
self.hidden_id.setGeometry(QtCore.QRect(140, 10, 47, 13))
|
||||||
|
self.hidden_id.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
|
||||||
|
self.hidden_id.setObjectName("hidden_id")
|
||||||
|
self.hidden_id.hide()
|
||||||
|
self.delete = False
|
||||||
|
self.pushButton.clicked.connect(self.delete_message)
|
||||||
|
self.retranslateUi(Form)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||||
|
Form.setTabOrder(self.lineEdit, self.textEdit)
|
||||||
|
|
||||||
|
def retranslateUi(self, Form):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Form.setWindowTitle(_translate("Form", "Form"))
|
||||||
|
self.label.setText(_translate("Form", "Apparat:"))
|
||||||
|
self.label_2.setText(_translate("Form", "Nachricht:"))
|
||||||
|
self.pushButton.setText(_translate("Form", "Löschen"))
|
||||||
|
self.hidden_id.setText(_translate("Form", "TextLabel"))
|
||||||
|
|
||||||
|
def set_message(self, message: str, apparat: int, app_id: int):
|
||||||
|
self.textEdit.setText(message)
|
||||||
|
self.lineEdit.setText(str(apparat) if apparat else "Alle")
|
||||||
|
self.hidden_id.setText(str(app_id))
|
||||||
|
|
||||||
|
def delete_message(self):
|
||||||
|
db = Database()
|
||||||
|
print("deleting message")
|
||||||
|
db.delete_message(self.hidden_id.text())
|
||||||
149
src/ui/widgets/Ui_progress_overview_widget.py
Normal file
149
src/ui/widgets/Ui_progress_overview_widget.py
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\Semesterapparate\ui\widgets\progress_overview_widget.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt6 UI code generator 6.3.1
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_Form(object):
|
||||||
|
def setupUi(self, Form):
|
||||||
|
Form.setObjectName("Form")
|
||||||
|
Form.resize(300, 751)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(
|
||||||
|
QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed
|
||||||
|
)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
|
||||||
|
Form.setSizePolicy(sizePolicy)
|
||||||
|
Form.setMaximumSize(QtCore.QSize(300, 751))
|
||||||
|
self.group_software = QtWidgets.QGroupBox(Form)
|
||||||
|
self.group_software.setEnabled(True)
|
||||||
|
self.group_software.setGeometry(QtCore.QRect(10, 10, 281, 211))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(10)
|
||||||
|
font.setBold(True)
|
||||||
|
font.setWeight(75)
|
||||||
|
self.group_software.setFont(font)
|
||||||
|
self.group_software.setStatusTip("")
|
||||||
|
self.group_software.setFlat(False)
|
||||||
|
self.group_software.setCheckable(False)
|
||||||
|
self.group_software.setChecked(False)
|
||||||
|
self.group_software.setObjectName("group_software")
|
||||||
|
self.checkBox = QtWidgets.QCheckBox(self.group_software)
|
||||||
|
self.checkBox.setGeometry(QtCore.QRect(10, 20, 241, 41))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(8)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.checkBox.setFont(font)
|
||||||
|
self.checkBox.setObjectName("checkBox")
|
||||||
|
self.checkBox_2 = QtWidgets.QCheckBox(self.group_software)
|
||||||
|
self.checkBox_2.setGeometry(QtCore.QRect(10, 50, 241, 41))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(8)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.checkBox_2.setFont(font)
|
||||||
|
self.checkBox_2.setObjectName("checkBox_2")
|
||||||
|
self.checkBox_3 = QtWidgets.QCheckBox(self.group_software)
|
||||||
|
self.checkBox_3.setGeometry(QtCore.QRect(10, 130, 241, 41))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(8)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.checkBox_3.setFont(font)
|
||||||
|
self.checkBox_3.setObjectName("checkBox_3")
|
||||||
|
self.groupBox_2 = QtWidgets.QGroupBox(Form)
|
||||||
|
self.groupBox_2.setGeometry(QtCore.QRect(10, 220, 281, 251))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(10)
|
||||||
|
font.setBold(True)
|
||||||
|
font.setItalic(False)
|
||||||
|
font.setUnderline(False)
|
||||||
|
font.setWeight(75)
|
||||||
|
font.setKerning(True)
|
||||||
|
font.setStyleStrategy(QtGui.QFont.StyleStrategy.PreferDefault)
|
||||||
|
self.groupBox_2.setFont(font)
|
||||||
|
self.groupBox_2.setObjectName("groupBox_2")
|
||||||
|
self.checkBox_4 = QtWidgets.QCheckBox(self.groupBox_2)
|
||||||
|
self.checkBox_4.setGeometry(QtCore.QRect(10, 20, 241, 41))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(8)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.checkBox_4.setFont(font)
|
||||||
|
self.checkBox_4.setObjectName("checkBox_4")
|
||||||
|
self.checkBox_5 = QtWidgets.QCheckBox(self.groupBox_2)
|
||||||
|
self.checkBox_5.setGeometry(QtCore.QRect(10, 50, 241, 41))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(8)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.checkBox_5.setFont(font)
|
||||||
|
self.checkBox_5.setObjectName("checkBox_5")
|
||||||
|
self.checkBox_6 = QtWidgets.QCheckBox(self.groupBox_2)
|
||||||
|
self.checkBox_6.setGeometry(QtCore.QRect(10, 80, 161, 41))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(8)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.checkBox_6.setFont(font)
|
||||||
|
self.checkBox_6.setObjectName("checkBox_6")
|
||||||
|
self.pushButton = QtWidgets.QPushButton(self.groupBox_2)
|
||||||
|
self.pushButton.setGeometry(QtCore.QRect(160, 90, 101, 23))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(8)
|
||||||
|
font.setBold(False)
|
||||||
|
font.setWeight(50)
|
||||||
|
self.pushButton.setFont(font)
|
||||||
|
self.pushButton.setStatusTip("")
|
||||||
|
self.pushButton.setWhatsThis("")
|
||||||
|
self.pushButton.setAccessibleDescription("")
|
||||||
|
self.pushButton.setAutoFillBackground(False)
|
||||||
|
icon = QtGui.QIcon()
|
||||||
|
icon.addPixmap(
|
||||||
|
QtGui.QPixmap(
|
||||||
|
"c:\\Users\\aky547\\GitHub\\Semesterapparate\\ui\\widgets\\../icons/information.png"
|
||||||
|
),
|
||||||
|
QtGui.QIcon.Mode.Normal,
|
||||||
|
QtGui.QIcon.State.Off,
|
||||||
|
)
|
||||||
|
self.pushButton.setIcon(icon)
|
||||||
|
self.pushButton.setCheckable(False)
|
||||||
|
self.pushButton.setChecked(False)
|
||||||
|
self.pushButton.setObjectName("pushButton")
|
||||||
|
|
||||||
|
self.retranslateUi(Form)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||||
|
|
||||||
|
def retranslateUi(self, Form):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Form.setWindowTitle(_translate("Form", "Form"))
|
||||||
|
self.group_software.setToolTip(
|
||||||
|
_translate(
|
||||||
|
"Form",
|
||||||
|
"Hier klicken, um die aDIS Abfrage in die Zwischenablage zu kopieren",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.group_software.setTitle(_translate("Form", "Software"))
|
||||||
|
self.checkBox.setText(_translate("Form", "Apparatsdaten eingegeben"))
|
||||||
|
self.checkBox_2.setText(_translate("Form", "Medien hinzugefügt / importiert"))
|
||||||
|
self.checkBox_3.setText(
|
||||||
|
_translate("Form", "Prof-ID und Apparat-ID eingetragen")
|
||||||
|
)
|
||||||
|
self.groupBox_2.setTitle(_translate("Form", "aDIS"))
|
||||||
|
self.checkBox_4.setText(_translate("Form", "Medien geprüft"))
|
||||||
|
self.checkBox_5.setText(_translate("Form", "Medien bearbeitet"))
|
||||||
|
self.checkBox_6.setText(_translate("Form", "Apparat angelegt"))
|
||||||
|
self.pushButton.setToolTip(
|
||||||
|
_translate(
|
||||||
|
"Form",
|
||||||
|
"Hier klicken, um die aDIS Abfrage in die Zwischenablage zu kopieren",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self.pushButton.setText(_translate("Form", " aDIS Abfrage"))
|
||||||
5
src/ui/widgets/__init__.py
Normal file
5
src/ui/widgets/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
__all__ = ["filepicker"]
|
||||||
|
from .collapse import StatusWidget
|
||||||
|
from .filepicker import FilePicker
|
||||||
|
from .graph import GraphWidget
|
||||||
|
from .Ui_message_widget import Ui_Form as Message_Widget
|
||||||
76
src/ui/widgets/collapse.py
Normal file
76
src/ui/widgets/collapse.py
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
# import pysignal pyslot
|
||||||
|
from PyQt6.QtCore import pyqtSignal
|
||||||
|
from PyQt6.QtWidgets import (
|
||||||
|
QApplication,
|
||||||
|
QTreeWidget,
|
||||||
|
QTreeWidgetItem,
|
||||||
|
QVBoxLayout,
|
||||||
|
QWidget,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class StatusWidget(QWidget):
|
||||||
|
person_double_clicked = pyqtSignal(str,str, int)
|
||||||
|
|
||||||
|
def __init__(self, data, header_label: str):
|
||||||
|
super(StatusWidget, self).__init__()
|
||||||
|
|
||||||
|
self.tree_widget = QTreeWidget()
|
||||||
|
self.tree_widget.setHeaderLabels([header_label])
|
||||||
|
self.populate_tree(data)
|
||||||
|
self.header = header_label
|
||||||
|
layout = QVBoxLayout()
|
||||||
|
layout.addWidget(self.tree_widget)
|
||||||
|
self.setLayout(layout)
|
||||||
|
self.tree_widget.itemDoubleClicked.connect(self.on_item_double_clicked)
|
||||||
|
def on_item_double_clicked(self, item: QTreeWidgetItem, column: int):
|
||||||
|
parent_depth = 0
|
||||||
|
parent = item.parent()
|
||||||
|
while parent:
|
||||||
|
parent_depth += 1
|
||||||
|
parent = parent.parent()
|
||||||
|
print(parent_depth)
|
||||||
|
# Emit the person_double_clicked signal with the name of the person and the parent depth
|
||||||
|
self.person_double_clicked.emit(self.header,item.text(column), parent_depth)
|
||||||
|
|
||||||
|
def populate_tree(self, data):
|
||||||
|
if data == {}:
|
||||||
|
return
|
||||||
|
|
||||||
|
def __listcount(dictlist: dict[dict[str:list]]):
|
||||||
|
ret = 0
|
||||||
|
for _, value in dictlist.items():
|
||||||
|
for _, value2 in value.items():
|
||||||
|
ret += len(value2)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
listitems = __listcount(data)
|
||||||
|
for action, items in data.items():
|
||||||
|
action_item = QTreeWidgetItem(
|
||||||
|
self.tree_widget, [f"{action} ({str(listitems)})"]
|
||||||
|
)
|
||||||
|
for person, entries in items.items():
|
||||||
|
person_item = QTreeWidgetItem(
|
||||||
|
action_item, [f"{person} ({str(len(entries))})"]
|
||||||
|
)
|
||||||
|
for entry in entries:
|
||||||
|
entry_item = QTreeWidgetItem(person_item, [entry])
|
||||||
|
# Make the person entry collapsible
|
||||||
|
person_item.setExpanded(False)
|
||||||
|
|
||||||
|
# Make the action entry collapsible
|
||||||
|
action_item.setExpanded(True)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
data = {"test": {"test2": ["test3", "test4"]}}
|
||||||
|
widget = StatusWidget(data, "test")
|
||||||
|
|
||||||
|
widget.show()
|
||||||
|
#detect emit signal
|
||||||
|
widget.person_double_clicked.connect(lambda x: print(x))
|
||||||
|
|
||||||
|
sys.exit(app.exec())
|
||||||
15
src/ui/widgets/default_apps.py
Normal file
15
src/ui/widgets/default_apps.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class CollapsibleWidget(object):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class CollapsibleWidget(object):
|
||||||
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class CollapsibleWidget(object):
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user