add timecode units/alignment/probe, add prefs auto_rotate,
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mainmenu.h
index a883383688fce4ea5fc769f742d9749b57d6daf8..f0c493b22a735af15ea23dc1f8fcef70c14ae636 100644 (file)
 #include "threadloader.inc"
 #include "viewmenu.inc"
 
-#define TOTAL_LOADS 10      // number of files to cache
+#define TOTAL_LOADS 20       // number of files to cache
 #define TOTAL_EFFECTS 10     // number of effects to cache
 
 #define LAYOUT_LOAD 0
 #define LAYOUT_SAVE 1
 
+class LoadRecentItem
+{
+public:
+       LoadRecentItem(const char *path);
+       ~LoadRecentItem();
+       char *path;
+};
+
+class LoadRecentItems : public ArrayList<LoadRecentItem *>
+{
+public:
+       LoadRecentItems();
+       ~LoadRecentItems();
+       int add_load(char *path);
+};
+
+class LoadRecentSubMenu : public BC_SubMenu
+{
+public:
+       LoadRecentSubMenu(LoadRecent *load_recent);
+       ~LoadRecentSubMenu();
+
+       LoadRecent *load_recent;
+};
+
+class LoadRecent : public BC_MenuItem
+{
+public:
+       LoadRecent(MWindow *mwindow, MainMenu *main_menu);
+       ~LoadRecent();
+       void create_objects();
+       LoadPrevious *get_next_item();
+       int activate_submenu();
+       void scan_items(int use_xml);
+
+       MWindow *mwindow;
+       MainMenu *main_menu;
+       LoadRecentSubMenu *submenu;
+       int total_items;
+};
+
+
 class MainMenu : public BC_MenuBar
 {
 public:
@@ -81,8 +123,8 @@ public:
        MenuVEffects *veffects;
 
        Load *load_file;
-       LoadPrevious *load[TOTAL_LOADS];
-       int total_loads;
+       LoadRecentItems load;
+       LoadRecent *load_recent;
 
        RecordMenuItem *record_menu_item;
        RenderItem *render;
@@ -94,9 +136,9 @@ public:
        EditClearMenu *clear_menu;
        Undo *undo;
        Redo *redo;
-       int total_aeffects;
-       int total_veffects;
-       BC_Menu *filemenu, *audiomenu, *videomenu;      // needed by most recents
+       BC_Menu *filemenu;
+       BC_Menu *audiomenu, *videomenu;      // needed by most recents
+       int total_aeffects, total_veffects;
 
        KeyframeCurveType *keyframe_curve_type;
        LabelsFollowEdits *labels_follow_edits;
@@ -130,6 +172,7 @@ public:
        SplitX *split_x;
        SplitY *split_y;
        MixerItems *mixer_items;
+       AlignTimecodes *align_timecodes;
        LoadLayout *load_layout;
        LoadLayout *save_layout;
 };
@@ -459,29 +502,47 @@ class MixerItems : public BC_MenuItem
 public:
        MixerItems(MWindow *mwindow);
        void create_objects();
+       int activate_submenu();
+
        MWindow *mwindow;
 };
 
-class MixerViewer : public BC_MenuItem
+class MixerItem : public BC_MenuItem
 {
 public:
-       MixerViewer(MWindow *mwindow);
+       MixerItem(MixerItems *mixer_items, const char *text, int idx);
+       MixerItem(MixerItems *mixer_items, const char *text, const char *hotkey_text, int hotkey);
+       virtual int handle_event();
+
+       MixerItems *mixer_items;
+       int idx;
+};
+
+class MixerViewer : public MixerItem
+{
+public:
+       MixerViewer(MixerItems *mixer_items);
        int handle_event();
-       MWindow *mwindow;
 };
 
-class TileMixers : public BC_MenuItem
+class TileMixers : public MixerItem
 {
 public:
-       TileMixers(MWindow *mwindow);
+       TileMixers(MixerItems *mixer_items);
+       int handle_event();
+};
+
+class AlignMixers : public MixerItem
+{
+public:
+       AlignMixers(MixerItems *mixer_items);
        int handle_event();
-       MWindow *mwindow;
 };
 
-class AlignMixers : public BC_MenuItem
+class AlignTimecodes : public BC_MenuItem
 {
 public:
-       AlignMixers(MWindow *mwindow);
+       AlignTimecodes(MWindow *mwindow);
        int handle_event();
        MWindow *mwindow;
 };
@@ -603,6 +664,22 @@ public:
        MWindow *mwindow;
 };
 
+class SwapTracksUp : public BC_MenuItem
+{
+public:
+       SwapTracksUp(MWindow *mwindow);
+       int handle_event();
+       MWindow *mwindow;
+};
+
+class SwapTracksDown : public BC_MenuItem
+{
+public:
+       SwapTracksDown(MWindow *mwindow);
+       int handle_event();
+       MWindow *mwindow;
+};
+
 class DeleteTracks : public BC_MenuItem
 {
 public: