Skip to content
Snippets Groups Projects
Commit d7db3bbc authored by Thomas Holene Løkkeborg's avatar Thomas Holene Løkkeborg
Browse files

#18 inline edit støtter nå flere sider + enkel header implementert

- la til x og y som godkjente variabelnavn til pylint
- viewArea nå QScrollArea
parent b13e110a
No related branches found
No related tags found
1 merge request!3#18 MVP brukergrensesnitt - inline edit view
Pipeline #71417 passed
......@@ -404,6 +404,8 @@ function-naming-style=snake_case
# Good variable names which should always be accepted, separated by a comma.
good-names=app,
x,
y,
ok,
i,
j,
......
......@@ -10,8 +10,8 @@ from PySide2.QtCore import QRectF, QPoint, QTimer, Qt
from PySide2.QtWidgets import QTabWidget, QWidget, QMainWindow, \
QApplication, QHBoxLayout, QVBoxLayout, QPushButton, QLabel, \
QAbstractItemView, QListWidget, QListWidgetItem, QAction, QGraphicsScene, \
QGraphicsView, QScrollArea, QGraphicsRectItem
from PySide2.QtGui import QBrush, QIcon, QPalette
QGraphicsView, QScrollArea, QGraphicsRectItem, QTableWidget
from PySide2.QtGui import QBrush, QIcon, QPalette, QFont, QPixmap
class MainWindow(QMainWindow):
......@@ -171,44 +171,136 @@ class SOIWorkspaceWidget(QWidget):
self.list_modules.insertItem(i, item)
class ViewArea(QWidget):
class ViewArea(QScrollArea):
"""Widget som kan byttes ut med view, edit etc."""
A4_RATIO = 1.414
# height must be adjusted to something that will look right when real
# wigets are placed inside the pages
HEIGHT = 1700
WIDTH = HEIGHT * A4_RATIO
PADDING = 100
CONTENT_WIDTH = WIDTH - PADDING * 2
CONTENT_HEIGHT = HEIGHT - PADDING * 2
HEADER_HEIGHT = 200
HEADER_HEIGHT = 100
def __init__(self):
super().__init__()
self.layout = QHBoxLayout(self)
self.scroll_area = QScrollArea(self)
self.pages = []
# necessary to make the scroll area fill the space it's given
self.scroll_area.setWidgetResizable(True)
self.setWidgetResizable(True)
# scene and view widgets
self.scene = QGraphicsScene()
table = QTableWidget(4, 4)
table.move(self.PADDING + 10, self.PADDING + self.HEADER_HEIGHT + 10)
self.setup_scene()
self.scene.addWidget(table)
self.view = QGraphicsView(self.scene)
self.view.scale(0.50, 0.50)
self.view.scale(0.66, 0.66)
self.setWidget(self.view)
self.scroll_area.setWidget(self.view)
self.layout.addWidget(self.scroll_area)
self.setLayout(self.layout)
# fill will dummy pages
self.pages.append(0)
self.pages.append(0)
self.pages.append(0)
self.pages.append(0)
self.pages.append(0)
self.update_drawn_pages()
self.launch_auto_zoom()
def update_drawn_pages(self):
"""Upate pages to reflect pages."""
for i, _ in enumerate(self.pages, start=1):
x = 0
y = self.HEIGHT * max(i - 1, 0) + self.PADDING * max(i - 1, 0)
# adjust page size
full_scene_height = y + self.HEIGHT
self.scene.setSceneRect(QRectF(0, 0, self.WIDTH,
full_scene_height))
self.draw_page(x, y)
self.draw_header(x + self.PADDING, y + self.PADDING, i)
def draw_header(self, x, y, page_number):
"""Draw header staring at given position.
Parameters
----------
x : int
y : int
"""
# title
label = QLabel("SOI TITLE HERE")
label.move(x, y)
label.setStyleSheet("background-color: rgba(0,0,0,0%)")
label.setFont(QFont("Times New Roman", 50))
self.scene.addWidget(label)
# page numbering
label = QLabel("{} av {}".format(page_number, len(self.pages)))
label.setStyleSheet("background-color: rgba(0,0,0,0%)")
label.setFont(QFont("Times New Roman", 50))
# source: https://stackoverflow.com/a/8638114/3545896
# CAUTION: does not work if font is set through stylesheet
label_width = label.fontMetrics().boundingRect(label.text()).width()
label.move(x + (self.CONTENT_WIDTH - label_width) / 2, y)
self.scene.addWidget(label)
# grading
label = QLabel("UGRADERT")
label.setStyleSheet("background-color: rgba(0,0,0,0%); color: red")
label.setFont(QFont("Times New Roman", 50))
# source: https://stackoverflow.com/a/8638114/3545896
# CAUTION: does not work if font is set through stylesheet
label_width = label.fontMetrics().boundingRect(label.text()).width()
label.move(x + self.CONTENT_WIDTH - label_width - self.HEADER_HEIGHT,
y)
self.scene.addWidget(label)
# patch
pixmap = QPixmap("soitool/media/HVlogo.png")
label = QLabel()
label.setPixmap(pixmap.scaled(self.HEADER_HEIGHT, self.HEADER_HEIGHT))
label.move(x + self.CONTENT_WIDTH - self.HEADER_HEIGHT, y)
self.scene.addWidget(label)
def draw_page(self, x, y):
"""Draw page starting at given position.
Parameters
----------
x : int
y : int
"""
# color the page white
page_background = QGraphicsRectItem(x, y, self.WIDTH, self.HEIGHT)
page_background.setBrush(QBrush(Qt.white))
self.scene.addItem(page_background)
# draw borders
self.scene.addRect(x, y, self.WIDTH, self.HEIGHT)
self.scene.addRect(x + self.PADDING, y + self.PADDING,
self.CONTENT_WIDTH, self.CONTENT_HEIGHT)
self.scene.addRect(x + self.PADDING, y + self.PADDING,
self.CONTENT_WIDTH, self.CONTENT_HEIGHT)
self.scene.addRect(x + self.PADDING, y + self.PADDING,
self.CONTENT_WIDTH, self.HEADER_HEIGHT)
def setup_scene(self):
"""Prepare scene for use.
Draws borders, background, etc.
"""
self.scene.setSceneRect(QRectF(0, 0, self.WIDTH, self.HEIGHT))
self.scene.setSceneRect(QRectF(0, 0, self.WIDTH,
self.HEIGHT * 3 + self.PADDING * 2))
# sets the background color of the scene to be the appropriate
# system-specific background color
......@@ -216,19 +308,7 @@ class ViewArea(QWidget):
# source: https://stackoverflow.com/questions/15519749/how-to-get-widget-background-qcolor
self.scene.setBackgroundBrush(app.palette().color(QPalette.Window))
# color the page white
page_background = QGraphicsRectItem(0, 0, self.WIDTH, self.HEIGHT)
page_background.setBrush(QBrush(Qt.white))
self.scene.addItem(page_background)
# draw borders
self.scene.addRect(0, 0, self.WIDTH, self.HEIGHT)
self.scene.addRect(self.PADDING, self.PADDING, self.CONTENT_WIDTH,
self.CONTENT_HEIGHT)
self.scene.addRect(self.PADDING, self.PADDING, self.CONTENT_WIDTH,
self.CONTENT_HEIGHT)
self.scene.addRect(self.PADDING, self.PADDING, self.CONTENT_WIDTH,
self.HEADER_HEIGHT)
self.update_drawn_pages()
def launch_auto_zoom(self):
"""Zoom in a regular interval.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment