Skip to content

Authoring Tools Framework 3.9 RELEASED

yiwami edited this page Feb 26, 2015 · 30 revisions

日本語訳は、英語に続く後半をご覧ください。

The Authoring Tools Framework (ATF) 3.9 Release has many improvements and bug fixes, reflecting six months of work and client contributions. There are several major feature additions and some breaking changes. See below for details.

Table of Contents

Top New Features

  • Added SimpleDomEditorWpf, a new WPF sample app that demonstrates WPF commands, docking, document handling, property editing, and a palette. See overview and programming discussion for more information.
  • ICommandClient implementors can now avoid being continually polled by the WinForms CommandService if they wish. This can be a large performance boost if the ICommandClient's CanDoCommand() method is expensive. Many of ATF's components now support this non-polling mechanism. See CommandInfo's EnableCheckCanDoEvent and OnCheckCanDo() methods.
  • TreeListControl: New very simple sample app that demonstrates the new TreeListControl, which combines a TreeControl with data editing and multiple columns. See overview and programming discussion for more information.
  • CircuitEditor: Can now hide unconnected pins on any circuit element or circuit group! There is a new “eye” toggle in the upper-right corner.

Compatibility with Windows 8 and 8.1

All of our sample apps appear to run correctly on Windows 8 and Windows 8.1. The only real issue that we are aware of is that the Direct2D performance has more variation when compared to Windows 7, and is generally worse, with Windows 8.1 performing better than 8 overall. We expect the performance to improve over time as newer drivers are released. Additionally, there is an intermittent failure of the automated functional tests where an automation service exception occurs and causes the test run to hang. This only applies to Windows 8/8.1, and all sample apps can be run manually with no issues.

Breaking Changes

  • Fixed misspelled function name in Atf.Gui.Wpf/Controls/PropertyEditing/PropertyGrid.cs: RebuildPopertyNodesImpl is now RebuildPropertyNodesImpl.
  • Renamed ISourceControlService.UpdateFileInfoCache() to UpdateCachedStatuses().
  • Added new DisplayName property to ICurve interface. DisplayName can be displayed for the curve in the list view in CurveEditor instead of Name. Users need to implement the DisplayName property. When DisplayName is not needed, the user must return null or empty string.
  • We made the SubCircuit, SubCircuitInstance, and CircuitDocument.SubCircuits obsolete, because they were only useful for the master sub-circuit feature. We did this because the master sub-circuit feature was never fully developed and was made obsolete by circuit groups and circuit group references. The CircuitEditor sample app will continue to load and save documents that have master sub-circuits, but editing and creating master sub-circuits is no longer possible. In a future release, we intend to demonstrate the use of LINQ-to-XML to transform a XML document, to convert old CircuitEditor documents. Using XLST files is another way to update XML documents from one version to another. Note that you can use a #pragma to disable warnings about using obsolete code as follows:
#pragma warning disable 618 //mastered sub-circuits are obsolete
private HashSet<Sce.Atf.Controls.Adaptable.Graphs.SubCircuit> m_usedSubCircuits;
#pragma warning restore 618
  • ICircuitElement has a new property, which gets a CircuitElementInfo object. This "info" object allows us to add settings to ICircuitElement without additional breaking changes in the future. We think it is very unlikely that any client has implemented the ICircuitElement interface themselves. If you did implement ICircuitElement yourself instead of using ATF's Element class, you will need to implement the ElementInfo property which simply returns a CircuitElementInfo object.
  • Removed the two WinGui sample apps (WpfApp and WinFormsApp). The new SimpleDomEditorWpf is a much better WPF sample than WpfApp, and WinFormsApp didn’t provide any benefit, since all our other samples use WinForms, too.

Detailed List of Changes by Category

Changes that have previously been pushed to GitHub are in italics.

Documentation:

  • Added missing source code comments for many new public types and members and updated ATF_API-Reference.chm with latest content.
  • Updated existing documents with a link to the ATF Programmer's Guide wiki, and added a new ATF_Programmer_Guide.doc that simply contains a link to the ATF Programmer's Guide wiki.
  • Updated images for various components in the ATF Programmer's Guide.
  • DomRecorder: Fixed the online help URL to go to GitHub.
Changes imported from GitHub:
  • Removed unused variables and fields, by integrating a GitHub pull request. Changed the corresponding ReSharper settings to errors, to help us identify these problems in the future. These compiler warnings break this user's Mono version of ATF on Linux. https://github.com/SonyWWS/ATF/pull/30
Circuits:
  • Fixed a problem where selecting nodes in expanded groups didn't refresh immediately.
  • Added support for selecting wires inside an expanded group.
  • D2dCircuitRenderer: Changed GetPen() accessibility from private to protected virtual; added ElementTypeCache protected property.
  • Fixed a problem where the highlight color on a group would not appear when the group was selected.
  • ElementType constructors now take input and output pins as type ICircuitPin instead of Pin. Pin derives from ICircuitPin, so this is not a breaking change.
  • LabelEditAdapter: During in-place editing of labels, position textbox based on alignment. If the textbox becomes larger than the original label, this ensures that it grows in an appropriate direction.
  • Favor picking edge over node if the bounds of the node do not completely cover the bounds of the edge. (Try to avoid selecting wires that are hidden by the node.) The change tries to address a wire-selection problem where you cannot select a wire that connects a child circuit element of an expanded group to an external circuit element, because group node selection would override edge selection in the previous implementation.
  • D2dGraphEdgeEditAdapter: Removed the code to set up DraggingContext (DragFromNode/FromRoute, DragToNode/ToRoute) from ExistingEdge as the code seems unnecessary. It also seems that the removal of this code segment fixed a drawing glitch where selecting a pin that can have only one output and is already connected would cause the wire to be picked up and shown with the other end attached to the last previously selected "to" pin.
  • Fixed nested circuit group manually resizing problem. https://github.com/SonyWWS/ATF/issues/17
  • Do not draw the separator line between title and content when the element has no content. https://github.com/SonyWWS/ATF/issues/19
  • Extract circuit type metadata creation in DefineModuleType() to a new method DefineCircuitType() to allow a null image name, and different base types other than Schema.moduleType.Type. https://github.com/SonyWWS/ATF/issues/19
  • Make DefineModuleType() protected instead of private.
  • Circuit editor observes element bounds constraints from ILayoutContext. https://github.com/SonyWWS/ATF/issues/20
  • Don't include label height for element size calculation if the element has no name. This fixed the problem with prematurely picking elements when moving the mouse from below. https://github.com/SonyWWS/ATF/issues/21
  • Improved estimation for empty-content node height. This addresses the issue that when a node only has one input/output pin but no image, the line separating the title and content is still drawn. https://github.com/SonyWWS/ATF/issues/19
  • Added support in CircuitEditor to drag and drop onto a group. https://github.com/SonyWWS/ATF/issues/23
  • CreateGroup() adjusts internal pin indices for all group pins, not just the visible ones for parent groups.
  • CircuitEditor: Fixed a minor problem where connecting to input pins could happen from the output side of the circuit element because the picking rectangle was too large for the input pins when dragging wires.
  • D2dGraphEdgeEditAdapter: Changed the cursor icons when connecting wires to have a more consistent hotspot and to be clearer. The cross/plus-sign cursor is used to start a wire and the pan-west and pan-east cursors are used to finish a wire connection. These suggestions came from Santa Monica Studio.
  • Circuit render performance improvements: Share element type cache for elements that differ only in title, but adjust element width and output pin x-offsets when the cache is queried. Note: This performance issue was reported in Creature Editor where many elements share the type, but use names as their titles
  • ModulePlugin: Made Initialize() virtual; added SchemaLoader property. https://github.com/SonyWWS/ATF/issues/19
  • Circuit Render draws outline first to avoid selection highlight on the border being drawn on top of the pins.
  • Allow pasting a template instance into a different document only when that document already has the template listed in its template library. If the template referenced by the template instance does not appear in the template library, disallow pasting.
  • Refactored circuit template reference code for easier client adoption, moved the core implementation from CircuitEditor to Framework:
    • Framework: Added GroupReference and ElementReference for the core template reference instance support.
    • CircuitEditor: Replaced ModuleInstance with ModuleReference, GroupInstance with GroupReference.
    • Deleted ProxyGroup class and ported its functionality into Framework's GroupReference.
  • CircuitEditingContext: Allowed for customization of the logic of which types of pins can be connected to each other by wires. Previously, the type of the pin, as a string, had to match.
  • CircuitEditor sample app: Added a user setting to specify a starting directory every time the user opens a file in the CircuitEditor. This tests the IFileDialogService's ForcedInitialDirectory.
  • Circuit grouping commands are now available in DiagramEditor.
  • Disallow resizing group references.
  • On-canvas annotations:
    • Added foreColor attribute so it can be edited in the Property Editor.
    • Caret improvements at the boundary cases: When a caret is already at the top line of the visible text, pressing the UP key will scroll up one line of text if more text lines are available; otherwise keep the current caret position to prevent it from moving out of the view. Similarly, when a caret is already at the bottom line of the visible text. Pressing the DOWN key will scroll down one line of text if more text lines are available; otherwise it will keep the current caret position.
    • Copy/paste: The standard copy/paste commands (including keyboard shortcuts Ctrl+C/V) now distinguish two cases: if an annotation node is selected, but there is no text selection inside the selected annotation node, copy/paste command will copy the annotation node itself; if there is a text selection inside the selected annotation node, copy/paste command will copy the selected text of the annotation node instead.
  • Don't activate AutoTranslateAdapter when dragging the scrollbar of an annotation. Note that scrolling annotation text is a local interaction, but AutoTranslateAdapter is a global viewing transformation when the user drags out of the control's client area.
  • D2dAnnotationAdapter now avoids rare type-convert exceptions during dragging by using As<> instead of Cast<>.
  • D2dDiagramTheme: Added RegisterFillTitleBrush() method to customize title background fill brush.
  • Minor consistency improvements of default brush for circuit render.
  • CircuitEditor: Fixed a crash when a pin on a group-within-a-group is connected to another circuit element.
  • Circuit groups: Fixed a problem where renaming a circuit element that was inside a group would not rename the group's pins.
  • CircuitEditor: Fixed various problems with how the scrollbars are calculated, so that scrolling to negative coordinates is supported. WinFormsUtil.UpdateScrollbars(VScrollBar, HScrollBar, Rectangle, Rectangle) now supports negative coordinates and doesn't try to set the Value property for scrollbars. Added unit tests for WinFormsUtil.UpdateScrollbars().
  • CircuitEditor: ElementType.Set() sorts input/output pins by index value before they are assigned as element pins. This addressed the issue that pin index value is not observed as display order at the element type specification stage.
  • First experiment to transform/upgrade in-memory XML document using Linq to XML API:
    • Circuit.xsd: Added "version" attribute to circuit document root element type circuitDocumentType.
    • CircuitReader: a) Added TransformXmlIfNeeded() method to conditionally upgrade in-memory XML stream based on document version; b) Added UpgradeXmlFromV1ToV2() experimental method to test the case where the AndType's first two input pin indexes are swapped from V1 to V2, where the method tries to update the connections from the old documents by remapping pin indexes.
  • CircuitEditor: Added a toggle on circuit elements and circuit groups that allows unconnected pins to be made visible or not. Added two additional types of circuit elements to the CircuitEditor sample app that contain many more pins. Clients must override Element.ShowUnconnectedPinsAttribute to support undo/redo and save/load of this setting.
  • CircuitDefaultStyle: Made ShowExpandedGroupPins false by default. This makes new pin visibility more consistent, whether selected elements are used to form a new group or whether an element is dropped into a group.
  • Made SubCircuit, SubCircuitInstance, and CircuitDocument.SubCircuits obsolete. See the Breaking Changes section for more information.
  • Fixed an issue where making new wires in a nested group did not observe the pin's fan in/out constraints.
  • D2dGraphAdapter: Made the public method GetStyle() virtual.
  • Made the following methods in CircuitEditingContext virtual:
    • CanCopy()
    • Copy()
    • CanInsert(object insertingObject)
    • Insert(object insertingObject)
    • CanDelete()
    • Delete()
  • CircuitEditor: Fixed an issue where a group reference would not offset its subnodes properly during drawing after editing the group by moving around its subnodes.
