Skip to content

Authoring Tools Framework 3.8 RELEASED

Gary edited this page Mar 10, 2015 · 7 revisions

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

The Authoring Tools Framework (ATF) 3.8 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. Please see below for details.

Table of Contents

Top New Features

  • Released as open source on GitHub on March 10, 2014, under the Apache 2.0 license.
  • Integrated a huge amount of Windows Presentation Foundation (WPF) support from a client.
  • Added a Skin Editor that allows you to edit the current skin and create new skin files. Try it out in the TimelineEditor sample app, by using the View -> Edit Skin command.
  • Added a History Lister feature to visually display and manipulate the undo/redo stack. Try it out in the CircuitEditor sample app, by using the Window -> History command.
  • The CircuitEditor now supports circuit template references to external files. See the context menu commands on the Template Lister.
  • Improvements to property editing and the DomPropertyEditor sample app.



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, with ATF 3.8, we’ve started seeing 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

  • The following methods, properties, and types have been marked as obsolete in past releases of ATF and have been removed since ATF 3.7 was released internally to Sony Computer Entertainment, but before being released on GitHub. So this list of removed obsolete items does not affect any client on GitHub. (This list excludes items in the internal Legacy directory.)
    • Sce.Atf.Selection – Removed Toggle(IEnumerable items). Use ToggleRange instead.
    • Sce.Atf.VectorMath.Matrix3F – Removed the property M, as it was useless and simply returned 'this'.
    • Sce.Atf.VectorMath.Matrix4F
      • Removed GetTranslation(). Please use the Translation property instead.
      • Removed the property M, as it was useless and simply returned 'this'.
    • Sce.Atf.Applications.CommandInfo – Removed the property Shortcut. Use the property Shortcuts instead.
    • Sce.Atf.Applications.ScriptingService – Removed SetObject() and RemoveObject(). Use SetVariable() and RemoveVariable() instead.
    • Sce.Atf.Controls.Adaptable.Graphs.Annotation – Removed Synchronize(). This method was empty and did nothing.
    • Sce.Atf.Controls.Adaptable.Graphs.Element – Removed Synchronize(). This method was empty and did nothing.
    • Sce.Atf.Controls.Adaptable.Graphs.GroupPin – Removed Synchronize(). This method was empty and did nothing.
    • Sce.Atf.Applications.AutoDocumentService – Removed the constructor that took a Form. Use IMainWindow instead.
    • Sce.Atf.Applications.MainFormTitleService – Removed this class. Use MainWindowTitleService, which works against IMainWindow.
    • Sce.Atf.Applications.ShoutOutputService – Moved this sample code to the ModelViewer sample app.
    • Sce.Atf.Applications.PaletteService – Removed the constructor that takes a Form. Use IMainWindow instead.
    • Sce.Atf.Applications.SettingsService – Removed the constructor that takes a Form. Use IMainWindow instead.
    • Sce.Atf.Applications.StandardFileExitCommand – Removed the constructor that takes a Form. Use IMainWindow instead.
    • Sce.Atf.Applications.UnhandledExceptionService – Removed the constructor that takes a Form. Use IMainWindow instead.
    • Sce.Atf.Applications.SourceControlCommands – Removed the property CheckoutOnEdit. Use CheckoutOnEditBehavior instead.
    • Sce.Atf.ChartUtil – Removed one of the DrawHorizontalScale() overloaded methods and one of the DrawVerticalScale() overloaded methods. Use a different overload and pass in 0.0f for the 'minimumGraphStep'.
    • Sce.Atf.Controls.Adaptable.Graphs.D2dSubCircuitRenderer – Removed FloatingPinNodeHeight and FloatingPinNodeWidth. Use CircuitGroupPinInfo.FloatingPinBoxHeight and CircuitGroupPinInfo.FloatingPinBoxWidth instead.
    • Sce.Atf.CustomFileDialog
      • Removed InitialDirectory. This property had no effect. Please see ForcedInitialDirectory to make the dialog box open at a particular directory.
      • Removed UserControl. This property was no longer supported.
    • Sce.Atf.Controls.FloatInputControl – Removed TickFrequency. This property had no effect.
    • Sce.Atf.Controls.IntInputControl – Removed TickFrequency. This property had no effect.
    • Sce.Atf.Controls.Timelines.Direct2D.D2dTimelineControl – Removed GetBoundingRect() that has the 'events' parameter. This parameter has always been ignored; please use the GetBoundingRect() version with no parameters.
    • Sce.Atf.Perforce.PerforceService – Removed the ShowErrors property. This property had no effect. Please see Sce.Atf.Outputs, OutputService, and ErrorDialogService for displaying errors and warnings.








  • Most math classes, like Vec3F, have had their ToString() methods improved to work with European languages and to have more consistent behavior. The main problem was that in languages that use a ‘,’ as a decimal point, then a ‘;’ should be used to separate numbers in a list. Previously, a ‘,’ was hard-coded to separate numbers in a list regardless of the current culture setting. Addresses https://github.com/SonyWWS/ATF/issues/5 .
    • Added StringUtil.GetNumberListSeparator(IFormatProvider).
    • FloatArrayConverter: now uses the appropriate number separator (e.g., ',' or ';') depending on the current culture.
      • Past behavior: ToString() is not valid for European cultures for either persistence or GUI. In English, it’s valid for persistence and GUI. ToString(null, null) is same as ToString(). ToString(“G”, englishCulture) is valid for GUIs in English. Parentheses are added. Float is converted to double prior to printing. ToString(“G”, euroCulture) is not valid for GUIs anywhere. Parentheses are added. Float is converted to double prior to printing. ToString(“R”, CultureInfo.InvariantCulture) is valid for persistence everywhere. Parentheses are added. Float is converted to double prior to printing.
      • Current behavior: ToString() is valid for GUI in all cultures. In English, it’s valid for persistence and GUI. ToString(null, null) is the same as ToString(). ToString(“G”, englishCulture) is valid for GUIs in English. ToString(“G”, euroCulture) is valid for GUIs in Europe. ToString(“R”, CultureInfo.InvariantCulture) is valid for persistence everywhere.














  • Sce.Atf.Controls.Adaptable.Graphs.D2dGraphRenderer had a misspelled property. MaxiumEdgeThickness has been renamed to MaximumEdgeThickness.
  • Removed Sce.Atf.Dom.Template's abstract Model property, and made the Target property abstract. Clients with derived classes can rename their 'Model' property to 'Target' to fix the compile error. The reason for this breaking change is because the Target and Model properties were the same thing, and so made the class unnecessarily complicated.
  • PerforceService.RequestProcessed mistakenly had a setter and it has been removed. It has always been impossible for the caller to know if all Perforce requests have been processed since that knowledge has always been internal to PerforceService.
  • The following breaking changes have been made to Sce.Atf.Controls.PropertyEditing.LongEnumEditor:
    • By default, the user can no longer enter arbitrary text into the combo box. This behavior is probably what is most expected. To allow for arbitrary user input, set TextEditEnabled to true.
    • Initialize(string[]) is now an explicit interface implementation, as it always should have been. Please use DefineEnum(string[]) instead.
    • DropDownHeight has been removed. Please use MaxDropDownItems instead to specify the maximum height of the list of dropped down items.
    • DefineEnum(string[] names, int[] values) has been removed because the ‘values’ parameter was always ignored.
    • The public static event EnumSelectionChanging has been removed because the client that requested it never used it and because the listener would only know the selected item, but not the LongEnumEditor object that was being edited, so we think this event is not generally useful enough.
  • IFileDialogService calls now return a Sce.Atf.Applications.FileDialogResult instead of System.Windows.Forms.DialogResult, to remove the dependency on WinForms.



Detailed List of Changes by Category



Open Source/Documentation

  • Moved all ATF wiki documentation from SHIP to GitHub.
  • Added Apache v2.0 license in License.txt and updated the copyright notices in the source code and test scripts.
  • Removed code marked obsolete. See Breaking Changes for details.
  • Changed the license and confidentiality text on our PDF documentation (and the source Word docs) to match our open source license. Updated the copyright text.
  • Added GitHub's required README.md. *.md stands for Markdown wiki format, but it's still just a text file. It is based on our ReadMe.txt file but reflects the differences in the public repository structure.
  • Put in an easy way to disable ATF usage logging for the public GitHub repository. We can use the PUBLIC pre-processing directive for these kinds of differences now.
  • Removed ATFProgrammer_Guide_exported_from_wiki.pdf because 1) it's available publicly on GitHub, 2) it has formatting errors, 3) and it's really large.
  • Removed links to SHIP from documentation.
  • Removed the old Samples/LevelEditor directory and the ReadMe.txt file that it contained, that told people where to find LevelEditor. This just causes confusion to potential new clients.
  • Updated the 'Supported Tools' section of ATF-GettingStarted.doc to say that .NET Framework 4 and C# 4 are required and VS2013 is supported.
  • Improved comments and added missing comments for publicly visible types and members.
  • Added ATF_API-Reference.chm file created by Sandcastle. Also added a project to build the chm for the ATF API.


Changes Imported from GitHub

  • Removed redundant null check in Pair.cs. (lioncash)
  • Fixed ToString() formatting for BezierCurve and Seg2F. (lioncash)
  • Fixed an exception message within a DomNodePropertyMatch constructor. (lioncash)
Circuits
  • Fixed a bug with the Bounds property of circuit elements which caused the StandardLayoutCommands to not be able to align on the right or bottom sides correctly.
  • Fixed a crash when adding wires in CreateTestCircuitProgrammatically() by ensuring group's pins are visible after the addition (by default they were hidden).
  • Make CircuitValidator no longer require the adapted DomNode also support ReferenceValidator (CTE does not need ReferenceValidator because its wires are set up very differently and specially handled.)
  • Added comments to the CircuitEditor's Editor class.
  • Circuit templates: Fixed the bug that the original template UUID was not recovered if you demoted a template reference instance to a copy instance, then promoted to a reference instance again, which would fail to pop up the replacing or adding template dialog .
  • Initial implementation of supporting circuit template folders that can reside in other documents:
    • Added CategoryUniqueIdValidator to support local-unique ids, necessary since the template tree hierarchy now has mixed internal and external (imported from other document) nodes, where the node IDs in external documents may collide with the IDs of internal nodes
    • DomNode: added SetTag()/GetTag() to tag nodes at runtime; need to investigate the dynamic (mutable) DOM attribute approach for the same purpose
    • All reference instances to templates are resolved by document-agnostic GUIDs, and currently GUID-based resolving is done only in the circuit-customized reader and writer
  • If a template folder is External it now displays a special icon to indicate the external nature.
  • Template library external folder: some UI nuance handling for template lister to disallow moving around any item inside an external template folder; disallow cross-document moving ; disallow prompting items to an external folder directly, instead they are added to root folder if the selected folder is an external folder.
  • Hovering over the external template folder shows the template file path.
  • Added support to load/display/save files that have missing external templates; these missing templates are displayed with special style.
  • Added resource package_error.png, to be used for a circuit element rendering that references a missing external template.
  • Added a “Rescan Template Documents” context-menu command in the Templates Lister to reload all referenced template documents in the Template Lister.
  • Fixed a problem with output group pin initial index value setting in UpdateGroupPins. It was mistakenly using m_inputs.Count, it now correctly uses m_outputs.Count.
  • Circuit element: Added InputPin(index) and OutputPin(index) helper methods.
  • Circuit templates are now only editable in the document that owns the template.
  • Fixed a problem where it wasn't possible to connect a referenced group pin to any other pins from the UI.
  • Fixed a typo: GroupingCommands.DefaultPinOderStyle property was renamed to DefaultPinOrderStyle.
  • ViewingContext.ConstrainBounds() fixed a crash when there are no layout constraints. (Creature Editor graph view does not have the usual grid adaptor.)
  • CircuitEditingContext added 3 virtual protected methods: OnObjectInserted(), OnObjectRemoved(), OnObjectChanged(), so derived class can raise ItemInserted, ItemRemoved, ItemChanged events respectively.
  • CircuitEditor: fixed a crash when creating a connection from an internal template sub-node to an external node.
  • FsmEditor and StateChartEditor samples: fixed a problem where a temporary wire was not visible, to indicate making a connection between elements.
  • Circuit external templates: prune old templates at the end of "Rescan Template Documents" processing.
  • CircuitEditor: added back now obsolete "typeRef" attribute (now replaced by "guidRef") for template type reference in schema file so we can read older circuit documents that have templates; added conversion code so the older version of circuit document will be saved in the new format.
  • Fixed CircuitEditor's alignment commands to work correctly with groups and elements. Fixed the three implementations of ILayoutContext that were ignoring the BoundsSpecified flags.
  • Circuit groups: fixed a bug where the circuit group would get a little bit taller each time it was resized to be wider.
  • Fixed a problem with node placement offset, by moving code that computes the y-range of floating pins from D2dSubgraphAdapter.GetBounds(items)to ViewingContext.GetBounds(). The former method is for selected items so it is not appropriate to always including y-range of all floating pins ; the latter is for all items, so it is appropriate to include when the the view is associated with a group editor.
  • CircuitEditor: fixed the cursor icon that displays when trying to create wires between elements in a group, in the expanded view.
  • Fixed dangling wires crash caused by deleting nodes of an externally referenced template.
  • GroupInstance and ModuleInstance: Added Input|OutputPin(index) overrides to handle missing types.


Direct2D

  • Added D2DFactory.MeasureText to measure the width of a string drawn in a specified font.
  • Cleaned up and added functionality to D2dGraphics.
  • Adding support to render to a WIC renderTarget.
  • Adding support for D2dGeometry and D2dGeometrySink.
  • Add hit-testing methods for D2dGeometry.
  • D2DFactory: Allow for the creation of a TextLayout using a transformation matrix.
  • Added the D2dGeometry Bounds property.
  • Fixed memory leak in D2dTextLayout and D2dTextFormat.
  • In D2dTextFormat, use the correct FontHeight calculation.
  • Improve handling of label and tip management to deal with long marker labels.
  • D2dCircuitRenderer:
    • Added properties for customizing element drawing: RoundedBorder, TitleBackgroundFilled, PinDrawStyle.
    • Added protected virtual methods for custom element drawing: GetElementTitle and GetElementDisplayName.
    • Fixed a crash when the brush associated with an element type is not a D2dLinearGradientBrush.
    • Added the optional document registry parameter in its constructor, used to clear the element type cache when a document is removed.
    • GetElementSizeInfo: Added optional title parameter to include customized title text size for element size computation
    • ElementTypeInfo: Added Title field so if cached title is different the cached data will be invalidated to trigger the element size recalculation. Caching the title value is necessary because Creature Editor may have different titles for the same type of elements
    • Modified the height calculation for expanded group rendering.
  • Updated MousePick in DraggingContext getter of D2dGraphEdgeEditAdapter because derived classes may need to access the mouse hit record.
  • D2dGraphEdgeEditAdapter: Added OverRouteCursor, FromPlaceCursor, ToPlaceCursor, and InadmissibleCursor for customizing edge editing cursors
  • D2dGraphAdapter: Fixed a problem with the GetBounds() method that was causing the reported width and height to be scaled incorrectly.


