Beispiel #1
0
        public bool Run()
        {
            var manifests = new List <string>();

            foreach (string manifest in GetType().Assembly.GetManifestResourceNames())
            {
                if (manifest.StartsWith("SilverSim.Tests.Resources.Objects.") && manifest.EndsWith(".xml"))
                {
                    manifests.Add(manifest);
                }
            }

            foreach (string manifest in manifests)
            {
                m_Log.InfoFormat("Testing decoder with asset {0}", manifest);
                Stream resource = GetType().Assembly.GetManifestResourceStream(manifest);
                try
                {
                    ObjectXML.FromXml(resource, UGUI.Unknown, XmlDeserializationOptions.ReadKeyframeMotion);
                }
                catch (Exception e)
                {
                    m_Log.InfoFormat("Failed to parse asset {0}: {1}\n{2}", e.GetType().FullName, e.StackTrace, e.StackTrace.ToString());
                    return(false);
                }

                var reflist = new List <UUID>();
                resource = GetType().Assembly.GetManifestResourceStream(manifest);
                ObjectReferenceDecoder.GetReferences(resource, "", reflist);
                m_Log.InfoFormat("Found {0} references", reflist.Count);
            }

            return(true);
        }
Beispiel #2
0
        public override void AssetTransferComplete()
        {
            AssetData          data;
            List <ObjectGroup> objgroups;

            try
            {
                data = m_Scene.AssetService[AssetID];
            }
            catch (Exception e)
            {
                m_Log.Error(string.Format("Failed to rez object from asset {0}", AssetID), e);
                SendAlertMessage("ALERT: CantFindObject");
                return;
            }

            try
            {
                objgroups = ObjectXML.FromAsset(data, m_RezzingAgent);
            }
            catch (Exception e)
            {
                m_Log.Error(string.Format("Unable to decode asset {0} to rez", data.ID), e);
                SendAlertMessage("ALERT: RezAttemptFailed");
                return;
            }

            if (objgroups.Count == 1 && m_SourceItem != null)
            {
                objgroups[0].Name = m_SourceItem.Name;
            }

            try
            {
                foreach (ObjectGroup grp in objgroups)
                {
                    if (m_Scene.CanRez(m_RezzingAgent.ID, m_RezzingAgent, grp.GlobalPosition))
                    {
                        if (m_Scene.GroupsService?.Members.ContainsKey(m_RezzingAgent, m_RezzingGroup, m_RezzingAgent) ?? false)
                        {
                            grp.Group = m_RezzingGroup;
                        }
                        m_Scene.RezObject(grp, m_RezzingAgent, m_SourceItem);
                    }
                }
            }
            catch (Exception e)
            {
                m_Log.Error(string.Format("Failed to rez object in scene {0} ({1})", m_Scene.Name, m_Scene.ID), e);
                SendAlertMessage("ALERT: RezAttemptFailed");
                return;
            }
        }
Beispiel #3
0
        public static void AddRow(ObjectXML objectXML)
        {
            if (objectXML.rowNum < MainWindow.MaxRow)
            {
                for (int i = 0; i < objectXML.colNum; i++)
                {
                    Coords t = new Coords(objectXML.rowNum, i);
                    objectXML.cells.Add(t.GetHashCode(), new TabCell());
                }

                objectXML.rowNum++;

                MainWindow.objectXML = objectXML;
            }
        }
Beispiel #4
0
        public override void AssetTransferComplete()
        {
            AssetData data;
            var       objgroups = new List <ObjectGroup>();

            foreach (UUID assetid in m_ItemAssetIDs)
            {
                try
                {
                    data = m_Scene.AssetService[assetid];
                }
                catch (Exception e)
                {
                    m_Log.Error(string.Format("Failed to rez object from asset {0}", assetid), e);
                    SendAlertMessage("ALERT: CantFindObject");
                    return;
                }

                try
                {
                    objgroups.AddRange(ObjectXML.FromAsset(data, m_RezzingAgent));
                }
                catch (Exception e)
                {
                    m_Log.Error(string.Format("Unable to decode asset {0} to rez", data.ID), e);
                    SendAlertMessage("ALERT: RezAttemptFailed");
                    return;
                }
            }

            if (objgroups.Count == 1 && m_RezParams.SourceItem != null)
            {
                objgroups[0].Name = m_RezParams.SourceItem.Name;
            }

            try
            {
                m_Scene.RezObjects(objgroups, m_RezParams);
            }
            catch (Exception e)
            {
                m_Log.Error(string.Format("Failed to rez object in scene {0} ({1})", m_Scene.Name, m_Scene.ID), e);
                SendAlertMessage("ALERT: RezAttemptFailed");
            }
        }
Beispiel #5
0
        public static void AddCol(ObjectXML objectXML)
        {
            if (objectXML.colNum < MainWindow.MaxCol)
            {
                Coords temp = new Coords(0, objectXML.colNum);

                objectXML.header.Add(temp.GetHashCode(), new HeaderCell());

                for (int i = 1; i < objectXML.rowNum; i++)
                {
                    objectXML.cells.Add(new Coords(i, objectXML.colNum).GetHashCode(), new TabCell());
                }

                objectXML.colNum++;

                MainWindow.objectXML = objectXML;
            }
        }
Beispiel #6
0
        public bool Run()
        {
            bool success    = true;
            int  count      = 0;
            int  successcnt = 0;

            foreach (KeyValuePair <UUID, string> file in Assets)
            {
                ++count;
                var tr = new TestRunner.TestResult
                {
                    Name    = "Asset " + file.Key + "(" + file.Value + ")",
                    Result  = false,
                    Message = string.Empty
                };
                int startTime = Environment.TickCount;
                m_Log.InfoFormat("Testing deserialization of {1} ({0})", file.Key, file.Value);

                try
                {
                    using (Stream s = new HttpClient.Get(file.Value).ExecuteStreamRequest())
                    {
                        ObjectXML.FromXml(s, UGUI.Unknown, XmlDeserializationOptions.ReadKeyframeMotion);
                    }
                    m_Log.InfoFormat("Deserialization of {1} ({0}) successful", file.Key, file.Value);
                    ++successcnt;
                    tr.Result = true;
                }
                catch (Exception e)
                {
                    m_Log.ErrorFormat("Compilation of {1} ({0}) failed: {2}", file.Key, file.Value, e.Message);
                    m_Log.WarnFormat("Stack Trace:\n{0}", e.StackTrace);
                    tr.Message = e.Message + "\n" + e.StackTrace;
                    success    = false;
                }
                tr.RunTime = Environment.TickCount - startTime;
                m_Runner.TestResults.Add(tr);
            }
            m_Log.InfoFormat("{0} of {1} compilations successful", successcnt, count);
            return(success);
        }
Beispiel #7
0
        public static bool CompareXml(ObjectXML a, ObjectXML b)
        {
            if (!Equals(a,b))
            {

                MessageBoxResult result = MessageBox.Show("Save Changes?", "Save Changes?", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);

                switch (result)
                {
                    case MessageBoxResult.Yes:
                        {
                            try
                            {
                                WriteXml(a, MainWindow.PathXML);
                            }
                            catch
                            {
                                try
                                {
                                    SaveAs(a);
                                }
                                catch
                                {
                                    //?????
                                }
                            }
                            return true;
                        }

                    case MessageBoxResult.No:
                        return true;

                    case MessageBoxResult.Cancel:
                        return false;
                }
            }
            return true;
        }
Beispiel #8
0
        public static void AddCol(ObjectXML objectXML, Coords LastActive)
        {
            if (objectXML.colNum < MainWindow.MaxCol)
            {
                Coords temp = new Coords(0, objectXML.colNum);

                objectXML.header.Add(temp.GetHashCode(), new HeaderCell());

                for (int i = 1; i < objectXML.rowNum; i++)
                {
                    temp = new Coords(i, objectXML.colNum);
                    objectXML.cells.Add(temp.GetHashCode(), new TabCell());
                }

                objectXML.colNum++;

                for (int col = objectXML.colNum - 1; col > LastActive.colCoord; col--)
                {
                    objectXML.header[new Coords(0, col).GetHashCode()] = objectXML.header[new Coords(0, col - 1).GetHashCode()];
                }
                objectXML.header[new Coords(0, LastActive.colCoord + 1).GetHashCode()] = new HeaderCell();

                for (int row = 1; row < objectXML.rowNum; row++)
                {
                    for (int col = objectXML.colNum - 1; col > LastActive.colCoord; col--)
                    {
                        objectXML.cells[new Coords(row, col).GetHashCode()] = objectXML.cells[new Coords(row, col - 1).GetHashCode()];
                    }
                }
                for (int row = 0; row < objectXML.rowNum; row++)//если поменять на -- то будет драть МНОГО памяти
                {
                    objectXML.cells[new Coords(row, LastActive.colCoord + 1).GetHashCode()] = new TabCell();
                }

                MainWindow.objectXML = objectXML;
            }
        }
Beispiel #9
0
        public static bool WriteXml(ObjectXML objectXml, string filename)
        {
            if (filename == null || filename == "") return true;
            XDocument doc = new XDocument();
            XElement Root = new XElement("DataSetTable");

            doc.Add(Root);

            XElement Header = new XElement("TabColumns");

            for (int col = 0; col < objectXml.header.Count; col++)
            {
                Coords coords = new Coords(0, col);
                Header.Add(new XElement("TabColumn",
                    new XAttribute("Name", objectXml.header[coords.GetHashCode()].headerCellName),
                    new XAttribute("Fontsize", objectXml.header[coords.GetHashCode()].headerCellFontSize),
                    new XAttribute("Height", objectXml.header[coords.GetHashCode()].headerCellHeight),
                    new XAttribute("Width", objectXml.header[coords.GetHashCode()].headerCellWidth),
                    new XAttribute("Align", objectXml.header[coords.GetHashCode()].headerCellAlign),
                    new XAttribute("Header", objectXml.header[coords.GetHashCode()].headerCellHeader)));
            }

            doc.Root.Add(Header);

            for (int row = 1; row < objectXml.rowNum; row++)
            {
                XElement tableRow;

                if (objectXml.cells[new Coords(row, 0).GetHashCode()].Name != "  " && objectXml.cells[new Coords(row, 0).GetHashCode()].Name!=null)
                {
                    tableRow = new XElement("TabRow",
                        new XAttribute("Name", objectXml.cells[new Coords(row, 0).GetHashCode()].Name),
                        new XAttribute("Number", objectXml.cells[new Coords(row, 0).GetHashCode()].Number));
                }

                else
                {
                    tableRow = new XElement("TabRow");
                }

                for (int col = 0; col < objectXml.colNum; col++)
                {
                    Coords coords = new Coords(row, col);
                    tableRow.Add(new XElement("TabCell",
                        new XAttribute("Align", objectXml.cells[coords.GetHashCode()].tabCellAlign),
                        new XAttribute("Precision", objectXml.cells[coords.GetHashCode()].tabCellPrecision),
                        new XAttribute("Parametr", objectXml.cells[coords.GetHashCode()].tabCellParametr)));
                }

                doc.Root.Add(tableRow);
            }

            filename = MainWindow.PathXML;
            if (filename == null || filename == "") return false;
            doc.Save(filename);

            return true;
        }
