add x10tv ati remote rework, android remote rework, wintv remote tweaks
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowtool.h
index 4691fc0781b41a75fac87e57468bfb6194269fdc..6d02bf67970eeb45fa28f3873d1a7f775cff431c 100644 (file)
 #include "maskautos.inc"
 #include "mwindow.inc"
 
+enum {
+       MASK_SHAPE_SQUARE,
+       MASK_SHAPE_CIRCLE,
+       MASK_SHAPE_TRIANGLE,
+       MASK_SHAPE_OVAL,
+};
+enum {
+       MASK_SCALE_X,
+       MASK_SCALE_Y,
+       MASK_SCALE_XY,
+};
 
 // This common thread supports all the tool GUI's.
 class CWindowTool : public Thread
@@ -46,6 +57,7 @@ public:
 // Called when window is visible
        void show_tool();
        void hide_tool();
+       void raise_tool();
 
        void run();
        void update_show_window();
@@ -79,11 +91,13 @@ public:
 // Update text boxes from keyframe here
        virtual void update() {};
 // Update EDL and preview only
-       virtual void update_preview() {};
+       void update_preview(int changed_edl=0);
+       void draw_preview(int changed_edl);
        int current_operation;
-       int close_event();
+       virtual int close_event();
        int keypress_event();
        int translation_event();
+       int press(void (CWindowCanvas::*fn)());
 
        MWindow *mwindow;
        CWindowTool *thread;
@@ -93,8 +107,10 @@ public:
 class CWindowCoord : public BC_TumbleTextBox
 {
 public:
-       CWindowCoord(CWindowToolGUI *gui, int x, int y, float value, int logincrement);
-       CWindowCoord(CWindowToolGUI *gui, int x, int y, int value);
+       CWindowCoord(CWindowToolGUI *gui, int x, int y,
+                       float value, int logincrement);
+       CWindowCoord(CWindowToolGUI *gui, int x, int y,
+                       int value);
 
 // Calls the window's handle_event
        int handle_event();
@@ -102,17 +118,44 @@ public:
        CWindowToolGUI *gui;
 };
 
-class CWindowCropOK : public BC_GenericButton
+class CWindowCropApply : public BC_GenericButton
 {
 public:
-       CWindowCropOK(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       CWindowCropApply(MWindow *mwindow, CWindowCropGUI *crop_gui,
+                       int x, int y);
 // Perform the cropping operation
        int handle_event();
        int keypress_event();
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowCropGUI *crop_gui;
+};
+
+class CWindowCropOpMode : public BC_PopupMenu
+{
+       static const char *crop_ops[CROP_MODES];
+public:
+       CWindowCropOpMode(MWindow *mwindow, CWindowCropGUI *crop_gui,
+                       int mode, int x, int y);
+       ~CWindowCropOpMode();
+       void create_objects();
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowCropGUI *crop_gui;
+       int mode;
+};
+
+class CWindowCropOpItem : public BC_MenuItem
+{
+public:
+       CWindowCropOpItem(CWindowCropOpMode *popup, const char *text, int id);
+       int handle_event();
+
+       CWindowCropOpMode *popup;
+       int id;
 };
 
+
 class CWindowCropGUI : public CWindowToolGUI
 {
 public:
@@ -123,6 +166,16 @@ public:
 // Update the gui
        void handle_event();
        CWindowCoord *x1, *y1, *width, *height;
+       CWindowCropOpMode *crop_mode;
+};
+
+class CWindowMaskItem : public BC_ListBoxItem
+{
+public:
+       CWindowMaskItem(const char *text, int id=-1, int color=-1)
+        : BC_ListBoxItem(text, color), id(id) {}
+       ~CWindowMaskItem() {}
+       int id;
 };
 
 class CWindowMaskItems : public ArrayList<BC_ListBoxItem*>
@@ -132,155 +185,467 @@ public:
        ~CWindowMaskItems() { remove_all_objects(); }
 };
 
