From ffa4d7c4df80207411c27746ae884cbcead4e619 Mon Sep 17 00:00:00 2001 From: josef Date: Sat, 26 Oct 2002 13:41:03 +0000 Subject: - implement horizontal line wrap If Line Wrap is enabled for the terminal, the traditional behaviour is kept. Otherwise, a horizontal scroll bar is added and 80 columns are assumed. TODO: - handle modes when there's no vertical scroll bar or it's on the left side - initialize correctly (currently, sometimes moving the scrollbar must be done at first) --- (limited to 'noncore') diff --git a/noncore/apps/opie-console/TEWidget.cpp b/noncore/apps/opie-console/TEWidget.cpp index e4415dc..bf9a313 100644 --- a/noncore/apps/opie-console/TEWidget.cpp +++ b/noncore/apps/opie-console/TEWidget.cpp @@ -90,8 +90,6 @@ #define rimX 0 // left/right rim width #define rimY 0 // top/bottom rim high -#define SCRWIDTH 16 // width of the scrollbar - #define yMouseScroll 1 // scroll increment used when dragging selection at top/bottom of window. @@ -319,6 +317,10 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name) scrollbar->setCursor( arrowCursor ); connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); + hscrollbar = new QScrollBar( Qt::Horizontal, this ); + hscrollbar->setCursor( arrowCursor ); + connect(hscrollbar, SIGNAL(valueChanged(int)), this, SLOT(hscrollChanged(int))); + m_cornerButton = new QPushButton( this ); m_cornerButton->setPixmap( QPixmap( (const char**)menu_xpm ) ); m_cornerButton->setMaximumSize( 14, 14 ); @@ -352,6 +354,7 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name) font_h = 1; font_a = 1; word_selection_mode = FALSE; + vcolumns = 0; setMouseMarks(TRUE); setVTFont( QFont("fixed") ); @@ -630,6 +633,13 @@ void TEWidget::scrollChanged(int) emit changedHistoryCursor(scrollbar->value()); //expose } +void TEWidget::hscrollChanged(int loc) +{ + hposition = loc; + propagateSize(); + update(); +} + void TEWidget::setScroll(int cursor, int slines) { disconnect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); @@ -1139,18 +1149,38 @@ void TEWidget::calcGeometry() { //FIXME: set rimX == rimY == 0 when running in full screen mode. + int showhscrollbar = 1; + int hwidth = 0; + + if(vcolumns == 0) showhscrollbar = 0; + if(showhscrollbar == 1) hwidth = QApplication::style().scrollBarExtent().width(); + scrollbar->resize(QApplication::style().scrollBarExtent().width(), - contentsRect().height()); + contentsRect().height() - hwidth); + + if(showhscrollbar == 1) + { + hscrollbar->resize(contentsRect().width() - hwidth, hwidth); + hscrollbar->setRange(0, 40); + + QPoint p = contentsRect().bottomLeft(); + hscrollbar->move(QPoint(p.x(), p.y() - hwidth)); + hscrollbar->show(); + } + else hscrollbar->hide(); + switch(scrollLoc) { case SCRNONE : columns = ( contentsRect().width() - 2 * rimX ) / font_w; + if(vcolumns) columns = vcolumns; blX = (contentsRect().width() - (columns*font_w) ) / 2; brX = blX; scrollbar->hide(); break; case SCRLEFT : columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w; + if(vcolumns) columns = vcolumns; brX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2; blX = brX + scrollbar->width(); scrollbar->move(contentsRect().topLeft()); @@ -1158,7 +1188,10 @@ void TEWidget::calcGeometry() break; case SCRRIGHT: columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w; + 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(); @@ -1167,6 +1200,12 @@ void TEWidget::calcGeometry() //FIXME: support 'rounding' styles lines = ( contentsRect().height() - 2 * rimY ) / font_h; bY = (contentsRect().height() - (lines *font_h)) / 2; + + if(showhscrollbar == 1) + { + //bY = bY - 10; + lines = lines - 1; + } } void TEWidget::makeImage() @@ -1301,3 +1340,10 @@ void TEWidget::drop_menu_activated(int) QPushButton* TEWidget::cornerButton() { return m_cornerButton; } + +void TEWidget::setWrapAt(int columns) +{ + vcolumns = columns; +} + + diff --git a/noncore/apps/opie-console/TEWidget.h b/noncore/apps/opie-console/TEWidget.h index f03a16e..6ff731b 100644 --- a/noncore/apps/opie-console/TEWidget.h +++ b/noncore/apps/opie-console/TEWidget.h @@ -69,6 +69,8 @@ public: void emitSelection(); + void setWrapAt(int columns); + public: void setImage(const ca* const newimg, int lines, int columns); @@ -154,6 +156,7 @@ public slots: protected slots: void scrollChanged(int value); + void hscrollChanged(int value); void blinkEvent(); private: @@ -188,8 +191,9 @@ private: QPushButton *m_cornerButton; QClipboard* cb; - QScrollBar* scrollbar; + QScrollBar* scrollbar, *hscrollbar; int scrollLoc; + int hposition, vcolumns; //#define SCRNONE 0 //#define SCRLEFT 1 diff --git a/noncore/apps/opie-console/emulation_handler.cpp b/noncore/apps/opie-console/emulation_handler.cpp index e80168d..e0f63cd 100644 --- a/noncore/apps/opie-console/emulation_handler.cpp +++ b/noncore/apps/opie-console/emulation_handler.cpp @@ -12,6 +12,9 @@ EmulationHandler::EmulationHandler( const Profile& prof, QWidget* parent,const c : QObject(0, name ) { m_teWid = new TEWidget( parent, "TerminalMain"); + // use setWrapAt(0) for classic behaviour (wrap at screen width, no scrollbar) + // use setWrapAt(80) for normal console with scrollbar + m_teWid->setWrapAt(prof.readNumEntry("Wrap", 0) ? 0 : 80); m_teWid->setMinimumSize(150, 70 ); m_script = 0; parent->resize( m_teWid->calcSize(80, 24 ) ); diff --git a/noncore/apps/opie-console/emulation_widget.cpp b/noncore/apps/opie-console/emulation_widget.cpp index d8e342b..9f95c72 100644 --- a/noncore/apps/opie-console/emulation_widget.cpp +++ b/noncore/apps/opie-console/emulation_widget.cpp @@ -15,9 +15,6 @@ #define rimX 0 // left/right rim width #define rimY 0 // top/bottom rim high -#define SCRWIDTH 16 // width of scrollbar - - static const ColorEntry color_table[TABLE_COLORS] = { ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback diff --git a/noncore/apps/opie-console/widget.cpp b/noncore/apps/opie-console/widget.cpp index d948179..10045c6 100644 --- a/noncore/apps/opie-console/widget.cpp +++ b/noncore/apps/opie-console/widget.cpp @@ -102,8 +102,6 @@ alter Widget to use only QByteArray, where applicable. #define rimX 0 // left/right rim width #define rimY 0 // top/bottom rim high -#define SCRWIDTH 16 // width of the scrollbar - #define yMouseScroll 1 // scroll increment used when dragging selection at top/bottom of window. -- cgit v0.9.0.2