Beispiel #10
0
 public static void SaveAs(ObjectXML objectXML)
 {
     SaveFileDialog saveFileDialog1 = new SaveFileDialog();
     saveFileDialog1.Filter = "XML files (*.xml)|*.xml|All files (*.*)|*.*";
     saveFileDialog1.FilterIndex = 1;
     saveFileDialog1.RestoreDirectory = true;
     saveFileDialog1.AddExtension = true;
     saveFileDialog1.ShowDialog();
     if (saveFileDialog1.FileName != null && saveFileDialog1.FileName != "")
         MainWindow.PathXML = saveFileDialog1.FileName;
     if (!WriteXml(objectXML, saveFileDialog1.FileName)) return;
 }
Beispiel #11
0
        public static void DelRow(ObjectXML objectXML, Coords LastActive)
        {
            if (LastActive.rowCoord != 0 && objectXML.rowNum > 2)
            {
                if (LastActive.rowCoord < (objectXML.rowNum - 1))
                {
                    for (int row = LastActive.rowCoord; row < objectXML.rowNum - 2; row++)
                    {
                        for (int col = 0; col < objectXML.colNum; col++)
                        {
                            Coords temp = new Coords(row, col);
                            objectXML.cells[temp.GetHashCode()] = objectXML.cells[new Coords(row + 1, col).GetHashCode()];
                        }
                    }
                }
                for (int i = 0; i < objectXML.colNum; i++)
                {
                    objectXML.cells.Remove(new Coords(objectXML.rowNum - 1, i).GetHashCode());
                }

                objectXML.rowNum--;

                if (MainWindow.LastActiveCoords.rowCoord > objectXML.rowNum - 1)
                    MainWindow.LastActiveCoords.rowCoord = objectXML.rowNum - 1;

                MainWindow.objectXML = objectXML;
            }
            else return;
        }
Beispiel #12
0
        public static void DelCol(ObjectXML objectXML, Coords LastActive)
        {
            if (objectXML.colNum > 1)
            {
                for (int col = LastActive.colCoord; col < objectXML.colNum - 2; col++)
                {
                    objectXML.header[new Coords(0, col).GetHashCode()] = objectXML.header[new Coords(0, col + 1).GetHashCode()];
                }

                Coords temp = new Coords(0, objectXML.colNum - 1);

                objectXML.header.Remove(temp.GetHashCode());

                for (int row = 1; row < objectXML.rowNum; row++)
                {
                    for (int col = LastActive.colCoord; col < objectXML.colNum - 2; col++)
                    {
                        objectXML.cells[new Coords(row, col).GetHashCode()] = objectXML.cells[new Coords(row, col + 1).GetHashCode()];
                    }

                    objectXML.cells.Remove(new Coords(row, objectXML.colNum - 1).GetHashCode());
                }
                objectXML.colNum--;

                if (MainWindow.LastActiveCoords.colCoord > objectXML.colNum - 1)
                    MainWindow.LastActiveCoords.colCoord = objectXML.colNum - 1;

                MainWindow.objectXML = objectXML;
            }
        }
Beispiel #13
0
        public int CheckAssetFormat(ScriptInstance instance, LSLKey assetid)
        {
            lock (instance)
            {
                AssetServiceInterface assetService = instance.Part.ObjectGroup.AssetService;
                AssetData             asset;
                if (!assetService.TryGetValue(assetid.AsUUID, out asset))
                {
                    return(0);
                }

                switch (asset.Type)
                {
                case AssetType.Bodypart:
                case AssetType.Clothing:
                    try
                    {
                        new Wearable(asset);
                        return(1);
                    }
                    catch
                    {
                        return(0);
                    }

                case AssetType.Gesture:
                    try
                    {
                        new Gesture(asset);
                        return(1);
                    }
                    catch
                    {
                        return(0);
                    }

                case AssetType.Landmark:
                    try
                    {
                        new Landmark(asset);
                        return(1);
                    }
                    catch
                    {
                        return(0);
                    }

                case AssetType.Mesh:
                    try
                    {
                        new LLMesh(asset);
                        return(1);
                    }
                    catch
                    {
                        return(0);
                    }

                case AssetType.Notecard:
                    try
                    {
                        new Notecard(asset);
                        return(1);
                    }
                    catch
                    {
                        return(0);
                    }

                case AssetType.Object:
                    try
                    {
                        ObjectXML.FromXml(asset.InputStream, instance.Part.Owner);
                        return(1);
                    }
                    catch
                    {
                        return(0);
                    }

                case AssetType.Texture:
                    try
                    {
                        using (J2kImage.FromStream(asset.InputStream))
                        {
                        }
                        return(1);
                    }
                    catch
                    {
                        return(0);
                    }

                default:
                    m_Log.WarnFormat("Testing asset type {0} not supported", asset.Type.ToString());
                    return(0);
                }
            }
        }
