|
Software Development Kit to the Delphi-Win32 and Free Pascal compilers |
| Home > Wiki > br/Classes de comando |
br/Classes de comando
[edit] Classes de comando[edit] Visão geralPara usar comandos personalizados nos presenters, permitindo que o usuário interaja com seus objetos, você deve criar uma classe de comando. Um comando (command) sempre está ligado a um model, e este a um subject. Um subject pode ser um objeto ou atributo. No PressObjects existem diversas classes de comando. Conforme a necessidade, a sua deve herdar de uma delas. [edit] TPressMVPObjectCommandSupondo que necessite adicionar um comando a um formulário de edição, como um botão que copie o valor de um atributo pra outro. Deve criar sua classe a partir da TPressMVPObjectCommand, visto que o form está associado ao objeto que ele está apresentando. Vejamos um caso de exemplo. Supondo que queira copiar o valor do atributo Serial para o atributo PartNumber da classe TProduct, para isso, vamos criar uma command class chamada TFillPartNumber. TFillPartNumber = class(TPressMVPObjectClass) protected procedure InternalExecute; override; end; E sua implementação: TFillPartNumber.InternalExecute; var VProduct: TProduct; begin VProduct := Model.Subject as TProduct; VProduct.PartNumber := VProduct.Serial; end; Perceba que usamos o Model do formulário, que referencia o objeto que está sendo exibido. Assim, podemos acessar os atributos do objeto atual, alterar seus valores ou mesmo disparar algum de seus métodos. O exemplo abaixo faria a mesma coisa, porém, usando um método da classe TProduct. TFillParNumber.InternalExecute; var VProduct: TProduct; begin VProduct := Model.Subject as TProduct; VProduct.FillPartNumber; end; Finalmente, associamos o novo command a um botão do formulário: TProductEditPresenter.InitPresenter; begin ... BindCommand(TFillPartNumber, 'FillPartNumberButton'); end; [edit] TPressMVPItemsCommandSe precisar de um comando que manipule um item de uma grade (grid), deve herdar sua classe da TPresMVPItemsCommand, pois o grid não está associado a um objeto, mas a um atributo, um "items", que é uma lista "dentro" de um objeto. Como os itens de um pedido. Vejamos um exemplo de classe usada para configurar um dos endereços do contato, como endereço para correspondência: TSetMailAddress = class(TPressMVPItemsCommand) protected procedure InternalExecute; override; end; E sua implementação: TSetMailAddress.InternalExecute; var VAddress: TAddress; VAddresses: TAddressParts; begin VAddresses := Model.Subject as TAddressParts; VAddress := Model.Selection[0] as TContactAddress; VAddresses.SetMailAddress(VAddress); end; Vamos analisar melhor o código que acabamos de ver. Nesta linha, fazemos referência ao atributo Address, que representa a lista de endereços da classe TContact. VAddresses := Model.Subject as TAddressParts; Neste exemplo, a classe TAddressParts possui um método que configura um item como endereço de correspondência. Então, usamos o primeiro endereço selecionado no grid (Model.Selection[0]) e passamos como parâmetro para o método. VAddress := Model.Selection[0] as TContactAddress; VAddresses.SetMailAddress(VAddress); Agora podemos adicionar o comando ao presenter.
TContactEditPresenter.InitPresenter
var
VAddressesPresenter: TPressMVPItemsPresenter;
begin
...
VAddressesPresenter := CreateSubPresenter('Addresses', 'AddressesGrid',
'StreetName(180, "Street name");Number(80, "Number")');
VAddressesPresenter.Model.AddCommand(TSetMailAddress);
end;
Desta forma, vamos adicionar o comando ao menu de contexto do grid que exibe os endereços do TContact. Caso você queira que o comando também seja disparado por um botão no formulário, basta usar o método BindCommand do presenter.
TContactEditPresenter.InitPresenter
var
VAddressesPresenter: TPressMVPItemsPresenter;
begin
...
VAddressesPresenter := CreateSubPresenter('Addresses', 'AddressesGrid',
'StreetName(180, "Street name");Number(80, "Number")');
VAddressesPresenter.BindCommand(TSetMailAddress, 'MailButton');
end;
[edit] Personalizando seu comando[edit] UtilidadeAlém de adicionar mais funcionalidades, um comando pode ser detalhadamente personalizado através de seus métodos. Você pode alterar o título do item no menu de contexto, definir uma combinação de teclas de atalho ou até mesmo controlar o comportamento do comando, o ligando ou desligando (enabled true/false), conforme o estado de algum atributo do objeto atual. [edit] MétodosPara personalizar o comportamento do seu comando, você deve reimplementar os métodos listados a seguir. [edit] InternalExecuteNeste método, você deve inserir seu código. E Para melhor organização é bom lembrar que os presenters não devem implementar regras de negócio. Então, ao invés de manipular valores de atributos aqui, procure criar métodos em suas classes de negócio para este trabalho e aqui apenas faça a chamada. [edit] InternalIsEnabledToDo: descrever o funcionamento deste método. |
Personal tools |