Curve Editing:
  • Changed x and y labels for sample curves to be more informative.
  • Draw axis labels for the last selected and visible curve.
  • Display the curves in the curve list in the same order they are specified instead of sorting them.
  • Curve picking change: Clicking overlapped control points will only select the single control point for the topmost visible curve. Previously all the control points were selected.
  • Added validator to keep control points within curve limits. Removed curve limit enforcement in ControlPoint.cs; it is not required with the new validator.
  • Added new bool property "AllowResizeCurveLimits" for enabling and disabling resizing curve limits.
  • Validate newly added control points against curve limits.
  • CurveUtils: Changed value of s_epsilone from 0.0001 to 0.001 to reduce floating point error.
  • Added guard against floating point error in HermiteCurveEvaluator and LinearCurveEvaluator.
  • Bug Fix: Adding a control point to an empty curve caused a crash when curve limits are enforced.
  • Draw selected curves with thicker pen.
  • CurveRenderer.DrawCurve: The thickness parameter is now optional.
  • Added new OnlyEditSelectedCurves property to CurveCanvas used for enabling/disabling selective curve editing. If the feature is enabled, only selected curves in the curve ListView can be edited. It is true by default.
  • Added new DisplayName property to ICurve interface. The property allows user to specify the curve display name. If DisplayName is not null, then it will be used instead of the curve Name.
  • CurveCanvas:
    • Implemented smoother zoom In/Out when using Right-Mouse + Drag to zoom.
    • Add/Insert control point to selected curves in curve ListView in addition to selected curves in curve canvas.
    • Apply pre and post infinity to selected curves in curve ListView and canvas.
    • Changed insertion points indicator from outlined rectangle to filled rectangle.
    • AutoComputeCurveLimitsEnabled is now false by default.
  • CircuitEditingContext: Fixed a problem that if the derived class does not override the default empty Pick() method, then dragging and dropping a palette item onto a canvas is broken. Now you need to override this method only if you want to directly support dragging and dropping a palette item onto a group.
Direct2D:
  • D2dUtil: MakeRectangle() is now public.
  • Dispose the D2dBitmap returned from D2dBitmapGraphics when the render target is recreated.
  • Handle PUSH/POP unbalanced case in D2dGraphics.
  • D2dUtil: Added an eye icon drawing method.
Property Editing:
  • PropertyGridView:
    • Made the internal SelectProperty() public. https://github.com/SonyWWS/ATF/issues/12
    • Made Pick() public instead of private. https://github.com/SonyWWS/ATF/issues/12
    • Made the category and child property expanding and collapsing only happen with the left mouse button. https://github.com/SonyWWS/ATF/issues/24
    • Added support for custom property editing controls to be placed in the left column (what is normally the "name" column) and for the property's name to take a whole row. These changes allow for a lot of GUI space to be saved in this 2-column property editor when using the EmbeddedCollectionEditor. This effect is demonstrated in the DOM Property Editor sample app.
    • Fixed a one-pixel error in computing row height.
    • Fixed one pixel off in computing the y-coordinate of the EditingControl.
    • Made our two-column property editor allow read-only properties to be selected, so that the description of the property can be read.
  • When editing a property, the property's name is now included in the undo/redo command's name. https://github.com/SonyWWS/ATF/issues/13
  • Fixed a few issues related to property refreshing.
  • EmbeddedCollectionEditor:
    • When the parent (usually a PropertyGridView) changes its selection, the EmbeddedCollectionEditor's child PropertyGridView now has its selection cleared. This fixes a bug where multiple child properties could look selected.
    • Selecting a child's property now shows the description of that property in the owning 2-column property editor (PropertyGrid).
  • PropertyEditor and GridPropertyEditor: Added the DefaultPropertyEditingContext property to allow client code to customize which property descriptors are used for the current selection set in these two property editors. https://github.com/SonyWWS/ATF/issues/28
  • PropertyEditor: The Configure() method is now called from Initialize() instead of from the constructor. This will allow derived classes to use parameters from their constructors in their override of Configure(). https://github.com/SonyWWS/ATF/issues/29
  • Bug Fix: FileUriEditor didn't handle a string filter containing commas if it was passed using the IAnnotatedParams interface.
  • NumericMatrixControl: Fixed flickering and layout issue.
  • NumericTupleControl: Minor cleanup.
  • FolderBrowserDialogUITypeEditor now checks the dialog result before setting the new value.
Skinning:
  • Fixed a crashing bug in PropertyView if the user chooses a font that doesn't support a Bold style.
  • Renamed skin item from ATF3DockStyle to DockStyle.
  • Fixed a crashing bug due to disposing the active font when the user cancels choosing a font from the Font dialog.
  • Fixed a minor bug in SkinService: Disable title bar rendering when TitleBarStyle element is missing from the skin file.
  • Use CultureInfo.InvariantCulture when converting string to object.
  • Fixed a bug where a skinned app required two clicks to close.
  • Bug Fix: In some cases ToolStripContainer layout failed to restore correctly for skinned applications. MainMenu was positioned below other ToolStrips.
  • WinFormsPropertyUtils: Fixed a minor skin related issue with the brush used for non-selected items in a list box.
