-
Notifications
You must be signed in to change notification settings - Fork 14
Atom Tools Framework
https://github.com/o3de/o3de/tree/development/Gems/Atom/Tools/AtomToolsFramework
Atom Tools Framework provides many utilities, classes, and systems that simplify building tools with consistent features and workflows. The initial code was extracted from the Material Editor, refactored, and standardized to be shared between tools. This accelerates building new tools and promotes sharing established patterns, UI, UX, and workflows. Application specific UI, menu, and toolbar customizations and extensions can be added on top of the default configuration.
All of the current atom tools are built on this framework. Each tool only overrides and implements a minimal amount of application specific code. All tools benefit from fixes, features, and other improvements made to the framework. It is critical to understand how other tools might be impacted when making changes to the framework. Perform automated and manual testing of other tools where possible. If a change or feature is not universally applicable, generic, or useful to future tools, it’s probably best to keep it in your tool’s project.
- Provides a base application class derived from AzFramework::Application
- Initializes common Qt application settings
- Initializes a Qt style manager with UI 2.0
- Initializes logging to an application specific log file
- Initializes editor python bindings and Qt for python for scripting and automation
- Initializes asset processor and a connection to it
- Provides an easy mechanism for specifying critical assets that must be compiled before the application can continue
- Automatically creates and opens the main window if one is registered
- Processes common command line options for opening the main window, running scripts, exiting, and timing out
- Initializes and maintains a local socket connection used to enforce a single application instance, forwarding commands from new instances that attempt to launch
- Provides a class that wraps the standard asset browser
- Automatically handles selecting and opening multiple documents
- Provides a simple configuration for setting up default asset type filters
- Provides a mechanism for setting a custom function for opening assets
- Provides a default filter that shows source assets
- Originally written specifically for lighting and model preset selection, this was rewritten as a general purpose, tile-based asset selection dialog.
- Constructed by providing a list of specific selectable assets and display names
- Uses the thumbnail preview widget to display a grid of selectable tiles
- Displays a label or banner with the display name on top of each tile
- Emits a signal whenever the selection is changed
- Reverts to the original selection if the dialog is cancelled
- Provides wrappers around and simple configuration of Qt local socket and server
- Currently used to enforce a single instance of a running application and forward command line parameters
- Provides buses, base classes, and systems for developing multi document applications
- Document represents a single file or data set that can be opened, saved, edited, and inspected
- Document system allows registration of factory functions for creating documents upon request
- Document system supports registering multiple types
- Document application class extends the base atom tools application with support for opening documents from the command line
- Document main window class extends the base atom tools main window with default menus for creating, opening, and interacting with multiple documents whose views are organized using tabs.
- Document main window provides functions that can be overridden for creating an application specific views of its documents data.
https://github.com/o3de/sig-graphics-audio/wiki/Atom-Tools-Framework-Document-System
- Currently contains one class that records log messages, warnings, errors, asserts reported within its call stack. This is used in the document system to report issues that occur while opening and saving documents.
- Originally intended to adapt material property values so they could be edited in an RPE
- Wraps around an AZStd::any value that can be dynamically configured at runtime and edited in a reflected property editor
- Uses custom edit context attribute handlers and dynamic edit data to manage live updating property values and attributes
- Supports the most common value types and attributes
- Automatically determines control type based on value type and attributes
- Implementation of a flexible, composable inspector widget
- Supports adding one or more stacked, collapsible groups of widgets separated by a header
- Supports interleaving images and other arbitrary widgets in between and as part of groups
- Provides a group widget that wraps the reflected property editor with parameters for common settings
- Currently used in the Material Editor inspector, Material Editor viewport settings window, Material Editor general settings window, material component instance editor
- Implements a system component that continuously gathers timing metrics from the rendering engine
- Currently records CPU time, GPU time, and an average frame rate
- The system can be started, stopped, and handle other requests via event bus
- Implements a system and pipeline for requesting screen captures of rendered content
- Capture requests can be submitted to the system from anywhere with access to its interface
- Capture requests contain the content layout (scene), desired resolution of captured image, and callbacks that specify what to do with the captured image
- Capture requests are queued and processed in order, one at a time
- Notifications are sent specifying whether the capture succeeded or failed
- Currently used to capture asset browser thumbnails and previews of atom models, materials, and lighting presets as well as generating snapshots of materials with property overrides applied for the material component and instance inspector
- Provides a base main window class and buses that can integrate with the atom tools application
- Supports docking sub windows and fancy docking
- Supports saving window and docking states
- Automatically adds docked windows for an asset browser and Python scripts terminal
- Implements custom status bar and functions for color coded messages
- Creative basic application menu