--- /dev/null
+#ifndef RECORDBATCHES_H
+#define RECORDBATCHES_H
+
+#include "arraylist.h"
+#include "batch.h"
+#include "bclistbox.h"
+#include "bclistboxitem.inc"
+#include "channeldb.inc"
+#include "guicast.h"
+#include "record.inc"
+#include "recordbatches.inc"
+#include "timeentry.h"
+
+#include <string.h>
+
+class RecordBatchesGUI;
+
+class RecordBatches
+{
+public:
+ static const char* batch_titles[];
+ static const int default_columnwidth[];
+ RecordBatchesGUI *gui;
+ MWindow *mwindow;
+// Don't want to interrupt recording to edit a different batch.
+ int current_item; // Current batch being recorded.
+ int editing_item; // Current batch being edited.
+ int batch_active;
+ int column_widths[BATCH_COLUMNS];
+ ArrayList<BC_ListBoxItem*> data[BATCH_COLUMNS];
+ ArrayList<Batch*> batches;
+ double early_margin, late_margin;
+ char default_directory[BCTEXTLEN];
+
+ void load_defaults(ChannelDB *channeldb, Record *record=0);
+ void save_defaults(ChannelDB *channeldb);
+ void save_default_channel(ChannelDB *channeldb);
+ Batch *&operator [](int i) { return batches.values[i]; }
+ Batch* get_current_batch() { return batches.values[current_item]; }
+ Batch* get_editing_batch() { return batches.values[editing_item]; }
+ double *get_early_margin() { return &early_margin; }
+ double *get_late_margin() { return &late_margin; }
+ char *get_default_directory() { return default_directory; }
+ int total() { return batches.total; }
+ void append(Batch *batch) { batches.append(batch); }
+ void remove(Batch *batch);
+ void clear();
+ RecordBatches(MWindow *mwindow);
+ ~RecordBatches();
+};
+
+class RecordBatchesGUI : public BC_ListBox
+{
+public:
+ RecordBatches &batches;
+ int dragging_item;
+
+ int handle_event();
+ virtual int selection_changed() = 0;
+ int update(int highlighted_item, int recalc_positions);
+ int update() { return update(get_highlighted_item(), 0); }
+ int column_resize_event();
+ int drag_start_event();
+ int drag_motion_event();
+ int drag_stop_event();
+ void set_row_color(int i, int color);
+ void calculate_batches(int selection_number);
+ void update_batch_news(int item);
+ void update_batches(int selection_item);
+ void update_batches() { return update_batches(get_selection_number(0, 0)); }
+ int editing_batch() { return batches.editing_item; }
+ int set_editing_batch(int i) { return batches.editing_item=i; }
+ int current_batch() { return batches.current_item; }
+ int set_current_batch(int i) { return batches.current_item=i; }
+ int count() { return batches.data[0].total; }
+ Batch* get_current_batch() { return batches.get_current_batch(); }
+ Batch* get_editing_batch() { return batches.get_editing_batch(); }
+ RecordBatchesGUI(RecordBatches &batches, int x, int y, int w, int h);
+
+ class Dir : public BC_TextBox {
+ public:
+ RecordBatches &batches;
+ char (&directory)[BCTEXTLEN];
+ ArrayList<BC_ListBoxItem*> *dir_entries;
+ char entries_dir[BCTEXTLEN];
+
+ int handle_event();
+ void load_dirs(const char *path);
+ char *get_directory() { return directory; }
+
+ Dir(RecordBatches &batches, const char *dir, int x, int y);
+ ~Dir();
+ };
+
+ class Path : public BC_TextBox {
+ public:
+ RecordBatches &batches;
+ ArrayList<BC_ListBoxItem*> *file_entries;
+
+ int handle_event();
+
+ Path(RecordBatches &batches, int x, int y);
+ ~Path();
+ };
+
+ class StartTime : public TimeEntry {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ StartTime(BC_Window *win, RecordBatches &batches,
+ int x, int y, int w=DEFAULT_TIMEW);
+ };
+
+ class Duration : public TimeEntry
+ {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ Duration(BC_Window *win, RecordBatches &batches,
+ int x, int y, int w=DEFAULT_TIMEW);
+ };
+
+ class Margin : public TimeEntry
+ {
+ RecordBatches &batches;
+ int handle_event();
+ Margin(BC_Window *win, RecordBatches &batches, int x, int y);
+ };
+
+ class Sources
+ {
+ public:
+ ArrayList<BC_ListBoxItem*> sources;
+ };
+
+ class Source : protected Sources, public BC_PopupTextBox {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ Source(BC_Window *win, RecordBatches &batches, int x, int y);
+ };
+
+ class News : public BC_TextBox {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ News(RecordBatches &batches, int x, int y);
+ };
+
+ class NewBatch : public BC_GenericButton {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ NewBatch(RecordBatches &batches, int x, int y);
+ };
+
+ class DeleteBatch : public BC_GenericButton {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ DeleteBatch(RecordBatches &batches, int x, int y);
+ };
+
+ class StartBatches : public BC_GenericButton {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ StartBatches(RecordBatches &batches, int x, int y);
+ };
+
+ class StopBatches : public BC_GenericButton {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ StopBatches(RecordBatches &batches, int x, int y);
+ };
+
+ class ActivateBatch : public BC_GenericButton {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ ActivateBatch(RecordBatches &batches, int x, int y);
+ };
+
+ class ClearBatch : public BC_GenericButton {
+ public:
+ RecordBatches &batches;
+ int handle_event();
+ ClearBatch(RecordBatches &batches, int x, int y);
+ };
+};
+
+#endif