Source Control:
  • SubversionService:
    • For all "path" arguments passed to RunCommand(), wrapped each actual path in the string in quotes. This prevents space-containing-paths from getting misinterpreted. Note that this makes the SVN command unable to handle paths that end in a slash ('\\' or '/'), so trim these off the end of URIs when GetCanonicalPath() is called.
    • Consolidated "URI-path-massaging" operations into these two centralized methods that make URIs/paths for directories consistent, to minimize human error:
      • GetFolderStatusRecursive(): Have new directory InfoCache entries create URIs ending with a backslash. Aside from being a standardization, it easily allows determination on whether a URI/path is a directory or not.
      • ParseStatus(): Disregard trailing slash/backslash when matching a specified path with its corresponding file status entry. This guarantees that paths specified by client code will always match the paths they should.
    • Allow items marked for deletion to be reverted.
    • Optimization: Added optional property ValidationContext. If set, any SVN server file status queries that are requested during validation will be deferred until validation has ended. Deferred queries are processed as a single batch call to SVN server, and will trigger StatusChanged events for each queried URI. Property can be automatically set via MEF, but it is public, which allows client code to manage it as well.
    • SubversionService.ParseStatus(): If the error log contains a reference to warning W155007, the specified file is not controlled, so return that status type.
    • Made class FileInfo and SubversionService.m_fileInfoCache protected, to allow derived classes to access and manipulate the file cache in client-application-specific ways.
  • Added ISourceControlService.UpdateFileInfoCache(), for front-loading caching of large subtrees of repository statuses in a minimal number of queries to the source control service. Currently the only service that actually does anything when this is called is SubversionService.UpdateFileInfoCache().
  • Added ISourceControlService.BroadcastStatuses(), which sends StatusChanged events to all specified URIs. Only SubversionService.BroadcastStatuses() does anything right now, which is to broadcast all URIs with cached values, then do a bulk RefreshInfo() on the remaining URIs (making only one query to the SVN server).
  • Perforce Service: Tried to address a bug report about there being many Perforce server processes left running. I was never able to reproduce this problem with the Windows version of the Perforce server. https://github.com/SonyWWS/ATF/issues/31
    • Updated the P4API.NET library from Perforce from 2014.1.83.7625 to 2014.2.96.821, to get this bug fix in particular: Perforce Bug #960568 (Bug #75389, #75997) A memory leak has been fixed which could previously cause crashes in client applications built with the .NET API. Connections are now properly closed on the server side after a command has run. (For more info, see http://www.perforce.com/perforce/doc.current/user/p4api.netnotes.txt)
    • Made sure that all Perforce-related objects are disposed of correctly. Previously, the command objects were never disposed, and the connection object was not disposed when the app shut down.
    • Added the ApplicationName property to PerforceService so that connections to Perforce can be named appropriately. By default, it will be the application's file name.
    • Did some minor clean-up and refactoring.
  • SourceControlCommands: Fixed a problem where the Add button would be enabled even if the source control connection was disabled.
  • ConnectionManager: Fixed a crash bug that could happen if the current source control configuration had become invalid, like if the user's password had changed.
  • PerforceService: The source control configuration dialog box can now be brought up even if the current source control configuration is invalid. This lets the user can fix the configuration problem and then enable the source control connection.
  • Atf.Subversion: Added some file status icons and added SubversionService.GetSourceControlStatusIcons to access them.
  • SourceControlCommands:
    • Added bool property RefreshStatusOnSave, because SVN normally doesn’t require a checkout before editing and saving.
    • Disabled the Refresh Status command unless source control is enabled.
    • Disabled the Checkout command unless source control is enabled.
  • Atf.Subversion.vs2010.csproj: Made this project target the "Any CPU" platform and removed the x86 and x64 platforms, since there are no native code dependencies. Adjusted the output directories for Release and Debug configurations to be the same as our other "Any CPU" projects.
WPF:
  • Fixed a bug where if a DockedWindow's IconVisibility was set to IconVisibility.Header, it would not be shown.
  • Uncommented DialogService and ControlHostServiceAdapter from the StandardInteropParts MEF catalog.
  • Renamed internal class DocklingsWindow to DockIconsLayer to better reflect its purpose.
  • Minor cleanup and improvements in WPF docking.
  • Pulled in some recent changes from ATG:
    • CollectionAdapter/ListAdapter: Added support for read-only lists.
    • EmbeddedResourceStringLocalizer: Added support for dynamically loaded assemblies to have their resources loaded after startup.
    • StatusText: Removed initialization of the foreground brush because it interferes with data binding.
    • ToolBarViewModel: Added support for toolbar separators.
    • DomXmlReader/DomXmlWriter/XmlSchemaTypeLoader: Improved support for substitution groups.
    • FlagsTypeConverter: Added ability to convert to and from int/uint to support bit flags.
    • Pulled in ATG's latest WPF CommonDialog changes, which allow the dialog content to be hosted in a Window or in another container (like a browser).
  • Added new WPF sample app, SimpleDomEditorWPF. It demonstrates the palette, property grid, and document editing.
  • Added PropertyEditor component to simplify inclusion of the PropertyGrid control in WPF applications.
  • Icon: Allow support for using legacy WinForms images as icons.
  • InstancingDropTargetBehavior: Fixed OnDragOver() to show the "no" icon if CanInsert() returns false.
  • Added a WPF version of AtfScriptVariables. It is identical to the WinForms version, but resolves to the WPF versions of types where available.
  • Use the standard ATF edit icons in StandardEditCommands.
  • Fixed the AboutDialog to show the standard ATF version number.
Other:
  • Removed duplicate GetEnumerator implementations from ObservableDomNodeListAdapter.
  • Added the ReSharper team settings file for Everything.vs2010.sln. It has a few basic code style guidelines and LINQ performance checks.
  • Localization: If the same English string has multiple translations, but the given context is not a match, the first available translation is now used. Previously, no translation would be used.
  • Localization: Updated Japanese translations.
  • Bug fix: When a URI is passed, AttributeType.Convert() should first attempt to 'unescape' uri.ToString(), before it is passed to Uri.EscapeDataString(). This is because, in at least one case, Uri.ToString() may contain escaped characters (namely, when a relative URI is passed in, constructed from Uri.MakeRelativeUri(), in which the original URI path contains space characters).
  • Added boolean property Reloaded to ItemChangedEventArgs. Defaults to false. When set to true for an IObservableContext.ItemChanged event, TreeControlAdapter (WinForms) or TreeViewModel (WPF) will rebuild the subtree of the node related to the item changed.
  • History lister changes:
    • Bug fix: User couldn't undo the first command in list.
    • Disabled arrow keys, as undo/redo already have shortcuts.
    • Don’t do any special rendering for the selected item. Item selection doesn't make sense in this context.
    • Bug fix: A single undo action was undoing the two most recent operations.
    • Added < Clean State > as the first item to allow undoing the first command.
    • Use virtual mode instead of storing items locally.
    • Removed Max command count (this is no longer needed).
  • DomNode: Added IsAttributeSet(AttributeInfo). https://github.com/SonyWWS/ATF/issues/15
  • Added the ability to draw the indeterminate state for a CheckBox in TreeItemRenderer.
  • Bug fix: SetZoom(Point at, float xs, float ys) zoomed around the center instead of "at" in Cartesian2dCanvas.cs.
  • Cartesian2dCanvas: Minor cleanup and added the following public properties.
    • public Brush ScaleTextBrush
    • public Font ScaleTextFont
    • public Pen MajorGridlinePen
    • public Pen MinorGridlinePen
    • public Pen AxisPen
    • public Font AxisLabelFont
  • Fixed an issue where if a document window was floating, its docking state would not be persisted correctly.
  • Bug Fix: ResourceUtil.Register(Type type, string resourcePath) was assigning the wrong value to local var "name3".
  • Fixed a problem where document windows would not have their layouts persisted if the user docked them in the side, top, or bottom panels.
  • Multimap: Fixed a bug where an empty list may be retained as a value. The bug was triggered by adding a duplicate value and then removing it.
  • Multimap: Simplified this class so that a List is always used to store the values for each key. Removed the argument-is-null exceptions because they didn't work if the key was a value type. Added unit tests.
  • Remove obsolete DiagramTheme (replaced by D2dDiagramTheme) usages from ATF3 samples.
  • D2dAnnotationAdapter skips input chars under the WM_IME_CHAR message (accepts input chars under WM_CHAR message only). This addresses an issue where if Japanese characters were entered into the annotation box, they would appear twice.
  • DomPropertyEditor/SchemaLoader.cs: Moved the block of code that customizes the property editor from OnSchemaSetLoaded(...) to IInitializable.Initialize(). The sample was crashing due to recent changes to PropertyEditor.
  • CommandService and CommandInfo: Now support a new event, CheckCanDo, for alerting the command service as to whether or not the user can do the command. Previously, polling by the CommandService, where it repeatedly called CanDoCommand(), was the only way to change the command's enabled state. To use this functionality, set your CommandInfo's SupportsCheckCanDo property to true, then call CommandInfo's OnCheckCanDo() when necessary. StandardFileCommands, StandardSelectionCommands, and other ATF components now support their CommandInfos' CheckCanDo event.
  • OutputService: Now handles all standard selection and standard editing commands. Previously, Ctrl+c would work in OutputService while Ctrl+x and the Delete key might get sent to a different and inactive editor.
  • Fixed an old bug with IncrementMenuCommandCount, where the count would increment with duplicate command tags, but without a corresponding decrement. This would cause menu items to not be removed when all the corresponding commands had been unregistered.
  • Made our functional tests work with Unicode strings instead of ASCII strings, so that the tests will work in Japanese.
  • QuadPanelControl: The Name property for each panel is now set by default
  • Fixed a bug where MainForm and its derived classes would cause an error when edited in Visual Studio's designer.
  • SettingsService: Settings that have a value string of the empty string are now persisted. This is important, because some properties have default values that are not empty strings and there should be nothing special about the empty string for the setting value.
  • WindowLayoutService: The PersistedSettings property's getter could return the empty string, but the setter could not accept the empty string. This has been fixed. The setter can now accept the empty string.
  • PaletteService: Changed block id in settings to be the full type name. Previously this was stored as a GUID.
  • UniqueNamer: Made the Parse() method public, so that a previously produced unique name can be deconstructed into the root name and the suffix.
  • ControlHostService: If the main form closing event is cancelled by a previous listener, then the documents now won't be closed and the cancellation won't be potentially undone. https://github.com/SonyWWS/ATF/issues/14
  • DomTreeEditor:
    • Display curves in TreeView.
    • Allow copy/cut/paste curves between Animation nodes.
  • Fixed a DomTreeEditor functional test. Previously, the script assumed that anim objects could not have children, but this changed with a recent check-in.
  • Localizable String Extractor: This tool now ignores duplicate string literals to reduce bloat in the output XML file.
  • Added TreeListControl/TreeListItemRenderer that can display and edit hierarchical data in a tree view with details in columns. This was requested by Santa Monica Studio, and is already integrated in their codebase. Added TreeListControl sample application to demonstrate the usage.
  • SettingsService:
    • Fixed an unhandled exception that would occur when saving the settings if the settings directory no longer exists.
    • Added a catch for all exceptions that occur while saving the settings to prevent crashing the app, so that the user might be able to fix the problem without losing data.
  • StandardFileCommands: Added a customization point to allow clients to specify how new unique document filenames are created. Fixed a problem where DocumentClientInfo's DefaultExtension was not being used.
  • Simple DOM Editor sample app: Made use of the DocumentClientInfo's DefaultExtension property to avoid prompting the user to select a new filename when a new document is created.
  • DocumentClientInfo: Clarified a comment and converted some properties to be auto-properties, so that there are fewer lines of code.
  • Code cleanup using ReSharper:
    • Use extension method syntax where possible.
    • Removed redundant delegate constructor calls.
    • Fixed some unused field warnings.
    • Fixed some XML-style comments.
    • Made some LINQ usage optimizations, like replacing IEnumerable.Count() with Array.Length or ICollection.Count where possible.
    • Removed some local variables that were written to, but never read from.
    • Removed usages of our old pre-processing symbol "CS_4".
    • Using Direct 2D sample app: Cleaned up the code and comments.
  • Set default property values correctly so the property editor’s “reset to default” command works as expected in the following sample apps:
    • Timeline Editor
    • Statechart Editor
    • Simple DOM Editor
    • Simple DOM No XML Editor
    • FSM Editor
  • Conditionally integrated SubversionService into the CodeEditor sample app. Added #define PERFORCE_VERSION_CONTROL in CodeEditor\Program.cs so that the Perforce plugin is used by default; comment out the #define line to switch to SubversionService.
  • Code Editor sample app: Fixed a bug where unsaved changes to a document would be lost if the user checked in the file or reverted the file in another Perforce app.

Authoring Tools Framework 3.9 をリリース

Authoring Tools Framework (ATF) 3.9 リリースには、6 か月間の作業とクライアントからの協力により、多くの改良およびバグ修正が含まれています。数件の主要な機能追加および互換性に影響のある変更点が含まれます。詳細は、以下を参照してください。

主要な新機能

  • WPF サンプルアプリケーション、SimpleDomEditorWpf を追加。WPF コマンド、ドッキング、ドキュメント処理、プロパティ編集、およびパレットの実例を示します。詳細は、概要およびプログラミングディスカッションを参照してください。
  • WinForms CommandService から ICommandClient 実装へのポーリングは、必要に応じて連続的なポーリングを回避できるようになりました。この結果、ICommandClient's CanDoCommand() メソッドが高価な場合に、パフォーマンスが大幅に向上します。ATF コンポーネントの多くが、このポーリング回避機構対応になりました。CommandInfo の EnableCheckCanDoEvent メソッドおよび OnCheckCanDo() メソッドを参照してください。
  • TreeListControl: 非常に単純な、新規のサンプルアプリケーションです。TreeControl にデータ編集と複数列を結合した、新しい TreeListControl の実例を示します。詳細は、概要およびプログラミングディスカッションを参照してください。
  • CircuitEditor: 任意の回路要素や回路グループの、接続されていないピンを非表示にできるようになりました。右上の目のアイコンをクリックして、表示/非表示を切り替えられます。

Windows 8 および Windows 8.1 との互換性

サンプルアプリケーションはすべて、Windows 8 および Windows 8.1 上で正常に動作します。唯一、Direct2D のパフォーマンスが Windows 7 上に比べて大抵の場合遅く、ばらつきがあるという問題点があります。Windows 8 に比べると Windows 8.1 上の方が、全体的によいパフォーマンスが出ています。これは、新しいドライバーのリリースを重ねるにしたがい、改善して行くことが期待されます。また、自動化された機能テストに断続的なエラーが起きるようになりました。自動化サービスの例外が発生し、テストの実行がハングします。この問題は Windows 8 および 8.1 でのみ発生します。サンプルアプリケーションはすべて、手動で問題なく実行できます。

互換性に影響する変更点

  • Atf.Gui.Wpf/Controls/PropertyEditing/PropertyGrid.cs のスペルミスを修正しました。RebuildPopertyNodesImpl は RebuildPropertyNodesImpl に修正されました。
  • ISourceControlService.UpdateFileInfoCache() の名前を UpdateCachedStatuses() に変更しました。
  • ICurve インターフェースに新たに DisplayName プロパティを追加しました。CurveEditor のリストビューの曲線に、Name の代わりに DisplayName を表示できます。ユーザーは DisplayName を正しく実装する必要があります。DisplayName が不要の場合には、null もしくは空の文字列を返す必要があります。
  • SubCircuit、SubCircuitInstance、CircuitDocument.SubCircuits は、マスターサブ回路機能以外には有用ではなかったため、廃止しました。マスターサブ回路機能は開発完了に至らず、代わりによりよい回路グループおよび回路グループ参照機能ができたことにより、古くなったことが理由です。CircuitEditor のサンプルアプリケーションでは、引き続きマスターサブ回路のあるドキュメントの読み込みと保存が可能ですが、今後は編集および新規作成はできません。将来的なリリースでは、古い CircuitEditor のドキュメントを新しいバージョンに変換するために、LINQ-to-XML を使用した XML ドキュメントの例を含める予定です。XML ドキュメントのバージョンを更新するもう 1 つの方法として、XLST ファイルを使用することもできます。なお、以下に示すように #pragma を使用して、古いコードの使用に関する警告を無効にすることが可能です。
#pragma warning disable 618 //mastered sub-circuits are obsolete
private HashSet<Sce.Atf.Controls.Adaptable.Graphs.SubCircuit> m_usedSubCircuits;
#pragma warning restore 618
  • ICircuitElement に CircuitElementInfo オブジェクトを取得する新規プロパティを追加しました。CircuitElementInfo オブジェクトにより、今後は互換性に影響する変更を加えずに ICircuitElement に設定を追加することが可能です。今まで ICircuitElement インターフェイスを独自に実装したクライアントはいないものと想定しています。ATF の Element クラスを使用せずに ICircuitElement を独自に実装した場合には、単純に CircuitElementInfo オブジェクトを返す ElementInfo プロパティを実装する必要があります。
  • WpfApp および WinFormsApp の、2 つのサンプルアプリケーションを削除しました。WpfApp よりも、新しい SimpleDomEditorWpf の方が優れた WPF サンプルアプリケーションであり、WinFormsApp 以外のすべてのサンプルも WinForms を使用しているため有用ではないと判断しました。

カテゴリ別の詳細変更リスト

GitHub にプッシュ済みの変更は斜体表記しています。

ドキュメント:

  • 多くの新しいパブリック型およびメンバに必要であったソースコードコメントを追加し、ATF_API-Reference.chm を最新の内容に更新しました。
  • 既存のドキュメントに ATF Programmer's Guide ウィキへのリンクを追加して更新し、ATF Programmer's Guide ウィキへのリンクを含む新しい ATF_Programmer_Guide.doc を追加しました。
  • ATF Programmer's Guide のさまざまなコンポーネントの画像を更新しました。
  • DomRecorder: オンラインヘルプの URL を GitHub の正しいリンクに修正しました。
