-
Notifications
You must be signed in to change notification settings - Fork 92
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix editor can't copy/parse Hold correctly
- Loading branch information
1 parent
334db5c
commit 83a8820
Showing
3 changed files
with
758 additions
and
710 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,96 +1,120 @@ | ||
using OngekiFumenEditor.Base.Attributes; | ||
using OngekiFumenEditor.Base.OngekiObjects.Lane.Base; | ||
using System; | ||
using System.Collections.Generic; | ||
|
||
namespace OngekiFumenEditor.Base.OngekiObjects | ||
{ | ||
public class Hold : OngekiMovableObjectBase, ILaneDockableChangable, ICriticalableObject | ||
{ | ||
private HoldEnd holdEnd; | ||
|
||
public bool IsWallHold => ReferenceLaneStart?.IsWallLane ?? false; | ||
|
||
private bool isCritical = false; | ||
public bool IsCritical | ||
{ | ||
get { return isCritical; } | ||
set | ||
{ | ||
isCritical = value; | ||
NotifyOfPropertyChange(() => IDShortName); | ||
NotifyOfPropertyChange(() => IsCritical); | ||
} | ||
} | ||
|
||
private LaneStartBase referenceLaneStart = default; | ||
public LaneStartBase ReferenceLaneStart | ||
{ | ||
get { return referenceLaneStart; } | ||
set | ||
{ | ||
referenceLaneStart = value; | ||
NotifyOfPropertyChange(() => ReferenceLaneStart); | ||
NotifyOfPropertyChange(() => ReferenceLaneStrId); | ||
} | ||
} | ||
|
||
[ObjectPropertyBrowserShow] | ||
[ObjectPropertyBrowserAlias("RefLaneId")] | ||
public int ReferenceLaneStrId => ReferenceLaneStart?.RecordId ?? -1; | ||
|
||
private int? referenceLaneStrIdManualSet = default; | ||
[ObjectPropertyBrowserShow] | ||
[ObjectPropertyBrowserTipText("ObjectLaneGroupId")] | ||
[ObjectPropertyBrowserAlias("SetRefLaneId")] | ||
public int? ReferenceLaneStrIdManualSet | ||
{ | ||
get => referenceLaneStrIdManualSet; | ||
set | ||
{ | ||
referenceLaneStrIdManualSet = value; | ||
NotifyOfPropertyChange(() => ReferenceLaneStrIdManualSet); | ||
referenceLaneStrIdManualSet = default; | ||
} | ||
} | ||
|
||
public HoldEnd HoldEnd => holdEnd; | ||
|
||
public TGrid EndTGrid => HoldEnd?.TGrid ?? TGrid; | ||
|
||
public override string IDShortName => IsCritical ? "CHD" : "HLD"; | ||
|
||
public void SetHoldEnd(HoldEnd end) | ||
{ | ||
if (holdEnd is not null) | ||
holdEnd.PropertyChanged -= HoldEnd_PropertyChanged; | ||
if (end is not null) | ||
end.PropertyChanged += HoldEnd_PropertyChanged; | ||
|
||
holdEnd = end; | ||
|
||
if (end is not null) | ||
{ | ||
end.RefHold?.SetHoldEnd(null); | ||
end.RefHold = this; | ||
} | ||
} | ||
|
||
private void HoldEnd_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) | ||
{ | ||
switch (e.PropertyName) | ||
{ | ||
case nameof(HoldEnd.TGrid): | ||
NotifyOfPropertyChange(nameof(EndTGrid)); | ||
break; | ||
default: | ||
break; | ||
} | ||
} | ||
|
||
public override IEnumerable<IDisplayableObject> GetDisplayableObjects() | ||
{ | ||
yield return this; | ||
yield return HoldEnd; | ||
} | ||
} | ||
public class Hold : OngekiMovableObjectBase, ILaneDockableChangable, ICriticalableObject | ||
{ | ||
private HoldEnd holdEnd; | ||
|
||
public bool IsWallHold => ReferenceLaneStart?.IsWallLane ?? false; | ||
|
||
private bool isCritical = false; | ||
public bool IsCritical | ||
{ | ||
get { return isCritical; } | ||
set | ||
{ | ||
isCritical = value; | ||
NotifyOfPropertyChange(() => IDShortName); | ||
NotifyOfPropertyChange(() => IsCritical); | ||
} | ||
} | ||
|
||
private LaneStartBase referenceLaneStart = default; | ||
public LaneStartBase ReferenceLaneStart | ||
{ | ||
get { return referenceLaneStart; } | ||
set | ||
{ | ||
referenceLaneStart = value; | ||
NotifyOfPropertyChange(() => ReferenceLaneStart); | ||
NotifyOfPropertyChange(() => ReferenceLaneStrId); | ||
|
||
HoldEnd?.RedockXGrid(); | ||
} | ||
} | ||
|
||
[ObjectPropertyBrowserShow] | ||
[ObjectPropertyBrowserAlias("RefLaneId")] | ||
public int ReferenceLaneStrId => ReferenceLaneStart?.RecordId ?? -1; | ||
|
||
private int? referenceLaneStrIdManualSet = default; | ||
[ObjectPropertyBrowserShow] | ||
[ObjectPropertyBrowserTipText("ObjectLaneGroupId")] | ||
[ObjectPropertyBrowserAlias("SetRefLaneId")] | ||
public int? ReferenceLaneStrIdManualSet | ||
{ | ||
get => referenceLaneStrIdManualSet; | ||
set | ||
{ | ||
referenceLaneStrIdManualSet = value; | ||
NotifyOfPropertyChange(() => ReferenceLaneStrIdManualSet); | ||
referenceLaneStrIdManualSet = default; | ||
} | ||
} | ||
|
||
public HoldEnd HoldEnd => holdEnd; | ||
|
||
public TGrid EndTGrid => HoldEnd?.TGrid ?? TGrid; | ||
|
||
public override string IDShortName => IsCritical ? "CHD" : "HLD"; | ||
|
||
public void SetHoldEnd(HoldEnd end) | ||
{ | ||
if (holdEnd is not null) | ||
holdEnd.PropertyChanged -= HoldEnd_PropertyChanged; | ||
if (end is not null) | ||
end.PropertyChanged += HoldEnd_PropertyChanged; | ||
|
||
holdEnd = end; | ||
|
||
if (end is not null) | ||
{ | ||
end.RefHold?.SetHoldEnd(null); | ||
end.RefHold = this; | ||
|
||
end.RedockXGrid(); | ||
} | ||
} | ||
|
||
private void HoldEnd_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) | ||
{ | ||
switch (e.PropertyName) | ||
{ | ||
case nameof(HoldEnd.TGrid): | ||
NotifyOfPropertyChange(nameof(EndTGrid)); | ||
break; | ||
default: | ||
break; | ||
} | ||
} | ||
|
||
public override IEnumerable<IDisplayableObject> GetDisplayableObjects() | ||
{ | ||
yield return this; | ||
yield return HoldEnd; | ||
} | ||
|
||
public void CopyEntire(Hold from) | ||
{ | ||
//包括End一起复制了 | ||
Copy(from); | ||
|
||
if (from.HoldEnd != null) | ||
{ | ||
//create | ||
if (holdEnd is null) | ||
SetHoldEnd(new HoldEnd()); | ||
holdEnd.Copy(from.HoldEnd); | ||
} | ||
else | ||
{ | ||
//delete | ||
SetHoldEnd(default); | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,41 @@ | ||
using OngekiFumenEditor.Base.Attributes; | ||
using OngekiFumenEditor.Base.OngekiObjects.ConnectableObject; | ||
using OngekiFumenEditor.Base.OngekiObjects.Lane.Base; | ||
using OngekiFumenEditor.Utils; | ||
using System; | ||
|
||
namespace OngekiFumenEditor.Base.OngekiObjects | ||
{ | ||
public class HoldEnd : OngekiMovableObjectBase, ILaneDockable | ||
{ | ||
public override string IDShortName => "[HoldEnd]"; | ||
public class HoldEnd : OngekiMovableObjectBase, ILaneDockable | ||
{ | ||
public override string IDShortName => "[HoldEnd]"; | ||
|
||
private Hold refHold; | ||
public Hold RefHold | ||
{ | ||
get => refHold; | ||
internal set => Set(ref refHold, value); | ||
} | ||
private Hold refHold; | ||
public Hold RefHold | ||
{ | ||
get => refHold; | ||
internal set => Set(ref refHold, value); | ||
} | ||
|
||
[ObjectPropertyBrowserHide] | ||
public LaneStartBase ReferenceLaneStart | ||
{ | ||
get => RefHold?.ReferenceLaneStart; | ||
set { } | ||
} | ||
[ObjectPropertyBrowserHide] | ||
public LaneStartBase ReferenceLaneStart | ||
{ | ||
get => RefHold?.ReferenceLaneStart; | ||
set { } | ||
} | ||
|
||
[ObjectPropertyBrowserHide] | ||
public int ReferenceLaneStrId => ReferenceLaneStart?.RecordId ?? -1; | ||
[ObjectPropertyBrowserHide] | ||
public int ReferenceLaneStrId => ReferenceLaneStart?.RecordId ?? -1; | ||
|
||
internal int? CacheRecoveryHoldObjectID { get; set; } = null; | ||
} | ||
internal int? CacheRecoveryHoldObjectID { get; set; } = null; | ||
|
||
public void RedockXGrid() | ||
{ | ||
if (ReferenceLaneStart is LaneStartBase refLane) | ||
{ | ||
if (refLane.CalulateXGrid(TGrid) is XGrid xGrid) | ||
XGrid = xGrid; | ||
} | ||
} | ||
} | ||
} |
Oops, something went wrong.