Beispiel #14
0
        internal static void DisplayXML(ListBox ListBox1, ObjectXML table)
        {
            ListBox1.Items.Clear();

            StackPanel panel1 = new StackPanel();
            panel1.Orientation = Orientation.Horizontal;

            for (int col = 0; col < table.colNum; col++)
            {
                Button button = new Button();
                Coords coords= new Coords(0, col);

                button.Name = "field" + '_' + (col + 1).ToString() + '_' + 0.ToString();
                button.Content = table.header[coords.GetHashCode()].headerCellHeader;
                button.Height = 30;
                button.Width = 150;
                button.Click += EditHeaderClick;

                getRes(button);

                button.Background=Brushes.LightGray;
                button.BorderBrush = Brushes.Black;

                panel1.Children.Add(button);
            }

            ListBox1.Items.Add(panel1);

            for (int row=1; row < table.rowNum; row++)
            {

                StackPanel panel = new StackPanel();
                panel.Orientation = Orientation.Horizontal;
                for (int col = 0; col < table.colNum; col++)
                {
                    Button button = new Button();
                    Coords coords = new Coords(row, col);

                    button.Name = "field"+'_'+(col+1).ToString() + '_'+row.ToString();
                    button.Content = table.cells[coords.GetHashCode()].tabCellParametr;
                    button.Height = 30;
                    button.Width = 150;
                    button.Click += EditCellClick;

                    getRes(button);

                    button.Background = Brushes.LightGray;
                    button.BorderBrush = Brushes.Black;

                    panel.Children.Add(button);

                }

                ListBox1.Items.Add(panel);
            }
        }
Beispiel #15
0
        internal static ObjectXML ReadXml(string FileName)
        {
            ObjectXML table = new ObjectXML();

            table.header = ReadXMLHeader(FileName);
            table.cells = ReadXMLCells(FileName);

            table.colNum = table.header.Count;
            table.rowNum = (table.cells.Count / table.header.Count) + 1;

            return table;
        }
Beispiel #16
0
        public static void DelRow(ObjectXML objectXML)
        {
            if (objectXML.rowNum > 2)
            {
                for (int i = 0; i < objectXML.colNum; i++)
                {
                    objectXML.cells.Remove(new Coords(objectXML.rowNum - 1, i).GetHashCode());
                }

                objectXML.rowNum--;

                MainWindow.objectXML = objectXML;
            }
        }
Beispiel #17
0
        public static void DelCol(ObjectXML objectXML)
        {
            if (objectXML.colNum>1){
                Coords temp = new Coords(0, objectXML.colNum - 1);

                objectXML.header.Remove(temp.GetHashCode());

                for (int i = 1; i < objectXML.rowNum; i++)
                {
                    objectXML.cells.Remove(new Coords(i, objectXML.colNum - 1).GetHashCode());
                }

                objectXML.colNum--;

                MainWindow.objectXML = objectXML;
            }
        }
Beispiel #18
0
        public static void EditHeaderClick(object sender, RoutedEventArgs e)
        {
            Coords t = new Coords();
            t = GetCoords((sender as Button).Name.ToString());
            EditHeaderCell w = new EditHeaderCell();
            ObjectXML xml = new ObjectXML();
            xml = MainWindow.GetObjectXML();
            HeaderCell cell = xml.header[t.GetHashCode()];

            OpenEditHeaderCellWindow(w, cell,t);
        }
        private void AttachFromInventory(AssetData data, UUID itemID)
        {
            List <ObjectGroup> objgroups;

#if DEBUG
            m_Log.DebugFormat("Deserializing object asset {0} for agent {1} {2} ({3})", data.ID, NamedOwner.FirstName, NamedOwner.LastName, NamedOwner.ID);
#endif
            try
            {
                objgroups = ObjectXML.FromAsset(data, Owner);
            }
            catch (Exception e)
            {
                m_Log.WarnFormat("Deserialization error for object asset {0} for agent {1} {2} ({3}): {4}: {5}",
                                 data.ID, NamedOwner.FirstName, NamedOwner.LastName, NamedOwner.ID, e.GetType().FullName, e.ToString());
                return;
            }

            if (objgroups.Count != 1)
            {
                return;
            }

            ObjectGroup grp = objgroups[0];

            foreach (ObjectPart part in grp.Values)
            {
                if (part.Shape.PCode == PrimitiveCode.Grass ||
                    part.Shape.PCode == PrimitiveCode.Tree ||
                    part.Shape.PCode == PrimitiveCode.NewTree)
                {
                    return;
                }
            }

            AttachmentPoint attachAt = grp.AttachPoint;

            if (attachAt == AttachmentPoint.NotAttached)
            {
                grp.AttachPoint = AttachmentPoint.LeftHand;
                grp.AttachedPos = Vector3.Zero;
                grp.AttachedRot = Quaternion.Identity;
            }

            grp.FromItemID       = itemID;
            grp.IsAttached       = true;
            grp.Position         = grp.AttachedPos;
            grp.Rotation         = grp.AttachedRot;
            grp.IsChangedEnabled = true;

#if DEBUG
            m_Log.DebugFormat("Adding attachment asset {0} at {4} for agent {1} {2} ({3})", data.ID, NamedOwner.FirstName, NamedOwner.LastName, NamedOwner.ID, grp.AttachPoint.ToString());
#endif
            SceneInterface scene = CurrentScene;
            try
            {
                scene.Add(grp);
                Attachments.Add(grp.AttachPoint, grp);
            }
            catch
            {
                return;
            }
        }
