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

Source Code for Module mcbase.libs.designeditor.framesettings

  1  # -*- coding: utf-8 -*- 
  2   
  3  ########################################################################## 
  4  # framesettings.py 
  5  # 
  6  # Rapor çerçevelerini ayarlar. 
  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   
 17  T_SELECT = 0 
 18  T_NAME = 1 
 19  T_START = 2 
 20  T_DESCRIPTION = 3 
 21  T_COLUMN_COUNT = 4 
22 23 -class FrameSettings(QDialog):
24
25 - def __init__(self, parent, fl, plugin):
26 ''' 27 Rapor Çerçeveleri ayar ekranının ilk ayarlarını yapar. 28 ''' 29 QDialog.__init__(self, parent, fl) 30 31 self._plugin = plugin 32 33 self.createDialogWidgets() 34 35 # Çerçevelerin özelliklerini saklıyoruz. 36 self._frameAttributes = {} 37 self._allFrames = [] 38 39 # Gerekli bağlantıları yapıyoruz. 40 self.connectSignals() 41 42 # Çerçeve ayarları tablosu ve modeli 43 self._frameTable = None 44 self._frameModel = None
45
46 - def connectSignals(self):
47 ''' 48 İşlem düğmlerini gerekli yerlere bağlar. 49 ''' 50 self.connect(self.btn_Tamam, SIGNAL('clicked()'), self.btn_Tamam_clicked) 51 self.connect(self.btn_Vazgec, SIGNAL('clicked()'), self.btn_Vazgec_clicked)
52
53 - def frameStart(self, frameCode):
54 ''' 55 Çerçeve kodu verilen bir çerçevenin başlama satırını verir. 56 ''' 57 frameCodes = map(lambda x: x[Constants.DESIGN_FRAME_CODE], self._allFrames) 58 index = frameCodes.index(frameCode) 59 60 return self._frameModel.frameStart(index)
61
62 - def setFrameStarts(self, frameStarts):
63 ''' 64 Çerçevelerin başlangıç satırlarını ayarlar. 65 ''' 66 frameCodes = map(lambda x: x[Constants.DESIGN_FRAME_CODE], self._allFrames) 67 68 for frameCode, frameStart in frameStarts: 69 index = frameCodes.index(frameCode) 70 self._frameModel.setFrameStart(index, frameStart)
71
72 - def allFrames(self):
73 ''' 74 Rapor çerçevelerini ve özelliklerini döndürür. 75 ''' 76 return self._allFrames
77
78 - def createAllFrames(self, reportMeta):
79 ''' 80 Rapor tanım dosyasına göre çerçeveleri bulur. 81 ''' 82 # Detay çerçevelerine grup sıra numarası veriyoruz. Her detayın 83 # 3 adet çerçevesi olduğu için, sıra numaralarını detay pencerelerinin 84 # bulunduğu sıranın küsüratıyla veriyoruz. 85 detailGroupOrder = Constants.DETAIL_FRAMES_ORDER + 0.001 86 detailFields = reportMeta.get('detayalanlari') or {} 87 88 detailFrames = [] 89 for detailKey in detailFields: 90 91 # Her detay için başlık, satır ve altlık olmak üzere 3 adet 92 # çerçeve kullanılıyor. 93 detailName = detailFields[detailKey]['detayadi'] 94 detailFrames += [ 95 ('_%s%s' % (detailKey, Constants.FRAME_CODE_DETAIL_HEADER_SUFFIX), '%s %s' % (tr(detailName), tr('Başlığı')), 96 Constants.DETAIL_FRAMES_HEADER_HEIGHT, detailGroupOrder + 0.0001), 97 98 ('_%s%s' % (detailKey, Constants.FRAME_CODE_DETAIL_ROWS_SUFFIX), '%s %s' % (tr(detailName), tr('Satırları')), 99 Constants.DETAIL_FRAMES_ROWS_HEIGHT, detailGroupOrder + 0.0002), 100 101 ('_%s%s' % (detailKey, Constants.FRAME_CODE_DETAIL_FOOTER_SUFFIX), '%s %s' % (tr(detailName), tr('Altlığı')), 102 Constants.DETAIL_FRAMES_FOOTER_HEIGHT, detailGroupOrder + 0.0003), 103 ] 104 # Grup sıra numarasını artırıyoruz. 105 detailGroupOrder += 0.001 106 107 # Detay çerçevelerini araya ekliyoruz. 108 allFrames = Constants.DESIGN_FRAMES[:Constants.DETAIL_FRAMES_ORDER] + \ 109 detailFrames + \ 110 Constants.DESIGN_FRAMES[Constants.DETAIL_FRAMES_ORDER:] 111 112 return allFrames
113
114 - def setReportMeta(self, reportMeta):
115 ''' 116 Çerçeve listesini hazırlar. 117 ''' 118 from tools import tr 119 120 allFrames = self.createAllFrames(reportMeta) 121 122 # Model ayarları 123 self._frameModel = FrameModel(allFrames, self._plugin) 124 125 # Delegate ayarları 126 self._frameDelegate = FrameDelegate(self._plugin) 127 128 # Tablo ayarları 129 self._frameTable = QTableView(self.gbx_RaporCerceveleri) 130 self._frameTable.setModel(self._frameModel) 131 self._frameTable.setItemDelegateForColumn(T_START, self._frameDelegate) 132 self._frameTable.setItemDelegateForColumn(T_NAME, self._frameDelegate) 133 self._frameTable.setItemDelegateForColumn(T_DESCRIPTION, self._frameDelegate) 134 self._frameTable.verticalHeader().hide() 135 self._frameTable.horizontalHeader().setStretchLastSection(True) 136 self._frameTable.horizontalHeader().setClickable(False) 137 self._frameTable.setSelectionMode(QAbstractItemView.SingleSelection) 138 self._frameTable.setSelectionBehavior(QAbstractItemView.SelectRows) 139 self._frameTable.setEditTriggers(QAbstractItemView.CurrentChanged | QAbstractItemView.SelectedClicked) 140 141 self._frameTable.setColumnWidth(T_SELECT, 30) 142 self._frameTable.setColumnWidth(T_NAME, 200) 143 self._frameTable.setColumnWidth(T_START, 80) 144 145 self._frameTable.setMinimumSize(600, 400) 146 147 self.addFrameTable(self._frameTable) 148 149 # Oluşturulan çerçeveleri alıyoruz. 150 self._allFrames = allFrames
151
152 - def addFrameTable(self, frameTable):
153 ''' 154 Çerçeve ayarları tablosunu araya ekler. 155 ''' 156 vboxlayout = QVBoxLayout(self.gbx_RaporCerceveleri) 157 vboxlayout.setMargin(3) 158 vboxlayout.setSpacing(8) 159 160 vboxlayout.addWidget(frameTable)
161
162 - def createDialogWidgets(self):
163 ''' 164 Çerçeve ayar ekranını oluşturur. 165 ''' 166 from tools import tr 167 168 FrameSettingsLayout = QVBoxLayout(self) 169 FrameSettingsLayout.setSpacing(3) 170 FrameSettingsLayout.setMargin(8) 171 172 self.gbx_RaporCerceveleri = QGroupBox(self) 173 174 FrameSettingsLayout.addWidget(self.gbx_RaporCerceveleri) 175 176 self.gbx_Islemler = QGroupBox(self) 177 self.gbx_Islemler.setSizePolicy(QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)) 178 gbx_IslemlerLayout = QHBoxLayout(self.gbx_Islemler) 179 gbx_IslemlerLayout.setAlignment(Qt.AlignTop) 180 gbx_IslemlerLayout.setSpacing(3) 181 gbx_IslemlerLayout.setMargin(8) 182 spacer2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 183 gbx_IslemlerLayout.addItem(spacer2) 184 185 self.btn_Tamam = QPushButton(self.gbx_Islemler) 186 gbx_IslemlerLayout.addWidget(self.btn_Tamam) 187 spacer1 = QSpacerItem(20,20,QSizePolicy.Fixed, QSizePolicy.Minimum) 188 gbx_IslemlerLayout.addItem(spacer1) 189 190 self.btn_Vazgec = QPushButton(self.gbx_Islemler) 191 gbx_IslemlerLayout.addWidget(self.btn_Vazgec) 192 spacer3 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) 193 gbx_IslemlerLayout.addItem(spacer3) 194 FrameSettingsLayout.addWidget(self.gbx_Islemler) 195 196 self.setWindowTitle(tr("Report Frames")) 197 self.gbx_RaporCerceveleri.setTitle(tr("Report Frames")) 198 self.gbx_Islemler.setTitle(tr("Options")) 199 self.btn_Tamam.setText(tr("[F2] Ok")) 200 self.btn_Tamam.setShortcut(QKeySequence("F2")) 201 self.btn_Vazgec.setText(tr("[F3] Cancel")) 202 self.btn_Vazgec.setShortcut(QKeySequence("F3")) 203 204 self.setTabOrder(self.btn_Tamam, self.btn_Vazgec)
205
206 - def setActiveFrames(self, activeFrames):
207 ''' 208 Editörde aktif olan çerçevelerin seçili olmasını sağlar. 209 ''' 210 self._frameModel.setChosenFrames(activeFrames)
211
212 - def btn_Tamam_clicked(self):
213 ''' 214 Kullanıcının eklediği, çıkardığı çerçevelere göre değişikliği kaydeder. 215 ''' 216 self.emit(SIGNAL("framesChanged(PyQt_PyObject)"), self._frameModel.chosenFrames()) 217 self.close()
218
219 - def btn_Vazgec_clicked(self):
220 ''' 221 Kullanıcının yaptığı değişiklikleri onaylamadan çıkmasını sağlar. 222 ''' 223 self.close()
224
225 226 -class FrameModel(QAbstractTableModel):
227
228 - def __init__(self, allFrames, plugin):
229 ''' 230 Çerçeveleri listeler. 231 ''' 232 QAbstractTableModel.__init__(self) 233 234 self._allFrames = allFrames 235 self._plugin = plugin 236 self._chosenFrames = [] 237 self._frameStarts = [0] * len(allFrames)
238
239 - def frameCode(self, row):
240 ''' 241 Satırdaki çerçeve kodunu döndürür. 242 ''' 243 return self._allFrames[row][Constants.DESIGN_FRAME_CODE]
244
245 - def isSelected(self, frameCode):
246 ''' 247 Çerçevenin seçili olup olmadığını verir. 248 ''' 249 if frameCode in self._chosenFrames: 250 return True 251 252 else: 253 return False
254
255 - def setChosenFrames(self, chosenFrames):
256 ''' 257 Seçili çerçeveleri belirler. 258 ''' 259 self._chosenFrames = chosenFrames
260
261 - def chosenFrames(self):
262 ''' 263 Seçili çerçeveleri döndürür. 264 ''' 265 return self._chosenFrames
266
267 - def frameStart(self, row):
268 ''' 269 İstenilen sıradaki çerçevenin başladığı yeri verir. 270 ''' 271 return self._frameStarts[row]
272
273 - def setFrameStart(self, row, value):
274 ''' 275 Çerçevenin başladığı satırı set eder. 276 ''' 277 self._frameStarts[row] = value
278
279 - def flags(self, index):
280 ''' 281 Hücrelerin durumlarını verir. 282 ''' 283 flag = Qt.ItemIsEnabled 284 285 if index.column() == T_START: 286 flag |= Qt.ItemIsEditable 287 288 if index.column() == T_SELECT: 289 flag |= Qt.ItemIsUserCheckable 290 291 return flag
292
293 - def rowCount(self, parent=QModelIndex()):
294 ''' 295 Kaç tane çerçeve olduğunu döndürür. 296 ''' 297 return len(self._allFrames)
298
299 - def columnCount(self, parent=QModelIndex()):
300 ''' 301 Kaç tane sütun olduğunu söyler 302 ''' 303 return T_COLUMN_COUNT
304
305 - def setData(self, index, value, role=Qt.EditRole):
306 ''' 307 Editördeki değer değiştikten sonra, model'e yeni değeri tanıtıyoruz. 308 ''' 309 row = index.row() 310 column = index.column() 311 312 if role == Qt.CheckStateRole: 313 frameCode = self.frameCode(row) 314 if frameCode in self._chosenFrames: 315 self._chosenFrames.remove(frameCode) 316 317 else: 318 self._chosenFrames.append(frameCode) 319 320 elif role == Qt.EditRole: 321 self._frameStarts[row] = value 322 323 self.emit(SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"), 324 index, index) 325 326 return True
327 328 @returnQVariant
329 - def data(self, index, role):
330 ''' 331 İndeksi ve durumu verilen yerin gösterilecek datasını gösterir. 332 ''' 333 row = index.row() 334 column = index.column() 335 336 if role in (Qt.DisplayRole, Qt.ToolTipRole): 337 if column == T_NAME: 338 frameName = self._allFrames[row][Constants.DESIGN_FRAME_NAME] 339 340 return tr(frameName) 341 342 elif column == T_DESCRIPTION: 343 frameCode = self.frameCode(row) 344 frameName = self._allFrames[row][Constants.DESIGN_FRAME_NAME] 345 frameDefinition = Constants.DESIGN_FRAMES_DEFINITIONS.get(frameCode, frameName) 346 347 return tr(frameDefinition) 348 349 elif column == T_START: 350 return '%s. %s' % (self._frameStarts[row], tr(self._plugin.frameStartSuffix())) 351 352 elif role == Qt.BackgroundRole: 353 if row % 2 == 0: 354 return QColor(232, 232, 232) 355 356 elif role == Qt.CheckStateRole: 357 if column == T_SELECT: 358 if self.isSelected(self.frameCode(row)): 359 return Qt.Checked 360 361 else: 362 return Qt.Unchecked
363 364 @returnQVariant
365 - def headerData(self, section, orientation, role=Qt.DisplayRole):
366 ''' 367 Sütunların başlıklarını döndürür. 368 ''' 369 if role == Qt.DisplayRole and orientation == Qt.Horizontal: 370 371 if section == T_NAME: 372 return tr("Frame Name") 373 374 elif section == T_DESCRIPTION: 375 return tr("Description") 376 377 elif section == T_START: 378 return tr("Start Point")
379
380 381 -class FrameDelegate(QItemDelegate):
382
383 - def __init__(self, plugin):
384 ''' 385 Özellik editörünün değiştirme ve özel işlerini yapar. 386 ''' 387 QItemDelegate.__init__(self) 388 389 self._plugin = plugin
390
391 - def createEditor(self, parent, option, index):
392 ''' 393 Gerekli kısım için editörü üretir. 394 ''' 395 row = index.row() 396 column = index.column() 397 398 if column == T_START: 399 suffix = '. %s' % tr(self._plugin.frameStartSuffix()) 400 401 editor = QSpinBox(parent) 402 editor.setSuffix(suffix) 403 editor.setRange(0, 1000) 404 405 return editor
406
407 - def drawFocus(self, painter, option, rect):
408 ''' 409 Kesik çizgilerin çizilmesini engeller. 410 ''' 411 pass
412
413 - def editorEvent(self, event, model, option, index):
414 ''' 415 Çerçevenin ismine basıldığında, seçili durumunu değiştirir. 416 n ''' 417 if index.column() != T_NAME: 418 return QItemDelegate.editorEvent(self, event, model, option, index) 419 420 if event.type() == QEvent.MouseButtonPress: 421 selectIndex = model.createIndex(index.row(), T_SELECT) 422 423 if model.isSelected(model.frameCode(index.row())): 424 model.setData(selectIndex, Qt.Unchecked, Qt.CheckStateRole) 425 426 else: 427 model.setData(selectIndex, Qt.Checked, Qt.CheckStateRole) 428 429 return True 430 431 return False
432
433 - def setEditorData(self, editor, index):
434 ''' 435 Editör açıldığında içine yazılacak değeri yazar. 436 ''' 437 data = index.model().frameStart(index.row()) 438 editor.setValue(data) 439 editor.selectAll()
440
441 - def setModelData(self, editor, model, index):
442 ''' 443 Editör kapandığında model'in datasını set eder. 444 ''' 445 value = editor.value() 446 model.setData(index, value)
447