//+------------------------------------------------------------------+
//|                                          List Object Details.mq4 |
//+------------------------------------------------------------------+
#property show_inputs

#include <hanover --- function header (np).mqh>

extern string OutputFilename        = "Object List---[ccy],[tf].csv";
extern string ObjectTypesToList     = "VLine,HLine,TLine,TBAngle,LRChan,Chan,SDChan,GLine,GFan,GGrid,Fib,FibTime,FibFan,FibArc,FibExp,FibChan,Rectangle,Triangle,Ellipse,Pfork,Cycles,Text,Arrow,Label";
extern string ObjectNameMustContain = "";
extern string ObjectDescMustContain = "";
extern string FieldSeparator        = ",";
extern bool   OutputHeaderLine      = true;
extern string ObjectNumberFormat    = "T5";
extern string ObjectNameFormat      = "T30";
extern string ObjectTypeFormat      = "T30";
extern string ObjectDescFormat      = "'\x22'T64'\x22'";
extern string ObjectPriceFormat     = "TBR-3.5";
extern string ObjectTimeFormat      = "BY.M.D H:I";
extern string ObjectWidthFormat     = "T2";
extern string ObjectPosFormat       = "TB6";

string OT[24];

//+------------------------------------------------------------------+
int start()  {
//+------------------------------------------------------------------+
  if (FieldSeparator == "^")   FieldSeparator = "\x09";
  string ObjectTypes = "VLine,HLine,TLine,TBAngle,LRChan,Chan,SDChan,GLine,GFan,GGrid,Fib,FibTime,FibFan,FibArc,FibExp,FibChan,Rectangle,Triangle,Ellipse,Pfork,Cycles,Text,Arrow,Label";
  StrToStringArray(ObjectTypes,OT);
  for (int i=0; i<24; i++)  {
    if (StringFind(StringTrim(StringLower(ObjectTypesToList)),StringTrim(StringLower(OT[i]))) < 0)
      OT[i] = " ";
  }
  
  string fname = OutputFilename;
  fname = StringReplace(fname,"[ccy]",ExpandCcy(Symbol()));
  fname = StringReplace(fname,"[tf]",TFToStr(Period()));
  int h = FileOpen(fname,FILE_CSV|FILE_WRITE,'~');
  if (OutputHeaderLine)  {
    string outstr = "#,Name,Type,Description,Time1,Price1,Time2,Price2,Color,Style,Width,BG,Ray,Arrow,Corner,Hpos,Vpos";
    outstr = StringReplace(outstr,",",FieldSeparator);
    FileWrite(h,outstr);              
  }  
  for (i=0; i<ObjectsTotal(); i++)   {
    string objname = ObjectName(i);
    string objdesc = ObjectDescription(objname);
    int    type    = ObjectType(objname);
    if (StringLen(ObjectNameMustContain) > 0  &&  StringFind(StringUpper(objname),StringUpper(ObjectNameMustContain)) < 0)    continue;
    if (StringLen(ObjectDescMustContain) > 0  &&  StringFind(StringUpper(objdesc),StringUpper(ObjectDescMustContain)) < 0)    continue;
    if (OT[type] != " ")   {
      outstr = NumberToStr(i,ObjectNumberFormat)
             + FieldSeparator + StrToStr(objname,ObjectNameFormat)
             + FieldSeparator + StrToStr(OT[type],ObjectTypeFormat)
             + FieldSeparator + StrToStr(objdesc,ObjectDescFormat)
             + FieldSeparator + StringTrimRight(DateToStr(ObjectGet(objname,OBJPROP_TIME1),ObjectTimeFormat))
             + FieldSeparator + NumberToStr(ObjectGet(objname,OBJPROP_PRICE1),ObjectPriceFormat)
             + FieldSeparator + StringTrimRight(DateToStr(ObjectGet(objname,OBJPROP_TIME2),ObjectTimeFormat))
             + FieldSeparator + NumberToStr(ObjectGet(objname,OBJPROP_PRICE2),ObjectPriceFormat)
             + FieldSeparator + ColorToStr(ObjectGet(objname,OBJPROP_COLOR))
             + FieldSeparator + NumberToStr(ObjectGet(objname,OBJPROP_STYLE),ObjectWidthFormat)
             + FieldSeparator + NumberToStr(ObjectGet(objname,OBJPROP_WIDTH),ObjectWidthFormat)
             + FieldSeparator + BoolToStr(ObjectGet(objname,OBJPROP_BACK))
             + FieldSeparator + BoolToStr(ObjectGet(objname,OBJPROP_RAY))
             + FieldSeparator + NumberToStr(ObjectGet(objname,OBJPROP_ARROWCODE),ObjectPosFormat)
             + FieldSeparator + NumberToStr(ObjectGet(objname,OBJPROP_CORNER),ObjectWidthFormat)
             + FieldSeparator + NumberToStr(ObjectGet(objname,OBJPROP_XDISTANCE),ObjectPosFormat)
             + FieldSeparator + NumberToStr(ObjectGet(objname,OBJPROP_YDISTANCE),ObjectPosFormat);
      FileWrite(h,outstr);              
  } }
  FileClose(h);
  MessageBox("All done!");
  return(0);
}

//+------------------------------------------------------------------+
#include <hanover --- extensible functions (np).mqh>