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