GitHub から取り入れた変更
  • GitHub のプル要求を統合することにより、使用しない変数やフィールドを削除しました。今後未使用の変数やフィールドを認識しやすくなるよう、対応する ReSharper の設定をエラーに変更しました。このようなコンパイラの警告は、Mono および Linux 上で使用する場合に ATF を破損します。https://github.com/SonyWWS/ATF/pull/30
回路:
  • 展開したグループ内でノードを選択しても、即座に更新されない問題を修正しました。
  • 展開したグループ内でのワイヤー選択に対応しました。
  • D2dCircuitRenderer: GetPen() のアクセスを private から protected virtual に変更し、protected プロパティ ElementTypeCache を追加しました。
  • 選択中のグループにハイライト色が表示されない問題を修正しました。
  • ElementType コンストラクターが Pin 型ではなく ICircuitPin 型として、入力ピンおよび出力ピンを取得するようになりました。Pin は ICircuitPin から派生するため、この変更は互換性に影響しません。
  • LabelEditAdapter: ラベルの位置でラベルを編集中に、テキストボックスを配置に従った場所に表示します。これにより、テキストボックスが元のラベルよりも大きくなる場合でも、適切な方向に拡大されます。
  • ノードの境界が完全にエッジの境界を隠していない場合、ノードよりもエッジを優先的に選択します。なお、ノードで隠されたワイヤーの選択は避けてください。以前の実装ではグループノードの選択がエッジの選択をオーバーライドしていたため、展開したグループの子回路要素を、外部回路要素に接続するワイヤーを選択することができませんでしたが、この変更により問題が解決されます。
  • D2dGraphEdgeEditAdapter: ExistingEdge から DraggingContext (DragFromNode/FromRoute、DragToNode/ToRoute) を設定するコードを不要と判断し、削除しました。1 つの出力のみを持つことができ、その出力が接続済みのピンを選択すると、その接続を表すワイヤーが再描画され、その反対側の端が以前に選択した接続先のピンに接続した状態で表示される問題がありました。この問題は、前述のコードセグメントの削除により修正されました。
  • ネストされた回路グループを手動でリサイズする際の問題を修正しました。https://github.com/SonyWWS/ATF/issues/17
  • 要素にコンテンツがない場合は、タイトルとコンテンツの間を区切る線を描画しません。https://github.com/SonyWWS/ATF/issues/19
  • DefineModuleType() から回路型メタデータの作成を、新規メソッド DefineCircuitType() に抽出し、null の画像名や、Schema.moduleType.Type 以外の基底型の使用を可能にしました。https://github.com/SonyWWS/ATF/issues/19
  • DefineModuleType() を private から protected に変更しました。
  • CircuitEditor は ILayoutContext の要素の境界の制約に従うようになりました。https://github.com/SonyWWS/ATF/issues/20
  • 要素に名前がない場合には、要素のサイズ計算にラベルの高さを含めなくなりました。この修正により、マウスを下から移動する時に、要素を早すぎる段階で選択してしまう問題が解消されました。https://github.com/SonyWWS/ATF/issues/21
  • コンテンツが空のノードの高さに関する見積もりを改善しました。これにより、ノードに 1 つの入力、出力ピンのみがあり、画像がなく、タイトルとコンテンツを区切る線がまだ描画中の場合の問題が解消されます。https://github.com/SonyWWS/ATF/issues/19
  • CircuitEditor に、グループへのドラッグアンドドロップの対応を追加しました。https://github.com/SonyWWS/ATF/issues/23
  • CreateGroup() は、親グループの表示されているピンだけではなく、すべてのグループピンの内部ピンのインデックスを調整します。
  • CircuitEditor: 回路要素の出力側から入力ピンに接続できてしまう細かい問題を修正しました。ワイヤーをドラッグしている場合に、長方形の選択が大き過ぎたためです。
  • D2dGraphEdgeEditAdapter: ワイヤー接続時のカーソルアイコンのホットスポットの一貫性を改善し、より分かりやすく変更しました。プラス印 (+) のカーソルはワイヤーの開始を表し、PanWest (黒い丸と左向きの三角形) カーソルおよび PanEast (黒い丸と右向きの三角形) カーソルがワイヤー接続の完了を表します。これは Santa Monica Studio の提案による変更です。
  • 回路レンダリングのパフォーマンス向上: タイトルのみが異なる要素の要素型キャッシュを共有します。ただし、そのキャッシュがクエリされた場合には、要素の幅と出力ピンの X 座標のオフセットを調整します。なお、このパフォーマンスに関する問題は、多くの要素が型を共有するものの、タイトルとして名前を使用する Creature Editor で報告されました。
  • ModulePlugin: Initialize() を virtual にし、SchemaLoader プロパティを追加しました。https://github.com/SonyWWS/ATF/issues/19
  • 回路レンダリングは、ピンの上部に描画中の境界が、選択ハイライトされないように、アウトラインを最初に描画します。
  • ドキュメントにテンプレートライブラリにリストされているテンプレートがある場合にのみ、その異なるドキュメントへのテンプレートインスタンスの貼り付けが可能です。テンプレートライブラリに、テンプレートインスタンスが参照するテンプレートがない場合には、貼り付けはできません。
  • クライアントの導入を容易にするために、回路テンプレートの参照コードをリファクタリングし、中核となる実装を CircuitEditor サンプルから Framework に移動しました。
    • Framework: テンプレートの参照インスタンスの中核的なサポートとして、GroupReference および ElementReference を追加しました。
    • CircuitEditor サンプル: ModuleInstance を ModuleReference に、GroupInstance を GroupReference に置き換えました。
    • ProxyGroup クラスを削除し、その機能を Framework の GroupReference に移植しました。
  • CircuitEditingContext: ワイヤーで接続可能なピンのタイプの組み合わせロジックを、カスタム化できます。以前は、ピンのタイプが文字列として一致する必要がありました。
  • CircuitEditor サンプルアプリケーション: ユーザーが CircuitEditor でファイルを開くたびに、開始ディレクトリを指定するユーザー設定を追加しました。これにより IFileDialogService の ForcedInitialDirectory がテストされます。
  • DiagramEditor で回路のグループ化コマンドが使用可能になりました。
  • グループの参照をリサイズできなくなりました。
  • キャンバス上の注釈機能:
    • プロパティエディターで編集できるよう、foreColor 属性を追加しました。
    • 境界におけるキャレットの改善: 表示されたテキストの一番上の行にキャレットが位置する場合に上方向キーを押下すると、下の行がある場合には 1 つ下の行にスクロールアップします。下の行がない場合には、表示範囲外にキャレットが移動しないように現在のキャレット位置に留まります。キャレットが一番下の行にある場合も同様です。下方向キーを押下すると、下に行がある場合には 1 行下にスクロールダウンしますが、ない場合には現在のキャレット位置を保持します。
    • コピー/ペースト: Ctrl + C および Ctrl +V のショートカットを含む標準的なコピーおよびペーストのコマンドが、次の 2 つの場合を区別するようになりました。注釈ノードが選択されていて、その注釈ノード内でテキストが選択されていない場合には、注釈ノード自体がコピーもしくはペーストされます。選択された注釈ノード内でテキストが選択されている場合には、そのテキストがコピーもしくはペーストされます。
  • 注釈のスクロールバーをドラッグする場合に、AutoTranslateAdapter をアクティブ化しません。注釈のテキストはローカルの相互作用であり、AutoTranslateAdapter はユーザーのドラッグがコントロールのクライアントの範囲を超えるグローバルな表示の変換です。
  • D2dAnnotationAdapter は Cast<> ではなく As<> を使用することにより、ドラッグ中のまれな型変換の例外を防ぎます。
  • D2dDiagramTheme: タイトル背景を塗りつぶすブラシをカスタム化する RegisterFillTitleBrush() メソッドを追加しました。
  • 回路レンダリングのデフォルトブラシの一貫性を改善する、細かい修正を加えました。
  • CircuitEditor: グループ内のグループ上のピンが、ほかの回路要素に接続された場合のクラッシュを修正しました。
  • 回路グループ: グループ内にある回路要素の名前を変更しても、グループのピンの名前が変更されない問題を修正しました。
  • CircuitEditor: マイナス座標のスクロールに対応するよう、スクロールバーの計算方法に関するさまざまな問題を修正しました。WinFormsUtil.UpdateScrollbars (VScrollBar、HScrollBar、Rectangle、Rectangle) がマイナス座標に対応するようになり、スクロールバーに Value プロパティを設定しなくなりました。WinFormsUtil.UpdateScrollbars() のユニットテストを追加しました。
  • CircuitEditor: ElementType.Set() は、入力および出力ピンが要素ピンとして割り当てられる前に、インデックス値によりソートします。これにより、要素型を指定する段階で、ピンのインデックス値順に表示されない問題が解決します。
  • Linq to XML の API を使用してインメモリ XML ドキュメントを変換、更新する最初の試行を加えました。
    • Circuit.xsd: 回路ドキュメントのルート要素型 circuitDocumentType に version 属性を追加しました。
    • CircuitReader: 1) ドキュメントのバージョンに基づき、条件付きでインメモリ XML ストリームを更新する TransformXmlIfNeeded() メソッドを追加しました。2) 試験的な UpgradeXmlFromV1ToV2() メソッドを追加しました。これにより、AndType の最初の 2 つの入力ピンインデックスが V1 から V2 に入れ替えられ、メソッドが、ピンインデックスを再マッピングすることにより、古いドキュメントからの接続を更新しようとするケースを、テストできるようになります。
  • CircuitEditor: 回路要素および回路グループで、接続されていないピンの表示、非表示を切り替える機能を追加しました。CircuitEditor のサンプルアプリケーションに、より多くのピンを含む 2 つのタイプの回路要素を追加しました。この設定の、元に戻す/やり直しおよび、保存/読み込みに対応するには、Element.ShowUnconnectedPinsAttribute をオーバーライドする必要があります。
  • CircuitDefaultStyle: ShowExpandedGroupPins のデフォルトを false にしました。これにより、選択した要素が新規グループの作成に使用されるのかどうか、もしくは要素がグループに挿入されたのかどうか、など異なる場合におけるピンの表示の一貫性が改善されます。
  • SubCircuit、SubCircuitInstance、および CircuitDocument.SubCircuits を廃止しました。詳細は「互換性に影響する変更点」のセクションを参照してください。
  • ネストされたグループ内に新規ワイヤーを作成する場合に、ピンのファンインおよびファンアウトの制約が守られない問題を修正しました。
  • D2dGraphAdapter: GetStyle() メソッドを public から virtual に変更しました。
  • CircuitEditingContext の以下のメソッドを vistual に変更しました:
    • CanCopy()
    • Copy()
    • CanInsert(object insertingObject)
    • Insert(object insertingObject)
    • CanDelete()
    • Delete()
  • CircuitEditor: グループのサブノードを動かして編集した後の描画中に、グループの参照がサブノードを正しくオフセットしない問題を修正しました。
