aboutsummaryrefslogtreecommitdiff
path: root/js/panels/Timeline/TimelinePanel.reel/TimelinePanel.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/panels/Timeline/TimelinePanel.reel/TimelinePanel.js')
-rw-r--r--js/panels/Timeline/TimelinePanel.reel/TimelinePanel.js143
1 files changed, 119 insertions, 24 deletions
diff --git a/js/panels/Timeline/TimelinePanel.reel/TimelinePanel.js b/js/panels/Timeline/TimelinePanel.reel/TimelinePanel.js
index d7d5328e..81415951 100644
--- a/js/panels/Timeline/TimelinePanel.reel/TimelinePanel.js
+++ b/js/panels/Timeline/TimelinePanel.reel/TimelinePanel.js
@@ -28,6 +28,7 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
28 }, 28 },
29 set:function (newVal) { 29 set:function (newVal) {
30 this._arrLayers = newVal; 30 this._arrLayers = newVal;
31 this.application.ninja.currentDocument.tlArrLayers = newVal;
31 } 32 }
32 }, 33 },
33 34
@@ -99,6 +100,7 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
99 }, 100 },
100 set:function (newVal) { 101 set:function (newVal) {
101 this._arrTracks = newVal; 102 this._arrTracks = newVal;
103 this.application.ninja.currentDocument.tlArrTracks = newVal;
102 } 104 }
103 }, 105 },
104 106
@@ -171,12 +173,16 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
171 /* === BEGIN: Draw cycle === */ 173 /* === BEGIN: Draw cycle === */
172 prepareForDraw:{ 174 prepareForDraw:{
173 value:function () { 175 value:function () {
174 this.eventManager.addEventListener( "onOpenDocument", this, false); 176 this.initTimeline();
177 this.eventManager.addEventListener("onOpenDocument", this, false);
178 this.eventManager.addEventListener("closeDocument", this, false);
179 this.eventManager.addEventListener("switchDocument", this, false);
175 } 180 }
176 }, 181 },
177 182
178 handleOnOpenDocument:{ 183 handleOnOpenDocument:{
179 value:function(){ 184 value:function(){
185 this.clearTimelinePanel();
180 this.eventManager.addEventListener("deleteLayerClick", this, false); 186 this.eventManager.addEventListener("deleteLayerClick", this, false);
181 this.eventManager.addEventListener("newLayer", this, false); 187 this.eventManager.addEventListener("newLayer", this, false);
182 this.eventManager.addEventListener("deleteLayer", this, false); 188 this.eventManager.addEventListener("deleteLayer", this, false);
@@ -194,6 +200,20 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
194 200
195 } 201 }
196 }, 202 },
203
204 handleCloseDocument: {
205 value: function(event) {
206 this.clearTimelinePanel();
207 }
208 },
209
210 handleSwitchDocument : {
211 value: function(event) {
212 // Handle document change.
213 this.handleOnOpenDocument();
214 }
215 },
216
197 willDraw:{ 217 willDraw:{
198 value:function () { 218 value:function () {
199 if (this._isLayer) { 219 if (this._isLayer) {
@@ -205,10 +225,10 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
205 /* === END: Draw cycle === */ 225 /* === END: Draw cycle === */
206 226
207 /* === BEGIN: Controllers === */ 227 /* === BEGIN: Controllers === */
208 initTimelineView:{ 228 initTimeline : {
209 value:function () { 229 value: function() {
210 var myIndex; 230 // Set up basic Timeline functions: event listeners, etc. Things that only need to be run once.
211 this.layout_tracks = this.element.querySelector(".layout-tracks"); 231 this.layout_tracks = this.element.querySelector(".layout-tracks");
212 this.layout_markers = this.element.querySelector(".layout_markers"); 232 this.layout_markers = this.element.querySelector(".layout_markers");
213 233
214 this.newlayer_button.identifier = "addLayer"; 234 this.newlayer_button.identifier = "addLayer";
@@ -219,8 +239,14 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
219 this.layout_tracks.addEventListener("scroll", this.updateLayerScroll.bind(this), false); 239 this.layout_tracks.addEventListener("scroll", this.updateLayerScroll.bind(this), false);
220 this.user_layers.addEventListener("scroll", this.updateLayerScroll.bind(this), false); 240 this.user_layers.addEventListener("scroll", this.updateLayerScroll.bind(this), false);
221 this.end_hottext.addEventListener("changing", this.updateTrackContainerWidth.bind(this), false); 241 this.end_hottext.addEventListener("changing", this.updateTrackContainerWidth.bind(this), false);
222 242
223 this.drawTimeMarkers(); 243 }
244 },
245 initTimelineView:{
246 value:function () {
247 var myIndex;
248
249 this.drawTimeMarkers();
224 250
225 this._hashKey = "123"; 251 this._hashKey = "123";
226 _firstLayerDraw = false; 252 _firstLayerDraw = false;
@@ -230,6 +256,7 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
230 while(this.application.ninja.currentDocument.documentRoot.children[myIndex]) 256 while(this.application.ninja.currentDocument.documentRoot.children[myIndex])
231 { 257 {
232 this._openDoc=true; 258 this._openDoc=true;
259 this._captureSelection=true;
233 NJevent('newLayer',{key:this._hashKey,ele:this.application.ninja.currentDocument.documentRoot.children[myIndex]}) 260 NJevent('newLayer',{key:this._hashKey,ele:this.application.ninja.currentDocument.documentRoot.children[myIndex]})
234 myIndex++; 261 myIndex++;
235 } 262 }
@@ -249,18 +276,45 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
249 276
250 clearTimelinePanel : { 277 clearTimelinePanel : {
251 value: function() { 278 value: function() {
252 console.log('clearing timeline...') 279 // Remove events
253 this.arrTracks = null; 280 this.eventManager.removeEventListener("deleteLayerClick", this, false);
254 this.arrLayers = null; 281 this.eventManager.removeEventListener("newLayer", this, false);
282 this.eventManager.removeEventListener("deleteLayer", this, false);
283 this.eventManager.removeEventListener("layerBinding", this, false);
284 this.eventManager.removeEventListener("elementAdded", this, false);
285 this.eventManager.removeEventListener("elementDeleted", this, false);
286 this.eventManager.removeEventListener("deleteSelection", this, false);
287 this.eventManager.removeEventListener("selectionChange", this, true);
288
289 // Remove every event listener for every tween in TimelineTrack
290 this.deselectTweens();
291
292 // Reset visual appearance
293 this.application.ninja.timeline.playhead.style.left = "-2px";
294 this.application.ninja.timeline.playheadmarker.style.left = "0px";
295 this.application.ninja.timeline.updateTimeText(0.00);
296 this.timebar.style.width = "0px";
297
298 // Clear variables--including repetitions.
299 this.hashInstance = null;
300 this.hashTrackInstance = null;
301 this.hashLayerNumber = null;
302 this.hashElementMapToLayer = null;
303 this.arrTracks = [];
304 this.arrLayers = [];
255 this.currentLayerNumber = 0; 305 this.currentLayerNumber = 0;
256 this.currentLayerSelected = null; 306 this.currentLayerSelected = false;
257 this.currentTrackSelected = null; 307 this.currentTrackSelected = false;
258 this.selectedKeyframes = []; 308 this.selectedKeyframes = [];
259 this.selectedTweens = []; 309 this.selectedTweens = [];
260 this._captureSelection = false; 310 this._captureSelection = false;
261 this._openDoc = false; 311 this._openDoc = false;
262 this.end_hottext.value = 25; 312 this.end_hottext.value = 25;
263 this.updateTrackContainerWidth(); 313 this.updateTrackContainerWidth();
314
315 // Redraw all the things
316 this.layerRepetition.needsDraw = true;
317 this.trackRepetition.needsDraw = true;
264 this.needsDraw = true; 318 this.needsDraw = true;
265 } 319 }
266 }, 320 },
@@ -270,7 +324,10 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
270 this.container_tracks.style.width = (this.end_hottext.value * 80) + "px"; 324 this.container_tracks.style.width = (this.end_hottext.value * 80) + "px";
271 this.master_track.style.width = (this.end_hottext.value * 80) + "px"; 325 this.master_track.style.width = (this.end_hottext.value * 80) + "px";
272 this.time_markers.style.width = (this.end_hottext.value * 80) + "px"; 326 this.time_markers.style.width = (this.end_hottext.value * 80) + "px";
273 this.time_markers.removeChild(this.timeMarkerHolder); 327 if (this.timeMarkerHolder) {
328 this.time_markers.removeChild(this.timeMarkerHolder);
329 }
330
274 this.drawTimeMarkers(); 331 this.drawTimeMarkers();
275 } 332 }
276 }, 333 },
@@ -423,6 +480,7 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
423 dLayer[hashVariable].deleted = false; 480 dLayer[hashVariable].deleted = false;
424 this.arrTracks.splice(event.detail._layerPosition, 0, event.detail._track); 481 this.arrTracks.splice(event.detail._layerPosition, 0, event.detail._track);
425 this.arrLayers.splice(event.detail._layerPosition, 0, event.detail._el); 482 this.arrLayers.splice(event.detail._layerPosition, 0, event.detail._el);
483 this.selectLayer(event.detail._layerPosition);
426 break; 484 break;
427 485
428 } 486 }
@@ -442,7 +500,6 @@ var TimelinePanel = exports.TimelinePanel = Montage.create(Component, {
442 hashVariable++; 500 hashVariable++;
443 } 501 }
444 this.application.ninja.currentSelectedContainer = parentNode; 502 this.application.ninja.currentSelectedContainer = parentNode;
445 //NJevent('breadCrumbTrail', {"element":parentNode, "setFlag":this._setBreadCrumb});
446 } else { 503 } else {
447 dLayer = this.hashInstance.getItem(event.detail._el.parentElementUUID);