The entry widgets are now created with what is initially available on the terminal.

This commit is contained in:
Berk Geveci 2002-05-01 11:34:27 -04:00
parent d0d25bb989
commit d53458de9a
5 changed files with 36 additions and 20 deletions

View File

@ -117,7 +117,7 @@ int main(int argc, char** argv)
cmCursesMainForm* myform;
myform = new cmCursesMainForm(args);
myform = new cmCursesMainForm(args, x);
cmSystemTools::SetErrorCallback(CMakeErrorHandler);

View File

@ -23,19 +23,22 @@
#include "cmCursesDummyWidget.h"
#include "../cmSystemTools.h"
cmCursesCacheEntryComposite::cmCursesCacheEntryComposite(const char* key) :
m_Key(key)
cmCursesCacheEntryComposite::cmCursesCacheEntryComposite(const char* key,
int labelwidth,
int entrywidth) :
m_Key(key), m_LabelWidth(labelwidth), m_EntryWidth(entrywidth)
{
m_Label = new cmCursesLabelWidget(30, 1, 1, 1, key);
m_Label = new cmCursesLabelWidget(m_LabelWidth, 1, 1, 1, key);
m_IsNewLabel = new cmCursesLabelWidget(1, 1, 1, 1, " ");
m_Entry = 0;
}
cmCursesCacheEntryComposite::cmCursesCacheEntryComposite(
const char* key, const cmCacheManager::CacheEntry& value, bool isNew) :
m_Key(key)
const char* key, const cmCacheManager::CacheEntry& value, bool isNew,
int labelwidth, int entrywidth)
: m_Key(key), m_LabelWidth(labelwidth), m_EntryWidth(entrywidth)
{
m_Label = new cmCursesLabelWidget(30, 1, 1, 1, key);
m_Label = new cmCursesLabelWidget(m_LabelWidth, 1, 1, 1, key);
if (isNew)
{
m_IsNewLabel = new cmCursesLabelWidget(1, 1, 1, 1, "*");
@ -49,7 +52,7 @@ cmCursesCacheEntryComposite::cmCursesCacheEntryComposite(
switch ( value.m_Type )
{
case cmCacheManager::BOOL:
m_Entry = new cmCursesBoolWidget(30, 1, 1, 1);
m_Entry = new cmCursesBoolWidget(m_EntryWidth, 1, 1, 1);
if (cmSystemTools::IsOn(value.m_Value.c_str()))
{
static_cast<cmCursesBoolWidget*>(m_Entry)->SetValueAsBool(true);
@ -60,17 +63,17 @@ cmCursesCacheEntryComposite::cmCursesCacheEntryComposite(
}
break;
case cmCacheManager::PATH:
m_Entry = new cmCursesPathWidget(30, 1, 1, 1);
m_Entry = new cmCursesPathWidget(m_EntryWidth, 1, 1, 1);
static_cast<cmCursesPathWidget*>(m_Entry)->SetString(
value.m_Value.c_str());
break;
case cmCacheManager::FILEPATH:
m_Entry = new cmCursesFilePathWidget(30, 1, 1, 1);
m_Entry = new cmCursesFilePathWidget(m_EntryWidth, 1, 1, 1);
static_cast<cmCursesFilePathWidget*>(m_Entry)->SetString(
value.m_Value.c_str());
break;
case cmCacheManager::STRING:
m_Entry = new cmCursesStringWidget(30, 1, 1, 1);
m_Entry = new cmCursesStringWidget(m_EntryWidth, 1, 1, 1);
static_cast<cmCursesStringWidget*>(m_Entry)->SetString(
value.m_Value.c_str());
break;

View File

@ -23,10 +23,10 @@
class cmCursesCacheEntryComposite
{
public:
cmCursesCacheEntryComposite(const char* key);
cmCursesCacheEntryComposite(const char* key, int labelwidth, int entrywidth);
cmCursesCacheEntryComposite(const char* key,
const cmCacheManager::CacheEntry& value,
bool isNew);
bool isNew, int labelwidth, int entrywidth);
~cmCursesCacheEntryComposite();
const char* GetValue();
@ -40,6 +40,8 @@ protected:
cmCursesLabelWidget* m_IsNewLabel;
cmCursesWidget* m_Entry;
std::string m_Key;
int m_LabelWidth;
int m_EntryWidth;
};
#endif // __cmCursesCacheEntryComposite_h

View File

@ -33,8 +33,9 @@ inline int ctrl(int z)
return (z&037);
}
cmCursesMainForm::cmCursesMainForm(std::vector<std::string> const& args) :
m_Args(args)
cmCursesMainForm::cmCursesMainForm(std::vector<std::string> const& args,
int initWidth) :
m_Args(args), m_InitialWidth(initWidth)
{
m_NumberOfPages = 0;
m_Fields = 0;
@ -116,12 +117,14 @@ void cmCursesMainForm::InitializeUI()
}
}
int entrywidth = m_InitialWidth - 35;
cmCursesCacheEntryComposite* comp;
if ( count == 0 )
{
// If cache is empty, display a label saying so and a
// dummy entry widget (does not respond to input)
comp = new cmCursesCacheEntryComposite("EMPTY CACHE");
comp = new cmCursesCacheEntryComposite("EMPTY CACHE", 30, 30);
comp->m_Entry = new cmCursesDummyWidget(1, 1, 1, 1);
newEntries->push_back(comp);
}
@ -144,7 +147,8 @@ void cmCursesMainForm::InitializeUI()
if (!this->LookForCacheEntry(key))
{
newEntries->push_back(new cmCursesCacheEntryComposite(key, value,
true));
true, 30,
entrywidth));
m_OkToGenerate = false;
}
}
@ -164,7 +168,8 @@ void cmCursesMainForm::InitializeUI()
if (this->LookForCacheEntry(key))
{
newEntries->push_back(new cmCursesCacheEntryComposite(key, value,
false));
false, 30,
entrywidth));
}
}
}
@ -266,6 +271,7 @@ void cmCursesMainForm::Render(int left, int top, int width, int height)
// Wrong window size
if ( width < cmCursesMainForm::MIN_WIDTH ||
width < m_InitialWidth ||
height < cmCursesMainForm::MIN_HEIGHT )
{
return;
@ -337,6 +343,7 @@ void cmCursesMainForm::PrintKeys()
int x,y;
getmaxyx(stdscr, y, x);
if ( x < cmCursesMainForm::MIN_WIDTH ||
x < m_InitialWidth ||
y < cmCursesMainForm::MIN_HEIGHT )
{
return;
@ -405,12 +412,15 @@ void cmCursesMainForm::UpdateStatusBar()
getmaxyx(stdscr, y, x);
// If window size is too small, display error and return
if ( x < cmCursesMainForm::MIN_WIDTH ||
x < m_InitialWidth ||
y < cmCursesMainForm::MIN_HEIGHT )
{
curses_clear();
curses_move(0,0);
printw("Window is too small. A size of at least %dx%d is required.",
cmCursesMainForm::MIN_WIDTH, cmCursesMainForm::MIN_HEIGHT);
(cmCursesMainForm::MIN_WIDTH < m_InitialWidth ?
m_InitialWidth : cmCursesMainForm::MIN_WIDTH),
cmCursesMainForm::MIN_HEIGHT);
touchwin(stdscr);
wrefresh(stdscr);
return;

View File

@ -31,7 +31,7 @@ class cmCursesCacheEntryComposite;
class cmCursesMainForm : public cmCursesForm
{
public:
cmCursesMainForm(std::vector<std::string> const& args);
cmCursesMainForm(std::vector<std::string> const& args, int initwidth);
virtual ~cmCursesMainForm();
/**
@ -129,6 +129,7 @@ protected:
// Number of pages displayed
int m_NumberOfPages;
int m_InitialWidth;
};
#endif // __cmCursesMainForm_h