Giter Site home page Giter Site logo

sonywws / atf Goto Github PK

View Code? Open in Web Editor NEW
1.9K 199.0 263.0 138.14 MB

Authoring Tools Framework (ATF) is a set of C#/.NET components for making tools on Windows. ATF has been in continuous development in Sony Computer Entertainment's (SCE) Worldwide Studios central tools group since early 2005. ATF has been used by most SCE first party studios to make many custom tools such as Naughty Dog’s level editor and shader editor for The Last of Us, Guerrilla Games’ sequence editor for Killzone games (including the Killzone: Shadow Fall PS4 launch title), an animation blending tool at Santa Monica Studio, a level editor at Bend Studio, a visual state machine editor for Quantic Dream, sound editing tools, and many others.

License: Apache License 2.0

C# 98.33% Python 1.07% XSLT 0.02% HTML 0.14% Batchfile 0.08% C++ 0.36% C 0.01%

atf's Introduction

ATF

Authoring Tools Framework (ATF) is a set of C#/.NET components for making tools on Windows®. ATF has been used by most Sony Computer Entertainment first party game studios to make many custom tools such as Naughty Dog's level editor and shader editor for The Last of Us™, Guerrilla Game's sequence editor for Killzone™ games (including the Killzone: Shadow Fall™ PS4™ launch title), an animation blending tool at Santa Monica Studios, a level editor at Bend Studio, a visual state machine editor for Quantic Dream, sound editing tools, and many others. ATF has been in continuous development in Sony Computer Entertainment's Worldwide Studios central tools group since early 2005.

This figure shows LevelEditor, a powerful tool built with ATF for constructing and editing game levels. LevelEditor is also an open source project, available at LevelEditor. See other tools built with ATF at Gallery and ATF adopters.

LevelEditor

There are many types of components in ATF. ATF Managed Extensibility Framework (MEF) components can be added to a .NET TypeCatalog with a single line of code, which allows you to easily add these capabilities to your application. MEF components can be found in most of our sample applications, as in this Circuit Editor sample source file Program.cs. Other components, like the Document Object Model (DOM), are actually a collection of related classes. Look over a list of useful components in ATF at Important ATF Components.

ATF is an open source project. See License.txt.

Getting Started

ATF is a technology with great depth in some of its areas. To learn whether ATF is for you and to make effective use of it, you'd be well-advised to acquire the background offered in the ATF documentation, especially topics in the ATF Getting Started section. This section tells you what you need to know to use ATF:

  • ATF Requirements and Dependencies
  • ATF Features and Benefits
  • How to install ATF
  • Basic ATF Frameworks
  • ATF Samples and Tutorials
  • Next Steps to learn ATF

More Info

The ATF wiki is at https://github.com/SonyWWS/ATF/wiki.

We have PDF files in the Docs folder or Documentation.

Forums for meeting other ATF users, having discussions, and receiving announcements from us ATF developers.

Bugs, feature requests, and questions:
https://github.com/SonyWWS/ATF/issues.

Contact, in English or Japanese:
[email protected]

atf's People

Contributors

abeckus avatar gstaas avatar hach-que avatar jhshen avatar lioncash avatar ron2 avatar twainj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

atf's Issues

Easier Inheritance

ATF is a great package, and I'm really stoked it's now open for everyone to use.

I've found that a lot of the classes I've been using so far (PropertyGrid, PropertyEditor, PropertyGridView, etc) use restrictive access modifiers. I'd like to suggest "internal" be removed from codebase, and "private" be used minimally in favor of protected. These access modifiers make it difficult to re-use existing code and either force a lot of copy/paste or unnecessary forking.

How to use SharpDX in main project

Hi,
ATF is great. However for my current project I need access to the SharpDX libraries. When I add a reference to SharpDX in an ATF project I receive the error "System.TypeInitializationException". If I'm not mistaken I believe this issue is the result of SharpDX already being used in the ATF framework.

I was wondering if anyone knew how to resolve this issue or other method to get access to the SharpDX libraries within the main project.

Full Error:
An exception of type 'System.TypeInitializationException' occurred in Atf.Gui.WinForms.dll but was not handled in user code
Additional information: The type initializer for 'Sce.Atf.Resources' threw an exception.

