diff options
35 files changed, 1564 insertions, 60 deletions
diff --git a/_scss/imports/scss/_MainWindow.scss b/_scss/imports/scss/_MainWindow.scss index 23ace69b..99028b2a 100644 --- a/_scss/imports/scss/_MainWindow.scss +++ b/_scss/imports/scss/_MainWindow.scss | |||
@@ -85,7 +85,7 @@ | |||
85 | #bottomPanelContainer { | 85 | #bottomPanelContainer { |
86 | //border: 1px solid #333; | 86 | //border: 1px solid #333; |
87 | background: transparent; | 87 | background: transparent; |
88 | 88 | height: 150px; | |
89 | min-height:80px; | 89 | min-height:80px; |
90 | max-height:50%; | 90 | max-height:50%; |
91 | overflow:auto; | 91 | overflow:auto; |
diff --git a/css/ninja.css b/css/ninja.css index d013d9b5..6a503373 100644 --- a/css/ninja.css +++ b/css/ninja.css | |||
@@ -80,7 +80,7 @@ body { position: absolute; margin: 0px; width: 100%; height: 100%; background-co | |||
80 | 80 | ||
81 | #topPanelContainer { overflow: hidden; margin-bottom: 2px; height: 32px; } | 81 | #topPanelContainer { overflow: hidden; margin-bottom: 2px; height: 32px; } |
82 | 82 | ||
83 | #bottomPanelContainer { background: transparent; min-height: 80px; max-height: 50%; overflow: auto; } | 83 | #bottomPanelContainer { background: transparent; height: 150px; min-height: 80px; max-height: 50%; overflow: auto; } |
84 | 84 | ||
85 | .panelContainer { display: block; -webkit-box-orient: vertical; position: relative; } | 85 | .panelContainer { display: block; -webkit-box-orient: vertical; position: relative; } |
86 | 86 | ||
diff --git a/js/components/controllers/tree-controller.js b/js/components/controllers/tree-controller.js new file mode 100644 index 00000000..03ef7b9e --- /dev/null +++ b/js/components/controllers/tree-controller.js | |||
@@ -0,0 +1,185 @@ | |||
1 | /* <copyright> | ||
2 | This file contains proprietary software owned by Motorola Mobility, Inc.<br/> | ||
3 | No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> | ||
4 | (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. | ||
5 | </copyright> */ | ||
6 | /** | ||
7 | @module montage/ui/controller/tree-controller | ||
8 | @requires montage/core/core | ||
9 | @requires montage/ui/controller/object-controller | ||
10 | @requires montage/core/event/mutable-event | ||
11 | */ | ||
12 | var Montage = require("montage").Montage, | ||
13 | ObjectController = require("montage/ui/controller/object-controller").ObjectController, | ||
14 | ArrayController = require("montage/ui/controller/array-controller").ArrayController, | ||
15 | MutableEvent = require("montage/core/event/mutable-event").MutableEvent; | ||
16 | /** | ||
17 | TODO: Write description like the array controllers: The ArrayController helps with organizing a hierarchical | ||
18 | collection of objects, and managing user selection within that collection. | ||
19 | You can assign a TreeController instance as the <code>contentProvider</code> property for a TreeView object. | ||
20 | @class module:montage/ui/controller/tree-controller.TreeController | ||
21 | @classdesc | ||
22 | @extends module:montage/ui/controller/object-controller.ObjectController | ||
23 | */ | ||
24 | var TreeController = exports.TreeController = Montage.create(ObjectController, /** @lends module:montage/ui/controller/tree-controller.TreeController# */ { | ||
25 | |||
26 | rootKey : { | ||
27 | value: null | ||
28 | }, | ||
29 | |||
30 | branchKey : { | ||
31 | value: 'children' | ||
32 | }, | ||
33 | |||
34 | _root : { | ||
35 | value : null | ||
36 | }, | ||
37 | root : { | ||
38 | get: function() { | ||
39 | return this._root; | ||
40 | }, | ||
41 | set: function(value) { | ||
42 | this._root = value; | ||
43 | |||
44 | this.initArrayControllers(); | ||
45 | } | ||
46 | }, | ||
47 | |||
48 | rootController: { | ||
49 | value: null | ||
50 | }, | ||
51 | |||
52 | initArrayControllers : { | ||
53 | value: function() { | ||
54 | var self = this; | ||
55 | |||
56 | ///// Recursive function that finds all branch nodes and initializes | ||
57 | ///// sets the tree node type to "branch" or "leaf" | ||
58 | |||
59 | function walk(node, init, depth) { | ||
60 | var branch = node[self.branchKey]; | ||
61 | |||
62 | if(branch) { | ||
63 | branch.forEach(function(node) { | ||
64 | walk(node, init, ++depth); | ||
65 | }); | ||
66 | |||
67 | node['treeNodeType'] = 'branch'; | ||
68 | } else { | ||
69 | node['treeNodeType'] = 'leaf'; | ||
70 | } | ||
71 | } | ||
72 | |||
73 | walk(this._root, 0); | ||
74 | |||
75 | } | ||
76 | }, | ||
77 | |||
78 | /** | ||
79 | @private | ||
80 | */ | ||
81 | _selectedIndexes: { | ||
82 | value: null, | ||
83 | enumerable: false | ||
84 | }, | ||
85 | |||
86 | /** | ||
87 | Description TODO | ||
88 | @type {Function} | ||
89 | @default null | ||
90 | */ | ||
91 | selectedIndexes: { | ||
92 | get: function() { | ||
93 | return this._selectedIndexes; | ||
94 | }, | ||
95 | set: function(value) { | ||
96 | this._selectedIndexes = value; | ||
97 | } | ||
98 | }, | ||
99 | |||
100 | branchControllers: { | ||
101 | value: [] | ||
102 | }, | ||
103 | |||
104 | addBranchController : { | ||
105 | value: function(controller) { | ||
106 | if(this.delegate) { | ||
107 | controller.delegate = this.delegate; | ||
108 | } | ||
109 | |||
110 | this.branchControllers.push(controller); | ||
111 | } | ||
112 | }, | ||
113 | |||
114 | /** | ||
115 | @private | ||
116 | */ | ||
117 | _content: { | ||
118 | enumerable: false, | ||
119 | value: null | ||
120 | }, | ||
121 | /** | ||
122 | The content managed by the TreeController. | ||
123 | @type {Function} | ||
124 | @default {String} null | ||
125 | */ | ||
126 | content: { | ||
127 | get: function() { | ||
128 | return this._content; | ||
129 | }, | ||
130 | set: function(value) { | ||
131 | if (this._content === value) { | ||
132 | return; | ||
133 | } | ||
134 | |||
135 | this._content = value; | ||
136 | |||
137 | this.selectedObjects = null; | ||
138 | |||
139 | if (this.rootKey) { | ||
140 | if (value[this.rootKey]) { | ||
141 | this.root = value[this.rootKey]; | ||
142 | } else { | ||