-rw-r--r-- | core/apps/embeddedkonsole/TEHistory.cpp | 29 | ||||
-rw-r--r-- | core/apps/embeddedkonsole/TEScreen.cpp | 415 | ||||
-rw-r--r-- | core/apps/embeddedkonsole/TEWidget.cpp | 169 | ||||
-rw-r--r-- | core/apps/embeddedkonsole/TEWidget.h | 15 | ||||
-rw-r--r-- | core/apps/embeddedkonsole/TEmulation.cpp | 43 | ||||
-rw-r--r-- | core/apps/embeddedkonsole/konsole.cpp | 34 |
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; }; |