Thanks

Disallowing nodes from being resized or dragged

Hello,

I would like to have the ability to have certain graph nodes not allowed to be dragged or resized. I know there is a function called AllowDragging in D2dGraphNodeEditAdapter.cs, but there is only a special case where a node cannot be dragged. I would like a more general solution that allows for a node to check if it should be dragged. In a similar vein, I would also like the ability to disable certain nodes/containers from being resized.

Thanks.

ToolTip issue in PropertyEditor

I've also posted this in the Google Group but we suspect this may be a bug in ATF so I'm posting here as well.

I'm having an issue customizing my variant of the DomPropertyEditor example to use ToolTips instead of "DisplayDescriptions" which appears in the status bar.
Basically, all I've done is create a subclass of PropertyEditor and then in the Configure method, my first call is:

propertyGrid = new PropertyGrid(PropertyGridMode.DisplayToolTips, new PropertyGridView());

If I change "DisplayToolTips" to "DisplayDescriptions" everything is great, and I see descriptions fine.
But in the form above, clicking on a property name crashes the app with the error I've copied below.
Any ideas on why some cleanup would crash it? The stack trace isn't very useful. I'm a bit stumped.
Thanks!
-Len

Crash error follows:

Managed Debugging Assistant 'RaceOnRCWCleanup' has detected a problem in 'C:\tools\TestApp\bin\Debug\TestApp.vshost.exe'.
Additional Information: An attempt has been made to free an RCW that is in use. The RCW is in use on the active thread or another thread. Attempting to free an in-use RCW can cause corruption or data loss.

Level Editor?

In the Samples/LevelEditor folder there is a readme pointing to a project that the general public cannot access.

CultureInfo.CurrentCulture in number converter causes problems in some countries

In some countries, like Germany, the official separator for numbers is comma and not a dot, e.g. we write "3,7" instead of "3.7".
Unfortunately in C# the float or double to string converter takes this into account if you use "CultureInfo.CurrentCulture". The result is, that in Germany you can only enter numbers with comma and the data files are written with comma. By that the data files become not exchangeable between computers with different culture settings.
Furthermore, even though the official number separator in Germany is a comma, we still use the international dot in computer science.
To avoid this problem, C# has the following culture info setting:
"CultureInfo.InvariantCulture"
If you exchange "CultureInfo.CurrentCulture" with "CultureInfo.InvariantCulture" the number separator will always be a dot.
Therefore I suppose that in the entire framework you change this at every function where a number conversion is made.
This way the framework will work in countries like Germany as expected.

ControlHostService Closing ignores CancelEventArgs.Cancel

I've registered on the IMainWindow Closing Event to throw up a prompt if a document is dirty when the app closes. If I do want to throw up the prompt, I want to cancel the close event and call close myself when I'm done with the save.

However it seems ControlHostService mainForm_Closing sets e.Cancel to the result of !Close overwriting the value I set. I think ln718 needs to be e.Cancel = e.Cancel || !Close();

Does that sound right?

A HasAttribute<T> function in DomNodeAdapter.cs

I have a Dom Node that has optional attributes, like:

<xs:attribute name="someAttribute" type="xs:float" use="optional" />

I would like to be able to check if my node has this attribute at some given time. However, the GetAttribute<T> function returns default(T) when the attribute doesn't exist. Personally I'd just return null, but I guess that's a design decision. In any case, I think a HasAttribute<T> function would be a worthwhile addition to the framework.

I just implemented it as follows in my classes inheriting it:

protected bool HasAttribute<T>(AttributeInfo attributeInfo)
{
    object value = DomNode.GetAttribute(attributeInfo);

    // If value is not null, attempt the cast; an invalid type will then cause
    // an IllegalCastException.
    if (value != null && (T) value != null)
        return true;
     else
        return false;
}

Consider adding a strong name to DLLs.

I and my company use ATF for our little product.

Our product will soon be released and we want to add a strong name to - or sign - our executables and libraries to "secure" things.
As you should know, when an assembly is signed, all the assemblies it depends on must also be signed.

So, can you consider adding a strong name to - or signing - the generated DLLs of ATF?

Thanks a lot!

Saving projects with multiple files

