Ops!

fiz o upload dos arquivos em:
http://groups.google.com.br/group/flexdev/web/ButtonBarMultiline.zip

[]'s
Beck Novaes

On 31 jan, 14:15, "Beck Novaes" <[EMAIL PROTECTED]> wrote:
> João,
>
> O problema da quebra de linha é devido ao método layoutContent do
> Button. Ele define um tamanho para o label do botão menor do que seria
> necessário para mostrar duas linhas. Aí vai um exemplo que pode
> resolver o seu problema.
>
> App.mxml
> ========
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
>         xmlns:local="*">
>
>         <local:ButtonBarMultiline dataProvider="vs" height="40"
> paddingTop="0"/>
>
>         <mx:ViewStack id="vs" borderStyle="solid">
>
>                 <mx:Canvas label="Tab 1 &#13; test">
>                         <mx:Label text="Tab1 Content"/>
>                 </mx:Canvas>
>
>                 <mx:Canvas label="Tab 2 &#13; test">
>                         <mx:Label text="Tab2 Content"/>
>                 </mx:Canvas>
>
>         </mx:ViewStack>
>
> </mx:Application>
>
> ButtonBarButtonMultiline.as
> ================
>
> package
> {
>
> import mx.controls.Button;
> import mx.core.UITextFormat;
> import mx.core.mx_internal;
>
> use namespace mx_internal;
>
> public class ButtonBarButtonMultiline extends Button
> {
>
>         
> //--------------------------------------------------------------------------
>         //
>         //  Constructor
>         //
>         
> //--------------------------------------------------------------------------
>
>     /**
>          *  Constructor.
>      */
>     public function ButtonBarButtonMultiline()
>     {
>         super();
>     }
>
>         
> //--------------------------------------------------------------------------
>         //
>         //  Variables
>         //
>         
> //--------------------------------------------------------------------------
>
>     /**
>      *  @private
>      */
>     private var inLayoutContents:Boolean = false;
>
>         
> //--------------------------------------------------------------------------
>         //
>         //  Overridden methods: UIComponent
>         //
>         
> //--------------------------------------------------------------------------
>
>     /**
>      *  @private
>      */
>     override public function
> determineTextFormatFromStyles():UITextFormat
>     {
>         if (inLayoutContents && selected)
>             return textField.getUITextFormat();
>         else
>             return super.determineTextFormatFromStyles();
>     }
>
>         
> //--------------------------------------------------------------------------
>         //
>         //  Overridden methods: Button
>         //
>         
> //--------------------------------------------------------------------------
>
>     /**
>      *  @private
>      */
>     override mx_internal function layoutContents(unscaledWidth:Number,
>                                                                               
>                    unscaledHeight:Number,
>                                                                               
>                    offset:Boolean):void
>     {
>         // Fix for bug 122684:
>         // layoutContents() internally calls measureText(), which
> calls
>         // determineTextFormatFromStyles() to get the UITextFormat
> object.
>         // For a selected button, the textField's text styles can
> differ from
>         // the button's text styles. So we need to return the right
>         // UITextFormat in determineTextFormatFromStyles()
>         inLayoutContents = true;
>         super.layoutContents(unscaledWidth, unscaledHeight, offset);
>                 inLayoutContents = false;
>
>                 /***********************************
>                 * ESTES DOIS MAGIC NUMBERS SÃO A SOLUÇÃO PARA O SEU PROBLEMA. 
> Fiquei
> com preguiça
>                 * de fazer o cálculo correto para definir estes
> valores
>                 *************************************/
>                 textField.y = 5;
>                 textField.height *= 2;
>
>     }
>
> }
> }
>
> ButtonBarMultiline.as
> ================
>
> package
> {
>
> import mx.controls.ButtonBar;
> import mx.core.ClassFactory;
> import mx.core.mx_internal;
>
> use namespace mx_internal;
>
> public class ButtonBarMultiline extends ButtonBar
> {
>         public function ButtonBarMultiline()
>         {
>                 super();
>                 navItemFactory = new ClassFactory(ButtonBarButtonMultiline);
>         }
>
> }
> }
>
> []'s
> Beck Novaes
>
> On 31 jan, 02:41, João Saleiro <[EMAIL PROTECTED]> wrote:
>
> > Comecei a embirrar com a ButtonBar, e entrei em desespero. O que queria
> > era começar por adicionar a funcionalidade de usar htmlText nos botões
> > ao invés de text normal, e permitir pelo menos 2 linhas (através de \n,
> > por exemplo). Para tal, teria que extender a classe ButtonBar para que
> > usasse uma versão extendida da classe Button (HTMLButton, por exemplo).
> > Fiz alguns progressos com o meu HTMLButton, consegui colocar-lhe
> > HTMLText, mas através de aldrabices, e com algumas falhas. Por exemplo,
> > no rollover o botão perdia o valor do HTMLButton. A minha aldrabice foi
> > fazer uma função que alterava directamente o htmltext do textfield. Mas
> > não chegou...
>
> > O ideal era conseguir sobrepor a função
>
> > override protected function updateDisplayList(unscaledWidth:Number,
> > unscaledHeight:Number):void
>
> > da classe Button, de forma a que onde está textField.text passasse a
> > textField.htmlText
>
> > e outra (talvez  mx_internal function
> > layoutContents(unscaledWidth:Number, unscaledHeight:Number,
> > offset:Boolean):void ) para poder mudar o height.
>
> > Mas não consegui...
> > Além de que o avanço da hora já não ajuda!
>
> > Por isso, no mais profundo dos desesperos, pergunto como posso extender
> > a classe ButtonBar e a classe Button para poder suportar HtmlText em
> > duas linhas nos botões da ButtonBar?
>
> > Obrigado,
>
> > João Saleiro
>
> > João Saleiro wrote:
> > > Já descobri o que era... estupidez minha :)
> > > É ridículo mais uma vez, mas tirando o opaqueBackground="false"  ficou
> > > bom. Vendo na documentação, o valor deveria ser null.
> > > Já está tudo ok.
>
> > > Vou agora descobrir como aplicar um estilo de texto diferente a cada
> > > botão. Mas já tenho uma ideia: através do Button(bb.getChildAt(0)) ,
> > > onde bb é o id da ButtonBar.
>
> > > O Glow é deverá ser mais complicado... Veremos :) Sugestões aceitam-se!
>
> > > João Saleiro
>
> > > João Saleiro wrote:
>
> > >> Yeap, estou. Se fizer um novo botão com a skin, funciona
> > >> perfeitamente. Se o usar dentro de um mx:ButtonBar fica com esse fundo
> > >> preto.
>
> > >> Quanto ao Glow, a ideia é fazê-lo animado. Não é só passar em cima e
> > >> mostrar outra skin, é mesmo fazer um efeito animado de Glow in. :)
>
> > >> Mas o fundo é que me está a deixar louco... :| :| :|
>
> > >> João Saleiro
>
> > >> Beck Novaes wrote:
>
> > >>> Olá João,
>
> > >>> Você está usando skins desta forma?
>
> > >>> <mx:Style>
>
> > >>>    .myButtonSkin
> > >>>    {
> > >>>            up-skin:Embed("upSkin.png");
> > >>>            over-skin:Embed("overSkin.png");
> > >>>            down-skin:Embed("downSkin.png");
> > >>>    }
>
> > >>> </mx:Style>
>
> > >>> <mx:ButtonBar dataProvider="{vs}" buttonStyleName="myButtonSkin"/>
>
> > >>> Se sim, não entendo porque não consegue retirar a borda do botão. Até
> > >>> mesmo o Glow deveria ser simples, bastando para isto criar um skin
> > >>> (over-skin) já com este efeito.
>
> > >>> []'s
> > >>> Beck Novaes


--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a