From 3e76f86822597d8d4feb47f0a0dc84218a4bb2f4 Mon Sep 17 00:00:00 2001 From: Rebecca Breu Date: Mon, 22 Mar 2021 21:32:33 +0100 Subject: [PATCH] First commit --- .gitignore | 2 + README.md | 5 +- assets/logo.png | Bin 0 -> 49920 bytes assets/logo.svg | 421 +++++++++++++++++++++++++++++++++++++++++++ beeref.py | 62 +++++++ requirements/app.txt | 1 + requirements/dev.txt | 2 + 7 files changed, 491 insertions(+), 2 deletions(-) create mode 100644 assets/logo.png create mode 100644 assets/logo.svg create mode 100755 beeref.py create mode 100644 requirements/app.txt create mode 100644 requirements/dev.txt diff --git a/.gitignore b/.gitignore index b6e4761..91939da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +*~ + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/README.md b/README.md index 6044a6e..59b9a66 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -# beeref -BeeRef Reference Image Viewer +# BeeRef — A Simple Reference Image Viewer + +View your references while you art! diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0068613108b87e6cb16f8a574d480259bbed8407 GIT binary patch literal 49920 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 VpK + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/beeref.py b/beeref.py new file mode 100755 index 0000000..b59151d --- /dev/null +++ b/beeref.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +import logging +import os.path +import signal +import sys + +from PyQt6 import QtCore, QtGui, QtWidgets + +from lib.view import BeeGraphicsView + + +logger = logging.getLogger('BeeRef') + + +class BeeRefMainWindow(QtWidgets.QWidget): + + def __init__(self, filename=None): + super().__init__() + self.setWindowTitle('BeeRef') + self.setWindowIcon(QtGui.QIcon(os.path.join('assets', 'logo.png'))) + view = BeeGraphicsView(app, self, filename) + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(QtCore.QMargins(0, 0, 0, 0)) + layout.addWidget(view) + self.setLayout(layout) + self.resize(500, 300) + self.show() + + +def safe_timer(timeout, func, *args, **kwargs): + """Create a timer that is safe against garbage collection and + overlapping calls. + See: http://ralsina.me/weblog/posts/BB974.html + """ + def timer_event(): + try: + func(*args, **kwargs) + finally: + QtCore.QTimer.singleShot(timeout, timer_event) + QtCore.QTimer.singleShot(timeout, timer_event) + + +def handle_sigint(signum, frame): + logger.info('Received interrupt. Exiting...') + QtWidgets.QApplication.quit() + + +if __name__ == '__main__': + logger = logging.getLogger('BeeRef') + logging.basicConfig(level=logging.DEBUG) + app = QtWidgets.QApplication(sys.argv) + + filename = sys.argv[1] if len(sys.argv) > 1 else None + bee = BeeRefMainWindow(filename) + + signal.signal(signal.SIGINT, handle_sigint) + # Repeatedly run python-noop to give the interpreter time to + # handel signals + safe_timer(50, lambda: None) + + app.exec() diff --git a/requirements/app.txt b/requirements/app.txt new file mode 100644 index 0000000..86eab23 --- /dev/null +++ b/requirements/app.txt @@ -0,0 +1 @@ +pyQt6==6.0.3 diff --git a/requirements/dev.txt b/requirements/dev.txt new file mode 100644 index 0000000..42dbe4d --- /dev/null +++ b/requirements/dev.txt @@ -0,0 +1,2 @@ +flake8==3.9.0 +pytest==6.2.2