segunda-feira, 27 de abril de 2009

Layout Managers: Layout Hints

As Layout Hints são opções passadas pelos widgets para os gerenciadores de layout que os contêm para informar algo a respeito de sua posição e tamanho. Assim como as opções de decoração (aqui), essas são apenas dicas; entretanto, os gerenciadores de layout farão o possível para atender aos pedidos.

A falta de algumas dicas quer dizer que o comportamento padrão deve ser utilizado, portanto muitas vezes não é preciso informá-las: as dicas do FOX Toolkit foram projetadas para que as situações mais comuns requeiram menos dicas. Por exemplo, normalmente os gerenciadores organizam seus filhos da esquerda para a direita, de cima para baixo, ou seja, não é preciso informar essas opções se esse for o caso.

Essas dicas estão definidas em FXWindow.h:
enum {
LAYOUT_NORMAL = 0,
LAYOUT_SIDE_TOP = 0,
LAYOUT_SIDE_BOTTOM = 0x00000001,
LAYOUT_SIDE_LEFT = 0x00000002,
LAYOUT_SIDE_RIGHT = LAYOUT_SIDE_LEFT|LAYOUT_SIDE_BOTTOM,
LAYOUT_FILL_COLUMN = 0x00000001,
LAYOUT_FILL_ROW = 0x00000002,
LAYOUT_LEFT = 0,
LAYOUT_RIGHT = 0x00000004,
LAYOUT_CENTER_X = 0x00000008,
LAYOUT_FIX_X = LAYOUT_RIGHT|LAYOUT_CENTER_X,
LAYOUT_TOP = 0,
LAYOUT_BOTTOM = 0x00000010,
LAYOUT_CENTER_Y = 0x00000020,
LAYOUT_FIX_Y = LAYOUT_BOTTOM|LAYOUT_CENTER_Y,
LAYOUT_DOCK_SAME = 0,
LAYOUT_DOCK_NEXT = 0x00000040,
LAYOUT_RESERVED_1 = 0x00000080,
LAYOUT_FIX_WIDTH = 0x00000100,
LAYOUT_FIX_HEIGHT = 0x00000200,
LAYOUT_MIN_WIDTH = 0,
LAYOUT_MIN_HEIGHT = 0,
LAYOUT_FILL_X = 0x00000400,
LAYOUT_FILL_Y = 0x00000800,
LAYOUT_FILL = LAYOUT_FILL_X|LAYOUT_FILL_Y,
LAYOUT_EXPLICIT = LAYOUT_FIX_X|LAYOUT_FIX_Y |
LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT
};

Percebam que as opções default têm valor 0.

A seguir, a explicação de cada opção. A menos quando informado o contrário, essas opções valem para todos os gerenciadores de layout.


LAYOUT_NORMAL

Modo de layout default.


LAYOUT_SIDE_TOP (default)
LAYOUT_SIDE_BOTTOM
LAYOUT_SIDE_LEFT
LAYOUT_SIDE_RIGHT

Utilizados somente quando o gerenciador de layout for do tipo FXPacker, FXGroupBox ou FXTopWindow. Posiciona o widget junto à borda superior, inferior, esquerda ou direita, respectivamente.

LAYOUT_SIDE_TOP e LAYOUT_SIDE_BOTTOM reduzem a altura do espaço disponível, enquanto LAYOUT_SIDE_LEFT e LAYOUT_SIDE_RIGHT reduzem a largura.

Essas opções não têm efeito nenhum se utilizadas em outros gerenciadores de layout.


LAYOUT_FILL_COLUMN
LAYOUT_FILL_ROW

Utilizados somente dentro de um FXMatrix.

Se todos os widgets de uma mesma coluna especificarem LAYOUT_FILL_COLUMN, então a coluna inteira é redimensionada se a matriz for redimensionada horizontalmente.

Da mesma forma, se todos o widgets de uma mesma linha especificarem LAYOUT_FILL_ROW, então a linha inteira é redimensionada se a matriz for redimensionada verticalmente.


LAYOUT_LEFT (default)
LAYOUT_RIGHT

Posiciona o widget no lado esquerdo ou direito do seu contêiner, respectivamente. Quando utilizado em um FXPacker, FXGroupBox ou FXTopWindow, só fazem sentido se em conjunto com LAYOUT_SIDE_TOP ou LAYOUT_SIDE_BOTTOM.


LAYOUT_TOP (default)
LAYOUT_BOTTOM

Posiciona o widget na parte de cima ou de baixo do seu contêiner, respectivamente. Quanto utilizado em um FXPacker, FXGroupBox ou FXTopWindow, só fazem sentido se em conjunto com LAYOUT_SIDE_RIGHT ou LAYOUT_SIDE_BOTTOM.


LAYOUT_FIX_X
LAYOUT_FIX_Y

Podem ser usados nenhum, um deles ou ambos. Instruem o gerenciador a posicionar o widget exatamente na posição informada pelo construtor do objeto. (Veja este tópico)


LAYOUT_FIX_WIDTH
LAYOUT_FIX_HEIGHT

Instruem o gerenciador a exibir o widget no tamanho especificado no construtor. (Veja este tópico)


LAYOUT_MIN_WIDTH (default)
LAYOUT_MIN_HEIGHT (default)

Estes não precisam ser especificados nunca (a não ser para enfatizar o fato durante a leitura do código), pois este é o comportamento padrão. Faz com que o gerenciador exiba o widget com seu tamanho mínimo.


LAYOUT_CENTER_X
LAYOUT_CENTER_Y

Centraliza o widget no gerenciador na direção especificada, adicionando espaço extra ao redor dele. O tamanho do widget será o padrão (o tamanho mínimo), a menos que seja informado explicitamente.


LAYOUT_FILL_X
LAYOUT_FILL_Y

Faz com que o widget ocupe todo o espaço disponível no contêiner na direção especificada. Se um ou mais widgets forem posicionados no mesmo gerenciador com essas opções, o espaço é dividido proporcionalmente aos seus tamanhos mínimos.

Obs.: Essa regrinha acima não funciona para dois gerenciadores de layout lado-a-lado.


LAYOUT_DOCK_SAME
LAYOUT_DOCK_NEXT
LAYOUT_RESERVED_1

Confesso que não sei para que servem, e a documentação não fala nada a respeito.


LAYOUT_FILL

Apenas uma combinação de LAYOUT_FILL_X e LAYOUT_FILL_Y para conveniência.


LAYOUT_EXPLICIT

Outra opção de conveniência: combinação de LAYOUT_FIX_X, LAYOUT_FIX_Y, LAYOUT_FIX_WIDTH e LAYOUT_FIX_HEIGHT, ou seja, te dá controle total sobre a posição e o tamanho do widget.

Nenhum comentário: