X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbctextbox.h;h=425768bfde593671d8c843de32a0ba865b295599;hp=3d1106e6e48f38bde571df2c6b04a4f205b06ddd;hb=c279e21fc2394a7908bbd1ba8c79b116fe9fb14a;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd diff --git a/cinelerra-5.1/guicast/bctextbox.h b/cinelerra-5.1/guicast/bctextbox.h index 3d1106e6..425768bf 100644 --- a/cinelerra-5.1/guicast/bctextbox.h +++ b/cinelerra-5.1/guicast/bctextbox.h @@ -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" @@ -35,11 +37,22 @@ 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 @@ -68,6 +82,7 @@ public: // Whenever the position of the text changes virtual int motion_event() { return 0; }; void set_selection(int char1, int char2, int ibeam); + void wset_selection(int char1, int char2, int ibeam); int update(const char *text); int update(const wchar_t *wtext); int update(int64_t value); @@ -88,24 +103,34 @@ 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(); const wchar_t* get_wtext(); - const char* get_utf8text(); void set_text(char *text, int isz); int get_text_rows(); // 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(); -#ifdef X_HAVE_UTF8_STRING - int utf8seek(int i, int reverse); -#endif + 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); + static int wcpos(const char *text, const char *ep); + void set_precision(int precision); // Whether to draw every time there is a keypress or rely on user to // follow up every keypress with an update(). @@ -125,7 +150,7 @@ public: // Compute suggestions for a path // If entries is null, just search absolute paths - int calculate_suggestions(ArrayList *entries); + int calculate_suggestions(ArrayList *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 *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 *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,34 +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 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(); - - 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; + 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(); }; class BC_ScrollTextBoxText : public BC_TextBox @@ -272,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 @@ -306,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 *data); void reposition_window(int x, int y); @@ -385,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); @@ -394,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; @@ -414,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(); @@ -434,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