曲線の編集:
  • サンプル曲線の x ラベルおよび y ラベルを、より分かりやすくしました。
  • 最後に選択した、表示される曲線の軸ラベルを描画します。
  • 曲線をソートせず、指定された順に曲線リストに表示します。
  • 曲線の選択に関する変更: 重ねて表示されている制御点をクリックした場合、一番上に表示された曲線の制御点 1 つのみを選択します。以前は、すべての制御点が選択されていました。
  • 制御点が曲線境界内に保たれるよう、検証規則を追加しました。新しい検証規則ができたため不要になった ControlPoint.cs の曲線境界の強制を削除しました。
  • 曲線境界のリサイズの有効および無効を設定する、新規のブール型プロパティ AllowResizeCurveLimits を追加しました。
  • 曲線境界に対して新しく追加する制御点を検証します。
  • CurveUtils: 浮動小数点のエラーを減らすために、s_epsilone の値を 0.0001 から 0.001 に変更しました。
  • HermiteCurveEvaluator および LinearCurveEvaluator に浮動小数点のエラーを防ぐガードを追加しました。
  • バグ修正: 曲線境界が強制されている場合に、空の曲線に制御点を追加するとクラッシュする問題を修正しました。
  • 選択された曲線をより太いペンで描画します。
  • CurveRenderer.DrawCurve: 太さのパラメーターがオプションになりました。
  • 選択的な曲線編集を有効もしくは無効にする、新しい OnlyEditSelectedCurves プロパティを CurveCanvas に追加しました。この機能が有効の場合は、曲線の ListView 内で選択された曲線のみが編集可能です。デフォルト値は true です。
  • ICurve インターフェースに、新しく DisplayName プロパティを追加しました。このプロパティを使用すると、ユーザーは曲線の表示名を指定できます。DisplayName が null 以外の場合には、曲線の Name の代わりに使用されます。
  • CurveCanvas:
    • マウスを右クリックしながらドラッグしてズームインもしくは、ズームアウトした場合の、よりスムーズなズーム表示を実装しました。
    • 曲線キャンバスで選択された曲線に加え、曲線の ListView で選択された曲線にも制御点を追加、挿入しました。
    • 曲線 ListView および曲線キャンバス内の選択された曲線に、プリインフィニティおよびポストインフィニティを適用します。
    • 挿入ポイントのインジケーターを、中抜きの長方形から塗りつぶしの長方形に変更しました。
    • AutoComputeCurveLimitsEnabled のデフォルトを false にしました。
  • CircuitEditingContext: 派生クラスがデフォルトの空の Pick() メソッドをオーバーライドしない場合、キャンバスにパレットのアイテムをドラッグアンドドロップする機能が壊れる問題を修正しました。今後は、パレットのアイテムをグループにドラッグアンドドロップする機能を独自のコードで直接対応する場合にのみ、このメソッドをオーバーライドする必要があります。
Direct2D:
  • D2dUtil: MakeRectangle() を public に変更しました。
  • レンダーターゲットが再度作成された場合、D2dBitmapGraphics から返された D2dBitmap を破棄します。
  • D2dGraphics で PUSH と POP の数が不一致の場合に対応するようになりました。
  • D2dUtil: 目のアイコンの描画メソッドを追加しました。
プロパティ編集:
  • PropertyGridView:
    • SelectProperty() を internal から public に変更しました。https://github.com/SonyWWS/ATF/issues/12
    • Pick() を private から public に変更しました。https://github.com/SonyWWS/ATF/issues/12
    • マウスの左ボタンによってのみ、カテゴリおよび子プロパティを展開、折りたたみできるようにしました。https://github.com/SonyWWS/ATF/issues/24
    • カスタムのプロパティ編集コントロールを左の列 (通常は名前の列となる場所) に配置できるよう、また、プロパティ名を行全体に表示できるよう、対応を追加しました。これらの変更により、EmbeddedCollectionEditor を使用する場合に、この 2 列のプロパティエディターでの GUI のスペースが大幅に節約されます。この効果は DOM Property Editor サンプルアプリケーションで示されています。
    • 行の高さの計算における 1 ピクセルのエラーを修正しました。
    • EditingControl の Y 座標の計算で 1 ピクセル分ずれる問題を修正しました。
    • 2 列からなるプロパティエディターで、プロパティの説明を読み取れるよう、読み込み専用プロパティの選択を可能にしました。
  • プロパティ編集時に、元に戻す/やり直しコマンドの名前にプロパティ名が含まれるようになりました。https://github.com/SonyWWS/ATF/issues/13
  • プロパティの更新に関する数件の問題を修正しました。
  • EmbeddedCollectionEditor:
    • 親 (通常は PropertyGridView) が選択を変更した場合、EmbeddedCollectionEditor の子の PropertyGridView の選択がクリアされるようになりました。これにより、複数の子プロパティが選択されているように見える問題が修正されます。
    • 子プロパティを選択すると、その親である 2 列からなるプロパティエディター (PropertyGrid) に、プロパティの説明が表示されるようになりました。
  • PropertyEditor および GridPropertyEditor: 上記 2 つのプロパティエディターで設定された現在の選択に使用する、プロパティ記述子をクライアントコードでカスタム化できるように DefaultPropertyEditingContext プロパティを追加しました。https://github.com/SonyWWS/ATF/issues/28
  • PropertyEditor: Configure() メソッドを、コンストラクターからではなく、 Initialize() から呼び出すように変更しました。この変更により、派生クラスがコンストラクターからのパラメーターを Configure() のオーバーライドで使用できるようになります。https://github.com/SonyWWS/ATF/issues/29
  • バグ修正: FileUriEditor が IAnnotatedParams から渡されたカンマを含む文字列フィルターに対応していなかった問題を修正しました。
  • NumericMatrixControl: 表示のちらつきとレイアウトの問題を修正しました。
  • NumericTupleControl: 細かいクリーンアップを行いました。
  • FolderBrowserDialogUITypeEditor が、新しい値を設定する前にダイアログの結果を確認するようになりました。
スキニング:
  • PropertyView でユーザーが太字に対応しないフォントを選択した場合に、クラッシュが起きるバグを修正しました。
  • スキンアイテムの名前を ATF3DockStyle から DockStyle に変更しました。
  • ユーザーが Font ダイアログからのフォントの選択をキャンセルした時に、アクティブなフォントの破棄によりクラッシュが起きるバグを修正しました。
  • SkinService の細かいバグ修正: スキンファイルに TitleBarStyle 要素がない場合、タイトルバーのレンダリングを無効にします。
  • 文字列をオブジェクトに変換する場合、CultureInfo.InvariantCulture を使用します。
  • スキニングされたアプリケーションを閉じるには、X ボタンを 2 回クリックする必要があったバグを修正しました。
  • バグ修正: スキニングされたアプリケーションで ToolStripContainer レイアウトが正しい復元されないことのある問題を修正しました。MainMenu がほかの ToolStrips の下に配置される問題を修正しました。
  • WinFormsPropertyUtils: リストボックス内で選択されていないアイテムに使用されるブラシの、スキンに関する細かい問題を修正しました。