I'm having difficulty finding documentation and examples about the best way of using ATF for tools that want to have a single project that gets saved to multiple files on disk.

One typical use-case would be a course-grained approach where a project is broken up into sub-layers or sub-levels. That allows a designer to work on one sub-layer at once.

A more fine-grained approach is a tool that saves its assets to many individual asset files, each one that can be editable or read-only depending on source control access. That style of tool might end up with many hundreds of asset files on disk for their project.

In both of these examples, you wouldn't just want to load up lots of documents in isolation. You instead want to open the master project document and have it load up the sub-files automatically. The sub-files are either explicitly referenced in the master project, or else perhaps they are just parsed from whatever is in a folder on disk.

ATF supports having multiple IDocuments, but I'm not sure how the master project document would work on that case. Does the DOM tree support having sub-nodes that are actually documents, so you can load a single project and it reads/writes out to multiple files automatically? It looks like the serialization in the examples doesn't have anything that would make that work.

Or is it better just ignore the IDocument system for this case, and have a single project IDocument with a custom Save() that walks the tree and does its own file saving/loading whenever it hits one of these "file layer" nodes?

Note there is some code in the examples to do with layers but I can't see anything to do with files, so it looks like they are purely an editor visibility grouping structure.

GlobalHistoryContext with multiple EditingContext on same DomNode

I'm currently running into an issue collapsing all of the HistoryContext for our tool into one GlobalHistoryContext. Our Schema loading looks like this:

Schema.parentNodeType.Type.Define(new ExtensionInfo<GlobalHistoryContext>());

Schema.childNodeType.Type.Define(new ExtensionInfo<EditingContext1>());
Schema.childNodeType.Type.Define(new ExtensionInfo<EditingContext2>());

The problem is that during GlobalHistoryContext.AddNode(DomNode node) the child HistoryContext get put into a HashSet<HistoryContext>. This means that m_childHistoryContexts only contains EditingContext1.

If EditingContext2 happens to be the active context when the user tries to Undo certain operations in our tool, a new Transaction is added to the CommandHistory in HistoryContext.OnEnded() due to m_undoingOrRedoing not being set to true during GlobalHistoryContext.SynchronizeUndoRedoStatus(bool newStatus).

I tried to derive from GlobalHistoryContext to implement our own version that can handle multiple EditingContext on a single DomNode, but that does not work because the set for HistoryContext.UndoingOrRedoing is set to internal access level.

Do we need to change the structure of our schema or is this something that can be supported in ATF?

Get HWND for element

Hi,how i can get HWND per element?

My sample based on MeshViewer:
void IInitializable.Initialize()
{
ControlInfo cinfo = new ControlInfo("3D View", "3d viewer", StandardControlGroup.CenterPermanent);
m_controlHostService.RegisterControl(m_designControl, cinfo, null);
{
this.engine = new EngineCLR.EngineCLR(cinfo.Control.Handle.ToInt32());
engine.EngineInit();
engine.Resize(1920, 1080);
}
}
}

But it's not work

Describe what this actually is in the README.md

Just a recommendation, there is basically no description of what ATF actually IS unless you download the GettingStarted.pdf and skip the first pages where it actually lists some components.

There seems to be a lot of good stuff in it, but all I can see from reading the README.md is that it is "a set of C#/.NET components for making tools on Windows" - listing some of the components would be a great way to encourage people to take a closer look instead of just starring for later).

But thanks for open sourcing it, there seems to be some really cool stuff in here once you figured out what's actually in there :)

A general way of using [ExportMetadata("Order", ...)]

ATF currently provides the option to adjust the order in which classes are initialised, using [ExportMetadata("Order", ...)]. Though I try to use this as little as possible as it makes components less generic, I've come to see that sometimes it's unavoidable.

It would be very useful if there were some API that made this order a bit more generic, and if it were used in the first place in the components. I haven't quite figured out yet how this would look, maybe you guys have some idea on this. Maybe something like and enum ImportOrder and then putting this on the components/services on which order matters.

Also, maybe the default for this value shouldn't be INT_MAX. For example, it is extremely useful to have Composer being initialised as early as possible, but I currently have no way of ensuring it's initialised before my other components. That is, not without touching the ATF framework myself at least.

