Skip to content

Authoring Tools Framework 3.10 RELEASED

yiwami edited this page Aug 19, 2015 · 14 revisions

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

Authoring Tools Framework (ATF) is in maintenance mode, with only bug fixes and minor client-requested features being put in by Sony Computer Entertainment's Worldwide Studios. Our open source users are encouraged to contribute on GitHub.

Top New Features

WPF Property Editor – this is a small new sample application designed to demonstrate the use of Windows Presentation Foundation and ATF's two-column property editor, Sce.Atf.Wpf.Controls.PropertyEditing.PropertyGridView. See the ReadMe.txt in the project file.

LocalizableStringExtractor – this tool for extracting localizable strings from source code now supports Windows Presentation Foundation's XAML files. See below for details.

Breaking Changes

  • TimelineRenderer: the method PrioritizeHits() now has two additional parameters that allow this method to know the picking rectangle that was used and to know the bounding rectangles of all timeline objects. This change solves the problem where the user might pick a timeline interval that is very close to another timeline interval and the wrong interval could be chosen by PrioritizeHits(). This is a minor breaking change. If a client has overridden this protected virtual method, then please add the two parameters and then ignore them.
  • The User32.SendMessage() overloaded method that returns a 'uint' has been marked as obsolete because for some Windows messages, the return value will not fit in 32 bits. Please use the other SendMessage overload that uses IntPtr for its parameters and return value. You can use the IntPtr cast to convert an integer to an IntPtr.
  • The Atf.Gui.OpenGL project now only targets the x86 processor. Previously it was AnyCPU but in reality it could only run on x86 due to a dependency on the third-party DDSUtil which is x86.

Detailed List of Changes by Category

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

Circuits

  • CircuitElementInfo: Added IsValid property. D2dCircuitRenderer will now use the new D2dDiagramTheme.ErrorBrush to draw circuit elements when IsValid is false.

  • CircuitEditor:

    • Added a way for classes that derive from Element to return a custom CircuitElementInfo object.
    • Fixed a bug where changing the Theme of D2dCircuitRenderer would not re-attach an event handler.
    • Fixed a problem where expanded groups that are being dragged could appear underneath other expanded groups. Selected nodes are now drawn on top of non-selected nodes.
    • Added a demonstration of custom rendering, per-element, based on some client-specific property of each circuit element.
    • Removed the obsolete 'typeRef' attribute from the schema. This attribute was obsolete in ATF 3.8.
    • CircuitEditor documents now demonstrate transformation from an older version to a newer version using LINQ to XML. See the CircuitEditor1to2 and Migrator classes.
    • Removed sub-circuit related types from schema and source code because they are obsolete now with the version transformer in place.
  • CircuitElementInfo: added the protected virtual method OnPropertyChanged(), so that derived classes can raise the PropertyChanged event.

  • When using the DrawEdgePolicy.AllFirst enum, wires that connect to expanded groups are now drawn after the expanded groups. This fixes a problem where the wire would be hidden by the group.

  • Wires within groups are now always drawn before child elements unless the child element is also an expanded group.

Direct2D

  • D2dGraphAdapter: Selected nodes (e.g., in the circuit editor) are now drawn on top of non-selected nodes.
  • CanvasControl: made SetZoom(float xZoom, float yZoom) public, so that ScrollPosition and the zoom values can be set independently.

DllImports

  • Made all of our DllImports, and the structs that they use, use Unicode, to better support our clients.
  • Sce.Atf.BITMAP is a struct designed to mirror the native version in WinGDI.h. They did not match, because the 'long' in C++ is 32 bits whereas the 'long' in C# is 64-bits. It has been fixed. This struct was not used within ATF.
  • User32.MSG was correct only on x86 processors. In ATF, it was only used in Atf.Gui.OpenGL which was x86. MSG has been fixed to be correct on both x86 and x64.
  • The User32.WindowsHookCallback should have used IntPtr for the return value, 'wParam', and 'lParam'. Memory was not being corrupted (because the first four parameters to a Win32 function are passed in 64-bit registers with the leading bits zeroed out if necessary), but a return value that was a pointer could have been truncated. We don't think this ever happened in practice. SetWindowsHookEx and CallNextHookEx had their parameter types fixed, too.
  • In FormsNcRenderer, there were some structs that were duplicated from the class User32 or that should have been placed in User32 in the first place. The following structs in FormsNcRenderer are now marked as obsolete: WINDOWPOS, MINMAXINFO, RECT, POINT.
  • In FormsNcRenderer, the struct NCCALCSIZE_PARAMS was incorrect. The fourth field should have been an IntPtr instead of a WINDOWPOS. It has been fixed. It was not used by ATF.
  • CustomFileDialog's OPENFILENAME struct was 4 bytes too short when compiled for 64-bit. This struct was unused by ATF. It has been fixed and also made to use Unicode.
  • AutomationService: fixed its SendMessage to use IntPtrs instead of ints. It's cleaner this way, but the change has no effect on memory safety.
  • Added a C++/CLI project, NativeTestHelpers, to help verify the correctness of our DllImport / PInvoke usage. All structs that are marshaled are now tested in 64-bits, to make sure that the overall size matches the native version's overall size, and that each field offset matches the native version's offset.
  • Changed the platform solutions for Samples.vs2010.sln and Everything.vs2010.sln, so that 64-bit computers are preferred when a choice must be made between 32-bit and 64-bit. For example, CodeEditor.vs2010.csproj is AnyCPU, but it has a dependency on Atf.Perforce.vs2010.csproj, which must compile to either x86 or x64. CodeEditor.vs2010.csproj will now not be built for the x86 solution platform, because the user is most likely running in 64-bit Windows.

Localization

  • LocalizableStringExtractor tool:

    • Rewrote to process source code directories containing *.csproj files (which reference *.cs and *.xaml files), instead of assemblies. It now supports parsing XAML files, looking for the 'Loc' extension. It no longer requires Microsoft Intermediate Language Disassembler (ildasm.exe) to be installed on the computer. In the resulting XML file, the localizable strings are now listed in alphabetical order. The tool is also much faster than before. Added unit tests and updated the documentation.
    • Existing translations in Localization.xml files are preserved.
    • Refactored the input and output methods to use streams instead of file paths, so that they are more flexible.
    • All file paths in the settings file are now relative to the location of the executable, rather than to the root of the ATF directory.
    • The string extraction is run asynchronously now and the operation can be canceled in the GUI.
    • The progress bar works correctly now.
    • Added support for localizing strings that use WPF's DescriptionAttribute. See LocalizedDescriptionAttribute.
    • Added argument to Extractor.ExtractMethodFromCs(), to specify a delegate with which to retrieve localized strings from each matched method call. Allows each method being searched for, to specify from which arguments it wants to retrieve string literals.
    • Added public static methods to Extractor: GetMatchingCloseParen(), GetNextArgTerminator(), TryParseArgFromBeginning().
    • Extractor.ParseMethodCallOnStringLiterals() now uses Extractor.TryParseArgFromBeginning(), instead of Extractor.TryParseStringLiteralFromBeginning(). The change allows the paramStrings argument to be set to an array whose size matches the number of arguments in the parsed method. For each argument in the parsed method, if it is a string literal, the string is present for the corresponding entry in paramStrings. If it is not a string literal, the entry is an empty string. Boolean result returned now indicates whether the whole method call was successfully parsed, not whether any string literals were found.
    • Created Extractor.TryParseForStringLiteral(). Uses regex expression to parse a string of C# code to find a sequence of one or more string literals, connected by '+' characters. Successful matching returns a string result that concatenates all matched string literals into one. Replaced use of Extractor.TryParseStringLiteralFromBeginning() with Extractor.TryParseForStringLiteral().
    • Code cleanup: Added comments, removed unused code, renamed methods, optimized by using StringBuilder instead of the += string operator.
    • Added handling in TryParseForStringLiteral() for when there are parentheses between sections of a concatenated string literal, and for converting escaped quotes in a found string literal into regular quotes.
    • Removed the separate solution file and added the project file to Everything.vs2010.sln.
    • Verbatim strings that have escaped double-quotes and that are used with the extension method syntax are now parsed correctly. For example: @"Pat said ""Yes""".Localize();
    • Added command-line options for 1) specifying which settings file to use and 2) making the tool run without any user interaction.
    • Changed the project file's output directory to match our other project files.
  • Updated ATF's XML files of localizable strings, using the recently rewritten LocalizableStringExtractor tool.

  • EmbeddedResourceStringLocalizer:

    • Removed the optimization of skipping loading of localized resources, when the language is "en", because this prevented client code from employing English localized resources if they wanted.
    • Fixed a problem where the embedded resource might not be found if the Visual Studio project folder had a '-' in its name.
  • PathUtil: Removed the optimization that would not translate the paths of localizable assets to English. We can't assume that the localizable assets at the project's root are in English and that the sub-directories are in other languages.

  • Added the classes LocalizedDescriptionAttribute and LocalizedNameAttribute, a DescriptionAttribute whose string argument can be extracted by the LocalizableStringExtractor development tool.

  • AboutDialog: Fixed the ATF credit string so that it can be localized properly.

  • Target Manager sample app has been mostly localized to Japanese.

Property Editing

  • PropertyGrid now supports hyperlinks in the descriptions of property descriptors. The syntax is "[open source software|https://github.com/SonyWWS]". By default, the URL is opened by the operating system, so the default browser is used. To have custom link handling behavior, override the new LinkClicked(string url) method.
  • DOM Property Editor sample app: added URLs to the property descriptor's descriptions.
  • EmbeddedCollectionEditor: fixed a layout bug.
  • PropertyGrid: fixed the support for the PropertyGridMode.DisplayToolTips enum option, so that property descriptions would appear as tooltips. https://github.com/SonyWWS/ATF/issues/37
  • FloatDataEditor: fixed problems when ShowSlider is false.

Skinning

  • SkinService: fixed problems with applying skins to C# properties that are not simple types.

Timelines

  • TimelineRenderer: the method PrioritizeHits() now has two additional parameters that allow this method to know the picking rectangle that was used and to know the bounding rectangles of all timeline objects. This change solves the problem where the user might pick a timeline interval that is very close to another timeline interval and the wrong interval could be chosen by PrioritizeHits(). This is a minor breaking change. If a client has overridden this protected virtual method, then please add the two parameters and then ignore them.
  • D2dTimelineControl: added the TimelineStart property, so that the starting value of the timeline can be specified. The default value is zero. Previously, the starting value was always zero and could not easily be changed.
  • D2dScrubberManipulator: made the initial position be the same as D2dTimelineControl's TimelineStart, rather than always starting at zero.

