1 #include "bcwindowbase.h"
2 #include "bcdisplayinfo.h"
7 #include "probeprefs.h"
8 #include "preferences.h"
9 #include "preferencesthread.h"
14 ProbePref::ProbePref(const char *nm, int armed)
16 strncpy(name, nm, sizeof(name));
20 ProbePref::~ProbePref()
24 FileProbeDialog::FileProbeDialog(PreferencesWindow *pwindow)
27 this->pwindow = pwindow;
30 FileProbeDialog::~FileProbeDialog()
35 BC_Window* FileProbeDialog::new_gui()
37 BC_DisplayInfo display_info;
38 int x = display_info.get_abs_cursor_x();
39 int y = display_info.get_abs_cursor_y();
41 pb_window = new ProbeEditWindow(this, x, y);
42 pb_window->create_objects();
46 void FileProbeDialog::handle_close_event(int result)
52 ProbeEditWindow::ProbeEditWindow(FileProbeDialog *pb_dialog, int x, int y)
53 : BC_Window(_(PROGRAM_NAME ": Probes"), x, y, xS(300), yS(200), xS(300), yS(200), 0, 0, 1)
55 this->pb_dialog = pb_dialog;
58 probe_down_button = 0;
62 // *** CONTEXT_HELP ***
63 context_help_set_keyword("Probe Order when Loading Media");
66 ProbeEditWindow::~ProbeEditWindow()
72 void ProbeEditWindow::create_objects()
74 int xs10 = xS(10), ys10 = yS(10);
75 lock_window("ProbeEditWindow::create_objects");
76 pb_enabled = new BC_Pixmap(this,
77 BC_WindowBase::get_resources()->listbox_up,
79 pb_disabled = new BC_Pixmap(this,
80 BC_WindowBase::get_resources()->listbox_dn,
82 Preferences *preferences = pb_dialog->pwindow->thread->preferences;
83 for( int i=0; i<preferences->file_probes.size(); ++i ) {
84 probe_items.append(new ProbePrefItem(this, preferences->file_probes[i]));
86 int x = xs10, y = ys10;
87 add_subwindow(probe_list = new ProbePrefList(this, x, y));
88 y += probe_list->get_h();
90 add_subwindow(probe_up_button = new ProbeUpButton(this, x1, y1));
91 x1 += probe_up_button->get_w() + xs10;
92 add_subwindow(probe_down_button = new ProbeDownButton(this, x1, y1));
93 x1 += probe_down_button->get_w() + xs10;
94 add_subwindow(probe_enabled = new ProbeEnabled(this, x1, y1));
95 probe_enabled->disable();
97 add_subwindow(new ProbeEditOK(this));
98 add_subwindow(new BC_CancelButton(this));
105 ProbeEditOK::ProbeEditOK(ProbeEditWindow *pb_window)
106 : BC_OKButton(pb_window)
108 this->pb_window = pb_window;
111 ProbeEditOK::~ProbeEditOK()
115 int ProbeEditOK::handle_event()
117 Preferences *preferences = pb_window->pb_dialog->pwindow->thread->preferences;
118 ArrayList<ProbePref *> &file_probes = preferences->file_probes;
119 file_probes.remove_all_objects();
120 ArrayList<ProbePrefItem *> &probe_items = pb_window->probe_items;
121 for( int i=0; i<probe_items.size(); ++i ) {
122 ProbePrefItem *item = probe_items[i];
123 file_probes.append(new ProbePref(item->get_text(), item->armed));
125 return BC_OKButton::handle_event();
128 int ProbeEditWindow::list_update()
130 //for( int i=0; i<probe_items.size(); ++i ) printf("%s, ",probe_items[i]->get_text()); printf("\n");
131 probe_list->update((ArrayList<BC_ListBoxItem*> *)&probe_items, 0, 0, 1,
132 probe_list->get_xposition(), probe_list->get_yposition(),
133 probe_list->get_highlighted_item(), 1, 0);
134 probe_list->center_selection();
138 ProbeUpButton::ProbeUpButton(ProbeEditWindow *pb_window, int x, int y)
139 : BC_GenericButton(x, y, _("Up"))
141 this->pb_window = pb_window;
144 ProbeUpButton::~ProbeUpButton()
148 int ProbeUpButton::handle_event()
150 ArrayList<ProbePrefItem *> &probe_items = pb_window->probe_items;
151 int n = probe_items.size();
153 ProbePrefItem **pitem = &probe_items[0], *item0 = *pitem;
154 for( int i=1; i<n; ++i ) {
155 ProbePrefItem *&item = probe_items[i];
156 if( item->get_selected() ) {
157 ProbePrefItem *t = item; item = *pitem; *pitem = t;
161 if( item0->get_selected() ) {
162 ProbePrefItem *t = *pitem; *pitem = item0; probe_items[0] = t;
165 pb_window->list_update();
169 ProbeDownButton::ProbeDownButton(ProbeEditWindow *pb_window, int x, int y)
170 : BC_GenericButton(x, y, _("Down"))
172 this->pb_window = pb_window;
175 ProbeDownButton::~ProbeDownButton()
179 ProbeEnabled::ProbeEnabled(ProbeEditWindow *pb_window, int x, int y)
180 : BC_CheckBox(x, y, 0, _("Enabled"))
182 this->pb_window = pb_window;
184 ProbeEnabled::~ProbeEnabled()
188 int ProbeEnabled::handle_event()
190 ProbePrefItem *item = (ProbePrefItem *)pb_window->probe_list->get_selection(0,0);
192 item->set_armed(get_value());
193 pb_window->list_update();
198 int ProbeDownButton::handle_event()
200 ArrayList<ProbePrefItem *> &probe_items = pb_window->probe_items;
201 int n = probe_items.size();
203 ProbePrefItem **pitem = &probe_items[n-1], *item1 = *pitem;
204 for( int i=n-1; --i>=0; ) {
205 ProbePrefItem *&item = probe_items[i];
206 if( item->get_selected() ) {
207 ProbePrefItem *t = item; item = *pitem; *pitem = t;
211 if( item1->get_selected() ) {
212 ProbePrefItem *t = *pitem; *pitem = item1; probe_items[n-1] = t;
215 pb_window->list_update();
219 ProbePrefItem::ProbePrefItem(ProbeEditWindow *pb_window, ProbePref *pref)
220 : BC_ListBoxItem(pref->name, pref->armed ?
221 pb_window->pb_enabled : pb_window->pb_disabled)
223 this->pb_window = pb_window;
224 this->armed = pref->armed;
227 ProbePrefItem::~ProbePrefItem()
231 void ProbePrefItem::set_armed(int armed)
234 set_icon(armed ? pb_window->pb_enabled : pb_window->pb_disabled);
237 ProbePrefList::ProbePrefList(ProbeEditWindow *pb_window, int x, int y)
238 : BC_ListBox(x, y, pb_window->get_w()-x-xS(10), pb_window->get_h()-y-yS(80),
239 LISTBOX_ICON_LIST, (ArrayList<BC_ListBoxItem *>*) &pb_window->probe_items,
242 this->pb_window = pb_window;
245 ProbePrefList::~ProbePrefList()
249 int ProbePrefList::selection_changed()
251 ProbePrefItem *item = (ProbePrefItem *)pb_window->probe_list->get_selection(0,0);
253 pb_window->probe_enabled->set_value(item->armed);
254 pb_window->probe_enabled->enable();
257 pb_window->probe_enabled->set_value(0);
258 pb_window->probe_enabled->disable();
260 pb_window->list_update();
264 int ProbePrefList::handle_event()
266 if( get_double_click() && get_buttonpress() == 1 ) {
267 ProbePrefItem *item = (ProbePrefItem *)get_selection(0,0);
268 int armed = item->armed ? 0 : 1;
269 pb_window->probe_enabled->enable();
270 pb_window->probe_enabled->set_value(armed);
271 item->set_armed(armed);
272 pb_window->list_update();