/* $AUTHOR: Fernando Nunes e Manuel Lemos (UpperDesign@zeus.ci.ua.pt) $VER: VerticalAlign 1.00 (2.10.94) Description: ARexx macro for FinalWriter to vertically align all selected graphics */ options results GraphicTool SetMeasure /* obter uma lista dos objectos seleccionados */ selecionados = 0 FirstObject SELECTED do until result = 0 selecionados = selecionados + 1 objectid.selecionados = result NextObject objectid.selecionados SELECTED end if selecionados > 1 then do call addlib("rexxreqtools.library", 0, -30, 0) NL = '0a'x ALINHAR_ACIMA = 1 ALINHAR_AO_CENTRO = 2 ALINHAR_ABAIXO = 3 AJUDA = 4 CANCELAR = 0 do until alinhar ~= AJUDA alinhar = rtezrequest( "Vertical alignment of graphic objects",, "_Top|_Center|_Bottom|_Help|Cancel",, "" ) if alinhar = AJUDA then call rtezrequest( "Vertical alignment of graphic objects" || NL || NL||, "Top - aligns the selected objects by the" || NL ||, "top coordinate of the topmost object." || NL || NL, "Center - centers the selected objects" || NL ||, "in the middle of the topmost and" || NL ||, "bottommost objects." || NL || NL, "Bottom - aligns the selected objects by" || NL ||, "bottom coordinate of the bottommost object.",, "I see",, "Help") end if alinhar = CANCELAR then return OBJECTO_LINHA = 2 /* determinar a coordenada dos objectos mais acima e mais abaixo */ do objecto = 1 to selecionados GetObjectCoords objectid.objecto coords = RESULT PARSE VAR coords pagina esquerda cima direita baixo GetObjectType objectid.objecto tipo = result /* linhas */ if tipo = OBJECTO_LINHA then do if cima > baixo then do troca = cima cima = baixo baixo = troca end end else baixo = cima + baixo if objecto = 1 | cima < mais_acima then mais_acima = cima if objecto = 1 | baixo > mais_abaixo then mais_abaixo = baixo end if alinhar = ALINHAR_ACIMA then /* mover os objectos para cima */ do objecto = 1 to selecionados GetObjectCoords objectid.objecto coords = RESULT PARSE VAR coords pagina esquerda cima direita baixo GetObjectType objectid.objecto tipo = result /* linhas */ if tipo = OBJECTO_LINHA then do if cima < baixo then do baixo = mais_acima + baixo - cima cima = mais_acima end else do cima = mais_acima + cima - baixo baixo = mais_acima end end else cima = mais_acima SetObjectCoords objectid.objecto pagina esquerda cima direita baixo end if alinhar = ALINHAR_AO_CENTRO then do /* centrar os objectos */ centro = ( mais_abaixo + mais_acima ) / 2 do objecto = 1 to selecionados GetObjectCoords objectid.objecto coords = RESULT PARSE VAR coords pagina esquerda cima direita baixo GetObjectType objectid.objecto tipo = result /* linhas */ if tipo = OBJECTO_LINHA then do meia_altura = ( baixo - cima ) / 2 baixo = centro + meia_altura end else meia_altura = baixo / 2 cima = centro - meia_altura SetObjectCoords objectid.objecto pagina esquerda cima direita baixo end end if alinhar = ALINHAR_ABAIXO then /* mover os objectos para a baixo */ do objecto = 1 to selecionados GetObjectCoords objectid.objecto coords = RESULT PARSE VAR coords pagina esquerda cima direita baixo GetObjectType objectid.objecto tipo = result /* linhas */ if tipo = OBJECTO_LINHA then do if cima < baixo then do cima = mais_abaixo - baixo + cima baixo = mais_abaixo end else do baixo = mais_abaixo - cima + baixo cima = mais_abaixo end end else cima = mais_abaixo - baixo SetObjectCoords objectid.objecto pagina esquerda cima direita baixo end /* voltar a selecionar todos os objectos selecionados antes */ do objecto = 1 to selecionados SelectObject objectid.objecto MULTIPLE end redraw end