disable java view, add tab management 23/17923/1
Antoine ELIAS [Mon, 14 Mar 2016 10:14:22 +0000 (11:14 +0100)]
Change-Id: I7fab49aecec01ac200112691c744788b981076ce

scilab/modules/core/src/java/org/scilab/modules/core/Scilab.java
scilab/modules/graphic_objects/src/cpp/ScilabWebView.cpp
scilab/modules/graphic_objects/src/cpp/webutils.cpp
scilab/modules/graphic_objects/src/cpp/webutils.hxx
scilab/node/html/index.html
scilab/node/loader.sce

index 7bbf96c..d8eb43e 100644 (file)
@@ -125,7 +125,9 @@ public class Scilab {
          * they must be set before creating GUI
          */
         setJOGLFlags();
-        SwingView.registerSwingView();
+        
+        //disable swing view
+        //SwingView.registerSwingView();
 
         /*
          * if not API mode
index d4a8560..7306bb0 100644 (file)
@@ -126,6 +126,13 @@ void ScilabWebView::registerToController(void)
                 WebUtils::updateValue(uid, value);
                 break;
             }
+
+            case __GO_UI_TAB__:
+            {
+                double value = (double)data->get_map()["value"]->get_int();
+                WebUtils::updateValue(uid, value);
+                break;
+            }
         }
 
         l.cond.notify_all();
@@ -225,7 +232,7 @@ void ScilabWebView::updateObject(int uid, int prop)
     {
         switch (prop)
         {
-            case __GO_SIZE__:
+            case __GO_AXES_SIZE__:
             {
                 std::ostringstream ostr;
                 WebUtils::setFigureSize(uid, ostr);
index bf5d010..2e7be18 100644 (file)
@@ -221,16 +221,22 @@ void WebUtils::setParent(int uid, std::ostringstream& ostr, bool append)
 
     if (append == false)
     {
-        ostr << "var __child__ = " << getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "var __parent__ = " << getElementById(parent);
-    ostr << "__parent__.appendChild(__child__);";
+    ostr << "var __parent__ = " << getElementById(parent) << std::endl;
+    ostr << "__parent__.appendChild(__child__);" << std::endl;
 
-    if (getUILayout(parent) == LAYOUT_BORDER)
+    if (hasStyle(parent, __GO_UI_TAB__))
+    {
+        //add button and properties for tab
+        addTabChild(parent, uid, ostr);
+    }
+
+    if (getUILayout(parent) == LAYOUT_BORDER && hasStyle(parent, __GO_UI_TAB__) == false)
     {
         //force update of border position, especially for center
-        addInWaitingQueue(uid, __GO_UI_BORDER_POSITION__);
+        addInWaitingQueue(uid, __GO_UI_BORDER_PREFERREDSIZE__);
     }
 
     setWaitingProperties(uid, ostr, true);
@@ -250,10 +256,10 @@ void WebUtils::setFigureSize(int uid, std::ostringstream& ostr, bool append)
 
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
-    ostr << "__child__.style.width = '" << size[0] << "px';";
-    ostr << "__child__.style.height = '" << size[1] << + "px';";
+    ostr << "__child__.style.width = '" << size[0] << "px';" << std::endl;
+    ostr << "__child__.style.height = '" << size[1] << "px';" << std::endl;
 }
 
 int WebUtils::getFigureId(int uid)
@@ -289,13 +295,13 @@ void WebUtils::setUIPosition(int uid, std::ostringstream& ostr, bool append)
 
     if (append == false)
     {
-        ostr << "var __child__ = " << getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.left = '" << (int)pos[0] << "px';";
-    ostr << "__child__.style.bottom = '" << (int)pos[1] << "px';";
-    ostr << "__child__.style.width = '" << (int)pos[2] << "px';";
-    ostr << "__child__.style.height = '" << (int)pos[3] << "px';";
+    ostr << "__child__.style.left = '" << (int)pos[0] << "px';" << std::endl;
+    ostr << "__child__.style.bottom = '" << (int)pos[1] << "px';" << std::endl;
+    ostr << "__child__.style.width = '" << (int)pos[2] << "px';" << std::endl;
+    ostr << "__child__.style.height = '" << (int)pos[3] << "px';" << std::endl;
 
     //to ensure vertical alignement, adapt style.line-height
     if (hasStyle(uid, __GO_UI_TEXT__) || hasStyle(uid, __GO_UI_CHECKBOX__) || hasStyle(uid, __GO_UI_RADIOBUTTON__))
@@ -304,11 +310,11 @@ void WebUtils::setUIPosition(int uid, std::ostringstream& ostr, bool append)
         getUIVerticalAlignment(uid, v);
         if (v == "middle")
         {
-            ostr << "__child__.style.lineHeight = '" + std::to_string((int)pos[3]) + "px';";
+            ostr << "__child__.style.lineHeight = '" << (int)pos[3] << "px';" << std::endl;
         }
         else
         {
-            ostr << "__child__.style.lineHeight = 'initial';";
+            ostr << "__child__.style.lineHeight = 'initial';" << std::endl;
         }
     }
 }
@@ -322,56 +328,91 @@ void WebUtils::setUIString(int uid, std::ostringstream& ostr, bool append)
         s.push_back("");
     }
 
-    if (hasStyle(uid, __GO_UI_CHECKBOX__) || hasStyle(uid, __GO_UI_RADIOBUTTON__))
+    switch (getStyle(uid))
     {
-        if (append == false)
+        case __GO_UI_CHECKBOX__:
+        case __GO_UI_RADIOBUTTON__:
         {
-            ostr << "";
+            if (append == false)
+            {
+                ostr << "var __child__ = " << getElementById(uid) << std::endl;
+            }
+
+            ostr << "var __label__ = " << getElementById(uid, "_label") << std::endl;
+            ostr << "__label__.innerHTML = '" << s[0] << "';" << std::endl;
+            break;
         }
 
-        ostr << "var __label__ = " << getElementById(uid, "_label");
-        ostr << "__label__.innerHTML = '" << s[0] << "';";
-    }
-    else if (hasStyle(uid, __GO_UI_POPUPMENU__) || hasStyle(uid, __GO_UI_LISTBOX__))
-    {
-        if (append == false)
+        case __GO_UI_POPUPMENU__ :
+        case __GO_UI_LISTBOX__:
         {
-            ostr << "var __child__ = " + getElementById(uid);
-        }
+            if (append == false)
+            {
+                ostr << "var __child__ = " << getElementById(uid) << std::endl;
+            }
 
-        //remove previous values
-        ostr << "while (__child__.length) {__child__.remove(0);}";
+            //remove previous values
+            ostr << "while (__child__.length) {__child__.remove(0);}" << std::endl;
 
-        ostr << "var option;";
-        int size = (int)s.size();
-        for (int i = 0; i < size; ++i)
-        {
-            ostr << "option = new Option('" + s[i] + "');";
-            ostr << "__child__.add(option);";
-        }
+            ostr << "var option;" << std::endl;
+            int size = (int)s.size();
+            for (int i = 0; i < size; ++i)
+            {
+                ostr << "option = new Option('" << s[i] << "');" << std::endl;
+                ostr << "__child__.add(option);" << std::endl;
+            }
 
-        if (hasStyle(uid, __GO_UI_LISTBOX__))
-        {
-            //switch to listbox instead of combobox
-            ostr << "__child__.size = 2;";
+            if (hasStyle(uid, __GO_UI_LISTBOX__))
+            {
+                //switch to listbox instead of combobox
+                ostr << "__child__.size = 2;" << std::endl;
+            }
+            break;
         }
-    }
-    else
-    {
-        if (append == false)
+
+        case __GO_UI_TAB__:
         {
-            ostr << "var __child__ = " + getElementById(uid);
+            //nothing to do
+            break;
         }
 
-        if (isInputType(uid))
+        case __GO_UI_FRAME__:
         {
-            ostr << "__child__.value = '" + s[0] + "';";
+            //if parent is a GO_UI_TAB, change value of button
+            if (hasStyle(getParent(uid), __GO_UI_TAB__))
+            {
+                if (append == false)
+                {
+                    ostr << "var __child__ = " << getElementById(uid) << std::endl;
+                }
+
+                ostr << "var __btn__ = " + getElementById(uid, "_btn") << std::endl;
+                ostr << "__btn__.value = '" << s[0] << "';" << std::endl;
+            }
+            break;
         }
-        else
+
+        default:
         {
-            ostr << "__child__.innerHTML = '" + s[0] + "';";
+            if (append == false)
+            {
+                ostr << "var __child__ = " << getElementById(uid) << std::endl;
+            }
+
+            if (isInputType(uid))
+            {
+                ostr << "__child__.value = '" << s[0] << "';" << std::endl;
+            }
+            else
+            {
+                ostr << "__child__.innerHTML = '" << s[0] << "';" << std::endl;
+            }
+            break;
         }
     }
+    
+    {
+    }
 }
 
 bool WebUtils::getVisible(int uid)
@@ -385,10 +426,10 @@ void WebUtils::setVisible(int uid, std::ostringstream& ostr, bool append)
     std::string v = getVisible(uid) ? "inherit" : "hidden";
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.visibility  = '" + v + "';";
+    ostr << "__child__.style.visibility  = '" << v << "';" << std::endl;
 }
 
 bool WebUtils::getUIEnable(int uid)
@@ -402,10 +443,10 @@ void WebUtils::setUIEnable(int uid, std::ostringstream& ostr, bool append)
     std::string v = getUIEnable(uid) ? "false" : "true";
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.disabled  = " + v + ";";
+    ostr << "__child__.disabled  = " << v << ";" << std::endl;
 }
 
 bool WebUtils::getUIBackgroundColor(int uid, std::vector<double>& vect)
@@ -421,10 +462,10 @@ void WebUtils::setUIBackgroundColor(int uid, std::ostringstream& ostr, bool appe
     getUIBackgroundColor(uid, c);
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.backgroundColor  = " + getColor(c) + ";";
+    ostr << "__child__.style.backgroundColor  = " << getColor(c) << ";" << std::endl;
 }
 
 bool WebUtils::getUIFontAngle(int uid, std::string& val)
@@ -439,10 +480,10 @@ void WebUtils::setUIFontAngle(int uid, std::ostringstream& ostr, bool append)
     getUIFontAngle(uid, angle);
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.fontStyle  = '" + angle + "';";
+    ostr << "__child__.style.fontStyle  = '" << angle << "';" << std::endl;
 }
 
 bool WebUtils::getUIFontName(int uid, std::string& val)
@@ -457,10 +498,10 @@ void WebUtils::setUIFontName(int uid, std::ostringstream& ostr, bool append)
     getUIFontName(uid, font);
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.fontFamily  = '" + font + "','serif' ;";
+    ostr << "__child__.style.fontFamily  = '" << font << "','serif' ;" << std::endl;
 }
 
 bool WebUtils::getUIFontUnits(int uid, std::string& val)
@@ -493,10 +534,10 @@ void WebUtils::setUIFontSize(int uid, std::ostringstream& ostr, bool append)
 
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.fontSize  = '" + std::to_string(size) + units + "';";
+    ostr << "__child__.style.fontSize  = '" << size << units << "';" << std::endl;
 }
 
 bool WebUtils::getUIFontWeight(int uid, std::string& val)
@@ -512,10 +553,10 @@ void WebUtils::setUIFontWeight(int uid, std::ostringstream& ostr, bool append)
 
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.fontWeight  = '" + weight + "';";
+    ostr << "__child__.style.fontWeight  = '" << weight << "';" << std::endl;
 }
 
 bool WebUtils::getUIForegroundColor(int uid, std::vector<double>& vect)
@@ -532,10 +573,10 @@ void WebUtils::setUIForegroundColor(int uid, std::ostringstream& ostr, bool appe
 
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.color  = " + getColor(c) + ";";
+    ostr << "__child__.style.color  = " << getColor(c) << ";" << std::endl;
 }
 
 bool WebUtils::getUIHorizontalAlignment(int uid, std::string& val)
@@ -551,10 +592,10 @@ void WebUtils::setUIHorizontalAlignment(int uid, std::ostringstream& ostr, bool
 
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.textAlign  = '" + align + "';";
+    ostr << "__child__.style.textAlign  = '" << align << "';" << std::endl;
 }
 
 bool WebUtils::getUIRelief(int uid, std::string& val)
@@ -591,7 +632,7 @@ void WebUtils::setUILayout(int uid, std::ostringstream& ostr, bool append)
 
         if (append == false)
         {
-            ostr << "var __child__ = " + getElementById(uid) + ";";
+            ostr << "var __child__ = " << getElementById(uid) << ";" << std::endl;
         }
 
         int layout = getUILayout(uid);
@@ -613,59 +654,59 @@ void WebUtils::setUILayout(int uid, std::ostringstream& ostr, bool append)
                 //+---------------------+
 
                 //table
-                ostr << "var __table__ = " + createElement("TABLE");
-                ostr << "__table__.id = " + getIdString(uid, "_table") + ";";
-                ostr << "__table__.style.margin = '0';";
-                ostr << "__table__.style.padding = '0';";
-                ostr << "__table__.style.width = '100%';";
-                ostr << "__table__.style.height = '100%';";
-                ostr << "__table__.style.borderCollapse = 'collapse';";
+                ostr << "var __table__ = " << createElement("TABLE") << std::endl;
+                ostr << "__table__.id = " << getIdString(uid, "_table") << ";" << std::endl;
+                ostr << "__table__.style.margin = '0';" << std::endl;
+                ostr << "__table__.style.padding = '0';" << std::endl;
+                ostr << "__table__.style.width = '100%';" << std::endl;
+                ostr << "__table__.style.height = '100%';" << std::endl;
+                ostr << "__table__.style.borderCollapse = 'collapse';" << std::endl;
 
                 //rows
-                ostr << "var __tr_top__ = " + createElement("TR");
-                ostr << "var __tr_middle__ = " + createElement("TR");
-                ostr << "var __tr_bottom__ = " + createElement("TR");
+                ostr << "var __tr_top__ = " << createElement("TR") << std::endl;
+                ostr << "var __tr_middle__ = " << createElement("TR") << std::endl;
+                ostr << "var __tr_bottom__ = " << createElement("TR") << std::endl;
 
                 //cell in rows
-                ostr << "var __td_top__ = " + createElement("TD");
-                ostr << "__td_top__.colSpan = '3';";
-                ostr << "__td_top__.id = " + getIdString(uid, "_top") + ";";
-                ostr << "__td_top__.style.width = '100%';";
+                ostr << "var __td_top__ = " << createElement("TD") << std::endl;
+                ostr << "__td_top__.colSpan = '3';" << std::endl;
+                ostr << "__td_top__.id = " << getIdString(uid, "_top") << ";" << std::endl;
+                ostr << "__td_top__.style.width = '100%';" << std::endl;
 
-                ostr << "var __td_left__ = " + createElement("TD");
-                ostr << "__td_left__.id = " + getIdString(uid, "_left") + ";";
-                ostr << "__td_left__.style.height = '100%';";
+                ostr << "var __td_left__ = " << createElement("TD") << std::endl;
+                ostr << "__td_left__.id = " << getIdString(uid, "_left") << ";" << std::endl;
+                ostr << "__td_left__.style.height = '100%';" << std::endl;
 
-                ostr << "var __td_center__ = " + createElement("TD");
-                ostr << "__td_center__.id = " + getIdString(uid, "_center") + ";";
-                ostr << "__td_center__.style.width = '100%';";
-                ostr << "__td_center__.style.height = '100%';";
+                ostr << "var __td_center__ = " << createElement("TD") << std::endl;
+                ostr << "__td_center__.id = " << getIdString(uid, "_center") << ";" << std::endl;
+                ostr << "__td_center__.style.width = '100%';" << std::endl;
+                ostr << "__td_center__.style.height = '100%';" << std::endl;
 
-                ostr << "var __td_right__ = " + createElement("TD");
-                ostr << "__td_right__.id = " + getIdString(uid, "_right") + ";";
-                ostr << "__td_right__.style.height = '100%';";
+                ostr << "var __td_right__ = " << createElement("TD") << std::endl;
+                ostr << "__td_right__.id = " << getIdString(uid, "_right") << ";" << std::endl;
+                ostr << "__td_right__.style.height = '100%';" << std::endl;
 
-                ostr << "var __td_bottom__ = " + createElement("TD");
-                ostr << "__td_bottom__.colSpan = '3';";
-                ostr << "__td_bottom__.id = " + getIdString(uid, "_bottom") + ";";
-                ostr << "__td_bottom__.style.width = '100%';";
+                ostr << "var __td_bottom__ = " << createElement("TD") << std::endl;
+                ostr << "__td_bottom__.colSpan = '3';" << std::endl;
+                ostr << "__td_bottom__.id = " << getIdString(uid, "_bottom") << ";" << std::endl;
+                ostr << "__td_bottom__.style.width = '100%';" << std::endl;
 
                 //hierarchy
 
                 //td in tr
-                ostr << "__tr_top__.appendChild(__td_top__);";
-                ostr << "__tr_middle__.appendChild(__td_left__);";
-                ostr << "__tr_middle__.appendChild(__td_center__);";
-                ostr << "__tr_middle__.appendChild(__td_right__);";
-                ostr << "__tr_bottom__.appendChild(__td_bottom__);";
+                ostr << "__tr_top__.appendChild(__td_top__);" << std::endl;
+                ostr << "__tr_middle__.appendChild(__td_left__);" << std::endl;
+                ostr << "__tr_middle__.appendChild(__td_center__);" << std::endl;
+                ostr << "__tr_middle__.appendChild(__td_right__);" << std::endl;
+                ostr << "__tr_bottom__.appendChild(__td_bottom__);" << std::endl;
 
                 //tr in table
-                ostr << "__table__.appendChild(__tr_top__);";
-                ostr << "__table__.appendChild(__tr_middle__);";
-                ostr << "__table__.appendChild(__tr_bottom__);";
+                ostr << "__table__.appendChild(__tr_top__);" << std::endl;
+                ostr << "__table__.appendChild(__tr_middle__);" << std::endl;
+                ostr << "__table__.appendChild(__tr_bottom__);" << std::endl;
 
                 //table in parent
-                ostr << "__child__.appendChild(__table__);";
+                ostr << "__child__.appendChild(__table__);" << std::endl;
 
                 break;
             }
@@ -676,16 +717,16 @@ void WebUtils::setUILayout(int uid, std::ostringstream& ostr, bool append)
             case LAYOUT_GRIDBAG:
             {
                 //add empty table
-                ostr << "var __table__ = " + createElement("TABLE");
-                ostr << "__table__.id = " + getIdString(uid, "_table") + ";";
-                ostr << "__table__.style.margin = '0';";
-                ostr << "__table__.style.padding = '0';";
-                ostr << "__table__.style.width = '100%';";
-                ostr << "__table__.style.height = '100%';";
-                ostr << "__table__.style.borderCollapse = 'collapse';";
+                ostr << "var __table__ = " << createElement("TABLE") << std::endl;
+                ostr << "__table__.id = " << getIdString(uid, "_table") << ";" << std::endl;
+                ostr << "__table__.style.margin = '0';" << std::endl;
+                ostr << "__table__.style.padding = '0';" << std::endl;
+                ostr << "__table__.style.width = '100%';" << std::endl;
+                ostr << "__table__.style.height = '100%';" << std::endl;
+                ostr << "__table__.style.borderCollapse = 'collapse';" << std::endl;
 
                 //table in parent
-                ostr << "__child__.appendChild(__table__);";
+                ostr << "__child__.appendChild(__table__);" << std::endl;
                 break;
             }
             default:
@@ -711,10 +752,10 @@ void WebUtils::setUIMin(int uid, std::ostringstream& ostr, bool append)
 
         if (append == false)
         {
-            ostr << "var __child__ = " + getElementById(uid);
+            ostr << "var __child__ = " << getElementById(uid) << std::endl;
         }
 
-        ostr << "__child__.min  = '" + std::to_string(min) + "';";
+        ostr << "__child__.min  = '" << min << "';" << std::endl;
     }
 }
 
@@ -731,10 +772,10 @@ void WebUtils::setUIMax(int uid, std::ostringstream& ostr, bool append)
 
         if (append == false)
         {
-            ostr << "var __child__ = " + getElementById(uid);
+            ostr << "var __child__ = " << getElementById(uid) << std::endl;
         }
 
-        ostr << "__child__.max  = '" + std::to_string(max) + "';";
+        ostr << "__child__.max  = '" << max << "';" << std::endl;
     }
 }
 
@@ -753,10 +794,10 @@ void WebUtils::setUIStep(int uid, std::ostringstream& ostr, bool append)
 
         if (append == false)
         {
-            ostr << "var __child__ = " + getElementById(uid);
+            ostr << "var __child__ = " << getElementById(uid) << std::endl;
         }
 
-        ostr << "__child__.step  = '" + std::to_string(step) + "';";
+        ostr << "__child__.step  = '" << step << "';" << std::endl;
     }
 }
 
@@ -770,21 +811,44 @@ bool WebUtils::getUIValue(int uid, std::vector<double>& vect)
 
 void WebUtils::setUIValue(int uid, std::ostringstream& ostr, bool append)
 {
-    if (hasStyle(uid, __GO_UI_SPINNER__) || hasStyle(uid, __GO_UI_SLIDER__))
+    switch (getStyle(uid))
     {
-        std::vector<double> values;
-        getUIValue(uid, values);
-        if (values.size() == 0)
+        case __GO_UI_SPINNER__:
+        case __GO_UI_SLIDER__:
         {
-            values.push_back(0);
+            std::vector<double> values;
+            getUIValue(uid, values);
+            if (values.size() == 0)
+            {
+                values.push_back(0);
+            }
+
+            if (append == false)
+            {
+                ostr << "var __child__ = " << getElementById(uid) << std::endl;
+            }
+
+            ostr << "__child__.value  = '" << values[0] << "';" << std::endl;
+            break;
         }
 
-        if (append == false)
+        case __GO_UI_TAB__:
         {
-            ostr << "var __child__ = " + getElementById(uid);
-        }
+            std::vector<double> values;
+            getUIValue(uid, values);
+            if (values.size() == 0)
+            {
+                values.push_back(0);
+            }
 
-        ostr << "__child__.value  = '" + std::to_string(values[0]) + "';";
+            if (append == false)
+            {
+                ostr << "var __child__ = " << getElementById(uid) << std::endl;
+            }
+
+            ostr << "tabSelectHelper(__child__, " << values[0] << ");" << std::endl;
+            break;
+        }
     }
 }
 
@@ -808,6 +872,7 @@ int WebUtils::getUIBorderPosition(int uid)
 void WebUtils::setUIBorder(int uid, std::ostringstream& ostr, bool append)
 {
     int parent = getParent(uid);
+    //std::cerr << "setUIBorder : " << uid << " -> " << parent << std::endl;
     std::string position;
     std::string padding;
     int border = getUIBorderPosition(uid);
@@ -822,7 +887,7 @@ void WebUtils::setUIBorder(int uid, std::ostringstream& ostr, bool append)
 
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
     switch (border)
@@ -830,36 +895,36 @@ void WebUtils::setUIBorder(int uid, std::ostringstream& ostr, bool append)
         default:
         case BORDER_CENTER:
             position = "_center";
-            ostr << "__child__.style.width = '100%';";
-            ostr << "__child__.style.height = '100%';";
+            ostr << "__child__.style.width = '100%';" << std::endl;
+            ostr << "__child__.style.height = '100%';" << std::endl;
             padding = getPadding(0, 0, 0, 0);
             break;
         case BORDER_BOTTOM:
             position = "_bottom";
-            ostr << "__child__.style.width = '100%';";
+            ostr << "__child__.style.width = '100%';" << std::endl;
 
             if (size[1] == -1)
             {
-                ostr << "__child__.style.height = 'inherit';";
+                ostr << "__child__.style.height = 'inherit';" << std::endl;
             }
             else
             {
-                ostr << "__child__.style.height = '" + getSubPadding(size[1]) + "';";
+                ostr << "__child__.style.height = '" << getSubPadding(size[1]) << "';" << std::endl;
             }
 
             padding = getPadding(pad[1], 0, 0, 0);
             break;
         case BORDER_TOP:
             position = "_top";
-            ostr << "__child__.style.width = '100%';";
+            ostr << "__child__.style.width = '100%';" << std::endl;
 
             if (size[1] == -1)
             {
-                ostr << "__child__.style.height = 'inherit';";
+                ostr << "__child__.style.height = 'inherit';" << std::endl;
             }
             else
             {
-                ostr << "__child__.style.height = '" + getSubPadding(size[1]) + "';";
+                ostr << "__child__.style.height = '" << getSubPadding(size[1]) << "';" << std::endl;
             }
 
             padding = getPadding(0, 0, pad[1], 0);
@@ -869,14 +934,14 @@ void WebUtils::setUIBorder(int uid, std::ostringstream& ostr, bool append)
 
             if (size[0] == -1)
             {
-                ostr << "__child__.style.width = 'inherit';";
+                ostr << "__child__.style.width = 'inherit';" << std::endl;
             }
             else
             {
-                ostr << "__child__.style.width = '" + getSubPadding(size[0]) + "';";
+                ostr << "__child__.style.width = '" << getSubPadding(size[0]) << "';" << std::endl;
             }
 
-            ostr << "__child__.style.height = '100%';";
+            ostr << "__child__.style.height = '100%';" << std::endl;
             padding = getPadding(0, pad[0], 0, 0);
             break;
         case BORDER_RIGHT:
@@ -884,30 +949,30 @@ void WebUtils::setUIBorder(int uid, std::ostringstream& ostr, bool append)
 
             if (size[0] == -1)
             {
-                ostr << "__child__.style.width = 'inherit';";
+                ostr << "__child__.style.width = 'inherit';" << std::endl;
             }
             else
             {
-                ostr << "__child__.style.width = '" + getSubPadding(size[0]) + "';";
+                ostr << "__child__.style.width = '" << getSubPadding(size[0]) << "';" << std::endl;
             }
 
-            ostr << "__child__.style.height = '100%';";
+            ostr << "__child__.style.height = '100%';" << std::endl;
             padding = getPadding(0, 0, 0, pad[0]);
             break;
     }
 
 
     //move child in targeted cell
-    ostr << "__parent__ = " + getElementById(parent, position);
-    ostr << "__parent__.appendChild(__child__);";
-    ostr << "__parent__.style.padding = '" + padding + "';";
+    ostr << "__parent__ = " << getElementById(parent, position) << std::endl;
+    ostr << "__parent__.appendChild(__child__);" << std::endl;
+    ostr << "__parent__.style.padding = '" << padding << "';" << std::endl;
 
     //to well perform positionning, we must clear some default properties
     //position left, right, width, height,
 
-    ostr << "__child__.style.position = 'inherit';";
-    ostr << "__child__.style.left = 'inherit';";
-    ostr << "__child__.style.bottom = 'inherit';";
+    ostr << "__child__.style.position = 'inherit';" << std::endl;
+    ostr << "__child__.style.left = 'inherit';" << std::endl;
+    ostr << "__child__.style.bottom = 'inherit';" << std::endl;
 }
 
 void WebUtils::getUIGridBagGrid(int uid, std::vector<int>& vect)
@@ -925,14 +990,14 @@ void WebUtils::setUIGridBag(int uid, std::ostringstream& ostr, bool append)
 
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
-    ostr << "__child__.style.width = '100%';";
-    ostr << "__child__.style.position = 'inherit';";
-    ostr << "__child__.style.left = 'inherit';";
-    ostr << "__child__.style.bottom = 'inherit';";
-    ostr << "__child__.style.height = '100%';";
+    ostr << "__child__.style.position = 'inherit';" << std::endl;
+    ostr << "__child__.style.left = 'inherit';" << std::endl;
+    ostr << "__child__.style.bottom = 'inherit';" << std::endl;
+    ostr << "__child__.style.width = '100%';" << std::endl;
+    ostr << "__child__.style.height = '100%';" << std::endl;
     //we have to create a td with grid information and add it to the good cell ( or create if not exist ! )
 
     //build td child
@@ -967,15 +1032,15 @@ void WebUtils::setUIGridBag(int uid, std::ostringstream& ostr, bool append)
     tr += "gridbagHelperTD(__tr__,__td__, " + std::to_string(grid[0]) + ");";
 
     //to force refresh of table, move it to another component and restore it
-    std::string tricktoforcerefresh("\nvar __scilab__ = document.getElementById('scilab');");
+    std::string tricktoforcerefresh("var __scilab__ = document.getElementById('scilab');");
     tricktoforcerefresh += "__scilab__.appendChild(__table__);";
     tricktoforcerefresh += "var __parent__ = " + getElementById(parent);
     tricktoforcerefresh += "__parent__.appendChild(__table__);";
 
 
-    ostr << td;
-    ostr << tr;
-    ostr << tricktoforcerefresh;
+    ostr << td << std::endl;
+    ostr << tr << std::endl;
+    ostr << tricktoforcerefresh << std::endl;
 }
 
 bool WebUtils::hasCallback(int uid)
@@ -987,7 +1052,7 @@ void WebUtils::setCallback(int uid, std::ostringstream& ostr, bool append)
 {
     if (append == false)
     {
-        ostr << "var __child__ = " + getElementById(uid);
+        ostr << "var __child__ = " << getElementById(uid) << std::endl;
     }
 
     std::string event;
@@ -1037,7 +1102,7 @@ void WebUtils::setCallback(int uid, std::ostringstream& ostr, bool append)
     }
 
     //add callback listener
-    ostr << "__child__.addEventListener('" + event + "', " + func + ");";
+    ostr << "__child__.addEventListener('" << event << "', " << func << ");" << std::endl;
 }
 
 //is
@@ -1084,13 +1149,13 @@ bool WebUtils::isButton(int uid)
 bool WebUtils::createFigure(int uid, std::ostringstream& ostr)
 {
     //set figure uid to help children to find it
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "var __temp__ = " + createElement("DIV");
-    ostr << "__temp__.id = " + getIdString(uid) + ";";
-    ostr << "__temp__.className = 'GO_FIGURE';";
-    ostr << "__parent__.innerHTML += '<br>';";
-    ostr << "__parent__.appendChild(__temp__);";
-    ostr << "__parent__.innerHTML += '<br>';";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "var __temp__ = " << createElement("DIV") << std::endl;
+    ostr << "__temp__.id = " << getIdString(uid) << ";" << std::endl;
+    ostr << "__temp__.className = 'GO_FIGURE';" << std::endl;
+    ostr << "__parent__.innerHTML += '<br>';" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
+    ostr << "__parent__.innerHTML += '<br>';" << std::endl;
     return true;
 }
 
@@ -1119,6 +1184,8 @@ bool WebUtils::createUIControl(int uid, std::ostringstream& ostr)
             return createCombobox(uid, ostr);
         case __GO_UI_SPINNER__:
             return createSpinner(uid, ostr);
+        case __GO_UI_TAB__:
+            return createTab(uid, ostr);
         default:
             return false;
     }
@@ -1127,9 +1194,9 @@ bool WebUtils::createUIControl(int uid, std::ostringstream& ostr)
 bool WebUtils::createCommonIUControl(int uid, const std::string& htmlType, const std::string& cssClass, std::ostringstream& ostr)
 {
     //create a button, with no parent, wait update with _GO_PARENT to update it
-    ostr << "var __temp__ = " + createElement(htmlType);
-    ostr << "__temp__.id = " + getIdString(uid) + ";";
-    ostr << "__temp__.className = '" + cssClass + "';";
+    ostr << "var __temp__ = " << createElement(htmlType) << std::endl;
+    ostr << "__temp__.id = " << getIdString(uid) << ";" << std::endl;
+    ostr << "__temp__.className = '" << cssClass << "';" << std::endl;
 
     return true;
 }
@@ -1139,8 +1206,8 @@ bool WebUtils::createPushButton(int uid, std::ostringstream& ostr)
     //create a <button>
     createCommonIUControl(uid, "BUTTON", "GO_PUSHBUTTON", ostr);
     //add item temporary in main scilabview div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__temp__);";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
 
     return true;
 }
@@ -1150,8 +1217,8 @@ bool WebUtils::createFrame(int uid, std::ostringstream& ostr)
     //create a <div>
     createCommonIUControl(uid, "DIV", "GO_FRAME", ostr);
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__temp__);";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
 
     return true;
 }
@@ -1161,8 +1228,8 @@ bool WebUtils::createText(int uid, std::ostringstream& ostr)
     //create a <div>
     createCommonIUControl(uid, "LABEL", "GO_TEXT", ostr);
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__temp__);";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
 
     return true;
 }
@@ -1171,10 +1238,10 @@ bool WebUtils::createEdit(int uid, std::ostringstream& ostr)
 {
     //create a <input>
     createCommonIUControl(uid, "INPUT", "GO_EDIT", ostr);
-    ostr << "__temp__.type = 'text';";
+    ostr << "__temp__.type = 'text';" << std::endl;
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__temp__);";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
 
     return true;
 }
@@ -1186,28 +1253,28 @@ bool WebUtils::createCheckbox(int uid, std::ostringstream& ostr)
     //for checkbox we need to create 3 elements.
 
     //a div to enclose others
-    ostr << "var __main__ = " + createElement("DIV");
-    ostr << "__main__.id = " + getIdString(uid) + ";";
-    ostr << "__main__.className = 'GO_CHECKBOX';";
+    ostr << "var __main__ = " << createElement("DIV") << std::endl;
+    ostr << "__main__.id = " << getIdString(uid) << ";" << std::endl;
+    ostr << "__main__.className = 'GO_CHECKBOX';" << std::endl;
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__main__);";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__main__);" << std::endl;
 
     //the checkbox itself
-    ostr << "var __temp__ = " + createElement("INPUT");
-    ostr << "__temp__.className = 'GO_CHECKBOX_CHECKBOX';";
-    ostr << "__temp__.type = 'checkbox';";
-    ostr << "__temp__.id = " + getIdString(uid, "_checkbox") + ";";
+    ostr << "var __temp__ = " << createElement("INPUT") << std::endl;
+    ostr << "__temp__.className = 'GO_CHECKBOX_CHECKBOX';" << std::endl;
+    ostr << "__temp__.type = 'checkbox';" << std::endl;
+    ostr << "__temp__.id = " << getIdString(uid, "_checkbox") << ";" << std::endl;
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "__main__.appendChild(__temp__);";
+    ostr << "__main__.appendChild(__temp__);" << std::endl;
 
     //the label of the checkbox
-    ostr << "var __label__ = " + createElement("LABEL");
-    ostr << "__label__.id = " + getIdString(uid, "_label") + ";";
-    ostr << "__label__.className = 'GO_CHECKBOX_LABEL';";
-    ostr << "__label__.htmlFor = " + getIdString(uid, "_checkbox") + ";";
+    ostr << "var __label__ = " << createElement("LABEL") << std::endl;
+    ostr << "__label__.id = " << getIdString(uid, "_label") << ";" << std::endl;
+    ostr << "__label__.className = 'GO_CHECKBOX_LABEL';" << std::endl;
+    ostr << "__label__.htmlFor = " << getIdString(uid, "_checkbox") << ";" << std::endl;
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "__main__.appendChild(__label__);";
+    ostr << "__main__.appendChild(__label__);" << std::endl;
 
     return true;
 }
@@ -1219,28 +1286,28 @@ bool WebUtils::createRadio(int uid, std::ostringstream& ostr)
     //for radio we need to create 3 elements.
 
     //a div to enclose others
-    ostr << "var __main__ = " + createElement("DIV");
-    ostr << "__main__.id = " + getIdString(uid) + ";";
-    ostr << "__main__.className = 'GO_RADIO';";
+    ostr << "var __main__ = " << createElement("DIV") << std::endl;
+    ostr << "__main__.id = " << getIdString(uid) << ";" << std::endl;
+    ostr << "__main__.className = 'GO_RADIO';" << std::endl;
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__main__)";;
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__main__)" << std::endl;
 
     //the radio itself
-    ostr << "var __temp__ = " + createElement("INPUT");
-    ostr << "__temp__.className = 'GO_RADIO_RADIO';";
-    ostr << "__temp__.type = 'radio';";
-    ostr << "__temp__.id = " + getIdString(uid, "_radio") + ";";
+    ostr << "var __temp__ = " << createElement("INPUT") << std::endl;
+    ostr << "__temp__.className = 'GO_RADIO_RADIO';" << std::endl;
+    ostr << "__temp__.type = 'radio';" << std::endl;
+    ostr << "__temp__.id = " << getIdString(uid, "_radio") << ";" << std::endl;
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "__main__.appendChild(__temp__);";
+    ostr << "__main__.appendChild(__temp__);" << std::endl;
 
     //the label of the checkbox
-    ostr << "var __label__ = " + createElement("LABEL");
-    ostr << "__label__.id = " + getIdString(uid, "_label") + ";";
-    ostr << "__label__.className = 'GO_RADIO_LABEL';";
-    ostr << "__label__.htmlFor = " + getIdString(uid, "_radio") + ";";
+    ostr << "var __label__ = " << createElement("LABEL") << std::endl;
+    ostr << "__label__.id = " << getIdString(uid, "_label") << ";" << std::endl;
+    ostr << "__label__.className = 'GO_RADIO_LABEL';" << std::endl;
+    ostr << "__label__.htmlFor = " << getIdString(uid, "_radio") << ";" << std::endl;
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "__main__.appendChild(__label__);";
+    ostr << "__main__.appendChild(__label__);" << std::endl;
 
     return true;
 }
@@ -1249,10 +1316,10 @@ bool WebUtils::createSlider(int uid, std::ostringstream& ostr)
 {
     //create a <input>
     createCommonIUControl(uid, "INPUT", "GO_SLIDER", ostr);
-    ostr << "__temp__.type = 'range';";
+    ostr << "__temp__.type = 'range';" << std::endl;
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__temp__);";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
 
     return true;
 }
@@ -1262,8 +1329,8 @@ bool WebUtils::createListbox(int uid, std::ostringstream& ostr)
     //create a <input>
     createCommonIUControl(uid, "SELECT", "GO_LISTBOX", ostr);
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__temp__);";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
 
     return true;
 }
@@ -1272,10 +1339,10 @@ bool WebUtils::createCombobox(int uid, std::ostringstream& ostr)
 {
     //create a <input>
     createCommonIUControl(uid, "SELECT", "GO_COMBOBOX", ostr);
-    ostr << "__temp__.size = 1;";
+    ostr << "__temp__.size = 1;" << std::endl;
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__temp__);";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
 
     return true;
 }
@@ -1284,18 +1351,70 @@ bool WebUtils::createSpinner(int uid, std::ostringstream& ostr)
 {
     //create a <input>
     createCommonIUControl(uid, "INPUT", "GO_SPINNER", ostr);
-    ostr << "__temp__.type = 'number';";
+    ostr << "__temp__.type = 'number';" << std::endl;
+    //add item temporary in main div waiting __GO_PARENT__ update
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
+
+    return true;
+}
+
+bool WebUtils::createTab(int uid, std::ostringstream& ostr)
+{
+    //create a <input>
+    createCommonIUControl(uid, "DIV", "GO_TAB", ostr);
+
+    //create a list
+    ostr << "var __ul__ = " << createElement("UL") << std::endl;
+    ostr << "__ul__.id = " << getIdString(uid, "_ul") << ";" << std::endl;
+    ostr << "__temp__.appendChild(__ul__);" << std::endl;
+
+
     //add item temporary in main div waiting __GO_PARENT__ update
-    ostr << "var __parent__ = document.getElementById('scilab');";
-    ostr << "__parent__.appendChild(__temp__);";
+    ostr << "var __parent__ = document.getElementById('scilab');" << std::endl;
+    ostr << "__parent__.appendChild(__temp__);" << std::endl;
 
     return true;
 }
 
+bool WebUtils::addTabChild(int uid, int child, std::ostringstream& ostr)
+{
+    std::vector<std::string> vect;
+
+    //create il
+    ostr << "var __li__ = " << createElement("LI") << std::endl;
+    ostr << "__li__.id = " << getIdString(child, "_li") << ";" << std::endl;
+
+    //create input button
+    ostr << "var __btn__ = " << createElement("INPUT") << std::endl;
+    ostr << "__btn__.id = " << getIdString(child, "_btn") << ";" << std::endl;
+    ostr << "__btn__.type = 'button';" << std::endl;
+    ostr << "__btn__.addEventListener('click', onTab);" << std::endl;
+
+    //add button in il
+    ostr << "__li__.appendChild(__btn__);" << std::endl;
+
+    //add il as first child in ul
+    ostr << "var __ul__ = " << getElementById(uid, "_ul") << std::endl;
+    ostr << "__ul__.insertBefore(__li__, __ul__.firstChild);" << std::endl;
+
+    //update child properties
+    ostr << "__child__.style.position = 'inherit';" << std::endl;
+    ostr << "__child__.style.left = 'inherit';" << std::endl;
+    ostr << "__child__.style.bottom = 'inherit';" << std::endl;
+    ostr << "__child__.style.width = '100%';" << std::endl;
+    ostr << "__child__.style.height = '100%';" << std::endl;
+
+    //be carefull, we change __child__ to tab uid instead of frame uid
+    setUIValue(uid, ostr);
+    return true;
+}
+
+
 bool WebUtils::deleteObject(int uid, std::ostringstream& ostr)
 {
-    ostr << "var __child__ = " + getElementById(uid);
-    ostr << "__child__.parentNode.removeChild(__child__);";
+    ostr << "var __child__ = " << getElementById(uid) << std::endl;
+    ostr << "__child__.parentNode.removeChild(__child__);" << std::endl;
 
     return true;
 }
@@ -1437,6 +1556,7 @@ bool WebUtils::updateValue(int uid, bool value)
 
 void WebUtils::addInWaitingQueue(int uid, int prop)
 {
+    std::cerr << "add in queue : " << uid << "(" << prop << ")" << std::endl;
     waitprop[uid].push_back(prop);
 }
 
index d39d912..9de38b8 100644 (file)
@@ -173,6 +173,8 @@ public:
     static bool createListbox(int uid, std::ostringstream& ostr);
     static bool createCombobox(int uid, std::ostringstream& ostr);
     static bool createSpinner(int uid, std::ostringstream& ostr);
+    static bool createTab(int uid, std::ostringstream& ostr);
+    static bool addTabChild(int uid, int child, std::ostringstream& ostr);
 
     //update
     static bool updateDefaultProperties(int uid, std::ostringstream& ostr);
index d9ae987..51be913 100644 (file)
@@ -51,10 +51,6 @@ body {
 .GO_FRAME {
     position: absolute;
     background-color : white;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     text-align:center;
     overflow : hidden;
     font-family: Tahoma, Verdana, Segoe, sans-serif;
@@ -66,10 +62,6 @@ body {
 .GO_TEXT {
     position: absolute;
     background-color : white;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     line-height:20px;
     text-align:left;
     vertical-align: middle;
@@ -82,10 +74,6 @@ body {
 .GO_EDIT {
     position: absolute;
     background-color : white;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     text-align:left;
     overflow : hidden;
     font-family: Tahoma, Verdana, Segoe, sans-serif;
@@ -96,10 +84,6 @@ body {
 .GO_CHECKBOX {
     position: absolute;
     background-color : white;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     line-height:20px;
     text-align:left;
     vertical-align: middle;
@@ -111,10 +95,6 @@ body {
 
 .GO_CHECKBOX_LABEL {
     background-color : inherit;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     text-align:left;
     overflow : hidden;
     font-family: inherit;
@@ -133,10 +113,6 @@ body {
 .GO_RADIO {
     position: absolute;
     background-color : white;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     line-height:20px;
     text-align:left;
     vertical-align: middle;
@@ -148,10 +124,6 @@ body {
 
 .GO_RADIO_LABEL {
     background-color : inherit;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     text-align:left;
     overflow : hidden;
     font-family: inherit;
@@ -170,10 +142,6 @@ body {
 .GO_SLIDER {
     position: absolute;
     background-color : white;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     overflow : hidden;
     visibility:inherit;
 }
@@ -181,10 +149,6 @@ body {
 .GO_LISTBOX {
     position: absolute;
     background-color : white;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     overflow : auto;
     visibility:inherit;
 }
@@ -192,10 +156,6 @@ body {
 .GO_COMBOBOX {
     position: absolute;
     background-color : white;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     overflow : auto;
     visibility:inherit;
 }
@@ -203,10 +163,6 @@ body {
 .GO_SPINNER {
     position: absolute;
     background-color : white;
-    left: 20px;
-    bottom: 40px;
-    width : 40px;
-    height : 20px;
     text-align:right;
     overflow : hidden;
     font-family: Tahoma, Verdana, Segoe, sans-serif;
@@ -214,6 +170,62 @@ body {
     visibility:inherit;
 }
 
+.GO_TAB {
+    position: absolute;
+    background-color : white;
+    text-align:center;
+    overflow : hidden;
+    font-family: Tahoma, Verdana, Segoe, sans-serif;
+    font-size:11px;
+    visibility:inherit;
+    width: 100%;
+    height: 100%;
+}
+
+.GO_TAB ul {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+}
+
+.GO_TAB li {
+    display: inline;
+    margin: 0;
+}
+
+.GO_TAB input {
+    padding: 0 1em;
+    text-decoration: none;
+    border-style: none;
+}
+
+.GO_TAB input:hover {
+    text-decoration: underline;
+    cursor: pointer;
+}
+
+.GO_TAB input:focus {
+    outline: none;
+}
+
+.GO_TAB_SELECTED input:hover {
+    text-decoration: none;
+}
+
+.GO_TAB_SELECTED input {
+    padding-bottom: 2px;
+    font-weight: bold;
+    border-width: 0px 2px 0px 2px;
+    border-style: solid;
+    border-color: black;
+}
+
+.GO_TAB div {
+    width: 100%;
+    height: 100%;
+    display: none;
+    position: inherit;
+}
 .window {
     /*
         "position" must be relative or absolute 
@@ -318,7 +330,16 @@ body {
             }
             
             function onTab() {
-            }
+                var li = this.parentNode;
+                var ul = li.parentNode;
+                
+                var k = 0;
+                var elem = li;
+                while(elem=elem.previousSibling){k++;}
+                
+                var id = parseInt(ul.id.substring(3)); //ignore "uid"
+                socket.emit("callback", {uid:id, value:k});
+           }
             
             function onSlider() {
                 var id = parseInt(this.id.substring(3)); //ignore "uid"
@@ -416,6 +437,46 @@ body {
                 parent.insertBefore(child, null);
             }
             
+            function tabSelectHelper(tab, index) {
+                var __ul__ = document.getElementById(tab.id + "_ul");
+
+                if(!__ul__) {
+                    console.log("!ul");
+                    console.log(tab.id + "_ul");
+                    return;
+                }
+
+                var __item__ = __ul__.children[index];
+                
+                if(!__item__) {
+                    console.log("!item");
+                    console.log(__ul__.children.length);
+                    console.log(index);
+                    return;
+                }
+                
+                var __id__ = __item__.id.substr(0, __item__.id.indexOf('_'));
+                
+                //change tab label
+                for (var i = 0; i < __ul__.children.length; ++i) {
+                    __ul__.children[i].className = "";
+                }
+
+                __item__.className = "GO_TAB_SELECTED";
+                
+                //change div visibility
+                
+                //all hide
+                var __next__ = __ul__.nextElementSibling;
+                while(__next__) {
+                    __next__.style.display = "none";
+                    __next__ = __next__.nextElementSibling;
+                }
+                
+                //show good one
+                document.getElementById(__id__).style.display = "block";
+                console.log(__id__ + " -> block");
+            }
         </script>
     </body>
 </html>
index b72a42a..ec0463e 100644 (file)
@@ -111,7 +111,7 @@ if 0 then
     f.visible = %t;
 end
 
-//layout border
+//border layout
 if 0 then
     
     f = createWindow();
@@ -121,11 +121,11 @@ if 0 then
 
     c = createConstraints("border", "top", [50,20]);
 
-    t = %t;
-    l = %t;
+    t = %f;
+    l = %f;
     m = %t;
-    r = %t;
-    b = %t;
+    r = %f;
+    b = %f;
     
     if t then
         u_grid1 = uicontrol(f,...
@@ -168,8 +168,8 @@ if 0 then
     end
 end
 
-//gridbag
-if 1 then
+//gridbag layout
+if 0 then
     f = createWindow();
     f.position = [200 200 200 100];
     f.layout = "gridbag";
@@ -219,3 +219,26 @@ if 1 then
         "backgroundcolor"     , [1 0 1], ...
         "constraints"         , c);
 end
+
+
+//tab
+if 1 then
+    f = createWindow();
+    f.position = [200 200 400 300];
+    f.layout = "border";
+    f.layout_options = createLayoutOptions("border", [10, 10]);
+    //f.layout_options = createLayoutOptions("border");
+
+    c = createConstraints("border", "center");
+
+    tab = uicontrol(f, "style", "tab", "constraints", c);
+    
+    tab3 = uicontrol(tab, "style", "frame", "string", "tab 3", "layout", "border", "backgroundcolor", [0 0 1]);
+    tab2 = uicontrol(tab, "style", "frame", "string", "tab 2", "layout", "border", "backgroundcolor", [0 1 0]);
+    tab1 = uicontrol(tab, "style", "frame", "string", "tab 1", "layout", "border", "backgroundcolor", [1 0 0]);
+    
+    uicontrol(tab1, "style", "pushbutton", "string", "tab1", "constraints", c);
+    uicontrol(tab2, "style", "pushbutton", "string", "tab2", "constraints", c);
+    uicontrol(tab3, "style", "pushbutton", "string", "tab3", "constraints", c);
+    
+end