Skip to content

Commit

Permalink
Alignment based on position of focused item
Browse files Browse the repository at this point in the history
Last selected item has the focus (selected items are organized in a
set. So we don't have access to the "first" item).
Make all alignments based on the position of the last selected item.
  • Loading branch information
egroeper committed Nov 29, 2012
1 parent 4507fa8 commit 3cfe5f5
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions gaphor/plugins/alignment/__init__.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ def update(self, event=None):


def get_items(self): def get_items(self):
return (self._last_update and self._last_update.selected_items) or [] return (self._last_update and self._last_update.selected_items) or []
def get_focused_item(self):
return self._last_update.focused_item


def getXCoordsLeft(self, items): def getXCoordsLeft(self, items):
return [item.matrix[4] for item in items] return [item.matrix[4] for item in items]
Expand All @@ -73,7 +75,8 @@ def getYCoordsBottom(self, items):
@transactional @transactional
def align_left(self): def align_left(self):
items = self.get_items() items = self.get_items()
target_x=min(self.getXCoordsLeft(items)) fitem = self.get_focused_item()
target_x= fitem.matrix[4]
for item in items: for item in items:
x = target_x - item.matrix[4] x = target_x - item.matrix[4]
item.matrix.translate(x,0) item.matrix.translate(x,0)
Expand All @@ -84,9 +87,10 @@ def align_left(self):
@transactional @transactional
def align_center(self): def align_center(self):
items = self.get_items() items = self.get_items()
fitem = self.get_focused_item()
min_x=min(self.getXCoordsLeft(items)) min_x=min(self.getXCoordsLeft(items))
max_x=max(self.getXCoordsRight(items)) max_x=max(self.getXCoordsRight(items))
center_x = min_x + ((max_x - min_x) / 2) center_x = fitem.matrix[4] + (fitem.width / 2)
for item in items: for item in items:
x = center_x - (item.width / 2) - item.matrix[4] x = center_x - (item.width / 2) - item.matrix[4]
item.matrix.translate(x,0) item.matrix.translate(x,0)
Expand All @@ -97,7 +101,8 @@ def align_center(self):
@transactional @transactional
def align_right(self): def align_right(self):
items = self.get_items() items = self.get_items()
target_x=max(self.getXCoordsRight(items)) fitem = self.get_focused_item()
target_x= fitem.matrix[4] + fitem.width
for item in items: for item in items:
x = target_x - item.width - item.matrix[4] x = target_x - item.width - item.matrix[4]
item.matrix.translate(x,0) item.matrix.translate(x,0)
Expand All @@ -108,7 +113,8 @@ def align_right(self):
@transactional @transactional
def align_top(self): def align_top(self):
items = self.get_items() items = self.get_items()
target_y = min(self.getYCoordsTop(items)) fitem = self.get_focused_item()
target_y = fitem.matrix[5]
for item in items: for item in items:
y = target_y - item.matrix[5] y = target_y - item.matrix[5]
item.matrix.translate(0,y) item.matrix.translate(0,y)
Expand All @@ -119,9 +125,8 @@ def align_top(self):
@transactional @transactional
def align_middle(self): def align_middle(self):
items = self.get_items() items = self.get_items()
min_y = min(self.getYCoordsTop(items)) fitem = self.get_focused_item()
max_y = max(self.getYCoordsBottom(items)) middle_y = fitem.matrix[5] + (fitem.height / 2)
middle_y = max_y - min_y
for item in items: for item in items:
y = middle_y - (item.height / 2) - item.matrix[5] y = middle_y - (item.height / 2) - item.matrix[5]
item.matrix.translate(0,y) item.matrix.translate(0,y)
Expand All @@ -132,7 +137,8 @@ def align_middle(self):
@transactional @transactional
def align_bottom(self): def align_bottom(self):
items = self.get_items() items = self.get_items()
target_y = min(self.getYCoordsBottom(items)) fitem = self.get_focused_item()
target_y = fitem.matrix[5] + fitem.height
for item in items: for item in items:
y = target_y - item.height - item.matrix[5] y = target_y - item.height - item.matrix[5]
item.matrix.translate(0,y) item.matrix.translate(0,y)
Expand Down

0 comments on commit 3cfe5f5

Please sign in to comment.