#ifndef _DBWINDOW_H_ #define _DBWINDOW_H_ #include "canvas.h" #include "condition.h" #include "garbage.h" #include "linklist.h" #include "mutex.h" #include "commercials.inc" #include "dbwindow.inc" #include "guicast.h" #include "mediadb.h" #include "mwindow.inc" #include "vicon.h" enum { col_vicon, col_id, col_length, col_source, col_title, col_start_time, col_access_time, col_access_count, sizeof_col }; class DbSearchItem : public BC_ListBoxItem { public: DbWindowVIcon *vicon; DbSearchItem(const char *text, int color=-1); ~DbSearchItem(); }; class DbWindow : public Thread { public: MWindow *mwindow; DbWindowGUI *gui; Mutex *window_lock; Mutex *db_lock; class MDb : public Garbage, public MediaDb { DbWindow *dwin; public: int attach_rd() { dwin->db_lock->lock(); attachDb(0); return 0; } int attach_wr() { dwin->db_lock->lock(); attachDb(1); return 0; } int detach() { dwin->db_lock->unlock(); detachDb(); return 0; } MDb(DbWindow *d); ~MDb(); } *mdb; void start(); void stop(); void run(); DbWindow(MWindow *mwindow); ~DbWindow(); }; class DbWindowGUI : public BC_Window { public: DbWindow *dwindow; DbWindowText *search_text; DbWindowTitleText *title_text; DbWindowInfoText *info_text; DbWindowMatchCase *match_case; DbWindowStart *search_start; DbWindowDeleteItems *del_items; DbWindowCancel *cancel; DbWindowList *search_list; DbWindowCanvas *canvas; DbWindowVIconThread *vicon_thread; int title_text_enable; int info_text_enable; int match_case_enable; int search_x, search_y, text_x, text_y; int del_items_x, del_items_y; int cancel_x, cancel_y, cancel_w, cancel_h; int canvas_x, canvas_y, canvas_w, canvas_h; int list_x, list_y, list_w, list_h; int sort_column, sort_order; const char *search_column_titles[sizeof_col]; int search_column_widths[sizeof_col]; int search_columns[sizeof_col]; ArrayList search_items[sizeof_col]; ArrayList search_results; void create_objects(); void search(int n, const char *text); void delete_items(); int close_event(); int resize_event(int x, int y); int stop_drawing(); int start_drawing(int update=1); void update(); static int cmpr_id_dn(const void *a, const void *b); static int cmpr_id_up(const void *a, const void *b); static int cmpr_length_dn(const void *a, const void *b); static int cmpr_length_up(const void *a, const void *b); static int cmpr_source_dn(const void *a, const void *b); static int cmpr_source_up(const void *a, const void *b); static int cmpr_Source_dn(const void *a, const void *b); static int cmpr_Source_up(const void *a, const void *b); static int cmpr_Title_dn(const void *a, const void *b); static int cmpr_Title_up(const void *a, const void *b); static int cmpr_title_dn(const void *a, const void *b); static int cmpr_title_up(const void *a, const void *b); static int cmpr_start_time_dn(const void *a, const void *b); static int cmpr_start_time_up(const void *a, const void *b); static int cmpr_access_time_dn(const void *a, const void *b); static int cmpr_access_time_up(const void *a, const void *b); static int cmpr_access_count_dn(const void *a, const void *b); static int cmpr_access_count_up(const void *a, const void *b); void sort_events(int column, int order); void move_column(int src, int dst); DbWindowGUI(DbWindow *dwindow); ~DbWindowGUI(); private: int search_string(const char *text, const char *sp); void search_clips(MediaDb *mdb, int n, const char *text); int delete_selection(MediaDb *mdb); }; class DbWindowInfoText : public BC_CheckBox { public: DbWindowGUI *gui; int handle_event(); void update(int v) { set_value(gui->info_text_enable = v); } DbWindowInfoText(DbWindowGUI *gui, int x, int y); ~DbWindowInfoText(); }; class DbWindowTitleText : public BC_CheckBox { public: DbWindowGUI *gui; int handle_event(); void update(int v) { set_value(gui->title_text_enable = v); } DbWindowTitleText(DbWindowGUI *gui, int x, int y); ~DbWindowTitleText(); }; class DbWindowMatchCase : public BC_CheckBox { public: DbWindowGUI *gui; int handle_event(); DbWindowMatchCase(DbWindowGUI *gui, int x, int y); ~DbWindowMatchCase(); }; class DbWindowText : public BC_TextBox { public: DbWindowGUI *gui; int handle_event(); int keypress_event(); DbWindowText(DbWindowGUI *gui, int x, int y, int w); ~DbWindowText(); }; class DbWindowStart : public BC_GenericButton { public: DbWindowGUI *gui; int handle_event(); DbWindowStart(DbWindowGUI *gui, int x, int y); ~DbWindowStart(); }; class DbWindowCancel : public BC_CancelButton { public: DbWindowGUI *gui; int handle_event(); DbWindowCancel(DbWindowGUI *gui, int x, int y); ~DbWindowCancel(); }; class DbWindowDeleteItems : public BC_GenericButton { public: DbWindowGUI *gui; int handle_event(); DbWindowDeleteItems(DbWindowGUI *gui, int x, int y); ~DbWindowDeleteItems(); }; class DbWindowList : public BC_ListBox { public: DbWindowGUI *gui; int handle_event(); int sort_order_event(); int keypress_event(); int move_column_event(); int selection_changed(); void set_view_popup(DbWindowVIcon *vicon); int update_images(); int update(); DbWindowList(DbWindowGUI *gui, int x, int y, int w, int h); ~DbWindowList(); }; class DbWindowCanvas : public Canvas { public: DbWindowGUI *gui; int is_fullscreen; DbWindowCanvas(DbWindowGUI *gui, int x, int y, int w, int h); ~DbWindowCanvas(); void flash_canvas(); void draw_frame(VFrame *frame, int x, int y, int w, int h); int button_press_event() { return 0; } int keypress_event() { return 0; } int get_fullscreen() { return is_fullscreen; } void set_fullscreen(int value) { is_fullscreen = value; } }; class DbWindowVIcon : public VIcon { public: DbWindowList *lbox; DbSearchItem *item; int clip_id, clip_size; int frame_id, frames; int prefix_size, suffix_offset; VFrame *frame(); int64_t set_seq_no(int64_t no); void load_frames(DbWindow::MDb *mdb); void read_frames(DbWindow::MDb *mdb); int get_vx(); int get_vy(); void update_image(DbWindowGUI *gui, int clip_id); DbWindowVIcon(); ~DbWindowVIcon(); }; class DbWindowVIconThread : public VIconThread { public: DbWindowGUI *gui; int list_update; ArrayList vicons; DbWindowVIcon *get_vicon(int i, DbSearchItem *item); void drawing_started(); DbWindowVIconThread(DbWindowGUI *gui); ~DbWindowVIconThread(); }; class DbWindowItem { public: int no, id, access_count; char *source, *title; double length, start_time, access_time; DbWindowItem(int id, const char *source, const char *title, double length, double start_time, double access_time, int access_count); ~DbWindowItem(); }; class DbWindowScan : public BC_MenuItem { public: MWindow *mwindow; int handle_event(); DbWindowScan(MWindow *mwindow); ~DbWindowScan(); }; #endif