Tool System: per space/mode tool support
[blender.git] / source / blender / windowmanager / WM_api.h
index 9176385c40d1e6e2408123f9c123bcfafef71b52..5562e7880faffc0d2a2d4885cbf0ae2237077db9 100644 (file)
@@ -47,6 +47,7 @@ extern "C" {
 #endif
 
 struct bContext;
+struct bToolRef_Runtime;
 struct GHashIterator;
 struct IDProperty;
 struct wmEvent;
@@ -595,13 +596,45 @@ bool        WM_event_is_ime_switch(const struct wmEvent *event);
 #endif
 
 /* wm_toolsystem.c  */
-void WM_toolsystem_unlink(struct bContext *C, struct WorkSpace *workspace);
-void WM_toolsystem_link(struct bContext *C, struct WorkSpace *workspace);
-void WM_toolsystem_refresh(struct bContext *C, struct WorkSpace *workspace);
 
-void WM_toolsystem_set(struct bContext *C, const struct bToolDef *tool);
+/* Values that define a categoey of active tool. */
+typedef struct bToolKey { int space_type; int mode; } bToolKey;
+
+struct bToolRef *WM_toolsystem_ref_from_context(struct bContext *C);
+struct bToolRef *WM_toolsystem_ref_find(struct WorkSpace *workspace, const bToolKey *tkey);
+bool WM_toolsystem_ref_ensure(
+        struct WorkSpace *workspace, const bToolKey *tkey,
+        struct bToolRef **r_tref);
+
+struct bToolRef_Runtime *WM_toolsystem_runtime_from_context(struct bContext *C);
+struct bToolRef_Runtime *WM_toolsystem_runtime_find(struct WorkSpace *workspace, const bToolKey *tkey);
+
+void WM_toolsystem_unlink(struct bContext *C, struct WorkSpace *workspace, const bToolKey *tkey);
+void WM_toolsystem_link(struct bContext *C, struct WorkSpace *workspace, const bToolKey *tkey);
+void WM_toolsystem_refresh(struct bContext *C, struct WorkSpace *workspace, const bToolKey *tkey);
+
+void WM_toolsystem_unlink_all(struct bContext *C, struct WorkSpace *workspace);
+void WM_toolsystem_link_all(struct bContext *C, struct WorkSpace *workspace);
+void WM_toolsystem_refresh_all(struct bContext *C, struct WorkSpace *workspace);
+
+void WM_toolsystem_ref_set_from_runtime(
+        struct bContext *C, struct WorkSpace *workspace, struct bToolRef *tref,
+        const struct bToolRef_Runtime *tool, const char *idname);
+
 void WM_toolsystem_init(struct bContext *C);
 
+int WM_toolsystem_mode_from_spacetype(
+        struct WorkSpace *workspace, struct Scene *scene, struct ScrArea *sa,
+        int space_type);
+bool WM_toolsystem_key_from_context(
+        struct WorkSpace *workspace, struct Scene *scene, struct ScrArea *sa,
+        bToolKey *tkey);
+void WM_toolsystem_update_from_context(
+        struct bContext *C,
+        struct WorkSpace *workspace, struct Scene *scene, struct ScrArea *sa);
+
+void WM_toolsystem_update_from_context_view3d(struct bContext *C);
+
 bool WM_toolsystem_active_tool_is_brush(const struct bContext *C);
 
 void WM_toolsystem_do_msg_notify_tag_refresh(