Hope this makes sense.

Multiple Circuit Editor Instances.

Hello,

Thanks for sharing your great work.

I would like to use multiple instance of the circuit editor and each of these instances will edit a different file extension but using the same schema (I know it’s a bit weird). The circuit editor will be a generic nodal editor.

The first approach was to simply instantiate multiple CircuitEditor but quickly I realized the use of a lot of static in the code (Command, Schema, EditorInfo...). I started to convert or move these static variables. I think I nearly succeed. The last problem where I struggle is the possibility to have one file extension per circuit editor instance. Also, I found other static variable which I don’t know if I need to change it (like Direct2D variable s_gfx.)

The second approach was to duplicate the circuit editor project, but I don’t want to go that way.

Do you have a better solution in mind ? or any advices ?

Redirect PropertyGrid data

Is there a way to redirect the contents of the property grid to a different node? I have a tree editor and a graph editor. Each tree node has an associated graph node. When the user selects the graph node, I would like the property grid to be updated as if the tree node were selected (but not actually select the tree node).

CircuitEditor: Dropping a palette item onto a group does not automatically add it to the group

Hello,

When dragging and dropping a palette item onto a group in the canvas, the palette item does not automatically get added to the group. Instead, it gets dropped onto the main canvas and then becomes hidden from view (because it is behind the group). This then requires moving the group to the side and performing a drag and drop from the canvas onto the group. Can this be changed so the element is added to the "picked' group?

Thanks

<xs:all> nodes ignored by DomGen.exe

Hi there,

Not quite sure how to create a pull request so just creating this as an issue.

The DomGem.exe tool currently doesn't actually do anything xs:all nodes in a schema, it just ignores them. I added a change to XmlSchemaTypeLoader.cs to fix this.

XmlSchemaTypeLoader.cs, line 797, insert:

// Check for <xs:all> node and continue processing it:
XmlSchemaAll allNode = particle as XmlSchemaAll;
if (allNode != null)
{
    foreach (XmlSchemaElement elementInAll in allNode.Items)
        WalkParticle(elementInAll, nodeType);
}
else
{
... the old parsing the XmlSchemaSequence etcetera...
}

That should fix it. :-)

Best,
Jelle

Groups of groups picking issues

Hello,

I am using the CircuitEditor example and I am trying to resize a group within a group. When moving the cursor on the right side I get the resize cursor; however, upon attempting to resize, the group moves instead of resizing. In D2dCircuitRenderer.cs for the function GraphHitRecord, it seems like pickedElement always stays with the parent group instead of the child group. The value in subPick.First actually does contain the sub-group. The following code looks like it fixes the issue:

if (pickedElement != null && subPick.First != null)
{
pickedElement = subPick.First.First().Cast();
}

Is this the correct solution or am I misunderstanding how GraphHitRecord is supposed to work?

Thanks

CircuitEditor: Selecting nodes with no name is a bit off

Hello,

When trying to select a node, I notice the selection is a bit off when moving the mouse from below. I think this issue is caused by the use of LabelHeight in GetBounds. Using the label height is fine in the case of a named node; however, I think nodes with no name should not use this to calculate bounds (or at least have the option to ignore label height when there is no name). What do you guys think?

Thanks.

CircuitEditor: DefineModuleType Enhancement

Hello,

I am creating new types inheriting off moduleType in the XSD and I found a few possible enhancements to DefineModuleType in ModulePlugin.cs that you may want to implement:

  • Support for a null imageName
  • Pass in a DomNodeType as a parameter instead of using Schema.moduleType.Type for more flexibility

I have made these changes locally and they seem to be fine except for a small rendering issue. When having a module with no inputs/outputs and no image name, the module renders correctly except for the fact that it still renders the line. Can we not render the line if this is the case?

group

Thanks

History Listener Suggestion

I love the new History Listener. Its a great addition.

My tool is largely powered by a property grid so just having it say "Edit Property" isn't as useful as saying which one was edited ala Photoshop.

I'd love to see PropertyEditorControlContext have its transaction names be more specific like:

String.Format("{0} {1}", "Edit".Localize(), m_descriptor.DisplayName));

History Listener lacks a open state

When you open a file, an entry isn't added to the history listener to represent the start state.

