98c51ff6dc
This moves the version numbers into an isolated configured header so that not all of CMake needs to rebuild when the version changes. Previously we had spaces, dashes and/or the word 'patch' randomly chosen before the patch number. Now we always report version numbers in the traditional format "<major>.<minor>.<patch>[-rc<rc>]". We still use odd minor numbers for development versions. Now we also use the CCYYMMDD date as the patch number of development versions, thus allowing tests for exact CMake versions.
213 lines
4.7 KiB
C++
213 lines
4.7 KiB
C++
/*=========================================================================
|
|
|
|
Program: CMake - Cross-Platform Makefile Generator
|
|
Module: $RCSfile$
|
|
Language: C++
|
|
Date: $Date$
|
|
Version: $Revision$
|
|
|
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notices for more information.
|
|
|
|
=========================================================================*/
|
|
#include "../cmCacheManager.h"
|
|
#include "../cmSystemTools.h"
|
|
#include "../cmake.h"
|
|
#include "../cmVersion.h"
|
|
#include "cmCursesLongMessageForm.h"
|
|
#include "cmCursesMainForm.h"
|
|
|
|
inline int ctrl(int z)
|
|
{
|
|
return (z&037);
|
|
}
|
|
|
|
cmCursesLongMessageForm::cmCursesLongMessageForm(std::vector<std::string>
|
|
const& messages, const char*
|
|
title)
|
|
{
|
|
// Append all messages into on big string
|
|
std::vector<std::string>::const_iterator it;
|
|
for(it=messages.begin(); it != messages.end(); it++)
|
|
{
|
|
this->Messages += (*it);
|
|
// Add one blank line after each message
|
|
this->Messages += "\n\n";
|
|
}
|
|
this->Title = title;
|
|
this->Fields[0] = 0;
|
|
this->Fields[1] = 0;
|
|
}
|
|
|
|
cmCursesLongMessageForm::~cmCursesLongMessageForm()
|
|
{
|
|
if (this->Fields[0])
|
|
{
|
|
free_field(this->Fields[0]);
|
|
}
|
|
}
|
|
|
|
|
|
void cmCursesLongMessageForm::UpdateStatusBar()
|
|
{
|
|
int x,y;
|
|
getmaxyx(stdscr, y, x);
|
|
|
|
char bar[cmCursesMainForm::MAX_WIDTH];
|
|
int size = strlen(this->Title.c_str());
|
|
if ( size >= cmCursesMainForm::MAX_WIDTH )
|
|
{
|
|
size = cmCursesMainForm::MAX_WIDTH-1;
|
|
}
|
|
strncpy(bar, this->Title.c_str(), size);
|
|
for(int i=size-1; i<cmCursesMainForm::MAX_WIDTH; i++) bar[i] = ' ';
|
|
|
|
int width;
|
|
if (x < cmCursesMainForm::MAX_WIDTH )
|
|
{
|
|
width = x;
|
|
}
|
|
else
|
|
{
|
|
width = cmCursesMainForm::MAX_WIDTH;
|
|
}
|
|
|
|
bar[width] = '\0';
|
|
|
|
char version[cmCursesMainForm::MAX_WIDTH];
|
|
char vertmp[128];
|
|
sprintf(vertmp,"CMake Version %s", cmVersion::GetCMakeVersion());
|
|
int sideSpace = (width-strlen(vertmp));
|
|
for(int i=0; i<sideSpace; i++) { version[i] = ' '; }
|
|
sprintf(version+sideSpace, "%s", vertmp);
|
|
version[width] = '\0';
|
|
|
|
curses_move(y-4,0);
|
|
attron(A_STANDOUT);
|
|
printw(bar);
|
|
attroff(A_STANDOUT);
|
|
curses_move(y-3,0);
|
|
printw(version);
|
|
pos_form_cursor(this->Form);
|
|
}
|
|
|
|
void cmCursesLongMessageForm::PrintKeys()
|
|
{
|
|
int x,y;
|
|
getmaxyx(stdscr, y, x);
|
|
if ( x < cmCursesMainForm::MIN_WIDTH ||
|
|
y < cmCursesMainForm::MIN_HEIGHT )
|
|
{
|
|
return;
|
|
}
|
|
char firstLine[512];
|
|
sprintf(firstLine, "Press [e] to exit help");
|
|
|
|
curses_move(y-2,0);
|
|
printw(firstLine);
|
|
pos_form_cursor(this->Form);
|
|
|
|
}
|
|
|
|
void cmCursesLongMessageForm::Render(int, int, int, int)
|
|
{
|
|
int x,y;
|
|
getmaxyx(stdscr, y, x);
|
|
|
|
if (this->Form)
|
|
{
|
|
unpost_form(this->Form);
|
|
free_form(this->Form);
|
|
this->Form = 0;
|
|
}
|
|
|
|
const char* msg = this->Messages.c_str();
|
|
|
|
curses_clear();
|
|
|
|
if (this->Fields[0])
|
|
{
|
|
free_field(this->Fields[0]);
|
|
this->Fields[0] = 0;
|
|
}
|
|
|
|
this->Fields[0] = new_field(y-6, x-2, 1, 1, 0, 0);
|
|
|
|
field_opts_off(this->Fields[0], O_STATIC);
|
|
|
|
this->Form = new_form(this->Fields);
|
|
post_form(this->Form);
|
|
|
|
int i=0;
|
|
form_driver(this->Form, REQ_BEG_FIELD);
|
|
while(msg[i] != '\0' && i < 60000)
|
|
{
|
|
if (msg[i] == '\n' && msg[i+1] != '\0')
|
|
{
|
|
form_driver(this->Form, REQ_NEW_LINE);
|
|
}
|
|
else
|
|
{
|
|
form_driver(this->Form, msg[i]);
|
|
}
|
|
i++;
|
|
}
|
|
form_driver(this->Form, REQ_BEG_FIELD);
|
|
|
|
this->UpdateStatusBar();
|
|
this->PrintKeys();
|
|
touchwin(stdscr);
|
|
refresh();
|
|
|
|
}
|
|
|
|
void cmCursesLongMessageForm::HandleInput()
|
|
{
|
|
if (!this->Form)
|
|
{
|
|
return;
|
|
}
|
|
|
|
char debugMessage[128];
|
|
|
|
for(;;)
|
|
{
|
|
int key = getch();
|
|
|
|
sprintf(debugMessage, "Message widget handling input, key: %d", key);
|
|
cmCursesForm::LogMessage(debugMessage);
|
|
|
|
// quit
|
|
if ( key == 'o' || key == 'e' )
|
|
{
|
|
break;
|
|
}
|
|
else if ( key == KEY_DOWN || key == ctrl('n') )
|
|
{
|
|
form_driver(this->Form, REQ_SCR_FLINE);
|
|
}
|
|
else if ( key == KEY_UP || key == ctrl('p') )
|
|
{
|
|
form_driver(this->Form, REQ_SCR_BLINE);
|
|
}
|
|
else if ( key == KEY_NPAGE || key == ctrl('d') )
|
|
{
|
|
form_driver(this->Form, REQ_SCR_FPAGE);
|
|
}
|
|
else if ( key == KEY_PPAGE || key == ctrl('u') )
|
|
{
|
|
form_driver(this->Form, REQ_SCR_BPAGE);
|
|
}
|
|
|
|
this->UpdateStatusBar();
|
|
this->PrintKeys();
|
|
touchwin(stdscr);
|
|
wrefresh(stdscr);
|
|
}
|
|
|
|
}
|