1 #ifndef RECORDBATCHES_H
2 #define RECORDBATCHES_H
7 #include "bclistboxitem.inc"
8 #include "channeldb.inc"
11 #include "recordbatches.inc"
12 #include "timeentry.h"
16 class RecordBatchesGUI;
21 static const char* batch_titles[];
22 static const int default_columnwidth[];
23 RecordBatchesGUI *gui;
25 // Don't want to interrupt recording to edit a different batch.
26 int current_item; // Current batch being recorded.
27 int editing_item; // Current batch being edited.
29 int column_widths[BATCH_COLUMNS];
30 ArrayList<BC_ListBoxItem*> data[BATCH_COLUMNS];
31 ArrayList<Batch*> batches;
32 double early_margin, late_margin;
33 char default_directory[BCTEXTLEN];
35 void load_defaults(ChannelDB *channeldb, Record *record=0);
36 void save_defaults(ChannelDB *channeldb);
37 void save_default_channel(ChannelDB *channeldb);
38 Batch *&operator [](int i) { return batches.values[i]; }
39 Batch* get_current_batch() { return batches.values[current_item]; }
40 Batch* get_editing_batch() { return batches.values[editing_item]; }
41 double *get_early_margin() { return &early_margin; }
42 double *get_late_margin() { return &late_margin; }
43 char *get_default_directory() { return default_directory; }
44 int total() { return batches.total; }
45 void append(Batch *batch) { batches.append(batch); }
46 void remove(Batch *batch);
48 RecordBatches(MWindow *mwindow);
52 class RecordBatchesGUI : public BC_ListBox
55 RecordBatches &batches;
59 virtual int selection_changed() = 0;
60 int update(int highlighted_item, int recalc_positions);
61 int update() { return update(get_highlighted_item(), 0); }
62 int column_resize_event();
63 int drag_start_event();
64 int drag_motion_event();
65 int drag_stop_event();
66 void set_row_color(int i, int color);
67 void calculate_batches(int selection_number);
68 void update_batch_news(int item);
69 void update_batches(int selection_item);
70 void update_batches() { return update_batches(get_selection_number(0, 0)); }
71 int editing_batch() { return batches.editing_item; }
72 int set_editing_batch(int i) { return batches.editing_item=i; }
73 int current_batch() { return batches.current_item; }
74 int set_current_batch(int i) { return batches.current_item=i; }
75 int count() { return batches.data[0].total; }
76 Batch* get_current_batch() { return batches.get_current_batch(); }
77 Batch* get_editing_batch() { return batches.get_editing_batch(); }
78 RecordBatchesGUI(RecordBatches &batches, int x, int y, int w, int h);
80 class Dir : public BC_TextBox {
82 RecordBatches &batches;
83 char (&directory)[BCTEXTLEN];
84 ArrayList<BC_ListBoxItem*> *dir_entries;
85 char entries_dir[BCTEXTLEN];
88 void load_dirs(const char *path);
89 char *get_directory() { return directory; }
91 Dir(RecordBatches &batches, const char *dir, int x, int y);
95 class Path : public BC_TextBox {
97 RecordBatches &batches;
101 Path(RecordBatches &batches, int x, int y);
105 class StartTime : public TimeEntry {
107 RecordBatches &batches;
109 StartTime(BC_Window *win, RecordBatches &batches,
110 int x, int y, int w=DEFAULT_TIMEW);
113 class Duration : public TimeEntry
116 RecordBatches &batches;
118 Duration(BC_Window *win, RecordBatches &batches,
119 int x, int y, int w=DEFAULT_TIMEW);
122 class Margin : public TimeEntry
124 RecordBatches &batches;
126 Margin(BC_Window *win, RecordBatches &batches, int x, int y);
132 ArrayList<BC_ListBoxItem*> sources;
135 class Source : protected Sources, public BC_PopupTextBox {
137 RecordBatches &batches;
139 Source(BC_Window *win, RecordBatches &batches, int x, int y);
142 class News : public BC_TextBox {
144 RecordBatches &batches;
146 News(RecordBatches &batches, int x, int y);
149 class NewBatch : public BC_GenericButton {
151 RecordBatches &batches;
153 NewBatch(RecordBatches &batches, int x, int y);
156 class DeleteBatch : public BC_GenericButton {
158 RecordBatches &batches;
160 DeleteBatch(RecordBatches &batches, int x, int y);
163 class StartBatches : public BC_GenericButton {
165 RecordBatches &batches;
167 StartBatches(RecordBatches &batches, int x, int y);
170 class StopBatches : public BC_GenericButton {
172 RecordBatches &batches;
174 StopBatches(RecordBatches &batches, int x, int y);
177 class ActivateBatch : public BC_GenericButton {
179 RecordBatches &batches;
181 ActivateBatch(RecordBatches &batches, int x, int y);
184 class ClearBatch : public BC_GenericButton {
186 RecordBatches &batches;
188 ClearBatch(RecordBatches &batches, int x, int y);