45
45
from app import Rect, Point, UnionRects, InfinityRect, Trafo, Rotation, Translation, Scale
46
46
from app import UndoRedo, Undo, CreateListUndo, NullUndo, UndoAfter
48
48
import color, selinfo, pagelayout
50
50
from base import Protocols
57
57
from selection import SizeSelection, EditSelection, TrafoSelection, TrafoRectangle
59
from app.conf.const import STYLE, SELECTION, EDITED, MODE, UNDO, REDRAW, LAYOUT
59
from app.conf.const import STYLE, SELECTION, EDITED, MODE, UNDO, REDRAW, LAYOUT, PAGE
60
60
from app.conf.const import LAYER, LAYER_ORDER, LAYER_ACTIVE, GUIDE_LINES, GRID
61
61
from app.conf.const import SelectSet, SelectAdd,SelectSubtract,SelectSubobjects,\
62
62
SelectDrag, SelectGuide, Button1Mask
78
78
def __init__(self, create_layer = 0):
79
81
self.snap_grid = GridLayer()
80
82
self.snap_grid.SetDocument(self)
81
83
self.guide_layer = GuideLayer(_("Guide Lines"))
82
84
self.guide_layer.SetDocument(self)
85
layer=Layer(_("MasterLayer 1"))
86
layer.SetDocument(self)
87
layer.is_MasterLayer=1
88
self.master_layers=[layer]
84
90
# a new empty document
85
91
self.active_layer = Layer(_("Layer 1"))
86
92
self.active_layer.SetDocument(self)
87
self.layers = [self.active_layer, self.guide_layer,
93
self.layers = [self.snap_grid]+[self.active_layer] + self.master_layers + [self.guide_layer]
94
self.pages.append([self.active_layer])
90
96
# we're being created by the load module
91
97
self.active_layer = None
99
self.pages.append(self.layers)
94
101
def __del__(self):
105
112
return self.layers[idx[0]]
106
113
raise ValueError, 'invalid index %s' % `idx`
108
def AppendLayer(self, layer_name = None, *args, **kw_args):
115
def AppendLayer(self, layer_name = None, master=0, *args, **kw_args):
110
117
old_layers = self.layers[:]
111
118
if layer_name is None:
114
121
layer_name = str(layer_name)
115
122
layer = apply(Layer, (layer_name,) + args, kw_args)
116
123
layer.SetDocument(self)
117
self.layers.append(layer)
125
layer.is_MasterLayer=1
126
mlayers=self.getMasterLayers()
127
mlayers.append(layer)
128
self.layers = [self.snap_grid] + self.getRegularLayers() + mlayers + [self.guide_layer]
130
rlayers=self.getRegularLayers()
131
rlayers.append(layer)
132
self.layers = [self.snap_grid] + rlayers + self.getMasterLayers() + [self.guide_layer]
118
133
if not self.active_layer:
119
self.active_layer = layer
134
self.active_layer = layer
122
137
self.layers[:] = old_layers
124
139
script_access['AppendLayer'] = SCRIPT_OBJECT
141
def RearrangeLayers(self):
142
if not len(self.getMasterLayers()):
143
layer=Layer(_("MasterLayer 1"))
144
layer.SetDocument(self)
145
layer.is_MasterLayer=1
146
self.layers.append(layer)
147
self.layers = [self.snap_grid] + self.getRegularLayers() + self.getMasterLayers() + [self.guide_layer]
149
def getRegularLayers(self):
151
for layer in self.layers:
152
if not layer.is_SpecialLayer and not layer.is_MasterLayer:
156
def getMasterLayers(self):
158
for layer in self.layers:
159
if layer.is_MasterLayer:
163
def insert_pages(self, number=1, index=0, is_before=0):
164
for item in range(number):
166
self.pages.insert(index, self.NewPage())
168
self.setActivePage(index)
170
self.pages.insert(index+item+1, self.NewPage())
171
self.setActivePage(index+1)
173
def setActivePage(self, index):
174
self.pages[self.active_page]=self.getRegularLayers()
175
self.layers=[self.snap_grid] + self.pages[index] + self.getMasterLayers() + [self.guide_layer]
176
self.active_page=index
177
self.active_layer=(self.pages[index])[0]
179
def updateActivePage(self):
180
self.pages[self.active_page]=self.getRegularLayers()
184
new_layer=Layer(_("Layer 1"))
185
new_layer.SetDocument(self)
186
page.append(new_layer)
189
def delete_page(self, index=0):
190
if len(self.pages)==1:
192
if self.active_page and index == self.active_page:
193
self.setActivePage(index-1)
194
if not self.active_page and index == self.active_page:
195
self.setActivePage(1)
197
if self.active_page and self.active_page>index:
199
self.pages.remove(self.pages[index])
201
def delete_pages(self, number=1, index=0,is_before=0):
202
for item in range(number):
203
self.delete_page(index+is_before)
205
def move_page(self, index=0, backward=0):
206
if index==0 or index==len(self.pages)-1:
209
page=self.pages[index]
210
self.pages.remove(page)
211
self.pages.insert(index+1-2*backward, page)
212
if index==self.active_page:
213
self.active_page=self.active_page+1-2*backward
126
216
def BoundingRect(self, visible = 1, printable = 0):
209
299
return join(info, '\n')
211
301
def SaveToFile(self, file):
302
self.updateActivePage()
212
303
file.BeginDocument()
213
304
self.page_layout.SaveToFile(file)
214
305
self.write_styles(file)
215
for layer in self.layers:
216
layer.SaveToFile(file)
306
self.snap_grid.SaveToFile(file)
308
pagesnum=len(self.pages)
310
interval=100/pagesnum
311
for page in self.pages:
314
app.updateInfo(inf2=_('Saving page %u of %u')%(pagecount,pagesnum),
315
inf3=interval*pagecount)
318
l_interval=interval/layersnum
321
app.updateInfo(inf2=_('Saving page %u of %u, layer %u of %u')%
322
(pagecount,pagesnum,layercount,layersnum),
323
inf3=interval*pagecount)
324
layer.SaveToFile(file)
326
for layer in self.getMasterLayers():
327
layer.SaveToFile(file)
328
self.guide_layer.SaveToFile(file)
217
329
file.EndDocument()
219
331
def load_AppendObject(self, layer):
506
640
self.end_transaction(queue_edited = 1)
508
642
def Insert(self, object, undo_text = _("Create Object")):
509
644
if isinstance(object, guide.GuideLine):
510
645
self.add_guide_line(object)
512
647
self.begin_transaction(undo_text, clear_selection_rect = 0)
515
object.SetDocument(self)
650
if type(object) == ListType:
651
gobject = Group(object)
516
654
selected, undo = self.insert(object)
517
655
self.add_undo(undo)
518
self.add_undo(self.AddClearRect(object.bounding_rect))
656
self.add_undo(self.AddClearRect(gobject.bounding_rect))
519
657
self.__set_selection(selected, SelectSet)
658
self.add_undo(self.remove_selected())
661
for info, object in self.selection.GetInfo():
663
if type(object) == ListType:
666
objects.append(object)
667
select, undo_insert = self.insert(objects, at = info[1:], layer = info[0])
668
extracted_select+=select
669
self.add_undo(undo_insert)
670
self.__set_selection(extracted_select, SelectSet)
521
672
self.abort_transaction()
1384
1540
copies.append(obj.Duplicate())
1386
1542
if len(copies) > 1:
1387
copies = Group(copies)
1544
copy.UntieFromDocument()
1545
copy.SetDocument(None)
1390
1548
# This is ugly: Special case for internal path text objects.
1391
1549
# If the internal path text object is the only selected
1392
1550
# object, turn the copy into a normal simple text object.
1393
1551
# Thsi avoids some of the problems when you "Copy" an
1394
1552
# internal path text.
1396
if copies.is_PathTextText:
1397
properties = copies.Properties().Duplicate()
1398
copies = text.SimpleText(text = copies.Text(),
1554
if copy.is_PathTextText:
1555
properties = copy.Properties().Duplicate()
1556
copy = text.SimpleText(text = copy.Text(),
1399
1557
properties = properties)
1401
copies.UntieFromDocument()
1402
copies.SetDocument(None)
1559
copy.UntieFromDocument()
1560
copy.SetDocument(None)
1405
1565
def CopyForClipboard(self):
1476
1636
def CanUngroupAll(self):
1477
1637
infos = self.selection.GetInfo()
1478
1639
if len(infos) > 0:
1479
isGroup=infos[0][-1].is_Group
1480
for i in range(len(infos)):
1481
if infos[i][-1].is_Group:
1482
isGroup=infos[i][-1].is_Group
1640
for i in range(len(infos)):
1641
isGroup+=infos[i][-1].is_Group
1643
#isGroup=infos[0][-1].is_Group
1644
#for i in range(len(infos)):
1645
#if infos[i][-1].is_Group:
1646
#isGroup=infos[i][-1].is_Group
1483
1647
return len(infos) > 0 and isGroup
1485
1649
def UngroupSelected(self):
1498
1662
self.abort_transaction()
1500
1664
self.end_transaction()
1666
def ExtractNonGroup(self, object):
1669
for item in object.objects:
1670
objects+=self.ExtractNonGroup(item)
1672
objects.append(object)
1502
1675
def UngroupAllSelected(self):
1503
1676
if self.CanUngroupAll():
1504
1677
self.begin_transaction(_("Ungroup All"))
1507
while self.CanUngroupAll():
1510
infos = self.selection.GetInfo()
1511
self.add_undo(self.remove_selected())
1512
for i in range(len(infos)):
1513
info, group = self.selection.GetInfo()[i]
1515
objects = group.Ungroup()
1516
select, undo_insert = self.insert(objects, at = info[1:], layer = info[0])
1517
selection=selection+select
1520
select, undo_insert = self.insert(objects, at = info[1:], layer = info[0])
1521
selection.append((info, group))
1522
self.add_undo(undo_insert)
1524
self.__set_selection(selection, SelectSet)
1525
#self.SelectObject(selection, SelectSet)
1680
self.add_undo(self.remove_selected())
1682
for info, object in self.selection.GetInfo():
1683
objects = self.ExtractNonGroup(object)
1684
select, undo_insert = self.insert(objects, at = info[1:], layer = info[0])
1685
extracted_select+=select
1686
self.add_undo(undo_insert)
1687
self.__set_selection(extracted_select, SelectSet)
1527
1689
self.abort_transaction()
1529
1691
self.end_transaction()
1693
def ModifyAndCopy(self):
1695
copies=self.copy_objects(self.selection.GetObjects())
1697
self.Insert(copies, undo_text=_("Modify&Copy"))
1531
1699
def CanCreateMaskGroup(self):
1532
1700
infos = self.selection.GetInfo()
2040
2212
self.end_transaction()
2220
def CanGoToPage(self):
2221
return len(self.pages)>1
2223
def GoToPage(self, index=0):
2224
self.begin_transaction(_("Go to page"),clear_selection_rect = 0)
2227
current_page=self.active_page
2229
self.add_undo((self._return_to_page, current_page))
2230
self.setActivePage(index)
2232
self.abort_transaction()
2234
self.end_transaction()
2237
def _return_to_page(self, index):
2238
current_page=self.active_page
2239
self.setActivePage(index)
2241
return (self._return_to_page, current_page)
2244
def InsertPages(self, number=1, index=0, is_before=0):
2246
self.begin_transaction(_("Insert Pages"), clear_selection_rect = 0)
2248
self.begin_transaction(_("Insert Page"), clear_selection_rect = 0)
2251
for_del=abs(is_before-1)
2252
self.add_undo((self._delete_pages,number,index,for_del))
2253
self.insert_pages(number,index,is_before)
2255
self.abort_transaction()
2257
self.end_transaction()
2260
def _insert_pages(self,number,index,is_before):
2261
self.insert_pages(number,index,is_before)
2263
return (self._delete_pages,number,index,is_before)
2265
def _delete_pages(self, number=1, index=0,is_before=0):
2266
self.delete_pages(number,index,is_before)
2268
return (self._insert_pages,number,index,is_before)
2271
def CanDeletePage(self,index):
2272
return 0 <= index < len(self.pages) and len(self.pages) > 1
2274
def CanBePageDeleting(self):
2275
return len(self.pages) > 1
2277
def DeletePage(self, index=0):
2278
if self.CanDeletePage(index):
2279
self.begin_transaction(_("Delete Page"), clear_selection_rect = 0)
2282
self.add_undo((self._insert_page,index,self.pages[index]))
2283
self.delete_page(index)
2285
self.abort_transaction()
2287
self.end_transaction()
2290
def _insert_page(self,index,page):
2291
current_page = self.pages[self.active_page]
2292
self.pages.insert(index,page)
2293
self.active_page = self.pages.index(current_page)
2296
return (self._delete_page,index,page)
2298
def _delete_page(self,index,page):
2299
current_page = self.pages[self.active_page]
2300
self.pages.remove(page)
2301
self.active_page = self.pages.index(current_page)
2304
return (self._insert_page,index,page)
2046
2311
def Layers(self):