ソース管理:
  • SubversionService:
    • RunCommand() に渡されるすべてのパスに関する引数は、それぞれ実際のパスの文字列を引用符で囲みます。これにより、スペースを含むパスが正しく解釈されます。ただし、SVN コマンドでは「\\」もしくは 「/」のスラッシュ記号で終わるパスを処理できなくなります。GetCanonicalPath() を呼び出す場合は、URI の最後のスラッシュ記号を削除してください。
    • ディレクトリの URI およびパスの書式に一貫性を持たせ、人的ミスを最小限に抑えるため、URI パスの内部編集操作を以下の 2 つの集中的なメソッドに統合しました:
      • GetFolderStatusRecursive(): 新しいディレクトリの InfoCache エントリーに、バックスラッシュで終わる URI を作成させます。一貫性の向上に加え、URI もしくはパスがディレクトリかどうかの判断も容易になります。
      • ParseStatus(): 特定のパスと、対応するファイルステータスのエントリーに一致させる際に、最後のスラッシュおよびバックスラッシュを無視します。これにより、クライアントのコードが指定したパスが、常に正しいパスに確実に一致するようになります。
    • 削除マークの付いたアイテムを元に戻すことができます。
    • 最適化: オプションのプロパティ ValidationContext を追加しました。このプロパティが設定された場合、検証中に要求された SVN サーバーファイルのクエリは、検証終了後まで延期されます。延期されたクエリは SVN サーバーへの単一のバッチ呼び出しとして処理され、各クエリ対象の URI の StatusChanged イベントをトリガーします。プロパティは MEF 経由で自動設定が可能ですが、public であるためクライアントコードで管理することも可能です。
    • SubversionService.ParseStatus(): エラーログが警告 W155007 への参照を含む場合は、指定されたファイルは制御されていないため、そのステータスタイプを返します。
    • FileInfo および SubversionService.m_fileInfoCache クラスを protected に変更しました。これにより、派生クラスはクライアントアプリケーションに特化した方法でファイルにアクセスし、操作できるようになります。
  • リポジトリステータスの大きなサブツリーを先にキャッシュし、ソース管理サービスへのクエリを最小限にする ISourceControlService.UpdateFileInfoCache() を追加しました。現時点でこの関数が呼び出された時に動作するのは、SubversionService.UpdateFileInfoCache() のみです。
  • 指定されたすべての URI に StatusChanged イベントを送信する ISourceControlService.BroadcastStatuses() を追加しました。現時点では SubversionService.BroadcastStatuses() のみが、すべての URI にキャッシュされた値をブロードキャストし、残りの URI に一括で RefreshInfo() を実行します。この方法により、SVN サーバーには単一のクエリのみが送られます。
  • Perforce サービス: Perforce サーバーで多くのプロセスが実行されたままになるというバグ報告がありました。 この問題は Windows 版の Perforce サーバーで再現しませんでした。https://github.com/SonyWWS/ATF/issues/31
    • 次のバグフィックスを含めるため、Perforce からの P4API.NET ライブラリを 2014.1.83.7625 から 2014.2.96.821 に更新しました: Perforce のバグ #960568 (バグ #75389, #75997)。.NET API で作成したクライアントアプリケーションでクラッシュを起こす可能性のあった、メモリリークを修正しました。コマンド実行終了後に、サーバー側で接続が正常に終了するようになりました。(詳細は http://www.perforce.com/perforce/doc.current/user/p4api.netnotes.txt を参照してください。)
    • Perforce 関連のオブジェクトが正常に破棄されるようにしました。以前はコマンドオブジェクトが破棄されなかったため、アプリケーションの終了時に接続オブジェクトが破棄されませんでした。
    • PerforceService に ApplicationName プロパティを追加し、Perforce への接続に適切な名前が付けられるようにしました。デフォルトでは、アプリケーションのファイル名が付けられます。
    • 細かいクリーンアップやリファクタリングを行いました。
  • SourceControlCommands: ソース管理の接続が無効の場合でも、Add ボタンが有効になる問題を修正しました。
  • ConnectionManager: ユーザーのパスワード変更などにより、現在のソース管理の構成が無効になった場合に起きる可能性のあるクラッシュを修正しました。
  • PerforceService: 現在のソース管理の構成が無効である場合でも、ソース管理の構成ダイアログボックスが使用可能になりました。これにより、ユーザーが構成の問題を修正し、ソース管理の接続を有効にすることが可能になりました。 
  • Atf.Subversion: いくつかのファイルステータスアイコンおよび、それらにアクセスする SubversionService.GetSourceControlStatusIcons を追加しました。
  • SourceControlCommands:
    • 通常 SVN は編集および保存作業の前のチェックアウトを必要としないため、ブール型プロパティ RefreshStatusOnSave を追加しました。
    • ソース管理が無効の場合の、Refresh Status コマンドを無効にしました。
    • ソース管理が無効の場合の、Checkout コマンドを無効にしました。
  • Atf.Subversion.vs2010.csproj: プロジェクトの対象を「Any CPU」プラットフォームとし、ネイティブコードの依存性がなくなったため、x86 および x64 プラットフォームを削除しました。ほかの「Any CPU」プロジェクトと同様になるように、Release および Debug 構成の出力ディレクトリを調整しました。
WPF:
  • DockedWindow の IconVisibility が IconVisibility.Header に設定されている場合に表示されないバグを修正しました。
  • StandardInteropParts MEF カタログから DialogService および ControlHostServiceAdapter のコメントを解除しました。
  • 内部クラス DocklingsWindow を、目的をより正確に表わす DockIconsLayer に名称変更しました。
  • WPF ドッキングに関する細かいクリーンアップや改善を行いました。
  • ATG から取得した最近の変更:
    • CollectionAdapter/ListAdapter: 読み込み専用リストに対応しました。
    • EmbeddedResourceStringLocalizer: 動的に読み込まれたアセンブリの、起動後のリソース読み込みに対応しました。
    • StatusText: データバインディングに影響するため、フォアグラウンドのブラシの初期化を削除しました。
    • ToolBarViewModel: ツールバーの区切りの対応を追加しました。
    • DomXmlReader/DomXmlWriter/XmlSchemaTypeLoader: 代入グループへの対応を改善しました。
    • FlagsTypeConverter: ビットフラグに対応するよう、int と uint の間の変換機能を追加しました。
    • ATG の最新の WPF CommonDialog の変更を追加しました。これにより、ダイアログのコンテンツを、Window もしくはその他のブラウザなどの中に表示することが可能になります。
  • 新しい WPF サンプルアプリケーション SimpleDomEditorWPF を追加しました。このサンプルアプリケーションは、パレット、プロパティグリッド、ドキュメント編集などの例を示します。
  • WPF アプリケーションに PropertyGrid コントロールを簡単に含めることができるよう、PropertyEditor コンポーネントを追加しました。
  • アイコン: レガシーの WinForms 画像をアイコンとして使用できるよう対応しました。
  • InstancingDropTargetBehavior: CanInsert() が false を返した場合に OnDragOver() が禁止を示すアイコン (丸に斜めの線) を表示するように修正しました。
  • WPF 版の AtfScriptVariables を追加しました。これは WinForms 版と同じものですが、使用可能な場合には WPF 版の型を解決します。
  • StandardEditCommands で標準の ATF 編集アイコンを使用します。
  • AboutDialog に標準の ATF バージョン番号が表示されるよう修正しました。
