mirror of
https://github.com/rbreu/beeref.git
synced 2026-03-11 08:54:28 +00:00
Custom selection markings (WIP)
Preparation for resizing and scaling items
This commit is contained in:
parent
bfce4f43aa
commit
25652a5f5f
3 changed files with 28 additions and 36 deletions
|
|
@ -103,31 +103,21 @@ class BeePixmapItem(QtWidgets.QGraphicsPixmapItem):
|
|||
|
||||
return item
|
||||
|
||||
def create_selection(self):
|
||||
SelectionItem(self)
|
||||
def activate_selection(self):
|
||||
if self.childItems():
|
||||
self.childItems()[0].setVisible(True)
|
||||
else:
|
||||
SelectionItem(self)
|
||||
|
||||
def clear_selection(self):
|
||||
for child in self.childItems():
|
||||
logger.debug('Removing child item...')
|
||||
self.scene().removeItem(child)
|
||||
logger.debug('Child item removed')
|
||||
self.childItems()[0].setVisible(False)
|
||||
|
||||
def itemChange(self, change, value):
|
||||
ret = super().itemChange(change, value)
|
||||
|
||||
if change == self.GraphicsItemChange.ItemSelectedChange:
|
||||
if value:
|
||||
logger.debug('Item selected')
|
||||
self.create_selection()
|
||||
logger.debug(f'Item selected {self.filename}')
|
||||
self.activate_selection()
|
||||
else:
|
||||
logger.debug('Item deselected')
|
||||
logger.debug(f'Item deselected {self.filename}')
|
||||
self.clear_selection()
|
||||
|
||||
return ret
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
print('????')
|
||||
|
||||
def sceneEvent(self, event):
|
||||
print('********', event)
|
||||
return super().sceneEvent(event)
|
||||
return super().itemChange(change, value)
|
||||
|
|
|
|||
|
|
@ -34,9 +34,14 @@ class SelectionItem(QtWidgets.QGraphicsItem):
|
|||
def __init__(self, item):
|
||||
super().__init__(parent=item)
|
||||
self.single_select_mode = False
|
||||
|
||||
self.setAcceptHoverEvents(True)
|
||||
self.setFlags(
|
||||
QtWidgets.QGraphicsItem.GraphicsItemFlags.ItemIsSelectable
|
||||
| QtWidgets.QGraphicsItem.GraphicsItemFlags.ItemIsMovable)
|
||||
bounds = self.parentItem().boundingRect()
|
||||
pos = bounds.bottomRight()
|
||||
|
||||
# The intercatable shape of the bottom right scale handle:
|
||||
self.bottom_right_scale_bounds = QtCore.QRectF(
|
||||
pos.x() - self.resize_size/2,
|
||||
pos.y() - self.resize_size/2,
|
||||
|
|
@ -53,7 +58,7 @@ class SelectionItem(QtWidgets.QGraphicsItem):
|
|||
|
||||
def shape(self):
|
||||
path = QtGui.QPainterPath()
|
||||
path.addRect(self.boundingRect())
|
||||
path.addRect(self.bottom_right_scale_bounds)
|
||||
return path
|
||||
|
||||
def draw_debug_rect(self, painter, rect):
|
||||
|
|
@ -71,17 +76,11 @@ class SelectionItem(QtWidgets.QGraphicsItem):
|
|||
bounds = self.parentItem().boundingRect()
|
||||
painter.drawRect(bounds)
|
||||
|
||||
self.single_select_mode = self.parentItem()\
|
||||
.scene().has_single_selection()
|
||||
|
||||
self.setAcceptHoverEvents(self.single_select_mode)
|
||||
self.setAcceptDrops(self.single_select_mode)
|
||||
|
||||
single_select_mode = self.parentItem().scene().has_single_selection()
|
||||
self.setEnabled(single_select_mode)
|
||||
|
||||
# If it's a single selection, draw the handles:
|
||||
if self.single_select_mode:
|
||||
self.setFlags(
|
||||
QtWidgets.QGraphicsItem.GraphicsItemFlags.ItemIsSelectable)
|
||||
if single_select_mode:
|
||||
pos = bounds.bottomRight()
|
||||
painter.fillRect(pos.x() - self.handle_size/2,
|
||||
pos.y() - self.handle_size/2,
|
||||
|
|
@ -94,14 +93,14 @@ class SelectionItem(QtWidgets.QGraphicsItem):
|
|||
self.draw_debug_rect(painter, self.bottom_right_scale_bounds)
|
||||
|
||||
def hoverMoveEvent(self, event):
|
||||
if not self.single_select_mode:
|
||||
return
|
||||
|
||||
# In bottomright scale area?
|
||||
if self.bottom_right_scale_bounds.contains(event.pos()):
|
||||
self.setCursor(Qt.CursorShape.SizeFDiagCursor)
|
||||
else:
|
||||
self.setCursor(Qt.CursorShape.ArrowCursor)
|
||||
|
||||
def dragEnterEvent(self, event):
|
||||
print('OOOOOOOOOOOOOOOdrag enter')
|
||||
def mousePressEvent(self, event):
|
||||
print('********mousepress')
|
||||
|
||||
def mouseMoveEvent(self, event):
|
||||
print('*******mousemove')
|
||||
|
|
|
|||
|
|
@ -290,8 +290,11 @@ class BeeGraphicsView(QtWidgets.QGraphicsView):
|
|||
self.add_image(img, pos)
|
||||
|
||||
def on_selection_changed(self):
|
||||
logger.debug('Currently selected items: %s',
|
||||
len(self.scene.selectedItems()))
|
||||
for action in self.actions_active_when_selection:
|
||||
action.setEnabled(self.scene.has_selection())
|
||||
self.viewport().repaint()
|
||||
|
||||
def recalc_scene_rect(self):
|
||||
"""Resize the scene rectangle so that it is always one view width
|
||||
|
|
|
|||
Loading…
Reference in a new issue