WPF

  • SimpleDomEditorWpf sample: Added localization support by adding localization markup to the XAML files and by allowing the use of embedded resources. Added About.rtf in Japanese and a few other preliminary Japanese translations.
  • Fixed an issue in the WPF docking framework where floating windows did not handle shortcut keys.
  • Fixed an issue in the WPF docking framework where if the user tried to drag a maximized floating window, it could be positioned offscreen when restored to a non-maximized state. This was because the drag was being applied to the window's stored non-maximized position. Now when a maximized window is dragged, it is restored to its original size and dragged from the current mouse position.
  • Fixed a WPF layout issue where if an app was running on the secondary monitor, when it was relaunched it would be restored to the primary monitor. This only happened when the secondary monitor was configured to be above or to the left of the primary monitor.
  • Added WpfPropertyEditor sample app to demonstrate the use of custom editors, and to show a simplified use case for ATF's WPF PropertyGrid without using the CommandService.
  • PropertyGridView: added PropertyFactory property, through which to set up a custom type editor (subclass of ValueEditor) for PropertyNode.
  • PropertyNode: added SetCustomEditor().
  • SliderValueEditor: added SetRange() so we don't have to extract the range from the property descriptor's attributes.
  • SliderBox: added Minimum/Maximum data binding. Previously, it was hard-coded to [0,1].

WinForms ControlHostService

  • Added a new property to ControlInfo called UnregisterOnClose, which is a nullable boolean. If UnregisterOnClose has a value, then that value will specify whether or not a Control is unregistered when the user clicks the close button.
  • In the Windows menu, the listed commands are supposed to have a check mark if the corresponding window is visible. This synchronization was broken and has now been fixed.
  • Fixed a crash when closing document windows and switching back and forth between Windows layouts (using the WindowLayoutService).
  • Added the new ControlInfo.DisplayName property, to let the Control's display name be different than the ID that is saved in the windows layout. This change will allow the user's windows layout to be consistent if the language is changed.
  • Added the MenuGroupTag property to ControlInfo. This lets client code specify how menu commands are organized in the Windows drop-down menu.
  • ComboBoxes that allow text editing will no longer have the text input interpreted as commands.
  • Fixed a bug where the context menu on a panel's tab might not be displayed when the user right-clicks on the tab, until the user had changed focus to another tab and then back again.
  • DockPanelSuite: fixed a problem where a floating panel did not always receive focus.

Tree Controls

  • Bug fix in DomTreeEditor/TreeView.cs: One code path was returning ItemInfo without assigning the Label property.

  • TreeControl: Added new public event ItemRendererChanged.

  • Added more visual cues to TreeControl when filtering is enabled. Tree node expanders now display a visual cue if there is one or more hidden nodes that match filters.

  • TreeItemRenderer:

    • Fixed a crash in method DrawLabel(). The node.Label property was used without checking for nullity. It crashed when searching a tree with one or more nodes with null Label.
    • Added two new public properties to expose the brushes used by tree filtering for highlighting the background for matched and unmatched nodes.
  • DomTreeEditor: Replaced TreeControlEditor with FilteredTreeControlEditor to demonstrate and exercise the FilteredTreeControlEditor code.

  • TreeListControl: Added BoolDataEditor for displaying boolean properties.

Other

  • The scripts in \Test no longer require VS2010 to be installed as long as VS2012 or VS2013 are available.

  • UniquePathIdValidator:

    • Fixed a bug where a DomNode being removed and then added to a different parent would skip having its ID checked.
    • Fixed a crash bug that would occur if the adapted DomNode was the root of a DOM tree and its ID changed.
  • StringUtil: Added an extension method for strings called SplitAndKeepDelimiters().

  • PaletteService: Added the CategoryComparer property so that clients can provide custom comparison logic for sorting the categories in the palette.

  • Made significant performance improvements to FilteredTreeControlEditor. Reduced memory footprint due to over usage of caching tree nodes.

  • ErrorDialogService: Fixed a crash that could occur if the error or warning message was sent from a thread other than the main GUI thread.

  • WinFormsUtil: Made InvokeIfRequired and CheckForIllegalCrossThreadCall extension methods and allowed their Control parameters to be null.

  • ThumbnailService: made Initialize() virtual.

  • GdiUtil: Added a new method for drawing expanders.

  • FloatDataEditor rolls our own trackbar thumb GDI drawing when visual styles are disabled by the user in the operating system. This prevents a crash.

  • FsmEditor:

    • Added new child "triggerType" to transitionType. The new addition is used for testing EmbeddedCollectionEditor.
    • Used PropertyGridView.CustomizeAttributes to save horizontal space for the Triggers property.
    • Changed the value of minOccurs from 2 to 0, for transitionType's "trigger" element, in FSM_customized.xsd.
    • Added skin service.
  • CommandServiceBase:

    • Fixed properties listed in wrong order within InvalidOperatorException message.
    • Put in some test code for ensuring that the commands can be sorted correctly in the menus. The test code is disabled with a #if.
  • Open Sound Control: made minor layout improvements to the OSC dialog box.

  • AutoDocumentService:

    • Subscribes to the IMainWindow.Loaded event for initialization instead of IMainWindow.Loading.
    • Added the virtual CreateNewDocuments() method, to allow derived classes to customize the behavior of how new documents are automatically created.
  • Added some logic in MainForm.OnLoad() to ensure that the Loading and Loaded events are handled in the correct order.

  • Added MsBuildUtils library and its unit tests. This new library allows Visual Studio project files and solution files to be searched for *.cs and *.xaml files.

  • LiveConnectService: added newlines at the ends of the error messages, to work better with other messages in the Outputs component.

  • SettingsService: added customization points for derived classes. Made the class SettingsLoadSaveDialog public.

  • SettingsService: made the user settings dialog title be customizable.

  • StringEnumRule: added a getter, to retrieve the string values that were passed into the constructor.

  • PropertyEditingControl: fixed a problem where the drop-down property editing control could appear on the wrong monitor.

  • DomGen: 1) updated the pre-compiled DomGen.exe and Atf.Core.dll to fix a problem with how XSD elements that are arrays of simple types are handled -- a ChildInfo should have been generated instead of an AttributeInfo. 2) Fixed a bug where certain schemas, like the collada.xsd, could cause multiple duplicate AttributeInfos in a DomNodeType. 3) Re-ran all of our GenSchemaDef.bat files, to use the latest DomGen.exe, and fixed a couple more minor problems. 4) Added some unit tests.

  • Direct2D:

    • D2dBitmap: added checks for being disposed.
    • D2dBitmap: added methods for copying from integer arrays.
    • D2dFactory: added an optional parameter to CreateBitmap() that lets the client use an integer array instead of a GDI bitmap for changing or restoring the D2dBitmap.
    • D2dTextFormat.cs: Fixed null reference exception bug in getter of Trimming property.
    • D2dFactory.CreateTextLayout(): added support for underlining and striking-out text.
    • D2dGraphics.DrawText(string text, D2dTextFormat textFormat,PointF upperLeft, ...): removed the usage of alignment properties in the given D2dTextFormat object because drawing text at a point should not use these alignments.
  • XmlSchemaTypeLoader: exposed the private dictionary of annotations as a protected property.

  • NumericMaxRule and NumericMinRule: Exposed the 'max' and 'min' value of the rules, as well as whether the limits are inclusive.

  • DomXmlWriter: Fixed exception when writing out a non-abstract element that has a SubstitutionGroupChildRule for it. Effectively, the DomXmlWriter was requiring that a substitution take place for the element. But according to the standard, it is acceptable for the original element to be used (if it is not abstract). https://github.com/SonyWWS/ATF/pull/40

  • FileWatcherService: fixed a problem where the FileChanged event could be raised for changes to a file that happened before FileWatcherService began watching that file. This behavior was observed on one Windows 8 computer when the file was changed (and the stream flushed) and then immediately afterwards FileWatcherService was used to watch that file. Perhaps virus scanning or hard disk encryption was delaying the operating system file change notifications for too long on this computer. The fix was to check the time stamp since the file was last modified.

  • WinFormsUtil.GetFocusedControl() will now search for the nearest ancestor of the focused control that is a .NET control, rather than always returning null if the focused control was native-only.

  • User32: added GetParent().

  • Reduced unnecessary file I/O by these two components -- DefaultTabCommands and RecentDocumentCommands. They no longer check for the existence of a file in their ICommandClient.CanDoCommand() methods.

  • DefaultTabCommands: is now much more customizable. For example, client code can now 1) remove unwanted context menu commands that appear on the tab controls and 2) choose how the document path is calculated, given the document's Control.

  • FormNcRenderer: fixed a crash that could happen if an app used multiple GUI threads.

  • TargetCommands and TargetEnumerationService: made the command names be localizable.

  • Added support for Visual Studio 2015 to the build scripts.

  • System Info dialog (in Help > About > System Info): fixed a problem in the list of dlls where if a loaded dll did not exist on disk, no further dlls would be listed.

