mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 13:51:33 -06:00
Start working on adding tab support
This commit is contained in:
@@ -33,6 +33,40 @@ cmCursesStringWidget::cmCursesStringWidget(int width, int height,
|
||||
field_opts_off(m_Field, O_STATIC);
|
||||
}
|
||||
|
||||
void cmCursesStringWidget::OnTab(cmCursesMainForm*, WINDOW*)
|
||||
{
|
||||
//FORM* form = fm->GetForm();
|
||||
}
|
||||
|
||||
void cmCursesStringWidget::OnReturn(cmCursesMainForm* fm, WINDOW*)
|
||||
{
|
||||
FORM* form = fm->GetForm();
|
||||
if (m_InEdit)
|
||||
{
|
||||
cmCursesForm::LogMessage("String widget leaving edit.");
|
||||
m_InEdit = false;
|
||||
fm->PrintKeys();
|
||||
delete[] m_OriginalString;
|
||||
// trick to force forms to update the field buffer
|
||||
form_driver(form, REQ_NEXT_FIELD);
|
||||
form_driver(form, REQ_PREV_FIELD);
|
||||
m_Done = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmCursesForm::LogMessage("String widget entering edit.");
|
||||
m_InEdit = true;
|
||||
fm->PrintKeys();
|
||||
char* buf = field_buffer(m_Field, 0);
|
||||
m_OriginalString = new char[strlen(buf)+1];
|
||||
strcpy(m_OriginalString, buf);
|
||||
}
|
||||
}
|
||||
|
||||
void cmCursesStringWidget::OnType(int& key, cmCursesMainForm* fm, WINDOW* w)
|
||||
{
|
||||
form_driver(fm->GetForm(), key);
|
||||
}
|
||||
|
||||
bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
|
||||
WINDOW* w)
|
||||
@@ -46,12 +80,13 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
|
||||
return false;
|
||||
}
|
||||
|
||||
char* originalStr=0;
|
||||
m_OriginalString=0;
|
||||
m_Done = false;
|
||||
|
||||
char debugMessage[128];
|
||||
|
||||
// <Enter> is used to change edit mode (like <Esc> in vi).
|
||||
while(1)
|
||||
while(!m_Done)
|
||||
{
|
||||
sprintf(debugMessage, "String widget handling input, key: %d", key);
|
||||
cmCursesForm::LogMessage(debugMessage);
|
||||
@@ -83,26 +118,7 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
|
||||
// 10 == enter
|
||||
if (key == 10 || key == KEY_ENTER)
|
||||
{
|
||||
if (m_InEdit)
|
||||
{
|
||||
cmCursesForm::LogMessage("String widget leaving edit.");
|
||||
m_InEdit = false;
|
||||
fm->PrintKeys();
|
||||
delete[] originalStr;
|
||||
// trick to force forms to update the field buffer
|
||||
form_driver(form, REQ_NEXT_FIELD);
|
||||
form_driver(form, REQ_PREV_FIELD);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
cmCursesForm::LogMessage("String widget entering edit.");
|
||||
m_InEdit = true;
|
||||
fm->PrintKeys();
|
||||
char* buf = field_buffer(m_Field, 0);
|
||||
originalStr = new char[strlen(buf)+1];
|
||||
strcpy(originalStr, buf);
|
||||
}
|
||||
this->OnReturn(fm, w);
|
||||
}
|
||||
else if ( key == KEY_DOWN || key == ctrl('n') ||
|
||||
key == KEY_UP || key == ctrl('p') ||
|
||||
@@ -110,7 +126,7 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
|
||||
key == KEY_PPAGE || key == ctrl('u'))
|
||||
{
|
||||
m_InEdit = false;
|
||||
delete[] originalStr;
|
||||
delete[] m_OriginalString;
|
||||
// trick to force forms to update the field buffer
|
||||
form_driver(form, REQ_NEXT_FIELD);
|
||||
form_driver(form, REQ_PREV_FIELD);
|
||||
@@ -123,13 +139,17 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
|
||||
{
|
||||
m_InEdit = false;
|
||||
fm->PrintKeys();
|
||||
this->SetString(originalStr);
|
||||
delete[] originalStr;
|
||||
this->SetString(m_OriginalString);
|
||||
delete[] m_OriginalString;
|
||||
touchwin(w);
|
||||
wrefresh(w);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if ( key == 9 )
|
||||
{
|
||||
this->OnTab(fm, w);
|
||||
}
|
||||
else if ( key == KEY_LEFT || key == ctrl('b') )
|
||||
{
|
||||
form_driver(form, REQ_PREV_CHAR);
|
||||
@@ -157,14 +177,17 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
|
||||
}
|
||||
else
|
||||
{
|
||||
form_driver(form, key);
|
||||
this->OnType(key, fm, w);
|
||||
}
|
||||
if ( !m_Done )
|
||||
{
|
||||
touchwin(w);
|
||||
wrefresh(w);
|
||||
|
||||
key=getch();
|
||||
}
|
||||
|
||||
touchwin(w);
|
||||
wrefresh(w);
|
||||
|
||||
key=getch();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void cmCursesStringWidget::SetString(const char* value)
|
||||
|
||||
Reference in New Issue
Block a user