2010-08-24 4 views
0

Mon application nécessitera quelques fenêtres, mais je ne peux pas utiliser le gestionnaire de fenêtres contextuelles pour gérer des composants personnalisés. Je pense donc à implémenter un nouveau système de fenêtres.flex 4: idées de développement de systèmes de fenêtres

Mais je ne sais toujours pas comment le fusionner avec mes composants personnalisés. Des idées?

Mon code:

Ma peau de connexion:

<s:Skin(...)> 
    <s:Group> 
     (...login components...) 
    </s:Group> 
</s:Skin> 


package com.totty.app.components.login { 
import com.totty.app.TottysBrain; 
import com.totty.app.components.window.Window; 
import com.totty.app.events.LoginSuccessEvent; 
import com.totty.tottysBrain.components.BrainyDynComponent; 
import com.totty.tottysBrain.components.BrainyWindow; 

import flash.events.Event; 
import flash.events.MouseEvent; 

import mx.controls.Alert; 
import mx.managers.PopUpManager; 

import spark.components.Button; 
import spark.components.CheckBox; 
import spark.components.Group; 
import spark.components.Label; 
import spark.components.TextInput; 
import spark.components.supportClasses.SkinnableComponent; 

[Event(name="loginSuccess", type="com.totty.app.events.LoginSuccessEvent")] 
public class Login extends BrainyDynComponent { 
    [SkinPart(required="true")] 
    public var email:TextInput; 

    [SkinPart(required="true")] 
    public var password:TextInput = new TextInput(); 

    [SkinPart(required="false")] 
    public var rememberMe:CheckBox; 

    [SkinPart(required="false")] 
    public var notification:Label; 

    [SkinPart(required="true")] 
    public var submit:Button = new Button(); 

    private var _currentState:uint = 0; 
    private var _states:Array = ['default', 'logging', 'loginFailure', 'loginSuccess']; 

    private var _default:Boolean = false; 
    private var _logging:Boolean = false; 
    private var _loggingSuccess:Boolean = false; 
    private var _loggingFailure:Boolean = false; 

    public function Login() { 
     super(); 

     defaultCommand = 'users.login'; 
     defaultSkin = LoginSkin; 

     _setCurrentState(0); 

     onPartAdded('submit', function():void { 
       submit.addEventListener(MouseEvent.CLICK, _submitLoginButton_click); 
     }); 

     onPartRemoved('submit', function():void { 
       submit.removeEventListener(MouseEvent.CLICK, _submitLoginButton_click); 
     }); 

     onPartAdded('window', function():void{ 
      //window.addEventListener('close', _window_close); 
      //window.title = 'Login'; 
     }); 
    } 

    private function _window_close(evt:Event):void{ 
     dispatchEvent(evt); 

     var parentAsGroup:Group = parent as Group 
     parentAsGroup.removeElement(this); 
    } 

    protected function _submitLogin():void { 
     _setCurrentState(1); 
     submitData({email:email.text, password:password.text, rememberMe:rememberMe.selected}); 
    } 

    override protected function _onSuccess(result:*):void { 
     Alert.show(result); 
     _setCurrentState(3); 
     if(result) { 
      dispatchEvent(new LoginSuccessEvent(email.text, rememberMe.selected)); 
      _loggingSuccess = true; 
     }else{ 
      _setCurrentState(4); 
      _loggingSuccess = false; 
     } 
    } 

    override protected function _onFailure(result:*):void { 
     Alert.show(result); 
     _setCurrentState(4); 
     _loggingSuccess = false; 
    } 

    private function _submitLoginButton_click(evt:MouseEvent):void { 
     _submitLogin(); 
    } 

    private function _setCurrentState(n:uint):void{ 
     if(_currentState == n) return; 

     _currentState = n; 
     invalidateProperties(); 
    } 

    override protected function commitProperties():void{ 
     super.commitProperties(); 




     switch(_currentState){ 
      case 0: 
       // default 
       //window.footerText = ''; 
      break; 
      case 1: 
       // logging 
       //window.footerText = 'logging'; 
      break; 
      case 2: 
       // loginFailure 
       //window.footerText = 'loginFailure'; 
      break; 
      case 3: 
       // loginSuccess 
       //window.footerText = 'loginSuccess'; 
       //parentBrain.removeElement(this); 
       //var parentAsGroup:Group = parent as Group 
       //PopUpManager.removePopUp(this); 
       //parentAsGroup.removeElement(this); 
      break; 
     } 
    } 
} 

} `

Maintenant, j'ai l'application principale pour ajouter ce composant dans une fenêtre. Je préférerais être capable de voir la fenêtre pendant la conception de l'interface. Cela signifie que le composant de fenêtre doit être ajouté au composant. Ne pas utiliser le mais quelque chose comme contenir tout le contenu du composant.

+0

Ceci est une question assez subjective. Peut-être devriez-vous quantifier quelles fonctionnalités votre nouveau système de fenêtres doit avoir et pourquoi vous rencontrez des difficultés pour le fusionner avec des composants personnalisés. – JeffryHouser

+0

car je ne peux pas utiliser mes composants dans le skin as3 + mxml avec titleWindow. J'ai eu des erreurs, j'ai une autre question, et je ne peux pas le résoudre avec les réponses: s. (http://stackoverflow.com/questions/3535707/flex-4-title-window-custom-component-skin-problem) Les fonctionnalités peuvent être très basiques, proches, glisser-déposer et redimensionner. Ensuite, la possibilité d'ajouter un minimum et une barre contenant les fenêtres minimisées comme dans WIN XP ou Vista. pas ce graphisme bien sûr, plus léger. –

+0

Cher Totty, dans votre question précédente, vous avez obtenu réponse, à mon humble avis, si vous voulez vraiment plus d'aide, il suffit de poster quelque part/ici des exemples de classes, afin que la communauté puisse vous aider en fonction de votre code. :) merci! – Eugene

Répondre