Usage wise, if I open a file and then makes a bunch of edits, the power to me of the history window is to be able to jump back changes, but I can't jump back to the initial state of the file, just back to the first change.

Is there a way we could get a basic "File Open" state in there like Photoshop that represents no changes?

Issue with Validatior/TransactionContext system

Various validators can throw InvalidTransactionException during the IValidationContext.Ended event. However, at this point the HistoryContext override of OnEnded will already have logged the transaction and set the dirty flag. The exception is then thrown and the HistoryContext is now in an invalid state. This leads to documents being flagged as Dirty when they are in fact clean.

Perhaps validators should not throw during OnEnded - but during OnEnding instead. The transaction has supposedly ended and so it should not be possible to cancel it at that point.

There is a related issue here though in that some validators modify the Dom during OnEnding. This will mean that the order in which validators subscribe to the validation events is critical. Any modifications made to the Dom by a validator during OnEnding will not be validated by validators earlier in the subscription list.

It is possibly a mistake to mix the two different concepts of data validation and data coercion. Perhaps this issue could be worked around by separating the two - all 'Coercers' operate first then in a second pass, all Validators check the data consistency.

CircuitEditor: Creating a palette item that creates a DomNode group with sub-groups

Hello,

I have types that are groups which contain sub-groups, and those groups may also contain sub-groups and so forth. I have a palette item of this type and I am calling IPaletteClient.Convert to create a node, but I am unsure what the best way is to add child sub-groups. I have a certain set of rules for each group type:

TypeA should generate a child sub-group TypeB
TypeB should generate child sub-groups TypeC, TypeD, TypeE
TypeE should generate a child sub-group TypeF

If there is a palette item of TypeA, it should recursively generate all of its descendants. What is the best way to go about this? On a related note, I also want the ability to have right-click support which will add child nodes while selecting a group. For example, right-clicking on TypeE should have the ability to add nodes of TypeF.

Here is some pseudo-code (for my function AddChildren) I have been trying that seems to work in most cases:

List childDataList = new List();
if (parentType == TypeA)
childDataList add all children (but not grand-children)

foreach ( ChildData childData in childDataList )
{
var childNode = new DomNode(childData.ChildType);
if (childData.ChildType.IdAttribute != null)
childNode.SetAttribute(childData.ChildType.IdAttribute, childData.ChildId);

  parentNode.GetChildList(childData.ChildInfo).Add(childNode);

  AddChildren(childNode, childData.ChildType);

}

Currently, the only time there is an issue is when one of the sub-types has an input/output pin and only in very certain circumstances. For example, if TypeF has an output pin and the canvas (circuit) is empty, dragging and dropping a palette item with a grand-child (not child) of TypeF will not correctly propagate the output pin to all parent groups of TypeF. This leads to an assert in Debug builds on validation. If I drag the same base type again (grand-parent or higher of TypeF), the pins are correctly updated. The issue has something to do with the way the Dirty flag is updated; however, before I go into more detail, I want to know if my approach for adding descendants is correct or if you guys have a more elegant solution (which may then solve the pin issue).

Thanks

PropertyGridView right click on category

There appears to be a bug where right clicking a category minimizes it the same as if the left click was used. It seems to be that right and left buttons are handled the same in OnMouseDown. It seems like this function should early out if its the right button and allow the context menu to take effect.

Thoughts?

Panel visiblity status is not reflected in the "Window" menu

Our tool has multiple panes that can have their visibility status toggled by clicking on their menu item in the "Window" menu. The issue is that those menu items always have a check mark next to them, no matter the visibility status. Repro steps:

  1. Add a OutputService to your program
  2. Launch program and notice the "Output" menu item in the "Window" menu is checked and the panel is visible.
  3. Click the "Output" menu item.
  4. Notice that the panel has been hidden.
  5. Click on the "Window" menu again and notice that the "Output" menu item is still checked.

Expected that the "Output" menu item is no longer checked because the panel is not visible.

I believe I have identified that the issue is that the CommandInfo is never updated after the program is initialized. I came up with a solution by modifying CommandService.item_Click :

ICommandClient client = GetClientOrActiveClient(tag);
if (client != null && client.CanDoCommand(tag))
{
client.DoCommand(tag);
UpdateCommand(tag); //Force the command status to be updated
}

