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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
/*
* Copyright (C) 2012-2014 Robin Haberkorn
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __INTERFACE_NCURSES_H
#define __INTERFACE_NCURSES_H
#include <stdarg.h>
#include <glib.h>
#include <curses.h>
#include <Scintilla.h>
#include <ScintillaTerm.h>
#include "interface.h"
namespace SciTECO {
typedef class ViewNCurses : public View {
Scintilla *sci;
public:
ViewNCurses();
~ViewNCurses();
inline void
refresh(void)
{
scintilla_refresh(sci);
}
inline WINDOW *
get_window(void)
{
return scintilla_get_window(sci);
}
inline sptr_t
ssm(unsigned int iMessage, uptr_t wParam = 0, sptr_t lParam = 0)
{
return scintilla_send_message(sci, iMessage, wParam, lParam);
}
} ViewCurrent;
typedef class InterfaceNCurses : public Interface {
SCREEN *screen;
FILE *screen_tty;
WINDOW *info_window;
gchar *info_current;
WINDOW *msg_window;
WINDOW *cmdline_window;
gchar *cmdline_current;
ViewNCurses *current_view;
struct Popup {
WINDOW *window;
GSList *list;
gint longest;
gint length;
Popup() : window(NULL), list(NULL), longest(0), length(0) {}
~Popup();
} popup;
public:
InterfaceNCurses() : screen(NULL),
screen_tty(NULL),
info_window(NULL),
info_current(NULL),
msg_window(NULL),
cmdline_window(NULL),
cmdline_current(NULL),
current_view(NULL) {}
~InterfaceNCurses();
void main(int &argc, char **&argv);
void vmsg(MessageType type, const gchar *fmt, va_list ap);
void msg_clear(void);
void show_view(View *view);
inline View *
get_current_view(void)
{
return current_view;
}
inline sptr_t
ssm(unsigned int iMessage, uptr_t wParam = 0, sptr_t lParam = 0)
{
return current_view->ssm(iMessage, wParam, lParam);
}
inline void
undo_ssm(unsigned int iMessage,
uptr_t wParam = 0, sptr_t lParam = 0)
{
current_view->undo_ssm(iMessage, wParam, lParam);
}
void info_update(QRegister *reg);
void info_update(Buffer *buffer);
void cmdline_update(const gchar *cmdline = NULL);
void popup_add(PopupEntryType type,
const gchar *name, bool highlight = false);
void popup_show(void);
void popup_clear(void);
/* main entry point */
void event_loop(void);
private:
void init_screen(void);
void resize_all_windows(void);
void draw_info(void);
friend void event_loop_iter();
} InterfaceCurrent;
} /* namespace SciTECO */
#endif
|