refresh frame fix, dblclk proxy viewer fix, vicon refresh fix for awdw resize, fix...
[goodguy/history.git] / cinelerra-5.1 / guicast / bctextbox.h
index 0f3f23ed75592c588485e1db03c6abf4f0802ca3..425768bfde593671d8c843de32a0ba865b295599 100644 (file)
@@ -23,6 +23,8 @@
 #define BCTEXTBOX_H
 
 #include "bclistbox.h"
+#include "bcmenuitem.h"
+#include "bcpopupmenu.h"
 #include "bcsubwindow.h"
 #include "bctumble.h"
 #include "fonts.h"
 
 
 class BC_TextBoxSuggestions;
-class BC_ScrollTextBoxYScroll;
 
+class BC_ScrollTextBoxXScroll;
+class BC_ScrollTextBoxYScroll;
+class BC_ScrollTextBoxText;
+class BC_TextMenu;
 
 class BC_TextBox : public BC_SubWindow
 {
+       static inline int nib(int ch) {
+               if( ch >= '0' && ch <= '9' ) ch -= '0';
+               else if( ch >= 'A' && ch <= 'F' ) ch -= 'A'-10;
+               else if( ch >= 'a' && ch <= 'f' ) ch -= 'a'-10;
+               else ch = -1;
+               return ch;
+       }
+
        char *text;
        wchar_t *wtext;
 public:
@@ -61,6 +74,7 @@ public:
 
 
        friend class BC_TextBoxSuggestions;
+       friend class BC_ScrollTextBox;
 
 
 // Whenever the contents of the text change
@@ -89,6 +103,7 @@ public:
        int button_release_event();
        int repeat_event(int64_t repeat_id);
        int keypress_event();
+       int selection_clear_event();
        int activate();
        int deactivate();
        const char* get_text();
@@ -98,9 +113,19 @@ public:
 // Set top left of text view
        void set_text_row(int row);
        int get_text_row();
+       int get_text_x();
+       int get_text_y();
+       void set_text_x(int v);
+       void set_text_y(int v);
+       int get_back_color();
+       void set_back_color(int v);
 
        int reposition_window(int x, int y, int w = -1, int rows = -1);
        int uses_text();
+       int cut(int do_update);
+       int copy(int do_update);
+       int paste(int do_update);
+       
        static int calculate_h(BC_WindowBase *gui, int font, int has_border, int rows);
        static int calculate_row_h(int rows, BC_WindowBase *parent_window, int has_border = 1, int font = MEDIUMFONT);
        static int pixels_to_rows(BC_WindowBase *window, int font, int pixels);
@@ -125,7 +150,7 @@ public:
 
 // Compute suggestions for a path
 // If entries is null, just search absolute paths
-       int calculate_suggestions(ArrayList<BC_ListBoxItem*> *entries);
+       int calculate_suggestions(ArrayList<BC_ListBoxItem*> *entries=0, const char *filter=0);
 
 
 // User computes suggestions after handle_event.
@@ -133,11 +158,14 @@ public:
 // A highlighted extension is added if 1 suggestion or a popup appears
 // if multiple suggestions.
 // column - starting column to replace
+       void no_suggestions();
        void set_suggestions(ArrayList<char*> *suggestions, int column);
-       BC_ScrollTextBoxYScroll *yscroll;
 
+       BC_ScrollTextBoxXScroll *xscroll;
+       BC_ScrollTextBoxYScroll *yscroll;
 private:
        int reset_parameters(int rows, int has_border, int font, int size);
+       BC_TextMenu *menu;
        void draw(int flush);
        void draw_border();
        void draw_cursor();
@@ -149,6 +177,7 @@ private:
 // ibeam_left causes the ibeam to move left.
        int is_separator(const char *txt, int i);
        void do_separators(int ibeam_left);
+       int get_x_position(int i, int start=0);
        void get_ibeam_position(int &x, int &y);
        void find_ibeam(int dispatch_event);
        void select_word(int &letter1, int &letter2, int ibeam_letter);
@@ -169,7 +198,7 @@ private:
 // Top left of cursor relative to text
        int ibeam_x, ibeam_y;
 
-       int ibeam_letter;
+       int ibeam_letter, unicode_active;
        int highlight_letter1, highlight_letter2;
        int highlight_letter3, highlight_letter4;
        int text_x1, text_start, text_end;
@@ -183,7 +212,7 @@ private:
        int high_color, back_color;
        int background_color;
        int size, tsize, dirty;
-       int wlen, wsize, *positions, plen;
+       int wlen, wsize;
        char temp_string[KEYPRESSLEN];
        int is_utf8;
        int active;
@@ -199,6 +228,7 @@ private:
        ArrayList<BC_ListBoxItem*> *suggestions;
        BC_TextBoxSuggestions *suggestions_popup;
        int suggestion_column;
+       int selection_active;
 };
 
 
@@ -209,21 +239,26 @@ public:
        BC_TextBoxSuggestions(BC_TextBox *text_box, int x, int y);
        virtual ~BC_TextBoxSuggestions();
 
-       int selection_changed();
        int handle_event();
 
-
        BC_TextBox *text_box;
 };
 
 
