コード例 #1
0
ファイル: LayoutEditorWindow.cs プロジェクト: Polymaker/sigen
 private void CleanupEditorsLayoutCache(SILayout removedLayout)
 {
     foreach (var editorPanel in dockPanel1.Contents.OfType <ILayoutEditorPanel>())
     {
         editorPanel.Editor.LayoutClosed(removedLayout);
     }
 }
コード例 #2
0
 public LayoutDocument(SILayout layout)
 {
     Layout                = layout;
     FilePath              = string.Empty;
     Layout.LayoutChanged += Layout_LayoutChanged;
     CurrentActionIndex    = -1;
 }
コード例 #3
0
        private static string GetFingerboardMarginDescription(SILayout layout, string changeName, PropertyChange propChange)
        {
            string specifedSide = string.Empty;

            switch (changeName)
            {
            case nameof(FingerboardMargin.LastFret):
                return($"{Localizations.Words_Margins} ({Localizations.FingerboardMarginProperty_LastFret}): {propChange.NewValue}");

            case nameof(FingerboardMargin.Bass):
                specifedSide = Localizations.FingerboardSide_Bass; break;

            case nameof(FingerboardMargin.Treble):
                specifedSide = Localizations.FingerboardSide_Treble; break;

            case nameof(FingerboardMargin.MarginAtNut):
                specifedSide = Localizations.FingerboardEnd_Nut; break;

            case nameof(FingerboardMargin.MarginAtBridge):
                specifedSide = Localizations.FingerboardEnd_Bridge; break;

            case nameof(FingerboardMargin.Edges):
                specifedSide = Localizations.Margins_Edges; break;
            }

            if (!string.IsNullOrEmpty(specifedSide))
            {
                return($"{Localizations.Words_Margins} ({specifedSide}): {propChange.NewValue}");
            }

            return($"{Localizations.Words_Margins}: {propChange.NewValue}");
        }
コード例 #4
0
ファイル: LayoutEditorWindow.cs プロジェクト: Polymaker/sigen
 private void SetEditorsActiveLayout(SILayout layout)
 {
     foreach (var editorPanel in dockPanel1.Contents.OfType <ILayoutEditorPanel>())
     {
         editorPanel.CurrentLayout = layout;
     }
 }
コード例 #5
0
ファイル: DxfLayoutExporter.cs プロジェクト: Polymaker/sigen
        public static void ExportLayout(string filename, SILayout layout, LayoutExportConfig options)
        {
            var exporter = new DxfLayoutExporter(layout, options);

            exporter.GenerateDocument();
            exporter.Document.Save(filename);
        }
コード例 #6
0
        private void BindLayout(SILayout layout)
        {
            if (_CurrentLayout != layout)
            {
                if (_CurrentLayout != null)
                {
                    CacheCurrentLayoutValues();
                }

                if (_CurrentLayout != null)
                {
                    _CurrentLayout.NumberOfStringsChanged -= CurrentLayout_NumberOfStringsChanged;
                    _CurrentLayout.LayoutUpdated          -= CurrentLayout_LayoutUpdated;
                }

                _CurrentLayout = layout;
                OnCurrentLayoutChanged();
                ReloadPropertyValues();

                if (_CurrentLayout != null)
                {
                    _CurrentLayout.NumberOfStringsChanged += CurrentLayout_NumberOfStringsChanged;
                    _CurrentLayout.LayoutUpdated          += CurrentLayout_LayoutUpdated;
                }

                if (layout == null)
                {
                    ClearLayoutCache(null);
                }
                else if (CachedLayoutData.ContainsKey(layout))
                {
                    RestoreCachedLayoutValues();
                }
            }
        }
コード例 #7
0
 internal void LayoutClosed(SILayout layout)
 {
     if (CachedLayoutData.ContainsKey(layout))
     {
         CachedLayoutData.Remove(layout);
     }
 }
