sexta-feira, 6 de novembro de 2009

Sistema com ambientes para o usuario usar como desktop

Pessoal .. outro dia estava me perguntando ... pq nao criar um sistema .. como c fosse um desktop online ... e a resposta foi : PQ EH MTO DIFICIL ! aaaa ... e eu ando meio sem tempo hauehusahaue ... mas blz ... enfim ... surgiu a oportunidade aki na empresa onde eu trabalho para estudar e criar um prototipo para servir de base para outros sistemas ... e eu ñ pude deixar de aproveitar a oportunidade ... e brincar um pouco ! auehuaehuae ...
Ai eu fiz um esquema para o usuario utilizar o sistema como c fosse akeles ambientes q o linux tem ... ( Usuarios windows ñ tao acostumados ... mas quebra um galhão !! )... estou postando o codigo .. fiz em flex , mais p frente eu posto o prototipo q eu fiz ... com Java( Hibernate )+Flex ! vlw !!!

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="vertical"
    creationComplete="init();"
    horizontalAlign="center"
    verticalAlign="top"
    width="100%"
    height="100%"
    paddingLeft="0" paddingRight="0" paddingBottom="0" paddingTop="0"
    xmlns:flexmdi="flexmdi.containers.*"
    backgroundImage="@Embed('./imagens/abstract2.jpg')"
    >
    <mx:Script>
        <![CDATA[
            import view.configuracao.cadastros.cadastrodaclassedeequipamento.CadastroClasseEquipamento;
            import model.Usuario;
            import mx.events.CloseEvent;
            import mx.managers.PopUpManager;
            import view.login.Login;
            import view.configuracao.administrativo.cadastrodeusuario.CadastroUsuario;
            import view.configuracao.administrativo.cadastrodetipodeusuario.CadastroTipoUsuario;
            import flexmdi.managers.MDIManager;
            import flash.utils.getTimer;
            import mx.controls.Label;
            import view.configuracao.administrativo.cadastrodeusuario.CadastroUsuario;
            import view.configuracao.administrativo.cadastrodetipodeusuario.CadastroTipoUsuario;
            import flexmdi.effects.effectsLib.MDIVistaEffects;
            import flexmdi.containers.MDIWindow;
            import mx.events.MenuEvent;
            import flexmdi.containers.MDICanvas;
            import mx.controls.TextInput;
            import mx.controls.Text;
            import mx.controls.Alert;
            import mx.controls.Button;
            import mx.collections.ArrayCollection;
            import mx.controls.List;
            import mx.containers.Canvas;
   
            private const MIN_MASK:String = "00";
            private const SEC_MASK:String = "00";
            private const HR_MASK:String = "00";
       
            private var ambienteAtual:MDICanvas;
            private var qtdeAmbientes:int;
            private var prefixoIdCanvas:String = "canvas";
            private var prefixoIdBotao:String = "BTN_AMBIENTE";
            public var iniciar:Class = Imagens.iniciar;
           
            private var baseTimer:int;

            private var timer:Timer = null;

            private var LBL_HORA:Label = new Label();
       
            public var usuarioLogado:Usuario = null;
       
            private function init():void{
                var login:Login = PopUpManager.createPopUp(this , Login , true) as Login;
                disableAplicacao();
                login.addEventListener(CloseEvent.CLOSE,loginCloseEvent,false,0,false);
                PopUpManager.centerPopUp(login);
            }
           
            public function loginCloseEvent(evt:CloseEvent):void{
                var login:Login = evt.currentTarget as Login;
                this.usuarioLogado = login.usuarioLogado;
                if (this.usuarioLogado != null){
                    initAfterLoginOk();
                    enableAplicacao();
                }
            }
           
            private function disableAplicacao():void{
                this.ACB_TASKBAR.visible = false;
                this.canvasAmbientes.visible = false;
            }
           
            private function enableAplicacao():void{
                this.ACB_TASKBAR.visible = true;
                this.canvasAmbientes.visible = true;
            }
           
            private function initAfterLoginOk():void{
                qtdeAmbientes = 1;
                criaAmbientes();
                ativaCanvas(1);
                timer = new Timer(10);
                timer.addEventListener(TimerEvent.TIMER, updateTimer);
                timer.start();
            }
           
            public function updateTimer(event:TimerEvent):void {
                var d:Date = new Date();
                var min:String = (MIN_MASK + d.minutes).substr(-MIN_MASK.length);
                var sec:String = (SEC_MASK + d.seconds).substr(-SEC_MASK.length);
                var hr:String = (HR_MASK + d.hours).substr(-HR_MASK.length);
                LBL_HORA.text = String(hr + ":" +min + ":" + sec );
            }
           
            private function criaAmbientes():void{
                for(var indice:int = 1 ; indice <= qtdeAmbientes ; indice++ ){
                    var canvasNovo:MDICanvas = new MDICanvas();
                    var botaoAmbiente:Button = new Button();
                    var stringIndice:String = String(indice);
                    if (qtdeAmbientes > 1){
                        botaoAmbiente.id=prefixoIdBotao+stringIndice;
                        botaoAmbiente.label = stringIndice;
                        botaoAmbiente.addEventListener(MouseEvent.CLICK,onBtnAmbienteClick,false,0,false);
                        ACB_TASKBAR.addChild(botaoAmbiente);
                    }
                    canvasNovo.setVisible(false);
                    canvasNovo.id = prefixoIdCanvas+stringIndice;
                    canvasNovo.percentWidth = 100;
                    canvasNovo.percentHeight = 100;
                    canvasNovo.effectsLib = MDIVistaEffects;
                    canvasAmbientes.addChild(canvasNovo);
                }
                LBL_HORA.setStyle("color","#FFFFFF");
                LBL_HORA.text = "00:00:00";
                ACB_TASKBAR.addChild(LBL_HORA);
            }
                      
            private function addTelaAmbienteSelecionado(objeto:DisplayObject):void{
                var objetoProcurado:MDIWindow = MDIWindow(objeto);
                var objetoLocalizado:MDIWindow = null;
                for (var obj:Object in ambienteAtual.getChildren()){
                    var objMDI:MDIWindow = MDIWindow(ambienteAtual.getChildAt(int(obj)));
                    if (objetoProcurado.title == objMDI.title){
                        objetoLocalizado = objMDI;
                    }
                }
                if (objetoLocalizado == null){
                    ambienteAtual.windowManager.add(MDIWindow(objeto));
                }else{
                    if (objetoLocalizado.minimized){
                        objetoLocalizado.restore();
                        objetoLocalizado.showControls = true;
                    }else{
                        objetoLocalizado.getFocus();
                    }
                }
            }
           
            private function getCanvasById(id:String):MDICanvas{
                for each (var childAtual:Object in canvasAmbientes.getChildren()){
                    if (MDICanvas(childAtual).id == id){
                        return MDICanvas(childAtual);
                    }
                }
                return null;
            }
           
            private function ativaCanvas(indice:int):void{
                var canvasSelecionado:MDICanvas = getCanvasById(prefixoIdCanvas+String(indice));
                if (canvasSelecionado != null){
                    for each (var canvasIndice:MDICanvas in canvasAmbientes.getChildren()){
                        if (canvasIndice.id != canvasSelecionado.id){
                            canvasIndice.setVisible(false);
                        }else{
                            ambienteAtual = canvasSelecionado;
                            canvasIndice.setVisible(true);
                        }
                    }
                }
            }
           
            private function onBtnAmbienteClick(evt:Event):void{
                var botaoClicado:Button = evt.currentTarget as Button;
                var ambienteSelecionado:int = int(botaoClicado.id.replace(prefixoIdBotao,""));
                ativaCanvas(ambienteSelecionado);
            }
           
            private function menuBarItemClick(event:MenuEvent):void
            {
                if (event.item.@data == "confAdmCadTipoUsuario"){
                    addTelaAmbienteSelecionado(new CadastroTipoUsuario());
                }else if (event.item.@data == "confAdmCadUsuario"){
                    addTelaAmbienteSelecionado(new CadastroUsuario());
                }else if (event.item.@data == "confCadCadClasseEquip"){
                    addTelaAmbienteSelecionado(new CadastroClasseEquipamento());
                }
            }
           
        ]]>
    </mx:Script>
    <mx:XMLList id="menuList">
        <menuitem icon="iniciar" label="">
            <menuitem label="Configuração">
                <menuitem label="Administrativo">
                    <menuitem label="Cadastro de Usuários"  data="confAdmCadUsuario"/>
                </menuitem>
            </menuitem>
        </menuitem>
    </mx:XMLList>
    <mx:ApplicationControlBar id="ACB_TASKBAR" height="0%" width="100%">
        <mx:MenuBar id="MB_MENU"
            labelField="@label"
            iconField="@icon"
            cornerRadius="20"
            dataProvider="{menuList}"
            itemClick="menuBarItemClick(event);"
            >
        </mx:MenuBar>
        <mx:Spacer width="100%" />
        <mx:Image click="ambienteAtual.windowManager.tile(true)" source="imagens/titleiconpqn.png" scaleContent="true" autoLoad="true"/>
        <mx:Image click="ambienteAtual.windowManager.cascade()" width="27" height="26.25" source="imagens/cascatapqn.png" scaleContent="true" autoLoad="true"/>
    </mx:ApplicationControlBar>
    <flexmdi:MDICanvas id="canvasAmbientes" height="100%" width="100%">
    </flexmdi:MDICanvas>
</mx:Application>

Nenhum comentário:

Postar um comentário