123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /******************************************************************************
- Copyright (C) 2013-2014 by Hugh Bailey <[email protected]>
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 2 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- ******************************************************************************/
- #pragma once
- #include "util/c99defs.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * @file
- *
- * Modules can specify custom user-interface-specific exports. UI functions
- * can be within the same library as the actual core logic, or separated in to
- * different modules to split up UI logic and core module logic.
- *
- * The reasoning for this is to allow for custom user interface of differing
- * toolkits or for automatically generated user interface, or to simply allow
- * separation of UI code from core code (which may often be in differing
- * languages).
- */
- /** Modal UI definition structure */
- struct obs_modal_ui {
- const char *id; /**< Identifier associated with this UI */
- const char *task; /**< Task of the UI */
- const char *target; /**< UI target (UI toolkit or program name) */
- /**
- * Callback to execute modal interface.
- *
- * The @b object variable points to the input/output/encoder/etc. The
- * @b ui_data variable points to the UI parent or UI-specific data to
- * be used with the custom user interface.
- *
- * What @b ui_data points to differs depending on the target, and you
- * should use discretion and consistency when using this variable to
- * relay information to the UI function. For example, it would be
- * ideal to have @b ui_data point to a parent, QWidget for Qt, or a
- * wxWindow for wxWidgets, etc., though it's up to the discretion of
- * the developer to define that value. Because of the nature of void
- * pointers, discretion and consistency is advised.
- *
- * @param object Pointer/handle to the data associated with this
- * call.
- * @param ui_data UI data to pass associated with this specific
- * target, if any.
- * @return @b true if user completed the task, or
- * @b false if user cancelled the task.
- */
- bool (*exec)(void *object, void *ui_data);
- void *type_data;
- void (*free_type_data)(void *type_data);
- };
- /**
- * Registers a modal UI definition to the current obs context. This should be
- * used in obs_module_load.
- *
- * @param info Pointer to the modal definition structure
- */
- EXPORT void obs_register_modal_ui(const struct obs_modal_ui *info);
- /* ------------------------------------------------------------------------- */
- /** Modeless UI definition structure */
- struct obs_modeless_ui {
- const char *id; /**< Identifier associated with this UI */
- const char *task; /**< Task of the UI */
- const char *target; /**< UI target (UI toolkit or program name) */
- /**
- * Callback to create modeless interface.
- *
- * This function is almost identical to the modal exec function,
- * except modeless UI calls return immediately, and typically are
- * supposed to return a pointer or handle to the specific UI object
- * that was created. For example, a Qt object would ideally return a
- * pointer to a QWidget. Again, discretion and consistency is advised
- * for the return value.
- *
- * @param object Pointer/handle to the data associated with this
- * call.
- * @param ui_data UI data to pass associated with this specific
- * target, if any.
- * @return Pointer/handle to the modeless UI associated with
- * the specific target.
- */
- void *(*create)(void *object, void *ui_data);
- void *type_data;
- void (*free_type_data)(void *type_data);
- };
- /**
- * Registers a modeless UI definition to the current obs context. This should
- * be used in obs_module_load.
- *
- * @param info Pointer to the modal definition structure
- */
- EXPORT void obs_register_modeless_ui(const struct obs_modeless_ui *info);
- /* ------------------------------------------------------------------------- */
- #define OBS_UI_SUCCESS 0
- #define OBS_UI_CANCEL -1
- #define OBS_UI_NOTFOUND -2
- /**
- * Requests modal UI to be displayed. Returns when user is complete.
- *
- * @param name Name of the input/output/etc type that UI was requested for
- * @param task Task of the user interface (usually "config")
- * @param target Desired target (i.e. "qt", "wx", "gtk3", "win32", etc)
- * @param data Pointer to the obs input/output/etc
- * @param ui_data UI-specific data, usually a parent pointer/handle (if any)
- *
- * @return OBS_UI_SUCCESS if the UI was successful,
- * OBS_UI_CANCEL if the UI was cancelled by the user, or
- * OBS_UI_NOTFOUND if the UI callback was not found
- */
- EXPORT int obs_exec_ui(const char *id, const char *task, const char *target,
- void *data, void *ui_data);
- /**
- * Requests modeless UI to be created. Returns immediately.
- *
- * @param name Name of the input/output/etc type that UI was requested for
- * @param task Task of the user interface
- * @param target Desired target (i.e. "qt", "wx", "gtk3", "win32", etc)
- * @param data Pointer to the obs input/output/etc
- * @param ui_data UI-specific data, usually a parent pointer/handle (if any)
- *
- * @return Pointer/handle to the target-specific modeless object, or
- * NULL if not found or failed.
- */
- EXPORT void *obs_create_ui(const char *id, const char *task, const char *target,
- void *data, void *ui_data);
- #ifdef __cplusplus
- }
- #endif
|