fixed bug in multiselection
This commit is contained in:
parent
c0a6148f58
commit
aa3eacf627
@ -28,6 +28,7 @@ class MouseInteractionMixin:
|
||||
if event.button() == Qt.MouseButton.LeftButton:
|
||||
x, y = event.position().x(), event.position().y()
|
||||
ctrl_pressed = event.modifiers() & Qt.KeyboardModifier.ControlModifier
|
||||
shift_pressed = event.modifiers() & Qt.KeyboardModifier.ShiftModifier
|
||||
|
||||
# Check if clicking on ghost page button
|
||||
if self._check_ghost_page_click(x, y):
|
||||
@ -60,8 +61,9 @@ class MouseInteractionMixin:
|
||||
|
||||
element = self._get_element_at(x, y)
|
||||
if element:
|
||||
# Check if Control is pressed and element is ImageData - enter image pan mode
|
||||
if ctrl_pressed and isinstance(element, ImageData) and not self.rotation_mode:
|
||||
print(f"DEBUG: Clicked on element: {element}, ctrl_pressed: {ctrl_pressed}, shift_pressed: {shift_pressed}")
|
||||
# Check if Shift is pressed and element is ImageData - enter image pan mode
|
||||
if shift_pressed and isinstance(element, ImageData) and not self.rotation_mode:
|
||||
# Enter image pan mode - pan image within frame
|
||||
self.selected_elements = {element}
|
||||
self.drag_start_pos = (x, y)
|
||||
@ -73,12 +75,17 @@ class MouseInteractionMixin:
|
||||
print(f"Entered image pan mode for {element}")
|
||||
elif ctrl_pressed:
|
||||
# Multi-select mode
|
||||
print(f"DEBUG: Multi-select mode triggered")
|
||||
if element in self.selected_elements:
|
||||
print(f"DEBUG: Removing element from selection")
|
||||
self.selected_elements.remove(element)
|
||||
else:
|
||||
print(f"DEBUG: Adding element to selection. Current count: {len(self.selected_elements)}")
|
||||
self.selected_elements.add(element)
|
||||
print(f"DEBUG: Total selected elements: {len(self.selected_elements)}")
|
||||
else:
|
||||
# Normal drag mode
|
||||
print(f"DEBUG: Normal drag mode - single selection")
|
||||
self.selected_elements = {element}
|
||||
self.drag_start_pos = (x, y)
|
||||
self.drag_start_element_pos = element.position
|
||||
|
||||
@ -95,29 +95,29 @@ class RenderingMixin:
|
||||
element._page_renderer = renderer
|
||||
break
|
||||
|
||||
# Draw selection handles
|
||||
if self.selected_element:
|
||||
self._draw_selection_handles()
|
||||
# Draw selection handles for all selected elements
|
||||
for element in self.selected_elements:
|
||||
self._draw_selection_handles(element)
|
||||
|
||||
# Render text overlays
|
||||
self._render_text_overlays()
|
||||
|
||||
def _draw_selection_handles(self):
|
||||
"""Draw selection handles around the selected element"""
|
||||
if not self.selected_element:
|
||||
def _draw_selection_handles(self, element):
|
||||
"""Draw selection handles around the given element"""
|
||||
if not element:
|
||||
return
|
||||
|
||||
main_window = self.window()
|
||||
if not hasattr(main_window, 'project') or not main_window.project or not main_window.project.pages:
|
||||
return
|
||||
|
||||
if not hasattr(self.selected_element, '_page_renderer'):
|
||||
if not hasattr(element, '_page_renderer'):
|
||||
return
|
||||
|
||||
renderer = self.selected_element._page_renderer
|
||||
renderer = element._page_renderer
|
||||
|
||||
elem_x, elem_y = self.selected_element.position
|
||||
elem_w, elem_h = self.selected_element.size
|
||||
elem_x, elem_y = element.position
|
||||
elem_w, elem_h = element.size
|
||||
handle_size = 8
|
||||
|
||||
x, y = renderer.page_to_screen(elem_x, elem_y)
|
||||
@ -127,10 +127,10 @@ class RenderingMixin:
|
||||
center_x = x + w / 2
|
||||
center_y = y + h / 2
|
||||
|
||||
if self.selected_element.rotation != 0:
|
||||
if element.rotation != 0:
|
||||
glPushMatrix()
|
||||
glTranslatef(center_x, center_y, 0)
|
||||
glRotatef(self.selected_element.rotation, 0, 0, 1)
|
||||
glRotatef(element.rotation, 0, 0, 1)
|
||||
glTranslatef(-w / 2, -h / 2, 0)
|
||||
x, y = 0, 0
|
||||
|
||||
@ -208,7 +208,7 @@ class RenderingMixin:
|
||||
glVertex2f(hx, hy + handle_size)
|
||||
glEnd()
|
||||
|
||||
if self.selected_element.rotation != 0:
|
||||
if element.rotation != 0:
|
||||
glPopMatrix()
|
||||
|
||||
def _render_text_overlays(self):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user