1/*
2 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above
9 *    copyright notice, this list of conditions and the following
10 *    disclaimer.
11 * 2. Redistributions in binary form must reproduce the above
12 *    copyright notice, this list of conditions and the following
13 *    disclaimer in the documentation and/or other materials
14 *    provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
21 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
25 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
26 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30WebInspector.ContentFlow = function(documentNodeIdentifier, name, overset, contentNodes)
31{
32    WebInspector.Object.call(this);
33
34    this._documentNodeIdentifier = documentNodeIdentifier;
35    this._name = name;
36    this._overset = overset;
37    this._contentNodes = contentNodes;
38};
39
40WebInspector.ContentFlow.Event = {
41    OversetWasChanged: "content-flow-overset-was-changed",
42    ContentNodeWasAdded: "content-flow-content-node-was-added",
43    ContentNodeWasRemoved: "content-flow-content-node-was-removed"
44};
45
46WebInspector.ContentFlow.prototype = {
47
48    constructor: WebInspector.ContentFlow,
49    __proto__: WebInspector.Object.prototype,
50
51    // Public
52
53    get id()
54    {
55        // Use the flow node id, to avoid collisions when we change main document id.
56        return this._documentNodeIdentifier + ":" + this._name;
57    },
58
59    get documentNodeIdentifier()
60    {
61        return this._documentNodeIdentifier;
62    },
63
64    get name()
65    {
66        return this._name;
67    },
68
69    get overset()
70    {
71        return this._overset;
72    },
73
74    set overset(overset)
75    {
76        if (this._overset === overset)
77            return;
78        this._overset = overset;
79        this.dispatchEventToListeners(WebInspector.ContentFlow.Event.FlowOversetWasChanged);
80    },
81
82    get contentNodes()
83    {
84        return this._contentNodes;
85    },
86
87    insertContentNodeBefore: function(contentNode, referenceNode)
88    {
89        var index = this._contentNodes.indexOf(referenceNode);
90        console.assert(index !== -1);
91        this._contentNodes.splice(index, 0, contentNode);
92        this.dispatchEventToListeners(WebInspector.ContentFlow.Event.ContentNodeWasAdded, {node: contentNode, before: referenceNode});
93    },
94
95    appendContentNode: function(contentNode)
96    {
97        this._contentNodes.push(contentNode);
98        this.dispatchEventToListeners(WebInspector.ContentFlow.Event.ContentNodeWasAdded, {node: contentNode});
99    },
100
101    removeContentNode: function(contentNode)
102    {
103        var index = this._contentNodes.indexOf(contentNode);
104        console.assert(index !== -1);
105        this._contentNodes.splice(index, 1);
106        this.dispatchEventToListeners(WebInspector.ContentFlow.Event.ContentNodeWasRemoved, {node: contentNode});
107    }
108};
109