1
#include "../cmCacheManager.h"
2
#include "../cmSystemTools.h"
4
#include "cmCursesLongMessageForm.h"
5
#include "cmCursesMainForm.h"
12
cmCursesLongMessageForm::cmCursesLongMessageForm(std::vector<std::string>
13
const& messages, const char*
16
// Append all messages into on big string
17
std::vector<std::string>::const_iterator it;
18
for(it=messages.begin(); it != messages.end(); it++)
21
// Add one blank line after each message
29
cmCursesLongMessageForm::~cmCursesLongMessageForm()
33
free_field(m_Fields[0]);
38
void cmCursesLongMessageForm::UpdateStatusBar()
41
getmaxyx(stdscr, y, x);
43
char bar[cmCursesMainForm::MAX_WIDTH];
44
int size = strlen(m_Title.c_str());
45
if ( size >= cmCursesMainForm::MAX_WIDTH )
47
size = cmCursesMainForm::MAX_WIDTH-1;
49
strncpy(bar, m_Title.c_str(), size);
50
for(int i=size-1; i<cmCursesMainForm::MAX_WIDTH; i++) bar[i] = ' ';
53
if (x < cmCursesMainForm::MAX_WIDTH )
59
width = cmCursesMainForm::MAX_WIDTH;
64
char version[cmCursesMainForm::MAX_WIDTH];
66
sprintf(vertmp,"CMake Version %d.%d - %s", cmMakefile::GetMajorVersion(),
67
cmMakefile::GetMinorVersion(),cmMakefile::GetReleaseVersion());
68
int sideSpace = (width-strlen(vertmp));
69
for(int i=0; i<sideSpace; i++) { version[i] = ' '; }
70
sprintf(version+sideSpace, "%s", vertmp);
71
version[width] = '\0';
79
pos_form_cursor(m_Form);
82
void cmCursesLongMessageForm::PrintKeys()
85
getmaxyx(stdscr, y, x);
86
if ( x < cmCursesMainForm::MIN_WIDTH ||
87
y < cmCursesMainForm::MIN_HEIGHT )
92
sprintf(firstLine, "Press [e] to exit help");
96
pos_form_cursor(m_Form);
100
void cmCursesLongMessageForm::Render(int left, int top, int width, int height)
103
getmaxyx(stdscr, y, x);
112
const char* msg = m_Messages.c_str();
118
free_field(m_Fields[0]);
122
m_Fields[0] = new_field(y-6, x-2, 1, 1, 0, 0);
124
field_opts_off(m_Fields[0], O_STATIC);
126
m_Form = new_form(m_Fields);
130
form_driver(m_Form, REQ_BEG_FIELD);
131
while(msg[i] != '\0')
133
if (msg[i] == '\n' && msg[i+1] != '\0')
135
form_driver(m_Form, REQ_NEW_LINE);
139
form_driver(m_Form, msg[i]);
143
form_driver(m_Form, REQ_BEG_FIELD);
145
this->UpdateStatusBar();
152
void cmCursesLongMessageForm::HandleInput()
159
char debugMessage[128];
165
sprintf(debugMessage, "Message widget handling input, key: %d", key);
166
cmCursesForm::LogMessage(debugMessage);
169
if ( key == 'o' || key == 'e' )
173
else if ( key == KEY_DOWN || key == ctrl('n') )
175
form_driver(m_Form, REQ_SCR_FLINE);
177
else if ( key == KEY_UP || key == ctrl('p') )
179
form_driver(m_Form, REQ_SCR_BLINE);
181
else if ( key == KEY_NPAGE || key == ctrl('d') )
183
form_driver(m_Form, REQ_SCR_FPAGE);
185
else if ( key == KEY_PPAGE || key == ctrl('u') )
187
form_driver(m_Form, REQ_SCR_BPAGE);
190
this->UpdateStatusBar();