コード例 #8
0
        public static string GetChangeDescription(SILayout layout, ILayoutChange change)
        {
            string changeDesc;

            if (change is BatchChange batchChange)
            {
                changeDesc = GetBatchDescription(layout, batchChange);
                if (!string.IsNullOrEmpty(changeDesc))
                {
                    return(changeDesc);
                }
            }
            else if (change is PropertyChange propertyChange)
            {
                changeDesc = GetPropertyDescription(layout, propertyChange);
                if (!string.IsNullOrEmpty(changeDesc))
                {
                    return(changeDesc);
                }
            }
            else if (change is CollectionChange collection)
            {
                changeDesc = GetCollectionDescription(layout, collection);
                if (!string.IsNullOrEmpty(changeDesc))
                {
                    return(changeDesc);
                }
            }
            return("Unnamed Change");
        }
コード例 #9
0
ファイル: LayoutEditorWindow.cs プロジェクト: Polymaker/sigen
        private void OpenDefaultLayout()
        {
            var defaultLayout = SILayout.GenerateDefaultLayout();
            var layoutDoc     = new LayoutDocument(defaultLayout);

            OpenLayoutAndActivate(layoutDoc);
        }
コード例 #10
0
ファイル: SvgLayoutExporter.cs プロジェクト: Polymaker/sigen
        private SvgLayoutExporter(SILayout layout, LayoutExportConfig options)
            : base(layout, options)
        {
            Layers = new Dictionary<string, SvgGroup>();

            var svgDPI = (PreciseDouble)96;
            PixelToCm = (PreciseDouble)2.54d / svgDPI;
            PointToCm = PixelToCm / 0.75;
        }
コード例 #11
0
        private static string GetCollectionDescription(SILayout layout, CollectionChange colChange)
        {
            if (colChange.ElementType == typeof(SIString))
            {
                return($"{Localizations.LayoutProperty_NumberOfStrings}: {colChange.CollectionCount}");
            }

            return(null);
        }
コード例 #12
0
 public virtual void ClearLayoutCache(SILayout layout)
 {
     if (layout == null)
     {
         CachedLayoutData.Clear();
     }
     else if (CachedLayoutData.ContainsKey(layout))
     {
         CachedLayoutData.Remove(layout);
     }
 }
コード例 #13
0
        public static string GenerateLayoutName(SILayout layout)
        {
            var keywords = new List <string>();

            keywords.Add($"{layout.NumberOfStrings} Strings");
            if (layout.ScaleLengthMode == ScaleLengthType.Dual)
            {
                keywords.Add("Multiscale");
            }
            keywords.Add("Fingerboard");
            keywords.Add("Layout");
            return(string.Join(" ", keywords));
        }
コード例 #14
0
ファイル: ScaleLengthEditor.cs プロジェクト: Polymaker/sigen
        private void FetchFretPositions()
        {
            int fretNum = CurrentLayout != null?CurrentLayout.Strings.Max(s => s.NumberOfFrets) : 24;

            if (fretNum + 2 != FretPositions.Count)
            {
                cboParallelFret.DataSource = null;
                FretPositions.Clear();
                FretPositions.Add(new FretPosition()
                {
                    FretNumber    = 0,
                    Name          = Localizations.FingerboardEnd_Nut,
                    PositionRatio = 0
                });

                for (int i = 1; i <= fretNum; i++)
                {
                    var ratio = 1d - SILayout.GetEqualTemperedFretPosition(i);
                    FretPositions.Add(new FretPosition()
                    {
                        FretNumber    = i,
                        Name          = $"{i}{i.GetSuffix()} {Localizations.Words_Fret}",
                        PositionRatio = ratio
                    });
                }

                FretPositions.Add(new FretPosition()
                {
                    FretNumber    = FretPositions.Count,
                    Name          = Localizations.FingerboardEnd_Bridge,
                    PositionRatio = 1
                });

                //FretPositions.Add(new FretPosition()
                //{
                //    FretNumber = -1,
                //    Name = "Custom",
                //    PositionRatio = -1
                //});

                cboParallelFret.DisplayMember = "Name";
                cboParallelFret.ValueMember   = "FretNumber";
                cboParallelFret.DataSource    = FretPositions;

                CalculateMaxCboItemWidth();
            }
        }
