Skip to content
Snippets Groups Projects
Select Git revision
  • 103c2c921cfa9dd86c8b3ec97b31f82f37335bf0
  • master default protected
  • develop protected
  • cmake_boost_refactor
  • ubuntu_ci
  • mmtf
  • non-orthogonal-maps
  • no_boost_filesystem
  • data_viewer
  • 2.11.1
  • 2.11.0
  • 2.10.0
  • 2.9.3
  • 2.9.2
  • 2.9.1
  • 2.9.0
  • 2.8.0
  • 2.7.0
  • 2.6.1
  • 2.6.0
  • 2.6.0-rc4
  • 2.6.0-rc3
  • 2.6.0-rc2
  • 2.6.0-rc
  • 2.5.0
  • 2.5.0-rc2
  • 2.5.0-rc
  • 2.4.0
  • 2.4.0-rc2
29 results

scoring.py

Blame
  • preset_list_model.py 4.29 KiB
    from ost import gui
    from ost import gfx
    import os
    import ost
    from PyQt4 import QtCore, QtGui
    from immutable_preset_info_handler import ImmutablePresetInfoHandler
    from preset_info_handler import PresetInfoHandler
    
    class PresetListModel(QtCore.QAbstractListModel):
      
      IMMUTABLE_PRESET_PATH = os.path.join(ost.GetSharedDataPath(),"scene", 
                                              "presets.xml")
      MUTABLE_PRESET_PATH = "user_presets.xml"
      
      def __init__(self, parent=None, *args): 
        QtCore.QAbstractListModel.__init__(self, parent, *args)
        
        self.data_ = list()
        
        #Info Handler
        self.immutable_infoh_ = ImmutablePresetInfoHandler(PresetListModel.IMMUTABLE_PRESET_PATH)
        self.infoh_ = PresetInfoHandler(PresetListModel.MUTABLE_PRESET_PATH)
        self.LoadPresetsFromInfo()
        
      def AddItem(self, preset, row, editable, save):
        if self.NameIsValid(preset.GetName()):
          icon = self.GetIcon(preset)
          self.insertRow(row, QtCore.QModelIndex())
          self.data_[row] = [preset, icon, editable]
          model_index = self.createIndex(row,0)
          index = self.index(row)
          end_index = self.createIndex(self.rowCount(),0)
          if save:
            self.AddPresetToInfo(preset)
          self.emit(QtCore.SIGNAL("dataChanged"),model_index, end_index)
          return True
        return False
      
      def IsEditable(self, row):
        return self.data_[row][2]
      
      def RemoveItem(self, row):
        if self.IsEditable(row):
          name = self.data_[row][0].GetName()
          self.removeRow(row, QtCore.QModelIndex())
          model_index = self.createIndex(row,0)
          self.infoh_.RemovePreset(name)
          self.emit(QtCore.SIGNAL("dataChanged"),model_index, model_index)
          return True
        return False
    
      def AddPresetToInfo(self,preset):
        self.infoh_.StorePreset(preset)
        
      def LoadPresetsFromInfo(self):
        if self.immutable_infoh_:
          presets = self.immutable_infoh_.GetPresets()
          for k, v in presets.iteritems():
            self.AddItem(v, self.GetLastRow(), False, False)
        
        presets = self.infoh_.GetPresets()
        for k, v in presets.iteritems():
          self.AddItem(v, self.GetLastRow(), True, False)
    
      def GetPreset(self, model_index):
        if model_index.isValid():
          return self.data_[model_index.row()][0]
      
      def GetLastRow(self):
        return self.rowCount()
      
      #Helper
      def GetIcon(self, preset):
        pixmap = QtGui.QPixmap(64, 64)
        pixmap.fill(QtCore.Qt.transparent)
        return QtGui.QIcon(pixmap)
      
      def NameIsValid(self, string):
        if len(string)==0:
          return False
        for values in self.data_:
          if string == values[0].GetName():
            return False
        return True
      
      #Overwritten Methods  
      def rowCount(self, parent=QtCore.QModelIndex()): 
        return len(self.data_) 
     
      def data(self, index, role):
        if index.isValid() and index.row()< self.rowCount():
          data = self.data_[index.row()]
          if role == QtCore.Qt.DisplayRole:
            return QtCore.QVariant(data[0].GetName())
          elif role == QtCore.Qt.DecorationRole:
            return QtCore.QVariant(data[1])
        return QtCore.QVariant()
    
      def setData(self, index, value, role):
        if index.isValid():
          row = index.row()
          if not self.data_[row]:
            self.data_[row] = list()
          if role == QtCore.Qt.EditRole and self.NameIsValid(value.toString()):
            old_name = str(self.data_[row][0].GetName())
            new_name = value.toString()
            self.data_[row][0].SetName(str(new_name))
            self.infoh_.RenamePreset(old_name,str(new_name))
            self.emit(QtCore.SIGNAL("dataChanged"),index, index)
            return True
          elif role == QtCore.Qt.DisplayRole:
            self.data_[row][0].SetName(value.toString())
          elif role == QtCore.Qt.DecorationRole:
            self.dat_[row][1] = value.toPyObject()
        return False
    
      def flags(self, index):
        if index.isValid():
          flags = QtCore.QAbstractItemModel.flags(self,index)
          if self.IsEditable(index.row()):
            return flags | QtCore.Qt.ItemIsEditable
          else:
            return flags
        return QtCore.Qt.ItemIsEnabled
      
      def insertRow(self, position, index):
        self.beginInsertRows(index, position, position)
        self.data_.insert(position,list())
        self.endInsertRows()
        return True
      
      def removeRow(self, position, index):
        self.beginRemoveRows(index, position, position)
        del self.data_[position]
        self.endRemoveRows()
        return True