--- /dev/null
+
+/*
+ * CINELERRA
+ * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "bclistboxitem.h"
+#include "bcpixmap.h"
+#include "bcresources.h"
+#include "bcwindowbase.h"
+
+#include <string.h>
+
+
+// ====================================================== item
+
+BC_ListBoxItem::BC_ListBoxItem()
+{
+ initialize();
+
+ color = BC_WindowBase::get_resources()->listbox_text;
+ this->text = new char[1];
+ text[0] = 0;
+ selectable = 1;
+}
+
+BC_ListBoxItem::BC_ListBoxItem(const char *text,
+ BC_Pixmap *icon,
+ int color)
+{
+ initialize();
+
+ if(color == -1) color = BC_WindowBase::get_resources()->listbox_text;
+ this->text = new char[strlen(text) + 1];
+ this->icon = icon;
+
+ strcpy(this->text, text);
+ this->color = color;
+ selectable = 1;
+}
+
+BC_ListBoxItem::BC_ListBoxItem(const char *text, int color)
+{
+ initialize();
+
+ if(color == -1) color = BC_WindowBase::get_resources()->listbox_text;
+ this->text = new char[strlen(text) + 1];
+ strcpy(this->text, text);
+ this->color = color;
+ selectable = 1;
+}
+
+BC_ListBoxItem::~BC_ListBoxItem()
+{
+ if(text) delete [] text;
+ if(sublist)
+ {
+ for(int i = 0; i < columns; i++)
+ sublist[i].remove_all_objects();
+ delete sublist;
+ }
+}
+
+int BC_ListBoxItem::initialize()
+{
+ autoplace_icon = 1;
+ autoplace_text = 1;
+ text = 0;
+ color = BLACK;
+ selected = 0;
+ icon = 0;
+ icon_vframe = 0;
+ text_x = text_y = -1;
+ text_w = text_h = -1;
+ baseline = -1;
+ icon_x = -1;
+ icon_y = -1;
+ searchable = 1;
+ in_view = -1;
+ sublist = 0;
+ columns = 0;
+ expand = 0;
+ return 0;
+}
+
+int BC_ListBoxItem::get_icon_w() { return !icon ? 0 : icon->get_w(); }
+int BC_ListBoxItem::get_icon_h() { return !icon ? 0 : icon->get_h(); }
+
+BC_Pixmap* BC_ListBoxItem::get_icon()
+{
+ return icon;
+}
+
+
+void BC_ListBoxItem::set_text(const char *new_text)
+{
+ if(this->text) delete [] this->text;
+
+ if(new_text) {
+ text = new char[strlen(new_text) + 1];
+ strcpy(this->text, new_text);
+ }
+ else
+ text = 0;
+ text_w = text_h = -1;
+ baseline = -1;
+}
+
+void BC_ListBoxItem::copy_from(BC_ListBoxItem *item)
+{
+ if(item->text) set_text(item->text);
+ color = item->color;
+ text_x = item->text_x; text_y = item->text_y;
+ text_w = item->text_w; text_h = item->text_h;
+ baseline = item->baseline; in_view = -1;
+ icon_x = item->icon_x;
+ icon_y = item->icon_y;
+ selectable = item->selectable;
+ columns = item->columns;
+ if(item->sublist)
+ {
+ sublist = new ArrayList<BC_ListBoxItem*>[columns];
+ for(int i = 0; i < columns; i++)
+ {
+ ArrayList<BC_ListBoxItem*> *list = &item->get_sublist()[i];
+
+ for(int j = 0; j < list->total; j++)
+ {
+ BC_ListBoxItem *new_item = new BC_ListBoxItem;
+ BC_ListBoxItem *old_item = list->values[j];
+ sublist[i].append(new_item);
+ new_item->copy_from(old_item);
+ }
+ }
+ }
+}
+
+ArrayList<BC_ListBoxItem*>* BC_ListBoxItem::new_sublist(int columns)
+{
+ sublist = new ArrayList<BC_ListBoxItem*>[columns];
+ this->columns = columns;
+ return sublist;
+}
+
+