summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/TEHistory.cpp29
-rw-r--r--core/apps/embeddedkonsole/TEScreen.cpp415
-rw-r--r--core/apps/embeddedkonsole/TEWidget.cpp169
-rw-r--r--core/apps/embeddedkonsole/TEWidget.h15
-rw-r--r--core/apps/embeddedkonsole/TEmulation.cpp43
-rw-r--r--core/apps/embeddedkonsole/konsole.cpp34
6 files changed, 491 insertions, 214 deletions
diff --git a/core/apps/embeddedkonsole/TEHistory.cpp b/core/apps/embeddedkonsole/TEHistory.cpp
index 317ce57..db9d10c 100644
--- a/core/apps/embeddedkonsole/TEHistory.cpp
+++ b/core/apps/embeddedkonsole/TEHistory.cpp
@@ -11,7 +11,7 @@
/* -------------------------------------------------------------------------- */
-/* */
+/* */
/* Ported Konsole to Qt/Embedded */
-/* */
+/* */
/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
-/* */
+/* */
/* -------------------------------------------------------------------------- */
@@ -119,4 +119,6 @@ void HistoryBuffer::add(const unsigned char* bytes, int len)
assert(hasScroll());
- rc = lseek(ion,length,SEEK_SET); if (rc < 0) { perror("HistoryBuffer::add.seek"); setScroll(FALSE); return; }
- rc = write(ion,bytes,len); if (rc < 0) { perror("HistoryBuffer::add.write"); setScroll(FALSE); return; }
+ rc = lseek( ion, length, SEEK_SET);
+ if (rc < 0) { perror("HistoryBuffer::add.seek"); setScroll(FALSE); return; }
+ rc = write( ion, bytes, len);
+ if (rc < 0) { perror("HistoryBuffer::add.write"); setScroll(FALSE); return; }
length += rc;
@@ -124,9 +126,13 @@ void HistoryBuffer::add(const unsigned char* bytes, int len)
-void HistoryBuffer::get(unsigned char* bytes, int len, int loc)
-{ int rc;
+void HistoryBuffer::get(unsigned char* bytes, int len, int loc) {
+ int rc;
assert(hasScroll());
+// qDebug("history get len %d, loc %d, length %d", len, loc, length);
if (loc < 0 || len < 0 || loc + len > length)
- fprintf(stderr,"getHist(...,%d,%d): invalid args.\n",len,loc);
- rc = lseek(ion,loc,SEEK_SET); if (rc < 0) { perror("HistoryBuffer::get.seek"); setScroll(FALSE); return; }
- rc = read(ion,bytes,len); if (rc < 0) { perror("HistoryBuffer::get.read"); setScroll(FALSE); return; }
+ fprintf(stderr,"getHist(...,%d,%d): invalid args.\n",len,loc);
+
+ rc = lseek( ion, loc, SEEK_SET);
+ if (rc < 0) { perror("HistoryBuffer::get.seek"); setScroll(FALSE); return; }
+ rc = read( ion, bytes, len);
+ if (rc < 0) { perror("HistoryBuffer::get.read"); setScroll(FALSE); return; }
}
@@ -197,3 +203,4 @@ void HistoryScroll::getCells(int lineno, int colno, int count, ca res[])
assert(hasScroll());
- cells.get((unsigned char*)res,count*sizeof(ca),startOfLine(lineno)+colno*sizeof(ca));
+//get(unsigned char* bytes, int len, int loc)
+ cells.get( (unsigned char*)res, count * sizeof(ca), startOfLine( lineno) + colno * sizeof(ca) );
}
diff --git a/core/apps/embeddedkonsole/TEScreen.cpp b/core/apps/embeddedkonsole/TEScreen.cpp
index a3d115d..50807d3 100644
--- a/core/apps/embeddedkonsole/TEScreen.cpp
+++ b/core/apps/embeddedkonsole/TEScreen.cpp
@@ -11,8 +11,9 @@
/* -------------------------------------------------------------------------- */
-/* */
+/* */
/* Ported Konsole to Qt/Embedded */
-/* */
+/* */
/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
-/* */
+/* */
/* -------------------------------------------------------------------------- */
+// enhancements added by L.J. Potter <ljp@llornkcor.com>
@@ -52,2 +53,3 @@
+#include <qpe/config.h>
#include "TEScreen.h"
@@ -60,3 +62,3 @@
-#define loc(X,Y) ((Y)*columns+(X))
+#define loc(X,Y) ((Y) * columns + (X))
@@ -69,3 +71,4 @@ TEScreen::TEScreen(int lines, int columns)
this->columns = columns;
-
+// qDebug("Columns %d", columns);
+
image = (ca*) malloc(lines*columns*sizeof(ca));
@@ -74,2 +77,3 @@ TEScreen::TEScreen(int lines, int columns)
histCursor = 0;
+ horzCursor = 0;
@@ -385,49 +389,45 @@ void TEScreen::resizeImage(int new_lines, int new_columns)
{
-
- if (cuY > new_lines-1)
- { // attempt to preserve focus and lines
- bmargin = lines-1; //FIXME: margin lost
- for (int i = 0; i < cuY-(new_lines-1); i++)
- {
- addHistLine(); scrollUp(0,1);
+ if (cuY > new_lines-1) {
+// attempt to preserve focus and lines
+ bmargin = lines-1; //FIXME: margin lost
+ for (int i = 0; i < cuY-(new_lines-1); i++) {
+ addHistLine(); scrollUp(horzCursor,1);
+ }
}
- }
- // make new image
- ca* newimg = (ca*)malloc(new_lines*new_columns*sizeof(ca));
+ // make new image
+ ca* newimg = (ca*)malloc( new_lines * new_columns * sizeof( ca));
- clearSelection();
-
- // clear new image
- for (int y = 0; y < new_lines; y++)
- for (int x = 0; x < new_columns; x++)
- {
- newimg[y*new_columns+x].c = ' ';
- newimg[y*new_columns+x].f = DEFAULT_FORE_COLOR;
- newimg[y*new_columns+x].b = DEFAULT_BACK_COLOR;
- newimg[y*new_columns+x].r = DEFAULT_RENDITION;
- }
- int cpy_lines = QMIN(new_lines, lines);
- int cpy_columns = QMIN(new_columns,columns);
- // copy to new image
- for (int y = 0; y < cpy_lines; y++)
- for (int x = 0; x < cpy_columns; x++)
- {
- newimg[y*new_columns+x].c = image[loc(x,y)].c;
- newimg[y*new_columns+x].f = image[loc(x,y)].f;
- newimg[y*new_columns+x].b = image[loc(x,y)].b;
- newimg[y*new_columns+x].r = image[loc(x,y)].r;
- }
- free(image);
- image = newimg;
- lines = new_lines;
- columns = new_columns;
- cuX = QMIN(cuX,columns-1);
- cuY = QMIN(cuY,lines-1);
+ clearSelection();
- // FIXME: try to keep values, evtl.
- tmargin=0;
- bmargin=lines-1;
- initTabStops();
- clearSelection();
+ // clear new image
+ for (int y = 0; y < new_lines; y++)
+ for (int x = 0; x < new_columns; x++) {
+ newimg[y*new_columns+x].c = ' ';
+ newimg[y*new_columns+x].f = DEFAULT_FORE_COLOR;
+ newimg[y*new_columns+x].b = DEFAULT_BACK_COLOR;
+ newimg[y*new_columns+x].r = DEFAULT_RENDITION;
+ }
+ int cpy_lines = QMIN(new_lines, lines);
+ int cpy_columns = QMIN(new_columns,columns);
+ // copy to new image
+ for (int y = 0; y < cpy_lines; y++)
+ for (int x = 0; x < cpy_columns; x++) {
+ newimg[y*new_columns+x].c = image[loc(x,y)].c;
+ newimg[y*new_columns+x].f = image[loc(x,y)].f;
+ newimg[y*new_columns+x].b = image[loc(x,y)].b;
+ newimg[y*new_columns+x].r = image[loc(x,y)].r;
+ }
+ free(image);
+ image = newimg;
+ lines = new_lines;
+ columns = new_columns;
+ cuX = QMIN(cuX,columns-1);
+ cuY = QMIN(cuY,lines-1);
+
+ // FIXME: try to keep values, evtl.
+ tmargin=0;
+ bmargin=lines-1;
+ initTabStops();
+ clearSelection();
}
@@ -507,3 +507,4 @@ void TEScreen::effectiveRendition()
ca* TEScreen::getCookedImage()
-{ int x,y;
+{
+ int x,y;
ca* merged = (ca*)malloc(lines*columns*sizeof(ca));
@@ -550,2 +551,61 @@ ca* TEScreen::getCookedImage()
return merged;
+
+ /*
+ int x, y, z;
+
+ ca* merged = (ca*)malloc( lines * columns * sizeof( ca));
+
+ ca dft(' ',DEFAULT_FORE_COLOR,DEFAULT_BACK_COLOR,DEFAULT_RENDITION);
+
+// qDebug("hist lines %d, historyCursor %d, minus %d ,lines %d, columns %d",
+// hist.getLines(), histCursor, hist.getLines() - histCursor , lines, columns);
+ for (y = 0; (y < lines) && (y < ( hist.getLines() - histCursor )); y++) {
+
+ int len = QMIN( columns, hist.getLineLen( y + histCursor) );
+ int yp = y * columns;
+ int yq = ( y + histCursor) * columns;
+// qDebug("horzCursor %d, columns %d, len %d", horzCursor, columns, len);
+// qDebug("lineno %d, colno %d, count %d\n", y + histCursor, (horzCursor / 2), len );
+ qDebug("Y %d", y);
+ hist.getCells( y + histCursor, (horzCursor / 2), len, merged + yp);
+
+ for (x = len; x < columns; x++)
+ merged[yp + x] = dft;
+ for (x = 0; x < columns; x++) {
+ int p = x + yp; int q = x + yq;
+ if ( ( q >= sel_TL ) && ( q <= sel_BR ) )
+ reverseRendition(&merged[p]); // for selection
+ }
+ }
+
+ if (lines >= hist.getLines() - histCursor) {
+ for (y = ( hist.getLines() - histCursor); y < lines ; y++) {
+ int z = horzCursor;
+ int yp = y * columns;
+ int yq = ( y + histCursor) * columns;
+ int yr = ( y - hist.getLines() + histCursor) * columns;
+// qDebug("y %d, yp %d, yq %d, columns %d, z cursor %d", y, yp, yq, columns, z);
+ for (x = 0; x < columns; x++) {
+ int p = x + yp; int q = x + yq; int r = (x + (horzCursor/2) ) + yr;
+ merged[p] = image[r];
+ if ( q >= sel_TL && q <= sel_BR )
+ reverseRendition( &merged[p]); // for selection
+ }
+ }
+ }
+
+
+// evtl. inverse display
+ if (getMode(MODE_Screen))
+ { int i, n = lines * columns;
+ for (i = 0; i < n; i++)
+ reverseRendition( &merged[i]); // for reverse display
+ }
+ if (getMode(MODE_Cursor) && ( cuY + ( hist.getLines() - histCursor) < lines)) // cursor visible
+
+ reverseRendition( &merged[ loc( cuX, cuY + ( hist.getLines() - histCursor))] );
+
+ return merged;
+ */
+
}
@@ -558,3 +618,8 @@ void TEScreen::reset()
{
+ Config cfg("Konsole");
+ cfg.setGroup("ScrollBar");
+ if( !cfg.readBoolEntry("HorzScroll",0) )
setMode(MODE_Wrap ); saveMode(MODE_Wrap ); // wrap at end of margin
+
+
resetMode(MODE_Origin); saveMode(MODE_Origin); // position refere to [1,1]
@@ -660,3 +725,4 @@ void TEScreen::ShowCharacter(unsigned short c)
{
- if (getMode(MODE_Wrap)) NextLine(); else cuX = columns-1;
+ if (getMode(MODE_Wrap)) NextLine(); else cuX = columns - 1;
+ // comment out for no wrap
}
@@ -665,3 +731,3 @@ void TEScreen::ShowCharacter(unsigned short c)
- int i = loc(cuX,cuY);
+ int i = loc( cuX, cuY);
@@ -687,6 +753,7 @@ void TEScreen::scrollUp(int from, int n)
{
- if (n <= 0 || from + n > bmargin) return;
+ if (n <= 0 || from + n > bmargin) return;
//FIXME: make sure `tmargin', `bmargin', `from', `n' is in bounds.
- moveImage(loc(0,from),loc(0,from+n),loc(columns-1,bmargin));
- clearImage(loc(0,bmargin-n+1),loc(columns-1,bmargin),' ');
+
+ moveImage( loc( 0, from), loc( 0, from + n), loc( columns - 1, bmargin));
+ clearImage( loc( 0, bmargin - n + 1), loc( columns - 1, bmargin), ' ');
}
@@ -700,7 +767,9 @@ void TEScreen::scrollDown(int from, int n)
{
+
//FIXME: make sure `tmargin', `bmargin', `from', `n' is in bounds.
- if (n <= 0) return;
+ if (n <= 0) return;
if (from > bmargin) return;
if (from + n > bmargin) n = bmargin - from;
- moveImage(loc(0,from+n),loc(0,from),loc(columns-1,bmargin-n));
+
+ moveImage( loc(0,from+n), loc(0,from), loc(columns-1,bmargin-n));
clearImage(loc(0,from),loc(columns-1,from+n-1),' ');
@@ -708,2 +777,4 @@ void TEScreen::scrollDown(int from, int n)
+
+
/*! position the cursor to a specific line and column. */
@@ -873,3 +944,3 @@ void TEScreen::clearEntireLine()
{
- clearImage(loc(0,cuY),loc(columns-1,cuY),' ');
+ clearImage( loc( 0, cuY),loc( columns - 1, cuY),' ');
}
@@ -990,4 +1061,4 @@ QString TEScreen::getSelText(const BOOL preserve_line_breaks)
- int *m; // buffer to fill.
- int s, d; // source index, dest. index.
+ int *m; // buffer to fill.
+ int s, d; // source index, dest. index.
int hist_BR = loc(0, hist.getLines());
@@ -995,8 +1066,8 @@ QString TEScreen::getSelText(const BOOL preserve_line_breaks)
int hX = sel_TL % columns;
- int eol; // end of line
+ int eol; // end of line
- s = sel_TL; // tracks copy in source.
+ s = sel_TL; // tracks copy in source.
- // allocate buffer for maximum
- // possible size...
+ // allocate buffer for maximum
+ // possible size...
d = (sel_BR - sel_TL) / columns + 1;
@@ -1008,99 +1079,99 @@ QString TEScreen::getSelText(const BOOL preserve_line_breaks)
if (s < hist_BR)
- { // get lines from hist.history
- // buffer.
- eol = hist.getLineLen(hY);
-
- if ((hY == (sel_BR / columns)) &&
- (eol >= (sel_BR % columns)))
- {
- eol = sel_BR % columns + 1;
- }
-
- while (hX < eol)
- {
- m[d++] = hist.getCell(hY, hX++).c;
- s++;
- }
-
- if (s <= sel_BR)
- {
- // The line break handling
- // It's different from the screen
- // image case!
- if (eol % columns == 0)
- {
- // That's either a completely filled
- // line or an empty line
- if (eol == 0)
- {
- m[d++] = '\n';
- }
- else
- {
- // We have a full line.
- // FIXME: How can we handle newlines
- // at this position?!
- }
- }
- else if ((eol + 1) % columns == 0)
- {
- // FIXME: We don't know if this was a
- // space at the last position or a
- // short line!!
- m[d++] = ' ';
- }
- else
- {
- // We have a short line here. Put a
- // newline or a space into the
- // buffer.
- m[d++] = preserve_line_breaks ? '\n' : ' ';
- }
- }
-
- hY++;
- hX = 0;
- s = hY * columns;
- }
+ { // get lines from hist.history
+ // buffer.
+ eol = hist.getLineLen(hY);
+
+ if ((hY == (sel_BR / columns)) &&
+ (eol >= (sel_BR % columns)))
+ {
+ eol = sel_BR % columns + 1;
+ }
+
+ while (hX < eol)
+ {
+ m[d++] = hist.getCell(hY, hX++).c;
+ s++;
+ }
+
+ if (s <= sel_BR)
+ {
+ // The line break handling
+ // It's different from the screen
+ // image case!
+ if (eol % columns == 0)
+ {
+ // That's either a completely filled
+ // line or an empty line
+ if (eol == 0)
+ {
+ m[d++] = '\n';
+ }
+ else
+ {
+ // We have a full line.
+ // FIXME: How can we handle newlines
+ // at this position?!
+ }
+ }
+ else if ((eol + 1) % columns == 0)
+ {
+ // FIXME: We don't know if this was a
+ // space at the last position or a
+ // short line!!
+ m[d++] = ' ';
+ }
+ else
+ {
+ // We have a short line here. Put a
+ // newline or a space into the
+ // buffer.
+ m[d++] = preserve_line_breaks ? '\n' : ' ';
+ }
+ }
+
+ hY++;
+ hX = 0;
+ s = hY * columns;
+ }
else
- { // or from screen image.
- eol = (s / columns + 1) * columns - 1;
-
- if (eol < sel_BR)
- {
- while ((eol > s) &&
- isspace(image[eol - hist_BR].c))
- {
- eol--;
- }
- }
- else
- {
- eol = sel_BR;
- }
-
- while (s <= eol)
- {
- m[d++] = image[s++ - hist_BR].c;
- }
-
- if (eol < sel_BR)
- {
- // eol processing see below ...
- if ((eol + 1) % columns == 0)
- {
- if (image[eol - hist_BR].c == ' ')
- {
- m[d++] = ' ';
- }
- }
- else
- {
- m[d++] = ((preserve_line_breaks ||
- ((eol % columns) == 0)) ?
- '\n' : ' ');
- }
- }
-
- s = (eol / columns + 1) * columns;
+ { // or from screen image.
+ eol = (s / columns + 1) * columns - 1;
+
+ if (eol < sel_BR)
+ {
+ while ((eol > s) &&
+ isspace(image[eol - hist_BR].c))
+ {
+ eol--;
+ }
+ }
+ else
+ {
+ eol = sel_BR;
+ }
+
+ while (s <= eol)
+ {
+ m[d++] = image[s++ - hist_BR].c;
+ }
+
+ if (eol < sel_BR)
+ {
+ // eol processing see below ...
+ if ((eol + 1) % columns == 0)
+ {
+ if (image[eol - hist_BR].c == ' ')
+ {
+ m[d++] = ' ';
+ }
+ }
+ else
+ {
+ m[d++] = ((preserve_line_breaks ||
+ ((eol % columns) == 0)) ?
+ '\n' : ' ');
+ }
+ }
+
+ s = (eol / columns + 1) * columns;
}
@@ -1131,4 +1202,4 @@ cases:
FIXME:
- * this suppresses \n for command output that is
- sized to the exact column width of the screen.
+ * this suppresses \n for command output that is
+ sized to the exact column width of the screen.
@@ -1140,3 +1211,3 @@ FIXME:
-3) else --> partially filled line
+3) else --> partially filled line
insert a \n in preserve line break mode, else a space
@@ -1154,6 +1225,6 @@ void TEScreen::addHistLine()
- if (hasScroll())
- { ca dft;
+ if (hasScroll()){
+ ca dft;
- int end = columns-1;
+ int end = columns - 1;
while (end >= 0 && image[end] == dft)
@@ -1161,3 +1232,3 @@ void TEScreen::addHistLine()
- hist.addCells(image,end+1);
+ hist.addCells( image, end + 1);
hist.addLine();
@@ -1165,3 +1236,3 @@ void TEScreen::addHistLine()
// adjust history cursor
- histCursor += (hist.getLines()-1 == histCursor);
+ histCursor += ( hist.getLines() - 1 == histCursor);
}
@@ -1176,2 +1247,7 @@ void TEScreen::setHistCursor(int cursor)
+void TEScreen::setHorzCursor(int cursor)
+{
+ horzCursor = cursor;
+}
+
int TEScreen::getHistCursor()
@@ -1181,2 +1257,7 @@ int TEScreen::getHistCursor()
+int TEScreen::getHorzCursor()
+{
+ return horzCursor;
+}
+
int TEScreen::getHistLines()
diff --git a/core/apps/embeddedkonsole/TEWidget.cpp b/core/apps/embeddedkonsole/TEWidget.cpp
index b1ad008..c10c7a8 100644
--- a/core/apps/embeddedkonsole/TEWidget.cpp
+++ b/core/apps/embeddedkonsole/TEWidget.cpp
@@ -54,2 +54,9 @@
+#include <qpe/resource.h>
+#include <qpe/sound.h>
+
+#ifdef QWS
+#include <qpe/qcopenvelope_qws.h>
+#endif
+
#include <qcursor.h>
@@ -289,2 +296,9 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name)
+ hScrollbar = new QScrollBar(this);
+ hScrollbar->setCursor( arrowCursor );
+ hScrollbar->setOrientation(QScrollBar::Horizontal);
+ hScrollbar->setMaximumHeight(16);
+
+ connect( hScrollbar, SIGNAL(valueChanged(int)), this, SLOT( hScrollChanged(int)));
+
Config cfg("Konsole");
@@ -303,2 +317,4 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name)
+ useHorzScroll=cfg.readBoolEntry("HorzScroll",0);
+
blinkT = new QTimer(this);
@@ -317,2 +333,3 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name)
word_selection_mode = FALSE;
+ hposition = 0;
@@ -412,6 +429,3 @@ HCNT("setImage");
QChar *disstrU = new QChar[cols];
-
-//{ static int cnt = 0; printf("setImage %d\n",cnt++); }
- for (y = 0; y < lins; y++)
- {
+ for (y = 0; y < lins; y++) {
const ca* lcl = &image[y*this->columns];
@@ -590,4 +604,3 @@ void TEWidget::propagateSize()
-void TEWidget::scrollChanged(int)
-{
+void TEWidget::scrollChanged(int) {
emit changedHistoryCursor(scrollbar->value()); //expose
@@ -595,2 +608,10 @@ void TEWidget::scrollChanged(int)
+void TEWidget::hScrollChanged(int loc) {
+ hposition = loc;
+ propagateSize();
+ update();
+
+// emit changedHorzCursor( hScrollbar->value()); //expose
+}
+
void TEWidget::setScroll(int cursor, int slines)
@@ -699,2 +720,3 @@ void TEWidget::mouseMoveEvent(QMouseEvent* ev)
int scroll = scrollbar->value();
+// int hScroll = hScrollbar->value();
@@ -975,2 +997,6 @@ void TEWidget::doScroll(int lines)
+void TEWidget::doHScroll(int lines) {
+ hScrollbar->setValue( hScrollbar->value()+lines);
+}
+
bool TEWidget::eventFilter( QObject *obj, QEvent *e )
@@ -1080,3 +1106,13 @@ void TEWidget::Bell()
{
- QApplication::beep();
+//#ifdef QT_QWS_CUSTOM
+//# ifndef QT_NO_COP
+ QCopEnvelope( "QPE/TaskBar", "soundAlarm()" );
+//# endif
+//#else
+//# ifndef QT_NO_SOUND
+// QSound::play(Resource::findSound("alarm"));
+//# endif
+//#endif
+
+// QApplication::beep();
}
@@ -1107,6 +1143,76 @@ void TEWidget::calcGeometry()
{
- //FIXME: set rimX == rimY == 0 when running in full screen mode.
+ int showhscrollbar = 1;
+ int hwidth = 0;
+ int dcolumns;
+ Config cfg("Konsole");
+ cfg.setGroup("ScrollBar");
+ useHorzScroll=cfg.readBoolEntry("HorzScroll",0);
+
+ if(vcolumns == 0) showhscrollbar = 0;
+ if(showhscrollbar == 1) hwidth = QApplication::style().scrollBarExtent().width();
+
+ scrollbar->resize(QApplication::style().scrollBarExtent().width(),
+ contentsRect().height() - hwidth);
+
+ switch(scrollLoc) {
+ case SCRNONE :
+ columns = ( contentsRect().width() - 2 * rimX ) / font_w;
+ dcolumns = columns;
+ if(vcolumns) columns = vcolumns;
+ blX = (contentsRect().width() - (columns*font_w) ) / 2;
+ if(showhscrollbar)
+ blX = -hposition * font_w;
+ brX = blX;
+ scrollbar->hide();
+ break;
+ case SCRLEFT :
+ columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w;
+ dcolumns = columns;
+ if(vcolumns) columns = vcolumns;
+ brX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2;
+ if(showhscrollbar)
+ brX = -hposition * font_w;
+ blX = brX + scrollbar->width();
+ scrollbar->move(contentsRect().topLeft());
+ scrollbar->show();
+ break;
+ case SCRRIGHT:
+ columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w;
+ dcolumns = columns;
+ if(vcolumns) columns = vcolumns;
+ blX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2;
+ if(showhscrollbar)
+ blX = -hposition * font_w;
+ brX = blX;
+ scrollbar->move(contentsRect().topRight() - QPoint(scrollbar->width()-1,0));
+ scrollbar->show();
+ break;
+ }
+ //FIXME: support 'rounding' styles
+ lines = ( contentsRect().height() - 2 * rimY ) / font_h;
+ bY = (contentsRect().height() - (lines *font_h)) / 2;
- scrollbar->resize(QApplication::style().scrollBarExtent().width(),
+ if(showhscrollbar == 1) {
+ hScrollbar->resize(contentsRect().width() - hwidth, hwidth);
+ hScrollbar->setRange(0, vcolumns - dcolumns);
+
+ QPoint p = contentsRect().bottomLeft();
+ hScrollbar->move(QPoint(p.x(), p.y() - hwidth));
+ hScrollbar->show();
+ }
+ else hScrollbar->hide();
+
+ if(showhscrollbar == 1) {
+ lines = lines - (hwidth / font_h) - 1;
+ if(lines < 1) lines = 1;
+ }
+
+ /*//FIXME: set rimX == rimY == 0 when running in full screen mode.
+ Config cfg("Konsole");
+ cfg.setGroup("ScrollBar");
+ useHorzScroll=cfg.readBoolEntry("HorzScroll",0);
+
+ scrollbar->resize( QApplication::style().scrollBarExtent().width(),
contentsRect().height());
+ qDebug("font_w %d", font_w);
switch(scrollLoc)
@@ -1121,2 +1227,3 @@ void TEWidget::calcGeometry()
columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w;
+ if(useHorzScroll) columns = columns * (font_w/2);
brX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2;
@@ -1127,6 +1234,11 @@ void TEWidget::calcGeometry()
case SCRRIGHT:
- columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w;
- blX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2;
- brX = blX;
- scrollbar->move(contentsRect().topRight() - QPoint(scrollbar->width()-1,0));
+ columns = ( contentsRect().width() - 2 * rimX - scrollbar->width() ) / font_w;
+ if(useHorzScroll) columns = columns * (font_w/2);
+ blX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2;
+ if(useHorzScroll) {
+ brX = blX =2;
+ } else {
+ brX=blX;
+ }
+ scrollbar->move(contentsRect().topRight() - QPoint(scrollbar->width()-1,0) );
scrollbar->show();
@@ -1134,5 +1246,24 @@ void TEWidget::calcGeometry()
}
+
+ if( !scrollbar->isHidden())
+ hScrollbar->resize( contentsRect().width()-SCRWIDTH, QApplication::style()
+ .scrollBarExtent().height());
+ else
+ hScrollbar->resize( contentsRect().width(), QApplication::style()
+ .scrollBarExtent().height());
+
+ hScrollbar->move( 0, contentsRect().height() - SCRWIDTH);
+
+
+ if(useHorzScroll) {
+ hScrollbar->show();
+ lines = ( (contentsRect().height() - SCRWIDTH) - 2 * rimY ) / font_h;
+ bY = ((contentsRect().height() - SCRWIDTH) - (lines *font_h)) / 2;
+ } else {
+ hScrollbar->hide();
+ lines = (contentsRect().height() - 2 * rimY ) / font_h;
+ bY = (contentsRect().height() - (lines *font_h)) / 2;
+ }
+ */
//FIXME: support 'rounding' styles
- lines = ( contentsRect().height() - 2 * rimY ) / font_h;
- bY = (contentsRect().height() - (lines *font_h)) / 2;
}
@@ -1268 +1399,9 @@ void TEWidget::drop_menu_activated(int item)
+void TEWidget::setWrapAt(int columns)
+{
+ vcolumns = columns;
+ propagateSize();
+ update();
+}
+
+
diff --git a/core/apps/embeddedkonsole/TEWidget.h b/core/apps/embeddedkonsole/TEWidget.h
index 40e1aea..a480d45 100644
--- a/core/apps/embeddedkonsole/TEWidget.h
+++ b/core/apps/embeddedkonsole/TEWidget.h
@@ -62,3 +62,7 @@ public:
+ void doHScroll(int lines);
+
+
void emitSelection();
+ void setWrapAt(int columns);
@@ -78,2 +82,3 @@ public:
public:
+ bool useHorzScroll;
@@ -89,2 +94,3 @@ signals:
void changedHistoryCursor(int value);
+ void changedHorzCursor(int value);
void configureRequest( TEWidget*, int state, int x, int y );
@@ -98,3 +104,2 @@ signals:
protected:
-
virtual void styleChange( QStyle& );
@@ -149,2 +154,3 @@ protected slots:
void scrollChanged(int value);
+ void hScrollChanged(int value);
void blinkEvent();
@@ -182,5 +188,8 @@ private:
QClipboard* cb;
- QScrollBar* scrollbar;
- int scrollLoc;
+ QScrollBar* scrollbar, *hScrollbar;
+
+ int scrollLoc, hScrollLoc;
+ int hposition, vcolumns;
+
//#define SCRNONE 0
diff --git a/core/apps/embeddedkonsole/TEmulation.cpp b/core/apps/embeddedkonsole/TEmulation.cpp
index 6f3ad32..c19f2a1 100644
--- a/core/apps/embeddedkonsole/TEmulation.cpp
+++ b/core/apps/embeddedkonsole/TEmulation.cpp
@@ -11,7 +11,7 @@
/* -------------------------------------------------------------------------- */
-/* */
+/* */
/* Ported Konsole to Qt/Embedded */
-/* */
+/* */
/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
-/* */
+/* */
/* -------------------------------------------------------------------------- */
@@ -105,16 +105,26 @@ TEmulation::TEmulation(TEWidget* gui)
QObject::connect(&bulk_timer, SIGNAL(timeout()), this, SLOT(showBulk()) );
+
QObject::connect(gui,SIGNAL(changedImageSizeSignal(int,int)),
this,SLOT(onImageSizeChange(int,int)));
+
QObject::connect(gui,SIGNAL(changedHistoryCursor(int)),
this,SLOT(onHistoryCursorChange(int)));
+
+ QObject::connect(gui,SIGNAL(changedHorzCursor(int)),
+ this,SLOT(onHorzCursorChange(int)));
+
QObject::connect(gui,SIGNAL(keyPressedSignal(QKeyEvent*)),
this,SLOT(onKeyPress(QKeyEvent*)));
+
QObject::connect(gui,SIGNAL(beginSelectionSignal(const int,const int)),
- this,SLOT(onSelectionBegin(const int,const int)) );
+ this,SLOT(onSelectionBegin(const int,const int)) );
+
QObject::connect(gui,SIGNAL(extendSelectionSignal(const int,const int)),
- this,SLOT(onSelectionExtend(const int,const int)) );
+ this,SLOT(onSelectionExtend(const int,const int)) );
+
QObject::connect(gui,SIGNAL(endSelectionSignal(const BOOL)),
- this,SLOT(setSelection(const BOOL)) );
+ this,SLOT(setSelection(const BOOL)) );
+
QObject::connect(gui,SIGNAL(clearSelectionSignal()),
- this,SLOT(clearSelection()) );
+ this,SLOT(clearSelection()) );
}
@@ -301,4 +311,6 @@ void TEmulation::showBulk()
free(image);
- //FIXME: check that we do not trigger other draw event here.
+
+ //FIXME: check that we do not trigger other draw event here.
gui->setScroll(scr->getHistCursor(),scr->getHistLines());
+
}
@@ -341,4 +353,3 @@ void TEmulation::setConnect(bool c)
-void TEmulation::onImageSizeChange(int lines, int columns)
-{
+void TEmulation::onImageSizeChange(int lines, int columns) {
if (!connected) return;
@@ -350,4 +361,3 @@ void TEmulation::onImageSizeChange(int lines, int columns)
-void TEmulation::onHistoryCursorChange(int cursor)
-{
+void TEmulation::onHistoryCursorChange(int cursor) {
if (!connected) return;
@@ -357,4 +367,9 @@ void TEmulation::onHistoryCursorChange(int cursor)
-void TEmulation::setColumns(int columns)
-{
+void TEmulation::onHorzCursorChange(int cursor) {
+ if (!connected) return;
+ scr->setHorzCursor(cursor);
+ showBulk();
+}
+
+void TEmulation::setColumns(int columns) {
//FIXME: this goes strange ways.
diff --git a/core/apps/embeddedkonsole/konsole.cpp b/core/apps/embeddedkonsole/konsole.cpp
index a8ddc99..3c87ad4 100644
--- a/core/apps/embeddedkonsole/konsole.cpp
+++ b/core/apps/embeddedkonsole/konsole.cpp
@@ -360,4 +360,16 @@ void Konsole::init(const char* _pgm, QStrList & _args)
scrollMenu->insertItem(tr( "Right" ));
+ scrollMenu->insertSeparator(4);
+ scrollMenu->insertItem(tr( "Horizontal" ));
+
configMenu->insertItem(tr( "ScrollBar" ),scrollMenu);
-
+//scrollMenuSelected(-29);
+// cfg.setGroup("ScrollBar");
+// if(cfg.readBoolEntry("HorzScroll",0)) {
+// if(cfg.readNumEntry("Position",2) == 0)
+// te->setScrollbarLocation(1);
+// else
+// te->setScrollbarLocation(0);
+// te->setScrollbarLocation( cfg.readNumEntry("Position",2));
+// te->setWrapAt(120);
+// }
// create applications /////////////////////////////////////////////////////
@@ -374,3 +386,3 @@ void Konsole::init(const char* _pgm, QStrList & _args)
se_args = _args;
-
+ se_args.prepend("--login");
parseCommandLine();
@@ -510,2 +522,4 @@ void Konsole::setColLin(int columns, int lines)
{
+ qDebug("konsole::setColLin:: Columns %d", columns);
+
if ((columns==0) || (lines==0))
@@ -554,2 +568,3 @@ void Konsole::changeColumns(int columns)
{
+ qDebug("change columns");
TEWidget* te = getTe();
@@ -802,4 +817,3 @@ void Konsole::scrollMenuSelected(int index)
{
-// QString temp;
-// qDebug( temp.sprintf("scrollbar menu %d",index));
+ qDebug( "scrollbar menu %d",index);
TEWidget* te = getTe();
@@ -820,2 +834,14 @@ void Konsole::scrollMenuSelected(int index)
break;
+ case -29: {
+ bool b=cfg.readBoolEntry("HorzScroll",0);
+ cfg.writeEntry("HorzScroll", !b );
+ cfg.write();
+ if(cfg.readNumEntry("Position",2) == 0)
+ te->setScrollbarLocation(1);
+ else
+ te->setScrollbarLocation(0);
+ te->setScrollbarLocation( cfg.readNumEntry("Position",2));
+ te->setWrapAt(120);
+ }
+ break;
};