# Authoring Tools Framework 3.10 をリリース #

オーサリングツールフレームワーク (Authoring Tools Framework, ATF) は、主要な開発を終えています。ソニー・コンピュータエンタテインメントのワールドワイド・スタジオは、1 個のバグ修正と、マイナーなクライアント関連の機能を含めました。オープンソースのユーザーによる、GitHub への投稿を歓迎します。

WPF PropertyEditor: 小型の新しいサンプルアプリケーションで、Windows Presentation Foundation (WPF) および ATF の 2 カラムのプロパティエディター「Sce.Atf.Wpf.Controls.PropertyEditing.PropertyGridView」の使用例を示すものです。プロジェクトファイル内の ReadMe.txt を参照してください。

LocalizableStringExtractor: ローカライズ可能な文字列をソースコードから抽出するツールが、WPF の XAML ファイルをサポートするようになりました。詳細は、以下を参照してください。

互換性に影響する変更点

  • TimelineRenderer: メソッド「PrioritizeHits()」に追加された 2 つのパラメーターにより、選択に使用された矩形およびすべてのタイムラインオブジェクトの境界を示す矩形の情報がメソッドでわかるようになりました。この変更により、ほかのタイムライン間隔に非常に接近したタイムライン間隔を選択した場合に、PrioritizeHits() が誤った方のタイムライン間隔を選択する可能性があるという問題が解決しました。これは、互換性に影響する細かい変更点です。クライアントがこの保護された仮想メソッドをオーバーライドした場合は、2 つのパラメーターを追加して、無視してください。
  • 「uint」を返す User32.SendMessage() オーバーロードメソッドは、廃止とマークされています。これは、Windows メッセージによっては返り値が 32 ビットに収まらないことがあるためです。パラメーターおよび返り値に IntPtr を使用する、その他の SendMessage オーバーロードを使用してください。IntPtr 型変換を使用すると、整数を IntPtr に変換できます。
  • Atf.Gui.OpenGL プロジェクトは、x86 プロセッサのみをターゲットとするようになりました。従来は AnyCPU でしたが、サードパーティの DDSUtil が x86 であったため、この依存関係により、実際は、x86 のみでしか実行できませんでした。

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

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

