Character* ScreenWindow::getImage()
{
    // reallocate internal buffer if the window size has changed
    int size = windowLines() * windowColumns();
    if (_windowBuffer == 0 || _windowBufferSize != size)
    {
        delete[] _windowBuffer;
        _windowBufferSize = size;
        _windowBuffer = new Character[size];
        _bufferNeedsUpdate = true;
    }

     if (!_bufferNeedsUpdate)
        return _windowBuffer;

    _screen->getImage(_windowBuffer,size,
                      currentLine(),endWindowLine());

    // this window may look beyond the end of the screen, in which
    // case there will be an unused area which needs to be filled
    // with blank characters
    fillUnusedArea();

    _bufferNeedsUpdate = false;
    return _windowBuffer;
}
void ScreenWindow::setSelectionEnd( int column , int line )
{
    _screen->setSelectionEnd( column , qMin(line + currentLine(),endWindowLine()) );

    _bufferNeedsUpdate = true;
    emit selectionChanged();
}
void ScreenWindow::setSelectionStart( int column , int line , bool columnMode )
{
    _screen->setSelectionStart( column , qMin(line + currentLine(),endWindowLine())  , columnMode);

    _bufferNeedsUpdate = true;
    emit selectionChanged();
}
QVector<LineProperty> ScreenWindow::getLineProperties()
{
    QVector<LineProperty> result = _screen->getLineProperties(currentLine(),endWindowLine());

    if (result.count() != windowLines())
        result.resize(windowLines());

    return result;
}
示例#5
0
void ScreenWindow::setSelectionStart( int column , int line , bool columnMode )
{
	#warning "FIXME: The columnMode parameter is handled correctly when visually selecting an area, but copy/select and paste produces the wrong results."

    _screen->setSelectionStart( column , qMin(line + _currentLine,endWindowLine())  , columnMode);
	
	_bufferNeedsUpdate = true;
    emit selectionChanged();
}
bool ScreenWindow::isSelected( int column , int line )
{
    return _screen->isSelected( column , qMin(line + currentLine(),endWindowLine()) );
}