37 from classes
import updates
38 from classes
import info
39 from classes.query
import File
40 from classes.logger
import log
41 from classes.app
import get_app
42 from classes.thumbnail
import GenerateThumbnail
47 import simplejson
as json
51 ModelRefreshed = pyqtSignal()
54 QStandardItemModel.__init__(self)
63 selected_row = self.itemFromIndex(item).row()
64 files.append(self.item(selected_row, 5).text())
65 data.setText(json.dumps(files))
77 if len(action.key) >= 1
and action.key[0].lower() ==
"files":
79 if action.type ==
"insert":
87 log.info(
"updating files model.")
104 self.
model.setHorizontalHeaderLabels([
"", _(
"Name"), _(
"Tags"),
"",
"",
""])
107 files = File.filter()
111 path, filename = os.path.split(file.data[
"path"])
113 if "tags" in file.data.keys():
114 tags = file.data[
"tags"]
116 if "name" in file.data.keys():
117 name = file.data[
"name"]
119 if not win.actionFilesShowAll.isChecked():
120 if win.actionFilesShowVideo.isChecked():
121 if not file.data[
"media_type"] ==
"video":
123 elif win.actionFilesShowAudio.isChecked():
124 if not file.data[
"media_type"] ==
"audio":
126 elif win.actionFilesShowImage.isChecked():
127 if not file.data[
"media_type"] ==
"image":
131 if win.filesFilter.text() !=
"":
132 if not win.filesFilter.text().lower()
in filename.lower() \
133 and not win.filesFilter.text().lower()
in tags.lower() \
134 and not win.filesFilter.text().lower()
in name.lower():
138 if (file.data[
"media_type"] ==
"video" or file.data[
"media_type"] ==
"image"):
140 thumb_path = os.path.join(info.THUMBNAIL_PATH,
"{}.png".format(file.id))
143 if not os.path.exists(thumb_path):
147 file_path = file.absolute_path()
151 if file.data[
"media_type"] ==
"video":
152 overlay_path = os.path.join(info.IMAGES_PATH,
"overlay.png")
156 if 'start' in file.data.keys():
157 fps = file.data[
"fps"]
158 fps_float = float(fps[
"num"]) / float(fps[
"den"])
159 thumbnail_frame = round(float(file.data[
'start']) * fps_float) + 1
162 GenerateThumbnail(file_path, thumb_path, thumbnail_frame, 98, 64, os.path.join(info.IMAGES_PATH,
"mask.png"), overlay_path)
167 msg.setText(_(
"{} is not a valid video, audio, or image file.".format(filename)))
173 thumb_path = os.path.join(info.PATH,
"images",
"AudioThumbnail.png")
178 col = QStandardItem()
179 col.setIcon(QIcon(thumb_path))
181 col.setToolTip(filename)
182 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled)
186 col = QStandardItem(
"Name")
187 col.setData(filename, Qt.DisplayRole)
189 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled | Qt.ItemIsEditable)
193 col = QStandardItem(
"Tags")
194 col.setData(tags, Qt.DisplayRole)
196 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled | Qt.ItemIsEditable)
200 col = QStandardItem(
"Type")
201 col.setData(file.data[
"media_type"], Qt.DisplayRole)
202 col.setText(file.data[
"media_type"])
203 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled | Qt.ItemIsEditable)
207 col = QStandardItem(
"Path")
208 col.setData(path, Qt.DisplayRole)
210 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsDragEnabled)
214 col = QStandardItem(
"ID")
215 col.setData(file.data[
"id"], Qt.DisplayRole)
216 col.setText(file.data[
"id"])
217 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsDragEnabled)
221 if not file.data[
"id"]
in self.
model_ids:
222 self.
model.appendRow(row)
223 self.
model_ids[file.data[
"id"]] = file.data[
"id"]
229 get_app().window.resize_contents()
232 self.
model.ModelRefreshed.emit()
238 app.updates.add_listener(self)
242 self.
model.setColumnCount(6)
def get_app()
Returns the current QApplication instance of OpenShot.
def __init__(self, parent=None)
def mimeData(self, indexes)
def changed(self, action)
def update_model(self, clear=True)
def GenerateThumbnail(file_path, thumb_path, thumbnail_frame, width, height, mask, overlay)
Create thumbnail image, and check for rotate metadata (if any)
Interface for classes that listen for changes (insert, update, and delete).