/* Copyright (C) 2009 Matthew Geyer
*
* This file is part of UO Machine.
*
* UO Machine is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* UO Machine is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with UO Machine. If not, see . */
using System;
namespace ClassicAssist.UO.Objects.Gumps
{
public class GumpElement
{
private Gump _parentGump;
public int ActiveID { get; set; }
public string Args { get; set; }
public bool Background { get; set; }
public int ButtonType { get; set; }
public int Cliloc { get; set; }
public int ElementID { get; set; }
public int Group { get; set; }
public int Height { get; set; }
public int Hue { get; set; }
public int InactiveID { get; set; }
public bool InitialState { get; set; }
public int ItemID { get; set; }
public int PageNumber { get; set; }
public int Param { get; set; }
public Gump ParentGump
{
get => _parentGump ?? ParentPage?.ParentGump;
set => _parentGump = value;
}
public GumpPage ParentPage { get; set; }
public bool ScrollBar { get; set; }
public int Serial { get; set; }
public int Size { get; set; }
public string Text { get; set; }
public int Tooltip { get; set; }
public ElementType Type { get; set; }
public int Width { get; set; }
public int X { get; set; }
public int Y { get; set; }
///
/// Get nearest GumpElement.
///
/// True on success.
public bool GetNearestElement( out GumpElement element )
{
if ( ParentPage != null )
{
return ParentPage.GetNearestElement( this, out element );
}
element = null;
return false;
}
///
/// Get nearest GumpElement, but only if it's ElementType is contained in the include list.
///
/// Array of ElementTypes which specifies valid GumpElements to search.
/// GumpElement (out).
/// True on success.
public bool GetNearestElement( ElementType[] includeTypes, out GumpElement element )
{
if ( ParentPage != null )
{
return ParentPage.GetNearestElement( this, includeTypes, out element );
}
element = null;
return false;
}
public void Click()
{
Gump g = ParentGump;
if ( g != null && g.ID != 461 && Type == ElementType.button )
{
//TODO
//Macros.MacroEx.CloseClientGump( g.Client, g.ID );
//Macros.MacroEx.GumpButtonClick( g.Client, g.ID, g.Serial, this.ElementID );
}
}
internal void AppendTo( Gump.IGumpWriter disp )
{
switch ( Type )
{
case ElementType.textentrylimited:
{
disp.AppendLayout( Gump.StringToBuffer( "textentrylimited" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
disp.AppendLayout( Hue );
disp.AppendLayout( ElementID );
disp.AppendLayout( ParentGump.Intern( Text ) );
disp.AppendLayout( Size );
disp.TextEntries++;
break;
}
case ElementType.textentry:
{
disp.AppendLayout( Gump.StringToBuffer( "textentry" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
disp.AppendLayout( Hue );
disp.AppendLayout( ElementID );
disp.AppendLayout( ParentGump.Intern( Text ) );
disp.TextEntries++;
break;
}
case ElementType.radio:
{
disp.AppendLayout( Gump.StringToBuffer( "radio" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( InactiveID );
disp.AppendLayout( ActiveID );
disp.AppendLayout( InitialState );
disp.AppendLayout( ElementID );
disp.Switches++;
break;
}
case ElementType.croppedtext:
{
disp.AppendLayout( Gump.StringToBuffer( "croppedtext" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
disp.AppendLayout( Hue );
disp.AppendLayout( ParentGump.Intern( Text ) );
break;
}
case ElementType.buttontileart:
{
disp.AppendLayout( Gump.StringToBuffer( "buttontileart" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( InactiveID );
disp.AppendLayout( ActiveID );
disp.AppendLayout( ButtonType );
disp.AppendLayout( Param );
disp.AppendLayout( ElementID );
disp.AppendLayout( ItemID );
disp.AppendLayout( Hue );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
if ( Cliloc != -1 )
{
disp.AppendLayout( Gump.StringToBuffer( " }{ tooltip" ) );
disp.AppendLayout( Cliloc );
}
break;
}
case ElementType.tilepic:
case ElementType.tilepichue:
{
disp.AppendLayout( Gump.StringToBuffer( Hue == 0 ? "tilepic" : "tilepichue" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( ItemID );
if ( Hue != 0 )
{
disp.AppendLayout( Hue );
}
break;
}
case ElementType.itemproperty:
{
disp.AppendLayout( Gump.StringToBuffer( "itemproperty" ) );
disp.AppendLayout( Serial );
break;
}
case ElementType.gumppictiled:
{
disp.AppendLayout( Gump.StringToBuffer( "gumppictiled" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
disp.AppendLayout( ElementID );
break;
}
case ElementType.gumppic:
{
disp.AppendLayout( Gump.StringToBuffer( "gumppic" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( ElementID );
if ( Hue != 0 )
{
disp.AppendLayout( Gump.StringToBuffer( " hue=" ) );
disp.AppendLayoutNS( Hue );
}
break;
}
case ElementType.xmfhtmlgump:
{
disp.AppendLayout( Gump.StringToBuffer( "xmfhtmlgump" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
disp.AppendLayout( Cliloc );
disp.AppendLayout( Background );
disp.AppendLayout( ScrollBar );
break;
}
case ElementType.xmfhtmlgumpcolor:
{
disp.AppendLayout( Gump.StringToBuffer( "xmfhtmlgumpcolor" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
disp.AppendLayout( Cliloc );
disp.AppendLayout( Background );
disp.AppendLayout( ScrollBar );
disp.AppendLayout( Hue );
break;
}
case ElementType.xmfhtmltok:
{
disp.AppendLayout( Gump.StringToBuffer( "xmfhtmltok" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
disp.AppendLayout( Background );
disp.AppendLayout( ScrollBar );
disp.AppendLayout( Hue );
disp.AppendLayout( Cliloc );
disp.AppendLayout( Args );
break;
}
case ElementType.htmlgump:
{
disp.AppendLayout( Gump.StringToBuffer( "htmlgump" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
disp.AppendLayout( ParentGump.Intern( Text ) );
disp.AppendLayout( Background );
disp.AppendLayout( ScrollBar );
break;
}
case ElementType.tooltip:
{
disp.AppendLayout( Gump.StringToBuffer( "tooltip" ) );
disp.AppendLayout( Cliloc );
break;
}
case ElementType.group:
{
disp.AppendLayout( Gump.StringToBuffer( "group" ) );
disp.AppendLayout( Group );
break;
}
case ElementType.resizepic:
{
disp.AppendLayout( Gump.StringToBuffer( "resizepic" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( ElementID );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
break;
}
case ElementType.checkertrans:
{
disp.AppendLayout( Gump.StringToBuffer( "checkertrans" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Width );
disp.AppendLayout( Height );
break;
}
case ElementType.page:
{
disp.AppendLayout( Gump.StringToBuffer( "page" ) );
disp.AppendLayout( PageNumber );
break;
}
case ElementType.button:
{
disp.AppendLayout( Gump.StringToBuffer( "button" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( InactiveID );
disp.AppendLayout( ActiveID );
disp.AppendLayout( ButtonType );
disp.AppendLayout( Param );
disp.AppendLayout( ElementID );
break;
}
case ElementType.text:
{
disp.AppendLayout( Gump.StringToBuffer( "text" ) );
disp.AppendLayout( X );
disp.AppendLayout( Y );
disp.AppendLayout( Hue );
disp.AppendLayout( ParentGump.Intern( Text ) );
break;
}
case ElementType.invalid:
break;
case ElementType.checkbox:
break;
case ElementType.kr_xmfhtmlgump:
break;
case ElementType.mastergump:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}
}