move to bootstrap 02/18002/14
Antoine ELIAS [Wed, 30 Mar 2016 07:22:59 +0000 (09:22 +0200)]
Change-Id: Ib7c7359cae79ba7533eda36b9cf4efb1b0ba6755

19 files changed:
scilab/modules/graphic_objects/graphic_objects.iss
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/debug-windows.bat [new file with mode: 0644]
scilab/node/node.iss [new file with mode: 0644]
scilab/node/opticlim-windows.bat [new file with mode: 0644]
scilab/node/scilab_process.js
scilab/node/scilab_server.js
scilab/node/start.sce
scilab/node/static/main.js
scilab/node/static/scilab.css
scilab/node/static/scilab.html [moved from scilab/node/static/index.html with 69% similarity]
scilab/node/static/scilab_create.js
scilab/node/static/scilab_helper.js
scilab/node/static/scilab_setter.js
scilab/node/static/scilab_tools.js
scilab/tools/innosetup/base.iss
scilab/tools/innosetup/files.iss

index 4270923..a12015b 100644 (file)
@@ -24,6 +24,8 @@
 Source: modules\{#GRAPHIC_OBJECTS}\license.txt; DestDir: {app}\modules\{#GRAPHIC_OBJECTS}; Components: {#COMPN_GRAPHICS}
 ;
 Source: bin\sci{#GRAPHIC_OBJECTS}.dll; DestDir: {app}\bin; Components: {#COMPN_GRAPHICS}
+Source: bin\sioclient.dll; DestDir: {app}\bin; Components: {#COMPN_GRAPHICS}
+
 ;
 Source: bin\nosci{#GRAPHIC_OBJECTS}.dll; DestDir: {app}\bin; DestName: sci{#GRAPHIC_OBJECTS}.dll; Components: not ({#COMPN_GRAPHICS})
 ;
index 9c066d8..93c5d63 100644 (file)
@@ -249,6 +249,13 @@ void ScilabWebView::updateObject(int uid, int prop)
                 s->emit("graphic_update", ostr.str());
                 return;
             }
+            case __GO_NAME__:
+            {
+                std::ostringstream ostr;
+                WebUtils::setFigureName(uid, ostr);
+                s->emit("graphic_update", ostr.str());
+                return;
+            }
             case __GO_LAYOUT__:
             {
                 std::ostringstream ostr;
index 2aada79..42d5db1 100644 (file)
@@ -232,6 +232,20 @@ void WebUtils::setFigureSize(int uid, std::ostringstream& ostr)
     ostr << "setFigureSize('" << uid << "', [" << size[0] << ", " << size[1] << "]);";
 }
 
+void WebUtils::getFigureName(int uid, std::string& val)
+{
+    val = getStringProperty(uid, __GO_NAME__);
+}
+
+void WebUtils::setFigureName(int uid, std::ostringstream& ostr)
+{
+    std::string val;
+    getFigureName(uid, val);
+
+    ostr << "setFigureName('" << uid << "', '" << val << "');";
+}
+
+
 int WebUtils::getFigureId(int uid)
 {
     int id = uid;
@@ -243,6 +257,11 @@ int WebUtils::getFigureId(int uid)
     return id;
 }
 
+void WebUtils::getUIUnits(int uid, std::string& val)
+{
+    val = getStringProperty(uid, __GO_UI_UNITS__);
+}
+
 void WebUtils::getUIPosition(int uid, std::vector<double>& vect)
 {
     vect.resize(4, 0.);
@@ -260,10 +279,12 @@ void WebUtils::getUIString(int uid, std::vector<std::string> & vect)
 
 void WebUtils::setUIPosition(int uid, std::ostringstream& ostr)
 {
+    std::string units;
+    getUIUnits(uid, units);
     std::vector<double> pos;
     getUIPosition(uid, pos);
 
-    ostr << "setUIPosition('" << uid << "', [" << (int)pos[0] << ", " << (int)pos[1] << ", " << (int)pos[2] << ", " << (int)pos[3] << "]);";
+    ostr << "setUIPosition('" << uid << "', [" << pos[0] << ", " << pos[1] << ", " << pos[2] << ", " << pos[3] << "], '" << units << "');";
 
     //to ensure vertical alignement, adapt style.line-height
     if (hasStyle(uid, __GO_UI_TEXT__) || hasStyle(uid, __GO_UI_CHECKBOX__) || hasStyle(uid, __GO_UI_RADIOBUTTON__))
@@ -575,7 +596,6 @@ void WebUtils::setUIBorder(int uid, std::ostringstream& ostr)
     ostr << "setUIBorder('" << uid << "', '" << parent << "', " << border << ", [";
     ostr << pad[0] << ", " << pad[1];
     ostr << "], [" << size[0] << ", " << size[1] << "]);";
-
 }
 
 void WebUtils::getUIGridBagGrid(int uid, std::vector<int>& vect)
@@ -597,17 +617,82 @@ void WebUtils::setUIGridBag(int uid, std::ostringstream& ostr)
 
 void WebUtils::setUIFrameBorder(int uid, std::ostringstream& ostr)
 {
-    std::string title;
+    std::string text;
+    std::string position;
+    std::string alignment;
+    std::string fontName;
+    std::string fontStyle;
+    std::string fontSize;
+    std::string fontWeight;
+    std::string fontColor;
+
     int border = getIntProperty(uid, __GO_UI_FRAME_BORDER__);
     int style = getIntProperty(border, __GO_UI_FRAME_BORDER_STYLE__);
     int parent = getParent(uid);
 
     if (style == TITLED)
     {
-        title = getStringProperty(border, __GO_TITLE__);
+        text = getStringProperty(border, __GO_TITLE__);
+        int pos = getIntProperty(border, __GO_UI_FRAME_BORDER_POSITION__);
+        switch (pos)
+        {
+            case 0:
+            case 1:
+            case 2:
+                position = "top";
+                break;
+            case 3:
+            case 4:
+            case 5:
+                position = "bottom";
+                break;
+        }
+
+        int justification = getIntProperty(border, __GO_UI_FRAME_BORDER_JUSTIFICATION__);
+        switch (justification)
+        {
+            default:
+            case 1:
+                alignment = "left";
+                break;
+            case 2:
+                alignment = "center";
+                break;
+            case 3:
+                alignment = "right";
+                break;
+        }
+
+        //fontname
+        fontName = getStringProperty(border, __GO_UI_FONTNAME__);
+
+        //font style/angle
+        fontStyle = getStringProperty(border, __GO_UI_FONTANGLE__);
+
+        //fontSize
+        int size = getIntProperty(border, __GO_UI_FONTSIZE__);
+        fontSize = std::to_string(size);
+
+        //fontWeight
+        fontWeight = getStringProperty(border, __GO_UI_FONTWEIGHT__);
+
+        //color
+        fontColor = getStringProperty(border, __GO_UI_FRAME_BORDER_COLOR__);
+
     }
 
-    ostr << "setUIFrameBorder('" << uid << "', '" << border << "', '" << parent << "', '" << title << "');";
+    //build struct
+    std::string var = "{";
+    var += "text:'" + text + "',";
+    var += "position:'" + position + "',";
+    var += "alignment:'" + alignment + "',";
+    var += "fontName:'" + fontName + "',";
+    var += "fontStyle:'" + fontStyle + "',";
+    var += "fontSize:'" + fontSize + "',";
+    var += "fontWeight:'" + fontWeight + "',";
+    var += "fontColor:'" + fontColor + "'}";
+
+    ostr << "setUIFrameBorder('" << uid << "', " << var << ");";
 }
 
 bool WebUtils::getUIIcon(int uid, std::string& val)
@@ -628,19 +713,23 @@ void WebUtils::setUIIcon(int uid, std::ostringstream& ostr)
     }
 
     size_t found = icon.find_last_of(".");
-    std::string ext = icon.substr(found);
+    std::string tmpname = icon;
 
-    std::string tmpname = std::tmpnam(nullptr);
-    tmpname = "images/" + tmpname.substr(1) + ext;
+    if (found != std::string::npos)
+    {
+        std::string ext = icon.substr(found);
 
-    //copy image file to web server path
-    wchar_t* src = to_wide_string(icon.data());
-    wchar_t* dst = to_wide_string((getImagePath() + tmpname).data());
+        tmpname = std::tmpnam(nullptr);
+        tmpname = "images/" + tmpname.substr(1) + ext;
 
-    CopyFileFunction(dst, src);
-    FREE(src);
-    FREE(dst);
+        //copy image file to web server path
+        wchar_t* src = to_wide_string(icon.data());
+        wchar_t* dst = to_wide_string((getImagePath() + tmpname).data());
 
+        CopyFileFunction(dst, src);
+        FREE(src);
+        FREE(dst);
+    }
     ostr << "setUIIcon('" << uid << "', '" << tmpname << "', '" << str[0] << "');";
 }
 
@@ -654,6 +743,20 @@ void WebUtils::setCallback(int uid, std::ostringstream& ostr)
     ostr << "setCallback('" << uid << "');";
 }
 
+bool WebUtils::getUIGroupName(int uid, std::string& val)
+{
+    val = getStringProperty(uid, __GO_UI_GROUP_NAME__);
+    return true;
+}
+
+void WebUtils::setUIGroupName(int uid, std::ostringstream& ostr)
+{
+    std::string val;
+    getUIGroupName(uid, val);
+
+    ostr << "setUIGroupName('" << uid << "', '" << val << "');";
+}
+
 //is
 bool WebUtils::isInputType(int uid)
 {
@@ -916,6 +1019,7 @@ void WebUtils::fillSetter()
     setter[__GO_UI_GRIDBAG_GRID__] = WebUtils::setUIGridBag;
     setter[__GO_UI_FRAME_BORDER__] = WebUtils::setUIFrameBorder;
     setter[__GO_UI_ICON__] = WebUtils::setUIIcon;
+    setter[__GO_UI_GROUP_NAME__] = WebUtils::setUIGroupName;
     //setter[__GO_CALLBACK__] = WebUtils::setCallback;
 }
 
@@ -927,27 +1031,27 @@ bool WebUtils::updateValue(int uid, const std::string& value)
         setStringVectorProperty(uid, __GO_UI_STRING__, v);
     }
 
