]> jfr.im git - irc/quakenet/qwebirc.git/blob - js/ui/swmlayout.js
Start work on swmui.
[irc/quakenet/qwebirc.git] / js / ui / swmlayout.js
1 var SWM_ANCHOR_NONE = 0x00;
2 var SWM_ANCHOR_TOP = 0x01;
3 var SWM_ANCHOR_BOTTOM = 0x02;
4 var SWM_ANCHOR_LEFT = 0x04;
5 var SWM_ANCHOR_RIGHT = 0x08;
6
7 var SWMPanel = new Class({
8 initialize: function(parent, id) {
9 this.parent = parent;
10
11 var element = new Element("div", {"id": id, "styles": { "position": "absolute" } });
12 this.element = element;
13 this.element.wmpanel = this;
14
15 parent.addClass("wmelement");
16
17 parent.appendChild(this.element);
18 this.anchor = ANCHOR_NONE;
19 },
20
21 setHeight: function(height) {
22 this.height = height;
23 },
24
25 setWidth: function(width) {
26 this.width = width;
27 }
28 });
29
30 window.addEvent("domready", function() {
31 function reworkLayout(container) {
32 function anchorFilter(x, anchor) {
33 return x.filter(function(y) {
34 if(y.anchor == anchor)
35 return true;
36 });
37 }
38 var x = container.getChildren().map(function(x) {
39 return x.wmpanel
40 });
41 var top = anchorFilter(x, SWM_ANCHOR_TOP);
42 var bottom = anchorFilter(x, SWM_ANCHOR_BOTTOM);
43 var none = anchorFilter(x, SWM_ANCHOR_NONE);
44
45 var left = anchorFilter(x, SWM_ANCHOR_LEFT);
46 var right = anchorFilter(x, SWM_ANCHOR_RIGHT);
47
48 var tpos = 0;
49 for(var i=0;i<top.length;i++) {
50 var obj = top[i].element;
51 obj.setStyles({"top": tpos + "px", "left": "0px", "right": "0px"});
52 tpos = tpos + obj.getSize()["size"]["y"];
53 }
54
55 var bpos = 0;
56 for(var i=0;i<bottom.length;i++) {
57 var obj = bottom[i].element;
58 obj.setStyles({"bottom": bpos + "px", "left": "0px", "right": "0px"});
59 bpos = bpos + obj.getSize()["size"]["y"];
60 }
61
62 var lpos = 0;
63 for(var i=0;i<left.length;i++) {
64 var obj = left[i].element;
65 obj.setStyles({"left": lpos + "px", "top": tpos + "px", "bottom": bpos + "px"});
66 lpos = lpos + obj.getSize()["size"]["x"];
67 }
68
69 var rpos = 0;
70 for(var i=0;i<right.length;i++) {
71 var obj = right[i].element;
72 obj.setStyles({"right": rpos + "px", "top": tpos + "px", "bottom": bpos + "px"});
73 rpos = rpos + obj.getSize()["size"]["x"];
74 }
75
76 for(var i=0;i<none.length;i++) {
77 var obj = none[i].element;
78 obj.setStyles({"left": lpos + "px", "right": rpos + "px", "top": tpos + "px", "bottom": bpos + "px"});
79 }
80 }
81
82 window.addEvent("resize", function() {
83 $$("div[class=wmelement]").forEach(reworklayout);
84 });
85 });