-
-class BC_ScrollTextBoxText;
-class BC_ScrollTextBoxYScroll;
-
-
 class BC_ScrollTextBox
 {
+       BC_ScrollTextBoxText *text;
+       BC_ScrollTextBoxXScroll *xscroll;
+       BC_ScrollTextBoxYScroll *yscroll;
+       BC_WindowBase *parent_window;
+       const char *default_text;
+       const wchar_t *default_wtext;
+       int default_size;
+       int x, y, w, rows;
+
+       friend class BC_ScrollTextBoxText;
+       friend class BC_ScrollTextBoxXScroll;
+       friend class BC_ScrollTextBoxYScroll;
 public:
        BC_ScrollTextBox(BC_WindowBase *parent_window,
                int x, int y, int w, int rows,
@@ -233,36 +268,33 @@ public:
                 const wchar_t *default_wtext, int default_size=BCTEXTLEN);
        virtual ~BC_ScrollTextBox();
        void create_objects();
-       virtual int handle_event();
 
-       const char* get_text();
-       const wchar_t* get_wtext();
+       virtual int handle_event() { return 1; }
+       virtual int button_press_event();
+       virtual int button_release_event();
+
        void set_text(char *text, int isz);
        int set_text_row(int n);
        void update(const char *text);
        void update(const wchar_t *wtext);
-       void set_selection(int char1, int char2, int ibeam);
-       void wset_selection(int char1, int char2, int ibeam);
        void reposition_window(int x, int y, int w, int rows);
-       int get_x();
-       int get_y();
-       int get_w();
-       int get_h();
+       void update_scrollbars();
+// accessors
+       int get_x() { return x; }
+       int get_y() { return y; }
+       int get_w() { return w; }
 // Visible rows for resizing
-       int get_rows();
+       int get_rows() { return rows; }
+       int get_x_pos();
+       void set_x_pos(int x);
+// forward functions
+       int get_h();
+       const char *get_text();
+       const wchar_t *get_wtext();
+       int get_buttonpress();
+       void wset_selection(int char1, int char2, int ibeam);
+       void set_selection(int char1, int char2, int ibeam);
        int get_ibeam_letter();
-
-       friend class BC_ScrollTextBoxText;
-       friend class BC_ScrollTextBoxYScroll;
-
-private:
-       BC_ScrollTextBoxText *text;
-       BC_ScrollTextBoxYScroll *yscroll;
-       BC_WindowBase *parent_window;
-       const char *default_text;
-       const wchar_t *default_wtext;
-       int default_size;
-       int x, y, w, rows;
 };
 
 class BC_ScrollTextBoxText : public BC_TextBox
@@ -274,6 +306,17 @@ public:
        int handle_event();
        int motion_event();
        BC_ScrollTextBox *gui;
+       int button_press_event() { return gui->button_press_event(); }
+       int button_release_event() { return gui->button_release_event(); }
+};
+
+class BC_ScrollTextBoxXScroll : public BC_ScrollBar
+{
+public:
+       BC_ScrollTextBoxXScroll(BC_ScrollTextBox *gui);
+       virtual ~BC_ScrollTextBoxXScroll();
+       int handle_event();
+       BC_ScrollTextBox *gui;
 };
 
 class BC_ScrollTextBoxYScroll : public BC_ScrollBar
@@ -308,6 +351,9 @@ public:
        int get_y();
        int get_w();
        int get_h();
+       int get_show_query();
+       void set_show_query(int v);
+
        void update(const char *text);
        void update_list(ArrayList<BC_ListBoxItem*> *data);
        void reposition_window(int x, int y);
@@ -387,7 +433,7 @@ public:
        int get_y();
        int get_w();
        int get_h();
-       void disable();
+       void disable(int hide_text=0);
        void enable();
        int get_enabled();
        void reposition_window(int x, int y);
@@ -396,6 +442,7 @@ public:
        void set_precision(int precision);
        void set_increment(float value);
        void set_log_floatincrement(int value);
+       void set_tooltip(const char *text);
 
        friend class BC_TumbleTextBoxText;
        friend class BC_TumbleTextBoxTumble;
@@ -416,19 +463,8 @@ private:
 class BC_TumbleTextBoxText : public BC_TextBox
 {
 public:
-       BC_TumbleTextBoxText(BC_TumbleTextBox *popup,
-               int64_t default_value,
-               int64_t min,
-               int64_t max,
-               int x,
-               int y);
-       BC_TumbleTextBoxText(BC_TumbleTextBox *popup,
-               float default_value,
-               float min,
-               float max,
-               int x,
-               int y);
-       BC_TumbleTextBoxText(BC_TumbleTextBox *popup, int x, int y);
+       BC_TumbleTextBoxText(BC_TumbleTextBox *popup, int64_t default_value, int x, int y);
+       BC_TumbleTextBoxText(BC_TumbleTextBox *popup, float default_value, int x, int y, int precision);
        virtual ~BC_TumbleTextBoxText();
        int handle_event();
        int button_press_event();
@@ -436,4 +472,40 @@ public:
 };
 
 
+class BC_TextMenu : public BC_PopupMenu
+{
+public:
+       BC_TextMenu(BC_TextBox *textbox);
+       ~BC_TextMenu();
+       
+       void create_objects();
+       
+       BC_TextBox *textbox;
+};
+
+class BC_TextMenuCut : public BC_MenuItem
+{
+public:
+       BC_TextMenuCut(BC_TextMenu *menu);
+       int handle_event();
+       BC_TextMenu *menu;
+};
+
+class BC_TextMenuCopy : public BC_MenuItem
+{
+public:
+       BC_TextMenuCopy(BC_TextMenu *menu);
+       int handle_event();
+       BC_TextMenu *menu;
+};
+
+class BC_TextMenuPaste : public BC_MenuItem
+{
+public:
+       BC_TextMenuPaste(BC_TextMenu *menu);
+       int handle_event();
+       BC_TextMenu *menu;
+};
+
+
 #endif