/* ----------------------------------------------------------------------------- This source file is part of OpenSpace3D For the latest info, see http://www.openspace3d.com Copyright (c) 2012 I-maginer This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to http://www.gnu.org/copyleft/lesser.txt ----------------------------------------------------------------------------- */ struct PlugLogin = [ PL_instance : PInstance, PL_netcomm : NetComm, PL_login : S, PL_dlgstr : VUIDlg, PL_editstr : VUIelement, PL_sTitle : S, PL_sOkButton : S, PL_sCancelButton : S, PL_sText : S ]mkPlugLogin;; fun deleteOb(inst, obstr)= VUIdestroyDialogBox obstr.PL_dlgstr; 0;; fun cbLoginChanged(inst, netstr, userstr, newlogin, obstr)= let if (inst.INST_groupstr.GRP_project.PRJ_netUser == nil) then netThisUser netstr else inst.INST_groupstr.GRP_project.PRJ_netUser -> cuserstr in if (userstr != cuserstr) || (!strcmp obstr.PL_login newlogin) then nil else ( set obstr.PL_login = newlogin; SendPluginEvent inst "Login changed" newlogin nil; ); 0;; fun cbGetLogin(inst, from, action, param, reply, obstr)= let if (inst.INST_groupstr.GRP_project.PRJ_netUser == nil) then netThisUser obstr.PL_netcomm else inst.INST_groupstr.GRP_project.PRJ_netUser -> cuserstr in let netUserGetLogin cuserstr -> login in let if (login == nil) then obstr.PL_login else login -> login in SendPluginEvent inst "Current login" login nil; 0;; fun cbSetLogin(inst, from, action, param, reply, obstr)= if (param == nil) || (!strcmp (strtrim param) "") then nil else ( set obstr.PL_login = param; netChangeLogin obstr.PL_netcomm obstr.PL_login; ); 0;; fun cbClickDlg(dlgstr, state, obstr)= set obstr.PL_dlgstr = nil; if (!state) then nil else let VUIgetElementText obstr.PL_editstr -> login in if (login == nil) || (!strcmp (strtrim login) "") then nil else ( netChangeLogin obstr.PL_netcomm login; VUIdestroyDialogBox obstr.PL_dlgstr; ); 0;; fun cbValidate(eltstr, text, state, obstr)= if (!state) then nil else ( VUIdestroyDialogBox obstr.PL_dlgstr; cbClickDlg obstr.PL_dlgstr 1 obstr; ); 0;; fun getAlign(param)= let [1 1] -> align in let [0.0 0.0] -> pos in let strextr param -> lp in let hd lp -> lp in let 0 -> nb in ( while ((lp != nil) && (nb < 2)) do ( let hd lp -> flag in if (!strcmpi flag "top") then ( mutate align <- [_ 0]; mutate pos <- [_ 10.0]; ) else if (!strcmpi flag "bottom") then ( mutate align <- [_ 2]; mutate pos <- [_ 10.0]; ) else if (!strcmpi flag "left") then ( mutate align <- [0 _]; mutate pos <- [10.0 _]; ) else if (!strcmpi flag "right") then ( mutate align <- [2 _]; mutate pos <- [10.0 _]; ) else nil; set lp = tl lp; set nb = nb + 1; ); [pos align]; );; fun cbShow(inst, from, action, param, reply, obstr)= if obstr.PL_dlgstr != nil then nil else ( let V3DgetSessionView c3dXsession -> viewstr in let if (strcmpi obstr.PL_sTitle "") == 0 then nil else obstr.PL_sTitle -> title in let if (strcmp obstr.PL_sOkButton "") == 0 then loc "OS3DDLIST_C0001" else obstr.PL_sOkButton -> okbutton in let if (strcmp obstr.PL_sCancelButton "") == 0 then nil else obstr.PL_sCancelButton -> cancelbutton in let 500 -> width in let [70 40 0] -> [height textheight texthratio] in let strcatnSep (lineextr obstr.PL_sText) " " -> text in let if text == nil then "" else text -> text in let VUIcreateDialogExt viewstr inst.INST_groupstr.GRP_project.PRJ_vuiGroup [width height] title okbutton cancelbutton 100 (V3DgetVrMode viewstr) (mkfun3 @cbClickDlg obstr) "dialogBox" -> dlgstr in let VUIgetDialogFrame dlgstr -> framestr in let VUIgetElementContainer framestr -> contstr in let VUIcreateEditText contstr framestr [0.0 0.0] [100.0 (itof textheight)] [0 0 1 texthratio 0 0 0 0] [1 1] nil [10 5] text 0 -> editstr in ( VUIsetElementCbValidate editstr mkfun4 @cbValidate obstr; if (!strcmp "" (strtrim param)) || param == nil then nil else let getAlign param -> [pos align] in VUIsetContainerPos contstr pos align nil; set obstr.PL_dlgstr = dlgstr; set obstr.PL_editstr = editstr; VUIsetContainerClear contstr 0; VUIshowDialog dlgstr 1; ); ); 0;; fun cbSConnected(inst, netstr, obstr)= if (!strcmp obstr.PL_login "") || (obstr.PL_login == nil) then nil else netChangeLogin obstr.PL_netcomm obstr.PL_login; 0;; fun newOb(inst)= let mkPlugLogin [inst netcomOS3D (_getress "DefaultName") nil nil loc "OS3DLOGIN_0004" loc "OS3DLOGIN_0005" loc "OS3DLOGIN_0001" nil] -> obstr in ( setPluginInstanceCbNetUserChangeLogin inst mkfun5 @cbLoginChanged obstr; setPluginInstanceCbNetSConnected inst mkfun3 @cbSConnected obstr; PluginRegisterAction inst "Change login" mkfun6 @cbSetLogin obstr; PluginRegisterAction inst "Get current login" mkfun6 @cbGetLogin obstr; PluginRegisterAction inst "Show" mkfun6 @cbShow obstr; setPluginInstanceCbDel inst mkfun2 @deleteOb obstr; ); 0;; fun IniPlug(file)= PlugRegister @newOb nil; setPluginEditor @dynamicedit; 0;;