その他:
  • ObservableDomNodeListAdapter から重複する GetEnumerator の実装を削除しました。
  • Everything.vs2010.sln 用に ReSharper チームの設定ファイルを追加しました。いくつかの基本的なコードスタイルのガイドラインおよび、LINQ のパフォーマンスチェックが含まれます。
  • ローカライゼーション: 同一の英語に複数の翻訳があり、内容が異なる場合には、最初の翻訳が使われるようになりました。以前は、どの翻訳も使われませんでした。
  • ローカライゼーション: 日本語の翻訳を更新しました。
  • バグ修正: URI が渡された時に、AttributeType.Convert() は Uri.EscapeDataString() に渡す前に、まずエスケープ処理されていた uri.ToString() を元に戻します。これは、スペース文字を含む元の URI が、Uri.MakeRelativeUri() によって作られた相対 URI として渡された場合などの、少なくとも 1 つの実例で Uri.ToString() がエスケープされた文字を含んでいた可能性があるためです。
  • ブール型プロパティ Reloaded を ItemChangedEventArgs に追加しました。デフォルトは false です。IObservableContext.ItemChanged イベントに対し true に設定された場合は、TreeControlAdapter (WinForms) もしくは TreeViewModel (WPF) が、変更されたアイテムに関連のあるノードのサブツリーを再構築します。
  • HistoryLister の変更:
    • バグ修正: ユーザーがリストの最初のコマンドを、元に戻せない問題を修正しました。
    • 元に戻す/やり直しに既存のショートカットがあるため、矢印キーを無効にしました。
    • 選択したアイテムに特別なレンダリングをしません。このコンテキストではアイテムの選択に意味がないためです。
    • バグ修正: 元に戻すを 1 度実行すると、最近の 2 つの操作が元に戻される問題を修正しました。
    • 最初のアイテムとして操作されていない状態を表す <Clean State> を追加し、最初のコマンドを元に戻せるようにしました。
    • アイテムをローカルに格納するのではなく、仮想モードを使用します。
    • 不要になった Max コマンドカウントを削除しました。
  • DomNode: IsAttributeSet(AttributeInfo) を追加しました。https://github.com/SonyWWS/ATF/issues/15
  • TreeItemRenderer の CheckBox の、中間的な状態を描画する機能を追加しました。
  • バグ修正: SetZoom(Point at, float xs, float ys) は、Cartesian2dCanvas.cs の「at」の位置ではなく、中心からズームします。
  • Cartesian2dCanvas: 細かいクリーンアップを行い、以下の public プロパティを追加しました。
    • public Brush ScaleTextBrush
    • public Font ScaleTextFont
    • public Pen MajorGridlinePen
    • public Pen MinorGridlinePen
    • public Pen AxisPen
    • public Font AxisLabelFont
  • ドキュメントのウィンドウが浮動の場合に、ドッキングステートが正しく保持されない問題を修正しました。
  • バグ修正: ResourceUtil.Register(Type type, string resourcePath) が、ローカル変数 name3 に不正な値を割り当ていた問題を修正しました。
  • ユーザーがドキュメントウィンドウを横、上、下のパネルにドッキングした場合、ドキュメントウィンドウのレイアウトが保持されない問題を修正しました。
  • Multimap: 空のリストが値として保持されるバグを修正しました。このバグは、重複する値を追加した後に削除することが原因でした。
  • Multimap: 各キーの値の保存に常に List を使用するよう、クラスを単純化しました。キーが値の型である場合に動作しないため、null 引数のチェックを削除しました。ユニットテストを追加しました。
  • ATF3 のサンプルから、廃止された DiagramTheme の使用を削除しました。なお、DiagramTheme は D2dDiagramTheme に置き換わりました。
  • D2dAnnotationAdapter は WM_IME_CHAR メッセージ下で入力文字をスキップします。WM_CHAR メッセージ下でのみ入力文字を受け取ります。この修正により、注釈ボックスに日本語の文字が入力された場合に、2 回表示されるの問題が解消されます。
  • DomPropertyEditor/SchemaLoader.cs: プロパティエディターをカスタム化するコードブロックを OnSchemaSetLoaded(...) から IInitializable.Initialize() に移動しました。このサンプルは、最近の PropertyEditor への変更が原因でクラッシュする問題がありました。
  • CommandService および CommandInfo: ユーザーがコマンドを実行できるかどうかをコマンドサービスに通知する、新しいイベント CheckCanDo に対応しました。以前は、CommandService のポーリングで繰り返し CanDoCommand() を呼び出すのが、コマンドの有効なステータスを変更する唯一の方法でした。この機能を使用するには、CommandInfo の SupportsCheckCanDo プロパティを true に設定し、必要に応じて CommandInfo の OnCheckCanDo() を呼び出します。。StandardFileCommands、StandardSelectionCommands、およびその他の ATF コンポーネントは、CommandInfo の CheckCanDo イベントに対応するようになりました。
  • OutputService: 標準的な選択コマンドおよび編集コマンドを処理するようになりました。以前は、Ctrl+C は OutputService で動作し、Ctrl+X および Delete キーは、ほかのアクティブではないエディターに送信されることもありました。
  • IncrementMenuCommandCount でカウントが重複するコマンドタグで増分するものの、対応する減分のない古いバグを修正しました。このバグが原因で、すべての対応するコマンドが登録解除された場合にも、メニューアイテムが削除されないという問題がありました。
  • 機能テストで ASCII 文字列ではなく Unicode 文字列を使用できるようにしました。これにより、日本語を使用したテストが可能になります。
  • QuadPanelControl: 各パネルの Name プロパティがデフォルトで設定されるようになりました。
  • MainForm およびその派生クラスを Visual Studio のデザイナーで編集する場合に、エラーが発生するバグを修正しました。
  • SettingsService: 空の文字列を値として持つ設定が、保持されるようになりました。これは、デフォルト値が空でないプロパティ値もあり、設定値が空の文字列であっても特別ではないため、重要な変更です。
  • WindowLayoutService: PersistedSettings プロパティのゲッターは殻の文字列を返せますが、セッターは空の文字列を受け取ることは不可能でした。この問題は修正されました。セッターが空の文字列を受け取ることが可能になりました。
  • PaletteService: 設定のブロック ID を完全な型名に変更しました。以前は、GUID として格納されていました。
  • UniqueNamer: Parse() メソッドを public にしました。これにより、以前に作られた一意の名前を、ルート名とサフィックスに分解できるようになりました。
  • ControlHostService: メインのフォームを終了するイベントが前のリスナーから取り消された場合、ドキュメントは終了しなくなり、取り消しを元に戻すことができなくなりました。https://github.com/SonyWWS/ATF/issues/14
  • DomTreeEditor:
    • TreeView に曲線を表示します。
    • Animation ノード間で、曲線のコピー、切り取り、貼り付けが可能です。
  • DomTreeEditor の機能テストを修正しました。以前はスクリプトは Anim オブジェクトは子を持てないことを前提としていましたが、最近のチェックインにより子を持つことが可能になりました。
  • Localizable String Extractor: 出力 XML ファイルのサイズを抑えるために、このツールは重複する文字列リテラルを無視するようになりました。
詳細を列に含むツリービューで、階層的なデータを表示、編集可能な TreeListControl および TreeListItemRenderer を追加しました。これは Santa Monica Studio のリクエストによる変更で、Santa Monica Studio のコードベースに統合済みです。使用方法を実演する TreeListControl サンプルアプリケーションを追加しました。
  • SettingsService:
    • 設定ディレクトリがなくなった後に設定を保存すると起きる、ハンドルされない例外を修正しました。
    • アプリケーションがクラッシュしないよう、設定の保存中に起きるすべての例外のキャッチを追加し、ユーザーがデータを失わずに問題を修正できる可能性を向上しました。
  • StandardFileCommands: クライアントが新しい一意のドキュメントファイル名の作成方法を指定できるよう、カスタム化ポイントを追加しました。DocumentClientInfo の DefaultExtension が使用されていなかった問題を修正しました。
  • Simple DOM Editor サンプルアプリケーション: DocumentClientInfo の DefaultExtension プロパティを使用して、新規ドキュメントが作成された際に、ユーザーに新しいファイル名の選択を求めないようにしました。
  • DocumentClientInfo: コメントを分かりやすくし、いくつかのプロパティを自動プロパティに変換してコードの行数を減らしました。
  • ReSharper を使用してコードのクリーンアップを行いました:
    • 可能な場合には拡張メソッド構文を使用します。
    • 冗長なデリゲートコンストラクター呼び出しを削除しました。
    • いくつかの使用されないフィールドの警告を修正しました。
    • いくつかの XML 形式のコメントを修正しました。
    • 可能な場合には IEnumerable.Count() を Array.Length もしくは ICollection.Count に置き換えるなど、LINQ の使用方法を数箇所で最適化しました。
    • 書き込まれることがあっても、読み取られることがなかった、いくつかのローカル変数を削除しました。
    • 古い前処理シンボルであった「CS_4」の使用を削除しました。
    • UsingDirect2D サンプルアプリケーション: コードおよびコメントのクリーンアップを行いました。
  • 次のサンプルアプリケーションで、プロパティエディターのデフォルト値にリセットするコマンドが期待どおりに動作するよう、デフォルトプロパティ値を正しく設定しました:
    • Timeline Editor
    • Statechart Editor
    • Simple DOM Editor
    • Simple DOM No XML Editor
    • FSM Editor
  • SubversionService を CodeEditor サンプルアプリケーションに条件付きで統合しました。デフォルトで Perforce プラグインが使用されるよう、CodeEditor\Program.cs に #define PERFORCE_VERSION_CONTROL を追加しました。SubversionService に切り替えるには #define の行をコメントアウトします。
  • Code Editor サンプルアプリケーション: ユーザーがほかの Perforce アプリケーションでファイルをチェックインもしくは元に戻した場合に、ドキュメントの未保存の変更が失われるバグを修正しました。
Clone this wiki locally