回路

  • CircuitElementInfo:IsValid プロパティを追加。D2dCircuitRenderer は、IsValid が false の場合に、新規の D2dDiagramTheme.ErrorBrush を使用して、回路要素を描画するようになりました。

  • CircuitEditor:

    • Element から派生するクラスが、カスタムの CircuitElementInfo オブジェクトを返す手段を追加。
    • D2dCircuitRenderer の Theme を変更しても、イベントハンドラーが 再アタッチされないバグを修正。
    • ドラッグ中の展開されたグループが、ほかの展開されたグループの配下に表示される可能性がある問題を修正。選択されたノードが、選択されていないノード上に描画されるようになりました。
    • 各回路要素のクライアント固有のプロパティに基づいた、要素ごとのカスタムレンダリングのデモを追加。
    • 廃止された typeRef 属性をスキーマから削除。この属性は、ATF 3.8 で廃止されました。
    • CircuitEditor ドキュメントが、LINQ to XML を使用した、古いバージョンから新しいバージョンへの変換の例を示すようになった。CircuitEditor1to2 クラスおよび Migrator クラスを参照してください。
    • サブ回路関連の型を、スキーマおよびソースコードより削除。変換機能が備わったため、廃止されました。
  • CircuitElementInfo: 保護された仮想メソッド、OnPropertyChanged() を追加。派生クラスが発生させられるようにするためです。

  • DrawEdgePolicy.AllFirst 列挙の使用時に、展開したグループに接続したワイヤーが展開したグループの後で描画されるようになりました。この結果、ワイヤーがグループによって隠されるという問題が解決しました。

  • グループ内のワイヤーが、子要素が展開したグループでない限り、子要素の前に描画されるようになりました。

Direct2D

  • D2dGraphAdapter:回路エディターなどで、選択されたノードが、選択されていないノード上に描画されるようになった。
  • CanvasControl: SetZoom(float xZoom, float yZoom) を public にし、ScrollPosition とズーム値を個別に設定できるようにした。

DllImports

  • ATF の DllImports すべてと、DllImports が使用する構造体が Unicode を使用するようにし、クライアントへの対応を向上。
  • Sce.Atf.BITMAP は、WinGDI.h のネイティブバージョンをミラーするように設計された構造体です。C++ の long は 32 ビットですが、C# では 64 ビットであるため、これらは一致しませんでしたが、この問題は修正されました。この構造体は、ATF 内では使用されていませんでした。
  • User32.MSG は、x86 プロセッサのみで正しく使用できていました。これは ATF では、x86 である Atf.Gui.OpenGL のみで使用されていました。MSG は、x86 と x64 の両方で正しく使用できるように、修正されました。
  • User32.WindowsHookCallback は、返り値 wParam および lParam に、IntPtr を使用する必要がありました。メモリは破損していませんでしたが (Win32 関数に渡す最初の 4 つのパラメーターは、必要に応じて先頭の空白ビットに 0 を設定して 64 ビットのレジスタを使用して渡されたため)、ポインターである返り値は、切り詰められる可能性がありました。この現象は実際には、発生していないものと思われます。SetWindowsHookEx および CallNextHookEx のパラメーター型も修正されました。
  • FormsNcRenderer に、クラス「User32」から複製された構造体、または最初から User32 に配置されるべきであった構造体がありました。FormsNcRenderer の構造体、WINDOWPOS、MINMAXINFO、RECT および POINT は、廃止とマークされました。
  • FormsNcRenderer の構造体 NCCALCSIZE_PARAMS は不正でした。4 番目のフィールドは、WINDOWPOS ではなく、正しくは IntPtr です。この問題は修正されました。これは ATF では使用されていませんでした。
  • CustomFileDialog の OPENFILENAME 構造体は、64 ビット用に結合すると、4 バイト短くなっていました。この構造体は、ATF 内では使用されていませんでした。この問題は修正され、Unicode を使用するように変更されています。
  • AutomationService: SendMessage が、ints ではなく IntPtrs を使用するように変更。こうすることで、よりクリーンになりましたが、メモリの安全性には影響がありません。
  • C++/CLI プロジェクト「NativeTestHelpers」を追加し、DllImport / Pinvoke 使用の正確性検証を支援。マーシャリングされた構造体はすべて 64 ビットでテストされ、全体のサイズおよび各フィールドのオフセットともに、ネイティブバージョンのものと一致することが確認されました。
  • Samples.vs2010.sln および Everything.vs2010.sln のプラットフォームソリューションを変更。32 ビットと 64 ビットから選択する際に、64 ビットが優先されるようにするためです。たとえば、CodeEditor.vs2010.csproj は AnyCPU ですが、x86 または x64 でコンパイルする必要がある Atf.Perforce.vs2010.csproj への依存性があります。CodeEditor.vs2010.csproj は、x86 ソリューションプラットフォーム用にはビルドしなくなりました。これは、64 ビット Windows 上で実行する可能性が高いためです。