-    return false;
+    return true;
 }
 
 bool WebUtils::updateValue(int uid, const std::vector<double>& values)
 {
     setDoubleVectorProperty(uid, __GO_UI_VALUE__, values);
-    return false;
+    return true;
 }
 
 bool WebUtils::updateValue(int uid, double value)
 {
     std::vector<double> v(1, value);
     setDoubleVectorProperty(uid, __GO_UI_VALUE__, v);
-    return false;
+    return true;
 }
 
 bool WebUtils::updateValue(int uid, bool value)
 {
     std::vector<double> v(1, value ? getUIMax(uid) : getUIMin(uid));
     setDoubleVectorProperty(uid, __GO_UI_VALUE__, v);
-    return false;
+    return true;
 }
 
 void WebUtils::addInWaitingQueue(int uid, int prop)
index 4c769a9..45c307a 100644 (file)
@@ -79,12 +79,16 @@ public:
     static int getParent(int uid);
     static int getFigureId(int uid);
     static void setParent(int uid, std::ostringstream& ostr);
+    static void getUIUnits(int uid, std::string& val);
     static void getUIPosition(int uid, std::vector<double>& vect);
     static void setUIPosition(int uid, std::ostringstream& ostr);
 
     static void getFigureSize(int uid, std::vector<int>& vect);
     static void setFigureSize(int uid, std::ostringstream& ostr);
 
+    static void getFigureName(int uid, std::string& val);
+    static void setFigureName(int uid, std::ostringstream& ostr);
+
     static void getUIString(int uid, std::vector<std::string>& vect);
     static void setUIString(int uid, std::ostringstream& ostr);
 
@@ -137,6 +141,9 @@ public:
     static bool getUIValue(int uid, std::vector<double>& vect);
     static void setUIValue(int uid, std::ostringstream& ostr);
 
+    static bool getUIGroupName(int uid, std::string& val);
+    static void setUIGroupName(int uid, std::ostringstream& ostr);
+
     //border layout
     static int getUIBorderPosition(int uid);
     static void getUIBorderPadding(int uid, std::vector<int>& vect);
