Пример #1
0
        private void AddElement(ElementStructure es, ref int offset, byte[] data, ref int groupOffset, ref int CurrentGroup)
        {
            Panel panel1=new Panel();
            panel1.AutoSize=true;
            panel1.Width=fpanel1.Width;
            panel1.Height=1;
            int ypos=0;

            TextBox tb=new TextBox();
            boxes.Add(tb);
            if(es.group!=0) {
                CheckBox cb=new CheckBox();
                cb.Text="Use this value?";
                panel1.Controls.Add(cb);
                cb.Location=new System.Drawing.Point(10, ypos);
                ypos+=24;
                cb.Tag=new cbTag(es.group, tb);
                if(CurrentGroup!=es.group) cb.Checked=true;
                else tb.Enabled=false;
                cb.CheckedChanged+=new EventHandler(CheckBox_CheckedChanged);
            }
            if(es.optional||es.repeat&&repeatcount>0) {
                CheckBox cb=new CheckBox();
                cb.Text="Use this value?";
                panel1.Controls.Add(cb);
                cb.Location=new System.Drawing.Point(10, ypos);
                ypos+=24;
                cb.Tag=new repeatCbTag(tb, elements.Count);
                if(data==null) {
                    tb.Enabled=false;
                } else {
                    cb.Checked=true;
                }
                cb.CheckedChanged+=new EventHandler(RepeatCheckBox_CheckedChanged);
            }
            if((CurrentGroup==0&&es.group!=0)||(CurrentGroup!=0&&es.group!=0&&CurrentGroup!=es.group)) {
                CurrentGroup=es.group;
                groupOffset=offset;
            } else if(CurrentGroup!=0&&es.group==0) {
                CurrentGroup=0;
            } else if(CurrentGroup!=0&&CurrentGroup==es.group) {
                offset=groupOffset;
            }
            valueTypes.Add(es.type);
            if(data!=null) {
                switch(es.type) {
                case ElementValueType.Int:
                    tb.Text=TypeConverter.h2si(data[offset], data[offset+1], data[offset+2], data[offset+3]).ToString();
                    offset+=4;
                    break;
                case ElementValueType.FormID:
                    tb.Text=TypeConverter.h2i(data[offset], data[offset+1], data[offset+2], data[offset+3]).ToString("X8");
                    offset+=4;
                    break;
                case ElementValueType.Float:
                    tb.Text=TypeConverter.h2f(data[offset], data[offset+1], data[offset+2], data[offset+3]).ToString();
                    offset+=4;
                    break;
                case ElementValueType.Short:
                    tb.Text=TypeConverter.h2ss(data[offset], data[offset+1]).ToString();
                    offset+=2;
                    break;
                case ElementValueType.Byte:
                    tb.Text=data[offset].ToString();
                    offset++;
                    break;
                case ElementValueType.String:
                    string s="";
                    while(data[offset]!=0) s+=(char)data[offset++];
                    offset++;
                    tb.Text=s;
                    tb.Width+=200;
                    break;
                case ElementValueType.fstring:
                    tb.Text=sr.GetStrData();
                    tb.Width+=200;
                    break;
                default:
                    throw new ApplicationException();
                }
            } else {
                if(es.type==ElementValueType.String||es.type==ElementValueType.fstring) tb.Width+=200;
                if(removedStrings.ContainsKey(boxes.Count-1)) tb.Text=removedStrings[boxes.Count-1];
            }
            Label l=new Label();
            l.AutoSize=true;
            string tmp=es.type.ToString();
            l.Text=tmp+": "+es.name+(es.desc!=null?(" ("+es.desc+")"):"");
            panel1.Controls.Add(tb);
            tb.Location=new System.Drawing.Point(10, ypos);
            if(es.multiline) {
                tb.Multiline=true;
                ypos+=tb.Height*5;
                tb.Height*=6;
            }
            panel1.Controls.Add(l);
            l.Location=new System.Drawing.Point(tb.Right+10, ypos+3);
            string[] options=null;
            if(es.type==ElementValueType.FormID) {
                ypos+=28;
                Button b=new Button();
                b.Text="FormID lookup";
                b.Click+=new EventHandler(LookupFormID_Click);
                panel1.Controls.Add(b);
                b.Location=new System.Drawing.Point(20, ypos);
                TextBox tb2=new TextBox();
                tb2.Width+=200;
                tb2.ReadOnly=true;
                panel1.Controls.Add(tb2);
                tb2.Location=new System.Drawing.Point(b.Right+10, ypos);
                b.Tag=new bTag(tb, tb2);
                if(es.FormIDType!=null) {
                    if(cachedFormIDs.ContainsKey(es.FormIDType)) {
                        options=cachedFormIDs[es.FormIDType];
                    } else {
                        options=formIDScan(es.FormIDType);
                        cachedFormIDs[es.FormIDType]=options;
                    }
                }
            } else if(es.options!=null) {
                options=es.options;
            }
            if(options!=null) {
                ypos+=28;
                ComboBox cmb=new ComboBox();
                cmb.Tag=tb;
                cmb.Width+=200;
                for(int j=0;j<options.Length;j+=2) {
                    cmb.Items.Add(new comboBoxItem(options[j], options[j+1]));
                }
                cmb.KeyPress+=new KeyPressEventHandler(cb_KeyPress);
                cmb.ContextMenu=new ContextMenu();
                cmb.SelectedIndexChanged+=new EventHandler(cb_SelectedIndexChanged);
                panel1.Controls.Add(cmb);
                cmb.Location=new System.Drawing.Point(20, ypos);
            }

            fpanel1.Controls.Add(panel1);
            elements.Add(panel1);
        }
Пример #2
0
 private void AddElement(ElementStructure es)
 {
     int a=-1, b=0, c=0;
     AddElement(es, ref a, null, ref b, ref c);
 }
Пример #3
0
        private void AddElement(ElementStructure es, ref int offset, byte[] data, ref int groupOffset, ref int CurrentGroup)
        {
            var panel1 = new Panel();

            panel1.AutoSize = true;
            panel1.Width    = fpanel1.Width;
            panel1.Height   = 1;
            var ypos = 0;

            var tb = new TextBox();

            boxes.Add(tb);
            if (es.group != 0)
            {
                var cb = new CheckBox();
                cb.Text = "Use this value?";
                panel1.Controls.Add(cb);
                cb.Location = new Point(10, ypos);
                ypos       += 24;
                cb.Tag      = new cbTag(es.group, tb);
                if (CurrentGroup != es.group)
                {
                    cb.Checked = true;
                }
                else
                {
                    tb.Enabled = false;
                }
                cb.CheckedChanged += CheckBox_CheckedChanged;
            }
            if (es.optional || es.repeat && repeatcount > 0)
            {
                var cb = new CheckBox();
                cb.Text = "Use this value?";
                panel1.Controls.Add(cb);
                cb.Location = new Point(10, ypos);
                ypos       += 24;
                cb.Tag      = new repeatCbTag(tb, elements.Count);
                if (data == null)
                {
                    tb.Enabled = false;
                }
                else
                {
                    cb.Checked = true;
                }
                cb.CheckedChanged += RepeatCheckBox_CheckedChanged;
            }
            if ((CurrentGroup == 0 && es.group != 0) || (CurrentGroup != 0 && es.group != 0 && CurrentGroup != es.group))
            {
                CurrentGroup = es.group;
                groupOffset  = offset;
            }
            else if (CurrentGroup != 0 && es.group == 0)
            {
                CurrentGroup = 0;
            }
            else if (CurrentGroup != 0 && CurrentGroup == es.group)
            {
                offset = groupOffset;
            }
            valueTypes.Add(es.type);
            if (data != null)
            {
                switch (es.type)
                {
                case ElementValueType.Int:
                    tb.Text = TypeConverter.h2si(data[offset], data[offset + 1], data[offset + 2], data[offset + 3]).ToString();
                    offset += 4;
                    break;

                case ElementValueType.FormID:
                    tb.Text =
                        TypeConverter.h2i(data[offset], data[offset + 1], data[offset + 2], data[offset + 3]).ToString("X8");
                    offset += 4;
                    break;

                case ElementValueType.Float:
                    tb.Text = TypeConverter.h2f(data[offset], data[offset + 1], data[offset + 2], data[offset + 3]).ToString();
                    offset += 4;
                    break;

                case ElementValueType.Short:
                    tb.Text = TypeConverter.h2ss(data[offset], data[offset + 1]).ToString();
                    offset += 2;
                    break;

                case ElementValueType.Byte:
                    tb.Text = data[offset].ToString();
                    offset++;
                    break;

                case ElementValueType.String:
                    var s = "";
                    while (data[offset] != 0)
                    {
                        s += (char)data[offset++];
                    }
                    offset++;
                    tb.Text   = s;
                    tb.Width += 200;
                    break;

                case ElementValueType.fstring:
                    tb.Text   = sr.GetStrData();
                    tb.Width += 200;
                    break;

                default:
                    throw new ApplicationException();
                }
            }
            else
            {
                if (es.type == ElementValueType.String || es.type == ElementValueType.fstring)
                {
                    tb.Width += 200;
                }
                if (removedStrings.ContainsKey(boxes.Count - 1))
                {
                    tb.Text = removedStrings[boxes.Count - 1];
                }
            }
            var l = new Label();

            l.AutoSize = true;
            var tmp = es.type.ToString();

            l.Text = tmp + ": " + es.name + (es.desc != null ? (" (" + es.desc + ")") : "");
            panel1.Controls.Add(tb);
            tb.Location = new Point(10, ypos);
            if (es.multiline)
            {
                tb.Multiline = true;
                ypos        += tb.Height * 5;
                tb.Height   *= 6;
            }
            panel1.Controls.Add(l);
            l.Location = new Point(tb.Right + 10, ypos + 3);
            string[] options = null;
            if (es.type == ElementValueType.FormID)
            {
                ypos += 28;
                var b = new Button();
                b.Text   = "FormID lookup";
                b.Click += LookupFormID_Click;
                panel1.Controls.Add(b);
                b.Location = new Point(20, ypos);
                var tb2 = new TextBox();
                tb2.Width   += 200;
                tb2.ReadOnly = true;
                panel1.Controls.Add(tb2);
                tb2.Location = new Point(b.Right + 10, ypos);
                b.Tag        = new bTag(tb, tb2);
                if (es.FormIDType != null)
                {
                    if (cachedFormIDs.ContainsKey(es.FormIDType))
                    {
                        options = cachedFormIDs[es.FormIDType];
                    }
                    else
                    {
                        options = formIDScan(es.FormIDType);
                        cachedFormIDs[es.FormIDType] = options;
                    }
                }
            }
            else if (es.options != null)
            {
                options = es.options;
            }
            if (options != null)
            {
                ypos += 28;
                var cmb = new ComboBox();
                cmb.Tag    = tb;
                cmb.Width += 200;
                for (var j = 0; j < options.Length; j += 2)
                {
                    cmb.Items.Add(new comboBoxItem(options[j], options[j + 1]));
                }
                cmb.KeyPress             += cb_KeyPress;
                cmb.ContextMenu           = new ContextMenu();
                cmb.SelectedIndexChanged += cb_SelectedIndexChanged;
                panel1.Controls.Add(cmb);
                cmb.Location = new Point(20, ypos);
            }

            fpanel1.Controls.Add(panel1);
            elements.Add(panel1);
        }
Пример #4
0
 private static void MatchRecordAddConditionals(Dictionary<int, Conditional> conditions, SubRecord sr,
                                                ElementStructure[] ess)
 {
   var offset = 0;
   var data = sr.GetReadonlyData();
   for (var j = 0; j < ess.Length; j++)
   {
     if (ess[j].CondID != 0)
     {
       switch (ess[j].type)
       {
         case ElementValueType.Int:
         case ElementValueType.FormID:
           conditions[ess[j].CondID] = new Conditional(ElementValueType.Int,
                                                       TypeConverter.h2si(data[offset], data[offset + 1],
                                                                          data[offset + 2], data[offset + 3]));
           offset += 4;
           break;
         case ElementValueType.Float:
           conditions[ess[j].CondID] = new Conditional(ElementValueType.Float,
                                                       TypeConverter.h2f(data[offset], data[offset + 1],
                                                                         data[offset + 2], data[offset + 3]));
           offset += 4;
           break;
         case ElementValueType.Short:
           conditions[ess[j].CondID] = new Conditional(ElementValueType.Short,
                                                       (int) TypeConverter.h2ss(data[offset], data[offset + 1]));
           offset += 2;
           break;
         case ElementValueType.Byte:
           conditions[ess[j].CondID] = new Conditional(ElementValueType.Byte, (int) data[offset]);
           offset++;
           break;
         case ElementValueType.String:
           var s = "";
           while (data[offset] != 0)
           {
             s += (char) data[offset++];
           }
           offset++;
           conditions[ess[j].CondID] = new Conditional(ElementValueType.String, s);
           break;
         case ElementValueType.fstring:
           conditions[ess[j].CondID] = new Conditional(ElementValueType.String, sr.GetStrData());
           break;
         default:
           throw new ApplicationException();
       }
     }
     else
     {
       switch (ess[j].type)
       {
         case ElementValueType.Int:
         case ElementValueType.FormID:
         case ElementValueType.Float:
           offset += 4;
           break;
         case ElementValueType.Short:
           offset += 2;
           break;
         case ElementValueType.Byte:
           offset++;
           break;
         case ElementValueType.String:
           while (data[offset] != 0)
           {
             offset++;
           }
           offset++;
           break;
         case ElementValueType.fstring:
           break;
         default:
           throw new ApplicationException();
       }
     }
   }
 }
Пример #5
0
        private void AddElement(ElementStructure es)
        {
            int a = -1, b = 0, c = 0;

            AddElement(es, ref a, null, ref b, ref c);
        }