OpenStructure
Loading...
Searching...
No Matches
preset_list_model.py
Go to the documentation of this file.
1from ost import gui
2from ost import gfx
3import os
4import ost
5from PyQt5 import QtCore, QtWidgets, QtGui
6from .immutable_preset_info_handler import ImmutablePresetInfoHandler
7from .preset_info_handler import PresetInfoHandler
8class PresetListModel(QtCore.QAbstractListModel):
9
10 IMMUTABLE_PRESET_PATH = os.path.join(ost.GetSharedDataPath(),"scene",
11 "presets.xml")
12 MUTABLE_PRESET_PATH = "user_presets.xml"
13
14 dataChanged = QtCore.pyqtSignal(int, int, name="dataChanged")
15
16 def __init__(self, parent=None, *args):
17 QtCore.QAbstractListModel.__init__(self, parent, *args)
18
19 self.data_ = list()
20
21 #Info Handler
22
23 self.immutable_infoh_=ImmutablePresetInfoHandler(PresetListModel.IMMUTABLE_PRESET_PATH)
24 data_loc=str(QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.DataLocation))
25
26 mutable_path=os.path.join(str(data_loc), 'config',
27 PresetListModel.MUTABLE_PRESET_PATH)
28 qdir=QtCore.QDir(data_loc)
29 if not qdir.exists():
30 qdir.mkpath("config")
31 self.infoh_=PresetInfoHandler(mutable_path)
33
34 def AddItem(self, preset, row, editable, save):
35 if self.NameIsValid(preset.GetName()):
36 icon = self.GetIcon(preset)
37 self.insertRow(row, QtCore.QModelIndex())
38 self.data_[row] = [preset, icon, editable]
39 model_index = self.createIndex(row,0)
40 index = self.index(row)
41 end_index = self.createIndex(self.rowCount(),0)
42 if save:
43 self.AddPresetToInfo(preset)
44 self.dataChanged.emit(model_index, end_index)
45 return True
46 return False
47
48 def IsEditable(self, row):
49 return self.data_[row][2]
50
51 def RemoveItem(self, row):
52 if self.IsEditable(row):
53 name = self.data_[row][0].GetName()
54 self.removeRow(row, QtCore.QModelIndex())
55 model_index = self.createIndex(row,0)
56 self.infoh_.RemovePreset(name)
57 self.dataChanged.emit(model_index, model_index)
58 return True
59 return False
60
61 def AddPresetToInfo(self,preset):
62 self.infoh_.StorePreset(preset)
63
65 if self.immutable_infoh_:
66 presets = self.immutable_infoh_.GetPresets()
67 for k, v in presets.items():
68 self.AddItem(v, self.GetLastRow(), False, False)
69
70 presets = self.infoh_.GetPresets()
71 for k, v in presets.items():
72 self.AddItem(v, self.GetLastRow(), True, False)
73
74 def GetPreset(self, model_index):
75 if model_index.isValid():
76 return self.data_[model_index.row()][0]
77
78 def GetLastRow(self):
79 return self.rowCount()
80
81 #Helper
82 def GetIcon(self, preset):
83 pixmap = QtGui.QPixmap(64, 64)
84 pixmap.fill(QtCore.Qt.transparent)
85 return QtGui.QIcon(pixmap)
86
87 def NameIsValid(self, string):
88 if len(string)==0:
89 return False
90 for values in self.data_:
91 if string == values[0].GetName():
92 return False
93 return True
94
95 #Overwritten Methods
96 def rowCount(self, parent=QtCore.QModelIndex()):
97 return len(self.data_)
98
99 def data(self, index, role):
100 if index.isValid() and index.row()< self.rowCount():
101 data = self.data_[index.row()]
102 if role == QtCore.Qt.DisplayRole:
103 return QtCore.QVariant(data[0].GetName())
104 elif role == QtCore.Qt.DecorationRole:
105 return QtCore.QVariant(data[1])
106 return QtCore.QVariant()
107
108 def setData(self, index, value, role):
109 if index.isValid():
110 row = index.row()
111 if not self.data_[row]:
112 self.data_[row] = list()
113 if role == QtCore.Qt.EditRole and self.NameIsValid(value.toString()):
114 old_name = str(self.data_[row][0].GetName())
115 new_name = value.toString()
116 self.data_[row][0].SetName(str(new_name))
117 self.infoh_.RenamePreset(old_name,str(new_name))
118 self.dataChanged.emit(index, index)
119 return True
120 elif role == QtCore.Qt.DisplayRole:
121 self.data_[row][0].SetName(value.toString())
122 elif role == QtCore.Qt.DecorationRole:
123 self.dat_[row][1] = value.toPyObject()
124 return False
125
126 def flags(self, index):
127 if index.isValid():
128 flags = QtCore.QAbstractItemModel.flags(self,index)
129 if self.IsEditable(index.row()):
130 return flags | QtCore.Qt.ItemIsEditable
131 else:
132 return flags
133 return QtCore.Qt.ItemIsEnabled
134
135 def insertRow(self, position, index):
136 self.beginInsertRows(index, position, position)
137 self.data_.insert(position,list())
138 self.endInsertRows()
139 return True
140
141 def removeRow(self, position, index):
142 self.beginRemoveRows(index, position, position)
143 del self.data_[position]
144 self.endRemoveRows()
145 return True
146
147
148
149
rowCount(self, parent=QtCore.QModelIndex())
AddItem(self, preset, row, editable, save)
String DLLEXPORT_OST_BASE GetSharedDataPath()