Beispiel #20
0
            public override void AssetTransferComplete()
            {
                AssetData          data;
                List <ObjectGroup> objgroups;

                try
                {
                    data = m_Scene.AssetService[AssetID];
                }
                catch (Exception e)
                {
                    m_Log.Error(string.Format("Failed to rez attachment from asset {0}", AssetID), e);
                    SendAlertMessage("ALERT: CantFindObject");
                    return;
                }

#if DEBUG
                m_Log.DebugFormat("Deserializing object asset {0} for agent {1}", data.ID, m_RezzingAgent.ToString());
#endif
                try
                {
                    objgroups = ObjectXML.FromAsset(data, m_RezzingAgent);
                }
                catch (Exception e)
                {
                    m_Log.WarnFormat("Deserialization error for object asset {0} for agent {1}: {2}: {3}",
                                     data.ID, m_RezzingAgent.ToString(), e.GetType().FullName, e.ToString());
                    SendAlertMessage("ALERT: InvalidObjectParams");
                    return;
                }

                if (objgroups.Count != 1)
                {
                    SendAlertMessage("ALERT: InvalidObjectParams");
                    return;
                }

                ObjectGroup grp = objgroups[0];

                bool attachPointChanged = false;

                foreach (var part in grp.Values)
                {
                    if (part.Shape.PCode == PrimitiveCode.Grass ||
                        part.Shape.PCode == PrimitiveCode.Tree ||
                        part.Shape.PCode == PrimitiveCode.NewTree)
                    {
                        SendAlertMessage("ALERT: WhyAreYouTryingToWearShrubbery");
                        return;
                    }
                }

                var attachAt = m_AttachPoint & AttachmentPoint.PositionMask;
                if (attachAt != AttachmentPoint.Default && attachAt != grp.AttachPoint)
                {
                    grp.AttachedPos    = Vector3.Zero;
                    grp.AttachedRot    = Quaternion.Identity;
                    attachPointChanged = true;
                }

                if (attachAt == AttachmentPoint.Default)
                {
                    attachAt = grp.AttachPoint;

                    if (attachAt == AttachmentPoint.NotAttached)
                    {
                        grp.AttachPoint = AttachmentPoint.LeftHand;
                        grp.AttachedPos = Vector3.Zero;
                        grp.AttachedRot = Quaternion.Identity;
                    }
                }

                grp.Owner            = m_RezzingAgent;
                grp.FromItemID       = m_SourceItem.ID;
                grp.IsAttached       = true;
                grp.Position         = grp.AttachedPos;
                grp.Rotation         = grp.AttachedRot;
                grp.IsChangedEnabled = true;

                if (attachPointChanged)
                {
                    grp.AttachPoint = attachAt;
                }

#if DEBUG
                m_Log.DebugFormat("Adding attachment asset {0} at {4} for agent {1}", data.ID, m_RezzingAgent.ToString());
#endif
                try
                {
                    m_Scene.RezObject(grp, m_RezzingAgent, m_SourceItem);
                    m_AttachmentsList.Add(grp.AttachPoint, grp);
                }
                catch
                {
                    SendAlertMessage("ALERT: RezAttemptFailed");
                    return;
                }
                grp.PostEvent(new AttachEvent {
                    ObjectID = grp.Owner.ID
                });
            }
Beispiel #21
0
        public static void SaveCell(EditTableCell w,ObjectXML objectXML)
        {
            TabCell t = new TabCell(
                w.AlignField.Text,
                w.PrecisionField.Text,
                w.ParametrField.Text);

            objectXML.cells[new Coords(int.Parse(w.row.Text), int.Parse(w.col.Text)).GetHashCode()] = t;

            MainWindow.objectXML = objectXML;

            save();
        }
