Skip to content

Commit

Permalink
Started a rough rubber band select
Browse files Browse the repository at this point in the history
  • Loading branch information
James committed Sep 2, 2009
1 parent e1741c1 commit 0883114
Show file tree
Hide file tree
Showing 6 changed files with 476 additions and 134 deletions.
1 change: 1 addition & 0 deletions examples/WiringEditor/embedded.html
Expand Up @@ -107,6 +107,7 @@
<script type="text/javascript" src="../../js/InOutContainer.js"></script>
<script type="text/javascript" src="../../js/adapters/json-rpc.js"></script>

<script type="text/javascript" src="../../js/RubberBand.js"></script>
<script type="text/javascript" src="../../js/GroupUtils.js"></script>
<script type="text/javascript" src="../../js/GroupFormContainer.js"></script>
<script type="text/javascript" src="../../js/Group.js"></script>
Expand Down
178 changes: 101 additions & 77 deletions js/Group.js
Expand Up @@ -18,14 +18,27 @@
this.events.containerRemoved = new YAHOO.util.CustomEvent("containerRemoved");
this.events.groupAdded = new YAHOO.util.CustomEvent("groupAdded");
this.events.groupRemoved = new YAHOO.util.CustomEvent("groupRemoved");
this.events.groupEmptied = new YAHOO.util.CustomEvent("groupEmptied");

this.events.stateChanged = new YAHOO.util.CustomEvent("stateChanged");
this.stateChangeFunc = function (eventName, objects) { this.events.stateChanged.fire({"event" : eventName, "objects" : objects}) };
this.stateChangeFunc = function (eventName, objects)
{
this.events.stateChanged.fire({"event" : eventName, "objects" : objects})
};

this.events.containerAdded.subscribe(this.stateChangeFunc, this, true);
this.events.containerRemoved.subscribe(this.stateChangeFunc, this, true);
this.events.groupAdded.subscribe(this.stateChangeFunc, this, true);
this.events.groupRemoved.subscribe(this.stateChangeFunc, this, true);

this.events.containerRemoved.subscribe(this.checkGroupEmpty, this, true);
this.events.groupRemoved.subscribe(this.checkGroupEmpty, this, true);

//If a container is removed from the layer then remove it from the currently selected groups
layer.eventRemoveContainer.subscribe(function(eventName, containers)
{
this.removeContainer(containers[0]);
}, this, true);
};

WireIt.Group.prototype = {
Expand Down Expand Up @@ -113,6 +126,15 @@
return gc;
},

checkGroupEmpty: function()
{
//Check the group is empty
if (!lang.isValue(this.groupContainer) && this.containers.length == 0 && this.groups.length == 0)
{
this.events.groupEmptied.fire(this);
}
},

expand: function()
{
if (lang.isValue(this.groupContainer))
Expand Down Expand Up @@ -146,8 +168,9 @@
this.groups.push(go);
group.group = this;

//Listen to the inner group's state change (so we can fire our one)
group.events.stateChanged.subscribe(this.stateChangeFunc, this, true);

group.events.groupEmptied.subscribe(function() { this.removeGroup(group); }, this, true);
this.events.containerAdded.fire(go);
},

Expand All @@ -157,7 +180,12 @@
index = WireIt.GroupUtils.firstTestSucess(this.containers, function (co) { return co.container == container; });

if (index != -1)
this.events.containerRemoved(this.containers.splice(index, 1));
{
this.containers.splice(index, 1);

container.group = null;
this.events.containerRemoved.fire(container);
}
},

removeGroup: function(group, index)
Expand All @@ -166,7 +194,10 @@
index = WireIt.GroupUtils.firstTestSucess(this.groups, function (go) { return go.group == group });

if (index != -1)
this.events.groupRemoved(this.groups.splice(index, 1));
{
group.group = null;
this.events.groupRemoved.fire(this.groups.splice(index, 1));
}
},

unGroup: function()
Expand All @@ -176,26 +207,32 @@
this.expand();
}

var temp = {};
temp.containers = [];
lang.augmentObject(temp.containers, this.containers);
temp.groups = [];
lang.augmentObject(temp.groups, this.groups);


{
for (var cI in this.containers)
for (var cI in temp.containers)
{
var co = this.containers[cI];

var co = temp.containers[cI];

this.removeContainer(co.container);

if (lang.isValue(this.group))
this.group.addContainer(co.container, co.overrides); //TODO: name conflicts?
else
co.container.group = null;
}

for (var gI in this.groups)
for (var gI in temp.groups)
{
var go = this.groups[gI];
var go = temp.groups[gI];

this.removeGroup(go.group);

if (lang.isValue(this.group))
this.group.addGroup(go.group, go.overrides);
else
go.group.group = null;
}
}

Expand All @@ -205,7 +242,7 @@
this.group = null;
}
else
this.layer.groups.splice(this.layer.groups.indexOf(this), 1);
this.layer.removeGroup(this);

this.events.stateChanged.fire(this);
},
Expand Down Expand Up @@ -408,80 +445,67 @@
};
},