コード例 #15
0
        public static LayoutDocument Open(string filename, bool asTemplate = false)
        {
            var layout = SILayout.Load(filename);
            var file   = new LayoutDocument(layout);

            if (!asTemplate)
            {
                file.FilePath     = filename;
                file.DocumentName = Path.GetFileNameWithoutExtension(filename);
            }
            else if (!string.IsNullOrEmpty(layout.LayoutName))
            {
                file.DocumentName = layout.LayoutName;
            }

            return(file);
        }
コード例 #16
0
        private static string GetBatchDescription(SILayout layout, BatchChange batchChange)
        {
            switch (batchChange.Name)
            {
            case "NumberOfFrets":
            {
                var propChange = batchChange.ChangedProperties
                                 .FirstOrDefault(x => x.Property == nameof(SIString.NumberOfFrets));

                if (propChange != null && propChange.NewValue is int fretCount)
                {
                    return($"{Localizations.LayoutProperty_NumberOfFrets}: {fretCount}");
                }

                return(Localizations.LayoutProperty_NumberOfFrets);
            }

            case "AddStrings":
            case "RemoveStrings":
            {
                var lastChange = batchChange.LayoutChanges
                                 .OfType <CollectionChange>()
                                 .Where(x => x.ElementType == typeof(SIString))
                                 .LastOrDefault();

                if (lastChange != null)
                {
                    return($"{Localizations.LayoutProperty_NumberOfStrings}: {lastChange.CollectionCount}");
                }

                break;
            }
            }

            if (batchChange.Component != null)
            {
                var marginChange = batchChange.ChangedProperties.FirstOrDefault(x => x.Component is FingerboardMargin);
                if (marginChange != null)
                {
                    return(GetFingerboardMarginDescription(layout, batchChange.Name, marginChange));
                }
            }

            return(null);
        }
コード例 #17
0
 protected LayoutExporterBase(SILayout layout, LayoutExportConfig options)
 {
     Layout  = layout;
     Options = options;
 }
