#ifdef tb_generate_documentation
#error This file should not be included in any project. It is for generating TurtleBrains documentation using Doxygen.
//-------------------------------------------------------------------------------------------------------------------//
///
/// @page pageApplicationDevelopment Developing Applications
/// More info can be found about this on the following pages:
/// - @subpage pageApplicationOverview
///
//-------------------------------------------------------------------------------------------------------------------//
///
/// @page pageApplicationOverview HowTo: Start a Real-time Application
/// @brief Provides a high level look at creating a Real-time Application using %TurtleBrains.
///
/// @details Creating an application with %TurtleBrains is as easy as counting to three.
/// -# Derive a custom class from @ref TurtleBrains::Application::ApplicationHandlerInterface "ApplicationHandlerInterface" and create an instance.
/// -# Create an instance of the @ref TurtleBrains::Application::RealtimeApplication "RealtimeApplication" and get the window Open and running.
/// -# Customize the application by adding a window menu, context menu, status bar, and, if desired, dialog prompts.
///
/// @section sectionApplicationStepOne Create your application handler.
/// The most important part of creating an application is handling events, either from the operating system or from
/// user interactions with your application. The ApplicationHandlerInterface provides a way for you to handle any
/// of these events and actions. The following code demonstrates creating a custom subclass of
/// @ref TurtleBrains::Application::ApplicationHandlerInterface "ApplicationHandlerInterface" for your applications.
///
/// my_application_handler.h
/// @snippet tb_application_example.cpp exampleApplicationHandlerHeader
/// my_application_handler.cpp
/// @snippet tb_application_example.cpp exampleApplicationHandlerSource
///
/// That is all it takes to handle different events for the application. Of course this is only an example handler and
/// there are many other events and actions that can be handled. To see a full list of the possibilities look at the
/// TurtleBrains::Application::ApplicationHandlerInterface documentation.
///
/// @section sectionApplicationStepTwo Create and open the application.
/// With the application handler created and ready for use, it is time to create the application and get it running.
/// The application takes a handler as a parameter, and expects the handler to remain in scope at least as long as
/// the application itself.
///
/// main.cpp
/// @snippet tb_application_example.cpp exampleApplicationMainSource
///
/// That was short and simple, and should result in a real-time window with a blank, black screen.
///
/// @section sectionApplicationStepThree Customize your application.
/// Since it is likely your application will need more than a blank, black screen here are links to guides on adding a
/// status bar, menus and dialog prompts. /// The following steps are the same basic steps taken to add a Status Bar,
/// Menu, or Dialog Prompt to your application.
/// -# Create the necessary identifiers. (ex. MenuIdentifier / MenuItemIdentifier)
/// -# Create and customized the object as desired, setting up everything as needed. (ex. ApplicationMenu /
/// AddMenuItem)
/// -# Handle events in the ApplicationHandler when the user interacts with the object. (ex. OnMenuAction).
///
/// For more information about adding these customizations to your application see the following:
/// - @subpage pageApplicationMenuOverview "Adding Menus"
/// - @subpage pageApplicationDialogOverview "Adding Dialogs"
/// - @subpage pageApplicationStatusOverview "Adding a Status Bar"
///
//-------------------------------------------------------------------------------------------------------------------//
///
/// @page pageApplicationMenuOverview HowTo: Add a Window Menu
/// @brief Add a custom Window Menu to your Real-time Application in %TurtleBrains.
///
/// @details The following guide is a continuation of @ref pageApplicationOverview which provides a great way to start
/// an application if you haven't already.
///
/// The following steps are the same basic steps taken to add a Status Bar, Menu, or Dialog Prompt to your application.
/// -# Create the necessary identifiers for the menu and menu items. (ex. MenuIdentifier / MenuItemIdentifier)
/// -# Create and customized the menu as desired, setting up everything as needed. (ex. ApplicationMenu /
/// AddMenuItem)
/// -# Handle events in the ApplicationHandler when the user interacts with the menu. (ex. OnMenuAction).
///
/// This is fairly straight forward, so the following code snippets will speak for themselves. Adding a window menu is
/// a reasonably high priority for most applications so we start there.
///
/// @b MyApplicationValues.h
/// @snippet tb_application_example.cpp exampleApplicationMenuValuesHeader
/// @b MyApplicationHandler.cpp (modify to add window menu)
/// @snippet tb_application_example.cpp exampleApplicationMenuCreateSource
/// @b MyApplicationHandler.cpp (modify to add window menu)
/// @snippet tb_application_example.cpp exampleApplicationMenuHandlerSource
///
//-------------------------------------------------------------------------------------------------------------------//
///
/// @page pageApplicationDialogOverview HowTo: Add a Dialog Prompt
/// @brief Add an custom Dialog Prompt to your Real-time Application in %TurtleBrains.
///
/// @details The following guide is a continuation of @ref pageApplicationOverview which provides a great way to start
/// an application if you haven't already.
///
/// The following steps are the same basic steps taken to add a Status Bar, Menu, or Dialog Prompt to your application.
/// -# Create the necessary identifiers for the dialog and dialog controls. (ex. DialogIdentifier / DialogControlIdentifier)
/// -# Create and customized the dialog prompt as desired, setting up everything as needed. (ex. ApplicationDialog /
/// AddDialogControl)
/// -# Handle events in the ApplicationHandler when the user interacts with the dialog prompt. (ex. OnDialogAction).
///
/// Creating a dialog prompt, is not so different from creating a Menu, first create the
/// identifiers, then customize the dialog and finally handle the events from user interaction.
///
/// @b MyApplicationValues.h (modify to add dialog values)
/// @snippet tb_application_example.cpp exampleApplicationDialogValuesHeader
/// @b MyApplicationHandler.cpp (modify to add dialog prompt)
/// @snippet tb_application_example.cpp exampleApplicationDialogCreateSource
/// @b MyApplicationHandler.cpp (modify to add dialog prompt)
/// @snippet tb_application_example.cpp exampleApplicationDialogHandlerSource
///
//-------------------------------------------------------------------------------------------------------------------//
///
/// @page pageApplicationStatusOverview HowTo: Add a Status Bar
/// @brief Add an custom Status Bar to your Realt-ime Application in %TurtleBrains.
///
/// @details The following guide is a continuation of @ref pageApplicationOverview which provides a great way to start
/// an application if you haven't already.
///
/// The following steps are the same basic steps taken to add a Status Bar, Menu, or Dialog Prompt to your application.
/// -# Create the necessary identifiers for the status bar and status items. (ex. StatusIdentifier / StatusItemIdentifier)
/// -# Create and customized the status bar as desired, setting up everything as needed. (ex. ApplicationStatus /
/// AddStatusItem)
/// -# Handle events in the ApplicationHandler when the user interacts with the object.
///
/// Creating a status bar, is not so different from creating a Menu or Dialog, first create the identifiers, then
/// customize the status bar. With a status bar there is no user interaction to handle, so it is even easier!
///
/// @b MyApplicationValues.h (modify to add status bar values)
/// @snippet tb_application_example.cpp exampleApplicationStatusValuesHeader
/// @b MyApplicationHandler.cpp (modify to add status bar)
/// @snippet tb_application_example.cpp exampleApplicationStatusCreateSource
/// @b MyApplicationHandler.cpp (modify to add status bar)
/// @snippet tb_application_example.cpp exampleApplicationStatusHandlerSource
///
/// @note The status bar currently only works on Windows, no Mac support at this time. Also there is no way to remove
/// a status bar once added to the application, although the status items can be changed easily as shown above.
///
//-------------------------------------------------------------------------------------------------------------------//
#endif /* tb_generate_documentation */