Skip to content

Authoring Tools Framework 3.9 RELEASED

Gary edited this page Jan 30, 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.
  • Circuit Editor: 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 Circuit Editor 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 circuit editor 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 kinds of warnings break this user's Mono version of ATF on Linux. https://github.com/SonyWWS/ATF/pull/30
Circuits:
  • Fixed a problem where selection of 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.
  • Circuit editor: 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 Circuit Editor Sample to Framework:
    • Framework: Added GroupReference and ElementReference for the core template reference instance support.
    • Circuit Editor Sample: 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.
  • Circuit Editor sample app: Added a user setting to specify a starting directory every time the user opens a file in the Circuit Editor. 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 down 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.
  • Circuit editor: 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.
  • Circuit Editor: 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().
  • Circuit Editor: 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.
  • Circuit Editor: 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 Circuit Editor 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()
  • Circuit Editor: 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.
Clone this wiki locally