+class CWindowMaskOnTrack : public BC_PopupTextBox
+{
+public:
+       CWindowMaskOnTrack(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y, int w, const char *text);
+       ~CWindowMaskOnTrack();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+       CWindowMaskItems track_items;
+
+       int handle_event();
+       void update_items();
+};
+
+class CWindowMaskTrackTumbler : public BC_Tumbler
+{
+public:
+       CWindowMaskTrackTumbler(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskTrackTumbler();
+       int handle_up_event();
+       int handle_down_event();
+       int do_event(int dir);
+
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+
 class CWindowMaskName : public BC_PopupTextBox
 {
 public:
-       CWindowMaskName(MWindow *mwindow, CWindowToolGUI *gui, int x, int y, const char *text);
+       CWindowMaskName(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y, const char *text);
        ~CWindowMaskName();
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
        CWindowMaskItems mask_items;
 
        int handle_event();
        void update_items(MaskAuto *keyframe);
 };
 
+class CWindowMaskUnclear : public BC_Button
+{
+public:
+       CWindowMaskUnclear(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskSoloTrack : public BC_CheckBox
+{
+public:
+       CWindowMaskSoloTrack(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y, int v);
+       static int calculate_w(BC_WindowBase *gui);
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskDelMask : public BC_GenericButton
+{
+public:
+       CWindowMaskDelMask(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskClrMask : public BC_Button
+{
+public:
+       CWindowMaskClrMask(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskClrMask();
+       static int calculate_w(MWindow *mwindow);
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskButton : public BC_CheckBox
+{
+public:
+       CWindowMaskButton(MWindow *mwindow, CWindowMaskGUI *gui,
+                        int x, int y, int no, int v);
+       ~CWindowMaskButton();
+
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+       int no;
+};
+
+class CWindowMaskThumbler : public BC_Tumbler
+{
+public:
+       CWindowMaskThumbler(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskThumbler();
+       int handle_up_event();
+       int handle_down_event();
+       int do_event(int dir);
+
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskEnable : public BC_CheckBox
+{
+public:
+       CWindowMaskEnable(MWindow *mwindow, CWindowMaskGUI *gui,
+                        int x, int y, int no, int v);
+       ~CWindowMaskEnable();
+
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+       int no;
+};
+
 class CWindowMaskFade : public BC_TumbleTextBox
 {
 public:
-       CWindowMaskFade(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       CWindowMaskFade(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
        ~CWindowMaskFade();
        int update(float v);
        int update_value(float v);
        int handle_event();
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
 };
 
 class CWindowMaskFadeSlider : public BC_ISlider
 {
 public:
-       CWindowMaskFadeSlider(MWindow *mwindow, CWindowToolGUI *gui,
+       CWindowMaskFadeSlider(MWindow *mwindow, CWindowMaskGUI *gui,
                int x, int y, int w);
        ~CWindowMaskFadeSlider();
        int handle_event();
        int update(int64_t v);
        char *get_caption() { return 0; }
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
        int stick;
+       float last_v;
        Timer *timer;
 };
 
-class CWindowMaskMode : public BC_Toggle
+class CWindowMaskGangFader : public BC_Toggle
 {
 public:
-       CWindowMaskMode(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
-       ~CWindowMaskMode();
+       CWindowMaskGangFader(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskGangFader();
        int handle_event();
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
 };
 
-class CWindowMaskDelMask : public BC_GenericButton
+class CWindowMaskGangFocus : public BC_Toggle
 {
 public:
-       CWindowMaskDelMask(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       CWindowMaskGangFocus(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskGangFocus();
        int handle_event();
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskGangPoint : public BC_Toggle
+{
+public:
+       CWindowMaskGangPoint(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskGangPoint();
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskSmoothButton : public BC_Button
+{
+public:
+       CWindowMaskSmoothButton(MWindow *mwindow, CWindowMaskGUI *gui,
+               const char *tip, int type, int on, int x, int y, const char *images);
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+       int type, on;
 };
 
 class CWindowMaskAffectedPoint : public BC_TumbleTextBox
 {
 public:
-       CWindowMaskAffectedPoint(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       CWindowMaskAffectedPoint(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
        ~CWindowMaskAffectedPoint();
        int handle_event();
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
 };
 
 class CWindowMaskFocus : public BC_CheckBox
 {
 public:
-       CWindowMaskFocus(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       CWindowMaskFocus(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
        ~CWindowMaskFocus();
        int handle_event();
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
+       static int calculate_w(CWindowMaskGUI *gui);
+};
+
+class CWindowMaskScaleXY : public BC_Toggle
+{
+public:
+       CWindowMaskScaleXY(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y, VFrame **data, int v,
+                       int id, const char *tip);
+       ~CWindowMaskScaleXY();
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+       int id;
+};
+
+class CWindowMaskHelp : public BC_CheckBox
+{
+public:
+       CWindowMaskHelp(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskHelp();
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskDrawMarkers : public BC_CheckBox
+{
+public:
+       CWindowMaskDrawMarkers(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskDrawMarkers();
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskDrawBoundary : public BC_CheckBox
+{
+public:
+       CWindowMaskDrawBoundary(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskDrawBoundary();
+       int handle_event();
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
 };
 
 class CWindowMaskDelPoint : public BC_GenericButton
 {
 public:
-       CWindowMaskDelPoint(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       CWindowMaskDelPoint(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
        int handle_event();
-       int keypress_event();
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
 };
 
 class CWindowMaskFeather : public BC_TumbleTextBox
 {
 public:
-       CWindowMaskFeather(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       CWindowMaskFeather(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
        ~CWindowMaskFeather();
        int update(float v);
        int update_value(float v);
        int handle_event();
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
 };
 
 class CWindowMaskFeatherSlider : public BC_FSlider
 {
 public:
-       CWindowMaskFeatherSlider(MWindow *mwindow, CWindowToolGUI *gui,
+       CWindowMaskFeatherSlider(MWindow *mwindow, CWindowMaskGUI *gui,
                int x, int y, int w, float v);
        ~CWindowMaskFeatherSlider();
        int handle_event();
        int update(float v);
+       int update(int r, float v, float mn, float mx);
        char *get_caption() { return 0; }
        MWindow *mwindow;
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
+       int stick;
+       float last_v;
+       float max;
+       Timer *timer;
 };
 
-class CWindowMaskClrMask : public BC_Button
+class CWindowMaskGangFeather : public BC_Toggle
 {
 public:
-       CWindowMaskClrMask(MWindow *mwindow, CWindowMaskGUI *gui, int x, int y);
-       ~CWindowMaskClrMask();
-       static int calculate_w(MWindow *mwindow);
+       CWindowMaskGangFeather(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y);
+       ~CWindowMaskGangFeather();
        int handle_event();
        MWindow *mwindow;
        CWindowMaskGUI *gui;
 };
 
-class CWindowMaskClrFeather : public BC_Button
+class CWindowMaskBeforePlugins : public BC_CheckBox
+{
+public:
+       CWindowMaskBeforePlugins(CWindowMaskGUI *gui,
+                       int x, int y);
+       int handle_event();
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskLoadList : public BC_ListBox
 {
 public:
-       CWindowMaskClrFeather(MWindow *mwindow, CWindowMaskGUI *gui, int x, int y);
-       ~CWindowMaskClrFeather();
+       CWindowMaskLoadList(MWindow *mwindow, CWindowMaskGUI *gui);
+       ~CWindowMaskLoadList();
+       void create_objects();
        int handle_event();
+
        MWindow *mwindow;
        CWindowMaskGUI *gui;
+       CWindowMaskItems shape_items;
 };
 
-class CWindowMaskBeforePlugins : public BC_CheckBox
+class CWindowMaskLoad : public BC_Button
 {
 public:
-       CWindowMaskBeforePlugins(CWindowToolGUI *gui, int x, int y);
+       CWindowMaskLoad(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y, int w);
        int handle_event();
-       CWindowToolGUI *gui;
+
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskSave : public BC_Button
+{
+public:
+       CWindowMaskSave(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y, int w);
+       ~CWindowMaskSave();
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+       CWindowMaskPresetDialog *preset_dialog;
+};
+
+class CWindowMaskPresetDialog : public BC_DialogThread
+{
+public:
+       CWindowMaskPresetDialog(MWindow *mwindow, CWindowMaskGUI *gui);
+       ~CWindowMaskPresetDialog();
+       void handle_close_event(int result);
+       void handle_done_event(int result);
+       BC_Window* new_gui();
+       void start_dialog(int sx, int sy, MaskAuto *keyframe);
+
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+       CWindowMaskPresetGUI *pgui;
+       int sx, sy;
+       MaskAuto *keyframe;
+};
+
+class CWindowMaskPresetGUI : public BC_Window
+{
+public:
+       CWindowMaskPresetGUI(CWindowMaskPresetDialog *preset_dialog,
+                       int x, int y, const char *title);
+       void create_objects();
+
+       CWindowMaskPresetDialog *preset_dialog;
+       CWindowMaskPresetText *preset_text;
+};
+
+class CWindowMaskPresetText : public BC_PopupTextBox
+{
+public:
+       CWindowMaskPresetText(CWindowMaskPresetGUI *pgui,
+               int x, int y, int w, int h, const char *text);
+       int handle_event();
+       void update_items();
+
+       CWindowMaskPresetGUI *pgui;
+       CWindowMaskItems mask_items;
+};
+
+class CWindowMaskDelete : public BC_Button
+{
+public:
+       CWindowMaskDelete(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y, int w);
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskCenter : public BC_Button
+{
+public:
+       CWindowMaskCenter(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y, int w);
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskNormal : public BC_Button
+{
+public:
+       CWindowMaskNormal(MWindow *mwindow, CWindowMaskGUI *gui,
+                       int x, int y, int w);
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+};
+
+class CWindowMaskShape : public BC_Button
+{
+public:
+       CWindowMaskShape(MWindow *mwindow, CWindowMaskGUI *gui,
+               const char *images, int shape, int x, int y, const char *tip);
+       ~CWindowMaskShape();
+       void builtin_shape(int i, SubMask *sub_mask);
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowMaskGUI *gui;
+       int shape;
+       CWindowMaskItems shape_items;
 };
 
 class CWindowDisableOpenGLMasking : public BC_CheckBox
 {
 public:
-       CWindowDisableOpenGLMasking(CWindowToolGUI *gui, int x, int y);
+       CWindowDisableOpenGLMasking(CWindowMaskGUI *gui,
+                       int x, int y);
        int handle_event();
-       CWindowToolGUI *gui;
+       CWindowMaskGUI *gui;
 };
 
 class CWindowMaskGUI : public CWindowToolGUI
@@ -290,26 +655,68 @@ public:
        ~CWindowMaskGUI();
        void create_objects();
        void update();
-       void set_focused(int v, float cx, float cy);
+       int close_event();
+       void done_event();
        void handle_event();
+       void set_focused(int v, float cx, float cy);
+       void update_buttons(MaskAuto *keyframe, int k);
        void get_keyframe(Track* &track, MaskAutos* &autos, MaskAuto* &keyframe,
                SubMask* &mask, MaskPoint* &point, int create_it);
-       void update_preview();
-
-       CWindowMaskName *name;
-       CWindowMaskClrMask *clr_mask;
-       CWindowMaskDelMask *del_mask;
+       void load_masks(ArrayList<SubMask *> &masks);
+       void save_masks(ArrayList<SubMask *> &masks);
+       int smooth_mask(int typ, int on);
+       int save_mask(const char *nm);
+       int del_mask(const char *nm);
+       int center_mask();
+       int normal_mask();
+
+       CWindowMaskOnTrack *mask_on_track;
+       CWindowMaskTrackTumbler *mask_track_tumbler;
+       CWindowMaskName *mask_name;
+       CWindowMaskButton *mask_buttons[SUBMASKS];
+       CWindowMaskThumbler *mask_thumbler;
+       BC_Title *mask_blabels[SUBMASKS];
+       CWindowMaskEnable *mask_enables[SUBMASKS];
+       CWindowMaskSoloTrack *mask_solo_track;
+       CWindowMaskDelMask *mask_del;
+       CWindowMaskUnclear *mask_unclr;
+       CWindowMaskClrMask *mask_clr;
+       CWindowMaskShape *mask_shape_sqr;
+       CWindowMaskShape *mask_shape_crc;
+       CWindowMaskShape *mask_shape_tri;
+       CWindowMaskShape *mask_shape_ovl;
+       CWindowMaskLoadList *mask_load_list;
+       CWindowMaskLoad *mask_load;
+       CWindowMaskSave *mask_save;
+       CWindowMaskDelete *mask_delete;
+       CWindowMaskPresetDialog *preset_dialog;
+       CWindowMaskCenter *mask_center;
+       CWindowMaskNormal *mask_normal;
        CWindowMaskFade *fade;
        CWindowMaskFadeSlider *fade_slider;
-       CWindowMaskMode *mode;
+       CWindowMaskGangFader *gang_fader;
        CWindowMaskAffectedPoint *active_point;
        CWindowMaskDelPoint *del_point;
+       CWindowMaskGangPoint *gang_point;
+       CWindowMaskSmoothButton *mask_pnt_linear, *mask_pnt_smooth;
+       CWindowMaskSmoothButton *mask_crv_linear, *mask_crv_smooth;
+       CWindowMaskSmoothButton *mask_all_linear, *mask_all_smooth;
        CWindowCoord *x, *y;
+       CWindowMaskScaleXY *mask_scale_x, *mask_scale_y, *mask_scale_xy;
+       int scale_mode;
        CWindowMaskFocus *focus;
        int focused;
+       CWindowMaskGangFocus *gang_focus;
+       CWindowMaskHelp *help;
+       int helped, help_y, help_h;
+       CWindowMaskDrawMarkers *draw_markers;
+       int markers;
+       CWindowMaskDrawBoundary *draw_boundary;
+       int boundary;
        CWindowCoord *focus_x, *focus_y;
        CWindowMaskFeather *feather;
        CWindowMaskFeatherSlider *feather_slider;
+       CWindowMaskGangFeather *gang_feather;
        CWindowMaskBeforePlugins *apply_before_plugins;
        CWindowDisableOpenGLMasking *disable_opengl_masking;
 };
@@ -354,23 +761,21 @@ class CWindowCameraGUI : public CWindowToolGUI
 public:
        CWindowCameraGUI(MWindow *mwindow, CWindowTool *thread);
        ~CWindowCameraGUI();
+       void handle_event();
        void create_objects();
        void update();
-       void update_preview();
 
-// Update the keyframe from text boxes
-       void handle_event();
-//     BezierAuto* get_keyframe();
        CWindowCoord *x, *y, *z;
-private:
-// Toggles for keyframe curve mode (for camera automation only)
+       CWindowCameraAddKeyframe *add_keyframe;
+       CWindowCameraReset *reset;
        CWindowCurveToggle *t_smooth, *t_linear;
 };
 
 class CWindowCameraLeft : public BC_Button
 {
 public:
-       CWindowCameraLeft(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
+       CWindowCameraLeft(MWindow *mwindow, CWindowCameraGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowCameraGUI *gui;
@@ -379,7 +784,8 @@ public:
 class CWindowCameraCenter : public BC_Button
 {
 public:
-       CWindowCameraCenter(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
+       CWindowCameraCenter(MWindow *mwindow, CWindowCameraGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowCameraGUI *gui;
@@ -388,7 +794,8 @@ public:
 class CWindowCameraRight : public BC_Button
 {
 public:
-       CWindowCameraRight(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
+       CWindowCameraRight(MWindow *mwindow, CWindowCameraGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowCameraGUI *gui;
@@ -397,7 +804,8 @@ public:
 class CWindowCameraTop : public BC_Button
 {
 public:
-       CWindowCameraTop(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
+       CWindowCameraTop(MWindow *mwindow, CWindowCameraGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowCameraGUI *gui;
@@ -406,7 +814,8 @@ public:
 class CWindowCameraMiddle : public BC_Button
 {
 public:
-       CWindowCameraMiddle(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
+       CWindowCameraMiddle(MWindow *mwindow, CWindowCameraGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowCameraGUI *gui;
@@ -415,32 +824,54 @@ public:
 class CWindowCameraBottom : public BC_Button
 {
 public:
-       CWindowCameraBottom(MWindow *mwindow, CWindowCameraGUI *gui, int x, int y);
+       CWindowCameraBottom(MWindow *mwindow, CWindowCameraGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowCameraGUI *gui;
 };
 
+class CWindowCameraAddKeyframe : public BC_Button
+{
+public:
+       CWindowCameraAddKeyframe(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowToolGUI *gui;
+};
+
+class CWindowCameraReset : public BC_Button
+{
+public:
+       CWindowCameraReset(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowToolGUI *gui;
+};
+
+
 class CWindowProjectorGUI : public CWindowToolGUI
 {
 public:
        CWindowProjectorGUI(MWindow *mwindow, CWindowTool *thread);
        ~CWindowProjectorGUI();
+       void handle_event();
        void create_objects();
        void update();
-       void update_preview();
-       void handle_event();
-//     BezierAuto* get_keyframe();
+
        CWindowCoord *x, *y, *z;
-private:
-// Toggles for keyframe curve mode (projector automation only)
+       CWindowProjectorAddKeyframe *add_keyframe;
+       CWindowProjectorReset *reset;
        CWindowCurveToggle *t_smooth, *t_linear;
 };
 
 class CWindowProjectorLeft : public BC_Button
 {
 public:
-       CWindowProjectorLeft(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
+       CWindowProjectorLeft(MWindow *mwindow, CWindowProjectorGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowProjectorGUI *gui;
@@ -449,7 +880,8 @@ public:
 class CWindowProjectorCenter : public BC_Button
 {
 public:
-       CWindowProjectorCenter(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
+       CWindowProjectorCenter(MWindow *mwindow, CWindowProjectorGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowProjectorGUI *gui;
@@ -458,7 +890,8 @@ public:
 class CWindowProjectorRight : public BC_Button
 {
 public:
-       CWindowProjectorRight(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
+       CWindowProjectorRight(MWindow *mwindow, CWindowProjectorGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowProjectorGUI *gui;
@@ -467,7 +900,8 @@ public:
 class CWindowProjectorTop : public BC_Button
 {
 public:
-       CWindowProjectorTop(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
+       CWindowProjectorTop(MWindow *mwindow, CWindowProjectorGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowProjectorGUI *gui;
@@ -476,7 +910,8 @@ public:
 class CWindowProjectorMiddle : public BC_Button
 {
 public:
-       CWindowProjectorMiddle(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
+       CWindowProjectorMiddle(MWindow *mwindow, CWindowProjectorGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowProjectorGUI *gui;
@@ -485,12 +920,33 @@ public:
 class CWindowProjectorBottom : public BC_Button
 {
 public:
-       CWindowProjectorBottom(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y);
+       CWindowProjectorBottom(MWindow *mwindow, CWindowProjectorGUI *gui,
+                       int x, int y);
        int handle_event();
        MWindow *mwindow;
        CWindowProjectorGUI *gui;
 };
 
+class CWindowProjectorAddKeyframe : public BC_Button
+{
+public:
+       CWindowProjectorAddKeyframe(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowToolGUI *gui;
+};
+
+class CWindowProjectorReset : public BC_Button
+{
+public:
+       CWindowProjectorReset(MWindow *mwindow, CWindowToolGUI *gui, int x, int y);
+       int handle_event();
+
+       MWindow *mwindow;
+       CWindowToolGUI *gui;
+};
+
 
 
 
@@ -513,5 +969,4 @@ public:
 };
 
 
-
 #endif