Property Editing

  • Added a new custom button called OverlayButton.
  • PropertyGridView shows the reset button for the currently selected property.
  • PropertyGrid now has a Reset All button.
  • Refactored and added more functionality to PropertyEditingCommands. The context menu now has the following items:
    • Copy Property
    • Paste Property
    • Reset Property
    • Copy All
    • Paste All
    • Reset All
    • ViewInTextEditor
  • Fixed a one pixel off drawing error PropertyGridView.
  • Removed OnPaint and OnBackColorChanged methods in PropertyEditingControl
  • PropertyEditingControl: fixed a problem reported by a client (but that I couldn't reproduce) where if you clicked the drop-down button on a property (to show the custom editor) twice, then the second time the editor wouldn't show. The fix is safe, because in my tests m_dropDownForm.Visible was already false and the fix is to set it to false.
  • PropertyGridView now handles arrow and tab keys.
  • Enter key moves focus to the next input box for the following UITypeEditors:
    • NumericTupleEditor
    • NumericMatrixEditor
    • ArrayEditor
  • EmbeddedCollectionEditor:
    • Fixed a bug where if an item were added and then removed within the same transaction, the two events would not cancel each other.
    • If the ObservableContext did not raise an ItemInserted or ItemRemoved event in response to the user pressing the '+' or '-' buttons, then previously, the items could not be inserted or removed; but now, the list of items will always be updated.
  • LongEnumEditor: Completely rewritten. Can now display images. The reset button will restore the property to its original value. The following breaking changes have been made:
    • By default, the user can no longer enter arbitrary text into the combo box. This behavior is probably what is most expected. To allow for arbitrary user input, set TextEditEnabled to true.
    • Initialize(string[]) is now an explicit interface implementation, as it always should have been. Please use DefineEnum(string[]) instead.
    • DropDownHeight has been removed. Please use MaxDropDownItems instead to specify the maximum height of the list of dropped down items.
    • This overload has been removed: public void DefineEnum(string[] names, int[] values) because the ‘values’ parameter was always ignored.
    • The public static event EnumSelectionChanging has been removed because the client that requested it never used it and because the listener would only know the selected item, but not the LongEnumEditor object that was being edited, so we think this event is not generally useful enough.
  • NumericTextBox: On mouse click, selects the content of the input box in the property editor.
  • DomPropertyEditor sample: Added a new "Level" property to the Orc and demonstrate displaying the enum value as an int or a string.


Skinning

  • Bug fix: Toolbar button highlight and toggle status was broken when applying non-default skin.
  • Fixed a few issues with CustomColorTable and specify more overrides in sample skin.
  • Updated Dark.skn for more uniform skinning.
  • Support skinning on all UITypeEditors.
  • Disabled SetFont in PropertyView as it caused SkinService to throw an exception due to cloning a disposed font.
  • Added FormNcRenderer to render the non-client area (title bar, form border, caption buttons, form icon, and title text).
  • Added skinning support for the title bar, and added title bar skin to Dark.skn and Light.skn.
  • Created SkinEditor and added support for the editor UI, saving and loading skins, property descriptors for skin style objects.
  • Fixed a crash when the skin file setting is not set.
  • Added ActiveSkinFile property to SkinningService. If this property is not null, launching the Skin Editor will auto-load this skin for editing.
  • Removed the empty Classic.skn skin file.
  • Fixed skinning issues with ColorPicker: initial colors were not set properly, and some radio button text was cropped.
  • Changed the Brush used for drawing Text property of the TreeControl from SystemBrushes.WindowText to ItemRenderer.TextBrush so skins can be applied to it.
  • SkinService: Disabled the Load and Revert commands when the skin editor is running, so that the skin editor is always editing the active skin and to avoid a more complicated user interface. Did a little bit of refactoring. The static internal 'Instance' property wasn't needed any more, so it was removed.


Source Control

  • PerforceService.GetInfo() - if 'fstat' p4 command fails, do not attempt to print an error message if none have been provided.
  • Updated the Perforce .NET libraries to address the Heartbleed bug. http://www.perforce.com/blog/140422/heartbleed-vulnerability-update-patched-perforce-clients-now-available
  • PerforceService: addressed multi-thread access issues and did a lot of clean-up. Specifically:
    • ConnectionManager: put in guards on the P4API.NET objects since they can only be accessed by one thread at a time.
    • FileInfo: got rid of this "register request" idea because it added a lot of overhead in terms of code (requiring the PerforceRequestQueue class). The benefit that this feature provided was to always return "status unknown" if there was a pending Perforce server request for this file. I think it's OK to simply use the last known status in this situation.
    • PerforceRequest: removed unused properties on this internal class.
    • PerforceRequestQueue: removed this internal class entirely. It didn't seem to add necessary functionality.
    • Rewrote the background thread to use an event triggering system rather than a 2-second polling system. The logic became simpler and I think the UI will be more responsive this way and the performance might be a bit better, too.
    • Put in locks on the shared objects that are accessed by both the GUI thread and the worker thread.
    • When there are multiple Perforce requests pending on the worker thread, they are now batched up, and then the Perforce server is queried for all of the related files at once. Previously, each pending request generated a separate query to the Perforce server. Querying the status of hundreds or thousands of files should be much more efficient now.
  • PerforceService ConnectionManager now handles exceptions in ValidateConnection().
  • Added Atf.Subversion project, which implements ISourceControlService using Subversion.
  • Removed the old P4.Net \ThirdParty libraries. These have been replaced by P4API.Net since ATF 3.7.
WPF Enhancements
  • Documented below, in Appendix A: ATF 3.8 Release Notes WPF Supplement.
Other
  • ConsoleTextBox (used in the IronPython window, for example) can now process text containing multiple commands.
  • Added an ATF logo and icon that we got from a graphic artist. The logo is now used in the Help -> About screen. The icon is used to represent the sample applications in the title bar and in the Windows taskbar.
  • Added EnumerableUtil.ForEachWhileTrue to enumerate over a collection while a specified condition is true.
  • Cartesian2dCanvas.cs: placed common code for drawing ticks into a private method.
  • MathUtil: Fixed NullReferenceException in Clamp method when value parameter is null.
  • Added HistoryLister, a visual list of the undo/redo stack. The user can click on the list to undo or redo a large number of commands. The maximum number of commands visible is a user-editable property. The default is 150, and the minimum is 10. Added this to several sample applications.
  • ATF ThreadSafeProgressDialog - Handle the rare case of the parent dialog being disposed before the thread's Run() method finishes, by adding a check for m_parent.Owner == null in the "finally" block of the Run() method.
  • Provided a Shell type drag drop interface to a drag drop action. Calling the right methods on a form makes it show the icons from the shell (so the images when you drag a file over explorer for example), but also allows you to attach your own image to a drag drop action when initiating a drag drop. (Used by Metrics.)
  • DefaultTabCommands: fixed a problem where sub-document windows (like circuit group windows) could cause a crash, because the control's description was an illegal path name (e.g., "Untitled:Group").
  • Most math classes, like Vec3F, have had their ToString() methods improved to work with European languages and to have more consistent behavior. The main problem was that in languages that use a ‘,’ as a decimal point, then a ‘;’ should be used to separate numbers in a list. Previously, a ‘,’ was hard-coded to separate numbers in a list regardless of the current culture setting. Addresses https://github.com/SonyWWS/ATF/issues/5 . See Breaking Changes for more information about the behavior.
  • Updated to SharpDX 2.5.0 Stable release.
  • Reworded the recent HistoryLister's user preference text.
  • Added ColorUtil.Lerp(), EnumerableUtil.IndexOf(), and a new AttributeUtils class to Atf.Core.
  • Minor breaking change: Sce.Atf.Controls.Adaptable.Graphs.D2dGraphRenderer had a misspelled property. MaxiumEdgeThickness has been renamed to MaximumEdgeThickness.
  • CustomColorTable: fixed four typos that were causing the wrong settable properties to be used in the non-settable properties.
  • Removed Sce.Atf.Dom.Template's abstract Model property, and made the Target property abstract. Clients with derived classes can rename their 'Model' property to 'Target' to fix the compile error. The reason for this breaking change is because the Target and Model properties were the same thing, and so made the class unnecessarily complicated.
  • Made some LINQ-related performance optimizations.
  • Due to a recent change in PropertyEditingControl, the DrawingEditableValue getter is obsolete. It was always returning false. It is now marked as obsolete.
  • Added KeyPressEventArgs and PreviewKeyDownEventArgs for Atf.Gui.Input.
  • DefaultTabCommands: added a customization point so that clients can specify which docked Controls should have these commands ("Copy Full Path" and "Open Containing Folder") available on the tabs.
  • In EnumerableUtil's IndexOf extension, use default equality comparer instead of throwing ArgumentNullException.
  • Marked DevilImageLoader as obsolete and removed its usage from ImageLoaderRegistry because of memory corruption problems. We have other image loaders that handle all of the common image file formats. Made DdsCompressor use DdsImageLoader instead of DevilImageLoader.
  • https://github.com/SonyWWS/ATF/issues/9
  • Collada schema file: removed the !DOCTYPE element because it was causing a seemingly harmless (but annoying) XML exception in XmlSchemaTypeLoader.Load(string) related to "DTD processing" in the .NET XmlSchemaSet. I couldn't find a better fix. This was one of the more minor issues reported in https://github.com/SonyWWS/ATF/issues/9 .
  • Updated the CodeEditor sample to make it use the UnhandledExceptionService component.
  • Sce.Atf.Adaptation.Adapter: fixed a problem with GetDecorators() where the same object could be returned twice, if the Adaptee could be adapted to the same object as the Adapter. Added a unit test to demonstrate the problem and prove that the fix works. Corrected some comments relating to IDecoratable.
  • DomNode: Made the Copy() method also copy the ChildInfo. Previously, the ChildInfo (which describes how the parent DomNode considers this current DomNode) would be null until the parent is set. This is OK for all nodes except the root DomNode, which requires a ChildInfo in order to be persisted. So now, root DomNodes can be persisted even if they are copies.
  • ListViewAdapter: Fixed an exception "An item with the same key has already been added" if the same DomNode insertion was observed multiple times. This case was rare but possible.
  • ColorPicker: made the error messages localizable.
  • Added AutoScaleMode to ColorPicker so it scales with Font size.
  • Updated namespace Sce.Atf.DragDrop to Sce.Atf to prevent conflicts with System.Windows namespace.
  • Added TransactionReporter, a DomNodeAdapter that reports the final "cleaned-up" DOM changes that happen during a transaction, without duplicate attribute changes, for example.
  • Added Sce.Atf.AssemblyBannerAttribute to allow specification of a banner image for an assembly.
  • Added Atf.Gui.CustomizeAttribute (and derived Sce.Atf.Controls.PropertyEditing.PropertyView.CustomizeAttribute from it).
  • Cloned Scea.Editors.Commands classes to Atf.Gui.Commands. Cloned classes are not related to their Scea counterparts.
  • Added bool property DocumentClientInfo.AllowStandardFileCommands, providing the option to prevent any registered IDocumentClient from having standard file commands automatically added for its document type.
  • Added RecentDocumentCommands.MaxPathLength.get, to enable paths displayed in the root file menu to be truncated.
  • Fixed bug in WeifenLuo.WinFormsUI.Docking library, where dock panels with no icon specified, and were setting 'ShowIcon' to false, were displaying a Windows placeholder icon, when any dock panel was auto-hidden.
  • Fixed exception in AutoHideStripBase when GetTabStripRectangle is called for a pane whose dock state is Unknown.
  • Added DefaultExtension property to DocumentClientInfo. If the editor supports multiple extensions, setting the default extension will stop ATF from prompting the user to choose the extension, when creating a new file.
  • DomNode: added a Copy(DomNode) method as a convenience.
  • DomNode: made a subtle change that allows callers of GetLocalAttribute() to know whether an attribute is at its default value or was set to a value that happens to equal its default value. This change allows client code, such as in Santa Monica Studio's Creature Editor, from ATF 3.5 and earlier to use GetLocalAttribute() as they expected.
  • Moved GetPhysicalMemoryMB() from AtfUsageLogger.cs to Kernel32.cs and changed its access level from private to public.
  • WinFormsUtil: added UpdateBounds(), which will update a Rectangle given BoundsSpecified flags.
  • Statechart Editor: fixed a long-standing problem with the location of child states that are pasted into their parent states.
  • Initialize main form title with product name for sample apps (CircuitEditor, FsmEditor & StatechartEditor) to avoid blank title bar when no document is opened at app launch.
  • UsingDirect2D sample app: Minor change to the info on the title bar, to make the text more readable. (Added a couple spaces and some periods.)
  • Improved exception handling in legacy FileExplorer sample.



Appendix A: ATF 3.8 Release Notes WPF Supplement

This section describes the changes made as part of the integration of ATG's WPF implementation into ATF 3.8. It is broken down by assembly. The changes to assemblies other than Atf.Gui.Wpf are non-breaking. (Breaking changes to those assemblies are described in the main ATF 3.8 release notes.) For Atf.Gui.Wpf, many of the modifications and deletions may be breaking changes for existing WPF applications, so please review them carefully. If this release has broken your code, please create an issue at https://github.com/SonyWWS/ATF/issues .

Atf.Core Added the following new classes:

  • ArgParser: This replaces the one in Scea.Utilities, which has been marked Obsolete.
  • IObservableCollection: Interface shorthand for observable collections. Combines IList, INotifyPropertyChanged, and INotifyCollectionChanged without adding any additional methods.
  • PropertyChangedEventArgsCollection: Special collection for PropertyChangedEventArgs: ensures no matching args sets are added
  • Adaptation\BindingAdapterObject: CustomTypeDescriptor object that adapts an IAdaptable object and provides a customized set of property descriptors for binding
  • Dom\ObservableDomNodeAdapter: DomNodeAdapter that provides property change notifications
  • Dom\ObservableDomNodeListAdapter: DomNodeListAdapter that provides property change notifications
  • Dom\ObservableDomPropertyAttribute: Attribute used on properties of DomNodeAdapters derived from ObservableDomNodeAdapter. When placed on a property, the ObservableDomNodeAdapter will raise NotifyPropertyChanged events for this property when the corresponding attribute changes.
Atf.Gui Added the following new classes:
  • AssemblyBannerAttribute: Attribute to allow specification of a banner image for an assembly
  • EnumUtil: Static utility methods for working with enums
  • ObservableUtil: Utilities to use strongly typed property changed notifications for INotifyPropertyChanged
  • Applications\DirectoryWatcherService: Service to watch for changes to directories
  • Applications\ICommandService: Interface for service that presents commands in menu and toolbar controls. Now works with WPF and WinForms apps.
  • Applications\IDirectoryWatcherService: Interface for a service that watches for changes to files within a directory
  • Applications\IHelpContext: Interface for data objects that provide context sensitive help via schema annotations
  • Applications\ILastHitAware: Interface to keep track of the last item hit
  • Applications\IMessageBoxService: Interface for displaying a message box without depending on the (WinForms/WPF) implementation details.
  • Applications\Listers\FilteredTreeView: Wrapper for an ITreeView which provides filtering
  • Applications\Listers\IndependentFilteredTreeView: Filtered tree view with an independent ISelectionContext from the wrapped TreeView
  • Applications\MenuInfo: Container for menu information including Tag, Text and Description.
  • Applications\SettingsServiceBase: Service that manages user editable settings (preferences) and app settings persistence
  • Applications\VersionControl\SourceControlCommandsBase: Component that implements source control commands
  • Collections\AdaptableObservableCollection: Wraps an IObservableCollection of one type to implement IObservableCollection of another type
  • Collections\AdaptingCollection: Base class for collections that can sort or filter their contents, including FilteringCollection and OrderingCollection.
  • Collections\CollectionChangedListener: Listens for specific property changes for all items within a collection
  • Collections\LinkedListExtensions: Extension methods for LinkedList to find next and previous elements with a given value
  • Collections\ObservableCollectionAdapter: Base class for AdaptableObservableCollection
  • Collections\PriorityQueue: Queue of items sorted by priority
  • Collections\ReferenceCollectionAdapter: Collection to adapt an observable collection of references to an observable collection of their reference targets
  • Collections\SortedObservableCollection: Utility class for a sorted observable collection
  • Dom\BindingAdapter: DomNodeAdapter which adds support for data binding to adapters obtained through the IAdaptable interface.
  • Dom\DomNodeHelpAdapter: Adapts a DomNode to IHelpContext using schema annotation help keys
  • Dom\DomNodeTypeExtensions: Extension methods for working with DomNodeType
  • Dom\ListContext: Context for editing lists. Adds IInstancingContext, ILastHitAware, IObservableContext, and INotifyPropertyChanged to EditingContext
  • Dom\ObservableCustomTypeDescriptorNodeAdapter: Node adapter to get PropertyDescriptors from NodeType and other metadata
  • Models\AdapterViewModel: View model class that can adapt an adaptee and provide a bindable As property
  • Models\CheckedTreeNode: View model for a tree node with a tri-state check box
Added StandardCommandGroup.WindowLayoutItems. Added CommandInfo.ImageKey to allow specifying the icon as an object rather than a string, for use by WPF applications. Added overloads of ICommandService.RegisterCommand that take an imageKey object instead of an imageName string. Added DocumentClientInfo.NewIconKey and OpenIconKey to allow specifying the icon as an object rather than a string, for use by WPF applications.

Atf.Gui.WinForms Moved the following to the Atf.Gui assembly, but kept the same namespace:

  • Applications\FileWatcherService
  • Applications\IFileDialogService
  • Applications\StandardFileCommands
Moved HelpAboutCommand to the Atf.Gui assembly. Made the ShowHelpAbout method abstract, and provided a default implementation in Sce.Atf.WinForms.Applications.HelpAboutCommand, in the Atf.Gui.WinForms assembly. This makes the HelpAboutCommand base class platform agnostic.

Atf.Gui.Wpf Added:

  • ColorUtil: Utility functions for working with colors
  • DataContextSpy: Class used to enable ElementName and DataContext bindings on non-logical tree XAML items
  • DebugUtils: Handy classes for debugging xaml bindings during execution
  • FindFileResolver: Resolver that attempts to repair broken file system URIs with user assistance
  • IMenu: Interface for CommandService menu items.
  • IToolBar: Interface for CommandService toolbar items.
  • ResourceUtil: Provides support for using WinForms-based resources like icons and cursors in a WPF app.
  • Applications\AppearanceService: Component that manages skinning
  • Applications\AutoDocumentService: Service that auto-loads a document at application startup
  • Applications\CommandInfos: Extension methods for using Sce.Atf.Applications.CommandInfo with WPF applications
  • Applications\FileDialogService: WPF implementation of Sce.Atf.Applications.IFileDialogService
  • Applications\FIleSystemDataProvider: A DataSourceProvider which exposes a collection of ObservableFileInfo objects, representing the files in a particular directory. Changes made to the files in that directory are reflected at runtime.
  • Applications\IProtocol: Interface for providing information about a protocol and interacting with targets connected via that protocol
  • Applications\ITarget: Interface for getting target information such as name, protocol, and connection status
  • Applications\ITargetDiscovery: Interface for discovery of targets by protocol
  • Applications\ITargetService: Interface for target management
  • Applications\ITransportLayer: Interface for transport layer communication
  • Applications\Listers\ITemplatingContext: Interface for a prototyping context, which can present a tree view of its contents and create IDataObjects from them
  • Applications\MessageBoxService: Shows a Sce.Atf.Wpf.WpfMessageBox, converting Sce.Atf.Applications.* types for buttons, images, and return types to the System.Windows.* types required by Sce.Atf.Wpf.WpfMessageBox.
  • Applications\SettingsService: WPF implementation of ISettingsService to handle persistence of preferences and settings.
  • Applications\StandardEditCommands: Created from Atf.Gui.WinForms.StandardEditCommands, but without using WinForms DataObject.
  • Applications\SwitchToService: Service to handle control+tabbing between content
  • Applications\SynchronizeInvoke: Wrapper class that implements ISynchronizeInvoke for WPF applications
  • Applications\TargetService: Implementation of ITargetService for target management
  • Applications\TcpIpProtocol: Implementation of IProtocol for TCP/IP target management
  • Applications\TcpIpTarget: Implementation of ITarget for a TCP/IP target
  • Applications\TcpIpTransport\*: Handles the actual communication to a TCP/IP target
  • Applications\VersionControl\CheckInDialog: UI for checking files in to source control
  • Applications\VersionControl\ReconcileDialog: UI for reconciling offline work
  • Applications\WebServices\FeedbackForm: Form for submitting bug reports
  • Applications\WebService\ProjectMappingAttribute: This attribute can be placed on an assembly (usually in the AssemblyInfo file) to indicate the identifier that is used for mapping to a SourceForge project for version checking and bug submission. (If this attribute is not present, the AssemblyTitle attribute is used instead.)
  • Applications\WebServices\UserFeedbackService: Service that provides a UI for displaying and submitting a feedback\bug report form
  • Applications\WebServices\VersionCheck: Utility to check to see if there is an update on SourceForge
  • Applications\WebService\VersionUpdateService: Service that updates the application to the latest version on SHIP
  • Behaviors\ActivateContextBehavior: Behavior to catch mouse down events and set ATF context registry active context to the current data context of the element
  • Behaviors\ButtonPopupBehavior: Displays the associated context menu on a button click.
  • Behaviors\ContextSensitiveToolbar: Toolbar behavior to display context sensitive information based on the current selection
  • Behaviors\DataPiping: Dependency property management for DataPipes
  • Behaviors\DialogButtonWorkaround: Attached property replacement for the standard Button.IsDefault to work around a bug in WPF detailed here: http://www.thomasclaudiushuber.com/blog/2008/05/02/lostfocus-textbox-vs-buttons-isdefault-property
  • Behaviors\EventToCommand: Invokes a command when a UI event trigger is activated.
  • Behaviors\InstancingDropTargetBehavior: Drag and drop target that creates a new instance of the object on drop
  • Behaviors\ItemsControlInsertionAdornerBehavior: Abstract base class for drawing insertion adorners on items controls, such as an insertion line for list controls or highlighting the drop target item on tree controls.
  • Behaviors\ItemsControlSelectFirstBehavior: Automatically selects the first item in a list-based control (such as a ComboBox) when its ItemsSource changes.
  • Behaviors\LastHitAwareBehavior: Behavior that keeps track of the last item that was clicked on or dragged over.
  • Behaviors\ListBoxScrollToEndBehavior: Behavior to autoscroll newly added list items into view
  • Behaviors\PasswordBoxBehavior: Behavior to handle the PasswordChanged event on a PasswordBox.
  • Behaviors\RoutedTemplateSelector: A DataTemplateSelector which raises the bubbling TemplateRequested routed event on the templated element when a DataTemplate must be chosen.
  • Behaviors\SelectorSelectionBehavior: Behavior to set the command that is executed when a selection changes.
  • Behaviors\TextBoxNumericBehavior: Define behaviors for numeric entry in a TextBox, including minimum and maximum value and whether to allow integer or decimal numbers.
  • Behaviors\TextBoxSelectAllBehavior: Behavior to select all text in a textbox when it receives focus
  • Behaviors\ThemeStyleBehavior: Attached Property which allows a style which uses BasedOn="" to be re-based when the application theme is dynamically changed. Normally if the BasedOn property of a style is set, once the app is loaded, changing the target style will have no effect: the derived style will remain based to the original style.
  • Collections\PriorityQuadTree: Collection of QuadNodes sorted by priority
  • Controls\Adaptable\IViewAwareContext: Interface for contexts which are aware of the view bound to them
  • Controls\BalancedWrapPanel: Positions child elements sequentially from left to right or top to bottom. When elements extend beyond the panel edge, elements are positioned in the next row or column.
  • Controls\ClippingBorder: A border that clips its contents (from Microsoft)
  • Controls\ConfirmationDialog: Displays a message with Yes\No\Cancel buttons.
  • Controls\DirectoryPicker: A directory selection control for use in property editing.
  • Controls\DomRecorderView: A user control that displays the DOM events recorded by Sce.Atf.Wpf.Dom.DomRecorder.
  • Controls\EditTextBox: Text box that updates the data binding when the user hits return.
  • Controls\FilePicker: A file selection control for use in property editing.
  • Controls\FindFileDialog: Used with FindFileDialogViewModel and FindFileResolver to attempt to find missing files with user assistance.
  • Controls\FindTargetsDialog: Scans for and displays a list of available targets.
  • Controls\Icon: Icon class with options for image source, selected\deselected images, and shadows.
  • Controls\WindowLayoutManageDialog: Dialog to manage window layouts
  • Controls\PropertyEditing\StandardValuesConverter: A type converter which provides a set of standard values when queried. This can be used on a PropertyDescriptor to force property editors to see a set of standard values. e.g. a string based property can be made to act like an Enum property.
  • Controls\PropertyEditing\ValueEditors\FilePathValueEditor: Custom property editor for editing file paths
  • Controls\PropertyEditing\ValueEditors\FolderPathValueEditor: Data bound property editor that uses a template to edit a folder path
  • Controls\PropertyEditing\ValueEditors\IStringValueFilter: Interface for filtering a string value
  • Controls\PropertyEditing\ValueEditors\RangeSliderValueEditor: Slider property editor with a range of allowable values
  • Controls\PropertyEditing\ValueEditors\StandardValuesEditor: Property editor for an enumerable list of values
  • Controls\RangeBaseEx: Represents an element that has a value in a specific range. Adds extended information such as a default value, whether the value is logarithmic, and whether the value is currently being edited.
  • Controls\RangeSlider: A slider control that allows selection of a range.
  • Controls\RangeSliderBase: Base class for the RangeSlider that allows the range functionality to be turned on or off.
  • Controls\SettingDialog: Dialog for viewing and editing user preferences.
  • Controls\SettingsLoadSaveDialog: Dialog for importing and exporting user settings
  • Controls\SizeBasedTemplateSelector: Selects a template from a list based on the display size
  • Controls\SnappingBitmap: Bitmap that snaps to its parent
  • Controls\SplitButton: A button which has drop down content
  • Controls\StylableListView: A workaround for the issues with styling a standard WPF ListView described here: http://social.msdn.microsoft.com/Forums/en/wpf/thread/9cff5483-9608-4f33-98f3-a186de4fa306
  • Controls\SwitchToDialog: Dialog used by SwitchToService to display available controls and allow Ctrl+Tabbing among them
  • Controls\TargetDialog: Dialog for management of ITargets
  • Controls\TcpIpTargetEditDialog: Dialog for editing details of a TCP/IP target
  • Controls\TileView: Class representing a tiled layout view
  • Controls\ToolBarItemTemplateSelector: Helper class to select a template for ToolBarItems
  • Controls\TreeViewWithSelection: Tree view that adds the capabilities of ISelectionContext
  • Controls\ValueChangedEventManager: A more robust event manager for PropertyDescriptor value changed events
  • Controls\VirtualizingWrapPanel: Arranges and virtualizes content on a panel with wrapping
  • Controls\WindowLayoutNewDialog: Dialog for editing the name of a new window layout
  • Docking\DockedWindow: This class represents a window while it is docked into the hierarchy. It provides the title bar, close and collapse icons, and can be resized within the hierarchy.
  • Docking\DockPanel: Root class that provides docking\undocking\collapsing windows and other things
  • Docking\FloatingWindow: Window that contains undocked content
  • Docking\IDockable: Interface used by every class that can accept and preview dock\drops
  • Docking\IDockContent: IDockable content interface, every content that can be docked must implement this.
  • Docking\IDockLayout: Interface implemented by every docking control host
  • Docking\ResizablePopup: Resizable Popup that can be resized to one side depending on which side it is docked to
  • Docking\SideBarButton: Button that works with the SidePopup
  • Docking\SidePopup: Collapsible panel on the side of the docking window
  • Docking\TabLayout: Docking container that represents its children as tabs
  • DOM\DataContextAdapter: Utility class used to adapt FrameworkElement DataContext using ATF IAdaptable pattern
  • DOM\DomRecorder: DOM recorder that records DOM events on the active context and displays them in a list.
  • DOM\HelpAnnotations: Class for working with objects that provide context sensitive help via schema annotations
  • Extensions\DispatcherExtensions: Provides a set of commonly used Dispatcher extension methods such as InvokeIfRequired
  • Extensions\MiscExtensions: A set of miscellaneous extensions mostly related to showing dialogs.
  • Extensions\TreeViewExtensions: Extensions for working with TreeViews, such as GetAllTreeViewItems
  • Extensions\VIsualTreeExtensions: Extensions for working with a VisualTree
  • Interop\KeysInterop: Static utility methods for converting among WinForms, WPF, and ATF key types
  • Markup\CommandServiceExtension: XAML markup extension for working with CommandService
  • Markup\EnumValuesExtension: XAML markup extension for working with enum values
  • Markup\GenericExtension: XAML markup extension for working with generic types
  • Markup\ResourceKeyBinding: XAML markup extension to provide data binding for a resource key
  • Markup\TypeConverterExtension: XAML markup extension that converts between type names and Types for source and target types
  • Models\AdaptableViewModelCollection: This class wraps an IObservableCollection of one type to implement IObservableCollection of another type. This class differs from AdaptableObservableCollection in that it always creates a complete new set of adapters for the underlying collection using the IAdapterCreator passed in to the constructor. This feature is useful for WPF MVVM situations where a collection must be adapted to a new collection of unique view models rather than shared view models.
  • Models\ConfirmationDialogViewModel: Interaction logic for ConfirmationDialog. Adds a "No" button to the CommonDialog's standard Yes\Ok and Cancel buttons.
  • Models\FindFileDialogViewModel: Interaction logic for the FindFileDialog that resolves missing files.
  • Models\FindTargetsViewModel: Interaction logic for the Find Targets dialog
  • Models\SettingsDialogViewModel: Interaction logic for the Settings dialog that displays and edits user preferences
  • Models\SettingsLoadSaveViewModel: Interaction logic for the dialog that imports and exports user settings
  • Models\ShowDialogEventArgs: Event args to allow decoupling of view models from dialogs. Rather than directly launching a dialog, a view model can provide an event subscribed to by the view using these event args.
  • Models\TargetViewModel: Interaction logic for a Target
  • Models\TargetDialogViewModel: Interaction logic for the target management dialog
  • Models\TcpIpTargetEditDialogViewModel: Interaction logic for the dialog for editing details of a TCP/IP target
  • Models\WindowLayoutNewViewModel: Interaction logic for new window layout naming dialog
  • Models\ManageWindowLayoutsDialogViewModel: Interaction logic for the dialog that manages window layouts
  • Resources\DockIcons.xaml: Icons used by the docking framework
  • Resources\dialog_error, dialog_information, dialog_question, dialog_warning: Icons for use with message boxes
  • Skins\ReferencedAssemblySkin: Information about a skin including a URI so it can be referenced from another assembly
  • Skins\Skin: Abstract base class to assist with loading skin resources
  • Themes: Added new styles for ClippingBorder, CommonDialog, DockPanel, DockedWindow, FilePicker, DirectoryPicker, FloatingWindow, RangeSlider, SideBarButton, SidePopup, SplitButton, TabLayout, and TileView.
  • Value Converters\AdaptingValueConverter: Converter for converting back and forth between two IAdaptable types
  • Value Converters\SimpleAdaptingValueConverter: Converter to convert one-way to an IAdaptable type
  • Value Converters\AdaptingCollectionValueConverter: Converter to convert an IObservableCollection of one type to an IObservableCollection of another type using Iadaptable
  • Value Converters\BoolVisibilityConverter: Value converter that sets an item's visibility based on its boolean value
  • Value Converters\DomDataTemplateSelector: DataTemplateSelector for DomNodes which checks the type metadata for a data template tag
  • Value Converters\InterfaceTemplateSelector: DataTemplateSelector that selects a template based on an interface instead of a concrete type.
  • Value Converters\NullVisibilityConverter: Value converter that sets the item's visibility to Collapsed if the item is null
  • Value Converters\TypeConverter: Converter to convert a type to another type
Deleted:
  • CollectionUtil (replaced by VisualTreeExtensions)
  • DispatcherUtil (replaced by DispatcherExtensions)
  • TreeViewUtil (replaced by VisualTreeExtensions)
  • VisualTreeUtil (replaced by VisualTreeExtensions)
  • Interop\CommandServiceAdapter (not needed, unified ICommandService across platforms)
  • Models\MenuItem (replaced by CommandItem)
  • Models\MenuItemBase (not needed, CommandItem replaces MenuItem)
  • Models\MenuUtil (replaced by MainMenuViewModel)
  • Models\ToolBarTrayBinder (removed due to incompatible IMenu type)
Moved to Atf.Gui:
  • ObservableUtil
  • Applications\ICommandService
  • Applications\IHelpContext
  • Applications\MenuInfo
  • Models\AdapterViewModel
Modified:
  • Applications\CommandService: Now implements the common Sce.Atf.Applications.ICommandService.
  • Applications\ControlHostService: Now takes a Sce.Atf.Applications.IMainWindow instead of Sce.Atf.Wpf.Interop.MainWindowAdapter.
  • Applications\EditLabelCommand: CanDoCommand and DoCommand now expect Sce.Atf.Wpf.Applications.EditLabelCommand.Commands instead of ICommandItem.
  • Applications\HelpCommands: CanDoCommand and DoCommand now expect Sce.Atf.Wpf.Applications.HelpCommands.Commands instead of ICommandItem. ContextMenuHelpTag is also still acceptable.
  • Applications\ICommandItem: Removed InputGestures and MenuPath, added Shortcuts and Index.
  • Applications\IThumbnailResolver: Now takes a ThumbnailParameters instead of a Uri.
  • Applications\ThumbnailService: ResolveThumbnail and ResolveThumbnailBlocking now take a ThumbnailParameters instead of a Uri.
  • Behaviors\ AtfTreeViewBehavior: relocated property bindings, from xaml style definitions to code, to prevent binding from being attempted before data context has been hooked up.
  • Behaviors\GridViewColumnHeaderBehavior: Fixed typo SetIsDClickable to SetIsClickable.
  • Behaviors\ItemsControlDropTargetBehavior: OnDragOver, if the dragged item can't be inserted, clear out the drag icon effect(so that the 'not permitted' icon is shown)
  • Controls\FormattingTextBox: Value property is now type string instead of object.
  • Controls\MainWindow.xaml: No longer implements IPartImportsSatisfiedNotification.
  • Controls\PropertyEditing\IPropertyFactory: CreateProperty now takes an ITransactionContext instead of a FrameworkElement.
  • Controls\PropertyEditing\PropertyGrid: added properties for customizing a PropertyGrid's ListBoxItemsPanel template, and its ListBoxItemContainer style.
  • Controls\PropertyEditing\PropertyNode
    • Removed the ctor with many parameters. Set these via the properties instead.
    • Removed the Owner property.
  • Controls\PropertyEditing\TransactionPropertyNode: Removed the ctor with many parameters.
  • Controls\PropertyEditing\ValueEditors\ValueEditor: Added a DependencyObject parameter to GetTemplate and GetStyle. This also affects MultiLineTextEditor and SliderEditor.
  • Models\DialogViewModelBase: Changed CanOk to CanExecuteOk.
  • Models\MainMenuViewModel
    • Removed ctor that takes ICommandService.
    • The Menus property is now of type IEnumerable instead of ObservableCollection.
  • Models\ToolBarViewModel
    • Removed ctor that takes ICommandService.
    • The ToolBars property is now of type IToolBar[] instead of ObservableCollection.
  • Models\TreeViewModel
    • Converted m_itemToNodeMap from a Dictionary to a Multimap, as it is in Atf.Gui.WinForms.TreeViewAdapter. TreeViewModel.GetNode() retains its signature, however it calls new method IEnumerable GetNodes(object), and returns first or default.
    • Tree nodes given 'hover text' property, for specifying the string displayed when mouse is hovered over the node in the tree presentation.
    • Made Node.ItemInfo public, and added OnNodeInfoUpdated(Node), called after every call to IItemInfo.GetInfo(). Allows client code to further modify Node.ItemInfo, before the node itself handles the changes.
  • Sce.Atf.Wpf.WpfImageResourceAttribute has been marked obsolete. Please use Sce.Atf.ImageResourceAttribute instead.
  • Sce.Atf.Wpf.WpfResourceUtil has been marked obsolete. Please use Sce.Atf.Wpf.ResourceUtil instead.
  • Enabled ItemInfo.FontStyle to affect the default WPF TreeViewItem label font.
  • Added unit tests for TreeViewModel, and fixed errors revealed by the tests.
Samples

Updated WinGui samples:

  • Improved separation of WinForms from WPF.
  • Enhanced WpfApp to use some of the new WPF functionality. Added some sample data and a viewing pane that tracks the active document’s current selection.

Authoring Tools Framework 3.8 をリリース

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

主要な新機能

  • 2014 年 3 月 10 日に、GitHub でオープンソースとしてリリース。Apache 2.0 ライセンスに準拠します。
  • Windows Presentation Foundation (WPF) の対応をクライアントから大幅に統合。
  • Skin Editor を追加。これにより現在のスキンを編集し、新規のスキンファイルを作成できます。TimelineEditor サンプルアプリケーションを使い、[表示] > [スキンを編集] コマンドからお試しください。
  • 履歴表示機能を追加。元に戻す/やり直しのスタックの、視覚的な表示と操作が可能になりました。CircuitEditor のサンプルアプリケーションを使い、[ウィンドウ] > [History] コマンドからお試しください。
  • CircuitEditor が、外部ファイルの回路テンプレートの参照に対応。[テンプレート] タブのコンテキストメニューコマンドでご確認ください。
  • プロパティ編集および DomPropertyEditor サンプルアプリケーションを改良。



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

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

互換性に影響する変更点

  • 以下のメソッド、プロパティ、および型は、以前の ATF リリースで既に廃止されており、ソニー・コンピュータエンタテインメント社内向けにリリースされた ATF 3.7 以降、および GitHub でのリリース以前に削除されています。GitHub のユーザーには、以下に示す削除済みの廃止項目の影響はありません。なお、この一覧には、内部 Legacy ディレクトリの項目は含まれません。
    • Sce.Atf.Selection – Toggle(IEnumerable の項目) を削除。代わりに ToggleRange を使用してください。
    • Sce.Atf.VectorMath.Matrix3F – 用途がなく現在のオブジェクト「this」を返すのみだったプロパティ M を削除。
    • Sce.Atf.VectorMath.Matrix4F
      • GetTranslation() を削除。代わりに Translation プロパティを使用してください。
      • Sce.Atf.VectorMath.Matrix3F – 用途がなく現在のオブジェクトである「this」を返すのみだったプロパティ M を削除。
    • Sce.Atf.Applications.CommandInfo – Shortcut プロパティを削除。代わりに Shortcuts プロパティを使用してください。
    • Sce.Atf.Applications.ScriptingService – SetObject() および RemoveObject() を削除。代わりに SetVariable() および RemoveVariable() を使用してください。
    • Sce.Atf.Controls.Adaptable.Graphs.Annotation – Synchronize() を削除。このメソッドは空で用途がありませんでした。
    • Sce.Atf.Controls.Adaptable.Graphs.Element – Synchronize() を削除。このメソッドは空で用途がありませんでした。
    • Sce.Atf.Controls.Adaptable.Graphs.GroupPin – Synchronize() を削除。このメソッドは空で用途がありませんでした。
    • Sce.Atf.Applications.AutoDocumentService – Form を取るコンストラクターを削除。代わりに IMainWindow を使用してください。
    • Sce.Atf.Applications.MainFormTitleService – このクラスを削除。IMainWindow で使用できる MainWindowTitleService を使用してください。
    • Sce.Atf.Applications.ShoutOutputService – このサンプルコードを ModelViewer サンプルアプリケーションに移動。
    • Sce.Atf.Applications.PaletteService – Form を取るコンストラクターを削除。代わりに IMainWindow を使用してください。
    • Sce.Atf.Applications.SettingsService – Form を取るコンストラクターを削除。代わりに IMainWindow を使用してください。
    • Sce.Atf.Applications.StandardFileExitCommand – Form を取るコンストラクターを削除。代わりに IMainWindow を使用してください。
    • Sce.Atf.Applications.UnhandledExceptionService – Form を取るコンストラクターを削除。代わりに IMainWindow を使用してください。
    • Sce.Atf.Applications.SourceControlCommands – CheckoutOnEdit プロパティを削除。代わりに CheckoutOnEditBehavior を使用してください。
    • Sce.Atf.ChartUtil – DrawHorizontalScale() オーバーロードメソッドの 1 つおよび DrawVerticalScale() オーバーロードメソッドの 1 つを削除。異なるオーバーロードを使用し、minimumGraphStep に 0.0f を渡してください。
    • Sce.Atf.Controls.Adaptable.Graphs.D2dSubCircuitRenderer – FloatingPinNodeHeight および FloatingPinNodeWidth を削除。代わりに CircuitGroupPinInfo.FloatingPinBoxHeight および CircuitGroupPinInfo.FloatingPinBoxWidth を使用してください。
    • Sce.Atf.CustomFileDialog
      • InitialDirectory を削除。このプロパティは無効でした。特定のディレクトリでダイアログボックスを開くには、ForcedInitialDirectory をご覧ください。
      • UserControl を削除。このプロパティへのサポートが終了しました。
    • Sce.Atf.Controls.FloatInputControl – TickFrequency を削除。このプロパティは無効でした。
    • Sce.Atf.Controls.IntInputControl – TickFrequency を削除。このプロパティは無効でした。
    • Sce.Atf.Controls.Timelines.Direct2D.D2dTimelineControl – events パラメーターを持つ GetBoundingRect() を削除。このパラメーターは常に無視されていました。パラメーターのない GetBoundingRect() を使用してください。
    • Sce.Atf.Perforce.PerforceService – ShowErrors プロパティを削除。このプロパティは無効でした。エラーや警告の表示は、Sce.Atf.Outputs、OutputService および ErrorDialogService をご覧ください。








  • Vec3F などのほとんどの math クラスにおいて ToString() メソッドが改善され、ヨーロッパ言語での使用が可能になり、振る舞いの一貫性が高まりました。小数点としてコンマ (,) を使用する言語では、リストの数字はセミコロン (;) で区切らなければならないところを、以前のバージョンでは、現在の文化圏の設定に関わらず、ハードコードされたコンマ (,) が数字の区切りに使用されるという問題がありました。詳細は、https://github.com/SonyWWS/ATF/issues/5 を参照してください。
    • StringUtil.GetNumberListSeparator(IFormatProvider) を追加。
    • FloatArrayConverter: 数字の区切り文字として、現在の文化圏の設定に基づき、コンマ (,) もしくはセミコロン (;) の適切な方を使用するように変更。
      • 以前の振る舞い: ToString() はヨーロッパ文化圏での永続化や GUI には無効でした。英語圏では永続化や GUI で有効です。ToString(null, null) は ToString() と同じです。ToString(“G”, englishCulture) は英語の GUI で有効です。かっこが追加されます。浮動小数点数は出力前に倍精度浮動小数点に変換されます。ToString(“G”, euroCulture) はどの文化圏の GUI でも無効です。かっこが追加されます。浮動小数点数は出力前に倍精度浮動小数点に変換されます。ToString(“R”, CultureInfo.InvariantCulture) はどの文化圏の永続化でも有効です。かっこが追加されます。浮動小数点数は出力前に倍精度浮動小数点に変換されます。
      • 現在の振る舞い: ToString() はすべての文化圏の GUI で有効です。英語圏では永続化や GUI で有効です。ToString(null, null) は ToString() と同じです。ToString(“G”, englishCulture) は英語の GUI で有効です。ToString(“G”, euroCulture) はヨーロッパ言語の GUI で有効です。ToString(“R”, CultureInfo.InvariantCulture) はどの文化圏の永続化でも有効です。














  • Sce.Atf.Controls.Adaptable.Graphs.D2dGraphRenderer のプロパティにスペルミスがありました。MaxiumEdgeThickness というプロパティ名を MaximumEdgeThickness に変更しました。
  • Sce.Atf.Dom.Template の 抽象 Model プロパティを削除し、Target プロパティを抽象プロパティに変更。派生クラスを使用するクライアントは、Model プロパティを Target プロパティに変更することにより、コンパイルエラーが解消します。Target プロパティと Model プロパティは同じものであり、クラスが不必要に複雑になったため、この互換性に影響のある変更を行いました。
  • PerforceService.RequestProcessed に誤って含まれていたセッターを削除。Perforce リクエストがすべて処理されたかどうかは、PerforceService 内部の情報であるため、呼び出し元からの確認が不可能でした。
  • Sce.Atf.Controls.PropertyEditing.LongEnumEditor に以下の互換性に影響のある変更が追加されました。
    • デフォルトでは、ユーザーによるコンボボックスへの任意のテキスト入力が不可能になりました。これは最も期待されていた振る舞いです。任意のユーザー入力を許可するには、TextEditEnabled を true に設定します。
    • Initialize(string[]) が明示的なインターフェイスの実装になりました。代わりに DefineEnum(string[]) を使用してください。
    • DropDownHeight を削除。ドロップダウンアイテムのリストの高さの最大値を指定するには、代わりに MaxDropDownItems を使用してください。
    • DefineEnum(string[] names, int[] values) を削除。values パラメーターが常に無視されていたためです。
    • パブリック静的イベント EnumSelectionChanging を削除。リクエストしたクライアントがこのイベントを使用しないこと、および、リスナーからは選択されたアイテムしかわからず、編集中の LongEnumEditor オブジェクトは知ることができないためです。このような理由から、このイベントは一般的に有用ではないと判断しました。
  • IFileDialogService 呼び出しが System.Windows.Forms.DialogResult ではなく Sce.Atf.Applications.FileDialogResult を返すように変更。WinForms への依存性を解消します。



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



オープンソース/ドキュメント

  • すべての ATF ウィキドキュメントを SHIP から GitHub に移動。
  • License.txt に Apache v2.0 ライセンスを追加し、ソースコードとテストスクリプトの著作権情報をアップデート。
  • 廃止マークがつけられたコードを削除。詳細は、「互換性に影響する変更点」を参照してください。
  • PDF ドキュメントおよび元となる Word ドキュメントのライセンスおよび機密保持の文面を、オープンソースライセンスに合わせて変更。著作権情報の文面をアップデート。
  • GitHub で必須とされる README.md を追加。*.md はマークダウンウィキ形式を意味しますが、実質はテキストファイルです。内容は ReadMe.txt に基づくものですが、パブリックリポジトリの構造の違いを反映しています。
  • パブリック GitHub リポジトリで、ATF の使用状況ロギングを簡単に無効にする方法を追加。このような違いに対して、PUBLIC 前処理ディレクティブを使用できるようになりました。
  • ATFProgrammer_Guide_exported_from_wiki.pdf を削除。GitHub で公開されていること、フォーマットエラーがあること、サイズが大きいことが理由です。
  • ドキュメントから SHIP へのリンクを削除。
  • 古い Samples/LevelEditor ディレクトリおよび、LevelEditor の場所を示す、ディレクトリ内の ReadMe.txt を削除。新規クライアントに混乱を引き起こさないための配慮です。
  • 『ATF-GettingStarted.doc』の「Supported Tools」の項をアップデート。.NET Framework 4 および C# 4 が必須であり VS2013 に対応している旨を記述しました。
  • コメントを改良し、公開された型やメンバーに不足していたコメントを追加。
  • Sandcastle で作成した ATF_API-Reference.chm ファイルを追加。また、ATF API の chm ファイルを作成するプロジェクトを追加。


GitHub から取り入れた変更

  • Pair.cs の冗長なヌルチェックを削除。(lioncash)
  • BezierCurve および Seg2F の ToString() フォーマットを修正。(lioncash)
  • DomNodePropertyMatch コンストラクター内の例外メッセージを修正。(lioncash)
回路
  • StandardLayoutCommands で右端もしくは下端を正常に揃えられない問題の原因となった、回路要素の Bounds プロパティのバグを修正。
  • CreateTestCircuitProgrammatically() にワイヤーを追加した際に起こるクラッシュを修正。ワイヤー追加後に、デフォルトでは非表示だったグループのピンを表示することにより修正しました。
  • CircuitValidator は適合した DomNode が不要となり、ReferenceValidator に対応します。(CTE はワイヤーの設定が大幅に異なり、特別に処理されるため、ReferenceValidator が不要です。)
  • CircuitEditor の Editor クラスにコメントを追加。
  • 回路テンプレート: テンプレート参照インスタンスを、コピーインスタンスにレベル下げした後に参照インスタンスに再度レベル上げすると、元のテンプレートの UUID が復元されず、代替または追加のテンプレートダイアログの表示に失敗するバグを修正。
  • ほかのドキュメント内に配置可能な、回路テンプレートフォルダーのサポートを初期実装。
    • CategoryUniqueIdValidator を追加し、ローカルにユニークな ID をサポート。テンプレートツリー階層に内部ノードとほかのドキュメントよりインポートされた外部ノードが混在するようになり、外部ドキュメントのノード ID が内部ノードの ID と衝突する可能性があるため必要になりました。
    • DomNode: 実行時にノードにタグ付けをする SetTag() および GetTag() を追加。同様の目的で、動的 (変更可能) DOM 属性の方法を調査する必要があります。
    • テンプレートへの参照インスタンスはすべてドキュメントに依存しない GUID で解決されます。現在、回路でカスタマイズされたリーダーおよびライターのみで GUID ベースの解決がされています。
  • テンプレートフォルダーが External の場合は、外部の性質を示す特別なアイコンが表示されるようになりました。
  • テンプレートライブラリ外部フォルダー: テンプレートリストの UI の処理を微調整。外部テンプレートフォルダー内でのアイテムの移動、ドキュメント間での移動、および外部フォルダーへのアイテムの直接移動を禁止しました。選択されたフォルダーが外部フォルダーの場合は、アイテムはルートフォルダーに追加されます。
  • 外部テンプレートフォルダー上にカーソル移動すると、テンプレートファイルのパスを表示します。
  • 外部テンプレートが見つからないファイルの読み込み、表示、保存に対応。見つからないテンプレートは特別なスタイルで表示されます。
  • リソース package_error.png を追加。見つからない外部テンプレートを参照する回路要素のレンダリングに使用します。
  • テンプレートリストのコンテキストメニューに [Rescan] コマンド�を追加。テンプレートリストで参照されているすべてのテンプレートドキュメントを再度読み込みます。
  • UpdateGroupPins における出力グループピンの、インデックス初期値の設定に関する問題を修正。修正前は m_inputs.Count が使用されていましたが、現在は正しく m_outputs.Count が使用されます。
  • 回路要素: ヘルパーメソッドの InputPin(index) および OutputPin(index) を追加。
  • 回路テンプレートの編集は、そのテンプレートを所有するドキュメント内でのみ可能になりました。
  • 参照されたグループピンを、UI からほかのピンに関連付けられない問題を修正。
  • スペルミスの修正: GroupingCommands.DefaultPinOderStyle プロパティの名前を DefaultPinOrderStyle に修正。
  • レイアウトの制約がない場合のクラッシュを ViewingContext.ConstrainBounds() で修正。(Creature Editor のグラフビューには通常のグリッドアダプターがありません。)
  • CircuitEditingContext に 3 つの仮想の保護されたメソッドを追加。OnObjectInserted()、OnObjectRemoved()、および OnObjectChanged()。派生クラスはそれぞれ ItemInserted、ItemRemoved、および ItemChanged イベントを発生させることができます。
  • CircuitEditor: 内部テンプレートのサブノードから、外部ノードへの関連付けを作成する際のクラッシュを修正。
  • FsmEditor および StateChartEditor: 要素間の接続の作成を示す、一時的なワイヤーが表示されない問題を修正。
  • 回路の外部テンプレート: テンプレートドキュメントの再スキャン処理の最後に古いテンプレートを削除。
  • CircuitEditor: スキーマファイルのテンプレート型の参照用に、廃止された typeRef 属性を再度追加。これにより、テンプレートのある古い回路ドキュメントが読めるようになります。また変換コードを追加し、古いバージョンの回路ドキュメントが新しいフォーマットで保存されるようになりました。なお、廃止された typeRef 属性は、現在は guidRef に置き換わっています。
  • CircuitEditor の配置コマンドを修正。グループや要素が正しく配置されます。BoundsSpecified を無視していた ILayoutContext の実装を 3 箇所修正しました。
  • 回路グループ: 回路グループの幅を広く変更する度に、高さも少しずつ増えるバグを修正しました。
  • ノード配置のオフセットに関する問題を修正。浮動ピンの Y 座標の範囲を計算するコードを D2dSubgraphAdapter.GetBounds(items) から ViewingContext.GetBounds() に移動しました。前者のメソッドは選択されたアイテムを対象とするため、すべての浮動ピンの Y 座標の範囲を常に含めるには適していませんでした。後者はすべてのアイテムを対象とするメソッドであるため、ビューがグループエディターに関連付けられている場合に Y 座標の範囲を含めるのに適しています。
  • CircuitEditor: 展開されたビューでグループ内の要素間のワイヤーを作成する際に、表示されるカーソルアイコンを修正。
  • 外部から参照されているテンプレートのノードを削除したため、接続先のなくなったワイヤーがクラッシュする問題を修正。
  • GroupInstance および ModuleInstance: 見つからない型を処理ための InputPin(index) および OutputPin(index) のオーバーライドを追加。


Direct2D

  • D2DFactory.MeasureText を追加。指定されたフォントで描画された文字列の幅を測定します。
  • D2dGraphics の整理、および機能の追加。
  • WIC renderTarget へのレンダリングのサポートを追加。
  • D2dGeometry および D2dGeometrySink のサポートを追加。
  • D2dGeometry にヒットテストのメソッドを追加。
  • D2DFactory: 変換一覧表を使用した TextLayout の作成を可能にします。
  • D2dGeometry Bounds プロパティの追加。
  • D2dTextLayout および D2dTextFormat のメモリリークを修正。
  • D2dTextFormat で正しい FontHeight の計算を使用するようになりました。
  • 長いマーカーラベルに対応するため、ラベルおよびヒント管理の処理を改良。
  • D2dCircuitRenderer:
    • 要素の描画をカスタム化するためのプロパティを追加: RoundedBorder、TitleBackgroundFilled、および PinDrawStyle。
    • カスタム化された要素を描画するための、保護された仮想メソッドを追加: GetElementTitle および GetElementDisplayName。
    • 要素の型に関連付けられたブラシが D2dLinearGradientBrush ではない場合に起きるクラッシュを修正。
    • オプションのドキュメントレジストリのパラメーターを、コンストラクター内に追加。ドキュメントが削除された際に、要素型のキャッシュをクリアします。
    • GetElementSizeInfo: オプションのタイトルパラメーターを追加。要素サイズの計算に、カスタム化されたタイトルテキストのサイズを含めます。
    • ElementTypeInfo: Title フィールドを追加。キャッシュされたタイトルが異なる場合は、キャッシュされたデータが無効とされ、要素のサイズを再計算します。Creature Editor が同じ型の要素に異なるタイトルをつけている場合があるため、タイトルの値をキャッシュする必要があります。
    • 展開したグループをレンダリングするための、高さの計算方法を変更。
  • 派生クラスがマウスのヒット記録へのアクセスを必要とする場合に備え、D2dGraphEdgeEditAdapter の DraggingContext ゲッターの MousePick をアップデート。
  • D2dGraphAdapter: エッジ編集時のカーソルをカスタム化する OverRouteCursor、FromPlaceCursor、ToPlaceCursor および InadmissibleCursor を追加。
  • D2dGraphAdapter: 幅と高さが不正に計測される原因の GetBounds() メソッドの問題を修正。


プロパティ編集

  • 新規のカスタムボタン OverlayButton を追加。
  • PropertyGridView が現在選択中のプロパティのリセットボタンを表示。
  • PropertyGrid に [すべてのプロパティをリセット] ボタンを追加。
  • PropertyEditingCommands をリファクタリングし、より多くの機能を追加。次のコンテキストメニューを追加しました。
    • プロパティ値をコピー
    • プロパティを貼り付け
    • プロパティをリセット
    • すべてをコピー
    • すべてに貼り付け
    • すべてのプロパティをリセット
    • テキストエディターに表示
  • PropertyGridView で描画が 1 ピクセルずれるエラーを修正。
  • PropertyEditingControl の OnPaint メソッドおよび OnBackColorChanged メソッドを削除。
  • PropertyEditingControl: クライアントから報告された再現できない問題を修正。カスタムエディターを表示するためにプロパティのドロップダウンボタンを 2 度クリックすると、2 度目にはエディターが表示されない問題がありました。この修正は、既に false である m_dropDownForm.Visible を false に設定するものであり、安全です。
  • PropertyGridView が矢印やタブキーを処理できるようになりました。
  • Enter キーを押すと、以下の UITypeEditor で次の入力ボックスにフォーカスが移動するようになりました。
    • NumericTupleEditor
    • NumericMatrixEditor
    • ArrayEditor
  • EmbeddedCollectionEditor:
    • 同じトランザクション内でアイテムが追加された後に削除された場合、この 2 つのイベントがお互いを取り消さないバグを修正。
    • ユーザーによる「+」もしくは「-」ボタンの押下に反応して、ObservableContext が ItemInserted もしくは ItemRemoved を発生させなかった場合、以前はアイテムの挿入や削除が不可能でしたが、今リリースからはアイテムの一覧が常にアップデートされるようになりました。
  • LongEnumEditor: 全面的な書き直し。画像が表示できるようになりました。リセットボタンでプロパティの元の値を復元します。以下の互換性に影響のある変更が追加されました。
    • デフォルトでは、ユーザーによるコンボボックスへの任意のテキスト入力が不可能になりました。これは最も期待されていた振る舞いです。任意のユーザー入力を許可するには、TextEditEnabled を true に設定します。
    • Initialize(string[]) が明示的なインターフェイスの実装になりました。代わりに DefineEnum(string[]) を使用してください。
    • DropDownHeight を削除。ドロップダウンアイテムのリストの高さの最大値を指定するには、代わりに MaxDropDownItems を使用してください。
    • オーバーロードの public void DefineEnum(string[] names, int[] values) を削除。values パラメーターが常に無視されていたためです。
    • パブリック静的イベント EnumSelectionChanging を削除。リクエストしたクライアントがこのイベントを使用しないこと、および、リスナーからは選択されたアイテムしかわからず、編集中の LongEnumEditor オブジェクトは知ることができないためです。このような理由から、このイベントは一般的に有用ではないと判断しました。
  • NumericTextBox: マウスクリックで、プロパティエディターの入力ボックスの内容を選択します。
  • DomPropertyEditor サンプル: 新しい Level プロパティを Orc に追加し、enum 値の整数もしくは文字列としての表示を実行します。


スキニング

  • バグ修正: デフォルト以外のスキンを適用した場合に、ツールバーボタンのハイライトおよび切り替えのステータスが壊れていたバグを修正。
  • CustomColorTable の問題を数件修正し、サンプルスキンにより多くのオーバーライドを指定。
  • スキニングがより均一になるように Dark.skn をアップデート。
  • すべての UITypeEditors でスキニングに対応。
  • PropertyView の SetFont を無効化。廃棄されたフォントのクローニングにより SkinService が例外を発生するためです。
  • クライアント以外の領域 (タイトルバー、フォームの枠線、キャプションのボタン、フォームアイコンおよびタイトルテキスト) をレンダリングする FormNcRenderer を追加。
  • タイトルバーのスキニングへの対応および、Dark.skn と Light.skn にタイトルバーのスキンを追加。
  • SkinEditor を作成し、エディター UI、スキンの保存と読み込み、およびスキンスタイルのオブジェクトのプロパティ記述子への対応を追加。
  • スキンファイルの設定がされていない場合に起きるクラッシュを修正。
  • SkinningService に ActiveSkinFile プロパティを追加。プロパティが null でない場合に Skin Editor を起動すると、このスキンが編集用に自動的に読み込まれます。
  • 空のスキンファイル Classic.skn を削除。
  • ColorPicker のスキニングの問題を修正: 初期の色が正しく設定されず、ラジオボタンのテキストが完全に表示されない問題がありました。
  • TreeControl の Text プロパティの描画に使用される Brush を SystemBrushes.WindowText から ItemRenderer.TextBrush に変更。スキンが適用可能になりました。
  • SkinService: スキンエディター実行中の読み込みコマンドおよび元に戻すコマンドを無効化。スキンエディターは常にアクティブなスキンを編集することになり、わかりやすいユーザーインターフェイスが保たれます。リファクタリングも行いました。静的内部プロパティ「Instance」が不要になったため削除しました。


ソース管理

  • PerforceService.GetInfo() - p4 コマンドの fstat が失敗し、エラーメッセージが提供されない場合には、エラーメッセージの出力を試みないように変更。
  • Perforce の .NET ライブラリをアップデートしてハートブリードのバグに対処。http://www.perforce.com/blog/140422/heartbleed-vulnerability-update-patched-perforce-clients-now-available を参照してください。
  • PerforceService: マルチスレッドアクセスの問題に対処し、大幅な改善をしました。具体的には次のとおりです。
    • ConnectionManager: P4API.NET オブジェクトは一度に 1 スレッドしかアクセスできないため、ガードを追加。
    • FileInfo: PerforceRequestQueue クラスを必要とし、コードにかなりのオーバーヘッドを加える登録リクエストの方式を廃止。この機能の利点は、ファイルに対して保留中の Perforce サーバーリクエストがある場合は常に、「状態不明」を返すことでした。このような場合は、代わりに最後の既知の状態を使用してください。
    • PerforceRequest: この内部クラスで使われていないプロパティを削除。
    • PerforceRequestQueue: この内部クラスを完全に削除。必要な機能が追加されなかったことが理由です。
    • バックグラウンドスレッドの書き直し。2 秒のポーリング方式ではなく、イベントをトリガーする方式を使用するようになりました。ロジックが簡潔になり、UI の応答性やパフォーマンスの改善が見込まれます。
    • GUI スレッドとワーカースレッドの両方からアクセスされる、共有オブジェクトにロックを追加。
    • ワーカースレッドに複数の Perforce リクエストが保留中の場合、それらのリクエストは 1 つにまとめられ、Perforce サーバーに対してすべての関連ファイルを一度にクエリします。以前のバージョンでは、保留中のリクエストがそれぞれ Perforce サーバーに別のクエリを行っていました。数百もしくは数千個のファイルに対するステータスのクエリが、大幅に効率的になります。
  • PerforceService ConnectionManager が例外を ValidateConnection() で処理するようになりました。
  • Atf.Subversion プロジェクトを追加。Subversion を使用して ISourceControlService を実装します。
  • 以前の P4.Net \ThirdParty ライブラリを削除。これらのライブラリは ATF 3.7 より P4API.Net に置き換わっていました。
WPF の改良
  • 付録 A 「ATF 3.8 リリースノート WPF に関する補足事項」に記載されています。
その他
  • IronPython ウィンドウなどで使用する ConsoleTextBox が、複数のコマンドを含むテキストを処理できるようになりました。
  • グラフィックアーティストによる ATF ロゴとアイコンを追加。ロゴは [ヘルプ] > [バージョン情報] 画面に使用されています。アイコンはタイトルバーおよび Windows タスクバーで、サンプルアプリケーションを示すために使用されます。
  • EnumerableUtil.ForEachWhileTrue を追加。指定された条件が true である間に、コレクションを列挙します。
  • Cartesian2dCanvas.cs: プライベートメソッドに目盛りを描画する共通のコードを配置。
  • MathUtil: 値パラメーターが null の場合の、Clamp メソッドの NullReferenceException を修正。
  • 元に戻す/やり直しのスタックの視覚的なリストである HistoryLister を追加。ユーザーはリストをクリックして、多数のコマンドを元に戻すことや、やり直すことが可能です。表示できるコマンドの最大数は、ユーザーが編集可能なプロパティです。デフォルト値は 150 で、最小値は 10 です。一部のサンプルアプリケーションに追加しました。
  • ATF ThreadSafeProgressDialog - Run() メソッドが終了する前に親ダイアログが破棄されることがまれにあるため、これに対処するために、Run() メソッドの最終ブロックに m_parent.Owner == null のチェックを追加。
  • ドラッグアンドドロップの操作に、シェルスタイルのドラッグアンドドロップインターフェイスを提供。フォームで正しいメソッドを呼び出すと、シェルからアイコンが表示されます。たとえば、ファイルをエクスプローラーにドラッグすると画像が表示されます。ただし、ドラッグアンドドロップの開始時に、ドラッグアンドドロップ操作に独自の画像を添付することも可能です。(Metrics で使用。)
  • DefaultTabCommands: コントロールの記述が「Untitled:Group」などの不正なパス名であるために、回路グループウィンドウなどのサブドキュメントのウィンドウでクラッシュが起きることのある問題を修正。
  • Vec3F などのほとんどの math クラスにおいて ToString() メソッドが改善され、ヨーロッパ言語での使用が可能になり、振る舞いの一貫性が高まりました。小数点としてコンマ (,) を使用する言語では、リストの数字はセミコロン (;) で区切らなければならないところを、以前のバージョンでは、現在の文化圏の設定に関わらず、ハードコードされたコンマ (,) が数字の区切りに使用されるという問題がありました。詳細は、https://github.com/SonyWWS/ATF/issues/5 を参照してください。この振る舞いに関しては、「互換性に影響のある変更」を参照してください。
  • 安定した SharpDX 2.5.0 のリリースにアップデート。
  • HistoryLister のユーザー設定のテキストを変更。
  • Atf.Core に ColorUtil.Lerp()、EnumerableUtil.IndexOf()、および新規の AttributeUtils クラスを追加。
  • 互換性に影響する小さな変更: Sce.Atf.Controls.Adaptable.Graphs.D2dGraphRenderer のプロパティにスペルミスがありました。MaxiumEdgeThickness というプロパティ名を MaximumEdgeThickness に変更しました。
  • CustomColorTable: 4 箇所のスペルミスを修正。スペルミスのために、誤った設定可能なプロパティが設定不可能なプロパティで使用されていた問題を解決します。
  • Sce.Atf.Dom.Template の 抽象 Model プロパティを削除し、Target プロパティを抽象プロパティに変更。派生クラスを使用するクライアントは、Model プロパティを Target プロパティに変更することにより、コンパイルエラーが解消します。Target プロパティと Model プロパティは同じものであり、クラスが不必要に複雑になったため、この互換性に影響のある変更を行いました。
  • LINQ に関連するパフォーマンスを最適化。
  • 最近の PropertyEditingControl の変更により、DrawingEditableValue ゲッターを廃止。常に false を返していましたが、廃止マークが付きました。
  • Atf.Gui.Input に KeyPressEventArgs および PreviewKeyDownEventArgs を追加。
  • DefaultTabCommands: カスタム化ポイントを追加。これによりクライアントは、どのドッキングした Control のタブで「フルパスをコピー」および「ドキュメントを含むディレクトリを開く」のコマンドを利用可能にするかを指定できます。
  • EnumerableUtil の IndexOf の拡張で、ArgumentNullException を発生させるのではなくデフォルトの等値比較を使用。
  • メモリ破損の問題のため、DevilImageLoader に廃止マークを付けて ImageLoaderRegistry から使用箇所を削除。一般的な画像ファイルフォーマットに使用できる、ほかのイメージローダーがあります。DdsCompressor が DevilImageLoader の代わりに DdsImageLoader を使用するように変更しました。
  • https://github.com/SonyWWS/ATF/issues/9
  • Collada スキーマファイル: !DOCTYPE 要素を削除。!DOCTYPE 要素が .NET XmlSchemaSet の DTD 処理に関連する XmlSchemaTypeLoader.Load(string) で、XML 例外を発生させていたことが理由です。この例外は煩わしいですが、無害であると思われます。これがベストな修正方法だと思います。https://github.com/SonyWWS/ATF/issues/9 で報告された小さな問題の 1 つです。
  • CodeEditor サンプルをアップデート。サンプルは UnhandledExceptionService コンポーネントを使用するようになりました。
  • Sce.Atf.Adaptation.Adapter: Adapter と同じオブジェクトに Adaptee を適合できると、同じオブジェクトを 2 度返すことができる GetDecorators() の問題を修正。問題を再現し、修正で正しく動作するようになったことを確認するユニットテストを追加しました。IDecoratable に関するいくつかのコメントを修正しました。
  • DomNode: Copy() メソッドが ChildInfo もコピーするように変更。以前は親が設定されるまでは、親の DomNode から見たの現在の DomNode を説明する ChildInfo は null でした。これは、永続化のために ChildInfo を必要とする ルート DomNode 以外の、すべてのノードでは問題となりません。このリリースからは、ルート DomNode はコピーであっても、永続化が可能になりました。
  • ListViewAdapter: 同じ DomNode が複数回挿入された場合の、「An item with the same key has already been added (同じキーのアイテムが既に追加されています)」という例外を修正しました。これは発生する可能性の低い問題でした。
  • ColorPicker: エラーメッセージをローカライゼーション可能なものに変更。
  • ColorPicker に AutoScaleMode を追加。Font サイズに合わせて拡大縮小します。
  • System.Windows 名前空間との競合を避けるために、名前空間 Sce.Atf.DragDrop を Sce.Atf にアップデート。
  • TransactionReporter を追加。たとえば、重複する属性変更をせずに、トランザクション中の DOM 変更の最終クリーンアップを報告する DomNodeAdapter です。
  • アセンブリ用のバナー画像の指定を可能にする Sce.Atf.AssemblyBannerAttribute を追加。
  • Atf.Gui.CustomizeAttribute および、その派生の Sce.Atf.Controls.PropertyEditing.PropertyView.CustomizeAttribute を追加。
  • Scea.Editors.Commands クラスを Atf.Gui.Commands にクローン。クローンされたクラスは独立したクラスで、元の Scea の場所から派生したものではありません。
  • ブール型プロパティ DocumentClientInfo.AllowStandardFileCommands を追加。登録された IDocumentClient が、標準ファイルコマンドを自動的にドキュメントタイプに追加するのを防ぐオプションを提供します。
  • RecentDocumentCommands.MaxPathLength.get を追加。ルートファイルメニューに表示されるパスを切り詰めます。
  • WeifenLuo.WinFormsUI.Docking ライブラリのバグを修正。ドッキングパネルにアイコン指定がなく、ShowIcon が false に設定、Windows プレースホルダーアイコンが表示されており、いづれかのドッキングパネルが自動非表示の場合に起きるバグが解消されます。
  • ドッキングステートが Unknown のペインに GetTabStripRectangle が呼び出された際の、AutoHideStripBase の例外を修正。
  • DocumentClientInfo に DefaultExtension プロパティを追加。エディターが複数の拡張子に対応する場合にデフォルトの拡張子を設定すると、新規ファイル作成時に ATF がユーザーに拡張子の選択を求めなくなります。
  • DomNode: 利便性を向上するために Copy(DomNode) メソッドを追加。
  • DomNode: 属性がデフォルト値であるのか、偶然にデフォルトと同じ値に設定されたのかを、GetLocalAttribute() の読み出し元が識別できるようにするわずかな変更を追加。この変更により、Santa Monica Studio の Creature Editor などの、ATF 3.5 以前のクライアントのコードが、GetLocalAttribute() を期待通りに使用できるようにになりました。
  • GetPhysicalMemoryMB() を AtfUsageLogger.cs から Kernel32.cs に移動し、アクセスレベルをプライベートからパブリックに変更。
  • WinFormsUtil: BoundsSpecified フラグのある Rectangle をアップデートする UpdateBounds() を追加。
  • Statechart Editor: 親ステートに貼り付けられた子ステートの位置に関する長年の問題を修正。
  • アプリケーション起動時にドキュメントが開いていない場合は、タイトルバーが空にならないように、メインのフォームタイトルをサンプルアプリケーションの名前 (CircuitEditor、FsmEditor および StatechartEditor) に初期化。
  • UsingDirect2D サンプルアプリケーション: テキストを読みやすくするためにタイトルバーの情報をわずかに変更。スペースおよびピリオドを加えました。
  • レガシーの FileExplorer サンプルの例外処理を改善。



付録 A: ATF 3.8 リリースノート WPF に関する補足事項

このセクションでは、ATG の ATF 3.8 への WPF 実装にともなう変更を説明します。変更はアセンブリ別に示します。Atf.Gui.Wpf 以外のアセンブリの変更は、互換性に影響がありません。なお、アセンブリへの互換性に影響のある変更については、ATF 3.8 リリースノート内に説明があります。Atf.Gui.Wpf の変更および削除の多くは、既存の WPF アプリケーションの互換性に影響を及ぼす可能性があるため、変更内容をよくご確認ください。このリリースによりお使いのコードが破損した場合には、https://github.com/SonyWWS/ATF/issues から New Issue を作成してお知らせください。

Atf.Core 以下の新しいクラスを追加。

  • ArgParser: Obsolete マークの付いていた Scea.Utilities 内のクラスの代わりになります。
  • IObservableCollection: 監視可能なコレクションのインターフェイスの短縮形。メソッドを追加することなく、IList、INotifyPropertyChanged、および INotifyCollectionChanged を組み合わせます。
  • PropertyChangedEventArgsCollection: PropertyChangedEventArgs の特別なコレクション。既にコレクションに同名の引数セットがある場合、新しく追加されないようにします。
  • Adaptation\BindingAdapterObject: IAdaptable オブジェクトを適合させ、カスタマイズされたプロパティ記述子のセットをバインディング用に提供する CustomTypeDescriptor オブジェクト。
  • Dom\ObservableDomNodeAdapter: プロパティ変更の通知を提供する DomNodeAdapter。
  • Dom\ObservableDomNodeListAdapter: プロパティ変更の通知を提供する DomNodeListAdapter。
  • Dom\ObservableDomPropertyAttribute: ObservableDomNodeAdapter から派生した DomNodeAdapters のプロパティに使用される属性。プロパティに使用すると、対応する属性が変更された際に ObservableDomNodeAdapter がこのプロパティに対し NotifyPropertyChanged イベントを発生させます。
Atf.Gui 以下の新しいクラスを追加。
  • AssemblyBannerAttribute: アセンブリ用のバナー画像の指定を可能にする属性。
  • EnumUtil: enum を使用するための静的ユーティリティメソッド。
  • ObservableUtil: INotifyPropertyChanged に、厳密に型指定されたプロパティの変更通知を使用するためのユーティリティ。
  • Applications\DirectoryWatcherService: ディレクトリの変更を監視するサービス。
  • Applications\ICommandService: メニューおよびツールバーのコントロールで、コマンドを表示するサービスのインターフェイス。WPF および WinForms アプリケーションで使用可能になりました。
  • Applications\IDirectoryWatcherService: ディレクトリ内にあるファイルの変更を監視するサービスのインターフェイス。
  • Applications\IHelpContext: スキーマ注釈を介し、状況依存のヘルプを提供するデータオブジェクトのインターフェイス。
  • Applications\ILastHitAware: 最後にヒットしたアイテムを記録するインターフェイス。
  • Applications\IMessageBoxService: WinForms および WPF の実装の詳細に依存せずに、メッセージボックスを表示するインターフェイス。
  • Applications\Listers\FilteredTreeView: フィルタリングを提供する ITreeView のラッパー。
  • Applications\Listers\IndependentFilteredTreeView: ラッピングされた TreeView から独立した ISelectionContext を使用してフィルターされたツリービュー。
  • Applications\MenuInfo: Tag、Text、および Description などのメニュー情報のコンテナー。
  • Applications\SettingsServiceBase: ユーザーが編集可能な設定 (基本設定) およびアプリケーション設定の永続化を管理するサービス。
  • Applications\VersionControl\SourceControlCommandsBase: ソース管理コマンドを実装するコンポーネント。
  • Collections\AdaptableObservableCollection: ある型の IObservableCollection をラッピングし、別の型の IObservableCollection を実装。
  • Collections\AdaptingCollection: FilteringCollection や OrderingCollection などの、自身のコンテンツのソートやフィルタリングが可能なコレクションの基底クラス。
  • Collections\CollectionChangedListener: コレクション内のすべてのアイテムに対する、特定のプロパティの変更をリッスン。
  • Collections\LinkedListExtensions: 指定された値を持つ LinkedList の次の要素および前の要素を検出する拡張メソッド。
  • Collections\ObservableCollectionAdapter: AdaptableObservableCollection の基底クラス。
  • Collections\PriorityQueue: 優先度でソートされたアイテムのキュー。
  • Collections\ReferenceCollectionAdapter: 監視可能な参照のコレクションを、その監視可能な参照ターゲットのコレクションに適合するコレクション。
  • Collections\SortedObservableCollection: ソートされた監視可能なコレクションのユーティリティクラス。
  • Dom\BindingAdapter: IAdaptable インターフェイスを介して取得したアダプターへ、データバインディングのサポートを追加する DomNodeAdapter。
  • Dom\DomNodeHelpAdapter: スキーマ注釈のヘルプキーを使用して DomNode を IHelpContext に適合。
  • Dom\DomNodeTypeExtensions: DomNodeType を使用するための拡張メソッド。
  • Dom\ListContext: リスト編集用のコンテキスト。EditingContext に IInstancingContext、ILastHitAware、IObservableContext、および INotifyPropertyChanged を追加します。
  • Dom\ObservableCustomTypeDescriptorNodeAdapter: NodeType やほかのメタデータから PropertyDescriptors を取得するノードアダプター。
  • Models\AdapterViewModel: 適合対象を適合し、バインド可能な As プロパティを提供することが可能なビューモデルクラス。
  • Models\CheckedTreeNode: 3 状態チェックボックスのあるツリーノードのビューモデル。
StandardCommandGroup.WindowLayoutItems を追加。 CommandInfo.ImageKey を追加。これによりアイコンを WPF アプリケーションで使用できるように、文字列ではなくオブジェクトとして指定できるようになりました。imageName 文字列ではなく、imageKey オブジェクトを取る ICommandService.RegisterCommand のオーバーロードを追加しました。 DocumentClientInfo.NewIconKey および OpenIconKey を追加。これによりアイコンを WPF アプリケーションで使用できるように、文字列ではなくオブジェクトとして指定できるようになりました。

Atf.Gui.WinForms 以下を Atf.Gui アセンブリに移動。ただし名前空間は元のままです。

  • Applications\FileWatcherService
  • Applications\IFileDialogService
  • Applications\StandardFileCommands
HelpAboutCommand を Atf.Gui アセンブリに移動。ShowHelpAbout メソッドを抽象メソッドに変更し、Atf.Gui.WinForms アセンブリの Sce.Atf.WinForms.Applications.HelpAboutCommand 内でデフォルトの実装を提供。これにより、HelpAboutCommand 基底クラスがプラットフォームに依存しなくなります。

Atf.Gui.Wpf 以下を追加。

  • ColorUtil: 色を使用するためのユーティリティ関数。
  • DataContextSpy: 非ロジックツリーの XAML アイテムで、ElementName および DataContext のバインディングを可能にするためのクラス。
  • DebugUtils: 実行中に XAML バインディングをデバッグするための便利なクラス。
  • FindFileResolver: ユーザーの補助により、破損したファイルシステムの URI の修復を試みるリゾルバー。
  • IMenu: CommandService のメニューアイテムのインターフェイス。
  • IToolBar: CommandService のツールバーアイテムのインターフェイス。
  • ResourceUtil: WPF アプリケーションでアイコンやカーソルなどの、WinForms ベースのリソース使用をサポート。
  • Applications\AppearanceService: スキニングを管理するコンポーネント。
  • Applications\AutoDocumentService: アプリケーション起動時にドキュメントを自動的に読み込むサービス。
  • Applications\CommandInfos: WPF アプリケーションで Sce.Atf.Applications.CommandInfo を使用するための拡張メソッド。
  • Applications\FileDialogService: Sce.Atf.Applications.IFileDialogService の WPF の実装。
  • Applications\FIleSystemDataProvider: ファイルを特定のディレクトリに示し、ObservableFileInfo オブジェクトのコレクションを表示する DataSourceProvider。このディレクトリのファイルに加えられた変更は、実行時に反映されます。
  • Applications\IProtocol: プロトコルの情報を提供し、そのプロトコルで接続したターゲットとのやりとりを実行するインターフェイス。
  • Applications\ITarget: 名前、プロトコル、接続状態などのターゲット情報を取得するインターフェイス。
  • Applications\ITargetDiscovery: プロトコル別のターゲット検出用インターフェイス。
  • Applications\ITargetService: ターゲット管理のインターフェイス。
  • Applications\ITransportLayer: トランスポート層の通信用インターフェイス。
  • Applications\Listers\ITemplatingContext: コンテキストのプロトタイピングのインターフェイス。コンテンツのツリービュー表示や、IDataObjects の作成が可能です。
  • Applications\MessageBoxService: Sce.Atf.Applications.* の型をボタン、画像、Sce.Atf.Wpf.WpfMessageBox に必要な System.Windows.* 型への戻り値の型に変換し、Sce.Atf.Wpf.WpfMessageBox を表示。
  • Applications\SettingsService: ユーザー設定や設定の永続化を処理する ISettingsService の WPF 実装。
  • Applications\StandardEditCommands: WinForms DataObject を使用せずに Atf.Gui.WinForms.StandardEditCommands から作成。
  • Applications\SwitchToService: コンテンツ間の Ctrl+Tab を処理するサービス。
  • Applications\SynchronizeInvoke: WPF アプリケーション用に ISynchronizeInvoke を実装するラッパークラス。
  • Applications\TargetService: ターゲット管理用の ITargetService の実装。
  • Applications\TcpIpProtocol: TCP/IP ターゲット管理用の IProtocol の実装。
  • Applications\TcpIpTarget: TCP/IP ターゲット用の ITarget の実装。
  • Applications\TcpIpTransport\*: TCP/IP ターゲットとの実際の通信を処理。
  • Applications\VersionControl\CheckInDialog: ソース管理にファイルをチェックインするための UI。
  • Applications\VersionControl\ReconcileDialog: オフラインで行った作業を調整するための UI。
  • Applications\WebServices\FeedbackForm: バグレポートを送信するフォーム。
  • Applications\WebService\ProjectMappingAttribute: この属性をアセンブリに (通常 AssemblyInfo ファイル内にある) 配置すると、バージョンチェックやバグ起票用に SourceForge プロジェクトにマップする際に使用する識別子を示すことが可能。この属性がない場合は、代わりに AssemblyTitle 属性が使用されます。
  • Applications\WebServices\UserFeedbackService: フィードバックやバグ報告用のフォームの表示および送信の UI を提供するサービス。
  • Applications\WebServices\VersionCheck: SourceForge のアップデートの有無を確認するユーティリティ。
  • Applications\WebService\VersionUpdateService: アプリケーションを SHIP 上の最新バージョンにアップデートするサービス。
  • Behaviors\ActivateContextBehavior: マウスボタンクリックのイベントを捕捉し、ATF コンテキストレジストリのアクティブコンテキストを、要素の現在のデータコンテキストに設定する振る舞い。
  • Behaviors\ButtonPopupBehavior: ボタンクリックで関連するコンテキストメニューを表示。
  • Behaviors\ContextSensitiveToolbar: 現在の選択に基づいた状況依存の情報を表示する、ツールバーの振る舞い。
  • Behaviors\DataPiping: DataPipes の依存性プロパティ管理。
  • Behaviors\DialogButtonWorkaround: WPS のバグを回避するために、標準の Button.IsDefault に代わる添付プロパティ。バグの詳細は、http://www.thomasclaudiushuber.com/blog/2008/05/02/lostfocus-textbox-vs-buttons-isdefault-property を参照してください。
  • Behaviors\EventToCommand: UI イベントトリガーが有効になった時にコマンドを起動します。
  • Behaviors\InstancingDropTargetBehavior: ドロップ時にオブジェクトの新規インスタンスを作成する、ドラッグアンドドロップのターゲット。
  • Behaviors\ItemsControlInsertionAdornerBehavior: アイテムコントロールに挿入ガイドを描画するための抽象基底クラス。リストコントロールへの行の挿入、ツリーコントロール上のドロップターゲットのハイライトなどに使用します。
  • Behaviors\ItemsControlSelectFirstBehavior: ItemsSource に変更があった時に、ComboBox などのリストベースのコントロールの最初のアイテムを自動的に選択。
  • Behaviors\LastHitAwareBehavior: クリックもしくはドラッグされた最後のアイテムを把握しておく振る舞い。
  • Behaviors\ListBoxScrollToEndBehavior: 新しくリストに追加されたアイテムを、自動スクロールして表示する振る舞い。
  • Behaviors\PasswordBoxBehavior: PasswordBox 上の PasswordChanged イベントを処理する振る舞い。
  • Behaviors\RoutedTemplateSelector: DataTemplate を選択する必要がある時に、テンプレート化された要素のバブリング TemplateRequested ルーティングイベントを発生させる DataTemplateSelector。
  • Behaviors\SelectorSelectionBehavior: 選択が変更された時に実行するコマンドを設定する振る舞い。
  • Behaviors\TextBoxNumericBehavior: 最小値、最大値、整数もしくは小数を許可するかどうかなど、TextBox の数値入力に関する振る舞いを定義。
  • Behaviors\TextBoxSelectAllBehavior: TextBox にフォーカスが移った時に、全てのテキストを選択する振る舞い。
  • Behaviors\ThemeStyleBehavior: アプリケーションテーマが動的に変更された場合に、BasedOn="" を使用するスタイルがベースを変更することを許可する添付プロパティ。通常、スタイルに BasedOn プロパティが設定されている場合、アプリケーションが読み込まれた後は、ターゲットのスタイルを変更しても効果がありません。派生したスタイルは元のスタイルがベースのままになります。
  • Collections\PriorityQuadTree: 優先度でソートされた QuadNodes のコレクション。
  • Controls\Adaptable\IViewAwareContext: バインドされたビューを認識しているコンテキストのインターフェイス。
  • Controls\BalancedWrapPanel: 子要素を左から右、もしくは上から下の順番に配置。要素がパネルの端を超える場合には、次の行もしくは列に配置されます。
  • Controls\ClippingBorder: コンテンツをクリップする境界線 (Microsoft)
  • Controls\ConfirmationDialog: 「はい」「いいえ」「キャンセル」ボタンのあるメッセージを表示。
  • Controls\DirectoryPicker: プロパティ編集に使用するディレクトリ選択のコントロール。
  • Controls\DomRecorderView: Sce.Atf.Wpf.Dom.DomRecorder が記録した DOM イベントを表示するユーザーコントロール。
  • Controls\EditTextBox: ユーザーがリターンキーを押下した時に、データバインディングをアップデートするテキストボックス。
  • Controls\FilePicker: プロパティ編集に使用するファイル選択のコントロール。
  • Controls\FindFileDialog: ユーザーの補助で見つからないファイルを探す、FindFileDialogViewModel および FindFileResolver とともに使用。
  • Controls\FindTargetsDialog: 利用可能なターゲットのリストを検出して表示。
  • Controls\Icon: アイコンクラス。画像ソース、選択された画像、選択解除された画像、および影のオプションがあります。
  • Controls\WindowLayoutManageDialog: ウィンドウのレイアウトを管理するダイアログ。
  • Controls\PropertyEditing\StandardValuesConverter: クエリされたときに標準値のセットを提供する型コンバーター。プロパティエディターに強制的に標準値のセットを認識させるために、PropertyDescriptor に対して使うことができます。たとえば、文字列ベースのプロパティを Enum プロパティのように動作させることが可能です。
  • Controls\PropertyEditing\ValueEditors\FilePathValueEditor: ファイルパスを編集するカスタムのプロパティエディター。
  • Controls\PropertyEditing\ValueEditors\FolderPathValueEditor: フォルダーパスの編集にテンプレートを使用する、データにバインディングされたプロパティエディター。
  • Controls\PropertyEditing\ValueEditors\IStringValueFilter: 文字列の値をフィルタリングするインターフェイス。
  • Controls\PropertyEditing\ValueEditors\RangeSliderValueEditor: 許可される値の範囲を編集できるスライダープロパティエディター。
  • Controls\PropertyEditing\ValueEditors\StandardValuesEditor: 列挙可能な値のリストのプロパティエディター。
  • Controls\RangeBaseEx: 特定の範囲内の値を持つ要素を表す。デフォルト値、値が対数かどうか、値が編集中かどうかなどの拡張情報を追加します。
  • Controls\RangeSlider: 範囲の選択を許可するスライダーコントロール。
  • Controls\RangeSliderBase: 範囲選択の機能のオンオフを許可する RangeSlider の基底クラス。
  • Controls\SettingDialog: ユーザー設定の表示および編集用のダイアログ。
  • Controls\SettingsLoadSaveDialog: ユーザー設定のインポートおよびエクスポート用のダイアログ。
  • Controls\SizeBasedTemplateSelector: 表示サイズに基づいてリストからテンプレートを選択。
  • Controls\SnappingBitmap: 親にスナップするビットマップ
  • Controls\SplitButton: ドロップダウンコンテンツのあるボタン。
  • Controls\StylableListView: 標準 WPF ListView へのスタイル使用に関する問題の回避方法。詳細は http://social.msdn.microsoft.com/Forums/en/wpf/thread/9cff5483-9608-4f33-98f3-a186de4fa306 を参照してください。
  • Controls\SwitchToDialog: 利用可能なコントロールを表示し、Ctrl+Tab で移動できるようにするために、SwitchToService が使用するダイアログ。
  • Controls\TargetDialog: ITargets の管理用ダイアログ。
  • Controls\TcpIpTargetEditDialog: TCP/IP ターゲットの詳細を編集するダイアログ。
  • Controls\TileView: レイアウトの並べられた表示を示すクラス。
  • Controls\ToolBarItemTemplateSelector: ToolBarItems のテンプレートを選択するヘルパークラス。
  • Controls\TreeViewWithSelection: ISelectionContext の機能を追加するツリービュー。
  • Controls\ValueChangedEventManager: PropertyDescriptor 値の変更イベントの、より強力なイベントマネージャー。
  • Controls\VirtualizingWrapPanel: ラッピングを使用してパネルの内容を並べ、仮想化します。
  • Controls\WindowLayoutNewDialog: 新しいウィンドウレイアウトの名前を編集するダイアログ。
  • Docking\DockedWindow: 階層にドッキングされているウィンドウを表すクラス。タイトルバー、閉じるアイコンおよび折りたたむアイコンがあり、階層内でサイズ変更が可能です。
  • Docking\DockPanel: ドッキング、ドッキング解除、折りたたみのウィンドウその他を提供するルートクラス。
  • Docking\FloatingWindow: ドッキングされていないコンテンツを含むウィンドウ。
  • Docking\IDockable: ドッキングやドロップの受け入れおよびプレビューが可能な、すべてのクラスが使用するインターフェイス。
  • Docking\IDockContent: IDockable コンテンツインターフェイス。ドッキング可能なすべてのコンテンツで実装する必要があります。
  • Docking\IDockLayout: すべてのドッキングコントロールホストで実装されるインターフェイス。
  • Docking\ResizablePopup: サイズ変更可能な Popup。ドッキングされる側に基づいて、一方向にサイズを変更できます。
  • Docking\SideBarButton: SidePopup で使用できるボタン
  • Docking\SidePopup: ドッキングウィンドウの横の折りたたみ可能なパネル
  • Docking\TabLayout: 子をタブとして表示するドッキングコンテナー。
  • DOM\DataContextAdapter: ATF IAdaptable パターンを使用して FrameworkElement の DataContext を適合する際に使用するユーティリティクラス。
  • DOM\DomRecorder: アクティブなコンテキスト上の DOM イベントを記録し、リストに表示する DOM レコーダー。
  • DOM\HelpAnnotations: スキーマ注釈を介して状況依存ヘルプを提供するオブジェクトを使用するためのクラス。
  • Extensions\DispatcherExtensions: InvokeIfRequired などの、よく使われる Dispatcher 拡張メソッドのセットを提供。
  • Extensions\MiscExtensions: 主にダイアログ表示に関連する各種の拡張メソッドのセット。
  • Extensions\TreeViewExtensions: GetAllTreeViewItems などの TreeView を使用するための拡張。
  • Extensions\VIsualTreeExtensions: VisualTree を使用するための拡張メソッド。
  • Interop\KeysInterop: WinForms、WPF および ATF のキーの種類の間で変換を行う静的ユーティリティメソッド。
  • Markup\CommandServiceExtension: CommandService を使用するための XAML マークアップ拡張。
  • Markup\EnumValuesExtension: 列挙値を使用するための XAML マークアップ拡張。
  • Markup\GenericExtension: ジェネリック型を使用するための XAML マークアップ拡張。
  • Markup\ResourceKeyBinding: リソースキーにデータバインディングを提供する XAML マークアップ拡張。
  • Markup\TypeConverterExtension: ソースやターゲットタイプの型名および Type 間で変換を行う XAML マークアップ拡張。
  • Models\AdaptableViewModelCollection: ある型の IObservableCollection をラッピングし、別の型の IObservableCollection を実装。このクラスは AdaptableObservableCollection と異なり、コンストラクターに渡された IAdapterCreator を使用して、基になるコレクションの完全な新しいセットのアダプターを常に作成します。この機能は、コレクションを、共有ではなく一意のビューモデルの新規コレクションに適合させる必要のある、WPF MVVM パターンを使用する際に有用です。
  • Models\ConfirmationDialogViewModel: ConfirmationDialog の相互作用ロジック。CommonDialog の標準の[はい]、[OK]、[キャンセル] ボタンのほかに [いいえ] ボタンを追加します。
  • Models\FindFileDialogViewModel: 見つからないファイルを解決する FindFileDialog の相互作用ロジック。
  • Models\FindTargetsViewModel: Find Targets ダイアログの相互作用ロジック。
  • Models\SettingsDialogViewModel: ユーザー設定を表示、編集する Setting ダイアログの相互作用ロジック。
  • Models\SettingsLoadSaveViewModel: ユーザー設定をインポート、エクスポートするダイアログの相互作用ロジック。
  • Models\ShowDialogEventArgs: ビューモデルをダイアログから分離させることのできるイベント引数。ダイアログを直接起動するのではなく、これらのイベント引数を使用してビューモデルが提供するイベントを、ビューが購読します。
  • Models\TargetViewModel: Target の相互作用ロジック。
  • Models\TargetDialogViewModel: ターゲット管理ダイアログの相互作用ロジック。
  • Models\TcpIpTargetEditDialogViewModel: TCP/IP ターゲットの詳細を編集するダイアログの相互作用ロジック。
  • Models\WindowLayoutNewViewModel: 新しいウィンドウレイアウトの命名ダイアログの相互作用ロジック。
  • Models\ManageWindowLayoutsDialogViewModel: ウィンドウレイアウトの管理ダイアログの相互作用ロジック。
  • Resources\DockIcons.xaml: ドッキングフレームワークが使用するアイコン。
  • Resources\dialog_error、dialog_information、dialog_question、dialog_warning: メッセージボックスで使用するアイコン。
  • Skins\ReferencedAssemblySkin: ほかのアセンブリから参照できるように URI を含むスキンの情報。
  • Skins\Skin: スキンリソースの読み込みを支援する抽象基底クラス。
  • Themes: ClippingBorder、CommonDialog、DockPanel、DockedWindow、FilePicker、DirectoryPicker、FloatingWindow、RangeSlider、SideBarButton、SidePopup、SplitButton、TabLayout および TileView に新しいスタイルを追加。
  • Value Converters\AdaptingValueConverter: 2 つの IAdaptable の型の間で変換したり戻したりするコンバーター。
  • Value Converters\SimpleAdaptingValueConverter: IAdaptable 型に変換する一方向のコンバーター。
  • Value Converters\AdaptingCollectionValueConverter: Iadaptable を使用して、ある型の IObservableCollection を、別の型の IObservableCollection に変換するコンバーター。
  • Value Converters\BoolVisibilityConverter: ブール値に基づいてアイテムの可視性を設定する値コンバーター。
  • Value Converters\DomDataTemplateSelector: データテンプレートタグの型メタデータを確認する DomNode の DataTemplateSelector。
  • Value Converters\InterfaceTemplateSelector: 具象型ではなくインターフェイスに基づいてテンプレートを選択する DataTemplateSelector。
  • Value Converters\NullVisibilityConverter: アイテムが null の場合にアイテムの可視性を Collapsed に設定する値コンバーター。
  • Value Converters\TypeConverter: ある型をほかの型に変換するコンバーター。
削除
  • CollectionUtil (VisualTreeExtensions に置き換えられました。)
  • DispatcherUtil (DispatcherExtensions に置き換えられました。)
  • TreeViewUtil (VisualTreeExtensions に置き換えられました。)
  • VisualTreeUtil (VisualTreeExtensions に置き換えられました。)
  • Interop\CommandServiceAdapter (不要だったため、プラットフォーム全体で ICommandService を統合しました。)
  • Models\MenuItem (CommandItem に置き換えられました。)
  • Models\MenuItemBase (不要でした。MenuItem は CommandItem に置き換えられました。)
  • Models\MenuUtil (MainMenuViewModel に置き換えられました。)
  • Models\ToolBarTrayBinder (IMenu 型に互換性がなかったため削除されました。)
Atf.Gui に移動
  • ObservableUtil
  • Applications\ICommandService
  • Applications\IHelpContext
  • Applications\MenuInfo
  • Models\AdapterViewModel
変更
  • Applications\CommandService: 共通の Sce.Atf.Applications.ICommandService を実装するようになりました。
  • Applications\ControlHostService: Sce.Atf.Wpf.Interop.MainWindowAdapter の代わりに Sce.Atf.Applications.IMainWindow を取るようになりました。
  • Applications\EditLabelCommand: CanDoCommand および DoCommand は ICommandItem の代わりに Sce.Atf.Wpf.Applications.EditLabelCommand.Commands を予期するようになりました。
  • Applications\HelpCommands: CanDoCommand および DoCommand は ICommandItem の代わりに Sce.Atf.Wpf.Applications.HelpCommands.Commands を予期するようになりました。ContextMenuHelpTag も使用可能です。
  • Applications\ICommandItem: InputGestures と MenuPath を削除し、Shortcuts と Index を追加しました。
  • Applications\IThumbnailResolver: Uri ではなく ThumbnailParameters を取るようになりました。
  • Applications\ThumbnailService: ResolveThumbnail および ResolveThumbnailBlocking は、Uri ではなく ThumbnailParameters を取るようになりました。
  • Behaviors\ AtfTreeViewBehavior: プロパティバインディングを xaml スタイル定義からコードに移動しました。これにより、データコンテキストがつながる前にバインディングされなくなりました。
  • Behaviors\GridViewColumnHeaderBehavior: SetIsDClickable のスペルミスを SetIsClickable に修正しました。
  • Behaviors\ItemsControlDropTargetBehavior: ドラッグされたアイテムが挿入できない場合、OnDragOver がドラッグアイコンのエフェクトをクリアし、非許可を示すアイコンが表示されます。
  • Controls\FormattingTextBox: Value プロパティはオブジェクトではなく文字列型になりました
  • Controls\MainWindow.xaml: IPartImportsSatisfiedNotification を実装しないようになりました。
  • Controls\PropertyEditing\IPropertyFactory: CreateProperty は FrameworkElement ではなく ITransactionContext を取るようになりました。
  • Controls\PropertyEditing\PropertyGrid: PropertyGrid の ListBoxItemsPanel テンプレートおよび、その ListBoxItemContainer スタイルをカスタム化するプロパティを追加しました。
  • Controls\PropertyEditing\PropertyNode
    • 多くのパラメーターの ctor を削除しました。代わりにプロパティから設定してください。
    • Owner プロパティを削除。
  • Controls\PropertyEditing\TransactionPropertyNode: 多くのパラメーターの ctor を削除しました。
  • Controls\PropertyEditing\ValueEditors\ValueEditor: GetTemplate および GetStyle に DependencyObject パラメーターを追加。MultiLineTextEditor と SliderEditor にも影響します。
  • Models\DialogViewModelBase: CanOk を CanExecuteOk に変更。
  • Models\MainMenuViewModel
    • ICommandService を取る ctor を削除。
    • Menus プロパティが ObservableCollection ではなく IEnumerable 型になりました。
  • Models\ToolBarViewModel
    • ICommandService を取る ctor を削除。
    • ToolBars プロパティが ObservableCollection ではなく IToolBar[] 型になりました。
  • Models\TreeViewModel
    • Atf.Gui.WinForms.TreeViewAdapter と同様に、m_itemToNodeMap を Dictionary から Multimap に変換。TreeViewModel.GetNode() がシグネチャを保持しますが、新しいメソッド IEnumerable GetNodes(object) を呼び出し、最初のノードもしくは、見つからない場合にはデフォルトのノードを返します。
    • ツリーノードにマウスオーバーテキストプロパティを付与。ツリー表示内でノード上にマウスオーバーした時に、表示する文字列を指定します。
    • Node.ItemInfo をパブリックにし、IItemInfo.GetInfo() 呼び出しの後に必ず呼び出される OnNodeInfoUpdated(Node) を追加。ノード自体が変更を処理する前に、クライアントコードがさらに Node.ItemInfo を変更できるようになりました。
  • Sce.Atf.Wpf.WpfImageResourceAttribute に廃止マークが付きました。代わりに Sce.Atf.ImageResourceAttribute を使用してください。
  • Sce.Atf.Wpf.WpfResourceUtil に廃止マークが付きました。代わりに Sce.Atf.Wpf.ResourceUtil を使用してください。
  • デフォルトの WPF TreeViewItem のラベルフォントに影響を与える ItemInfo.FontStyle を有効にしました。
  • TreeViewModel 用のユニットテストを追加し、テストで発見したエラーを修正しました。
サンプル

WinGui サンプルをアップデート

  • WPF からの WinForms の分離を改善しました。
  • 新しい WPF 機能を使用するために WpfApp を強化しました。サンプルデータと、アクティブなドキュメントの現在の選択を追跡する表示ペインを追加しました。
Clone this wiki locally