Skip to content

Commit

Permalink
add support for logo (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
gillins authored Mar 6, 2024
1 parent 33831e8 commit 5aecabc
Showing 1 changed file with 40 additions and 9 deletions.
49 changes: 40 additions & 9 deletions tuiview_plugins/scalebar_nth_arrow/scalebar_north_arrow.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
from tuiview import viewerlayers
from tuiview.viewerstrings import MESSAGE_TITLE
from PyQt5.QtCore import QObject, QRect, Qt
from PyQt5.QtWidgets import QAction, QApplication, QInputDialog
from PyQt5.QtGui import QPen, QPainter, QColor, QFont
from PyQt5.QtWidgets import QAction, QApplication, QInputDialog, QFileDialog
from PyQt5.QtGui import QPen, QPainter, QColor, QFont, QImage

LINE_WIDTH = 1
LINE_COLOR = QColor(255, 255, 0, 255)
Expand Down Expand Up @@ -57,18 +57,21 @@ def description():
class ScaleBarNthArrowQueryPointLayer(viewerlayers.ViewerQueryPointLayer):
"""
Alternative implementation of viewerlayers.ViewerQueryPointLayer that
calls the base class but also draws scale bar and north arrow if required.
calls the base class but also draws scale bar, north arrow, citation or
logo if required.
Done this way as ViewerQueryPointLayer always stays on top of all the layers.
"""
def __init__(self, qplayer, nthArrow=True, scaleBar=True, citation=None):
def __init__(self, qplayer, nthArrow=True, scaleBar=True,
citation=None, logo=None):
# basically a copy constructor
self.coordmgr = qplayer.coordmgr
self.queryPoints = qplayer.queryPoints
self.image = qplayer.image
self.nthArrow = nthArrow
self.scaleBar = scaleBar
self.citation = citation
self.logo = logo

def getImage(self):
"""
Expand All @@ -78,7 +81,8 @@ def getImage(self):
super().getImage()
# check is image isNull - no image loaded or we aren't drawing
if self.image.isNull() or (not self.nthArrow and not
self.scaleBar and self.citation is None):
self.scaleBar and self.citation is None and
self.logo is None):
return
# now draw our stuff

Expand Down Expand Up @@ -156,6 +160,11 @@ def getImage(self):
self.image.height() - margin * 2)
paint.drawText(rect, Qt.AlignLeft | Qt.AlignTop, self.citation.replace('\\n', '\n'))

if self.logo is not None:
x = self.image.width() - margin - self.logo.width()
y = self.image.height() - margin - self.logo.height()
paint.drawImage(x, y, self.logo)

paint.end()


Expand All @@ -174,13 +183,18 @@ def __init__(self, viewer):
self.citationAction = QAction(viewer, triggered=self.changeCitation)
self.citationAction.setText("Set Citation text")

self.logoAction = QAction(viewer, triggered=self.changeLogo)
self.logoAction.setText("Set logo")

scaleNthArrowMenu = viewer.menuBar().addMenu("Scale Bar")
scaleNthArrowMenu.addAction(self.scaleBarAction)
scaleNthArrowMenu.addAction(self.northArrowAction)
scaleNthArrowMenu.addAction(self.citationAction)
scaleNthArrowMenu.addAction(self.logoAction)

# checked off to start with
self.scalebarlayer = registerScaleBarNorthArrow(viewer, False, False, None)
self.scalebarlayer = registerScaleBarNorthArrow(viewer, False, False,
None, None)
self.viewer = viewer

def stateChanged(self, checked):
Expand Down Expand Up @@ -209,16 +223,33 @@ def changeCitation(self):
# redraw
self.scalebarlayer.getImage()
self.viewer.viewwidget.viewport().update()

def changeLogo(self):
"""
Allow the user to select a logo to display
"""
imageFilter = "Images (*.png *.xpm *.jpg *.tif)"
fname, filter = QFileDialog.getOpenFileName(self.viewer, "Image File",
filter=imageFilter)
if fname != '':
self.scalebarlayer.logo = QImage(fname)
else:
self.scalebarlayer.logo = None

# redraw
self.scalebarlayer.getImage()
self.viewer.viewwidget.viewport().update()


def registerScaleBarNorthArrow(viewer, nthArrow=True,
scaleBar=True, citation=None):
scaleBar=True, citation=None, logo=None):
"""
Add the Scale bar and north arrow to the given viewer
"""
# install our version of the query point layer
scalebarlayer = ScaleBarNthArrowQueryPointLayer(
viewer.viewwidget.layers.queryPointLayer, nthArrow, scaleBar, citation)
viewer.viewwidget.layers.queryPointLayer, nthArrow,
scaleBar, citation, logo)
viewer.viewwidget.layers.queryPointLayer = scalebarlayer

# straight away get a new querypointlayer
Expand Down

0 comments on commit 5aecabc

Please sign in to comment.