black formatting
Python CI / test (push) Successful in 1m20s
Lint / lint (push) Successful in 1m4s
Tests / test (3.11) (push) Successful in 1m27s
Tests / test (3.12) (push) Successful in 2m25s
Tests / test (3.13) (push) Successful in 2m52s
Tests / test (3.14) (push) Successful in 1m9s
Python CI / test (push) Successful in 1m20s
Lint / lint (push) Successful in 1m4s
Tests / test (3.11) (push) Successful in 1m27s
Tests / test (3.12) (push) Successful in 2m25s
Tests / test (3.13) (push) Successful in 2m52s
Tests / test (3.14) (push) Successful in 1m9s
This commit is contained in:
@@ -8,159 +8,159 @@ from pyPhotoAlbum.commands import ChangeZOrderCommand
|
||||
|
||||
class ZOrderOperationsMixin:
|
||||
"""Mixin providing z-order/layer control operations"""
|
||||
|
||||
|
||||
@ribbon_action(
|
||||
label="Bring to Front",
|
||||
tooltip="Bring selected element to front",
|
||||
tab="Arrange",
|
||||
group="Order",
|
||||
shortcut="Ctrl+Shift+]",
|
||||
requires_selection=True
|
||||
requires_selection=True,
|
||||
)
|
||||
def bring_to_front(self):
|
||||
"""Bring selected element to front (end of list)"""
|
||||
if not self.gl_widget.selected_element:
|
||||
return
|
||||
|
||||
|
||||
current_page = self.get_current_page()
|
||||
if not current_page:
|
||||
return
|
||||
|
||||
|
||||
element = self.gl_widget.selected_element
|
||||
elements = current_page.layout.elements
|
||||
|
||||
|
||||
if element not in elements:
|
||||
return
|
||||
|
||||
|
||||
old_index = elements.index(element)
|
||||
new_index = len(elements) - 1
|
||||
|
||||
|
||||
if old_index == new_index:
|
||||
self.show_status("Element is already at front", 2000)
|
||||
return
|
||||
|
||||
|
||||
# Create and execute command
|
||||
cmd = ChangeZOrderCommand(current_page.layout, element, old_index, new_index)
|
||||
self.project.history.execute(cmd)
|
||||
|
||||
|
||||
self.update_view()
|
||||
self.show_status("Brought element to front (Ctrl+Z to undo)", 2000)
|
||||
print(f"Brought element to front: {old_index} → {new_index}")
|
||||
|
||||
|
||||
@ribbon_action(
|
||||
label="Send to Back",
|
||||
tooltip="Send selected element to back",
|
||||
tab="Arrange",
|
||||
group="Order",
|
||||
shortcut="Ctrl+Shift+[",
|
||||
requires_selection=True
|
||||
requires_selection=True,
|
||||
)
|
||||
def send_to_back(self):
|
||||
"""Send selected element to back (start of list)"""
|
||||
if not self.gl_widget.selected_element:
|
||||
return
|
||||
|
||||
|
||||
current_page = self.get_current_page()
|
||||
if not current_page:
|
||||
return
|
||||
|
||||
|
||||
element = self.gl_widget.selected_element
|
||||
elements = current_page.layout.elements
|
||||
|
||||
|
||||
if element not in elements:
|
||||
return
|
||||
|
||||
|
||||
old_index = elements.index(element)
|
||||
new_index = 0
|
||||
|
||||
|
||||
if old_index == new_index:
|
||||
self.show_status("Element is already at back", 2000)
|
||||
return
|
||||
|
||||
|
||||
# Create and execute command
|
||||
cmd = ChangeZOrderCommand(current_page.layout, element, old_index, new_index)
|
||||
self.project.history.execute(cmd)
|
||||
|
||||
|
||||
self.update_view()
|
||||
self.show_status("Sent element to back (Ctrl+Z to undo)", 2000)
|
||||
print(f"Sent element to back: {old_index} → {new_index}")
|
||||
|
||||
|
||||
@ribbon_action(
|
||||
label="Bring Forward",
|
||||
tooltip="Bring selected element forward one layer",
|
||||
tab="Arrange",
|
||||
group="Order",
|
||||
shortcut="Ctrl+]",
|
||||
requires_selection=True
|
||||
requires_selection=True,
|
||||
)
|
||||
def bring_forward(self):
|
||||
"""Move selected element forward one position in list"""
|
||||
if not self.gl_widget.selected_element:
|
||||
return
|
||||
|
||||
|
||||
current_page = self.get_current_page()
|
||||
if not current_page:
|
||||
return
|
||||
|
||||
|
||||
element = self.gl_widget.selected_element
|
||||
elements = current_page.layout.elements
|
||||
|
||||
|
||||
if element not in elements:
|
||||
return
|
||||
|
||||
|
||||
old_index = elements.index(element)
|
||||
new_index = old_index + 1
|
||||
|
||||
|
||||
if new_index >= len(elements):
|
||||
self.show_status("Element is already at front", 2000)
|
||||
return
|
||||
|
||||
|
||||
# Create and execute command
|
||||
cmd = ChangeZOrderCommand(current_page.layout, element, old_index, new_index)
|
||||
self.project.history.execute(cmd)
|
||||
|
||||
|
||||
self.update_view()
|
||||
self.show_status("Brought element forward (Ctrl+Z to undo)", 2000)
|
||||
print(f"Brought element forward: {old_index} → {new_index}")
|
||||
|
||||
|
||||
@ribbon_action(
|
||||
label="Send Backward",
|
||||
tooltip="Send selected element backward one layer",
|
||||
tab="Arrange",
|
||||
group="Order",
|
||||
shortcut="Ctrl+[",
|
||||
requires_selection=True
|
||||
requires_selection=True,
|
||||
)
|
||||
def send_backward(self):
|
||||
"""Move selected element backward one position in list"""
|
||||
if not self.gl_widget.selected_element:
|
||||
return
|
||||
|
||||
|
||||
current_page = self.get_current_page()
|
||||
if not current_page:
|
||||
return
|
||||
|
||||
|
||||
element = self.gl_widget.selected_element
|
||||
elements = current_page.layout.elements
|
||||
|
||||
|
||||
if element not in elements:
|
||||
return
|
||||
|
||||
|
||||
old_index = elements.index(element)
|
||||
new_index = old_index - 1
|
||||
|
||||
|
||||
if new_index < 0:
|
||||
self.show_status("Element is already at back", 2000)
|
||||
return
|
||||
|
||||
|
||||
# Create and execute command
|
||||
cmd = ChangeZOrderCommand(current_page.layout, element, old_index, new_index)
|
||||
self.project.history.execute(cmd)
|
||||
|
||||
|
||||
self.update_view()
|
||||
self.show_status("Sent element backward (Ctrl+Z to undo)", 2000)
|
||||
print(f"Sent element backward: {old_index} → {new_index}")
|
||||
|
||||
|
||||
@ribbon_action(
|
||||
label="Swap Order",
|
||||
tooltip="Swap z-order of two selected elements",
|
||||
@@ -168,21 +168,21 @@ class ZOrderOperationsMixin:
|
||||
group="Order",
|
||||
shortcut="Ctrl+Shift+X",
|
||||
requires_selection=True,
|
||||
min_selection=2
|
||||
min_selection=2,
|
||||
)
|
||||
def swap_order(self):
|
||||
"""Swap the z-order of two selected elements"""
|
||||
if len(self.gl_widget.selected_elements) != 2:
|
||||
self.show_status("Please select exactly 2 elements to swap", 2000)
|
||||
return
|
||||
|
||||
|
||||
current_page = self.get_current_page()
|
||||
if not current_page:
|
||||
return
|
||||
|
||||
|
||||
elements = current_page.layout.elements
|
||||
selected = list(self.gl_widget.selected_elements)
|
||||
|
||||
|
||||
# Get indices of both elements
|
||||
try:
|
||||
index1 = elements.index(selected[0])
|
||||
@@ -190,10 +190,10 @@ class ZOrderOperationsMixin:
|
||||
except ValueError:
|
||||
self.show_status("Selected elements not found on current page", 2000)
|
||||
return
|
||||
|
||||
|
||||
# Swap them in the list
|
||||
elements[index1], elements[index2] = elements[index2], elements[index1]
|
||||
|
||||
|
||||
self.update_view()
|
||||
self.show_status(f"Swapped z-order of elements", 2000)
|
||||
print(f"Swapped elements at indices {index1} and {index2}")
|
||||
|
||||
Reference in New Issue
Block a user