예제 #1
0
        protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
        {
            FrameworkElement element = ( FrameworkElement )container;
            PinRecord        Para    = ( PinRecord )item;

            return(Para.TreeLevel == 0 ? DevRecord : PinRecord);
        }
예제 #2
0
        private async Task PinRecord(PinRecord Record)
        {
            BookItem Book = await ItemProcessor.GetBookFromId(Record.Id);

            if (Book == null)
            {
                return;
            }

            TaskCompletionSource <bool> TCS = new TaskCompletionSource <bool>();
            BookLoader BL = new BookLoader(async(b) =>
            {
                if (b != null)
                {
                    string TileId = await PageProcessor.PinToStart(Book);
                    if (!string.IsNullOrEmpty(TileId))
                    {
                        PM.RegPin(b, TileId, false);
                    }
                }

                TCS.SetResult(true);
            });

            BL.Load(Book);
            await TCS.Task;
        }
예제 #3
0
        private void ShowContextMenu(object sender, RightTappedRoutedEventArgs e)
        {
            FrameworkElement Elem = ( FrameworkElement )sender;

            FlyoutBase.ShowAttachedFlyout(Elem);

            SelectedRecord = ( PinRecord )Elem.DataContext;
        }
예제 #4
0
        private PinRecord ReadPinRecord(BinaryReader reader, int size, ParameterCollection pinWideText, byte[] pinTextData, ParameterCollection pinSymbolLineWidth)
        {
            int recordType = (size >> 24);

            BeginContext($"Binary Record {recordType}");

            var pin = new PinRecord();

            pin.Record = reader.ReadInt32();
            AssertValue(nameof(pin.Record), pin.Record, 2);
            reader.ReadByte(); // TODO: unknown
            pin.OwnerPartId = reader.ReadInt16();
            reader.ReadByte(); // TODO: unknown
            pin.SymbolInnerEdge = (PinSymbol)reader.ReadByte();
            pin.SymbolOuterEdge = (PinSymbol)reader.ReadByte();
            pin.SymbolInside    = (PinSymbol)reader.ReadByte();
            pin.SymbolOutside   = (PinSymbol)reader.ReadByte();
            pin.SymbolLineWidth = LineWidth.Smallest;
            pin.Description     = ReadPascalShortString(reader);
            reader.ReadByte(); // TODO: unknown
            pin.Electrical      = (PinElectricalType)reader.ReadByte();
            pin.PinConglomerate = (PinConglomerateFlags)reader.ReadByte();
            pin.PinLength       = Utils.DxpFracToCoord(reader.ReadInt16(), 0);
            var locationX = Utils.DxpFracToCoord(reader.ReadInt16(), 0);
            var locationY = Utils.DxpFracToCoord(reader.ReadInt16(), 0);

            pin.Location   = new CoordPoint(locationX, locationY);
            pin.Color      = ColorTranslator.FromWin32(reader.ReadInt32());
            pin.Name       = ReadPascalShortString(reader);
            pin.Designator = ReadPascalShortString(reader);
            reader.ReadByte(); // TODO: unknown
            reader.ReadByte(); // TODO: unknown
            reader.ReadByte(); // TODO: unknown

            if (pinWideText != null)
            {
                pin.Description = pinWideText["DESC"].AsStringOrDefault(pin.Description);
                pin.Name        = pinWideText["NAME"].AsStringOrDefault(pin.Name);
                pin.Designator  = pinWideText["DESIG"].AsStringOrDefault(pin.Designator);
            }

            if (pinTextData != null)
            {
            }

            if (pinSymbolLineWidth != null)
            {
                pin.SymbolLineWidth = pinSymbolLineWidth["SYMBOL_LINEWIDTH"].AsEnumOrDefault(pin.SymbolLineWidth);
            }

            EndContext();

            return(pin);
        }
