Package mcbase :: Package libs :: Package designeditor :: Module plugins
[hide private]
[frames] | no frames]

Source Code for Module mcbase.libs.designeditor.plugins

  1  # -*- coding: utf-8 -*- 
  2   
  3  ########################################################################## 
  4  # plugins.py 
  5  # 
  6  # Editörün farklı modlarda çalışabilmesini sağlar. 
  7  # 
  8  # (C) 2007 Likya Yazılım ve Bilişim Hizmetleri Ltd. Şti. 
  9  ########################################################################## 
 10   
 11  from PyQt4.QtCore import * 
 12  from PyQt4.QtGui import * 
 13   
 14  from tools import * 
 15  from constants import * 
 16  from units import * 
 17  from sizehandler import * 
 18  from reportitem import * 
 19  from field import * 
 20  from textarea import * 
 21  from line import * 
 22  from rectangle import * 
 23  from image import  * 
 24  from barcode import  * 
 25   
26 -class Plugin:
27
28 - def __init__(self):
29 ''' 30 Temel tanımlamaları yapar. 31 ''' 32 self._unit = None 33 self._unitName = '' 34 self._frameStartSuffix = '' 35 self._allFields = [] 36 self._editor = None
37
38 - def setAllFields(self, allFields):
39 self._allFields = allFields
40
41 - def allFields(self):
42 return self._allFields
43
44 - def setEditor(self, editor):
45 self._editor = editor
46
47 - def editor(self):
48 return self._editor
49
50 - def gridDx(self):
51 return self._unit.pointWidth(self.gridStep())
52
53 - def gridDy(self):
54 return self._unit.pointHeight(self.gridStep())
55
56 - def alignToGrid(self, pos, addOne=True):
57 dx = self.gridDx() 58 dy = self.gridDy() 59 60 if pos.x() % dx > dx/2.0: 61 x = pos.x() + (dx - pos.x() % dx) 62 63 else: 64 x = pos.x() - (pos.x() % dx) 65 66 if pos.y() % dy > dy/2.0: 67 y = pos.y() + (dy - pos.y() % dy) 68 69 else: 70 y = pos.y() - (pos.y() % dy) 71 72 if addOne: 73 x += 1 74 y += 1 75 76 return QPointF(x, y)
77
78 - def unit(self):
79 ''' 80 Geçerli birim dönüştürme sınıfını döndürür. 81 ''' 82 return self._unit
83
84 - def frameHeight(self, ratio):
85 ''' 86 Çerçeve yüksekliğinin oranına karşı birim döndürür. 87 ''' 88 return ratio * self.defaultFieldHeight()
89
90 - def unitName(self):
91 return self._unitName
92
93 - def frameStartSuffix(self):
94 return self._frameStartSuffix
95
96 - def supportsFrameHeader(self):
97 return True
98
99 - def supportsFrameResizeBar(self):
100 return True
101 102
103 -class TextReportPlugin(Plugin):
104
105 - def __init__(self, monospaceFont):
106 ''' 107 Karakter boylarına göre çalışan editör eklentisi. 108 ''' 109 self._font = monospaceFont 110 self._unit = CharacterUnit(monospaceFont) 111 self._unitName = tr('karakter') 112 self._frameStartSuffix = tr('satır')
113
114 - def designFileExtension(self):
115 return 'dsg'
116
117 - def font(self):
118 return self._font
119
120 - def removableActions(self):
121 actions = [ 122 'addimage', 123 'addbarcode', 124 'drawcircle', 125 'drawrectangle', 126 'aligngrid', 127 'alignhcenter', 128 'alignvcenter', 129 'fitauto', 130 'fitgrid', 131 'fittallest', 132 'fitshortest', 133 ] 134 135 return actions
136
137 - def gridStep(self):
138 return 1
139
140 - def gridMethod(self):
141 return 'dots'
142
143 - def requiresGridPosition(self):
144 return True
145
146 - def defaultDesignSettings(self):
148
149 - def frameBodyMargin(self):
150 return 2
151
152 - def sizeHandlers(self):
153 handlerTypes = [ 154 SizeHandler.LEFT_MIDDLE, 155 SizeHandler.RIGHT_MIDDLE, 156 ] 157 158 return handlerTypes
159
160 - def paintingAlignmentFlags(self, properties):
161 ''' 162 Alanın çizimi sırasındaki alignment flaglerini verir. 163 ''' 164 flags = Qt.AlignVCenter | Qt.AlignLeft 165 166 return flags
167
168 - def designSettingsMeta(self):
169 ''' 170 Tasarım ayarlarının ne olacağını söyler. 171 ''' 172 propertyMeta = [ 173 ('Sayfa Boyu', self._unitName, 'pageheight', 'PSpinBox', (1, 1000)), 174 ('Sayfa Genişliği', self._unitName, 'pagewidth', 'PSpinBox', (1, 1000)), 175 ('Yazıcı Tercihi', '', 'yazicitercihi', 'PComboBox', ([ 176 (Constants.PRINTER_LASER, 'Lazer veya M. Püskürtmeli'), 177 (Constants.PRINTER_MATRIX, 'Nokta Vuruşlu'), 178 ],)), 179 ('Sayfa Sonu Bas', '', 'sayfasonubas', 'PComboBox', ([ 180 (Constants.PRINT_ENDOFPAGE, 'Evet'), 181 (Constants.DONT_PRINT_ENDOFPAGE, 'Hayır'), 182 ],)), 183 ('Sayfa Yönü', '', 'sayfayonu', 'PComboBox', ([ 184 (Constants.ORIENTATION_PORTRAIT, 'Dikey (Portrait)'), 185 (Constants.ORIENTATION_LANDSCAPE, 'Yatay (Landscape)'), 186 ],)), 187 ('Baskı Renkleri', '', 'renklibaski', 'PComboBox', ([ 188 ('True', 'Renkli Baskı'), 189 ('False', 'Siyah/Beyaz Baskı'), 190 ],)), 191 ('Şeritli Satırlar', '', 'cizgilisatirlar', 'PComboBox', ([ 192 (Constants.CIZGILI_SATIRLAR_VAR, 'Evet'), 193 (Constants.CIZGILI_SATIRLAR_YOK, 'Hayır'), 194 ],)), 195 ('Şerit Rengi', '', 'seritrengi', 'PColorPicker', ()), 196 ('Şerit Başlangıç', self._unitName, 'seritbaslangic', 'PSpinBox', (0, 1000)), 197 ('Şerit Bitiş', self._unitName, 'seritbitis', 'PSpinBox', (0, 1000)), 198 ('Kağıt Türü', '', 'kagitturu', 'PComboBox', (Constants.PAPER_TYPES,)), 199 ('Sol Boşluk', self._unitName, 'solbosluk', 'PSpinBox', (0, 1000)), 200 ('Kopya Sayısı', '', 'kopyasayisi', 'PSpinBox', (1, 100)), 201 ('Son Kalem Satırı', tr('%s (Maksimum için 0 (Sıfır))') % self._unitName, 'maxkalemsatiri', 'PSpinBox', (0, 10000)), 202 ] 203 204 return propertyMeta
205
206 - def textAreaPropertyMeta(self):
207 ''' 208 Yazı alanların özellik editör tanımını döndürür. 209 ''' 210 meta = [ 211 ('Alan Yazısı', '', 'text', 'PLineEdit', ()), 212 ] 213 214 return meta
215
217 ''' 218 Yazı alanların default özellikleri 219 ''' 220 return Constants.DEFAULT_TEXT_TEXTAREA_PROPERTIES
221
222 - def fieldPropertyMeta(self, format):
223 ''' 224 İstenilen formata göre editör ayarlarını verir. 225 ''' 226 text = [ 227 ('Alan Adı', '', 'name', 'PLabel', ()), 228 ('Yaslama', '', 'justify', 'PComboBox', ([('ljust','Sola'), ('rjust','Sağa'), ('center','Orta')],)), 229 ('İlk Karakter', '', 'first', 'PSpinBox', (0, 1000)), 230 ('Son Karakter', '', 'last', 'PSpinBox', (0, 1000)), 231 ] 232 233 number = text + [ 234 ('Küsürat', '', 'precision', 'PSpinBox', (0, 7)), 235 ('Yuvarlama', '', 'round', 'PComboBox', ([('T', 'Olsun'), ('F', 'Olmasın')],)), 236 ('Gösterim', '', 'display', 'PComboBox', ([('digit', 'Rakamla'), ('ytl', 'Yazıyla (YTL)'), ('euro', 'Yazıyla (AVRO)'), ('usd', 'Yazıyla (USD)')],)), 237 ('Sıfıra Eşitse', '', 'zero', 'PComboBox', ([('show', 'Göster'), ('hide', 'Gösterme')],)), 238 ('Gruplamada', '', 'groupsum', 'PComboBox', ([('nosum', 'Toplam Alma'), ('sum', 'Alt Toplam Al')],)), 239 ] 240 241 date = text + [ 242 ('Biçimi', '', 'dateformat', 'PComboBox', ([ 243 ('%d.%m.%Y', 'GG.AA.YYYY'), 244 ('%Y.%m.%d', 'YYYY.AA.GG'), 245 ('%d-%m-%Y', 'GG-AA-YYYY'), 246 ('%Y-%m-%d', 'YYYY-AA-GG'), 247 ('%d/%m/%Y', 'GG/AA/YYYY'), 248 ('%Y/%m/%d', 'YYYY/AA/GG'), 249 ('%d.%m', 'GG.AA'), 250 ('%d-%m', 'GG-AA'), 251 ('%d/%m', 'GG/AA'), 252 ],)), 253 ] 254 255 time = text + [ 256 ('Biçimi', '', 'timeformat', 'PComboBox', ([ 257 ('%H:%M:%S', 'SS:DD:NN'), 258 ('%H:%M', 'SS:DD'), 259 ],)), 260 ] 261 262 listtext = text + [ 263 ('Liste İndeksi', '', 'index', 'PSpinBox', (1, 1000)), 264 ] 265 266 listnumber = number + [ 267 ('Liste İndeksi', '', 'index', 'PSpinBox', (1, 1000)), 268 ] 269 270 listdate = date + [ 271 ('Liste İndeksi', '', 'index', 'PSpinBox', (1, 1000)), 272 ] 273 274 listtime = time + [ 275 ('Liste İndeksi', '', 'index', 'PSpinBox', (1, 1000)), 276 ] 277 278 # Sadece sayısal satır alanlarını listele. 279 numberRowFields = [field[:2] for field in self._allFields \ 280 if field[Constants.FIELD_ATTRIBUTES_FORMAT] == 'number' \ 281 and field[Constants.FIELD_ATTRIBUTES_STATUS] == 'row'] 282 283 formulaFields = self._editor.formulaFields(Constants.FRAME_CODE_REPORT_ROWS) 284 formulaFields = map(lambda x: (x.code(), x.text()), formulaFields) 285 286 numberRowFields += formulaFields 287 288 total = number + [ 289 ('Sütun', '', 'field', 'PComboBox', (numberRowFields,)), 290 ('Toplama Yöntemi', '', 'summethod', 'PComboBox', ([ 291 ('real', 'Gerçek Değerler'), 292 ('seen', 'Görünen Değerler') 293 ],)), 294 ] 295 296 average = number + [ 297 ('Sütun', '', 'field', 'PComboBox', (numberRowFields,)), 298 ] 299 300 # Bağıl tarih 301 rdate = date + [ 302 ('Gün Farkı', '', 'days', 'PSpinBox', (-1000, 1000)), 303 ] 304 305 # Sayısal formül alanı, 306 numberformula = number + [ 307 ('Formül', '', 'formula', 'PFormula', ()), 308 ] 309 # Formül alanın değiştirilebilir olmasını sağlıyoruz. 310 numberformula = [ 311 ('Alan Adı', '', 'name', 'PLineEdit', ()), 312 ] + numberformula[1:] 313 314 formatTable = { 315 'text': text, 316 'number': number, 317 'date': date, 318 'time': time, 319 'total': total, 320 'average': average, 321 'rdate': rdate, 322 'numberformula': numberformula, 323 'listtext': listtext, 324 'listnumber': listnumber, 325 'listdate': listdate, 326 'listtime': listtime, 327 } 328 329 return formatTable[format]
330
331 - def fieldDefaultProperties(self, format):
333
334 - def defaultFieldHeight(self):
335 ''' 336 Öntanımlı alan yüksekliği 337 ''' 338 return 1
339
340 - def defaultFieldWidth(self):
341 ''' 342 Öntanımlı alan genişliği 343 ''' 344 return 12
345
346 - def rulerModulo(self):
347 ''' 348 Cetvel üzerindeki rakamların nereden sonra sıfırlanacağını söyler. 349 ''' 350 return 100
351
352 - def dumpFrameItems(self, frame):
353 ''' 354 Çerçeve içindeki nesneleri dict'e dump eder. 355 ''' 356 # Çerçeve içindeki toplam satır ve sütun sayısını belirliyoruz. 357 rowCount = self._unit.unitHeight(frame.bodyHeight()) 358 columnCount = self._unit.unitWidth(frame.width()) 359 360 # Boşluklar ve satır sonları için tek bir dict oluşturalım. 361 emptySpace = Constants.FORM_ELEMENT_SPACE 362 newLine = Constants.FORM_ELEMENT_NEWLINE 363 364 # Çerçeve alanı kadar boşluk oluşturuyoruz. 365 items = [emptySpace] * columnCount + [newLine] 366 items *= rowCount 367 368 # Çerçeve içindeki nesneleri, koordinatlarına göre sondan başa doğru 369 # düz bir çizgi üzerinde sıralıyoruz. 370 linePlace = lambda a: self._unit.unitHeight(a.pos().y()) * columnCount + self._unit.unitWidth(a.pos().x()) 371 reportItems = frame.body().children() 372 reportItems = filter(lambda x: isinstance(x, ReportItem), reportItems) 373 reportItems.sort(lambda a, b: cmp(linePlace(a), linePlace(b)), reverse=True) 374 375 # Başka bir nesne ile kesişen nesneleri buluyoruz. 376 for reportItem in reportItems: 377 collidingRects = reportItem.collidingRects() 378 379 if collidingRects: 380 frameTitle = frame.title() 381 QMessageBox.information(self._editor, 382 tr('Kesişen Alanlar'), 383 tr('%s çerçevesi içinde kesişen alanlar veya yazılar var. Karakter tasarım içinde kesişen nesne olmamalıdır.') % frameTitle) 384 385 raise Exception('Kesişen nesneler var') 386 387 # Sondaki nesneden başlayarak tasarım kaydına nesneleri ekliyoruz. 388 for reportItem in reportItems: 389 row = self._unit.unitHeight(reportItem.pos().y()) 390 column = self._unit.unitWidth(reportItem.pos().x()) 391 width = self._unit.unitWidth(reportItem.width()) 392 393 # Her satır sonunda newLine olduğu için +1 yapıyoruz. 394 index = row * (columnCount + 1) + column 395 396 # Genişliği kadar boşluk siliyoruz. 397 for i in xrange(width - 1): 398 del items[index] 399 400 items[index] = reportItem.dumpToDict() 401 402 return items
403
404 - def dumpField(self, field):
405 ''' 406 Alanın özelliklerini bir dict'e atar. 407 ''' 408 dump = {} 409 410 dump['class'] = 'FormField' 411 dump['code'] = field.code() 412 dump['name'] = field.text() 413 dump['format'] = field.format() 414 dump['status'] = field.status() 415 dump['type'] = field.fieldType() 416 dump['width'] = self.unit().unitWidth(field.width()) 417 dump['properties'] = field.properties() 418 419 return dump
420
421 - def dumpTextArea(self, textArea):
422 ''' 423 Yazı alanının özelliklerini dict'e yazar. 424 ''' 425 dump = {} 426 427 dump['class'] = 'FormText' 428 dump['text'] = textArea.text() 429 430 return dump
431
432 - def getItemClass(self, className):
433 ''' 434 Sınıf ismi verilen sınıfı döndürür. 435 ''' 436 if className == 'FormField': 437 return Field 438 439 elif className == 'FormText': 440 return TextArea
441
442 - def restoreFrameFromDict(self, frame, frameDict, editor):
443 ''' 444 Bir çerçevenin alanlarını dict içerisinden alır ve çerçeveye ekler. 445 ''' 446 frameItems = frameDict['items'] 447 448 # Temel tanımlamaları yapıyoruz. 449 currentRow = 0 450 currentColumn = 0 451 452 # Çerçeve içindeki nesneleri de tek tek oluştur. 453 for itemDump in frameItems: 454 455 # Boşluk ise 456 if itemDump == Constants.FORM_ELEMENT_SPACE: 457 currentColumn += 1 458 459 # Yeni satır ise 460 elif itemDump == Constants.FORM_ELEMENT_NEWLINE: 461 currentColumn = 0 462 currentRow += 1 463 464 # Bir nesne ise 465 elif type(itemDump) == dict: 466 467 # Nesneyi yeniden oluştur. 468 itemClass = self.getItemClass(itemDump['class']) 469 x = self.unit().pointWidth(currentColumn) 470 y = self.unit().pointHeight(currentRow) 471 472 itemObject = itemClass.createFromDict(itemDump, frame.body(), editor, x, y) 473 474 # Eğer bir alan veya yazı ise 475 if itemObject is not None: 476 currentColumn += self.unit().unitWidth(itemObject.width())
477
478 - def restoreFieldFromDict(self, field, dump):
479 ''' 480 Bir alan nesnesinin özelliklerini dump'tan alarak, nesneye atar. 481 ''' 482 width = self.unit().pointWidth(float(dump['width'])) 483 height = self.gridDy() 484 485 field.setWidth(width) 486 field.setHeight(height) 487 488 for property, value in dump['properties'].items(): 489 field.setProperty(property, value) 490 491 field.setPos(self.alignToGrid(field.pos()))
492
493 - def restoreTextAreaFromDict(self, textArea, dump):
494 ''' 495 Bir alan nesnesinin özelliklerini dump'tan alarak, nesneye atar. 496 ''' 497 textArea.setText(dump['text']) 498 height = self.gridDy() 499 textArea.setHeight(height) 500 textArea.setPos(self.alignToGrid(textArea.pos()))
501 502
503 -class GraphicsReportPlugin(Plugin):
504
505 - def __init__(self):
506 ''' 507 Milimetre uzunluklarına göre çalışan 508 ''' 509 self._font = QFont() 510 self._unit = MilimeterUnit() 511 self._unitName = 'mm' 512 self._frameStartSuffix = 'mm' 513 self._gridStep = 5
514
515 - def designFileExtension(self):
516 return 'gdsg'
517
518 - def font(self):
519 return self._font
520
521 - def removableActions(self):
522 return []
523
524 - def setGridStep(self, gridStep):
525 self._gridStep = gridStep
526
527 - def gridStep(self):
528 return self._gridStep
529
530 - def gridMethod(self):
531 return 'lines'
532
533 - def requiresGridPosition(self):
534 return False
535
536 - def defaultDesignSettings(self):
538
539 - def frameBodyMargin(self):
540 return 0
541
542 - def sizeHandlers(self):
555
556 - def paintingAlignmentFlags(self, properties):
557 ''' 558 Alanın çizimi sırasındaki alignment flaglerini verir. 559 ''' 560 map = { 561 'ljust': Qt.AlignLeft, 562 'rjust': Qt.AlignRight, 563 'hcenter': Qt.AlignHCenter, 564 'tjust': Qt.AlignTop, 565 'bjust': Qt.AlignBottom, 566 'vcenter': Qt.AlignVCenter, 567 } 568 569 flags = 0 570 flags |= map[properties['hjustify']] 571 flags |= map[properties['vjustify']] 572 573 if properties['wordwrap'] == 'T': 574 flags |= Qt.TextWordWrap 575 576 return flags
577
578 - def designSettingsMeta(self):
579 ''' 580 Tasarım ayarlarının ne olacağını söyler. 581 ''' 582 propertyMeta = [ 583 ('Sayfa Boyu', self._unitName, 'pageheight', 'PSpinBox', (1, 1000)), 584 ('Sayfa Genişliği', self._unitName, 'pagewidth', 'PSpinBox', (1, 1000)), 585 ('Yazıcı Tercihi', '', 'yazicitercihi', 'PComboBox', ([ 586 (Constants.PRINTER_LASER, 'Lazer veya M. Püskürtmeli'), 587 ],)), 588 ('Sayfa Yönü', '', 'sayfayonu', 'PComboBox', ([ 589 (Constants.ORIENTATION_PORTRAIT, 'Dikey (Portrait)'), 590 (Constants.ORIENTATION_LANDSCAPE, 'Yatay (Landscape)'), 591 ],)), 592 ('Baskı Renkleri', '', 'renklibaski', 'PComboBox', ([ 593 ('True', 'Renkli Baskı'), 594 ('False', 'Siyah/Beyaz Baskı'), 595 ],)), 596 ('Şeritli Satırlar', '', 'cizgilisatirlar', 'PComboBox', ([ 597 (Constants.CIZGILI_SATIRLAR_VAR, 'Evet'), 598 (Constants.CIZGILI_SATIRLAR_YOK, 'Hayır'), 599 ],)), 600 ('Şerit Rengi', '', 'seritrengi', 'PColorPicker', ()), 601 ('Şerit Başlangıç', self._unitName, 'seritbaslangic', 'PSpinBox', (0, 1000)), 602 ('Şerit Bitiş', self._unitName, 'seritbitis', 'PSpinBox', (0, 1000)), 603 ('Kağıt Türü', '', 'kagitturu', 'PComboBox', (Constants.PAPER_TYPES,)), 604 ('Sol Boşluk', self._unitName, 'solbosluk', 'PSpinBox', (0, 1000)), 605 ('Kopya Sayısı', '', 'kopyasayisi', 'PSpinBox', (1, 100)), 606 ('Son Kalem Satırı', tr('%s (Maksimum için 0 (Sıfır))') % self._unitName, 'maxkalemsatiri', 'PSpinBox', (0, 10000)), 607 ] 608 609 return propertyMeta
610
611 - def textAreaPropertyMeta(self):
612 ''' 613 Yazı alanların özellik editör tanımını döndürür. 614 ''' 615 fontPoints = [6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72] 616 fontPointsCombo = map(lambda x: (x, '%d pt' % x), fontPoints) 617 618 meta = [ 619 ('Alan Yazısı', '', 'text', 'PLineEdit', ()), 620 ('Yatay Yaslama', '', 'hjustify', 'PComboBox', ([('ljust','Sola'), ('rjust','Sağa'), ('hcenter','Orta')],)), 621 ('Dikey Yaslama', '', 'vjustify', 'PComboBox', ([('tjust','Üste'), ('bjust','Aşağıya'), ('vcenter','Orta')],)), 622 ('Sözcük Kaydır', '', 'wordwrap', 'PComboBox', ([('T','Evet'), ('F','Hayır')],)), 623 ('Font', '', 'fontfamily', 'PFontComboBox', ()), 624 ('Font Boyu', '', 'fontsize', 'PComboBox', (fontPointsCombo,)), 625 ('Font Koyuluk', '', 'fontbold', 'PComboBox', ([('F', 'Normal'), ('T', 'Koyu')],)), 626 ('Font Eğiklik', '', 'fontitalic', 'PComboBox', ([('F', 'Normal'), ('T', 'Eğik')],)), 627 ('Zemin Rengi', '', 'background', 'PColorPicker', ()), 628 ('Kalem Rengi', '', 'foreground', 'PColorPicker', ()), 629 ('Çerçeve Çiz', '', 'drawframe', 'PComboBox', ([('T','Evet'), ('F','Hayır')],)), 630 ] 631 632 return meta
633
635 ''' 636 Yazı alanların default özellikleri 637 ''' 638 return Constants.DEFAULT_GRAPHICS_TEXTAREA_PROPERTIES
639
640 - def fieldPropertyMeta(self, format):
641 ''' 642 İstenilen formata göre editör ayarlarını verir. 643 ''' 644 fontPoints = [6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72] 645 fontPointsCombo = map(lambda x: (x, '%d pt' % x), fontPoints) 646 647 text = [ 648 ('Alan Adı', '', 'name', 'PLabel', ()), 649 ('Yatay Yaslama', '', 'hjustify', 'PComboBox', ([('ljust','Sola'), ('rjust','Sağa'), ('hcenter','Orta')],)), 650 ('Dikey Yaslama', '', 'vjustify', 'PComboBox', ([('tjust','Üste'), ('bjust','Aşağıya'), ('vcenter','Orta')],)), 651 ('Sözcük Kaydır', '', 'wordwrap', 'PComboBox', ([('T','Evet'), ('F','Hayır')],)), 652 ('Font', '', 'fontfamily', 'PFontComboBox', ()), 653 ('Font Boyu', '', 'fontsize', 'PComboBox', (fontPointsCombo,)), 654 ('Font Koyuluk', '', 'fontbold', 'PComboBox', ([('F', 'Normal'), ('T', 'Koyu')],)), 655 ('Font Eğiklik', '', 'fontitalic', 'PComboBox', ([('F', 'Normal'), ('T', 'Eğik')],)), 656 ('Zemin Rengi', '', 'background', 'PColorPicker', ()), 657 ('Kalem Rengi', '', 'foreground', 'PColorPicker', ()), 658 ('Çerçeve Çiz', '', 'drawframe', 'PComboBox', ([('T','Evet'), ('F','Hayır')],)), 659 ('İlk Karakter', '', 'first', 'PSpinBox', (0, 1000)), 660 ('Son Karakter', '', 'last', 'PSpinBox', (0, 1000)), 661 ] 662 663 number = text + [ 664 ('Küsürat', '', 'precision', 'PSpinBox', (0, 7)), 665 ('Yuvarlama', '', 'round', 'PComboBox', ([('T', 'Olsun'), ('F', 'Olmasın')],)), 666 ('Gösterim', '', 'display', 'PComboBox', ([('digit', 'Rakamla'), ('ytl', 'Yazıyla (YTL)'), ('euro', 'Yazıyla (AVRO)'), ('usd', 'Yazıyla (USD)')],)), 667 ('Sıfıra Eşitse', '', 'zero', 'PComboBox', ([('show', 'Göster'), ('hide', 'Gösterme')],)), 668 ('Gruplamada', '', 'groupsum', 'PComboBox', ([('nosum', 'Toplam Alma'), ('sum', 'Alt Toplam Al')],)), 669 ] 670 671 # Sayısal formül alanı, 672 numberformula = number + [ 673 ('Formül', '', 'formula', 'PFormula', ()), 674 ] 675 # Formül alanın değiştirilebilir olmasını sağlıyoruz. 676 numberformula = [ 677 ('Alan Adı', '', 'name', 'PLineEdit', ()), 678 ] + numberformula[1:] 679 680 date = text + [ 681 ('Biçimi', '', 'dateformat', 'PComboBox', ([ 682 ('%d.%m.%Y', 'GG.AA.YYYY'), 683 ('%Y.%m.%d', 'YYYY.AA.GG'), 684 ('%d-%m-%Y', 'GG-AA-YYYY'), 685 ('%Y-%m-%d', 'YYYY-AA-GG'), 686 ('%d/%m/%Y', 'GG/AA/YYYY'), 687 ('%Y/%m/%d', 'YYYY/AA/GG'), 688 ('%d.%m', 'GG.AA'), 689 ('%d-%m', 'GG-AA'), 690 ('%d/%m', 'GG/AA'), 691 ],)), 692 ] 693 694 time = text + [ 695 ('Biçimi', '', 'timeformat', 'PComboBox', ([ 696 ('%H:%M:%S', 'SS:DD:NN'), 697 ('%H:%M', 'SS:DD'), 698 ],)), 699 ] 700 701 listtext = text + [ 702 ('Liste İndeksi', '', 'index', 'PSpinBox', (1, 1000)), 703 ] 704 705 listnumber = number + [ 706 ('Liste İndeksi', '', 'index', 'PSpinBox', (1, 1000)), 707 ] 708 709 listdate = date + [ 710 ('Liste İndeksi', '', 'index', 'PSpinBox', (1, 1000)), 711 ] 712 713 listtime = time + [ 714 ('Liste İndeksi', '', 'index', 'PSpinBox', (1, 1000)), 715 ] 716 717 # Sadece sayısal satır alanlarını listele. 718 numberRowFields = [field[:2] for field in self._allFields \ 719 if field[Constants.FIELD_ATTRIBUTES_FORMAT] == 'number' \ 720 and field[Constants.FIELD_ATTRIBUTES_STATUS] == 'row'] 721 722 formulaFields = self._editor.formulaFields(Constants.FRAME_CODE_REPORT_ROWS) 723 formulaFields = map(lambda x: (x.code(), x.text()), formulaFields) 724 725 numberRowFields += formulaFields 726 727 total = number + [ 728 ('Sütun', '', 'field', 'PComboBox', (numberRowFields,)), 729 ('Toplama Yöntemi', '', 'summethod', 'PComboBox', ([ 730 ('real', 'Gerçek Değerler'), 731 ('seen', 'Görünen Değerler') 732 ],)), 733 ] 734 735 average = number + [ 736 ('Sütun', '', 'field', 'PComboBox', (numberRowFields,)), 737 ] 738 739 # Bağıl tarih 740 rdate = date + [ 741 ('Gün Farkı', '', 'days', 'PSpinBox', (-1000, 1000)), 742 ] 743 744 formatTable = { 745 'text': text, 746 'number': number, 747 'date': date, 748 'time': time, 749 'total': total, 750 'average': average, 751 'rdate': rdate, 752 'numberformula': numberformula, 753 'listtext': listtext, 754 'listnumber': listnumber, 755 'listdate': listdate, 756 'listtime': listtime, 757 } 758 759 return formatTable[format]
760
761 - def fieldDefaultProperties(self, format):
763
764 - def defaultFieldHeight(self):
765 ''' 766 Öntanımlı alan yüksekliği 767 ''' 768 return 5
769
770 - def defaultFieldWidth(self):
771 ''' 772 Öntanımlı alan genişliği 773 ''' 774 return 36
775
776 - def rulerModulo(self):
777 ''' 778 Cetvel üzerindeki rakamların nereden sonra sıfırlanacağını söyler. 779 ''' 780 return 1000
781
782 - def dumpFrameItems(self, frame):
783 ''' 784 Çerçeve içindeki nesneleri dict'e dump eder. 785 ''' 786 reportItems = frame.body().children() 787 reportItems = filter(lambda x: isinstance(x, ReportItem), reportItems) 788 reportItems.sort(lambda a, b: cmp(a.zValue(), b.zValue())) 789 790 items = [] 791 792 # Sondaki nesneden başlayarak tasarım kaydına nesneleri ekliyoruz. 793 for reportItem in reportItems: 794 items.append(reportItem.dumpToDict()) 795 796 return items
797
798 - def dumpField(self, field):
799 ''' 800 Alanın özelliklerini bir dict'e atar. 801 ''' 802 dump = {} 803 804 dump['class'] = 'FormField' 805 dump['code'] = field.code() 806 dump['name'] = field.text() 807 dump['format'] = field.format() 808 dump['status'] = field.status() 809 dump['type'] = field.fieldType() 810 dump['width'] = self.unit().unitWidth(field.width()) 811 dump['height'] = self.unit().unitWidth(field.height()) 812 dump['x'] = self.unit().unitWidth(field.pos().x()) 813 dump['y'] = self.unit().unitHeight(field.pos().y()) 814 dump['properties'] = field.properties() 815 816 return dump
817
818 - def dumpTextArea(self, textArea):
819 ''' 820 Yazı alanının özelliklerini dict'e yazar. 821 ''' 822 dump = {} 823 824 dump['class'] = 'FormText' 825 dump['text'] = unicode(textArea.text()) 826 dump['width'] = self.unit().unitWidth(textArea.width()) 827 dump['height'] = self.unit().unitWidth(textArea.height()) 828 dump['x'] = self.unit().unitWidth(textArea.pos().x()) 829 dump['y'] = self.unit().unitHeight(textArea.pos().y()) 830 dump['properties'] = textArea.properties() 831 832 return dump
833
834 - def getItemClass(self, className):
835 ''' 836 Sınıf ismi verilen sınıfı döndürür. 837 ''' 838 if className == 'FormField': 839 return Field 840 841 elif className == 'FormText': 842 return TextArea 843 844 elif className == 'Line': 845 return Line 846 847 elif className == 'Rectangle': 848 return Rectangle 849 850 elif className == 'Image': 851 return Image 852 853 elif className == 'Barcode': 854 return Barcode
855
856 - def restoreFrameFromDict(self, frame, frameDict, editor):
857 ''' 858 Bir çerçevenin alanlarını dict içerisinden alır ve çerçeveye ekler. 859 ''' 860 frameItems = frameDict['items'] 861 862 # Çerçeve içindeki nesneleri de tek tek oluştur. 863 for itemDump in frameItems: 864 865 # Nesneyi yeniden oluştur. 866 itemClass = self.getItemClass(itemDump['class']) 867 x = self.unit().pointWidth(float(itemDump['x'])) 868 y = self.unit().pointHeight(float(itemDump['y'])) 869 itemObject = itemClass.createFromDict(itemDump, frame.body(), editor, x, y)
870
871 - def restoreFieldFromDict(self, field, dump):
872 ''' 873 Bir alan nesnesinin özelliklerini dump'tan alarak, nesneye atar. 874 ''' 875 width = self.unit().pointWidth(float(dump['width'])) 876 height = self.unit().pointHeight(float(dump['height'])) 877 878 field.setWidth(width) 879 field.setHeight(height) 880 881 for property, value in dump['properties'].items(): 882 field.setProperty(property, value)
883
884 - def restoreTextAreaFromDict(self, textArea, dump):
885 ''' 886 Bir alan nesnesinin özelliklerini dump'tan alarak, nesneye atar. 887 ''' 888 textArea.setText(dump['text']) 889 width = self.unit().pointWidth(float(dump['width'])) 890 height = self.unit().pointHeight(float(dump['height'])) 891 892 textArea.setWidth(width) 893 textArea.setHeight(height) 894 895 for property, value in dump['properties'].items(): 896 textArea.setProperty(property, value)
897 898
899 -class GraphicsLabelPlugin(GraphicsReportPlugin):
900
901 - def __init__(self):
902 ''' 903 Grafiksel etiket editörleri için plugin. 904 ''' 905 GraphicsReportPlugin.__init__(self)
906
907 - def removableActions(self):
908 actions = [ 909 'filenew', 910 'fileopen', 911 'filesave', 912 'settings', 913 'reportframes', 914 ] 915 916 return actions
917
918 - def designFileExtension(self):
919 return 'glbl'
920
921 - def defaultDesignSettings(self):
923
924 - def defaultFieldWidth(self):
925 ''' 926 Öntanımlı alan genişliği 927 ''' 928 return 15
929
930 - def frameBodyMargin(self):
931 return 0
932
933 - def designSettingsMeta(self):
934 ''' 935 Tasarım ayarlarının ne olacağını söyler. 936 ''' 937 propertyMeta = [ 938 ] 939 940 return propertyMeta
941
942 - def supportsFrameHeader(self):
943 return False
944
945 - def supportsFrameResizeBar(self):
946 return False
947