/**
* Set the override options for the group (e.g. rename fields)
* Currently sets all overrides not just the ones that are actually changed by the user
* @method geOptions
*/
setGroupOptions: function(containerUIMap, groupUIMap)
getAndCheckOverrides: function(containerUIMap, groupUIMap)
{
//for the moment set all overrides
for (var cI in containerUIMap)
var tempGroup = {};
lang.augmentObject(tempGroup, this);
tempGroup.containers = {};
lang.augmentObject(tempGroup.containers, this.containers);
tempGroup.groups = {};
lang.augmentObject(tempGroup.groups, this.groups);

var overrides = WireIt.GroupUtils.getOverridesFromUI(containerUIMap, groupUIMap);

for (var cI in tempGroup.containers)
{
var c = containerUIMap[cI]

for (var fName in c.fields)
{
var f = c.fields[fName];
var o = {}
o.visible = f.visible.checked;
var rename = f.externalName.value;

if (rename.length > 0)
o.rename = rename;

this.containers[cI].overrides.fields[fName] = o;
}
var co = {};
co.container = this.containers[cI].container;
co.overrides = overrides.containerOverrides[cI];

tempGroup.containers[cI] = co;
}
for (var gI in tempGroup.groups)
{
var go = {};
go.group = this.groups[gI].group;
go.overrides = overrides.groupOverrides[gI];

for (var tName in c.terminals)
{
var t = c.terminals[tName];
var o = {}
o.visible = t.visible.checked;
var rename = t.externalName.value;

if (rename.length > 0)
o.rename = rename;

o.side = t.side.value;

this.containers[cI].overrides.terminals[tName] = o;
}
tempGroup.groups[gI] = go;
}

var map;

for (var gI in groupUIMap)
try
{
var g = groupUIMap[cI]

for (var fName in g.fields)
map = WireIt.GroupUtils.getMap(tempGroup);
}
catch (err)
{
if (lang.isObject(err) && lang.isValue(err.type) && err.type == "MappingError")
{
var f = g.fields[fName];
var o = {}
o.visible = f.visible.checked;
var rename = f.externalName.value;

if (rename.length > 0)
o.rename = rename;

this.groups[cI].overrides.fields[fName] = o;
return {"overrides" : overrides, "valid" : false, "error" : err};
}
else
throw err
}

return {"overrides" : overrides, "valid" : true};
},

setGroupOptions: function(overrides)
{
for (var cI in overrides.containerOverrides)
{
var o = overrides.containerOverrides[cI];

this.containers[cI].overrides = o;
}

for (var gI in overrides.groupOverrides)
{
var o = overrides.groupOverrides[cI];

for (var tName in g.terminals)
{
var t = g.terminals[tName];
var o = {}
o.visible = t.visible.checked;
var rename = t.externalName.value;

if (rename.length > 0)
o.rename = rename;

o.side = t.side.value;

this.groups[cI].overrides.terminals[tName] = o;
}
this.groups[gI].overrides = o;
}
},

Expand Down
92 changes: 92 additions & 0 deletions js/GroupUtils.js
Expand Up @@ -250,6 +250,92 @@
return {"containerMap" : containerMap, "groupMap" : groupMap};
},

/**
* Set the override options for the group (e.g. rename fields)
* Currently sets all overrides not just the ones that are actually changed by the user
* @method getOverridesFromUI
*/
getOverridesFromUI: function(containerUIMap, groupUIMap)
{
containerOverrides = [];
groupOverrides = [];

//for the moment set all overrides
for (var cI in containerUIMap)
{
var c = containerUIMap[cI]
var overrides = {"fields" : {}, "terminals" : {}};

for (var fName in c.fields)
{
var f = c.fields[fName];
var o = {}
o.visible = f.visible.checked;
var rename = f.externalName.value;

if (rename.length > 0)
o.rename = rename;

overrides.fields[fName] = o;
}


for (var tName in c.terminals)
{
var t = c.terminals[tName];
var o = {}
o.visible = t.visible.checked;
var rename = t.externalName.value;

if (rename.length > 0)
o.rename = rename;

o.side = t.side.value;

overrides.terminals[tName] = o;
}

containerOverrides.push(overrides);
}

for (var gI in groupUIMap)
{
var g = groupUIMap[cI]
var overrides = {"fields" : {}, "terminals" : {}};

for (var fName in g.fields)
{
var f = g.fields[fName];
var o = {}
o.visible = f.visible.checked;
var rename = f.externalName.value;

if (rename.length > 0)
o.rename = rename;

overrides.fields[fName] = o;
}


for (var tName in g.terminals)
{
var t = g.terminals[tName];
var o = {}
o.visible = t.visible.checked;
var rename = t.externalName.value;

if (rename.length > 0)
o.rename = rename;

o.side = t.side.value;

overrides.terminals[tName] = o;
}
}

return {"containerOverrides" : containerOverrides, "groupOverrides" : groupOverrides};
},

getMap: function(group)
{

Expand Down Expand Up @@ -391,6 +477,9 @@

if (lang.isValue(o.rename))
{
if (lang.isValue(usedNames.terminals[o.rename]))
throw {"type" : "MappingError", "message" : "Two identical terminal names specified (" + o.rename + ")"}

usedNames.terminals[o.rename] = true;

map.externalName = o.rename;
Expand Down Expand Up @@ -696,6 +785,9 @@

if (lang.isValue(o.rename))
{
if (lang.isValue(usedNames.fields[o.rename]))
throw {"type" : "MappingError", "message" : "Two identical field names specified (" + o.rename + ")"}

usedNames.fields[o.rename] = true;

if (f.inputParams.wirable)
Expand Down

0 comments on commit 0883114

Please sign in to comment.