Revision: 4592
http://sourceforge.net/p/vexi/code/4592
Author: clrg
Date: 2013-11-21 14:41:09 +0000 (Thu, 21 Nov 2013)
Log Message:
-----------
Box redirect properties extended to:
- text properties: font, fontsize, text, textcolor
- child control: align, layout, orient
Modified Paths:
--------------
branches/vexi4c/org.vexi-core.main/src/main/java/org/vexi/core/Constants.java
branches/vexi4c/org.vexi-core.main/src/main/jpp/org/vexi/core/Box.jpp
branches/vexi4c/org.vexi-core.main/src/test/java/test/core/box/TestBox.java
branches/vexi4c/org.vexi-core.main/src/test/java/test/core/box/redirect.t
Modified:
branches/vexi4c/org.vexi-core.main/src/main/java/org/vexi/core/Constants.java
===================================================================
---
branches/vexi4c/org.vexi-core.main/src/main/java/org/vexi/core/Constants.java
2013-11-21 14:33:24 UTC (rev 4591)
+++
branches/vexi4c/org.vexi-core.main/src/main/java/org/vexi/core/Constants.java
2013-11-21 14:41:09 UTC (rev 4592)
@@ -6,6 +6,7 @@
public interface Constants extends org.ibex.js.Constants {
static final JS SC_0 = JSU.S("0",true);
static final JS SC_add = JSU.S("add",true);
+ static final JS SC_align = JSU.S("align",true);
static final JS SC_align_topleft = JSU.S("topleft",true);
static final JS SC_align_top = JSU.S("top",true);
static final JS SC_align_topright = JSU.S("topright",true);
@@ -38,7 +39,9 @@
static final JS SC_hshrink = JSU.S("hshrink",true);
static final JS SC_html = JSU.S("html",true);
static final JS SC_indexof = JSU.S("indexof",true);
+ static final JS SC_orient = JSU.S("orient",true);
static final JS SC_layer = JSU.S("layer",true);
+ static final JS SC_layout = JSU.S("layout",true);
static final JS SC_maxheight = JSU.S("maxheight",true);
static final JS SC_maxwidth = JSU.S("maxwidth",true);
static final JS SC_minheight = JSU.S("minheight",true);
@@ -52,6 +55,8 @@
static final JS SC_stringify = JSU.S("stringify",true);
static final JS SC_subComponents = JSU.S("subComponents",true);
static final JS SC_surface = JSU.S("surface",true);
+ static final JS SC_text = JSU.S("text",true);
+ static final JS SC_textcolor = JSU.S("textcolor",true);
static final JS SC_thisobj = JSU.S("thisobj",true);
static final JS SC_vertical = JSU.S("vertical",true);
static final JS SC_visible = JSU.S("visible",true);
Modified: branches/vexi4c/org.vexi-core.main/src/main/jpp/org/vexi/core/Box.jpp
===================================================================
--- branches/vexi4c/org.vexi-core.main/src/main/jpp/org/vexi/core/Box.jpp
2013-11-21 14:33:24 UTC (rev 4591)
+++ branches/vexi4c/org.vexi-core.main/src/main/jpp/org/vexi/core/Box.jpp
2013-11-21 14:41:09 UTC (rev 4592)
@@ -1782,7 +1782,7 @@
case "path":
if (path != null) return JSU.S(path.toString());
String ret = "";
- for(int i=0; i<visual.str.length(); i++) ret +=
font.glyphs[visual.str.charAt(i)].path;
+ for(int i=0; i<visual.text.length(); i++) ret +=
font.glyphs[visual.text.charAt(i)].path;
return JSU.S(ret);
case "strokecolor": return JSU.S(Color.colorToString(strokecolor));
case "strokewidth": return JSU.N(strokewidth);
@@ -1833,7 +1833,10 @@
* @initial_value(vexi.ui.font.vera)
* @nofollow
* */
- case "font": return visual.font.stream;
+ case "font":
+ if (redirect == null) return null;
+ if (redirect == this) return visual.font.stream;
+ return redirect.getAndTriggerTraps(SC_font);
/* <p>The size, either in points or relative size, to render the
text.</p>
*
@@ -1854,7 +1857,10 @@
* @type(Number)
* @initial_value("medium")
* */
- case "fontsize": return BoxVisual.sizeToJS(visual.fontsize);
+ case "fontsize":
+ if (redirect == null) return null;
+ if (redirect == this) return
BoxVisual.sizeToJS(visual.fontsize);
+ return redirect.getAndTriggerTraps(SC_fontsize);
/* <p>The text of a box. Visually <code>null</code> renders the same
as the text to ""
* (i.e as nothing).</p>
@@ -1863,7 +1869,10 @@
* @type(String)
* @nofollow
* */
- case "text": return visual.text;
+ case "text":
+ if (redirect == null) return null;
+ if (redirect == this) return visual.text;
+ return redirect.getAndTriggerTraps(SC_text);
/* <p>If the value is a 5-character hex string (#RGB), 7-character hex
string (#RRGGBB),
* 9-character hex string (#AARRGGBB), a box's text color will be set
to that color.</p>
@@ -1877,7 +1886,10 @@
* @initial_value("#ffffff")
* @type(String)
* */
- case "textcolor": return JSU.S(Color.colorToString(visual.textcolor));
+ case "textcolor":
+ if (redirect == null) return null;
+ if (redirect == this) return
JSU.S(Color.colorToString(visual.textcolor));
+ return redirect.getAndTriggerTraps(SC_textcolor);
/* <p>This property can be set to any of the values specified for
textcolor. If the value
* written is a stream then it will interpreted as a PNG, GIF, or JPEG
image, which will
@@ -1913,6 +1925,30 @@
* @type(Box)
*/
//also "<em>numeric properties</em>":
+
+ /* <p>Determines a box's alignment point. This affects the position
of:</p>
+ *
+ * <div class="itemizedlist"><ul type="disc">
+ * <li>the box's textual content</li>
+ * <li>a tiled texture</li>
+ * <li>children within the space allocated to them by the layout
method of the box</li>
+ * </ul></div>
+ *
+ * <p>Valid values are:</p>
+ *
+ * <ul><li><code>"center"</code>, <code>"left"</code>,
<code>"right"</code>, <code>"top"</code>, <code>"bottom"</code>,
+ * <code>"bottomleft"</code>, <code>"bottomright"</code>,
<code>"topleft"</code>, <code>"topright"</code></li></ul>
+ *
+ * <p>If this box has a redirect, it will return the align of the
redirect.
+ * If redirect is set to null, it will return null.</p>
+ *
+ * @type(String)
+ * @initial_value("center")
+ * */
+ case "align":
+ if (redirect == null) return null;
+ if (redirect == this) return alignToJS();
+ return redirect.getAndTriggerTraps(SC_align);
/* <p>The layout strategy for a box - how it lays out it's
children.</p>
*
@@ -1928,13 +1964,22 @@
* <p>Layered children behaved like placed children, only the parent
box will respect
* the contentsizes of it's children.</p>
*
+ * <p>If this box has a redirect, it will return the layout of the
redirect.
+ * If redirect is set to null, it will return null.</p>
+ *
* @type(String)
* @initial_value("pack")
* */
- case "layout": return test(PACK) ? SC_pack : (test(CLIP) ? SC_place :
SC_layer);
+ case "layout":
+ if (redirect == null) return null;
+ if (redirect == this) return test(PACK) ? SC_pack : (test(CLIP)
? SC_place : SC_layer);
+ return redirect.getAndTriggerTraps(SC_layout);
/* <p><em>Read only</em> reflecting the number of children a box
has.</p>
*
+ * <p>If this box has a redirect, it will return the number of
children of the
+ * redirect. If redirect is set to null, it will return 0.</p>
+ *
* @initial_value(varies,code=false)
* @type(Number)
* */
@@ -1946,10 +1991,16 @@
/* <p>The direction the children are layed out in the box when
<code>layout="pack"</code>.
* Valid values are <code>"horizontal"</code> or
<code>"vertical"</code>.</p>
*
+ * <p>If this box has a redirect, it will return the orient of the
redirect.
+ * If redirect is set to null, it will return null.</p>
+ *
* @type(String)
* @initial_value("horizontal")
* */
- case "orient": return test(ORIENT) ? SC_horizontal : SC_vertical;
+ case "orient":
+ if (redirect == null) return null;
+ if (redirect == this) return test(ORIENT) ? SC_horizontal :
SC_vertical;
+ return redirect.getAndTriggerTraps(SC_orient);
/* <p>Writing to this property sets a box's redirect target. Reading
from this property
* will return a boolean instead of the redirect target -
<code>true</code> if redirect
@@ -2157,24 +2208,6 @@
case "contentwidth": return JSU.N(contentwidth);
case "contentheight": return JSU.N(contentheight);
- /* <p>Determines a box's alignment point. This affects the position
of:</p>
- *
- * <div class="itemizedlist"><ul type="disc">
- * <li>the box's textual content</li>
- * <li>a tiled texture</li>
- * <li>children within the space allocated to them by the layout
method of the box</li>
- * </ul></div>
- *
- * <p>Valid values are:</p>
- *
- * <ul><li><code>"center"</code>, <code>"left"</code>,
<code>"right"</code>, <code>"top"</code>, <code>"bottom"</code>,
- * <code>"bottomleft"</code>, <code>"bottomright"</code>,
<code>"topleft"</code>, <code>"topright"</code></li></ul>
- *
- * @type(String)
- * @initial_value("center")
- * */
- case "align": return alignToJS();
-
/* <p>Whether to display a box and it's contents.</p>
*
* <p>If this box is the root box of a window, its display property
will determine whether
@@ -2436,6 +2469,13 @@
throw new JSExn("Attempt to put non-null value to the
'thisbox' property");
}
case "font":
+ if (redirect == null) {
+ throw new JSExn("Attempt to set "+name+" on a box with
a null redirect");
+ }
+ if (redirect != this) {
+ redirect.putAndTriggerTraps(name, value);
+ return;
+ }
// We do not convert to a fountain straight away as if it is a
Blessing then
// the fountain won't work as it will refer to the file/url
without .ttf. For
// the moment we handle Blessings separately for this reason.
@@ -2457,6 +2497,13 @@
dirty();
}
case "fontsize":
+ if (redirect == null) {
+ throw new JSExn("Attempt to set "+name+" on a box with
a null redirect");
+ }
+ if (redirect != this) {
+ redirect.putAndTriggerTraps(name, value);
+ return;
+ }
if (value==null) {
if (!visual.resetFontsize()) {
return;
@@ -2471,6 +2518,13 @@
dirty();
}
case "text":
+ if (redirect == null) {
+ throw new JSExn("Attempt to set "+name+" on a box with
a null redirect");
+ }
+ if (redirect != this) {
+ redirect.putAndTriggerTraps(name, value);
+ return;
+ }
JSString s = value == null ? null :
value instanceof JSString ? (JSString)value :
(JSString)JSU.S(JSU.toString(value));
if (visual.setString(s, this)) {
@@ -2478,6 +2532,13 @@
dirty();
}
case "textcolor":
+ if (redirect == null) {
+ throw new JSExn("Attempt to set "+name+" on a box with
a null redirect");
+ }
+ if (redirect != this) {
+ redirect.putAndTriggerTraps(name, value);
+ return;
+ }
try {
if (value==null) {
if (!visual.resetTextcolor()) {
@@ -2593,7 +2654,6 @@
// checks for and invokes cursor update
s.processMousePosition();
}
- case "align": setAlign(value);
case "fill":
if (value == null && visual.texture != null && test(TILE_IMAGE)) {
setConstrain();
@@ -2612,7 +2672,23 @@
}
}
}
+ case "align":
+ if (redirect == null) {
+ throw new JSExn("Attempt to set "+name+" on a box with
a null redirect");
+ }
+ if (redirect != this) {
+ redirect.putAndTriggerTraps(name, value);
+ return;
+ }
+ setAlign(value);
case "layout":
+ if (redirect == null) {
+ throw new JSExn("Attempt to set "+name+" on a box with
a null redirect");
+ }
+ if (redirect != this) {
+ redirect.putAndTriggerTraps(name, value);
+ return;
+ }
if (SC_place.equals(value)) {
if (!test(PACK) && test(CLIP)) {
return;
@@ -2641,6 +2717,13 @@
throw new JSExn("Attempt to set Box property 'layout' to
unsupported value '"+JSU.toString(value)+"'");
}
case "orient":
+ if (redirect == null) {
+ throw new JSExn("Attempt to set "+name+" on a box with
a null redirect");
+ }
+ if (redirect != this) {
+ redirect.putAndTriggerTraps(name, value);
+ return;
+ }
if (SC_horizontal.equals(value)) {
if (test(ORIENT)) {
return;
Modified:
branches/vexi4c/org.vexi-core.main/src/test/java/test/core/box/TestBox.java
===================================================================
--- branches/vexi4c/org.vexi-core.main/src/test/java/test/core/box/TestBox.java
2013-11-21 14:33:24 UTC (rev 4591)
+++ branches/vexi4c/org.vexi-core.main/src/test/java/test/core/box/TestBox.java
2013-11-21 14:41:09 UTC (rev 4592)
@@ -40,7 +40,7 @@
public static void main(String[] args) throws Throwable {
CoreTestSuite cts = new CoreTestSuite(TestBox.class);
- TestCase t = cts.createTestCase(cts.getResourceDirs(), "pis_method.t");
+ TestCase t = cts.createTestCase(cts.getResourceDirs(), "redirect.t");
t.runBare();
}
Modified:
branches/vexi4c/org.vexi-core.main/src/test/java/test/core/box/redirect.t
===================================================================
--- branches/vexi4c/org.vexi-core.main/src/test/java/test/core/box/redirect.t
2013-11-21 14:33:24 UTC (rev 4591)
+++ branches/vexi4c/org.vexi-core.main/src/test/java/test/core/box/redirect.t
2013-11-21 14:41:09 UTC (rev 4592)
@@ -10,11 +10,26 @@
b2[1] = lib..newBox("b");
b1[2] = lib..newBox("c");
b1[3] = lib..newBox("d");
+
+ var isEq = .util..assertEquals;
- //.util..assertEquals("a",b2[0].text);
- .util..assertEquals("b",b1[1].text);
- //.util..assertEquals("c",b2[2].text);
- //.util..assertEquals("d",b1[3].text);
+ //isEq("a",b2[0].text);
+ isEq("b",b1[1].text);
+ //isEq("c",b2[2].text);
+ //isEq("d",b1[3].text);
+
+ b1.text = "foo";
+ isEq(b2.text, "foo");
+ b1.fontsize = 16;
+ isEq(b2.fontsize, 16);
+ //b1.font = font;
+ //isEq(b2.font, font);
+ b1.align = "top";
+ isEq(b2.align, "top");
+ b1.layout = "place";
+ isEq(b2.layout, "place");
+ b1.orient = "vertical";
+ isEq(b2.orient, "vertical");
<ui:box/>
</vexi>
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing
conversations that shape the rapidly evolving mobile landscape. Sign up now.
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn