コード例 #1
0
 public override object DoConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 {
     Logger.Trace(string.Format("{0} args: {1}", GetTraceInfo(), string.Join(", ", value, targetType, parameter, culture)));
     using (var memStream = new System.IO.MemoryStream())
     {
         var writer = new System.IO.StreamWriter(memStream);
         writer.Write("class myClass{arr[]={");
         writer.Write(value as string);
         writer.Write("};};");
         writer.Flush();
         memStream.Seek(0, System.IO.SeekOrigin.Begin);
         SQF.ClassParser.Generated.Parser p = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(memStream));
         var tmpField = p.Parse().GetKey("myClass/arr", ConfigField.KeyMode.ThrowOnNotFound);
         if (tmpField.Array.Length != (int)parameter)
         {
             return(null);
         }
         return(tmpField.Value);
     }
 }
コード例 #2
0
        public void Initialize(SQF.ClassParser.ConfigField MainConfigField)
        {
            this.Image       = Parent.ThisPath + Image.Replace('/', '\\');
            this.__ClassPath = Parent.ThisPath + __ClassPath.Replace('/', '\\');
            this.__XamlPath  = Parent.ThisPath + __XamlPath.Replace('/', '\\');
            using (var stream = System.IO.File.OpenRead(this.__ClassPath))
            {
                var parser = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(stream));
                parser.Patch(MainConfigField, false);
                this.ConfigKey = MainConfigField[MainConfigField.Count - 1].Name;
            }

            foreach (var it in this.__PropertiesPath)
            {
                var path   = System.IO.Path.Combine(Parent.ThisPath, it.TrimStart(new[] { '\\', '/' }));
                var groups = Group.Load(path);
                foreach (var groupA in this.Properties)
                {
                    foreach (var groupB in groups)
                    {
                        if (groupA.Name.ToUpper() == groupB.Name.ToUpper())
                        {
                            groups.Remove(groupB);
                            groupA.Items.AddRange(groupB.Items);
                            break;
                        }
                    }
                }
                this.Properties.AddRange(groups);
            }
            foreach (var it in this.__EventsPath)
            {
                var path = System.IO.Path.Combine(Parent.ThisPath, it.TrimStart(new[] { '\\', '/' }));
                this.Events.AddRange(Event.Load(path));
            }
        }
コード例 #3
0
ファイル: ArrayType.cs プロジェクト: X39/ArmA-UI-Editor
 public override object DoConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 {
     Logger.Trace(string.Format("{0} args: {1}", GetTraceInfo(), string.Join(", ", value, targetType, parameter, culture)));
     using (var memStream = new System.IO.MemoryStream())
     {
         var writer = new System.IO.StreamWriter(memStream);
         writer.Write("class myClass{arr[]={");
         writer.Write(value as string);
         writer.Write("};};");
         writer.Flush();
         memStream.Seek(0, System.IO.SeekOrigin.Begin);
         SQF.ClassParser.Generated.Parser p = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(memStream));
         var tmpField = p.Parse().GetKey("myClass/arr", ConfigField.KeyMode.ThrowOnNotFound);
         if (tmpField.Array.Length != (int)parameter)
             return null;
         return tmpField.Value;
     }
 }
コード例 #4
0
ファイル: UIElement.cs プロジェクト: X39/ArmA-UI-Editor
        public void Initialize(SQF.ClassParser.ConfigField MainConfigField)
        {
            this.Image = Parent.ThisPath + Image.Replace('/', '\\');
            this.__ClassPath = Parent.ThisPath + __ClassPath.Replace('/', '\\');
            this.__XamlPath = Parent.ThisPath + __XamlPath.Replace('/', '\\');
            using (var stream = System.IO.File.OpenRead(this.__ClassPath))
            {
                var parser = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(stream));
                parser.Patch(MainConfigField, false);
                this.ConfigKey = MainConfigField[MainConfigField.Count - 1].Name;
            }

            foreach (var it in this.__PropertiesPath)
            {
                var path = System.IO.Path.Combine(Parent.ThisPath, it.TrimStart(new[] { '\\', '/' }));
                var groups = Group.Load(path);
                foreach(var groupA in this.Properties)
                {
                    foreach(var groupB in groups)
                    {
                        if(groupA.Name.ToUpper() == groupB.Name.ToUpper())
                        {
                            groups.Remove(groupB);
                            groupA.Items.AddRange(groupB.Items);
                            break;
                        }
                    }
                }
                this.Properties.AddRange(groups);
            }
            foreach (var it in this.__EventsPath)
            {
                var path = System.IO.Path.Combine(Parent.ThisPath, it.TrimStart(new[] { '\\', '/' }));
                this.Events.AddRange(Event.Load(path));
            }
        }
コード例 #5
0
        private void DisplayCanvas_Drop(object sender, DragEventArgs e)
        {
            Logger.Trace(string.Format("{0} args: {1}", this.GetTraceInfo(), string.Join(", ", sender, e)));
            Logger.Trace(string.Format("{0} args: {1}", this.GetTraceInfo(), string.Join(", ", sender, e)));
            if (!e.Data.GetDataPresent("UiElementsListBoxData"))
                return;
            var dragDropData = (e.Data.GetData("UiElementsListBoxData") as Code.UI.DragDrop.UiElementsListBoxData);
            var controlsField = this.LastFileConfig.GetKey("controls", ConfigField.KeyMode.CreateNew);

            string name = string.Concat("My" + dragDropData.ElementData.ConfigKey);
            int count = 1;
            while (controlsField.Contains(name))
            {
                count++;
                name = string.Concat("My" + dragDropData.ElementData.ConfigKey, count);
            }
            var field = controlsField.AddKey(name, dragDropData.ElementData.ConfigKey);
            var mousePos = e.GetPosition(this.DisplayCanvas);
            field.SetKey("x", this.ToSqfString(FieldTypeEnum.XField, mousePos.X));
            field.SetKey("y", this.ToSqfString(FieldTypeEnum.YField, mousePos.Y));

            var widthField = field.GetKey("w", ConfigField.KeyMode.CheckParentsNull);
            if (widthField != null)
            {
                double d = widthField.IsNumber ? widthField.Number : this.FromSqfString(FieldTypeEnum.HField, widthField.String);
                field.SetKey("w", this.ToSqfString(FieldTypeEnum.WField, d));
            }
            var heightField = field.GetKey("h", ConfigField.KeyMode.CheckParentsNull);
            if (heightField != null)
            {
                double d = heightField.IsNumber ? heightField.Number : this.FromSqfString(FieldTypeEnum.HField, heightField.String);
                field.SetKey("h", this.ToSqfString(FieldTypeEnum.HField, d));
            }
            using (var stream = this.Textbox.Text.AsMemoryStream())
            {
                SQF.ClassParser.Generated.Parser p = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(stream));
                var searchKey = controlsField.Key;
                searchKey = searchKey.Remove(0, searchKey.IndexOf(this.LastFileConfig.Name) - 1);
                var index = p.GetRange(searchKey);

                this.Textbox.Text = this.Textbox.Text.Insert(index.ValueEnd, string.Concat("\r\n", field.ToPrintString(2)));
            }
            this.RegenerateDisplay();
            this.ThisScrollViewer.Focus();
        }
コード例 #6
0
 public void UpdateConfigKey(string key)
 {
     //Logger.Trace(string.Format("{0} args: {1}", this.GetTraceInfo(), string.Join(", ", key)));
     using (var stream = this.Textbox.Text.AsMemoryStream())
     {
         SQF.ClassParser.Generated.Parser p = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(stream));
         key = key.Remove(0, key.IndexOf(this.LastFileConfig.Name) - 1);
         var index = p.GetRange(key);
         if (index == null)
         {
             stream.Seek(0, System.IO.SeekOrigin.Begin);
             p = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(stream));
             index = p.GetRange(key.Remove(key.LastIndexOf('/')));
             var field = this.Config.GetKey(key, ConfigField.KeyMode.NullOnNotFound);
             if (field == null)
                 return;
             this.Textbox.Text = this.Textbox.Text.Insert(index.ValueStart, string.Concat(field.ToPrintString(), "\r\n", new string('\t', key.Count((c) => c == '/') - 1)));
         }
         else
         {
             var field = this.Config.GetKey(key, ConfigField.KeyMode.NullOnNotFound);
             if (field == null)
             {
                 throw new NotImplementedException();
                 this.Textbox.Text = this.Textbox.Text.Remove(index.ValueStart, index.ValueEnd - index.ValueStart);
             }
             else
             {
                 this.Textbox.Text = this.Textbox.Text.Remove(index.ValueStart, index.ValueEnd - index.ValueStart).Insert(index.ValueStart, field.ToValueString());
             }
         }
     }
     this.AllowConfigPatching = false;
 }
コード例 #7
0
 public void RenameConfigKey(string keyOld, string newName)
 {
     Logger.Trace(string.Format("{0} args: {1}", this.GetTraceInfo(), string.Join(", ", keyOld, newName)));
     using (var stream = this.Textbox.Text.AsMemoryStream())
     {
         SQF.ClassParser.Generated.Parser p = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(stream));
         keyOld = keyOld.Remove(0, keyOld.IndexOf(this.LastFileConfig.Name) - 1);
         var index = p.GetRange(keyOld);
         if (index == null)
         {
             throw new ArgumentException();
         }
         else
         {
             this.Textbox.Text = this.Textbox.Text.Remove(index.NameStart, index.NameEnd - index.NameStart).Insert(index.NameStart, newName);
         }
     }
     this.AllowConfigPatching = false;
 }
コード例 #8
0
 public void RemoveConfigKey(string key)
 {
     Logger.Trace(string.Format("{0} args: {1}", this.GetTraceInfo(), string.Join(", ", key)));
     using (var stream = this.Textbox.Text.AsMemoryStream())
     {
         SQF.ClassParser.Generated.Parser p = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(stream));
         key = key.Remove(0, key.IndexOf(this.LastFileConfig.Name) - 1);
         var index = p.GetRange(key);
         if (index == null)
         {
             throw new ArgumentException();
         }
         else
         {
             this.Textbox.Text = this.Textbox.Text.Remove(index.WholeStart, index.WholeEnd - index.WholeStart);
         }
         this.SelectElements(false, false, new FrameworkElement[0]);
         var field = this.Config.GetKey(key, ConfigField.KeyMode.ThrowOnNotFound);
         field.Parent.RemoveKey(field.Name);
     }
     this.AllowConfigPatching = false;
     if (this.OnUiElementsChanged != null)
         this.OnUiElementsChanged(this, new EventArgs());
 }
コード例 #9
0
 public void LoadSnap()
 {
     Logger.Trace(string.Format("{0} args: -/-", this.GetTraceInfo()));
     this.Config = AddInManager.Instance.MainFile.AddKey(string.Format("EditingSnap_{0}_WorkingConfig", Counter++));
     this.Config.ToClass();
     using (var stream = this.Textbox.Text.AsMemoryStream())
     {
         SQF.ClassParser.Generated.Parser p = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(stream));
         p.Patch(this.Config, true);
     }
     this.RegenerateDisplay();
 }
コード例 #10
0
 private void Textbox_LostFocus(object sender, RoutedEventArgs e)
 {
     Logger.Trace(string.Format("{0} args: {1}", this.GetTraceInfo(), string.Join(", ", sender, e)));
     if (!this.AllowConfigPatching)
         return;
     this.AllowConfigPatching = false;
     using (var stream = this.Textbox.Text.AsMemoryStream())
     {
         SQF.ClassParser.Generated.Parser p = new SQF.ClassParser.Generated.Parser(new SQF.ClassParser.Generated.Scanner(stream));
         p.Patch(this.Config, true);
     }
     this.RegenerateDisplay();
 }