My question is if this is the correct fix or if there is a better way to accomplish the desired behavior.

Mac OS X support?

Hi! Is there any way to use ATF for Mac OS X as well? It's written in C# so I guess Mono could handle that in some way...

Filtered PropertyEditors

I've been learning a lot about ATF reading the samples but I'm having trouble understanding the roles of contexts and I think they are important to what I'm trying to do now.
I want to view only a subset of my loaded document data in a PropertyEditor.
Starting simply, if I have a category attribute on a set of properties that are being displayed, how would I show only those data items that match a specific category?
I don't want this to be a user-controlled filter; it should be fixed in code. I would like to effectively break my long list of properties into several individual property editors that display only data a single category.
I'm thinking it requires a custom context (or several) that would pre-filter the data but am not certain that's right. Each property editor would require a unique context?
If you could point me to a sample or documentation that could help me I'd appreciate it.
Thanks!
-Len

Show/Hide properties on the PropertyGrid

Is there a way to show or hide properties on the PropertyGrid based on the values of other properties? For example, in the DomPropertyEditor, if the Emotion property were set to Happy then the Goals property would display; otherwise, that property would not be drawn.

Set size of floating pane from code

Hi,
I have trouble finding a way to resize a floating pane by code.
I create the pane this way:

ControlInfo cinfo = new ControlInfo("Menu view", "Menu viewer", StandardControlGroup.Floating);
m_controlHostService.RegisterControl(m_designControl, cinfo, null);

I can resize the pane with the mouse without problems. But I want to set the size by code. When I set the control's Width or Height or ClientSize, it is just be ignored. Also SetBounds did not work.

I would also like to recognize, when the pane becomes floating, to set the size once the user undocks it from the main windows.

Any ideas how I could do that?

Generating a DomNode with a unique ID and undo/redo

Hello,

I am trying to generate a DomNode by using a context menu on a group, and I am having trouble with generating a unique ID.

First Method:

  • assign node to an object array (needed for instancingContext.CanInsert())
  • do transaction with instancingContext.Insert()

This method creates an extra node with a unique ID and leaves my original node with the default ID. This method also adds my transaction to the History (although I am uncertain how to implement undo/redo at the moment).

Second Method:

CategoryUniqueIdValidator uniqueIdValidator = childNode.GetRoot().Cast(); uniqueIdValidator.NameNode(childNode);

This method does give a unique name and keeps my child node with the correct properties; however, it does not show up in the History (which I guess means it cannot use undo/redo). Also, this method requires me to make NameNode public.

Is there a way to get the unique ID along with the History :)

Thanks.

Copy/Paste DomNodeAdapter Member

Hello,

I have found the function Copy() in the DomNode class which clone only attributes.

In my case I would like to copy a member in a DomNodeAdapter object when a DomNode is copied.

What is the best way to implement this ?

I was thinking of implementing an ICopy or IClone Interface for DomNode Adapter and loop through all the adapter in the DomNode Copy func. But I am not sure if this is the best way for the ATF framework.

Cheers.
Romain.

PropertyEditor expose ControlInfo getter

I'd like to change the title of the Property Control in a PropertyEditor, but I don't have access to the ControlInfo to change it's Name, and it's marked as private readonly as well so I have no workaround

Could I get an accessor for m_controlInfo please?

How can we improve ATF documentation?

@gstaas @vkashkash @ColinCren @silvesthu @RomainBL @JelleVM @pdrasko @vorptronica @fuleshu @mstum @RoyAwesome @lordmortis @StirfireStudios

Because of your interest in ATF, we want your feedback to help us improve ATF documentation.

The fundamental question is: What would help you learn and use ATF?
In reflecting on this, you might want to consider:

  • What would help you get started using ATF?
  • What topics would you like to see covered in the documentation that aren't currently?
  • What parts of the documentation need the most improvement?
  • How can we improve documentation organization?
  • Do you like the formatting of document pages? Any suggestions? More graphics and screen shots? Color usage?
  • Access: Do you like online documents? A wiki? Would you prefer downloaded documentation? In what formats: PDF, ePub, mobi, others?
  • What other items would you find useful: More test code? Tutorials, what topics?
    Reference cards, that is, a few pages containing key information?
    FAQ?
    More videos, what topics?
    Examples, what areas?
    More samples, what areas?

