#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:
friend class BC_TextBoxSuggestions;
+ friend class BC_ScrollTextBox;
// Whenever the contents of the text change
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();
// 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);
// 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.
// 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();
// 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);
// 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;
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;
ArrayList<BC_ListBoxItem*> *suggestions;
BC_TextBoxSuggestions *suggestions_popup;
int suggestion_column;
+ int selection_active;
};
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,
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
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
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);
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);
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;
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();
};
+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