コード例 #18
0
        private static string GetPropertyDescription(SILayout layout, PropertyChange propChange)
        {
            if (propChange.Component != null)
            {
                switch (propChange.Component)
                {
                case ScaleLengthManager _:
                {
                    switch (propChange.Property)
                    {
                    case nameof(SingleScaleManager.Length):
                        return($"{Localizations.Words_ScaleLength}: {propChange.NewValue}");

                    case nameof(DualScaleManager.Bass):
                        return($"{Localizations.Words_ScaleLength} ({Localizations.FingerboardSide_Bass}): {propChange.NewValue}");

                    case nameof(DualScaleManager.Treble):
                        return($"{Localizations.Words_ScaleLength} ({Localizations.FingerboardSide_Treble}): {propChange.NewValue}");

                    case nameof(DualScaleManager.PerpendicularFretRatio):
                        if (propChange.NewValue is double fretRatio)
                        {
                            int    fretNumber = FretHelper.GetFretNumberFromRatio(fretRatio);
                            string fretName   = Localizations.Words_CustomRatio;
                            switch (fretNumber)
                            {
                            case 0:
                                fretName = Localizations.FingerboardEnd_Nut;
                                break;

                            case 1:
                                fretName = Localizations.FingerboardEnd_Bridge;
                                break;

                            default:
                                fretName = $"{fretNumber} {Localizations.Words_Fret}";
                                break;
                            }
                            return($"{Localizations.Words_PerpendicularFret}: {fretName}");
                        }
                        else
                        {
                            return($"{Localizations.Words_PerpendicularFret}");
                        }

                    default:
                        return($"{Localizations.Words_ScaleLength} {propChange.Property}: {propChange.NewValue}");
                    }
                }

                case StringSpacingManager _:
                {
                    switch (propChange.Property)
                    {
                    case nameof(StringSpacingManager.BridgeAlignment):
                        return($"{Localizations.StringSpacingProperty_BridgeAlignment}");

                    case nameof(StringSpacingManager.NutAlignment):
                        return($"{Localizations.StringSpacingProperty_NutAlignment}");

                    case nameof(StringSpacingSimple.BridgeSpacingMode):
                    case nameof(StringSpacingSimple.NutSpacingMode):

                    {
                        string propDesc = Localizations.StringSpacingProperty_SpacingMode;

                        string modeDesc = GetLocText($"StringSpacingMethod_{propChange.NewValue}");

                        int charIdx = modeDesc.IndexOf('(');
                        if (charIdx > 0)
                        {
                            modeDesc = modeDesc.Substring(0, charIdx).Trim();
                        }

                        string sideDesc = propChange.Property == nameof(StringSpacingSimple.BridgeSpacingMode) ?
                                          Localizations.FingerboardEnd_Bridge : Localizations.FingerboardEnd_Nut;

                        return($"{propDesc} ({sideDesc}): {modeDesc}");
                    }

                    case nameof(StringSpacingSimple.StringSpacingAtBridge):
                    case nameof(StringSpacingSimple.StringSpacingAtNut):
                    {
                        string propDesc = Localizations.StringSpacingProperty_Spacing;
                        string sideDesc = propChange.Property == nameof(StringSpacingSimple.StringSpacingAtBridge) ?
                                          Localizations.FingerboardEnd_Bridge : Localizations.FingerboardEnd_Nut;

                        return($"{propDesc} ({sideDesc}): {propChange.NewValue}");
                    }

                    default:
                        return($"String spacing {propChange.Property}: {propChange.NewValue}");
                    }
                }

                case FingerboardMargin _:
                    return(GetFingerboardMarginDescription(layout, propChange.Name, propChange));

                case SIString str:
                {
                    switch (propChange.Property)
                    {
                    case nameof(SIString.Gauge):
                    case nameof(SIString.PhysicalProperties) + "." + nameof(StringProperties.StringDiameter):
                        return($"{Localizations.StringProperty_Gauge} ({Localizations.Words_String} {str.Index + 1}): {propChange.NewValue}");

                    case nameof(SIString.StartingFret):
                        return($"{Localizations.StringProperty_StartingFret} ({Localizations.Words_String} {str.Index + 1}): {propChange.NewValue}");

                    case nameof(SIString.ScaleLength):
                        return($"{Localizations.Words_ScaleLength} ({Localizations.Words_String} {str.Index + 1}): {propChange.NewValue}");

                    case nameof(SIString.NumberOfFrets):
                        return($"{Localizations.LayoutProperty_NumberOfFrets} ({Localizations.Words_String} {str.Index + 1}): {propChange.NewValue}");
                    }

                    if (propChange.Property.StartsWith(nameof(SIString.PhysicalProperties)))
                    {
                        return(Localizations.StringProperties);
                    }
                    break;
                }
                }
            }
            else
            {
                switch (propChange.Property)
                {
                case nameof(SILayout.ScaleLengthMode):
                {
                    var modeStr = GetLocText($"ScaleLengthType_{propChange.NewValue}");
                    return($"{Localizations.LayoutProperty_ScaleLengthMode}: {modeStr}");
                }

                case nameof(SILayout.StringSpacingMode):
                {
                    var modeStr = GetLocText($"StringSpacingType_{propChange.NewValue}");
                    return($"{Localizations.LayoutProperty_StringSpacingMode}: {modeStr}");
                }

                case nameof(SILayout.LeftHanded):
                {
                    return(Localizations.Layout_LeftHanded);
                }
                    //case nameof(SILayout.NumberOfStrings):
                    //    return $"Number of strings: {pc.NewValue}";
                }
            }

            return(null);
        }
コード例 #19
0
ファイル: DxfLayoutExporter.cs プロジェクト: Polymaker/sigen
 private DxfLayoutExporter(SILayout layout, LayoutExportConfig options)
     : base(layout, options)
 {
     Layers          = new Dictionary <string, Layer>();
     ColorDictionary = new Dictionary <string, AciColor>();
 }