Please send responses to [email protected] by Friday, October 3, 2014. Or just leave your comments on this issue. Thanks!

element minOccurs and maxOccurs are ignored by

Consider the scenario where a third party XML file is read (using XmlSchemaLoader.cs) according to some XSD file that has been generated turned into a DOM structure. The AttributeInfo constructed for the elements will be of type XmlAttributeInfo. Some of these elements may have a minOccurs/maxOccurs set on them. This information is not preserved (i.e. it is for ChildNodes but not for elements).
When writing this XML again (using DomXmlWriter), this then results in problems where element nodes may not be written even though minOccurs was 1.

I think there are two potential fixes: either add these two properties to the XmlAttributeInfo class, or adding an AttributeCountRule and adding this to the info, in much the same way as there is the ChildCountRule. And then in DomXmlWriter.ShouldWriteAttribute check if minOccurs greater than 1.

Thanks!

Syntax Editor license question

Hi there,

I noticed that ATF wrapped up Syntax Editor by ISyntaxEditorControl, and stated in the comment about the license limit.
What exactly is the license limit regarding using the full functionality of Syntax Editor?
I'm currently looking to expose events like TriggerActivated, which is not included in ISyntaxEditorControl, is there a way to do it within the license limit?

Thank you!
Eric

FSM diagram for a non root node

Hi,

I'm looking to adapt the FSM code in your sample project. The requirement would be to show a FSM editing context when a non-root node in the document is selected.

What is the best way to accomplish this provided that the XSD regarding the FSM nodes is identical to your sample project?

question

EmbeddedCollectionEditor

Hi!

I'm working on an app based on your sample FSM editor. I allow multiple triggers to be specified for a single transition, and each of these triggers is itself a struct of several properties.

I'm using the EmbeddedCollectionEditor to edit this list of multiple triggers. With ATF 3.9, the refresh of these UI elements is not working properly. If I select a transition, the property window switches to display that transition. The buttons are updated, as is the [n items] label, but the UI elements for each of the items in the list does not show up. If I collapse the category and expand it again, the elements will be displayed properly. It does show up the very first time I select anything, though.

This all worked properly with ATF 3.8.

Can you suggest a fix? Thanks.

Use other DLL in MEF, throw exception when load the assemblies.

error.description:

Fail to load file or assemblies “WeifenLuo.WinFormsUI.Docking, Version=2.3.2.0, Culture=neutral, PublicKeyToken=null” or one of it's dependencies.The definition of the assemblies we found didn't match with the assemblies reference. Exception came from HRESULT:0x80131040

My experiment :

I use VS2010, got dockpanelsuite 2.9.0.0(why the version in exception is 2.3.2.0) by "nuget".
I also tried generated dockpanel 2.5/2.6/2.7 DLL by meself, but I can't solved this exception!
(It has no dependency according to the explanation in NuGet)

Wanted

Is there anybody who has suffered this or similar exception? Thanks for your experience !

I Have No Idea How To Open The ATF

So long story short I downloaded the ZIP file and there is no application to install or run. I saw that most of the files were dependent on Visual Studio so I installed that but I have no idea what to do going forward. Any help would be appreciated.

Perforce api leaves idle connections open

I mentioned this when some ATF guys came to our studio, but posting for visibility.

The Perforce api in ATF doesn't close connections after it is finished with them, and leaves a large number of idle server connections open. In one case we saw a single user that had 7500 idle processes persisting from an ATF tool and our IT department has been asking if this can get resolved.

Additionally the api should be passing in the ProgramName option when creating the connection so 'p4 monitor show' will show the actual application name instead of dot-net-api-p4.

Full Class Documentation

I've been trying to get familiar with ATF and haven't yet found any complete docs, even like a DOxygen scan online. I've looked through the Getting Started and DOM pdfs. Also spend a bunch of time on the Wiki and looking through Sample code.
But I still can't find any coverage of, say for example, the Sce.Atf.Rendering.OpenGL namespace.
Is there a recommended route to getting to know these classes better?
Thanks.
-Len

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.