CGII/framework/include/cgv/gui/text_editor.h

99 lines
3.5 KiB
C
Raw Normal View History

2018-05-17 13:50:03 +00:00
#pragma once
#include <string>
#include <cgv/base/named.h>
#include <cgv/data/ref_ptr.h>
#include <cgv/media/font/font.h>
#include "lib_begin.h"
namespace cgv {
namespace gui {
/** implement this interface to interact with the text editor*/
struct CGV_API text_editor_callback_handler
{
/// called when the editor window is closed
virtual void on_close_editor();
/// called when new file has been read
virtual void after_read();
/// called when text has been saved
virtual void after_save();
/// called when nr_inserted characters have been inserted at text_pos
virtual void on_text_insertion(int text_pos, int nr_inserted);
/// called when the nr_deleted characters in deleted_text have been deleted at text position text_pos
virtual void on_text_deletion(int text_pos, int nr_deleted, const char* deleted_text);
/// called when text has been saved
virtual void on_update_callback();
};
/** description of a text style*/
struct text_style
{
/// rgb color packed into one integer, i.e. 0xff00ff corresponds to magenta
int color;
/// font face string with font name first, followed by +bold and or +italic
cgv::media::font::font_face_ptr font_face;
/// font size in pixels
float font_size;
};
/// abstract base class for text editors
class CGV_API text_editor : public base::named
{
protected:
/// store a callback handler
text_editor_callback_handler* handler;
public:
/// construct from callback handler
text_editor(const std::string& name, text_editor_callback_handler* _handler = 0);
/// set a new callback handler
void set_callback_handler(text_editor_callback_handler* _handler);
/// return current callback handler
const text_editor_callback_handler* get_callback_handler() const;
/// virtual destructor
virtual ~text_editor();
/// set a different base path used for the file open and save dialog
virtual void set_base_path(const std::string& path) = 0;
/// set a file filter for the file open and save dialog, default is "*"
virtual void set_filter(const std::string& filter) = 0;
/// read a new text file
virtual bool read(const std::string& file_name) = 0;
/// check if the current file is modified
virtual bool is_modified() const = 0;
/// save the current file
virtual bool save() = 0;
/// show editor
virtual void show() = 0;
/// hide editor
virtual void hide() = 0;
/// return whether editor is visible
virtual bool is_visible() const = 0;
/// return pointer to text buffer
virtual const char* get_text() const = 0;
/// replace the complete text
virtual void set_text(const std::string& new_text) = 0;
/// return pointer to style buffer
virtual const char* get_style() const = 0;
/// set the style of a given text portion
virtual void set_style(int text_pos, int length, const char* style) = 0;
/// return length of text and style buffer
virtual unsigned int get_length() const = 0;
/// set text styles from a table, where the first style is labeled with the character A, the snd by B, etc.
virtual void set_text_styles(const text_style* table, int nr_styles) = 0;
};
/// ref counted pointer to abst control
typedef data::ref_ptr<text_editor> text_editor_ptr;
#if _MSC_VER >= 1400
CGV_TEMPLATE template class CGV_API data::ref_ptr<text_editor_ptr>;
#endif
/// use the currently registered gui driver to construct a new text editor in a separate window of given size, title and position
extern CGV_API text_editor_ptr create_text_editor(unsigned int w, unsigned int h, const std::string& title, int x=-1, int y=-1);
}
}
#include <cgv/config/lib_end.h>