ローカライゼーション:

  • LocalizableStringExtractor ツール:

    • アセンブリではなく、*.csproj ファイル (*.cs ファイルおよび *.xaml ファイルを参照する) を含むソースコードのディレクトリを処理するように、書き直されました。Loc 拡張子を検出するための XAML ファイルの解析に対応するようになりました。MSIL 逆アセンブラー (ildasm.exe) をコンピューターにインストールしておく必要がなくなりました。結果の XML ファイルには、ローカライズ可能な文字列が、アルファベット順にリストされます。ツールの速度も向上しました。ユニットテストが追加され、ドキュメントがアップデートされました。
    • Localization.xml ファイル内の既存の翻訳は保持されます。
    • ファイルパスではなく、ストリームを使用するように、入力および出力メソッドをリファクタリングし、柔軟性を向上。
    • 設定ファイル内のファイルパスはすべて、ATF ディレクトリのルートからではなく、実行ファイルからの相対。
    • 文字列の抽出は、非同期に実行。GUI からのキャンセルも可能。
    • 進捗バーが正しく動作するようになりました。
    • WPF の DescriptionAttribute を使用する文字列のローカライズへの対応を追加。LocalizedDescriptionAttribute を参照してください。
    • Extractor.ExtractMethodFromCs() にデリゲートを指定する引数を追加。このデリゲートを使用して、一致した各メソッドの呼び出しから、ローカライズ済みの文字列を取得します。これにより、各メソッドが検索対象となり、どの引数から文字列リテラルを取得するのかを指定できるようになります。
    • Extractor である、GetMatchingCloseParen()、GetNextArgTerminator()、TryParseArgFromBeginning() に、public の静的メソッドを追加。
    • Extractor.ParseMethodCallOnStringLiterals() は、Extractor.TryParseStringLiteralFromBeginning() ではなく Extractor.TryParseArgFromBeginning() を使用するようになりました。この変更により、paramStrings 引数が、解析されたメソッドの引数の数とサイズが一致する配列に設定可能になりました。解析されたメソッドの各引数が文字列リテラルである場合は、paramStrings の対応するエントリに文字列が存在します。文字列リテラルでない場合は、エントリは空の文字列です。ブール値の結果が返された場合は、文字列リテラルが見つかったかどうかではなく、メソッド呼び出し全体が正しく解析されたことを示すようになりました。
    • Extractor.TryParseForStringLiteral() を作成。正規表現を使用して C# コードの文字列を解析し、1 つまたは「+」で結合された複数の文字列リテラルのシーケンスを検出します。マッチが見つかった場合は、一致した文字列リテラルすべてを一つに連結した文字列を結果として返します。Extractor.TryParseStringLiteralFromBeginning() の使用を、 Extractor.TryParseForStringLiteral() で置き換えています。
    • コードのクリーンアップ。コメントの追加、使用されていないコードの削除、メソッドの改名、+= 文字列演算子ではなく StringBuilder を使用した最適化。
    • TryParseForStringLiteral() への処理の追加。 連結された文字列リテラルのセクション間にかっこが存在する場合に対応。また、検出されたリテラル文字列内のエスケープ引用符を普通の引用符に変換するため。
    • 分離したソリューションファイルを削除し、プロジェクトファイルを Everything.vs2010.sln に追加。
    • エスケープした二重引用符を含み、拡張メソッド構文とともに使用される逐語的な文字列が、正しく解析されるようになりました。(例: @"Pat said ""Yes""".Localize();)
    • 2 つのコマンドラインオプションを追加。これは、使用する設定ファイルを指定するもの、およびユーザーの介入なしにツールを実行させるためのものです。
    • プロジェクトファイルの出力ディレクトリを、その他のプロジェクトファイルのものと一致するように変更。
  • ATF の ローカライゼーション可能文字列の XML ファイルを、最近書き直された LocalizableStringExtractor ツールを使用してアップデート。

  • EmbeddedResourceStringLocalizer:

    • 言語が「en」の場合に、ローカライズ済みのリソース読み込みをスキップする最適化を削除。この最適化のため、クライアントコードがローカライズ済みの英語のリソースを必要時に使用できませんでした。
    • Visual Studio のプロジェクトフォルダー名に「-」が含まれている場合に、埋め込まれたリソースが見つからない可能性がある問題を修正。
  • PathUtil:ローカライズ可能なアセットのパスを英語に翻訳しない最適化を削除。これは、プロジェクトのルートにあるローカライズ可能なアセットが英語であり、サブディレクトリがその他の言語であるとは限らないためです。

  • LocalizableStringExtractor 開発ツールを使用して、文字列引数を抽出可能な、クラス「LocalizedDescriptionAttribute」および「LocalizedNameAttribute」を追加。

  • AboutDialog:ATF のクレジット文字列を、正しくローカライズできるように修正。

  • TargetManager サンプルアプリケーションの大部分を日本語にローカライズ。