예제 #5
0
        private void RenderPinPrimitive(Graphics g, PinRecord pin)
        {
            var location = ScreenFromWorld(pin.Location.X, pin.Location.Y);

            g.TranslateTransform(location.X, location.Y);

            var direction = 1.0f;
            var displayNameHorizontalAlignment = StringAlignment.Far;
            var designatorHorizontalAlignment  = StringAlignment.Near;
            var penWidth = ScaleLineWidth(LineWidth.Small);

            using (var pen = CreatePen(pin.Color, penWidth, LineCap.Flat))
            {
                if (pin.PinConglomerate.HasFlag(PinConglomerateFlags.Rotated))
                {
                    g.RotateTransform(-90);
                }

                if (pin.PinConglomerate.HasFlag(PinConglomerateFlags.Flipped))
                {
                    direction = -1.0f;
                    displayNameHorizontalAlignment = StringAlignment.Near;
                    designatorHorizontalAlignment  = StringAlignment.Far;
                }

                var length = ScaleCoord(pin.PinLength) * direction;
                g.DrawLine(pen, -1.0f, 0.0f, length, 0.0f);
            }

            using (var brush = new SolidBrush(pin.Color))
                using (var font = CreateFont("Times New Roman", 10f, FontStyle.Regular))
                {
                    if (pin.PinConglomerate.HasFlag(PinConglomerateFlags.DisplayNameVisible))
                    {
                        var x           = ScalePixelLength(-5.0f) * direction;
                        var displayName = pin.Name.Replace(@"\", "");
                        DrawingUtils.DrawString(g, displayName, font, brush, x, ScalePixelLength(0.5),
                                                StringAlignmentKind.Default, displayNameHorizontalAlignment, StringAlignment.Center);
                        using (var pen = CreatePen(pin.Color, ScaleLineWidth(LineWidth.Small)))
                        {
                            DrawOverline(g, pin.Name, font, pen, x, ScalePixelLength(0.5),
                                         StringAlignmentKind.Default, displayNameHorizontalAlignment, StringAlignment.Center);
                        }
                    }

                    if (pin.PinConglomerate.HasFlag(PinConglomerateFlags.DesignatorVisible))
                    {
                        DrawingUtils.DrawString(g, pin.Designator, font, brush,
                                                ScalePixelLength(8.0f) * direction, 0,
                                                StringAlignmentKind.Extent, designatorHorizontalAlignment, StringAlignment.Far);
                    }
                }
        }
예제 #6
0
        private PinRecord ReadPinRecord(BinaryReader reader, int size)
        {
            int recordType = (size >> 24);

            BeginContext($"Binary Record {recordType}");

            var pin = new PinRecord();

            pin.Record = reader.ReadInt32();
            AssertValue(nameof(pin.Record), pin.Record, 2);
            reader.ReadByte(); // TODO: unknown
            pin.OwnerPartId = reader.ReadInt16();
            reader.ReadByte(); // TODO: unknown
            pin.SymbolInnerEdge = (PinSymbol)reader.ReadByte();
            pin.SymbolOuterEdge = (PinSymbol)reader.ReadByte();
            pin.SymbolInside    = (PinSymbol)reader.ReadByte();
            pin.SymbolOutside   = (PinSymbol)reader.ReadByte();
            pin.SymbolLineWidth = LineWidth.Smallest;
            pin.Description     = ReadPascalShortString(reader);
            reader.ReadByte(); // TODO: unknown
            pin.Electrical      = (PinElectricalType)reader.ReadByte();
            pin.PinConglomerate = (PinConglomerateFlags)reader.ReadByte();
            pin.PinLength       = Utils.DxpFracToCoord(reader.ReadInt16(), 0);
            var locationX = Utils.DxpFracToCoord(reader.ReadInt16(), 0);
            var locationY = Utils.DxpFracToCoord(reader.ReadInt16(), 0);

            pin.Location   = new CoordPoint(locationX, locationY);
            pin.Color      = ColorTranslator.FromWin32(reader.ReadInt32());
            pin.Name       = ReadPascalShortString(reader);
            pin.Designator = ReadPascalShortString(reader);
            reader.ReadByte(); // TODO: unknown
            reader.ReadByte(); // TODO: unknown
            reader.ReadByte(); // TODO: unknown

            EndContext();

            return(pin);
        }
예제 #7
0
        /// <summary>
        /// Instantiates a record according to its record type number.
        /// </summary>
        /// <param name="recordType">Integer representing the record type.</param>
        /// <returns>A new empty instance of a record primitive.</returns>
        private SchPrimitive CreateRecord(int recordType)
        {
            SchPrimitive record;

            switch (recordType)
            {
            case 1:
                record = new SchComponent();
                break;

            case 2:
                record = new PinRecord();
                break;

            case 3:
                record = new SymbolRecord();
                break;

            case 4:
                record = new TextStringRecord();
                break;

            case 5:
                record = new BezierRecord();
                break;

            case 6:
                record = new PolylineRecord();
                break;

            case 7:
                record = new PolygonRecord();
                break;

            case 8:
                record = new EllipseRecord();
                break;

            case 9:
                record = new PieChartRecord();
                break;

            case 10:
                record = new RoundedRectangleRecord();
                break;

            case 11:
                record = new EllipticalArcRecord();
                break;

            case 12:
                record = new ArcRecord();
                break;

            case 13:
                record = new LineRecord();
                break;

            case 14:
                record = new RectangleRecord();
                break;

            case 28:
            case 209:
                record = new TextFrameRecord();
                break;

            case 30:
                record = new ImageRecord();
                break;

            case 34:
                record = new Record34();
                break;

            case 41:
                record = new Record41();
                break;

            case 44:
                record = new Record44();
                break;

            case 45:
                record = new Record45();
                break;

            case 46:
                record = new Record46();
                break;

            case 48:
                record = new Record48();
                break;

            default:
                EmitWarning($"Record {recordType} not supported");
                record = new SchPrimitive();
                break;
            }

            return(record);
        }
예제 #8
0
 private void UpdatePinData()
 {
     SelectedRecord      = null;
     CurrRecords         = PM.GetPinRecords();
     PinList.ItemsSource = CurrRecords;
 }