diff --git a/scilab/node/debug-windows.bat b/scilab/node/debug-windows.bat
new file mode 100644 (file)
index 0000000..8aa378e
--- /dev/null
@@ -0,0 +1,5 @@
+@echo off
+setlocal
+set SCIPATH=%~dp0\..
+set SCIFILES=%SCIPATH%/node
+node-debug -p 1338 scilab_server.js
diff --git a/scilab/node/node.iss b/scilab/node/node.iss
new file mode 100644 (file)
index 0000000..4ae89a1
--- /dev/null
@@ -0,0 +1,38 @@
+;
+; Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+; Copyright (C) Scilab Enterprises - 2016 - Antoine ELIAS
+;
+; Copyright (C) 2012 - 2016 - Scilab Enterprises
+;
+; This file is hereby licensed under the terms of the GNU GPL v2.0,
+; pursuant to article 5.3.4 of the CeCILL v.2.1.
+; This file was originally licensed under the terms of the CeCILL v2.1,
+; and continues to be available under such terms.
+; For more information, see the COPYING file which you should have received
+; along with this program.
+;
+;--------------------------------------------------------------------------------------------------------------
+; Inno Setup Script (5.3 and more) for Scilab (UNICODE version required)
+;
+;--------------------------------------------------------------------------------------------------------------
+; completion module
+;--------------------------------------------------------------------------------------------------------------
+;
+#define NODE "node"
+; batch files
+Source: {#NODE}\linux-launcher.sh; DestDir: {app}\{#NODE}; Components: {#COMPN_SCILAB}
+Source: {#NODE}\windows-launcher.bat; DestDir: {app}\{#NODE}; Components: {#COMPN_SCILAB}
+
+; server files
+Source: {#NODE}\scilab_server.js; DestDir: {app}\{#NODE}; Components: {#COMPN_SCILAB}
+Source: {#NODE}\scilab_process.js; DestDir: {app}\{#NODE}; Components: {#COMPN_SCILAB}
+
+; start script
+Source: {#NODE}\start.sce; DestDir: {app}\{#NODE}; Components: {#COMPN_SCILAB}
+
+;ressources files
+Source: {#NODE}\static\*.*; DestDir: {app}\{#NODE}\static; Flags: recursesubdirs; Components: {#COMPN_SCILAB}
+
+;node js extentions socket.io, express socket.io-client
+Source: {#NODE}\node_modules\*.*; DestDir: {app}\{#NODE}\node_modules; Flags: recursesubdirs; Components: {#COMPN_SCILAB}
+;--------------------------------------------------------------------------------------------------------------
diff --git a/scilab/node/opticlim-windows.bat b/scilab/node/opticlim-windows.bat
new file mode 100644 (file)
index 0000000..aeafe12
--- /dev/null
@@ -0,0 +1,2 @@
+@echo off
+%~dp0\..\bin\Scilex.exe -quit -f e:\git\toolbox\sanofi-opticlim\builder.sce && windows-launcher.bat
\ No newline at end of file
index 975cc12..2387b35 100644 (file)
@@ -62,6 +62,7 @@ dispatchio.on('connection', function (dspSocket) {
         for(var i = 0 ; i < size ; ++i) {
             //L('%d : %s', i+1, msgHistory[i]);
             dspSocket.emit('graphic_create', msgHistory[i]);
+            L("history " + i + ": " + msgHistory[i]);
         }
         dspSocket.emit("graphic_reconnection", "end");
     });
index 160fbc5..5bf5d83 100644 (file)
@@ -10,7 +10,7 @@ app.use(express.static('static'));
 server.listen(1337);
 
 app.get('/', function (req, res) {
-    res.sendFile(__dirname + '/static/index.html');
+    res.sendFile(__dirname + '/static/scilab.html');
 });
 
 var processAlive = false;
@@ -94,10 +94,11 @@ io.on('connection', function (socket) {
         prcSocket.emit('callback', msg);
     });
 
-    socket.on('callback', function (msg) {
-        prcSocket.emit('callback', msg);
+    socket.on('disconnect', function () {
+        L('User disconnected');
+        prcSocket.emit('quit');
     });
-
+    
     socket.on('force_reload', function () {
         L('force reload');
         prcSocket.emit('force_reload');
index 8550169..4c00ccd 100644 (file)
@@ -3,13 +3,16 @@
 //3 spinner and sliders
 //4 demo uicontrol
 //5 RGB
-//6 border layout
-//7 gridbag layout
-//8 tab
-//9 visible
-//10 opticlim
+//6 RGB two windows
+//7 border layout
+//8 gridbag layout
+//9 tab
+//0 visible
+//11 opticlim uicontrol
+//12 normalized
+//13 opticlim
 
-demo = 3;
+demo = 13;
 
 if demo == 1 then
     f1 = createWindow();
@@ -21,7 +24,7 @@ if demo == 1 then
 end
 
 if demo == 2 then
-    dim = 10;
+    dim = 5;
     f2 = createWindow();
     f2.visible = %f;
     f2.position(3:4) = [50 * dim + 50, 50 * dim + 125];
@@ -88,8 +91,8 @@ if demo == 4 then
     label = uicontrol(fr1, "style", "text", "string", "usedeprecatedskin=""off""", "position", [10 370 200 30], "backgroundcolor", [1 0 1]);
     editbox = uicontrol(fr1, "style", "edit", "string", "Edit", "position", [10 330 200 30], "backgroundcolor", [1 0 0]);
     button = uicontrol(fr1, "style", "pushbutton", "string", "Pushbutton", "position", [10 290 200 30]);
-    checkbox = uicontrol(fr1, "style", "checkbox", "string", "Checkbox", "position", [10 250 200 30], "backgroundcolor", [0 0 1]);
-    radio = uicontrol(fr1, "style", "radiobutton", "string", "Radiobutton", "position", [10 210 200 30], "backgroundcolor", [1 0 1]);
+    checkbox = uicontrol(fr1, "style", "checkbox", "string", "Checkbox", "position", [10 250 200 30]);
+    radio = uicontrol(fr1, "style", "radiobutton", "string", "Radiobutton", "position", [10 210 200 30]);
     slider = uicontrol(fr1, "style", "slider", "position", [10 150 200 50]);
     frame = uicontrol(fr1, "style", "frame", "position", [10 110 200 30], "backgroundcolor", [0.5 0.5 0.5]);
     listbox = uicontrol(fr1, "style", "listbox", "string", "listbox1|listbox2|listbox3|listbox4|listbox5", "position", [10 50 200 50], "backgroundcolor", [0.2 0.2 0.2]);
@@ -98,9 +101,9 @@ end
 
 if demo == 5 then
     xdel(winsid());
-    clear;
+    clear onChange;
 
-    function onchange()
+    function onChange()
         R = get("sliderR", "value");
         G = get("sliderG", "value");
         B = get("sliderB", "value");
@@ -125,15 +128,51 @@ if demo == 5 then
 
     uicontrol("style", "frame", "position", [200 20 90 90], "tag", "color", "backgroundcolor", [0, 0, 0]);
 
-    set("sliderR", "callback", "onchange");
-    set("sliderG", "callback", "onchange");
-    set("sliderB", "callback", "onchange");
+    set("sliderR", "callback", "onChange");
+    set("sliderG", "callback", "onChange");
+    set("sliderB", "callback", "onChange");
 
     f.visible = %t;
 end
 
-//border layout
 if demo == 6 then
+    xdel(winsid());
+    clear onChange;
+    function onChange()
+        R = get("sliderR", "value");
+        G = get("sliderG", "value");
+        B = get("sliderB", "value");
+        set("textR", "string", string(R));
+        set("textG", "string", string(G));
+        set("textB", "string", string(B));
+        set("color", "backgroundcolor", [R, G, B]/255);
+    endfunction
+
+
+    f1 = createWindow();
+    f1.position = [100, 100, 350, 130];
+    f1.figure_name = "sliders";
+
+    uicontrol(f1, "style", "slider", "position", [10 10 256 30], "min", 0, "max", 255, "sliderstep", [1, 10], "value", 0, "tag", "sliderB");
+    uicontrol(f1, "style", "slider", "position", [10 50 256 30], "min", 0, "max", 255, "sliderstep", [1, 10], "value", 0, "tag", "sliderG");
+    uicontrol(f1, "style", "slider", "position", [10 90 256 30], "min", 0, "max", 255, "sliderstep", [1, 10], "value", 0, "tag", "sliderR");
+
+    uicontrol(f1, "style", "text", "position", [300 15 40 20], "string", "0", "backgroundcolor", [1, 1, 1], "horizontalalignment", "center", "tag", "textB");
+    uicontrol(f1, "style", "text", "position", [300 55 40 20], "string", "0", "backgroundcolor", [1, 1, 1], "horizontalalignment", "center", "tag", "textG");
+    uicontrol(f1, "style", "text", "position", [300 95 40 20], "string", "0", "backgroundcolor", [1, 1, 1], "horizontalalignment", "center", "tag", "textR");
+
+    f2 = createWindow();
+    f2.position = [450, 100, 130, 130];
+    f2.figure_name = "RGB";
+    uicontrol(f2, "style", "frame", "position", [15 15 100 100], "tag", "color", "backgroundcolor", [0, 0, 0]);
+
+    set("sliderR", "callback", "onChange");
+    set("sliderG", "callback", "onChange");
+    set("sliderB", "callback", "onChange");
+end
+
+//border layout
+if demo == 7 then
 
     f = createWindow();
     f.layout = "border";
@@ -190,7 +229,7 @@ if demo == 6 then
 end
 
 //gridbag layout
-if demo == 7 then
+if demo == 8 then
     f = createWindow();
     f.position = [200 200 200 100];
     f.layout = "gridbag";
@@ -243,28 +282,29 @@ end
 
 
 //tab
-if demo == 8 then
+if demo == 9 then
+
+    xdel(winsid());
+    clear onPush;
+    function onPush()
+        set("push", "string", string(get("tab", "value")));
+    endfunction
+    
     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);
+    tab = uicontrol(f, "style", "tab", "tag", "tab", "position", [0 30 400, 270]);
 
+    tab3 = uicontrol(tab, "style", "frame", "string", "Blue", "layout", "border", "backgroundcolor", [0 0 1]);
+    tab2 = uicontrol(tab, "style", "frame", "string", "Green", "layout", "border", "backgroundcolor", [0 1 0]);
+    tab1 = uicontrol(tab, "style", "frame", "string", "Red", "layout", "border", "backgroundcolor", [1 0 0]);
+    
+    uicontrol(f, "style", "pushbutton", "string", "push me", "callback", "onPush", "tag", "push", "position", [150 0 100 30]);
+    
+    set("tab", "value", 1);
 end
 
-if demo == 9 then
+if demo == 10 then
 
     fig_pregui = figure("figure_name", "OPTICLIM - site and weather selection", ...
     "dockable", "off", ...
@@ -280,17 +320,15 @@ if demo == 9 then
     "tag", "figure_preopticlim", ...
     "visible", "off");
 
-    b1 = createBorder("titled", createBorder("etched"), "Choose your site:", "left", "top", createBorderFont("", 11, "bold"), "black");
+    //b1 = createBorder("titled", createBorder("etched"), "Choose your site:", "left", "top", createBorderFont("", 11, "bold"), "black");
 
     OpticlimPath = "E:\git\toolbox\sanofi-opticlim\";
     f = uicontrol(fig_pregui, "style", "frame", ...
-    "layout", "gridbag", ...
     "fontsize", 11);
-    font1 = createBorderFont("", 11, "bold");
-    b1 = createBorder("titled", createBorder("etched"), _d("OPTICLIM", "Choose your site")+":", "left", "top", font1, "black");
+    //font1 = createBorderFont("", 11, "bold");
+    //b1 = createBorder("titled", createBorder("etched"), _d("OPTICLIM", "Choose your site")+":", "left", "top", font1, "black");
     f1 = uicontrol(f, "style", "frame", ...
     "layout", "gridbag", ...
-    "border", b1, ...
     "constraints", createConstraints("gridbag", [1 1 3 1], [1 1], "both", "left"), ...
     "fontsize", 11);
     uicontrol(f1, "style", "popupmenu", "string", [], ...
@@ -313,8 +351,87 @@ if demo == 9 then
     fig_pregui.visible = "on";
 end
 
+//opticlim uicontrol
+if demo == 11 then
+    xdel(winsid());
+    clear onPush;
+    function onPush()
+        if 0 then
+            set("tabs", "value", 2);
+        end
+        if 1 then
+            r1 = "r1: " + string(get("radio1", "value")) + " ";
+            r2 = "r2: " + string(get("radio2", "value")) + " ";
+            c1 = "c1: " + string(get("check1", "value")) + " ";
+            c2 = "c2: " + string(get("check2", "value")) + " ";
+            t1 = "t1: " + string(get("tabs", "value"));
+            if(t1 == [])
+                t1 = "";
+            end
+            set("label", "string", r1+r2+c1+c2+t1);
+        end
+    endfunction
+    f = createWindow();
+    f.position = [200 200 240 460];
+    f.figure_name = "";
+
+    fr1 = uicontrol("style", "frame", "position", [10 10 220 440], "border", createBorder("etched"));
+    checkbox1 = uicontrol(fr1, "style", "checkbox", "string", "Checkbox 1", "position", [10 400 200 30], "tag", "check1");
+    checkbox2 = uicontrol(fr1, "style", "checkbox", "string", "Checkbox 2", "position", [10 370 200 30], "tag", "check2");
+    editbox = uicontrol(fr1, "style", "edit", "string", "Edit", "position", [10 330 200 30]);
+    frame = uicontrol(fr1, "style", "frame", "position", [10 270 200 50]);
+    button = uicontrol(fr1, "style", "pushbutton", "string", "Pushbutton", "position", [10 230 200 30], "callback", "onPush");
+    radio1 = uicontrol(fr1, "style", "radiobutton", "string", "Radio 1", "position", [10 190 200 30], "groupname", "radio", "tag", "radio1");
+    radio2 = uicontrol(fr1, "style", "radiobutton", "string", "Radio 2", "position", [10 160 200 30], "groupname", "radio", "tag", "radio2");
+    combo = uicontrol(fr1, "style", "popupmenu", "string", "popupmenu1|popupmenu2|popupmenu3|popupmenu4", "position", [10 120 200 30]);
+
+    tab = uicontrol(fr1, "style", "tab", "position", [10 50 200 60], "tag", "tabs");
+    tab3 = uicontrol(tab, "style", "frame", "string", "Blue", "backgroundcolor", [0 0 1]);
+    tab2 = uicontrol(tab, "style", "frame", "string", "Green", "backgroundcolor", [0 1 0]);
+    tab1 = uicontrol(tab, "style", "frame", "string", "Red", "backgroundcolor", [1 0 0]);
+
+    label = uicontrol(fr1, "style", "text", "string", "some text", "position", [10 10 200 30], "horizontalalignment", "center", "tag", "label");
+end
+
+if demo == 12 then
+    xdel(winsid());
+    clear onPush;
+    function onPush()
+        r1 = "r1: " + string(get("radio1", "value")) + " ";
+        r2 = "r2: " + string(get("radio2", "value")) + " ";
+        c1 = "c1: " + string(get("check1", "value")) + " ";
+        c2 = "c2: " + string(get("check2", "value")) + " ";
+        t1 = "t1: " + string(get("tabs", "value"));
+        if(t1 == [])
+            t1 = "";
+        end
+        set("label", "string", r1+r2+c1+c2+t1);
+    endfunction
+    f = createWindow();
+    f.position = [200 200 240 460];
+    f.figure_name = "";
+
+    fr1 = uicontrol(f, "style", "frame", "units", "normalized", "position", [0.02 0.02 0.96 0.96], "border", createBorder("etched"));
+
+    checkbox1 = uicontrol(fr1, "style", "checkbox", "string", "Checkbox 1", "units", "normalized", "position", [0.02 0.9 0.96 0.09], "tag", "check1");
+    checkbox2 = uicontrol(fr1, "style", "checkbox", "string", "Checkbox 2", "units", "normalized", "position", [0.02 0.8 0.96 0.09], "tag", "check2");
+    editbox = uicontrol(fr1, "style", "edit", "string", "Edit", "units", "normalized", "position", [0.02 0.7 0.96 0.09]);
+    button = uicontrol(fr1, "style", "pushbutton", "string", "Pushbutton", "units", "normalized", "position", [0.02 0.6 0.96 0.09], "callback", "onPush");
+    radio1 = uicontrol(fr1, "style", "radiobutton", "string", "Radio 1", "units", "normalized", "position", [0.02 0.5 0.96 0.09], "groupname", "radio", "tag", "radio1");
+    radio2 = uicontrol(fr1, "style", "radiobutton", "string", "Radio 2", "units", "normalized", "position", [0.02 0.4 0.96 0.09], "groupname", "radio", "tag", "radio2");
+    combo = uicontrol(fr1, "style", "popupmenu", "string", "popupmenu1|popupmenu2|popupmenu3|popupmenu4", "units", "normalized", "position", [0.02 0.3 0.96 0.09]);
+
+    tab = uicontrol(fr1, "style", "tab", "units", "normalized", "position", [0.02 0.1 0.96 0.195], "tag", "tabs");
+    tab3 = uicontrol(tab, "style", "frame", "string", "Blue", "backgroundcolor", [0 0 1]);
+    tab2 = uicontrol(tab, "style", "frame", "string", "Green", "backgroundcolor", [0 1 0]);
+    tab1 = uicontrol(tab, "style", "frame", "string", "Red", "backgroundcolor", [1 0 0]);
+
+    label = uicontrol(fr1, "style", "text", "string", "some text", "units", "normalized", "position", [0.02 0.005 0.96 0.09], "horizontalalignment", "center", "tag", "label");
+end
+
 //opticlim
-if demo == 10 then
+if demo == 13 then
     exec("E:\git\toolbox\sanofi-opticlim\loader.sce");
     OpticlimStart();
 end
+
index 4e9a5e8..e66c732 100644 (file)
 // connect to server
-var socket = io();
-
-//socket events management
-socket.on('disconnect', function () {
-    setInfo('Connection lost');
-});
-
-socket.on('status', function (msg) {
-    switch(msg.data) {
-        case 'ready':
-        case 'reconnection':
-            setInfo('Scilab is ready');
-            resetLogger();
-            //reset "scilab" page
-            var parent = document.getElementById('scilab');
-            parent.innerHTML = '';
-            break;
-        default:
-            setInfo('Scilab is busy');
-            break;
-    }
-    setLogger("<font color='black'>" +  msg.data + '</font>');
-});
-
-socket.on('graphic_create', function (msg) {
-    //setLogger('<font color="green">' +  msg + '</font>');
-    eval(msg);
-});
-
-socket.on('graphic_delete', function (msg) {
-    //setLogger('<font color="red">' + msg + '</font>');
-    eval(msg);
-});
-
-socket.on('graphic_update', function (msg) {
-    //setLogger('<font color="orange">' +  msg + '</font>');
-    eval(msg);
-});
-
-socket.on('graphic_reconnection', function (msg) {
-    var scilab = document.getElementById('scilab');
-    switch(msg) {
-        case 'start':
-            console.log('hidden');
-            scilab.style.visibility = 'hidden';
-            break;
-        case 'end' :
-            console.log('visible');
-            scilab.style.visibility = 'visible';
-            break;
+var socket;
+
+resetLogger();
+setInfo('');
+
+function init() {
+    socket = io();
+
+    //socket events management
+    socket.on('disconnect', function () {
+        setInfo('Connection lost');
+    });
+
+    socket.on('status', function (msg) {
+        switch(msg.data) {
+            case 'ready':
+            case 'reconnection':
+                setInfo('Scilab is ready');
+                resetLogger();
+                //reset "scilab" page
+                var parent = getScilab();
+                parent.innerHTML = '';
+                break;
+            default:
+                setInfo('Scilab is busy');
+                break;
+        }
+        setLogger("<font color='black'>" +  msg.data + '</font>');
+    });
+
+    socket.on('graphic_create', function (msg) {
+        //setLogger('<font color="green">' +  msg + '</font>');
+        eval(msg);
+    });
+
+    socket.on('graphic_delete', function (msg) {
+        //setLogger('<font color="red">' + msg + '</font>');
+        eval(msg);
+    });
+
+    socket.on('graphic_update', function (msg) {
+        //setLogger('<font color="orange">' +  msg + '</font>');
+        eval(msg);
+    });
+
+    socket.on('graphic_reconnection', function (msg) {
+        var scilab = getScilab();
+        switch(msg) {
+            case 'start':
+                scilab.style.visibility = 'hidden';
+                break;
+            case 'end' :
+                scilab.style.visibility = 'visible';
+                break;
+        }
+    });
+}
+
+function force_reload() {
+    getScilab().innerHTML = '';
+    $('#taskbar').children().remove();
+    socket.emit("force_reload");
+}
+
+function addWindow(win) {
+    var $win = $('#scilab');
+
+    //create taskbar button
+    var $btn = $(document.createElement('button'));
+    $btn.prop('type', 'button');
+    $btn.dblclick(onDelWindow);
+    $btn.click(onSelectWindow);
+    $btn.addClass('btn btn-default navbar-btn btn-window');
+    $btn.prop('id', win.id + '_btn');
+    $btn.text(win.id);
+    $('#taskbar').append($btn);
+
+    //create window div
+    $('#windows').append(win);
+    
+    selectWindow(win);
+}
+
+function onDelWindow() {
+    var idxstr = this.id.indexOf('_');
+    var id = this.id.substring(0, idxstr);
+    delWindow(parseInt(this.id.substring(3)));
+}
+
+function delWindow(uid) {
+    //delete element and btn
+    getJElementById(uid).remove();
+    getJElementById(uid, '_btn').remove();
+    selectWindow();
+}
+
+function onSelectWindow() {
+    var idxstr = this.id.indexOf('_');
+    var id = this.id.substring(0, idxstr);
+    selectWindow(document.getElementById(id));
+}
+
+function selectWindow(win) {
+    if(typeof win === 'undefined' ) {
+        //find last window
+        var wins = $('#scilab').children().last().get();
+        if(wins.length == 0) {
+            return;
+        }
+        
+        win = wins[0];
     }
-});
+    
+    $('#taskbar').children().not('#' + win.id + '_btn').css('background-color', '');
+    $('#' + win.id + '_btn').css('background-color', 'skyblue');
+
+    var $win = $('#scilab');
+    $win.children().not('#' + win.id).css('display', 'none');
+    $win.children('#' + win.id).css('display', 'block');
+}
 
 function onPushButton() {
     var id = getUID(this.id); //ignore "uid"
@@ -64,12 +132,18 @@ function onCheckBox() {
 
 function onRadioButton() {
     var id = getUID(this.id); //ignore "uid"
-    socket.emit('callback', {uid:id, value:this.checked});
+    
+    //send check state of all group components
+    var __sibling__ = $('input[name="' + this.name + '"]');
+    for(var i = 0 ; i < __sibling__.length ; ++i) {
+        socket.emit('callback', {uid:getUID(__sibling__[i].id), value:__sibling__[i].checked});
+    }
 }
 
 function onListBox() {
     var id = getUID(this.id); //ignore "uid"
     var data = [];
+    
     for(var i = 0 ; i < this.options.length; ++i) {
         if(this.options[i].selected) {
             data.push(i);
@@ -79,18 +153,26 @@ function onListBox() {
 }
 
 function onComboBox() {
+    var id = getUID(this.id); //ignore "uid"
+    var data = [];
+    
+    for(var i = 0 ; i < this.options.length; ++i) {
+        if(this.options[i].selected) {
+            data.push(i);
+            break;
+        }
+    }
+    socket.emit('callback', {uid:id, value:data});
 }
 
-function onTab() {
-    var li = this.parentNode;
-    var ul = li.parentNode;
-
-    var k = 0;
-    var elem = li;
-    while(elem=elem.previousSibling){k++;}
+function onTab(e) {
+    
+    var $e = $(e.target)
+    var index = $e.closest('li').index();
+    var id = parseInt($e.closest('div').attr('id').substring(3));
 
-    var id = parseInt(ul.id.substring(3)); //ignore "uid"
-    socket.emit('callback', {uid:id, value:k});
+    //console.log('onTab ' + (index+1));
+    socket.emit('callback', {uid:id, value:index+1});
 }
 
 function onSlider() {
@@ -109,22 +191,28 @@ function onSpinner() {
 }
 
 //tools
-
 function unload() {
     socket.close();
 }
 
 function setInfo(data) {
-    document.getElementById('infobar').innerHTML = data;
+    var __info__ = document.getElementById('infobar');
+    if(__info__) {
+        __info__.innerHTML = data;
+    }
 }
 
 function resetLogger() {
-    var objDiv = document.getElementById('logger');
-    objDiv.innerHTML = '';
+    var __log__ = document.getElementById('logger');
+    if(__log__) {
+        __log__.innerHTML = '';
+    }
 }
 
 function setLogger(data) {
-    var objDiv = document.getElementById('logger');
-    objDiv.innerHTML += data + '</br>';
-    objDiv.scrollTop = objDiv.scrollHeight;
+    var __log__ = document.getElementById('logger');
+    if(__log__) {
+        __log__.innerHTML += data + '</br>';
+        __log__.scrollTop = __log__.scrollHeight;
+    }
 }
index 2f91675..e7cf2dc 100644 (file)
@@ -1,5 +1,5 @@
 body {
-    text-align : center;
+    padding-top: 70px; 
 }
 
 .log {
@@ -21,19 +21,20 @@ body {
         to allow absolue positioning of children
     */
     position: relative;
-    background-color : rgb(192,192,192);
+    display:none;
+    background-color : rgb(255,255,255);
     width : 610px;
     height : 460px;
     margin : auto;
-    border : 2px rgb(0,0,0) solid;
-    text-align: left;
+    text-align: center;
 }
 
-.btn {
+.GO_UI_PUSHBUTTON {
     position: absolute;
     text-align:center;
     overflow : hidden;
     visibility:inherit;
+    background-color : rgb(240,240,240);
 }
 
 .GO_UI_FRAME {
@@ -47,37 +48,25 @@ body {
 
 .GO_UI_TEXT {
     position: absolute;
-    background-color : white;
-    line-height:20px;
-    text-align:left;
-    vertical-align: middle;
-    margin-bottom: 0px;
     overflow : hidden;
-    font-family: Tahoma, Verdana, Segoe, sans-serif;
-    font-size:11px;
     visibility:inherit;
+    margin-bottom: 0;
+    display: flex;
+    align-items: center; /* align vertical */
 }
 
 .GO_UI_EDIT {
     position: absolute;
-    background-color : white;
-    text-align:left;
     overflow : hidden;
-    font-family: Tahoma, Verdana, Segoe, sans-serif;
-    font-size:11px;
     visibility:inherit;
 }
 
 .GO_UI_CHECKBOX {
+    border:  1px solid black;
     position: absolute;
-    background-color : white;
-    line-height:20px;
-    text-align:left;
-    vertical-align: middle;
     overflow : hidden;
-    font-family: Tahoma, Verdana, Segoe, sans-serif;
-    font-size:11px;
     visibility:inherit;
+    margin-bottom: 0px;
 }
 
 .GO_UI_CHECKBOX_LABEL {
@@ -86,7 +75,10 @@ body {
     overflow : hidden;
     font-family: inherit;
     font-size:inherit;
+    font-weight:normal;
     visibility:inherit;
+    display: flex;
+    align-items: center; /* align vertical */
 }
 
 .GO_UI_CHECKBOX_CHECKBOX {
@@ -98,6 +90,7 @@ body {
 }
 
 .GO_UI_RADIOBUTTON {
+    border:  1px solid black;
     position: absolute;
     background-color : white;
     line-height:20px;
@@ -115,7 +108,10 @@ body {
     overflow : hidden;
     font-family: inherit;
     font-size:inherit;
+    font-weight:normal;
     visibility:inherit;
+    display: flex;
+    align-items: center; /* align vertical */
 }
 
 .GO_UI_RADIOBUTTON_RADIO {
@@ -161,7 +157,6 @@ body {
     position: absolute;
     background-color : white;
     text-align:center;
-    overflow : hidden;
     font-family: Tahoma, Verdana, Segoe, sans-serif;
     font-size:11px;
     visibility:inherit;
@@ -171,51 +166,6 @@ body {
     flex-direction:column;
 }
 
-.GO_UI_TAB ul {
-    list-style: none;
-    padding: 0;
-    margin: 0;
-}
-
-.GO_UI_TAB li {
-    display: inline;
-    margin: 0;
-}
-
-.GO_UI_TAB input {
-    padding: 0 1em;
-    text-decoration: none;
-    border-style: none;
-}
-
-.GO_UI_TAB input:hover {
-    text-decoration: underline;
-    cursor: pointer;
-}
-
-.GO_UI_TAB input:focus {
-    outline: none;
-}
-
-.GO_UI_TAB_SELECTED input:hover {
-    text-decoration: none;
-}
-
-.GO_UI_TAB_SELECTED input {
-    padding-bottom: 2px;
-    font-weight: bold;
-    border-width: 0px 2px 0px 2px;
-    border-style: solid;
-    border-color: black;
-}
-
-.GO_UI_TAB div {
-    width: 100%;
-    display: none;
-    position: inherit;
-    flex:1;
-}
-
 .GO_UI_FRAME_BORDER {
 }
 
@@ -238,6 +188,13 @@ body {
     text-align: left;
 }
 
+.navbar .btn-window {
+    width: 150px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    margin-right: 5px;
+}
+
 #infobar {
     background-color : rgb(192,192,192);
     opacity : 1;
@@ -247,7 +204,3 @@ body {
     border : 1px rgb(0,0,0) solid;
     font-weight: bold;
 }
-
-#ex1Slider .slider-selection {
-    background: #BABABA;
-}
similarity index 69%
rename from scilab/node/static/index.html
rename to scilab/node/static/scilab.html
index f891b10..9929689 100644 (file)
@@ -2,7 +2,6 @@
 <html>
     <head>
         <meta charset='UTF-8' />
-        <title>Scilab WebView</title>
         <script src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.js'></script>
         <script src="main.js"></script>
         <script src="scilab_create.js"></script>
         <script src="scilab_setter.js"></script>
         <script src="scilab_tools.js"></script>
         <script src="scilab_enum.js"></script>
-        <link rel="stylesheet" href="scilab.css">
 
         <!-- JQuery -->
         <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
         <!-- bootstrap -->
         <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
         <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
-        <!-- bootstrap-slider -->
+        <!-- bootstrap-slider >
         <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/6.1.5/css/bootstrap-slider.css">
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/6.1.5/bootstrap-slider.js"></script>
+        <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/6.1.5/bootstrap-slider.js"></script-->
         <!-- bootstrap touchspin >
         <link rel="stylesheet" href="deps/jquery.bootstrap-touchspin.min.css">
         <script src="deps/jquery.bootstrap-touchspin.min.js"></script-->
 
+        <!-- Scilab css -->
+        <link rel="stylesheet" href="scilab.css">
+
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
     </head>
-    <body onunload="unload()">
-        <h1>Scilab WebView</h1>
-        <div class='window' id='scilab'></div>
-        <footer>
+    <body onload="init()" onunload="unload()">
+        <nav class='navbar navbar-default navbar-fixed-top' style="display:block">
+            <div id='taskbar' class='container' style='display:inline-block'>
+            </div>
+            <ul class='nav navbar-nav navbar-right'>
+                <button type='button' class='btn navbar-btn' style='display:inline-block;margin-right:20px'>User</button>
+            </ul>
+        </nav>    
+        <div class='window' id='scilab' style="display:initial"></div>
+        <div style="text-align:center">
             <div id='infobar'></div>
             <br>
             <button class='btn' style="position:relative;font-weight:bold" id='exec' onclick="force_reload();">clear and reload</button>
+            <br>
             <div class='log' id='logger'></div>
-        </footer>
-        <script type='text/javascript'>
-            resetLogger();
-            setInfo('');
-
-            function force_reload() {
-                document.getElementById('scilab').innerHTML = '';
-                socket.emit("force_reload");
-            }
-        </script>
+        </div>
     </body>
 </html>
index 571e048..bcba2e3 100644 (file)
 function createFigure(uid) {
-    var __parent__ = document.getElementById('scilab');
+    var __parent__ = getScilab();
     var __temp__ = createElement("DIV");
     __temp__.id = getIdString(uid);
     __temp__.className = 'GO_FIGURE';
     __parent__.appendChild(__temp__);
-    __parent__.innerHTML += '<br>';
+    addWindow(__temp__);
     return __temp__;
 }
 
 function createPushButton(uid) {
-    return createCommonIUControl(uid, 'BUTTON', 'btn');
+    var __temp__ = createCommonIUControl(uid, 'BUTTON', 'GO_UI_PUSHBUTTON');
+    //add bootstrap class
+    var $temp = $("#" + __temp__.id);
+    $temp.addClass("btn");
+    
+    return __temp__;
 }
 
 function createFrame(uid) {
-    return createCommonIUControl(uid, 'DIV', 'GO_UI_FRAME');
+    var __temp__ = createCommonIUControl(uid, 'DIV', 'GO_UI_FRAME');
+
+    //add bootstrap class
+    var $temp = $("#" + __temp__.id);
+    $temp.addClass("panel");
+    $temp.addClass("panel-default");
+    $temp.css("margin", "0");
+    
+    var __header__ = createCommonIUControl(uid, 'DIV', 'panel-heading');
+    __header__.id = getIdString(uid, "_header");
+    __header__.style.display = 'none';
+    
+    var __footer__ = createCommonIUControl(uid, 'DIV', 'panel-footer');
+    __footer__.id = getIdString(uid, "_footer");
+    __footer__.style.display = 'none';
+    
+    var __child__ = createCommonIUControl(uid, 'DIV', 'panel-body');
+    __child__.id = getIdString(uid, "_body");
+    
+    __temp__.appendChild(__header__);
+    __temp__.appendChild(__child__);
+    __temp__.appendChild(__footer__);
+    return __temp__;
 }
 
 function createText(uid) {
-    return createCommonIUControl(uid, 'LABEL', 'GO_UI_TEXT');
+    var __temp__ = createCommonIUControl(uid, 'LABEL', 'GO_UI_TEXT');
+//    var $temp = $("#" + __temp__.id);
+//    $temp.addClass("label");
+//    $temp.addClass("label-default");
+    return __temp__;
 }
 
 function createEdit(uid) {
     var __temp__ = createCommonIUControl(uid, 'INPUT', 'GO_UI_EDIT');
     __temp__.type = 'text';
+
+    //add bootstrap class
+    var $temp = $("#" + __temp__.id);
+    $temp.addClass("form-control");
     return __temp__;
 }
 
 function createCheckbox(uid) {
-    //for checkbox we need to create 3 elements.
+    //for checkbox we need to create 4 elements.
 
     //a div to enclose others
     var __main__ = createCommonIUControl(uid, 'DIV', 'GO_UI_CHECKBOX');
-    //the checkbox itself
-    var __temp__ = createCommonIUControl(uid, 'INPUT', 'GO_UI_CHECKBOX_CHECKBOX');
-    __temp__.type = 'checkbox';
-    __temp__.id = getIdString(uid, '_checkbox');
-    __main__.appendChild(__temp__);
 
+    //add bootstrap class
+    var __jqmain__ = $("#" + __main__.id);
+    __jqmain__.addClass("checkbox");
+    __main__.style.position = 'absolute';
+    __main__.style.margin = '0';
+    __main__.style.display = 'flex';
+    __main__.style.alignItems = 'center';
+    
     //the label of the checkbox
     var __label__ = createCommonIUControl(uid, 'LABEL', 'GO_UI_CHECKBOX_LABEL');
     __label__.id = getIdString(uid, '_label');
-    __label__.htmlFor = __temp__.id;
     __main__.appendChild(__label__);
 
+     //the checkbox itself
+   var __temp__ = createCommonIUControl(uid, 'INPUT', 'GO_UI_CHECKBOX_RADIO');
+    __temp__.type = 'checkbox';
+    __temp__.id = getIdString(uid, '_checkbox');
+    __temp__.style.marginLeft = '-15px';
+    __label__.appendChild(__temp__);
+    
+    //and a span to esay update text value
+    var __span__ = createCommonIUControl(uid, 'SPAN', '');
+    __span__.id = getIdString(uid, '_span');
+    __label__.appendChild(__span__);
+
     return __main__;
 }
 
 function createRadio(uid) {
-    //for checkbox we need to create 3 elements.
+    //for checkbox we need to create 4 elements.
 
     //a div to enclose others
     var __main__ = createCommonIUControl(uid, 'DIV', 'GO_UI_RADIOBUTTON');
-    //the radio itself
-    var __temp__ = createCommonIUControl(uid, 'INPUT', 'GO_UI_RADIOBUTTON_RADIO');
-    __temp__.type = 'radio';
-    __temp__.id = getIdString(uid, '_radio');
-    __main__.appendChild(__temp__);
 
+    //add bootstrap class
+    var __jqmain__ = $("#" + __main__.id);
+    __jqmain__.addClass("radio");
+    __main__.style.position = 'absolute';
+    __main__.style.margin = '0';
+    __main__.style.display = 'flex';
+    __main__.style.alignItems = 'center';
     //the label of the radio
     var __label__ = createCommonIUControl(uid, 'LABEL', 'GO_UI_RADIOBUTTON_LABEL');
     __label__.id = getIdString(uid, '_label');
-    __label__.htmlFor = __temp__.id;
     __main__.appendChild(__label__);
 
+     //the radio itself
+   var __temp__ = createCommonIUControl(uid, 'INPUT', 'GO_UI_RADIOBUTTON_RADIO');
+    __temp__.type = 'radio';
+    __temp__.id = getIdString(uid, '_radio');
+    __temp__.style.marginLeft = '4px';
+    __temp__.style.marginBottom = '12px';
+    __label__.appendChild(__temp__);
+    
+    //and a span to esay update text value
+    var __span__ = createCommonIUControl(uid, 'SPAN', '');
+    __span__.id = getIdString(uid, '_span');
+    __label__.appendChild(__span__);
+
     return __main__;
 }
 
@@ -73,12 +137,15 @@ function createSlider(uid) {
 }
 
 function createListbox(uid) {
-    return createCommonIUControl(uid, 'SELECT', 'GO_UI_LISTBOX');
+    var __temp__ = createCommonIUControl(uid, 'SELECT', 'GO_UI_LISTBOX');
+    return __temp__;
 }
 
 function createCombobox(uid) {
     var __temp__ = createCommonIUControl(uid, 'SELECT', 'GO_UI_POPUPMENU');
     __temp__.size = 1;
+    var $temp = $("#" + __temp__.id);
+    $temp.addClass("form-control");
     return __temp__;
 }
 
@@ -96,12 +163,28 @@ function createTab(uid) {
     var __ul__ = createElement('UL');
     __ul__.id = getIdString(uid, '_ul');
     __temp__.appendChild(__ul__);
+
+    var $ul = $("#" + __ul__.id);
+    $ul.addClass("nav");
+    $ul.addClass("nav-tabs");
+
+    var __content__ = createElement('DIV');
+    __content__.id = getIdString(uid, '_tabs');
+    __temp__.appendChild(__content__);
+
+    var $content = $("#" + __content__.id);
+    $content.addClass("tab-content");
+
     return __temp__;
 }
 
 function deleteObject(uid) {
-    var __child__ = getElementById(uid);
-    if(__child__) {
-        __child__.parentNode.removeChild(__child__);
+    $child = getJElementById(uid);
+    if($child) {
+        if($child.hasClass('GO_FIGURE')) {
+            delWindow(uid);
+        } else {
+            $child.remove();
+        }
     }
 }
\ No newline at end of file
index ca7695c..40ffff4 100644 (file)
@@ -30,37 +30,10 @@ function gridbagHelperTR(parent, child, pos) {
 }
 
 function tabSelectHelper(tab, index) {
-    var __ul__ = document.getElementById(tab.id + '_ul');
-
-    if(!__ul__) {
-        return;
-    }
-
-    var __item__ = __ul__.children[index];
-    if(!__item__) {
-        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_UI_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 = 'flex';
+    index = index === 0 ? index : index - 1;
+    //console.log(tab.id + ": " + index);
+    var b = '#' + tab.id + ' li:eq(' + index + ') a';
+    $(b).tab('show');
 }
 
 function addTabHelper(uid, child) {
@@ -68,23 +41,47 @@ function addTabHelper(uid, child) {
     var __li__ = createElement('LI');
     __li__.id = getIdString(child, '_li');
 
+    //move tab child to tab-content container
+    var __tab__ = getElementById(uid, '_tabs');
+    __tab__.appendChild(__child__);
+
     //create input button
-    var __btn__ = createElement('INPUT');
-    __btn__.id = getIdString(child, '_btn');
-    __btn__.type = 'button';
-    __btn__.addEventListener('click', onTab);
+    var __tablabel__ = createElement('a');
+    __tablabel__.id = getIdString(child, '_tab');
 
-    //add button in il
-    __li__.appendChild(__btn__);
+    //add button in li
+    __li__.appendChild(__tablabel__);
 
-    //add il as first child in ul
+    //add li as first child in ul
     var __ul__ = getElementById(uid, '_ul');
     __ul__.insertBefore(__li__, __ul__.firstChild);
+    var $ul = $('#' + __ul__.id);
+    var $tab = $('#' + __tablabel__.id);
+    $tab.attr('data-toggle', 'tab');
+    $tab.attr('href', '#' + __child__.id);
+
+    var $child = $('#' + __child__.id);
+    $child.addClass('tab-pane');
+    $child.addClass('fade');
 
     //update child properties
-    __child__.style.position = 'inherit';
-    __child__.style.left = 'inherit';
-    __child__.style.bottom = 'inherit';
+    __child__.style.position = 'absolute';
+    __child__.style.left = '';
+    __child__.style.bottom = '';
     __child__.style.width = '100%';
     __child__.style.height = 'inherit';
+    
+    updateTabHeight(getUID($ul.parent().attr('id')));
+    
+    //add event listener on new tab
+    $('#' + __tablabel__.id).on('show.bs.tab', onTab);
+
+}
+
+function updateTabHeight(uid) {
+    var $tab = getJElementById(uid);
+    
+    var $ul = $tab.children('ul');
+    var $tabs = $tab.children('div');
+    $tabs.height($tab.height() - $ul.height() - 13);
 }
\ No newline at end of file
index 4838e81..342c96d 100644 (file)
@@ -1,7 +1,12 @@
 function setParent(uid, parent) {
-    var __child__ = getElementById(uid);
-    var __parent__ = getElementById(parent);
-    __parent__.appendChild(__child__);
+    var $child = getJElementById(uid);
+    var $parent = getJElementById(parent);
+    
+    if($parent.hasClass("GO_UI_FRAME")) {
+        $parent = getJElementById(parent, "_body");
+    }
+
+    $parent.append($child);
 }
 
 function setFigureSize(uid, val) {
@@ -10,59 +15,74 @@ function setFigureSize(uid, val) {
     __child__.style.height = val[1] + 'px';
 }
 
-function setUIPosition(uid, val) {
+function setFigureName(uid, val) {
+    var $fig = getJElementById(uid, '_btn');
+    $fig.text(val);
+}
+
+function setUIPosition(uid, val, units) {
+    var u = 'px';
+    if(units === 'normalized') {
+        u = '%';
+        val[0] *= 100;
+        val[1] *= 100;
+        val[2] *= 100;
+        val[3] *= 100;
+    }
+    
     var __child__ = getElementById(uid);
-    __child__.style.left = val[0] + 'px';
-    __child__.style.bottom = val[1] + 'px';
-    __child__.style.width = val[2] + 'px';
-    __child__.style.height = val[3] + 'px';
+    __child__.style.left = val[0] + u;
+    __child__.style.bottom = val[1] + u;
+    __child__.style.width = val[2] + u;
+    __child__.style.height = val[3] + u;
 }
 
 function setUIString(uid, val, parent) {
     var __child__ = getElementById(uid);
-    switch(__child__.className) {
-        case 'GO_UI_CHECKBOX':
-        case 'GO_UI_RADIOBUTTON':
-           var __label__ = getElementById(uid + '_label');
-            __label__.innerHTML = val[0];
-            break;
-
-        case 'GO_UI_POPUPMENU' :
-        case 'GO_UI_LISTBOX':
-            //remove previous values
-            while (__child__.length) {__child__.remove(0);}
-
-           var size = val.length;
-            for(var i = 0 ; i < size ; ++i) {
-                __child__.add(new Option(val[i]));
-            }
-
-            if(__child__.className === 'GO_UI_LISTBOX') {
-                //switch to listbox instead of combobox
-               __child__.size = 2;
-            }
+    
+    var __jqchild__ = getJElementById(uid);
+    
+    if(__jqchild__.hasClass('GO_UI_CHECKBOX') || __jqchild__.hasClass('GO_UI_RADIOBUTTON')) {
+        var __label__ = getElementById(uid + '_span');
+        __label__.textContent = val[0];
+        return;
+    }
 
-            break;
+    if(__jqchild__.hasClass('GO_UI_POPUPMENU') || __jqchild__.hasClass('GO_UI_LISTBOX')) {
+        //remove previous values
+        while (__child__.length) {__child__.remove(0);}
+
+       var size = val.length;
+        for(var i = 0 ; i < size ; ++i) {
+            __child__.add(new Option(val[i]));
+        }
+
+        if(__child__.className === 'GO_UI_LISTBOX') {
+            //switch to listbox instead of combobox
+           __child__.size = 2;
+        }
+        
+        return;
+    }
+    
+    if(__jqchild__.hasClass('GO_UI_FRAME')) {
+       var $parent = getJElementById(parent);
+        if($parent && $parent.hasClass('GO_UI_TAB')) {
+           var __tab__ = getElementById(uid + '_tab');
+            __tab__.textContent = val[0];
+        }
+        
+        return;
+    }
 
-        case 'GO_UI_TAB':
-            //nothing to do
-           break;
-
-       case 'GO_UI_FRAME':
-           var __parent__ = getElementById(parent);
-            if(__parent__ && __parent__.className === 'GO_UI_TAB') {
-               var __btn__ = getElementById(uid + '_btn');
-                __btn__.value = val[0];
-            }
-            break;
+    if(__jqchild__.hasClass('GO_UI_TAB')) {
+        return;
+    }
 
-        default:
-            if(isInputType(uid)) {
-                __child__.value = val[0];
-            } else {
-                __child__.innerHTML = val[0];
-            }
-            break;
+    if(isInputType(uid)) {
+        __child__.value = val[0];
+    } else {
+        __child__.textContent = val[0];
     }
 }
 
@@ -72,7 +92,7 @@ function setVisible(uid, val) {
 }
 
 function setUIEnable(uid, val) {
-    var __child__ = $('#' + getIdString(uid));
+    var __child__ = getJElementById(uid);
     if(val) {
         __child__.removeClass("disabled");
     } else {
@@ -111,8 +131,24 @@ function setUIFontWeight(uid, val) {
 }
 
 function setUIHorizontalAlignment(uid, val) {
-    var __child__ = getElementById(uid);
-    __child__.style.textAlign = val;
+    var $child = getJElementById(uid);
+    if($child.hasClass('GO_UI_TEXT')) {
+        switch(val) {
+            default:
+            case 'left' :
+                val = 'flex-start';
+                break;
+            case 'center' :
+                break;
+            case 'right' :
+                val = 'flex-end';
+                break;
+        }
+        
+        $child.css("justify-content", val);
+    } else {
+        $child.css("text-align", val);
+    }
 }
 
 function setUIVerticalAlignment(uid, val) {
@@ -218,6 +254,10 @@ function setUIStep(uid, val) {
 
 function setUIValue(uid, val) {
     var __child__ = getElementById(uid);
+    if(!__child__) {
+        console.log("setUIValue : " + uid);
+        return;
+    }
     switch(__child__.className) {
         case 'GO_UI_SPINNER':
         case 'GO_UI_SLIDER':
@@ -345,7 +385,7 @@ function setUIGridBag(uid, parent, grid) {
     gridbagHelperTD(__tr__,__td__, grid[0]);
 
     //force refresh of table, move it to another component and rollback
-    var __scilab__ = document.getElementById('scilab');
+    var __scilab__ = getScilab();
     __scilab__.appendChild(__table__);
     var __parent__ = getElementById(parent);
     __parent__.appendChild(__table__);
@@ -353,21 +393,29 @@ function setUIGridBag(uid, parent, grid) {
 
 
 
-function setUIFrameBorder(uid, border, parent, title) {
-    var __child__ = getElementById(uid);
-    var __border__ = createCommonIUControl(border, 'DIV', 'GO_UI_FRAME_BORDER');
-
-    var __fieldset__ = createElement('FIELDSET');
-   __fieldset__.id = getIdString(uid, '_fieldset');
-    var __legend__ = createElement('LEGEND');
-    __legend__.id = getIdString(uid, '_legend');
-    __legend__.innerHTML = title;
+function setUIFrameBorder(uid, title) {
+    
+    var __border__;
+    var __header__ = getElementById(uid, "_header");
+    var __footer__ = getElementById(uid, "_footer");
 
-    __fieldset__.appendChild(__legend__);
-    __fieldset__.appendChild(__child__);
-    __border__.appendChild(__fieldset__);
-    var __parent__ = getElementById(parent);
-    __parent__.appendChild(__border__);
+    if(title.position === "top") {
+       __header__.style.display = 'block';
+       __footer__.style.display = 'none';
+       __border__ = __header__;
+    } else { //bottom
+       __footer__.style.display = 'block';
+       __header__.style.display = 'none';
+       __border__ = __footer__;
+    }
+    
+    __border__.textContent = title.text;
+    __border__.style.textAlign = title.alignment;
+    __border__.style.fontName = title.fontName;
+    __border__.style.fontStyle = title.fontStyle;
+    __border__.style.fontSize = title.fontSize + 'px';
+    __border__.style.fontWeight = title.fontWeight;
+    __border__.style.color = title.fontColor;
 }
 
 function setUIIcon(uid, icon, val) {
@@ -375,53 +423,67 @@ function setUIIcon(uid, icon, val) {
 
     //add span element in button to show image
     var __icon__ = createElement('SPAN');
-    __icon__.style.background = '#f3f3f3 url(' + icon + ') no-repeat left center';
-    __icon__.style.paddingLeft = '20px';
+    if(icon.substring(0, 5) === 'glyph') {
+        __icon__.className = "glyphicon " + icon;
+        __icon__.style.paddingRight = '4px';
+    } else {
+        __icon__.style.background = '#f3f3f3 url(' + icon + ') no-repeat left center';
+        __icon__.style.paddingLeft = '20px';
+    }
+
+    var __text__ = createElement('SPAN');
+    __text__.textContent = val;
+    __text__.style = __child__.style;
+
+    __child__.innerHTML = "";
     __child__.appendChild(__icon__);
-    //__child__.innerHTML += val;
+    __child__.appendChild(__text__);
 }
 
+function setUIGroupName(uid, val) {
+    var __child__ = getElementById(uid, "_radio");
+    if(__child__) {
+        __child__.name  = val;
+    }
+}
+
+
 function setCallback(uid) {
     var event;
     var func;
 
     var __child__ = getElementById(uid);
 
-    switch(__child__.className) {
-        case 'btn' :
-            event = "click";
-            func = onPushButton;
-            break;
-        case 'GO_UI_CHECKBOX' :
-            event = "click";
-            func = onCheckBox;
-            break;
-        case 'GO_UI_RADIOBUTTON' :
-            event = "click";
-            func = onRadioButton;
-            break;
-        case 'GO_UI_LISTBOX' :
-            event = "change";
-            func = onListBox;
-            break;
-        case 'GO_UI_POPUPMENU' :
-            event = "change";
-            func = onComboBox;
-            break;
-        case 'GO_UI_SLIDER' :
-            event = "input";
-            func = onSlider;
-            break;
-        case 'GO_UI_EDIT' :
-            event = "input";
-            func = onEditBox;
-            break;
-        case 'GO_UI_SPINNER' :
-            event = "input";
-            func = onSpinner;
-            break;
-        default :
-            return;
+    var __jqchild__ = getJElementById(uid);
+
+    if(__jqchild__.hasClass('GO_UI_PUSHBUTTON')) {
+        event = "click";
+        func = onPushButton;
+    } else if(__jqchild__.hasClass('GO_UI_CHECKBOX')) {
+        //change __child__ to real checkbox
+        __child__ = getElementById(uid, "_checkbox");
+        event = "click";
+        func = onCheckBox;
+    } else if(__jqchild__.hasClass('GO_UI_RADIOBUTTON')) {
+        //change __child__ to real radio
+        __child__ = getElementById(uid, "_radio");
+        event = "click";
+        func = onRadioButton;
+    } else if(__jqchild__.hasClass('GO_UI_LISTBOX')) {
+        event = "change";
+        func = onListBox;
+    } else if(__jqchild__.hasClass('GO_UI_POPUPMENU')) {
+        event = "change";
+        func = onComboBox;
+    } else if(__jqchild__.hasClass('GO_UI_SLIDER')) {
+        event = "input";
+        func = onSlider;
+    } else if(__jqchild__.hasClass('GO_UI_EDIT')) {
+        event = "input";
+        func = onEditBox;
+    } else if(__jqchild__.hasClass('GO_UI_SPINNER')) {
+        event = "input";
+        func = onSpinner;
     }
 
     //add callback listener
index e890f18..f90c23c 100644 (file)
@@ -17,15 +17,15 @@ function getPadding(t, r, b, l) {
 }
 
 function isInputType(uid) {
-    var __child__ = getElementById(uid);
-    switch (__child__.className) {
-        case 'GO_UI_EDIT' :
-        case 'GO_UI_SLIDER':
-        case 'GO_UI_SPINNER' :
-            return true;
-        default :
-            return false;
+    
+    var $child = getJElementById(uid);
+    if($child.hasClass('GO_UI_EDIT') || 
+        $child.hasClass('GO_UI_SLIDER') ||
+        $child.hasClass('GO_UI_SPINNER')) {
+        return true;
     }
+
+    return false;    
 }
 
 function getUID(id) {
@@ -41,18 +41,25 @@ function getIdString(uid, suffix) {
     return 'uid' + uid + suffix;
 }
 
+function getScilab() {
+    return document.getElementById('scilab');
+}
+
 function getElementById(uid, suffix) {
-    suffix = typeof suffix !== 'undefined' ? suffix : '';
     return document.getElementById(getIdString(uid, suffix));
 }
 
+function getJElementById(uid, suffix) {
+    return $("#" + getIdString(uid, suffix));
+}
+
 function createCommonIUControl(uid, htmlType, cssClass) {
     var __temp__ = createElement(htmlType);
     __temp__.id = getIdString(uid);
     __temp__.className = cssClass;
 
     //add item temporary in main scilabview div waiting __GO_PARENT__ update
-    var __parent__ = document.getElementById('scilab');
-    __parent__.appendChild(__temp__);
+    var $parent = $('#scilab');
+    $parent.append(__temp__);
     return __temp__;
 }
index e908a37..edc3ad1 100644 (file)
@@ -33,11 +33,6 @@ Source: etc\modules.xml; DestDir: {app}\etc; Components: {#COMPN_SCILAB}
 ;
 Source: etc\logging.properties; DestDir: {app}\etc; Components: {#COMPN_SCILAB}
 
-;node.js files
-Source: node\html\*.*; DestDir: {app}\node\html; Flags: recursesubdirs; Components: {#COMPN_SCILAB}
-Source: node\*.js; DestDir: {app}\node; Flags: recursesubdirs; Components: {#COMPN_SCILAB}
-Source: node\*.bat; DestDir: {app}\node; Flags: recursesubdirs; Components: {#COMPN_SCILAB}
-
 ;
 ; root directory
 Source: CHANGES; DestDir: {app}; Components: {#COMPN_SCILAB}
index 248c8b7..fef8176 100644 (file)
 #include BinariesSourcePath + "\modules\slint\slint.iss"
 #include BinariesSourcePath + "\modules\coverage\coverage.iss"
 ;-------------------------------------------------------------------------------
+; scilab web server
+#include BinariesSourcePath + "\node\node.iss"