OSDN Git Service

8adfe507d0e9e9ff990217496f92ba4fcebdf4fd
[dvibrowser/jdisp.git] / src / js / include / jdisp / gui / Floating.jsh
1 #ifndef _JDISP_GUI_FLOATING_JSH\r
2 #define _JDISP_GUI_FLOATING_JSH\r
3 \r
4 OOP_CLASS(Floating) = function()\r
5 {\r
6   this.nodes = [];\r
7 \r
8   var me = this;\r
9   var f = function () {\r
10     me.adjustComponents();\r
11   };\r
12   PROJECT_PREFIX.domUtils.setScrollHandler(f);\r
13   PROJECT_PREFIX.domUtils.setResizeHandler(f);\r
14   f();\r
15 };\r
16 OOP_FIELD(Floating, nodes) = null;\r
17 \r
18 OOP_METHOD(Floating, add) = function (node)\r
19 {\r
20   var n = PROJECT_PREFIX.domUtils.getNode(node);\r
21   if (IS_NON_NULL_OBJECT(n)) {\r
22     this.nodes.push(n);\r
23     this.adjustComponent(n);\r
24   }\r
25 };\r
26 OOP_METHOD(Floating, remove) = function (node)\r
27 {\r
28   var n = PROJECT_PREFIX.domUtils.getNode(node);\r
29 \r
30   for (var i in this.nodes) {\r
31     if (n === this.nodes[i]) {\r
32       delete this.nodes[i];\r
33     }\r
34   }\r
35 };\r
36 \r
37 OOP_METHOD(Floating, adjustComponents) = function ()\r
38 {\r
39   for (var i in this.nodes) {\r
40     var n = this.nodes[i];\r
41     this.adjustComponent(n);\r
42   }\r
43 };\r
44 \r
45 OOP_METHOD(Floating, adjustComponent) = function (node)\r
46 {\r
47   var util = PROJECT_PREFIX.domUtils;\r
48   var n = util.getNode(node);\r
49   if (!IS_NON_NULL_OBJECT(n)) return;\r
50   n.style.position = 'absolute';\r
51   var es  = util.getElementSize(n);\r
52   var pos = util.getScrollPosition();\r
53   var cs  = util.getClientSize();\r
54   var ss  = util.getScrollSize();\r
55   var x = cs.width  + pos.x - n.offsetWidth;\r
56   var y = cs.height + pos.y - n.offsetHeight;\r
57   LOG_DEBUG\r
58     ( 'adjustComponent: '\r
59     + ' es=' + PROJECT_PREFIX.stringUtils.formatDimension(es)\r
60     + ' es=' + PROJECT_PREFIX.global.dumpVar(es)\r
61     + ',pos=' + PROJECT_PREFIX.stringUtils.formatPoint(pos)\r
62     + ',cs(b)=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getClientSizeByBody())\r
63     + ',cs(de)=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getClientSizeByDocument())\r
64     + ',cs=' + PROJECT_PREFIX.stringUtils.formatDimension(cs)\r
65     + ',ss(b)=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getScrollSizeByBody())\r
66     + ',ss(de)=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getScrollSizeByDocument())\r
67     + ',ss=' + PROJECT_PREFIX.stringUtils.formatDimension(ss)\r
68     + ',in=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getInnerSize())\r
69     + ',out=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getOuterSize())\r
70     + ',avail=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getAvailableSize())\r
71     + ',screen=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getScreenSize())\r
72     + ',new=' + PROJECT_PREFIX.stringUtils.formatPoint({x:x,y:y})\r
73     );\r
74   util.setElementPosition(n, x, y);\r
75 };\r
76 \r
77 #endif /* _JDISP_GUI_FLOATING_JSH */\r