summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/RichTextBox.h
blob: 826d483361169a2f0a43bb29beb78eaa0f6e66e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors
    Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
    Copyright (c) 1997-2006, Destroyer Studios LLC.

    AUTHOR:       John DiCamillo


    OVERVIEW
    ========
    Rich Text Window - an HTML-like control
*/

#ifndef RichTextBox_h
#define RichTextBox_h

#include "Types.h"
#include "Color.h"
#include "Bitmap.h"
#include "ScrollWindow.h"
#include "EventTarget.h"
#include "List.h"
#include "Text.h"

// +--------------------------------------------------------------------+

class RichTextBox : public ScrollWindow
{
public:
    static const char* TYPENAME() { return "RichTextBox"; }

    RichTextBox(ActiveWindow* p, int ax, int ay, int aw, int ah, DWORD aid=0, DWORD astyle=0);
    RichTextBox(Screen*       s, int ax, int ay, int aw, int ah, DWORD aid=0, DWORD astyle=0);
    virtual ~RichTextBox();

    int operator == (const RichTextBox& w) const { return id == w.id; }

    // Operations:
    virtual void   DrawContent(const Rect& ctrl_rect);
    virtual void   SetText(const char* t);

    // Event Target Interface:
    virtual int    OnMouseMove(int x, int y);
    virtual int    OnLButtonDown(int x, int y);
    virtual int    OnLButtonUp(int x, int y);
    virtual int    OnMouseWheel(int wheel);
    virtual int    OnClick();

    virtual int    OnKeyDown(int vk, int flags);

protected:
    virtual void   DrawTabbedText();
    virtual void   DrawRichText(Rect& text_rect);
    int            GetNextTab(int xpos);

    virtual int    find_next_word_start(const char* text, int index);
    virtual int    find_next_word_end(const char* text, int index);
    virtual int    parse_hex_digit(char c);
    virtual int    process_tag(const char* text, int index, Font*& font);

};

#endif  // RichTextBox_h