30
from timeline import Timeline
30
from timeline.timeline import Timeline
31
31
from sourcelist import SourceList
32
32
from bin import SmartTimelineBin
33
33
from settings import ExportSettings
34
34
from configure import APPNAME
36
from gettext import gettext as _
36
38
class Project(gobject.GObject):
37
39
""" The base class for PiTiVi projects """
42
"settings-changed" : ( gobject.SIGNAL_RUN_LAST,
48
47
def __init__(self, name="", uri=None):
53
52
gst.log("name:%s, uri:%s" % (name, uri))
54
53
gobject.GObject.__init__(self)
57
58
self.sources = SourceList(self)
58
self.settings = ExportSettings()
60
self.timelinebin = None
61
self.settingssigid = 0
86
89
def saveAs(self, filename):
87
90
""" Saves the project to the given file name """
88
91
self._save(filename)
94
def _settingsChangedCb(self, unused_settings):
95
self.emit('settings-changed')
97
def getSettings(self):
99
return the currently configured settings.
100
If no setting have been explicitely set, some smart settings will be
103
return self.settings or self.getAutoSettings()
105
def setSettings(self, settings):
107
Sets the given settings as the project's settings.
108
If settings is None, the current settings will be unset
110
gst.log("Setting %s as the project's settings" % settings)
112
self.settings.disconnect(self.settingssigid)
113
self.settings = settings
114
self.emit('settings-changed')
115
self.settingssigid = self.settings.connect('settings-changed', self._settingsChangedCb)
117
def unsetSettings(self, unused_settings):
118
""" Remove the currently configured settings."""
119
self.setSettings(None)
121
def getAutoSettings(self):
123
Computes and returns smart settings for the project.
124
If the project only has one source, it will be that source's settings.
125
If it has more than one, it will return the largest setting that suits
126
all contained sources.
128
if not self.timeline:
129
gst.warning("project doesn't have a timeline, returning default settings")
130
return ExportSettings()
131
settings = self.timeline.getAutoSettings()
133
gst.warning("Timeline didn't return any auto settings, return default settings")
134
return ExportSettings()
136
# add the encoders and muxer of the default settings
137
curset = self.settings or ExportSettings()
138
settings.vencoder = curset.vencoder
139
settings.aencoder = curset.aencoder
140
settings.muxer = curset.muxer
92
144
def file_is_project(uri):
93
145
""" returns True if the given uri is a PitiviProject file"""
95
147
if not gst.uri_get_protocol(uri) == "file":
96
raise NotImplementedError("%s doesn't yet handle non local projects" % APPNAME)
148
raise NotImplementedError(_("%s doesn't yet handle non local projects") % APPNAME)
97
149
return os.path.isfile(gst.uri_get_location(uri))