プロパティ編集

  • PropertyGrid が、プロパティの説明内の記述子のハイパーリンクをサポートするようになりました。構文は、「[open source software|https://github.com/SonyWWS]」 です。デフォルトでは、URL はオペレーティングシステムによって開かれ、デフォルトのブラウザーが使用されます。カスタムのリンク処理の振る舞いを使用するには、新規の LinkClicked(string url) メソッドをオーバーライドします。
  • DOMPropertyEditor サンプルアプリケーション: プロパティ記述子の説明に、URL を追加。
  • EmbeddedCollectionEditor: レイアウトのバグを修正。
  • PropertyGrid: PropertyGridMode.DisplayToolTips 列挙オプションのサポートを修正。これは、プロパティの説明がツールヒントとして表示されないようにするためです。(https://github.com/SonyWWS/ATF/issues/37 を参照)
  • FloatDataEditor: ShowSlider が false の場合に発生する問題を修正。

スキニング

  • SkinService: 単純型でない C# プロパティにスキンを適用する際の問題を修正。

タイムライン

  • TimelineRenderer: メソッド「PrioritizeHits()」に追加された 2 つのパラメーターにより、選択に使用された矩形およびすべてのタイムラインオブジェクトの境界を示す矩形の情報がメソッドでわかるようになりました。この変更により、ほかのタイムライン間隔に非常に接近したタイムライン間隔を選択した場合に、PrioritizeHits() が誤った方のタイムライン間隔を選択する可能性があるという問題が解決しました。これは、互換性に影響する細かい変更点です。クライアントがこの保護された仮想メソッドをオーバーライドした場合は、2 つのパラメーターを追加して、無視してください。
  • D2dTimelineControl: タイムラインの開始値を指定できるように、TimelineStart プロパティを追加。デフォルト値は 0 です。従来は、開始値は常に 0 で、変更は容易ではありませんでした。
  • D2dScrubberManipulator: 初期位置が、常に 0 ではなく、D2dTimelineControl の TimelineStart と同じになった。

WPF

  • SimpleDomEditorWpf sample:XAML ファイルにローカライゼーションマークアップを追加し、また埋め込まれたリソースを使用可能にすることで、ローカライゼーションのサポートを追加。日本語の About.rtf および 2、3 の暫定的な日本語訳を追加。
  • WPF ドッキングフレームワークの、浮動ウィンドウがショートカットキーを処理しない問題を修正。
  • WPF ドッキングフレームワークの問題を修正。最大化された浮動ウィンドウをドラッグして元のサイズに戻すと、ウィンドウが画面の外に表示されていました。この原因は、ウィンドウが元のサイズであったときの場所に対してドラッグが適用されていたためです。修正後は、最大化されたウィンドウをドラッグすると、ウィンドウが元のサイズに戻り、現在のマウスポインターの位置からドラッグされるようになりました。
  • WPF のレイアウトの問題を修正。アプリケーションをセカンダリモニターに表示して実行した後で再起動すると、プライマリモニターに表示されていました。この問題は、セカンダリモニターが、プライマリモニターの上または左に位置している場合にのみ発生していました。
  • WpfPropertyEditor サンプルアプリケーションを追加。カスタムエディターの使用例および、ATF の WPF PropertyGrid の CommandService を使用しない単純なユーズケースを紹介します。
  • PropertyGridView: PropertyFactory プロパティを追加。このプロパティを通じ、PropertyNode に対し、カスタムタイプのエディター (ValueEditor のサブクラス) をセットアップします。
  • PropertyNode: SetCustomEditor() を追加。
  • SliderValueEditor: SetRange() を追加。プロパティ記述子の属性から範囲を抽出する必要がなくなりました。
  • SliderBox: 最小/最大データバインディングを追加。従来は、[0,1] にハードコードされていました。

WinForms ControlHostService

  • 新規のプロパティ UnregisterOnClose を ControlInfo に追加。プロパティはブール値で、null 値を取ることが可能です。UnregisterOnClose に値が設定されている場合は、閉じるボタンの押下時に、Control が登録解除されているかどうかを示します。
  • Windows メニューでは、リストされているコマンドは、対応するウィンドウが可視である場合は、そのチェックマークがオンになっています。この同期が壊れていましたが、修正されました。
  • ドキュメントウィンドウのクローズ時、およびウィンドウレイアウト間の WindowLayoutService を使用した切り替え時のクラッシュを修正。
  • 新規の ControlInfo.DisplayName プロパティを追加。Control の表示名を、ウィンドウレイアウトに保存された ID と異なる名前に指定できます。この変更により、言語変更時もウィンドウレイアウトの一貫性が保たれるようになりました。
  • MenuGroupTag プロパティを ControlInfo に追加。これにより、Windows ドロップダウンメニューのメニューコマンドの整理方法をクライアントコードで指定できるようになりました。
  • テキスト編集が可能な ComboBox では、テキスト入力がコマンドとして解釈されなくなりました。
  • 一旦ほかのタブをクリックしてからでないと、パネルタブを右クリックしてもコンテキストメニューが表示されない可能性があるバグを修正。
  • DockPanelSuite: 浮動パネルにフォーカスしないことがある問題を修正。

ツリーコントロール

  • DomTreeEditor/TreeView.cs のバグ修正:1 つのコードパスが、Label プロパティを割り当てずに ItemInfo を返していました。

  • TreeControl:新規の public イベント ItemRendererChanged を追加。

  • フィルタリングがオンの場合に、TreeControl に視覚的なキューをさらに追加。フィルターに一致する非表示ノードが最低 1 つある場合、ツリーノード展開コントロールが、視覚的なキューを表示するようになりました。

  • TreeItemRenderer:

    • メソッド DrawLabel() のクラッシュを修正。node.Label プロパティは、null かどうかのチェックなしに使用されていました。Label が null のノードが少なくとも 1 つあるツリーの検索時に、クラッシュしていました。
    • 新規の public プロパティを 2 つ追加。ツリーのフィルタリングで、マッチしたノードとマッチしないノードの背景をハイライト表示するために使用するブラシを公開します。
  • DomTreeEditor:TreeControlEditor を FilteredTreeControlEditor に置き換え、FilteredTreeControlEditor コードの例を示し、実行。

  • TreeListControl:ブール値プロパティを表示する BoolDataEditor を追加。

その他

  • VS2012 または VS2013 のいずれかが使用可能であれば、\Test 内のスクリプトには、VS2010 のインストールが不要になりました。

  • UniquePathIdValidator:

    • DomNode を削除して別の親に追加した場合に、その ID チェックがスキップされるバグを修正。
    • DOM ツリーのルートである適合された DomNode の ID が変更された際にクラッシュするバグを修正。
  • StringUtil:文字列に、拡張メソッド SplitAndKeepDelimiters() を追加。

  • PaletteService:CategoryComparer プロパティを追加。パレットのカテゴリを並べ替えるための、カスタムの比較ロジックをクライアントが提供できるようになりました。

  • FilteredTreeControlEditor のパフォーマンスを大幅に改良。ツリーノードキャッシュの使用過多によるメモリフットプリントを削減しました。

  • ErrorDialogService:メインの GUI スレッド以外からエラーまたは警告メッセージが送信された場合に発生する可能性があったクラッシュを修正。

  • WinFormsUtil:InvokeIfRequired および CheckForIllegalCrossThreadCall 拡張メソッドを作成し、その Control パラメーターに null を使用可能にした。

  • ThumbnailService: Initialize() が仮想になった。

  • GdiUtil:描画展開コントロールに新規メソッドを追加。

  • FloatDataEditor: Windows オペレーティングシステムで、仮想スタイルが無効にされた場合に発生するクラッシュを修正。これにより、クラッシュが未然に防がれます。

  • FsmEditor:

    • 新規の子「triggerType」を transitionType に追加。EmbeddedCollectionEditor のテストに使用します。
    • PropertyGridView.CustomizeAttributes を使用して、Triggers プロパティの水平スペースを節減。
    • FSM_customized.xsd の transitionType の trigger 要素で、minOccurs の値を 2 から 0 に変更。
    • スキンサービスを追加。
  • CommandServiceBase:

    • InvalidOperatorException メッセージ内のプロパティのリスト順が誤っていたため修正。
    • テストコードを配置し、メニュー内でコマンドを正しく並べ替えられることを確認。テストコードは、#if を使用して無効にしています。
  • Open Sound Control: OSC ダイアログボックスで、マイナーなレイアウトの改良。

  • AutoDocumentService:

    • 初期化のために、IMainWindow.Loading ではなく、IMainWindow.Loaded イベントを購読。
    • 仮想メソッド CreateNewDocuments() を追加。新規ドキュメントを自動的に作成する方法の振る舞いを、派生クラスでカスタム化できるようになりました。
  • MainForm.OnLoad() にロジックを追加。Loading イベントおよび Loaded イベントが正しい順序で処理されるようにします。

  • MsBuildUtils ライブラリおよびそのユニットテストを追加。この新規のライブラリにより、*.cs ファイルおよび *.xaml ファイルの検索で、Visual Studio プロジェクトファイルおよびソリューションファイルが検出されるようになりました。

  • LiveConnectService: エラーメッセージの最後に改行を追加し、Outputs コンポーネントからのメッセージを見やすくしました。

  • SettingsService: 派生クラスに対し、カスタマイズポイントを追加。クラス「SettingsLoadSaveDialog」が public になりました。

  • SettingsService: ユーザー設定ダイアログのタイトルがカスタム化可能になった。

  • StringEnumRule: getter を追加。コンストラクターに渡された文字列値を取得します。

  • PropertyEditingControl: ドロップダウンプロパティ編集コントロールが、正しくないモニター上に表示される可能性がある問題を修正。

  • DomGen

  1. 事前コンパイルされた DomGen.exe および Atf.Core.dll をアップデートし、単純型の配列である XSD 要素の処理方法に関する問題を修正。AttributeInfo ではなく、ChildInfo が生成されるようにしました。
  2. collada.xsd などの、特定のスキーマが、DomNodeType に複数の重複した AttributeInfo を発生させる可能性があるバグを修正。
  3. GenSchemaDef.bat ファイルをすべて、最新の DomGen.exe が使用されるように再実行し、マイナーな問題点をいくつか修正。
  4. ユニットテストをいくつか追加。
  • Direct2D:

    • D2dBitmap: 破棄されているかどうかのチェックを追加。
    • D2dBitmap: 整数配列からコピーするメソッドを追加。
    • D2dFactory: CreateBitmap() にオプションのパラメーターを追加。D2dBitmap の変更または復元に、GDI ビットマップではなく、整数配列をクライアントが使用するように指定できます。
    • D2dTextFormat.cs:Trimming プロパティの getter の null 参照例外バグを修正。
    • D2dFactory.CreateTextLayout(): テキストの下線および取り消し線への対応を追加。
    • D2dGraphics.DrawText(string text, D2dTextFormat textFormat,PointF upperLeft, …): D2dTextFormat オブジェクトでの配置プロパティの使用を削除。これは、ある地点でのテキストの描画には、配置は使用されないためです。
  • XmlSchemaTypeLoader: 注釈の private 辞書を、保護されたプロパティとして公開。

  • NumericMaxRule and NumericMinRule:両者の max 値および min 値と、境界値を含めるかどうかを公開。

  • DomXmlWriter: SubstitutionGroupChildRule がある非抽象要素を書き出す際の例外を修正。実際上は、要素の置換を DomXmlWriter が要求していましたが、標準によると、元の要素の使用も許容されます (抽象でない限り)。(https://github.com/SonyWWS/ATF/pull/40 を参照)

  • FileWatcherService: FileWatcherService がファイルを監視し始める前にファイルへ変更を加えると、FileChanged イベントが発生する可能性がある問題を修正。この振る舞いは、Windows 8 コンピューターで、ファイルが変更され (ストリームもフラッシュされ)、その直後に FileWatcherService を使用してそのファイルを監視した場合に見られます。ウィルススキャンかハードディスクの暗号化が、このコンピューターで、オペレーティングシステムのファイル変更通知を長時間遅延させていたものと思われます。ファイルの最後の変更以降のタイムスタンプをチェックするように修正しました。

  • WinFormsUtil.GetFocusedControl() は、フォーカスされたコントロールがネイティブのみの場合は常に null を返すのではなく、フォーカスされた NET コントロールに最も近い先祖を検索するようになりました。

  • User32: GetParent() を追加。

  • DefaultTabCommands および RecentDocumentCommands の 2 つのコンポーネントにより、不要なファイル I/O を削減。いずれのコンポーネントも、自身の ICommandClient.CanDoCommand() メソッドにファイルが存在するかどうかをチェックしなくなりました。.

  • DefaultTabCommands: よりカスタム化しやすさの向上。たとえば、タブコントロールに表示される不要なコンテキストメニューコマンドを、クライアントコードで削除できるようになりました。また、ドキュメントの Control から判断して、ドキュメントのパスをどのように計算するかも選択できるようになりました。

  • FormNcRenderer: アプリケーションが複数の GUI スレッドを使用した場合に発生する可能性があるクラッシュを修正。

  • TargetCommands および TargetEnumerationService: コマンド名がローカライゼーション可能になった。

  • ビルドスクリプトが Visual Studio 2015 対応。

  • [システム情報] ダイアログ ([ヘルプ] > [バージョン情報] > [システム情報]): dll リストの表示で、ディスク上に存在しない dll が見つかると、リストの残りが表示されない問題を修正。

Clone this wiki locally