Beispiel #22
0
        internal static void DisplayXML(ListBox ListBox1, ObjectXML table)
        {
            ListBox1.Items.Clear();

            StackPanel panel1 = new StackPanel();
            panel1.Orientation = Orientation.Horizontal;
            ListBox1.VerticalAlignment = VerticalAlignment.Center;
            ListBox1.HorizontalAlignment = HorizontalAlignment.Center;

            for (int col = 0; col < table.colNum; col++)
            {
                Button button = new Button();
                Coords coords = new Coords(0, col);

                button.Name = "field" + '_' + (col + 1).ToString() + '_' + 0.ToString();
                button.DataContext = MainWindow.objectXML.header[coords.GetHashCode()];
                button.SetBinding(Button.ContentProperty, new Binding("headerCellHeader"));
                button.SetBinding(Button.HeightProperty, new Binding("headerCellHeight"));
                button.SetBinding(Button.WidthProperty, new Binding("headerCellWidth"));
                button.SetBinding(Button.FontSizeProperty, new Binding("headerCellFontSize"));

                button.Click += EditHeaderClick;
                button.Foreground = Brushes.Black;

                AlignChange(ref button, coords);
                getRes(button);

                button.Padding = new Thickness(5, 0, 5, 0);
                button.Background = Brushes.LightGray;
                button.BorderBrush = Brushes.Black;

                if (coords.Equals(MainWindow.LastActiveCoords)) button.Background = Brushes.LightSkyBlue;

                panel1.Children.Add(button);
            }

            ListBox1.Items.Add(panel1);

            for (int row = 1; row < table.rowNum; row++)
            {

                StackPanel panel = new StackPanel();
                panel.Orientation = Orientation.Horizontal;
                for (int col = 0; col < table.colNum; col++)
                {
                    Button button = new Button();
                    Coords coords = new Coords(row, col);
                    Binding bindParam = new Binding();
                    bindParam.Source = MainWindow.objectXML.cells[coords.GetHashCode()];
                    bindParam.Path = new PropertyPath("tabCellParametr");
                    button.Name = "field" + '_' + (col + 1).ToString() + '_' + row.ToString();
                    button.SetBinding(Button.ContentProperty,bindParam);
                    button.DataContext = MainWindow.objectXML.header[new Coords(0, col).GetHashCode()];
                    button.SetBinding(Button.HeightProperty, new Binding("headerCellHeight"));
                    button.SetBinding(Button.WidthProperty, new Binding("headerCellWidth"));
                    button.SetBinding(Button.FontSizeProperty, new Binding("headerCellFontSize"));
                    button.Foreground = Brushes.Black;
                    button.Padding = new Thickness(5, 0, 5, 0);
                    button.Click += EditCellClick;
                    getRes(button);
                    AlignChange(ref button, coords);

                    button.Background = Brushes.LightGray;
                    button.BorderBrush = Brushes.Black;

                    if (coords.Equals(MainWindow.LastActiveCoords)) button.Background = Brushes.LightSkyBlue;

                    panel.Children.Add(button);
                }

                ListBox1.Items.Add(panel);
            }
        }
        public static void Load(
            SceneList scenes,
            SceneInterface scene,
            LoadOptions options,
            Stream inputFile,
            TTY io = null)
        {
            var currentLoadState = CurrentOarLoadState.Unknown;

            using (var gzipStream = new GZipStream(inputFile, CompressionMode.Decompress))
            {
                using (var reader = new TarArchiveReader(gzipStream))
                {
                    var baseLoc = new GridVector(0, 0);
                    if (scene != null)
                    {
                        baseLoc = scene.GridPosition;
                    }

                    var  regionSize     = new GridVector(256, 256);
                    var  regionMapping  = new Dictionary <string, ArchiveXmlLoader.RegionInfo>();
                    var  regionInfos    = new List <ArchiveXmlLoader.RegionInfo>();
                    bool parcelsCleared = false;
                    var  load_sogs      = new List <ObjectGroup>();

                    for (; ;)
                    {
                        TarArchiveReader.Header header;
                        try
                        {
                            header = reader.ReadHeader();
                        }
                        catch (TarArchiveReader.EndOfTarException)
                        {
                            if ((options & LoadOptions.Merge) == 0 && scene != null)
                            {
                                scene.ClearObjects();
                            }

                            AddObjects(scene, load_sogs, options);
                            return;
                        }

                        if (header.FileType == TarFileType.File)
                        {
                            if (header.FileName == "archive.xml")
                            {
                                ArchiveXmlLoader.RegionInfo rinfo = ArchiveXmlLoader.LoadArchiveXml(new ObjectXmlStreamFilter(reader), regionInfos);

                                regionSize = rinfo.RegionSize;
                                foreach (ArchiveXmlLoader.RegionInfo reginfo in regionInfos)
                                {
                                    regionMapping.Add(reginfo.Path, reginfo);
                                }
                                if (regionInfos.Count != 0 && scene != null)
                                {
                                    throw new MultiRegionOARLoadingTriedOnRegionException();
                                }
                                else if (regionInfos.Count == 0 && scene == null)
                                {
                                    throw new OARLoadingTriedWithoutSelectedRegionException();
                                }
                            }
                            else if (header.FileName.StartsWith("assets/"))
                            {
                                if ((options & LoadOptions.NoAssets) == 0)
                                {
                                    ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Assets, io);
                                    /* Load asset */
                                    AssetData ad = reader.LoadAsset(header, scene.Owner);
                                    if (!scene.AssetService.Exists(ad.ID))
                                    {
                                        scene.AssetService.Store(ad);
                                    }
                                }
                            }
                            else
                            {
                                if (header.FileName.StartsWith("regions/"))
                                {
                                    ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Region, io);
                                    if ((options & LoadOptions.Merge) == 0 && scene != null)
                                    {
                                        scene.ClearObjects();
                                    }

                                    if (scene != null)
                                    {
                                        AddObjects(scene, load_sogs, options);
                                    }

                                    string[] pcomps = header.FileName.Split(new char[] { '/' }, 3);
                                    if (pcomps.Length < 3)
                                    {
                                        throw new OARFormatException();
                                    }
                                    string regionname = pcomps[1];
                                    header.FileName = pcomps[2];
                                    regionSize      = regionMapping[regionname].RegionSize;
                                    scene           = scenes[regionMapping[regionname].ID];
                                    parcelsCleared  = false;
                                }

                                if (header.FileName.StartsWith("objects/"))
                                {
                                    ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Objects, io);
                                    /* Load objects */
                                    List <ObjectGroup>        sogs;
                                    XmlDeserializationOptions xmloptions = XmlDeserializationOptions.ReadKeyframeMotion;
                                    if ((options & LoadOptions.PersistUuids) != 0)
                                    {
                                        xmloptions |= XmlDeserializationOptions.RestoreIDs;
                                    }
                                    try
                                    {
                                        sogs = ObjectXML.FromXml(reader, scene.Owner, xmloptions);
                                    }
                                    catch (Exception e)
                                    {
                                        throw new OARLoadingErrorException("Failed to load sog " + header.FileName, e);
                                    }

                                    foreach (ObjectGroup sog in sogs)
                                    {
                                        if (sog.Owner.ID == UUID.Zero)
                                        {
                                            sog.Owner = scene.Owner;
                                        }
                                    }
                                    load_sogs.AddRange(sogs);
                                }
                                else if (header.FileName.StartsWith("terrains/"))
                                {
                                    ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Terrain, io);
                                    /* Load terrains */
                                    if ((options & LoadOptions.Merge) == 0)
                                    {
                                        scene.Terrain.AllPatches = TerrainLoader.LoadStream(reader, (int)regionSize.X, (int)regionSize.Y);
                                        scene.StoreTerrainAsDefault();
                                    }
                                }
                                else if (header.FileName.StartsWith("landdata/"))
                                {
                                    ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Parcels, io);
                                    /* Load landdata */
                                    if ((options & LoadOptions.Merge) == 0)
                                    {
                                        if (!parcelsCleared)
                                        {
                                            scene.ClearParcels();
                                            parcelsCleared = true;
                                        }
                                        var        whiteList = new List <ParcelAccessEntry>();
                                        var        blackList = new List <ParcelAccessEntry>();
                                        ParcelInfo pinfo     = ParcelLoader.GetParcelInfo(new ObjectXmlStreamFilter(reader), regionSize, whiteList, blackList);
                                        if (pinfo.Owner.ID == UUID.Zero)
                                        {
                                            pinfo.Owner = scene.Owner;
                                        }
                                        if ((options & LoadOptions.PersistUuids) == LoadOptions.PersistUuids)
                                        {
                                            ParcelInfo check;
                                            if (scene.Parcels.TryGetValue(pinfo.ID, out check))
                                            {
                                                pinfo.ID = UUID.Random;
                                            }
                                        }
                                        else
                                        {
                                            pinfo.ID = UUID.Random;
                                        }
                                        scene.AddParcel(pinfo);
                                        scene.Parcels.WhiteList.Remove(scene.ID, pinfo.ID);
                                        scene.Parcels.BlackList.Remove(scene.ID, pinfo.ID);
                                        foreach (ParcelAccessEntry pae in whiteList)
                                        {
                                            scene.Parcels.WhiteList.Store(pae);
                                        }
                                        foreach (ParcelAccessEntry pae in blackList)
                                        {
                                            scene.Parcels.BlackList.Store(pae);
                                        }
                                    }
                                }
                                else if (header.FileName.StartsWith("settings/") && ((options & LoadOptions.Merge) == 0))
                                {
                                    ShowOarLoadState(ref currentLoadState, CurrentOarLoadState.Parcels, io);
                                    /* Load settings */
                                    RegionSettingsLoader.LoadRegionSettings(new ObjectXmlStreamFilter(reader), scene);
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #24
0
        public static UUID GenerateNextOwnerAsset(this AssetServiceInterface assetService, UUID firstLevelAssetID)
        {
            var assetIDs       = new List <UUID>();
            var replaceAssets  = new Dictionary <UUID, UUID>();
            var objectAssetIDs = new List <UUID>();

            assetIDs.Add(firstLevelAssetID);
            int pos = 0;

            while (pos < assetIDs.Count)
            {
                UUID          assetid = assetIDs[pos++];
                AssetMetadata objmeta;
                if (assetService.Metadata.TryGetValue(assetid, out objmeta))
                {
                    if (objmeta.Type == AssetType.Object)
                    {
                        if (!objectAssetIDs.Contains(assetid))
                        {
                            objectAssetIDs.Add(assetid);
                        }
                        assetIDs.AddRange(ObjectReferenceDecoder.GetReferences(assetService[assetid]));
                        if (!replaceAssets.ContainsKey(assetid))
                        {
                            replaceAssets.Add(assetid, UUID.Random);
                        }
                    }
                    else if (objmeta.Type == AssetType.Notecard)
                    {
                        if (!objectAssetIDs.Contains(assetid))
                        {
                            objectAssetIDs.Add(assetid);
                        }
                        var nc = new Notecard(assetService[assetid]);
                        foreach (NotecardInventoryItem item in nc.Inventory.Values)
                        {
                            if ((item.AssetType == AssetType.Object || item.AssetType == AssetType.Notecard) &&
                                !objectAssetIDs.Contains(item.AssetID))
                            {
                                objectAssetIDs.Add(item.AssetID);
                            }
                        }
                        assetIDs.InsertRange(0, nc.References);
                        if (!replaceAssets.ContainsKey(assetid))
                        {
                            replaceAssets.Add(assetid, UUID.Random);
                        }
                    }
                }
            }

            objectAssetIDs.Reverse();
            foreach (UUID objectid in objectAssetIDs)
            {
                AssetData data;
                AssetData newAsset;
                if (assetService.TryGetValue(objectid, out data))
                {
                    switch (data.Type)
                    {
                    case AssetType.Object:
                        List <ObjectGroup> grps = ObjectXML.FromAsset(data, UGUI.Unknown);
                        foreach (ObjectGroup grp in grps)
                        {
                            foreach (ObjectPart part in grp.Values)
                            {
                                foreach (ObjectPartInventoryItem item in part.Inventory.Values)
                                {
                                    if (item.NextOwnerAssetID == UUID.Zero)
                                    {
                                        UUID replaceAssetID;
                                        part.Inventory.SetNextOwnerAssetID(
                                            item.ID,
                                            replaceAssets.TryGetValue(item.AssetID, out replaceAssetID) ? replaceAssetID : item.AssetID);
                                    }
                                }
                            }
                        }

                        newAsset = (grps.Count == 1) ?
                                   grps[0].Asset(UGUI.Unknown, XmlSerializationOptions.AdjustForNextOwner | XmlSerializationOptions.WriteXml2) :
                                   grps.Asset(UGUI.Unknown, XmlSerializationOptions.AdjustForNextOwner | XmlSerializationOptions.WriteXml2);

                        newAsset.ID         = replaceAssets[objectid];
                        newAsset.CreateTime = data.CreateTime;
                        assetService.Store(newAsset);
                        break;

                    case AssetType.Notecard:
                        var nc = new Notecard(data);
                        foreach (NotecardInventoryItem item in nc.Inventory.Values)
                        {
                            UUID replace;
                            if (replaceAssets.TryGetValue(item.AssetID, out replace))
                            {
                                item.AssetID = replace;
                            }
                            break;
                        }
                        break;

                    default:
                        break;
                    }
                }
            }

            UUID finalAssetID;

            return(replaceAssets.TryGetValue(firstLevelAssetID, out finalAssetID) ? finalAssetID : firstLevelAssetID);
        }
Beispiel #25
0
        public static void AddRow(ObjectXML objectXML, Coords LastActive)
        {
            if (objectXML.rowNum < MainWindow.MaxRow)
            {
                for (int i = 0; i < objectXML.colNum; i++)
                {
                    Coords t = new Coords(objectXML.rowNum, i);
                    objectXML.cells.Add(t.GetHashCode(), new TabCell());
                }

                objectXML.rowNum++;

                for (int row = objectXML.rowNum - 1; row > LastActive.rowCoord; row--)
                {
                    for (int col = 0; col < objectXML.colNum; col++)
                    {
                        if (row > 1)
                        {
                            objectXML.cells[new Coords(row, col).GetHashCode()] = objectXML.cells[new Coords(row - 1, col).GetHashCode()];
                        }
                    }
                }
                for (int col = 0; col < objectXML.colNum; col++)
                {
                    objectXML.cells[new Coords(LastActive.rowCoord + 1, col).GetHashCode()] = new TabCell();
                }

                MainWindow.objectXML = objectXML;
            }
        }
Beispiel #26
0
        public static void SaveHeader(EditHeaderCell w, ObjectXML objectXML)
        {
            HeaderCell t = new HeaderCell(
                Math.Abs(int.Parse(w.HeightField.Text)),
                Math.Abs(int.Parse(w.WidthField.Text)),
                Math.Abs(int.Parse(w.FontsizeField.Text)),
                w.NameField.Text,
                w.AlignField.Text,
                w.HeaderField.Text);

            objectXML.header[new Coords(int.Parse(w.row.Text), int.Parse(w.col.Text)).GetHashCode()] = t;

            MainWindow.objectXML = objectXML;

            save();
        }