Commit 5095cbb3 authored by Gustavo Carneiro's avatar Gustavo Carneiro

Move CompactHistoryScroll class to a new file.

parent bbd9e834
......@@ -81,6 +81,7 @@ set(konsoleprivate_SRCS ${sessionadaptors_SRCS}
CompactHistoryBlock.cpp
CompactHistoryBlockList.cpp
CompactHistoryLine.cpp
CompactHistoryScroll.cpp
HistorySizeDialog.cpp
widgets/HistorySizeWidget.cpp
widgets/IncrementalSearchBar.cpp
......
/*
This file is part of Konsole, an X terminal.
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
*/
// Own
#include "CompactHistoryScroll.h"
#include "History.h"
using namespace Konsole;
CompactHistoryScroll::CompactHistoryScroll(unsigned int maxLineCount) :
HistoryScroll(new CompactHistoryType(maxLineCount)),
_lines(),
_blockList(),
_maxLineCount(0)
{
////qDebug() << "scroll of length " << maxLineCount << " created";
setMaxNbLines(maxLineCount);
}
CompactHistoryScroll::~CompactHistoryScroll()
{
qDeleteAll(_lines.begin(), _lines.end());
_lines.clear();
}
void CompactHistoryScroll::addCellsVector(const TextLine &cells)
{
CompactHistoryLine *line;
line = new(_blockList) CompactHistoryLine(cells, _blockList);
if (_lines.size() > static_cast<int>(_maxLineCount)) {
delete _lines.takeAt(0);
}
_lines.append(line);
}
void CompactHistoryScroll::addCells(const Character a[], int count)
{
TextLine newLine(count);
std::copy(a, a + count, newLine.begin());
addCellsVector(newLine);
}
void CompactHistoryScroll::addLine(bool previousWrapped)
{
CompactHistoryLine *line = _lines.last();
////qDebug() << "last line at address " << line;
line->setWrapped(previousWrapped);
}
int CompactHistoryScroll::getLines()
{
return _lines.size();
}
int CompactHistoryScroll::getLineLen(int lineNumber)
{
if ((lineNumber < 0) || (lineNumber >= _lines.size())) {
//qDebug() << "requested line invalid: 0 < " << lineNumber << " < " <<_lines.size();
//Q_ASSERT(lineNumber >= 0 && lineNumber < _lines.size());
return 0;
}
CompactHistoryLine *line = _lines[lineNumber];
////qDebug() << "request for line at address " << line;
return line->getLength();
}
void CompactHistoryScroll::getCells(int lineNumber, int startColumn, int count, Character buffer[])
{
if (count == 0) {
return;
}
Q_ASSERT(lineNumber < _lines.size());
CompactHistoryLine *line = _lines[lineNumber];
Q_ASSERT(startColumn >= 0);
Q_ASSERT(static_cast<unsigned int>(startColumn) <= line->getLength() - count);
line->getCharacters(buffer, count, startColumn);
}
void CompactHistoryScroll::setMaxNbLines(unsigned int lineCount)
{
_maxLineCount = lineCount;
while (_lines.size() > static_cast<int>(lineCount)) {
delete _lines.takeAt(0);
}
////qDebug() << "set max lines to: " << _maxLineCount;
}
bool CompactHistoryScroll::isWrappedLine(int lineNumber)
{
Q_ASSERT(lineNumber < _lines.size());
return _lines[lineNumber]->isWrapped();
}
/*
This file is part of Konsole, an X terminal.
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
*/
#ifndef COMPACTHISTORYSCROLL_H
#define COMPACTHISTORYSCROLL_H
#include "konsoleprivate_export.h"
#include "HistoryScroll.h"
#include "CompactHistoryLine.h"
namespace Konsole
{
class KONSOLEPRIVATE_EXPORT CompactHistoryScroll : public HistoryScroll
{
typedef QList<CompactHistoryLine *> HistoryArray;
public:
explicit CompactHistoryScroll(unsigned int maxLineCount = 1000);
~CompactHistoryScroll() override;
int getLines() override;
int getLineLen(int lineNumber) override;
void getCells(int lineNumber, int startColumn, int count, Character buffer[]) override;
bool isWrappedLine(int lineNumber) override;
void addCells(const Character a[], int count) override;
void addCellsVector(const TextLine &cells) override;
void addLine(bool previousWrapped = false) override;
void setMaxNbLines(unsigned int lineCount);
private:
bool hasDifferentColors(const TextLine &line) const;
HistoryArray _lines;
CompactHistoryBlockList _blockList;
unsigned int _maxLineCount;
};
}
#endif
......@@ -60,92 +60,6 @@ using namespace Konsole;
at constant costs.
*/
CompactHistoryScroll::CompactHistoryScroll(unsigned int maxLineCount) :
HistoryScroll(new CompactHistoryType(maxLineCount)),
_lines(),
_blockList(),
_maxLineCount(0)
{
////qDebug() << "scroll of length " << maxLineCount << " created";
setMaxNbLines(maxLineCount);
}
CompactHistoryScroll::~CompactHistoryScroll()
{
qDeleteAll(_lines.begin(), _lines.end());
_lines.clear();
}
void CompactHistoryScroll::addCellsVector(const TextLine &cells)
{
CompactHistoryLine *line;
line = new(_blockList) CompactHistoryLine(cells, _blockList);
if (_lines.size() > static_cast<int>(_maxLineCount)) {
delete _lines.takeAt(0);
}
_lines.append(line);
}
void CompactHistoryScroll::addCells(const Character a[], int count)
{
TextLine newLine(count);
std::copy(a, a + count, newLine.begin());
addCellsVector(newLine);
}
void CompactHistoryScroll::addLine(bool previousWrapped)
{
CompactHistoryLine *line = _lines.last();
////qDebug() << "last line at address " << line;
line->setWrapped(previousWrapped);
}
int CompactHistoryScroll::getLines()
{
return _lines.size();
}
int CompactHistoryScroll::getLineLen(int lineNumber)
{
if ((lineNumber < 0) || (lineNumber >= _lines.size())) {
//qDebug() << "requested line invalid: 0 < " << lineNumber << " < " <<_lines.size();
//Q_ASSERT(lineNumber >= 0 && lineNumber < _lines.size());
return 0;
}
CompactHistoryLine *line = _lines[lineNumber];
////qDebug() << "request for line at address " << line;
return line->getLength();
}
void CompactHistoryScroll::getCells(int lineNumber, int startColumn, int count, Character buffer[])
{
if (count == 0) {
return;
}
Q_ASSERT(lineNumber < _lines.size());
CompactHistoryLine *line = _lines[lineNumber];
Q_ASSERT(startColumn >= 0);
Q_ASSERT(static_cast<unsigned int>(startColumn) <= line->getLength() - count);
line->getCharacters(buffer, count, startColumn);
}
void CompactHistoryScroll::setMaxNbLines(unsigned int lineCount)
{
_maxLineCount = lineCount;
while (_lines.size() > static_cast<int>(lineCount)) {
delete _lines.takeAt(0);
}
////qDebug() << "set max lines to: " << _maxLineCount;
}
bool CompactHistoryScroll::isWrappedLine(int lineNumber)
{
Q_ASSERT(lineNumber < _lines.size());
return _lines[lineNumber]->isWrapped();
}
//////////////////////////////////////////////////////////////////////
// History Types
//////////////////////////////////////////////////////////////////////
......
......@@ -40,6 +40,7 @@
#include "CompactHistoryBlock.h"
#include "CompactHistoryBlockList.h"
#include "CompactHistoryLine.h"
#include "CompactHistoryScroll.h"
// Konsole
#include "Character.h"
......@@ -52,33 +53,6 @@ namespace Konsole {
// where history lines are allocated in (avoids heap fragmentation)
//////////////////////////////////////////////////////////////////////
class KONSOLEPRIVATE_EXPORT CompactHistoryScroll : public HistoryScroll
{
typedef QList<CompactHistoryLine *> HistoryArray;
public:
explicit CompactHistoryScroll(unsigned int maxLineCount = 1000);
~CompactHistoryScroll() override;
int getLines() override;
int getLineLen(int lineNumber) override;
void getCells(int lineNumber, int startColumn, int count, Character buffer[]) override;
bool isWrappedLine(int lineNumber) override;
void addCells(const Character a[], int count) override;
void addCellsVector(const TextLine &cells) override;
void addLine(bool previousWrapped = false) override;
void setMaxNbLines(unsigned int lineCount);
private:
bool hasDifferentColors(const TextLine &line) const;
HistoryArray _lines;
CompactHistoryBlockList _blockList;
unsigned int _maxLineCount;
};
//////////////////////////////////////////////////////////////////////
// History type
//////////////////////////////////////////////////////////////////////
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment