summaryrefslogtreecommitdiff
path: root/core
Side-by-side diff
Diffstat (limited to 'core') (more/less context) (show whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/MyPty.cpp8
-rw-r--r--core/apps/embeddedkonsole/TEHistory.cpp269
-rw-r--r--core/apps/embeddedkonsole/TEHistory.h42
-rw-r--r--core/apps/embeddedkonsole/TEScreen.cpp18
-rw-r--r--core/apps/embeddedkonsole/TEWidget.cpp110
-rw-r--r--core/apps/embeddedkonsole/TEWidget.h14
-rw-r--r--core/apps/embeddedkonsole/TEmulation.cpp1
-rw-r--r--core/apps/embeddedkonsole/commandeditdialog.cpp4
-rw-r--r--core/apps/embeddedkonsole/konsole.cpp1542
-rw-r--r--core/apps/embeddedkonsole/konsole.h80
-rw-r--r--core/apps/embeddedkonsole/main.cpp1
-rw-r--r--core/apps/embeddedkonsole/session.cpp20
-rw-r--r--core/apps/embeddedkonsole/session.h5
13 files changed, 1505 insertions, 609 deletions
diff --git a/core/apps/embeddedkonsole/MyPty.cpp b/core/apps/embeddedkonsole/MyPty.cpp
index 7e820ad..e7d8274 100644
--- a/core/apps/embeddedkonsole/MyPty.cpp
+++ b/core/apps/embeddedkonsole/MyPty.cpp
@@ -79,6 +79,7 @@
#include <sys/ioctl.h>
#include <sys/wait.h>
+#undef HAVE_OPENPTY
#ifdef HAVE_OPENPTY
#include <pty.h>
#endif
@@ -146,6 +147,12 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int)
if ( !cpid ) {
// child - exec shell on tty
for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL);
+
+ // attempt to keep apm driver from killing us on power on/off
+ signal(SIGSTOP, SIG_IGN);
+ signal(SIGCONT, SIG_IGN);
+ signal(SIGTSTP, SIG_IGN);
+
int ttyfd = open(ttynam, O_RDWR);
dup2(ttyfd, STDIN_FILENO);
dup2(ttyfd, STDOUT_FILENO);
@@ -163,7 +170,6 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int)
ttmode.c_cc[VINTR] = 3;
ttmode.c_cc[VERASE] = 8;
tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
- if(strlen(getenv("TERM"))<=0)
setenv("TERM","vt100",1);
setenv("COLORTERM","0",1);
diff --git a/core/apps/embeddedkonsole/TEHistory.cpp b/core/apps/embeddedkonsole/TEHistory.cpp
index db9d10c..504cd13 100644
--- a/core/apps/embeddedkonsole/TEHistory.cpp
+++ b/core/apps/embeddedkonsole/TEHistory.cpp
@@ -6,11 +6,11 @@
/* */
/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
/* */
-/* This file is part of Konsole - an X terminal for KDE */
+/* This file is part of Qkonsole - an X terminal for KDE */
/* */
/* -------------------------------------------------------------------------- */
/* */
-/* Ported Konsole to Qt/Embedded */
+/* Ported Qkonsole to Qt/Embedded */
/* */
/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
/* */
@@ -24,6 +24,8 @@
#include <unistd.h>
#include <errno.h>
+#include <qpe/config.h>
+
#define HERE printf("%s(%d): here\n",__FILE__,__LINE__)
/*
@@ -40,180 +42,189 @@
of cells and line/column indexed read access to the scroll
at constant costs.
-FIXME: some complain about the history buffer comsuming the
- memory of their machines. This problem is critical
- since the history does not behave gracefully in cases
- where the memory is used up completely.
-
- I put in a workaround that should handle it problem
- now gracefully. I'm not satisfied with the solution.
-
-FIXME: Terminating the history is not properly indicated
- in the menu. We should throw a signal.
-
-FIXME: There is noticable decrease in speed, also. Perhaps,
- there whole feature needs to be revisited therefore.
- Disadvantage of a more elaborated, say block-oriented
- scheme with wrap around would be it's complexity.
*/
-//FIXME: tempory replacement for tmpfile
-// this is here one for debugging purpose.
-
-//#define tmpfile xTmpFile
-
-FILE* xTmpFile()
-{
- static int fid = 0;
- char fname[80];
- sprintf(fname,"TmpFile.%d",fid++);
- return fopen(fname,"w");
-}
-
-
-// History Buffer ///////////////////////////////////////////
-
-/*
- A Row(X) data type which allows adding elements to the end.
-*/
-
-HistoryBuffer::HistoryBuffer()
-{
- ion = -1;
- length = 0;
-}
-HistoryBuffer::~HistoryBuffer()
+HistoryScroll::HistoryScroll()
{
- setScroll(FALSE);
+ m_lines = NULL;
+ m_max_lines = 0;
+ m_cells = NULL;
+ m_max_cells = 0;
+ m_num_lines = 0;
+ m_first_line = 0;
+ m_last_cell = 0;
+ m_start_line = 0;
}
-void HistoryBuffer::setScroll(bool on)
-{
- if (on == hasScroll()) return;
-
- if (on)
- {
- assert( ion < 0 );
- assert( length == 0);
- FILE* tmp = tmpfile(); if (!tmp) { perror("konsole: cannot open temp file.\n"); return; }
- ion = dup(fileno(tmp)); if (ion<0) perror("konsole: cannot dup temp file.\n");
- fclose(tmp);
- }
- else
+HistoryScroll::~HistoryScroll()
{
- assert( ion >= 0 );
- close(ion);
- ion = -1;
- length = 0;
- }
+ setSize(0,0);
}
-bool HistoryBuffer::hasScroll()
+void HistoryScroll::setSize(int lines, int cells)
{
- return ion >= 0;
-}
-
-void HistoryBuffer::add(const unsigned char* bytes, int len)
-{ int rc;
- 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; }
- length += 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; }
+ // could try to preserve the existing data...
+ // printf("setSize(%d,%d)\n", lines, cells);
+ if (m_lines) {
+ delete m_lines;
+ m_lines = NULL;
}
-
-int HistoryBuffer::len()
-{
- return length;
+ if (m_cells) {
+ delete m_cells;
+ m_cells = NULL;
}
-
-// History Scroll //////////////////////////////////////
-
-/*
- The history scroll makes a Row(Row(Cell)) from
- two history buffers. The index buffer contains
- start of line positions which refere to the cells
- buffer.
-
- Note that index[0] addresses the second line
- (line #1), while the first line (line #0) starts
- at 0 in cells.
-*/
-
-HistoryScroll::HistoryScroll()
-{
+ m_max_lines = m_max_cells = 0;
+ if (lines > 0 && cells > 0) {
+ m_max_lines = lines;
+ m_lines = new int[m_max_lines];
+ m_lines[0] = 0;
+ m_max_cells = cells;
+ m_cells = new ca[m_max_cells];
}
-
-HistoryScroll::~HistoryScroll()
-{
+ m_first_line = 0;
+ m_num_lines = 0;
+ m_last_cell = 0;
+ m_start_line = 0;
}
void HistoryScroll::setScroll(bool on)
{
- index.setScroll(on);
- cells.setScroll(on);
+ Config cfg("Qkonsole");
+ cfg.setGroup("History");
+ // printf("setScroll(%d)\n", on);
+ if (on) {
+ int lines = cfg.readNumEntry("history_lines",300);
+ int avg_line = cfg.readNumEntry("avg_line_length",60);
+ int cells = lines * avg_line;
+ setSize(lines,cells);
+ } else {
+ setSize(0,0);
+ }
}
bool HistoryScroll::hasScroll()
{
- return index.hasScroll() && cells.hasScroll();
+ return (m_max_lines > 0);
}
int HistoryScroll::getLines()
{
- if (!hasScroll()) return 0;
- return index.len() / sizeof(int);
+ return(m_num_lines);
}
int HistoryScroll::getLineLen(int lineno)
{
if (!hasScroll()) return 0;
- return (startOfLine(lineno+1) - startOfLine(lineno)) / sizeof(ca);
+ if (lineno >= m_num_lines) {
+ // printf("getLineLen(%d) out of range %d\n", lineno, m_num_lines);
+ return(0);
+ }
+ int len = startOfLine(lineno+1) - startOfLine(lineno);
+ if (len < 0) {
+ len += m_max_cells;
+ }
+ // printf("getLineLen(%d) = %d\n", lineno, len);
+ return(len);
}
int HistoryScroll::startOfLine(int lineno)
{
- if (lineno <= 0) return 0;
+ // printf("startOfLine(%d) =", lineno);
if (!hasScroll()) return 0;
- if (lineno <= getLines())
- { int res;
- index.get((unsigned char*)&res,sizeof(int),(lineno-1)*sizeof(int));
- return res;
+ assert(lineno >= 0 && lineno <= m_num_lines);
+ if (lineno < m_num_lines) {
+ int index = lineno + m_first_line;
+ if (index >= m_max_lines)
+ index -= m_max_lines;
+ // printf("%d\n", m_lines[index]);
+ return(m_lines[index]);
+ } else {
+ // printf("last %d\n", m_last_cell);
+ return(m_last_cell);
}
- return cells.len();
}
-void HistoryScroll::getCells(int lineno, int colno, int count, ca res[])
+void HistoryScroll::getCells(int lineno, int colno, int count, ca *res)
{
+ // printf("getCells(%d,%d,%d) num_lines=%d\n", lineno, colno, count, m_num_lines);
assert(hasScroll());
-//get(unsigned char* bytes, int len, int loc)
- cells.get( (unsigned char*)res, count * sizeof(ca), startOfLine( lineno) + colno * sizeof(ca) );
+ assert(lineno >= 0 && lineno < m_num_lines);
+ int index = lineno + m_first_line;
+ if (index >= m_max_lines)
+ index -= m_max_lines;
+ assert(index >= 0 && index < m_max_lines);
+ index = m_lines[index] + colno;
+ assert(index >= 0 && index < m_max_cells);
+ while(count-- > 0) {
+ *res++ = m_cells[index];
+ if (++index >= m_max_cells) {
+ index = 0;
+ }
+ }
}
-void HistoryScroll::addCells(ca text[], int count)
+void HistoryScroll::addCells(ca *text, int count)
{
if (!hasScroll()) return;
- cells.add((unsigned char*)text,count*sizeof(ca));
+ int start_cell = m_last_cell;
+ // printf("addCells count=%d start=%d first_line=%d first_cell=%d lines=%d\n",
+ // count, start_cell, m_first_line, m_lines[m_first_line], m_num_lines);
+ if (count <= 0) {
+ return;
+ }
+ while(count-- > 0) {
+ assert (m_last_cell >= 0 && m_last_cell < m_max_cells );
+ m_cells[m_last_cell] = *text++;
+ if (++m_last_cell >= m_max_cells) {
+ m_last_cell = 0;
+ }
+ }
+ if (m_num_lines > 1) {
+ if (m_last_cell > start_cell) {
+ while(m_num_lines > 0
+ && m_lines[m_first_line] >= start_cell
+ && m_lines[m_first_line] < m_last_cell) {
+ // printf("A remove %d>%d && %d<%d first_line=%d num_lines=%d\n",
+ // m_lines[m_first_line], start_cell, m_lines[m_first_line], m_last_cell,
+ // m_first_line, m_num_lines);
+ if (++m_first_line >= m_max_lines) {
+ m_first_line = 0;
+ }
+ m_num_lines--;
+ }
+ } else {
+ while(m_num_lines > 0
+ && (m_lines[m_first_line] >= start_cell
+ || m_lines[m_first_line] < m_last_cell)) {
+ // printf("B remove %d>%d || %d<%d first_line=%d num_lines=%d\n",
+ // m_lines[m_first_line], start_cell, m_lines[m_first_line], m_last_cell,
+ // m_first_line, m_num_lines);
+ if (++m_first_line >= m_max_lines) {
+ m_first_line = 0;
+ }
+ m_num_lines--;
+ }
+ }
+ }
}
void HistoryScroll::addLine()
{
if (!hasScroll()) return;
- int locn = cells.len();
- index.add((unsigned char*)&locn,sizeof(int));
+ int index = m_first_line + m_num_lines;
+ if (index >= m_max_lines) {
+ index -= m_max_lines;
+ }
+ // printf("addLine line=%d cell=%d\n", index, m_last_cell);
+ assert(index >= 0 && index < m_max_lines);
+ m_lines[index] = m_start_line;
+ m_start_line = m_last_cell;
+ if (m_num_lines >= m_max_lines) {
+ if (++m_first_line >= m_num_lines) {
+ m_first_line = 0;
+ }
+ } else {
+ m_num_lines++;
+ }
}
diff --git a/core/apps/embeddedkonsole/TEHistory.h b/core/apps/embeddedkonsole/TEHistory.h
index 11eb150..fcf6496 100644
--- a/core/apps/embeddedkonsole/TEHistory.h
+++ b/core/apps/embeddedkonsole/TEHistory.h
@@ -21,29 +21,6 @@
#include "TECommon.h"
-/*
- An extendable tmpfile(1) based buffer.
-*/
-class HistoryBuffer
-{
-public:
- HistoryBuffer();
- ~HistoryBuffer();
-
-public:
- void setScroll(bool on);
- bool hasScroll();
-
-public:
- void add(const unsigned char* bytes, int len);
- void get(unsigned char* bytes, int len, int loc);
- int len();
-
-private:
- int ion;
- int length;
-};
-
class HistoryScroll
{
public:
@@ -51,25 +28,30 @@ public:
~HistoryScroll();
public:
+ void setSize(int lines, int cells);
void setScroll(bool on);
bool hasScroll();
-public: // access to history
int getLines();
int getLineLen(int lineno);
- void getCells(int lineno, int colno, int count, ca res[]);
+ void getCells(int lineno, int colno, int count, ca *res);
-public: // backward compatibility (obsolete)
ca getCell(int lineno, int colno) { ca res; getCells(lineno,colno,1,&res); return res; }
-public: // adding lines.
- void addCells(ca a[], int count);
+ void addCells(ca *text, int count);
void addLine();
private:
int startOfLine(int lineno);
- HistoryBuffer index; // lines Row(int)
- HistoryBuffer cells; // text Row(ca)
+
+ int m_max_lines;
+ int *m_lines;
+ int m_max_cells;
+ ca *m_cells;
+ int m_first_line;
+ int m_last_cell;
+ int m_num_lines;
+ int m_start_line;
};
#endif // TEHISTORY_H
diff --git a/core/apps/embeddedkonsole/TEScreen.cpp b/core/apps/embeddedkonsole/TEScreen.cpp
index a6cf6a1..4ebc28e 100644
--- a/core/apps/embeddedkonsole/TEScreen.cpp
+++ b/core/apps/embeddedkonsole/TEScreen.cpp
@@ -510,6 +510,10 @@ ca* TEScreen::getCookedImage()
ca* merged = (ca*)malloc(lines*columns*sizeof(ca));
ca dft(' ',DEFAULT_FORE_COLOR,DEFAULT_BACK_COLOR,DEFAULT_RENDITION);
+ if (histCursor > hist.getLines()) {
+ histCursor = hist.getLines();
+ }
+
for (y = 0; (y < lines) && (y < (hist.getLines()-histCursor)); y++)
{
int len = QMIN(columns,hist.getLineLen(y+histCursor));
@@ -558,7 +562,7 @@ ca* TEScreen::getCookedImage()
void TEScreen::reset()
{
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("ScrollBar");
if( !cfg.readBoolEntry("HorzScroll",0) )
setMode(MODE_Wrap ); saveMode(MODE_Wrap ); // wrap at end of margin
@@ -971,6 +975,9 @@ void TEScreen::clearSelection()
void TEScreen::setSelBeginXY(const int x, const int y)
{
+ if (histCursor > hist.getLines()) {
+ histCursor = hist.getLines();
+ }
sel_begin = loc(x,y+histCursor) ;
sel_BR = sel_begin;
sel_TL = sel_begin;
@@ -979,6 +986,9 @@ void TEScreen::setSelBeginXY(const int x, const int y)
void TEScreen::setSelExtentXY(const int x, const int y)
{
if (sel_begin == -1) return;
+ if (histCursor > hist.getLines()) {
+ histCursor = hist.getLines();
+ }
int l = loc(x,y + histCursor);
if (l < sel_begin)
@@ -1185,6 +1195,12 @@ void TEScreen::addHistLine()
void TEScreen::setHistCursor(int cursor)
{
histCursor = cursor; //FIXME:rangecheck
+ if (histCursor > hist.getLines()) {
+ histCursor = hist.getLines();
+ }
+ if (histCursor < 0) {
+ histCursor = 0;
+ }
}
void TEScreen::setHorzCursor(int cursor)
diff --git a/core/apps/embeddedkonsole/TEWidget.cpp b/core/apps/embeddedkonsole/TEWidget.cpp
index ec1b30c..98c3cdf 100644
--- a/core/apps/embeddedkonsole/TEWidget.cpp
+++ b/core/apps/embeddedkonsole/TEWidget.cpp
@@ -66,6 +66,7 @@
#include <qstyle.h>
#include <qfile.h>
#include <qdragobject.h>
+#include <qnamespace.h>
#include <stdio.h>
#include <stdlib.h>
@@ -244,18 +245,12 @@ void TEWidget::fontChange(const QFont &)
{
QFontMetrics fm(font());
font_h = fm.height();
-
- // font_w = max width of ASCII chars (U.B.)
- font_w = 0;
- int fw;
- for (int i = 0x20; i < 0x80; i++) {
- if (isprint(i) && font_w < (fw = fm.width(i))) {
- font_w = fw;
- }
- }
//font_w = fm.maxWidth();
-
+ font_w = fm.width("m");
font_a = fm.ascent();
+ printf("font h=%d max_width=%d width_m=%d assent=%d\n", font_h,
+ fm.maxWidth(), font_w, font_a);
+
//printf("font_h: %d\n",font_h);
//printf("font_w: %d\n",font_w);
//printf("font_a: %d\n",font_a);
@@ -307,11 +302,11 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name)
hScrollbar = new QScrollBar(this);
hScrollbar->setCursor( arrowCursor );
hScrollbar->setOrientation(QScrollBar::Horizontal);
- hScrollbar->setMaximumHeight(16);
+ // hScrollbar->setMaximumHeight(16);
connect( hScrollbar, SIGNAL(valueChanged(int)), this, SLOT( hScrollChanged(int)));
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("ScrollBar");
switch( cfg.readNumEntry("Position",2)){
case 0:
@@ -684,13 +679,16 @@ void TEWidget::mousePressEvent(QMouseEvent* ev)
int tLx = tL.x();
int tLy = tL.y();
- word_selection_mode = FALSE;
+ mouse_down_x = ev->x();
+ mouse_down_y = ev->y();
//printf("press top left [%d,%d] by=%d\n",tLx,tLy, bY);
if ( ev->button() == LeftButton)
{
QPoint pos = QPoint((ev->x()-tLx-blX)/font_w,(ev->y()-tLy-bY)/font_h);
+ word_selection_mode = (ev->state() & ShiftButton);
+
if ( ev->state() & ControlButton ) preserve_line_breaks = FALSE ;
if (mouse_marks || (ev->state() & ShiftButton))
@@ -815,6 +813,12 @@ void TEWidget::mouseReleaseEvent(QMouseEvent* ev)
//printf("release [%d,%d] %d\n",ev->x()/font_w,ev->y()/font_h,ev->button());
if ( ev->button() == LeftButton)
{
+ if (QABS(ev->x() - mouse_down_x) < 3
+ && QABS(ev->y() - mouse_down_y) < 3
+ && ev->y() < qApp->desktop()->height()/8) {
+ emit setFullScreen(false);
+ }
+
if ( actSel > 1 ) emit endSelectionSignal(preserve_line_breaks);
preserve_line_breaks = TRUE;
actSel = 0;
@@ -1030,7 +1034,6 @@ bool TEWidget::eventFilter( QObject *obj, QEvent *e )
static bool alt = FALSE;
// qDebug(" Has a keyboard with no CTRL and ALT keys, but we fake it:");
bool dele=FALSE;
-
if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
QKeyEvent* ke = (QKeyEvent*)e;
bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat();
@@ -1069,24 +1072,82 @@ bool TEWidget::eventFilter( QObject *obj, QEvent *e )
// know where the current selection is.
// qDebug("key pressed is 0x%x, ascii is 0x%x, state %d", ke->key(), ke->ascii(), ke->state());
- if(ke->key() == Key_Escape) {
- qDebug("key pressed is 0x%x, ascii is 0x%x, state %d", ke->key(), ke->ascii(), ke->state());
+ bool special_function = true;
+ switch(ke->key()) {
+ // case 0x201b: // fn-5
+ // case Key_F1:
+ // switch sessions (?)
+ // emitText("\\"); // expose (??)
+ // break;
+
+ case 0x2016: // fn-p
+ case Key_F2:
+ pasteClipboard();
+ break;
+
+ case 0x2018: // fn-S
+ case Key_F3:
+ emit changeSession(1);
+ break;
+
+ case 0x2019: // fn-n
+ emit newSession();
+ break;
+
+ case Qt::Key_Tab:
+ if (ke->state() == ControlButton) {
+ emit changeSession(1);
+ } else {
+ special_function = false;
+ }
+ break;
+
+#if 0
+ case Qt::Key_Left:
+ if (vcolumns == 0) {
+ emit changeSession(-1);
+ } else {
+ special_function = false;
+ }
+ break;
+
+ case Qt::Key_Right:
+ if (vcolumns == 0) {
+ emit changeSession(1);
+ } else {
+ special_function = false;
}
+ break;
+#endif
- if( ke->state() == ShiftButton && ke->key() == Key_Tab) {
- //lets hardcode this sucker
+ case 0x201b: // fn-5
+ case Key_F4:
+ emit toggleFullScreen();
+ break;
+
+ case 0x200f: // fn-1 magnify minus
+ case Key_F5:
+ emit changeFontSize(-1);
+ break;
-// qDebug("key pressed 2 is 0x%x", ke->key());
- emitText("\\"); // expose
+ case 0x2010: // fn-2 magnify plus
+ case Key_F6:
+ emit changeFontSize(1);
+ break;
+
+ default:
+ special_function = false;
}
- else if( ke->state() == ControlButton && ke->key() == Key_V) {
- pasteClipboard();
+ if (special_function) {
+ return true;
}
+ // else if( ke->state() == ControlButton && ke->key() == Key_V) {
+ // pasteClipboard();
+ // }
// else if( ke->state() == ControlButton && ke->key() == Key_C) {
// pasteClipboard();
// }
- else
emit keyPressedSignal(ke); // expose
ke->accept();
#ifdef FAKE_CTRL_AND_ALT
@@ -1116,7 +1177,6 @@ void TEWidget::frameChanged()
propagateSize();
update();
}
-
/* ------------------------------------------------------------------------- */
/* */
/* Sound */
@@ -1167,7 +1227,7 @@ void TEWidget::calcGeometry()
int showhscrollbar = 1;
int hwidth = 0;
int dcolumns;
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("ScrollBar");
useHorzScroll=cfg.readBoolEntry("HorzScroll",0);
diff --git a/core/apps/embeddedkonsole/TEWidget.h b/core/apps/embeddedkonsole/TEWidget.h
index 5597f27..792b109 100644
--- a/core/apps/embeddedkonsole/TEWidget.h
+++ b/core/apps/embeddedkonsole/TEWidget.h
@@ -37,7 +37,8 @@ class TESession;
class TEWidget : public QFrame
// a widget representing attributed text
-{ Q_OBJECT
+{
+ Q_OBJECT
// friend class Konsole;
@@ -74,6 +75,7 @@ public:
bool useHorzScroll;
bool useBeep;
+ int color_menu_item;
void Bell();
void emitText(QString text);
@@ -93,6 +95,11 @@ signals:
void extendSelectionSignal( const int x, const int y );
void endSelectionSignal(const BOOL preserve_line_breaks);
+ void changeFontSize(int);
+ void toggleFullScreen();
+ void setFullScreen(bool);
+ void changeSession(int);
+ void newSession();
protected:
virtual void styleChange( QStyle& );
@@ -152,7 +159,7 @@ private:
QChar (*fontMap)(QChar); // possible vt100 font extention
- bool fixed_font; // has fixed pitch
+ // bool fixed_font; // has fixed pitch
int font_h; // height
int font_w; // width
int font_a; // ascend
@@ -184,6 +191,7 @@ private:
int scrollLoc, hScrollLoc;
int hposition, vcolumns;
+ int mouse_down_x, mouse_down_y;
//#define SCRNONE 0
//#define SCRLEFT 1
@@ -194,9 +202,11 @@ private:
QTimer* blinkT; // active when hasBlinker
QPopupMenu* m_drop;
QString dropText;
+
public:
// current session in this widget
TESession *currentSession;
+
private slots:
void drop_menu_activated(int item);
};
diff --git a/core/apps/embeddedkonsole/TEmulation.cpp b/core/apps/embeddedkonsole/TEmulation.cpp
index c19f2a1..a539757 100644
--- a/core/apps/embeddedkonsole/TEmulation.cpp
+++ b/core/apps/embeddedkonsole/TEmulation.cpp
@@ -195,6 +195,7 @@ void TEmulation::onRcvChar(int c)
// this is a trivial scanner
{
c &= 0xff;
+
switch (c)
{
case '\b' : scr->BackSpace(); break;
diff --git a/core/apps/embeddedkonsole/commandeditdialog.cpp b/core/apps/embeddedkonsole/commandeditdialog.cpp
index dd35466..03cba87 100644
--- a/core/apps/embeddedkonsole/commandeditdialog.cpp
+++ b/core/apps/embeddedkonsole/commandeditdialog.cpp
@@ -102,7 +102,7 @@ connect(ToolButton5,SIGNAL(clicked()),m_PlayListSelection,SLOT(moveSelectedDown(
item->moveItem( current );
m_SuggestedCommandList->setSelected( item, TRUE );
m_SuggestedCommandList->ensureItemVisible( m_SuggestedCommandList->selectedItem() );
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("Commands");
if (cfg.readEntry("Commands Set","FALSE") == "TRUE") {
for (int i = 0; i < 100; i++) {
@@ -152,7 +152,7 @@ CommandEditDialog::~CommandEditDialog()
void CommandEditDialog::accept()
{
int i = 0;
- Config *cfg = new Config("Konsole");
+ Config *cfg = new Config("Qkonsole");
cfg->setGroup("Commands");
cfg->clearGroup();
diff --git a/core/apps/embeddedkonsole/konsole.cpp b/core/apps/embeddedkonsole/konsole.cpp
index ce8fb6b..d10b66d 100644
--- a/core/apps/embeddedkonsole/konsole.cpp
+++ b/core/apps/embeddedkonsole/konsole.cpp
@@ -1,3 +1,4 @@
+
/* ---------------------------------------------------------------------- */
/* */
/* [main.C] Konsole */
@@ -21,7 +22,7 @@
// enhancements added by L.J. Potter <ljp@llornkcor.com>
//#define QT_QWS_OPIE
-#include "signal.h"
+#include <stdlib.h>
#include <qpe/resource.h>
@@ -44,15 +45,16 @@
#include <qevent.h>
#include <qtabwidget.h>
#include <qtabbar.h>
+#include <qpe/config.h>
#include <qstringlist.h>
#include <qpalette.h>
-#include <qpe/config.h>
-#include <qpe/qpeapplication.h>
+#include <qfontdatabase.h>
+#include <qfile.h>
+#include <qspinbox.h>
+#include <qlayout.h>
+#include <qvbox.h>
-#include <unistd.h>
-#include <pwd.h>
-#include <sys/types.h>
-//#include <sys/wait.h>
+#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
@@ -65,42 +67,78 @@
#include <opie/colorpopupmenu.h>
#endif
-#include <qfontdatabase.h> // U.B.
-#include <qstringlist.h> // U.B.
-#include <qvaluelist.h> // U.B.
-
-class EKNumTabBar : public QTabBar {
+class EKNumTabBar : public QTabBar
+{
public:
+ EKNumTabBar(QWidget *parent = 0, const char *name = 0) :
+ QTabBar(parent, name)
+ {}
+
+ // QList<QTab> *getTabList() { return(tabList()); }
+
void numberTabs()
{
// Yes, it really is this messy. QTabWidget needs functions
// that provide acces to tabs in a sequential way.
int m=INT_MIN;
- for (int i=0; i<count(); i++) {
+ for (int i=0; i<count(); i++)
+ {
QTab* left=0;
QListIterator<QTab> it(*tabList());
int x=INT_MAX;
- for( QTab* t; (t=it.current()); ++it ) {
+ for( QTab* t; (t=it.current()); ++it )
+ {
int tx = t->rect().x();
- if ( tx<x && tx>m ) {
+ if ( tx<x && tx>m )
+ {
x = tx;
left = t;
}
}
- if ( left ) {
+ if ( left )
+ {
left->setText(QString::number(i+1));
m = left->rect().x();
}
}
}
+
+ virtual QSize sizeHint() const
+ {
+ if (isHidden())
+ {
+ return(QSize(0,0));
+ }
+ else
+ {
+ QSize size = QTabBar::sizeHint();
+ int shrink = 5;
+ if (qApp->desktop()->width() > 600 || qApp->desktop()->height() > 600)
+ {
+ shrink = 10;
+ }
+ size.setHeight(size.height() - shrink);
+ return(size);
+ }
+ }
+
};
-class EKNumTabWidget : public QTabWidget {
+class EKNumTabWidget : public QTabWidget
+{
public:
EKNumTabWidget(QWidget* parent) : QTabWidget(parent)
{
+ setTabBar(new EKNumTabBar(parent,"EKTabBar"));
+ setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
}
+ EKNumTabBar *getTabBar() const
+ {
+ return ((EKNumTabBar*)tabBar());
+ }
+
+
void addTab(QWidget* w)
{
QTab* t = new QTab(QString::number(tabBar()->count()+1));
@@ -181,191 +219,290 @@ static const char *commonCmds[] =
NULL
};
-static void konsoleInit(const char** shell) {
- if(setuid(getuid()) !=0) qDebug("setuid failed");
- if(setgid(getgid()) != 0) qDebug("setgid failed"); // drop privileges
-
-// signal (SIGSTOP, SIG_IGN);
-
-// QPEApplication::grabKeyboard(); // for CTRL and ALT
-
-// qDebug("keyboard grabbed");
-#ifdef FAKE_CTRL_AND_ALT
- qDebug("Fake Ctrl and Alt defined");
- QPEApplication::grabKeyboard(); // for CTRL and ALT
-#endif
-
- *shell = getenv("SHELL");
-// qWarning("SHell initially is %s", *shell );
-
- if (shell == NULL || *shell == '\0') {
- struct passwd *ent = 0;
- uid_t me = getuid();
- *shell = "/bin/sh";
-
- while ( (ent = getpwent()) != 0 ) {
- if (ent->pw_uid == me) {
- if (ent->pw_shell != "")
- *shell = ent->pw_shell;
- break;
- }
- }
- endpwent();
- }
-
-// qWarning("SHELL now is %s", *shell );
-
- if( putenv((char*)"COLORTERM=") !=0)
- qDebug("putenv failed"); // to trigger mc's color detection
-}
Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) :
QMainWindow(parent, name, fl)
{
- QStrList tmp; const char* shell;
-
- setCaption( tr("Terminal") );
+ QStrList args;
+ init("/bin/bash",args);
+}
- konsoleInit( &shell);
-// qWarning("Using shell %s", shell);
- init(shell,tmp);
+Konsole::Konsole(const char* name, const char* _pgm, QStrList & _args, int)
+ : QMainWindow(0, name)
+{
+ init(_pgm,_args);
}
+struct HistoryItem
+{
+ HistoryItem(int c, const QString &l)
+ {
+ count = c;
+ line = l;
+ }
+ int count;
+ QString line;
+};
+class HistoryList : public QList<HistoryItem>
+{
+ virtual int compareItems( QCollection::Item item1, QCollection::Item item2)
+ {
+ int c1 = ((HistoryItem*)item1)->count;
+ int c2 = ((HistoryItem*)item2)->count;
+ if (c1 > c2)
+ return(1);
+ if (c1 < c2)
+ return(-1);
+ return(0);
+ }
+};
void Konsole::initCommandList()
{
// qDebug("Konsole::initCommandList");
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("Commands");
- commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
+ // commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
commonCombo->clear();
- if (cfg.readEntry("Commands Set","FALSE") == "FALSE") {
- for (int i = 0; commonCmds[i] != NULL; i++) {
- commonCombo->insertItem(commonCmds[i],i);
+
+ if (cfg.readEntry("ShellHistory","TRUE") == "TRUE")
+ {
+ QString histfilename = QString(getenv("HOME")) + "/.bash_history";
+ histfilename = cfg.readEntry("ShellHistoryPath",histfilename);
+ QFile histfile(histfilename);
+ // note: compiler barfed on:
+ // QFile histfile(QString(getenv("HOME")) + "/.bash_history");
+ if (histfile.open( IO_ReadOnly ))
+ {
+ QString line;
+ uint i;
+ HistoryList items;
+
+ int lineno = 0;
+ while(!histfile.atEnd())
+ {
+ if (histfile.readLine(line, 200) < 0)
+ {
+ break;
}
- } else {
- for (int i = 0; i < 100; i++) {
+ line = line.left(line.length()-1);
+ lineno++;
+
+ for(i=0; i<items.count(); i++)
+ {
+ if (line == items.at(i)->line)
+ {
+ // weight recent commands & repeated commands more
+ // by adding up the index of each command
+ items.at(i)->count += lineno;
+ break;
+ }
+ }
+ if (i >= items.count())
+ {
+ items.append(new HistoryItem(lineno, line));
+ }
+ }
+ items.sort();
+ int n = items.count();
+ if (n > 40)
+ {
+ n = 40;
+ }
+ for(int i=0; i<n; i++)
+ {
+ // should insert start of command, but keep whole thing
+ if (items.at(items.count()-i-1)->line.length() < 30)
+ {
+ commonCombo->insertItem(items.at(items.count()-i-1)->line);
+ }
+ }
+ histfile.close();
+ }
+ }
+ if (cfg.readEntry("Commands Set","FALSE") == "FALSE")
+ {
+ for (int i = 0; commonCmds[i] != NULL; i++)
+ {
+ commonCombo->insertItem(commonCmds[i]);
+ }
+ }
+ else
+ {
+ for (int i = 0; i < 100; i++)
+ {
if (!(cfg.readEntry( QString::number(i),"")).isEmpty())
- commonCombo->insertItem((cfg.readEntry( QString::number(i),"")));
+ commonCombo->insertItem(cfg.readEntry( QString::number(i),""));
}
}
+
+}
+
+static void sig_handler(int x)
+{
+ printf("got signal %d\n",x);
}
void Konsole::init(const char* _pgm, QStrList & _args)
{
+
+#if 0
+ for(int i=1; i<=31; i++)
+ {
+ if (i != SIGPIPE && i != SIGPROF && i != SIGSEGV
+ && i != SIGINT && i != SIGILL && i != SIGTERM
+ && i != SIGBUS)
+ signal(i,sig_handler);
+ }
+#endif
+ signal(SIGSTOP, sig_handler);
+ signal(SIGCONT, sig_handler);
+ signal(SIGTSTP, sig_handler);
+
b_scroll = TRUE; // histon;
n_keytab = 0;
n_render = 0;
startUp=0;
fromMenu = FALSE;
+ fullscreen = false;
- setCaption( tr("Terminal") );
- setIcon( Resource::loadPixmap( "konsole" ) );
+ setCaption( "Qkonsole" );
+ setIcon( Resource::loadPixmap( "qkonsole/qkonsole" ) );
- Config cfg("Konsole");
- cfg.setGroup("Konsole");
+ Config cfg("Qkonsole");
+ cfg.setGroup("Font");
QString tmp;
- // initialize the list of allowed fonts ///////////////////////////////////
- cfont = cfg.readNumEntry("FontID", 1);
-
- QFont f = QFont("Micro", 4, QFont::Normal);
- f.setFixedPitch(TRUE);
- fonts.append(new VTFont(tr("Micro"), f));
- f = QFont("Fixed", 7, QFont::Normal);
- f.setFixedPitch(TRUE);
- fonts.append(new VTFont(tr("Small Fixed"), f));
+ // initialize the list of allowed fonts ///////////////////////////////////
- f = QFont("Fixed", 12, QFont::Normal);
- f.setFixedPitch(TRUE);
- fonts.append(new VTFont(tr("Medium Fixed"), f));
+ QString cfgFontName = cfg.readEntry("FontName","Lcfont");
+ int cfgFontSize = cfg.readNumEntry("FontSize",18);
-// NEW STUFF
+ cfont = -1;
- QStringList ignfont = cfg.readListEntry("IgnFont", ',');
- /* If there is no "IgnFont = ..." entry in "myonsole.conf",
- * put some Japanese fonts of the SL-C7x0 to "ignfont". */
+ // this code causes repeated access to all the font files
+ // which does slow down startup
+ QFontDatabase fontDB;
+ QStringList familyNames;
+ familyNames = fontDB.families( FALSE );
+ QString s;
+ int fontIndex = 0;
+ int familyNum = 0;
+ fontList = new QPopupMenu( this );
- if (ignfont.isEmpty()) {
- ignfont = QStringList::split (',',"jisupasp,mmkjg1,mmkjg4,mmkjg5");
+ for(uint j = 0; j < (uint)familyNames.count(); j++)
+ {
+ s = familyNames[j];
+ if ( s.contains('-') )
+ {
+ int i = s.find('-');
+ s = s.right( s.length() - i - 1 ) + " [" + s.left( i ) + "]";
}
+ s[0] = s[0].upper();
-// QFont
- f = QFont("Fixed", 16, QFont::Normal);
- f.setFixedPitch(true);
- fonts.append(new VTFont(tr("Default"), f));
-
- int fcount = 1;
+ QValueList<int> sizes = fontDB.pointSizes( familyNames[j] );
- f.setCharSet(QFont::AnyCharSet);
- f.setStyleHint(QFont::TypeWriter, QFont::PreferMatch);
-// f.setWeight(QFont::Normal);
+ printf("family[%d] = %s with %d sizes\n", j, familyNames[j].latin1(),
+ sizes.count());
- /*
- * Look for installed font families. If the family is not in
- * the "ignfont" list, look for available sizes.
- * If it is fixed pitch font, put the font and the size
- * to the fontlist.
- */
- QFontDatabase fdb;
- QStringList ff = fdb.families(false);
-
- for (QStringList::Iterator it = ff.begin(); it != ff.end(); ++it ) {
- QString fit = *it;
+ if (sizes.count() > 0)
+ {
+ QPopupMenu *sizeMenu;
+ QFont f;
+ int last_width = -1;
+ sizeMenu = NULL;
- if( fit != "fixed" && fit != "micro" ) {
- if ( ignfont.contains(*it) == 0) {
- QValueList<int> pt = fdb.pointSizes(*it);
+ for(uint i = 0; i < (uint)sizes.count() + 4; i++)
+ {
+ // printf("family %s size %d ", familyNames[j].latin1(), sizes[i]);
+ // need to divide by 10 on the Z, but not otherwise
+ int size;
- for (QValueList<int>::Iterator itv = pt.begin();
- itv != pt.end(); ++itv ) {
- int size = (*itv)/10;
- if(size > 0) {
- f.setFamily(*it);
- f.setPointSize(size);
+ if (i >= (uint)sizes.count())
+ {
+ // try for expandable fonts
+ size = sizes[sizes.count()-1] + 2 * (i - sizes.count() + 1);
}
+ else
+ {
+ printf("sizes[%d] = %d\n", i, sizes[i]);
+ size = sizes[i];
+ }
+#ifndef __i386__
+ // a hack, sizes on Z seem to be points*10
+ size /= 10;
+#endif
- QFontMetrics fm(f);
-
-//qDebug("%s %d:\twidth('i')=%d, width('w')=%d", (*it).latin1(), (*itv)/10, fm.width('i'), fm.width('w'));
-
- if (fm.width('i') == fm.width('w') ) {
- qDebug((*it));
+ f = QFont(familyNames[j], size);
f.setFixedPitch(true);
- fonts.append(new VTFont(*it + ' ' + QString::number(size), f));
- fcount++;
+ QFontMetrics fm(f);
+ // don't trust f.fixedPitch() or f.exactMatch(), they lie!!
+ if (fm.width("l") == fm.width("m")
+ && (i < (uint)sizes.count()
+ || fm.width("m") > last_width))
+ {
+ if (i < (uint)sizes.count())
+ {
+ last_width = fm.width("m");
}
+ if (sizeMenu == NULL)
+ {
+ sizeMenu = new QPopupMenu();
+ }
+ int id = sizeMenu->insertItem(QString("%1").arg(size), fontIndex);
+ sizeMenu->setItemParameter(id, fontIndex);
+ sizeMenu->connectItem(id, this, SLOT(setFont(int)));
+ QString name = s + " " + QString::number(size);
+ fonts.append(new VTFont(name, f, familyNames[j], familyNum, size));
+ if (familyNames[j] == cfgFontName && size == cfgFontSize)
+ {
+ cfont = fontIndex;
}
+ printf("FOUND: %s family %s size %d\n", name.latin1(), familyNames[j].latin1(), size);
+ fontIndex++;
}
}
+ if (sizeMenu)
+ {
+ fontList->insertItem(s, sizeMenu, familyNum + 1000);
+
+ familyNum++;
+ }
}
-// END NEW STUFF
+ }
+ if (cfont < 0 || cfont >= (int)fonts.count())
+ {
+ cfont = 0;
+ }
// create terminal emulation framework ////////////////////////////////////
nsessions = 0;
tab = new EKNumTabWidget(this);
-
+ // tab->setMargin(tab->margin()-5);
connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*)));
// create terminal toolbar ////////////////////////////////////////////////
setToolBarsMovable( FALSE );
- QToolBar *menuToolBar = new QToolBar( this );
+ menuToolBar = new QToolBar( this );
menuToolBar->setHorizontalStretchable( TRUE );
QMenuBar *menuBar = new QMenuBar( menuToolBar );
- fontList = new QPopupMenu( this );
- for(uint i = 0; i < fonts.count(); i++) {
- VTFont *fnt = fonts.at(i);
- fontList->insertItem(fnt->getName(), i);
+ bool c7xx = false;
+ if (qApp->desktop()->width() > 600 || qApp->desktop()->height() > 600)
+ {
+ c7xx = true;
}
+ QFont menuFont;
+ menuFont.setPointSize(c7xx? 18 : 10);
+ qApp->setFont(menuFont, true);
- fontChanged(cfont);
+ setFont(cfont);
configMenu = new QPopupMenu( this);
colorMenu = new QPopupMenu( this);
@@ -376,92 +513,133 @@ void Konsole::init(const char* _pgm, QStrList & _args)
bool listHidden;
cfg.setGroup("Menubar");
- if( cfg.readEntry("Hidden","FALSE") == "TRUE") {
- editCommandListMenu->insertItem( tr( "Show command list" ));
+ if( cfg.readEntry("Hidden","FALSE") == "TRUE")
+ {
+ ec_cmdlist = editCommandListMenu->insertItem( tr( "Show command list" ));
listHidden=TRUE;
- } else {
- editCommandListMenu->insertItem( tr( "Hide command list" ));
+ }
+ else
+ {
+ ec_cmdlist = editCommandListMenu->insertItem( tr( "Hide command list" ));
listHidden=FALSE;
}
cfg.setGroup("Tabs");
- tmp=cfg.readEntry("Position","Bottom");
- if(tmp=="Top") {
+
+ tabMenu = new QPopupMenu(this);
+ tm_bottom = tabMenu->insertItem(tr("Bottom" ));
+ tm_top = tabMenu->insertItem(tr("Top"));
+ tm_hidden = tabMenu->insertItem(tr("Hidden"));
+
+ configMenu->insertItem(tr("Tabs"), tabMenu);
+
+ tmp=cfg.readEntry("Position","Top");
+ if(tmp=="Top")
+ {
tab->setTabPosition(QTabWidget::Top);
- configMenu->insertItem( tr( "Tabs on Bottom" ) );
- } else {
+ tab->getTabBar()->show();
+ tabPos = tm_top;
+ }
+ else if (tmp=="Bottom")
+ {
tab->setTabPosition(QTabWidget::Bottom);
- configMenu->insertItem(tr("Tabs on Top"));
- }
- configMenu->insertSeparator(2);
-
- colorMenu->insertItem(tr( "Green on Black"));
- colorMenu->insertItem(tr( "Black on White"));
- colorMenu->insertItem(tr( "White on Black"));
- colorMenu->insertItem(tr( "Black on Transparent"));
- colorMenu->insertItem(tr( "Black on Red"));
- colorMenu->insertItem(tr( "Red on Black"));
- colorMenu->insertItem(tr( "Green on Yellow"));
- colorMenu->insertItem(tr( "Blue on Magenta"));
- colorMenu->insertItem(tr( "Magenta on Blue"));
- colorMenu->insertItem(tr( "Cyan on White"));
- colorMenu->insertItem(tr( "White on Cyan"));
- colorMenu->insertItem(tr( "Blue on Black"));
- colorMenu->insertItem(tr( "Amber on Black"));
+ tab->getTabBar()->show();
+ tabPos = tm_bottom;
+ }
+ else
+ {
+ tab->getTabBar()->hide();
+ tab->setMargin(tab->margin());
+ tabPos = tm_hidden;
+ }
+
+ cm_bw = colorMenu->insertItem(tr( "Black on White"));
+ cm_wb = colorMenu->insertItem(tr( "White on Black"));
+ cm_gb = colorMenu->insertItem(tr( "Green on Black"));
+ // cm_bt = colorMenu->insertItem(tr( "Black on Transparent"));
+ cm_br = colorMenu->insertItem(tr( "Black on Pink"));
+ cm_rb = colorMenu->insertItem(tr( "Pink on Black"));
+ cm_gy = colorMenu->insertItem(tr( "Green on Yellow"));
+ cm_bm = colorMenu->insertItem(tr( "Blue on Magenta"));
+ cm_mb = colorMenu->insertItem(tr( "Magenta on Blue"));
+ cm_cw = colorMenu->insertItem(tr( "Cyan on White"));
+ cm_wc = colorMenu->insertItem(tr( "White on Cyan"));
+ cm_bb = colorMenu->insertItem(tr( "Blue on Black"));
+ cm_ab = colorMenu->insertItem(tr( "Amber on Black"));
+ cm_default = colorMenu->insertItem(tr("default"));
#ifdef QT_QWS_OPIE
+
colorMenu->insertItem(tr( "Custom"));
#endif
- configMenu->insertItem( tr("Font"), fontList );
configMenu->insertItem(tr( "Colors") ,colorMenu);
- connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) ));
+ sessionList = new QPopupMenu(this);
+ sessionList-> insertItem ( Resource::loadPixmap ( "qkonsole/qkonsole" ), tr( "new session" ), this,
+ SLOT(newSession()) );
+
+ // connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) ));
connect( configMenu, SIGNAL( activated(int) ), this, SLOT( configMenuSelected(int) ));
connect( colorMenu, SIGNAL( activated(int) ), this, SLOT( colorMenuIsSelected(int) ));
+ connect( tabMenu, SIGNAL( activated(int) ), this, SLOT( tabMenuSelected(int) ));
connect( scrollMenu, SIGNAL(activated(int)),this,SLOT(scrollMenuSelected(int)));
connect(editCommandListMenu,SIGNAL(activated(int)),this,SLOT(editCommandListMenuSelected(int)));
+ connect( sessionList, SIGNAL(activated(int)), this, SLOT( sessionListSelected(int) ) );
- menuBar->insertItem( tr("Options"), configMenu );
+ menuBar->insertItem( tr("View"), configMenu );
+ menuBar->insertItem( tr("Fonts"), fontList );
+ menuBar->insertItem( tr("Sessions"), sessionList );
- QToolBar *toolbar = new QToolBar( this );
+ toolBar = new QToolBar( this );
QAction *a;
// Button Commands
- a = new QAction( tr("New"), Resource::loadPixmap( "konsole" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( newSession() ) ); a->addTo( toolbar );
+ a = new QAction( tr("New"), Resource::loadPixmap( "konsole/Terminal" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( newSession() ) );
+ a->addTo( toolBar );
+
+ a = new QAction( tr("Full Screen"), Resource::loadPixmap( "fullscreen" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( toggleFullScreen() ) );
+ a->addTo( toolBar );
+
+ a = new QAction( tr("Zoom"), Resource::loadPixmap( "zoom" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( cycleZoom() ) );
+ a->addTo( toolBar );
+
+
+ /*
a = new QAction( tr("Enter"), Resource::loadPixmap( "konsole/enter" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( hitEnter() ) ); a->addTo( toolbar );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitEnter() ) ); a->addTo( toolBar );
a = new QAction( tr("Space"), Resource::loadPixmap( "konsole/space" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( hitSpace() ) ); a->addTo( toolbar );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitSpace() ) ); a->addTo( toolBar );
a = new QAction( tr("Tab"), Resource::loadPixmap( "konsole/tab" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( hitTab() ) ); a->addTo( toolbar );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitTab() ) ); a->addTo( toolBar );
+ */
+ /*
a = new QAction( tr("Up"), Resource::loadPixmap( "konsole/up" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( hitUp() ) ); a->addTo( toolbar );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitUp() ) ); a->addTo( toolBar );
a = new QAction( tr("Down"), Resource::loadPixmap( "konsole/down" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolbar );
- a = new QAction( tr("Paste"), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( hitPaste() ) ); a->addTo( toolbar );
-/*
- a = new QAction( tr("Up"), Resource::loadPixmap( "up" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( hitUp() ) ); a->addTo( toolbar );
- a = new QAction( tr("Down"), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 );
- connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolbar );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolBar );
*/
+ a = new QAction( tr("Paste"), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitPaste() ) );
+ a->addTo( toolBar );
secondToolBar = new QToolBar( this );
secondToolBar->setHorizontalStretchable( TRUE );
commonCombo = new QComboBox( secondToolBar );
- commonCombo->setMaximumWidth(236);
+ // commonCombo->setMaximumWidth(236);
- editCommandListMenu->insertItem( tr( "Quick Edit" ) );
- if( listHidden) {
+ ec_quick = editCommandListMenu->insertItem( tr( "Quick Edit" ) );
+ if( listHidden)
+ {
secondToolBar->hide();
- editCommandListMenu->setItemEnabled(-23 ,FALSE);
+ editCommandListMenu->setItemEnabled(ec_quick ,FALSE);
}
- editCommandListMenu->insertItem(tr( "Edit" ) );
+ ec_edit = editCommandListMenu->insertItem(tr( "Edit" ) );
cfg.setGroup("Commands");
commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
@@ -476,23 +654,36 @@ void Konsole::init(const char* _pgm, QStrList & _args)
connect( commonCombo, SIGNAL( activated(int) ), this, SLOT( enterCommand(int) ));
- scrollMenu->insertItem(tr( "None" ));
- scrollMenu->insertItem(tr( "Left" ));
- scrollMenu->insertItem(tr( "Right" ));
+ sm_none = scrollMenu->insertItem(tr( "None" ));
+ sm_left = scrollMenu->insertItem(tr( "Left" ));
+ sm_right = scrollMenu->insertItem(tr( "Right" ));
// scrollMenu->insertSeparator(4);
// scrollMenu->insertItem(tr( "Horizontal" ));
configMenu->insertItem(tr( "ScrollBar" ),scrollMenu);
- int jut = configMenu->insertItem(tr( "Wrap" ));
+ configMenu->insertItem(tr( "History" ), this, SLOT(historyDialog()));
+
+ cm_wrap = configMenu->insertItem(tr( "Wrap" ));
cfg.setGroup("ScrollBar");
- configMenu->setItemChecked(jut, cfg.readBoolEntry("HorzScroll",0));
+ configMenu->setItemChecked(cm_wrap, cfg.readBoolEntry("HorzScroll",0));
- jut = configMenu->insertItem(tr( "Use Beep" ));
+ cm_beep = configMenu->insertItem(tr( "Use Beep" ));
cfg.setGroup("Menubar");
+ configMenu->setItemChecked(cm_beep, cfg.readBoolEntry("useBeep",0));
- configMenu->setItemChecked(jut, cfg.readBoolEntry("useBeep",0));
+ fullscreen_msg = new QLabel(this);
+ fullscreen_msg-> setAlignment ( AlignCenter | SingleLine );
+ fullscreen_msg-> hide();
+ fullscreen_msg-> setSizePolicy ( QSizePolicy ( QSizePolicy::Expanding, QSizePolicy::Expanding ));
+ fullscreen_msg-> setAutoResize(true);
+ fullscreen_msg-> setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
+ fullscreen_msg-> setText(tr("To exit fullscreen, tap here."));
+ fullscreen_timer = new QTimer(this);
+ connect(fullscreen_timer, SIGNAL(timeout()),
+ this, SLOT(fullscreenTimeout()));
+ show_fullscreen_msg = true;
//scrollMenuSelected(-29);
// cfg.setGroup("ScrollBar");
@@ -510,24 +701,59 @@ void Konsole::init(const char* _pgm, QStrList & _args)
// load keymaps ////////////////////////////////////////////////////////////
KeyTrans::loadAll();
for (int i = 0; i < KeyTrans::count(); i++)
- { KeyTrans* s = KeyTrans::find(i);
+ {
+ KeyTrans* s = KeyTrans::find(i);
assert( s );
}
se_pgm = _pgm;
se_args = _args;
+
+ cfg.setGroup("CommandLine");
+
+ if (cfg.hasKey("shell_args"))
+ {
+ QStringList se_args_list = cfg.readListEntry("shell_args",'|');
+ for(uint i = 0; i < se_args_list.count(); i++)
+ {
+ se_args.prepend(se_args_list[se_args_list.count() - i - 1].latin1());
+ }
+ }
+ else
+ {
se_args.prepend("--login");
+ }
+
+ se_pgm = cfg.readEntry("shell_bin", QString(se_pgm));
+
+ // this is the "documentation" for those who know to look
+ if (! cfg.hasKey("shell_args"))
+ {
+ cfg.writeEntry("shell_args",QStringList::fromStrList(se_args),'|');
+ }
+ if (! cfg.hasKey("shell_bin"))
+ {
+ cfg.writeEntry("shell_bin",QString(se_pgm));
+ }
+
parseCommandLine();
+
// read and apply default values ///////////////////////////////////////////
resize(321, 321); // Dummy.
QSize currentSize = size();
if (currentSize != size())
defaultSize = size();
+
+
+ /* allows us to catch cancel/escape */
+ reparent ( 0, WStyle_Customize | WStyle_NoBorder,
+ QPoint ( 0, 0 ));
}
void Konsole::show()
{
- if ( !nsessions ) {
+ if ( !nsessions )
+ {
newSession();
}
QMainWindow::show();
@@ -541,41 +767,214 @@ void Konsole::initSession(const char*, QStrList &)
Konsole::~Konsole()
{
- while (nsessions > 0) {
- doneSession(getTe()->currentSession, 0);
+ while (nsessions > 0)
+ {
+ doneSession(getTe(), 0);
+ }
+}
+
+void
+Konsole::historyDialog()
+{
+ QDialog *d = new QDialog ( this, "histdlg", true );
+ // d-> setCaption ( tr( "History" ));
+
+ QBoxLayout *lay = new QVBoxLayout ( d, 4, 4 );
+
+ QLabel *l = new QLabel ( tr( "History Lines:" ), d );
+ lay-> addWidget ( l );
+
+ Config cfg("Qkonsole");
+ cfg.setGroup("History");
+ int hist = cfg.readNumEntry("history_lines",300);
+ int avg_line = cfg.readNumEntry("avg_line_length",60);
+
+ QSpinBox *spin = new QSpinBox ( 1, 100000, 20, d );
+ spin-> setValue ( hist );
+ spin-> setWrapping ( true );
+ spin-> setButtonSymbols ( QSpinBox::PlusMinus );
+ lay-> addWidget ( spin );
+
+ if ( d-> exec ( ) == QDialog::Accepted )
+ {
+ cfg.writeEntry("history_lines", spin->value());
+ cfg.writeEntry("avg_line_length", avg_line);
+ if (getTe() != NULL)
+ {
+ getTe()->currentSession->setHistory(true);
+ }
+ }
+
+ delete d;
+}
+
+
+void Konsole::cycleZoom()
+{
+ TEWidget* te = getTe();
+ QFont font = te->getVTFont();
+ int size = font.pointSize();
+ changeFontSize(1);
+ font = te->getVTFont();
+ if (font.pointSize() <= size)
+ {
+ do
+ {
+ font = te->getVTFont();
+ size = font.pointSize();
+ changeFontSize(-1);
+ font = te->getVTFont();
+ }
+ while (font.pointSize() < size);
+ }
+}
+
+void Konsole::changeFontSize(int delta)
+{
+ // printf("delta font size %d\n", delta);
+ TEWidget* te = getTe();
+ QFont font = te->getVTFont();
+ int size = font.pointSize();
+ int closest = delta > 0? 10000 : -10000;
+ int closest_font = -1;
+ for(uint i = 0; i < fonts.count(); i++)
+ {
+ if (fonts.at(i)->getFont() == font)
+ {
+ if (delta > 0)
+ {
+ if (i+1 < fonts.count()
+ && fonts.at(i+1)->getFamilyNum() == fonts.at(i)->getFamilyNum())
+ {
+ setFont(i+1);
+ printf("font %d\n", i+1);
+ return;
+ }
+ }
+ else if (delta < 0)
+ {
+ if (i > 0
+ && fonts.at(i-1)->getFamilyNum() == fonts.at(i)->getFamilyNum())
+ {
+ setFont(i-1);
+ printf("font %d\n", i-1);
+ return;
+ }
+ }
+ }
+ int fsize = fonts.at(i)->getSize();
+ printf("%d size=%d fsize=%d closest=%d\n", i, size, fsize, closest);
+ if ((delta > 0 && fsize > size && fsize < closest)
+ || (delta < 0 && fsize < size && fsize > closest))
+ {
+ closest = fsize;
+ closest_font = i;
+ }
+ }
+ if (closest_font >= 0)
+ {
+ printf("font closest %d (%d)\n", closest_font, closest);
+ setFont(closest_font);
+ }
}
- Config cfg("Konsole");
- cfg.setGroup("Konsole");
- cfg.writeEntry("FontID", cfont);
+int Konsole::findFont(QString name, int size, bool exactMatch)
+{
+ for(uint i = 0; i < fonts.count(); i++)
+ {
+ if (fonts.at(i)->getName() == name
+ && fonts.at(i)->getSize() == size)
+ {
+ return(i);
+ }
+ }
+ if (exactMatch)
+ {
+ return(-1);
+ }
+ for(uint i = 0; i < fonts.count(); i++)
+ {
+ if (fonts.at(i)->getSize() == size)
+ {
+ return(i);
+ }
+ }
+ return(-1);
}
+void Konsole::setFont(int f)
+{
+ VTFont* font = fonts.at(f);
+ if (font)
+ {
+ TEWidget* te = getTe();
+ if (te != 0)
+ {
+ te->setVTFont(font->getFont());
+ }
+ cfont = f;
+
+ int familyNum = font->getFamilyNum();
+ int size = font->getSize();
+ printf("familyNum = %d size = %d count=%d\n", familyNum, size,
+ fontList->count());
+ for(int i = 0; i < (int)fontList->count(); i++)
+ {
+ fontList->setItemChecked(i + 1000, i == familyNum);
+ }
+ for(int i = 0; i < (int)fonts.count(); i++)
+ {
+ fontList->setItemChecked(i, fonts.at(i)->getFamilyNum() == familyNum
+ && fonts.at(i)->getSize() == size);
+ }
+ Config cfg("Qkonsole");
+ cfg.setGroup("Font");
+ QString ss = "Session"+ QString::number(tab->currentPageIndex()+1);
+ if (tab->currentPageIndex() == 0)
+ {
+ cfg.writeEntry("FontName", fonts.at(cfont)->getFamily());
+ cfg.writeEntry("FontSize", fonts.at(cfont)->getSize());
+ }
+ cfg.writeEntry("FontName"+ss, fonts.at(cfont)->getFamily());
+ cfg.writeEntry("FontSize"+ss, fonts.at(cfont)->getSize());
+ }
+}
+
+#if 0
void Konsole::fontChanged(int f)
{
VTFont* font = fonts.at(f);
- if (font != 0) {
- for(uint i = 0; i < fonts.count(); i++) {
+ if (font != 0)
+ {
+ for(uint i = 0; i < fonts.count(); i++)
+ {
fontList->setItemChecked(i, (i == (uint) f) ? TRUE : FALSE);
}
cfont = f;
TEWidget* te = getTe();
- if (te != 0) {
+ if (te != 0)
+ {
te->setVTFont(font->getFont());
}
}
}
+#endif
void Konsole::enterCommand(int c)
{
TEWidget* te = getTe();
- if (te != 0) {
- if(!commonCombo->editable()) {
+ if (te != 0)
+ {
+ if(!commonCombo->editable())
+ {
QString text = commonCombo->text(c); //commonCmds[c];
te->emitText(text);
- } else {
+ }
+ else
+ {
changeCommand( commonCombo->text(c), c);
}
}
@@ -584,7 +983,8 @@ void Konsole::enterCommand(int c)
void Konsole::hitEnter()
{
TEWidget* te = getTe();
- if (te != 0) {
+ if (te != 0)
+ {
te->emitText(QString("\r"));
}
}
@@ -592,7 +992,8 @@ void Konsole::hitEnter()
void Konsole::hitSpace()
{
TEWidget* te = getTe();
- if (te != 0) {
+ if (te != 0)
+ {
te->emitText(QString(" "));
}
}
@@ -600,7 +1001,8 @@ void Konsole::hitSpace()
void Konsole::hitTab()
{
TEWidget* te = getTe();
- if (te != 0) {
+ if (te != 0)
+ {
te->emitText(QString("\t"));
}
}
@@ -608,7 +1010,8 @@ void Konsole::hitTab()
void Konsole::hitPaste()
{
TEWidget* te = getTe();
- if (te != 0) {
+ if (te != 0)
+ {
te->pasteClipboard();
}
}
@@ -616,7 +1019,8 @@ void Konsole::hitPaste()
void Konsole::hitUp()
{
TEWidget* te = getTe();
- if (te != 0) {
+ if (te != 0)
+ {
QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Up, 0, 0);
QApplication::sendEvent( te, &ke );
}
@@ -625,7 +1029,8 @@ void Konsole::hitUp()
void Konsole::hitDown()
{
TEWidget* te = getTe();
- if (te != 0) {
+ if (te != 0)
+ {
QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Down, 0, 0);
QApplication::sendEvent( te, &ke );
}
@@ -635,12 +1040,16 @@ void Konsole::hitDown()
This function calculates the size of the external widget
needed for the internal widget to be
*/
-QSize Konsole::calcSize(int columns, int lines) {
+QSize Konsole::calcSize(int columns, int lines)
+{
TEWidget* te = getTe();
- if (te != 0) {
+ if (te != 0)
+ {
QSize size = te->calcSize(columns, lines);
return size;
- } else {
+ }
+ else
+ {
QSize size;
return size;
}
@@ -663,7 +1072,9 @@ void Konsole::setColLin(int columns, int lines)
// notifySize(24,80); // set menu items (strange arg order !)
}
resize(defaultSize);
- } else {
+ }
+ else
+ {
resize(calcSize(columns, lines));
// notifySize(lines,columns); // set menu items (strange arg order !)
}
@@ -697,9 +1108,8 @@ void Konsole::setFont(int fontno)
// --| color selection |-------------------------------------------------------
-void Konsole::changeColumns(int columns)
-{
- //FIXME this seems to cause silliness when reset command is executed
+void Konsole::changeColumns(int /*columns*/)
+{ //FIXME this seems to cause silliness when reset command is executed
// qDebug("change columns");
// TEWidget* te = getTe();
// if (te != 0) {
@@ -712,183 +1122,418 @@ void Konsole::changeColumns(int columns)
// this routine might be called before
// session swap is completed.
-void Konsole::doneSession(TESession*, int )
+void Konsole::doneSession(TEWidget* te, int )
+{
+ // TEWidget *te = NULL;
+ // if (sess->currentSession == tab->currentPage()) {
+ // printf("done current session\n");
+ // te = getTe();
+ // } else {
+ // int currentPage = tab->currentPageIndex();
+ // printf("done not current session\n");
+ // for(int i = 0; i < nsessions; i++) {
+ // tab->setCurrentPage(i);
+ // printf("find session %d tab page %x session %x\n",
+ // i, tab->currentPage(), sess->currentSession);
+ // if (tab->currentPage() == sess->currentSession) {
+ // printf("found session %d\n", i);
+ // te = tab->currentPage();
+ // break;
+ // }
+ // }
+ // tab->setCurrentPage(currentPage);
+ // }
+ if (te != 0)
{
- TEWidget *te = getTe();
- if (te != 0) {
te->currentSession->setConnect(FALSE);
tab->removeTab(te);
delete te->currentSession;
delete te;
+ sessionList->removeItem(nsessions);
nsessions--;
}
-
- if (nsessions == 0) {
+ if (nsessions == 0)
+ {
close();
}
}
-void Konsole::newSession() {
- if(nsessions < 15) { // seems to be something weird about 16 tabs on the Zaurus.... memory?
+void Konsole::changeTitle(TEWidget* te, QString newTitle )
+{
+ if (te == getTe())
+ {
+ setCaption(newTitle + " - QKonsole");
+ }
+}
+
+
+void Konsole::newSession()
+{
+ if(nsessions < 15)
+ { // seems to be something weird about 16 tabs on the Zaurus.... memory?
TEWidget* te = new TEWidget(tab);
- Config c("Konsole");
- c.setGroup("Menubar");
- te->useBeep=c.readBoolEntry("useBeep",0);
+ Config cfg("Qkonsole");
+ cfg.setGroup("Menubar");
+
+ // FIXME use more defaults from config file
+ te->useBeep=cfg.readBoolEntry("useBeep",0);
// te->setBackgroundMode(PaletteBase); //we want transparent!!
+
+ cfg.setGroup("Font");
+ QString sn = "Session" + QString::number(nsessions+1);
+ printf("read font session %s\n", sn.latin1());
+ QString fontName = cfg.readEntry("FontName"+sn,
+ cfg.readEntry("FontName",
+ fonts.at(cfont)->getFamily()));
+ int fontSize = cfg.readNumEntry("FontSize"+sn,
+ cfg.readNumEntry("FontSize",
+ fonts.at(cfont)->getSize()));
+ cfont = findFont(fontName, fontSize, false);
+ printf("lookup font %s size %d got %d\n", fontName.latin1(), fontSize, cfont);
+ if (cfont < 0)
+ cfont = 0;
te->setVTFont(fonts.at(cfont)->getFont());
+
tab->addTab(te);
TESession* se = new TESession(this, te, se_pgm, se_args, "xterm");
te->currentSession = se;
- connect( se, SIGNAL(done(TESession*,int)), this, SLOT(doneSession(TESession*,int)) );
+ connect( se, SIGNAL(done(TEWidget*,int)), this, SLOT(doneSession(TEWidget*,int)) );
+ connect( se, SIGNAL(changeTitle(TEWidget*,QString)), this,
+ SLOT(changeTitle(TEWidget*,QString)) );
+ connect(te, SIGNAL(changeFontSize(int)), this, SLOT(changeFontSize(int)));
+ connect(te, SIGNAL(changeSession(int)), this, SLOT(changeSession(int)));
+ connect(te, SIGNAL(newSession()), this, SLOT(newSession()));
+ connect(te, SIGNAL(toggleFullScreen()), this, SLOT(toggleFullScreen()));
+ connect(te, SIGNAL(setFullScreen(bool)), this, SLOT(setFullScreen(bool)));
se->run();
se->setConnect(TRUE);
se->setHistory(b_scroll);
- tab->setCurrentPage(nsessions);
nsessions++;
+ sessionList->insertItem(QString::number(nsessions), nsessions);
+ sessionListSelected(nsessions);
doWrap();
- setColor();
+ setColor(nsessions-1);
}
}
-TEWidget* Konsole::getTe() {
- if (nsessions) {
+TEWidget* Konsole::getTe()
+{
+ if (nsessions)
+ {
return (TEWidget *) tab->currentPage();
- } else {
+ }
+ else
+ {
return 0;
}
}
-void Konsole::switchSession(QWidget* w) {
- TEWidget* te = (TEWidget *) w;
+void Konsole::sessionListSelected(int id)
+{
+ if (id < 0)
+ {
+ return;
+ }
+ QString selected = sessionList->text(id);
+ EKNumTabBar *tabBar = tab->getTabBar();
+
+ int n = 0;
+ for(int i = 0; n < tabBar->count(); i++)
+ {
+ if (tabBar->tab(i))
+ {
+ // printf("selected = %s tab %d = %s\n", selected.latin1(),
+ // i, tabBar->tab(i)->text().latin1());
+ if (tabBar->tab(i)->text() == selected)
+ {
+ tab->setCurrentPage(i);
+ break;
+ }
+ n++;
+ }
+ }
+}
+
+void Konsole::changeSession(int delta)
+{
+ printf("delta session %d\n", delta);
+ QTabBar *tabBar = tab->getTabBar();
+ int i = tabBar->tab(tabBar->currentTab())->text().toInt() - 1;
+ i += delta;
+ if (i < 0)
+ i += tabBar->count();
+ if (i >= tabBar->count())
+ i -= tabBar->count();
+
+ QString selected = QString::number(i+1);
+ int n = 0;
+ for(int i = 0; n < tabBar->count(); i++)
+ {
+ if (tabBar->tab(i))
+ {
+ printf("selected = %s tab %d = %s\n", selected.latin1(),
+ i, tabBar->tab(i)->text().latin1());
+ if (tabBar->tab(i)->text() == selected)
+ {
+ tab->setCurrentPage(i);
+ break;
+ }
+ n++;
+ }
+ }
+}
+
+void Konsole::switchSession(QWidget* w)
+{
+ TEWidget* te = (TEWidget *) w;
QFont teFnt = te->getVTFont();
- for(uint i = 0; i < fonts.count(); i++) {
+ int familyNum = -1;
+
+ for(uint i = 0; i < fonts.count(); i++)
+ {
VTFont *fnt = fonts.at(i);
bool cf = fnt->getFont() == teFnt;
fontList->setItemChecked(i, cf);
- if (cf) {
+ if (cf)
+ {
cfont = i;
+ familyNum = fnt->getFamilyNum();
+ }
+ }
+ for(int i = 0; i < (int)fontList->count(); i++)
+ {
+ fontList->setItemChecked(i + 1000, i == familyNum);
+ }
+ if (! te->currentSession->Title().isEmpty() )
+ {
+ setCaption(te->currentSession->Title() + " - QKonsole");
+ }
+ else
+ {
+ setCaption( "Qkonsole" );
+ }
+ // colorMenuSelected(te->color_menu_item);
}
+
+
+void Konsole::toggleFullScreen()
+{
+ setFullScreen(! fullscreen);
+}
+
+void Konsole::setFullScreen ( bool b )
+{
+ static QSize normalsize;
+ static bool listHidden;
+
+ if (b == fullscreen)
+ {
+ return;
+ }
+
+ fullscreen = b;
+
+ if ( b )
+ {
+ if ( !normalsize. isValid ( ))
+ {
+ normalsize = size ( );
}
+
+ setFixedSize ( qApp-> desktop ( )-> size ( ));
+ showNormal ( );
+ reparent ( 0, WStyle_Customize | WStyle_NoBorder,
+ QPoint ( 0, 0 ));
+ showFullScreen ( );
+
+ menuToolBar->hide();
+ toolBar->hide();
+ listHidden = secondToolBar->isHidden();
+ secondToolBar->hide();
+ // commonCombo->hide();
+ tab->getTabBar()->hide();
+ tab->setMargin(tab->margin());
+
+ if (show_fullscreen_msg)
+ {
+ fullscreen_msg-> move(tab->x() + tab->width()/2 - fullscreen_msg->width()/2,
+ qApp->desktop()->height()/16 - fullscreen_msg->height()/2);
+ fullscreen_msg->show();
+ fullscreen_timer->start(3000, true);
+ show_fullscreen_msg = false;
+ }
+ }
+ else
+ {
+ showNormal ( );
+ reparent ( 0, WStyle_Customize, QPoint ( 0, 0 ));
+ resize ( normalsize );
+ showMaximized ( );
+ normalsize = QSize ( );
+
+ menuToolBar->show();
+ toolBar->show();
+ if(! listHidden)
+ {
+ secondToolBar->show();
+ }
+ // commonCombo->show();
+ menuToolBar->show();
+ if (tabPos != tm_hidden)
+ {
+ tab->getTabBar()->show();
+ }
+ }
+ tab->setMargin(tab->margin()); // cause setup to run
+}
+
+
+void Konsole::fullscreenTimeout()
+{
+ fullscreen_msg->hide();
}
-void Konsole::colorMenuIsSelected(int iD) {
+void Konsole::colorMenuIsSelected(int iD)
+{
fromMenu = TRUE;
colorMenuSelected(iD);
}
/// ------------------------------- some new stuff by L.J. Potter
+
+
void Konsole::colorMenuSelected(int iD)
-{ // this is NOT pretty, elegant or anything else besides functional
+{
+ // this is NOT pretty, elegant or anything else besides functional
// QString temp;
// qDebug( temp.sprintf("colormenu %d", iD));
TEWidget* te = getTe();
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("Colors");
-// QColor foreground;
-// QColor background;
- colorMenu->setItemChecked(lastSelectedMenu,FALSE);
+
ColorEntry m_table[TABLE_COLORS];
const ColorEntry * defaultCt=te->getdefaultColorTable();
- /////////// fore back
+
int i;
- if(iD==-9) { // default default
- for (i = 0; i < TABLE_COLORS; i++) {
+
+ // te->color_menu_item = iD;
+
+ colorMenu->setItemChecked(cm_ab,FALSE);
+ colorMenu->setItemChecked(cm_bb,FALSE);
+ colorMenu->setItemChecked(cm_wc,FALSE);
+ colorMenu->setItemChecked(cm_cw,FALSE);
+ colorMenu->setItemChecked(cm_mb,FALSE);
+ colorMenu->setItemChecked(cm_bm,FALSE);
+ colorMenu->setItemChecked(cm_gy,FALSE);
+ colorMenu->setItemChecked(cm_rb,FALSE);
+ colorMenu->setItemChecked(cm_br,FALSE);
+ colorMenu->setItemChecked(cm_wb,FALSE);
+ colorMenu->setItemChecked(cm_bw,FALSE);
+ colorMenu->setItemChecked(cm_gb,FALSE);
+
+ if(iD==cm_default)
+ { // default default
+ printf("default colors\n");
+ for (i = 0; i < TABLE_COLORS; i++)
+ {
m_table[i].color = defaultCt[i].color;
if(i==1 || i == 11)
m_table[i].transparent=1;
- cfg.writeEntry("Schema","9");
- colorMenu->setItemChecked(-9,TRUE);
+ colorMenu->setItemChecked(cm_default,TRUE);
+ }
+ te->setColorTable(m_table);
}
- } else {
- if(iD==-6) { // green black
- foreground.setRgb(0x18,255,0x18);
+ if(iD==cm_gb)
+ { // green black
+ foreground.setRgb(100,255,100); // (0x18,255,0x18);
background.setRgb(0x00,0x00,0x00);
- cfg.writeEntry("Schema","6");
- colorMenu->setItemChecked(-6,TRUE);
+ colorMenu->setItemChecked(cm_gb,TRUE);
}
- if(iD==-7) { // black white
+ if(iD==cm_bw)
+ { // black white
foreground.setRgb(0x00,0x00,0x00);
background.setRgb(0xFF,0xFF,0xFF);
- cfg.writeEntry("Schema","7");
- colorMenu->setItemChecked(-7,TRUE);
+ colorMenu->setItemChecked(cm_bw,TRUE);
}
- if(iD==-8) { // white black
+ if(iD==cm_wb)
+ { // white black
foreground.setRgb(0xFF,0xFF,0xFF);
background.setRgb(0x00,0x00,0x00);
- cfg.writeEntry("Schema","8");
- colorMenu->setItemChecked(-8,TRUE);
+ colorMenu->setItemChecked(cm_wb,TRUE);
}
- if(iD==-10) {// Black, Red
+ if(iD==cm_br)
+ {// Black, Red
foreground.setRgb(0x00,0x00,0x00);
- background.setRgb(0xB2,0x18,0x18);
- cfg.writeEntry("Schema","10");
- colorMenu->setItemChecked(-10,TRUE);
+ background.setRgb(255,85,85); //(0xB2,0x18,0x18);
+ colorMenu->setItemChecked(cm_br,TRUE);
}
- if(iD==-11) {// Red, Black
- foreground.setRgb(230,31,31); //0xB2,0x18,0x18
+ if(iD==cm_rb)
+ {// Red, Black
+ foreground.setRgb(255,85,85);
background.setRgb(0x00,0x00,0x00);
- cfg.writeEntry("Schema","11");
- colorMenu->setItemChecked(-11,TRUE);
+ colorMenu->setItemChecked(cm_rb,TRUE);
}
- if(iD==-12) {// Green, Yellow - is ugly
+ if(iD==cm_gy)
+ {// Green, Yellow - is ugly
// foreground.setRgb(0x18,0xB2,0x18);
- foreground.setRgb(36,139,10);
+ foreground.setRgb(15,115,0);
// background.setRgb(0xB2,0x68,0x18);
background.setRgb(255,255,0);
- cfg.writeEntry("Schema","12");
- colorMenu->setItemChecked(-12,TRUE);
- }
- if(iD==-13) {// Blue, Magenta
- foreground.setRgb(0x18,0xB2,0xB2);
- background.setRgb(0x18,0x18,0xB2);
- cfg.writeEntry("Schema","13");
- colorMenu->setItemChecked(-13,TRUE);
- }
- if(iD==-14) {// Magenta, Blue
- foreground.setRgb(0x18,0x18,0xB2);
- background.setRgb(0x18,0xB2,0xB2);
- cfg.writeEntry("Schema","14");
- colorMenu->setItemChecked(-14,TRUE);
- }
- if(iD==-15) {// Cyan, White
- foreground.setRgb(0x18,0xB2,0xB2);
+ colorMenu->setItemChecked(cm_gy,TRUE);
+ }
+ if(iD==cm_bm)
+ {// Blue, Magenta
+ foreground.setRgb(3,24,132);
+ background.setRgb(225,2,255);
+ colorMenu->setItemChecked(cm_bm,TRUE);
+ }
+ if(iD==cm_mb)
+ {// Magenta, Blue
+ foreground.setRgb(225,2,255);
+ background.setRgb(3,24,132);
+ colorMenu->setItemChecked(cm_mb,TRUE);
+ }
+ if(iD==cm_cw)
+ {// Cyan, White
+ foreground.setRgb(8,91,129);
background.setRgb(0xFF,0xFF,0xFF);
- cfg.writeEntry("Schema","15");
- colorMenu->setItemChecked(-15,TRUE);
+ colorMenu->setItemChecked(cm_cw,TRUE);
}
- if(iD==-16) {// White, Cyan
- background.setRgb(0x18,0xB2,0xB2);
+ if(iD==cm_wc)
+ {// White, Cyan
+ background.setRgb(8,91,129);
foreground.setRgb(0xFF,0xFF,0xFF);
- cfg.writeEntry("Schema","16");
- colorMenu->setItemChecked(-16,TRUE);
+ colorMenu->setItemChecked(cm_wc,TRUE);
}
- if(iD==-17) {// Black, Blue
+ if(iD==cm_bb)
+ {// Black, Blue
background.setRgb(0x00,0x00,0x00);
- foreground.setRgb(0x18,0xB2,0xB2);
- cfg.writeEntry("Schema","17");
- colorMenu->setItemChecked(-17,TRUE);
+ foreground.setRgb(127,147,225);
+ colorMenu->setItemChecked(cm_bb,TRUE);
}
- if(iD==-18) {// Black, Gold
+ if(iD==cm_ab)
+ {// Black, Gold
background.setRgb(0x00,0x00,0x00);
- foreground.setRgb(255,215,0);
- cfg.writeEntry("Schema","18");
- colorMenu->setItemChecked(-18,TRUE);
+ foreground.setRgb(255,215,105);
+ colorMenu->setItemChecked(cm_ab,TRUE);
}
#ifdef QT_QWS_OPIE
- if(iD==-19) {
+ if(iD==-19)
+ {
// Custom
qDebug("do custom");
- if(fromMenu) {
+ if(fromMenu)
+ {
OColorPopupMenu* penColorPopupMenu = new OColorPopupMenu(Qt::black, this, "foreground color");
connect(penColorPopupMenu, SIGNAL(colorSelected(const QColor&)), this,
SLOT(changeForegroundColor(const QColor&)));
penColorPopupMenu->exec();
}
- cfg.writeEntry("Schema","19");
- if(!fromMenu) {
+ if(!fromMenu)
+ {
foreground.setNamedColor(cfg.readEntry("foreground",""));
background.setNamedColor(cfg.readEntry("background",""));
}
@@ -896,94 +1541,160 @@ void Konsole::colorMenuSelected(int iD)
colorMenu->setItemChecked(-19,TRUE);
}
#endif
- for (i = 0; i < TABLE_COLORS; i++) {
- if(i==0 || i == 10) {
+
+ lastSelectedMenu = iD;
+
+ setColors(foreground, background);
+
+ QTabBar *tabBar = tab->getTabBar();
+ QString ss = QString("Session%1").arg(tabBar->currentTab());
+ // printf("current tab = %d\n", tabBar->currentTab());
+
+ if (tabBar->currentTab() == 0)
+ {
+ cfg.writeEntry("foregroundRed",QString::number(foreground.red()));
+ cfg.writeEntry("foregroundGreen",QString::number(foreground.green()));
+ cfg.writeEntry("foregroundBlue",QString::number(foreground.blue()));
+ cfg.writeEntry("backgroundRed",QString::number(background.red()));
+ cfg.writeEntry("backgroundGreen",QString::number(background.green()));
+ cfg.writeEntry("backgroundBlue",QString::number(background.blue()));
+ }
+ cfg.writeEntry("foregroundRed"+ss,QString::number(foreground.red()));
+ cfg.writeEntry("foregroundGreen"+ss,QString::number(foreground.green()));
+ cfg.writeEntry("foregroundBlue"+ss,QString::number(foreground.blue()));
+ cfg.writeEntry("backgroundRed"+ss,QString::number(background.red()));
+ cfg.writeEntry("backgroundGreen"+ss,QString::number(background.green()));
+ cfg.writeEntry("backgroundBlue"+ss,QString::number(background.blue()));
+
+ update();
+}
+
+void Konsole::setColors(QColor foreground, QColor background)
+{
+ int i;
+ ColorEntry m_table[TABLE_COLORS];
+ TEWidget* te = getTe();
+ const ColorEntry * defaultCt=te->getdefaultColorTable();
+
+ for (i = 0; i < TABLE_COLORS; i++)
+ {
+ if(i==0 || i == 10)
+ {
m_table[i].color = foreground;
}
- else if(i==1 || i == 11) {
- m_table[i].color = background; m_table[i].transparent=0;
+ else if(i==1 || i == 11)
+ {
+ m_table[i].color = background;
+ m_table[i].transparent=0;
}
else
m_table[i].color = defaultCt[i].color;
}
- }
- lastSelectedMenu = iD;
te->setColorTable(m_table);
- update();
-
}
-void Konsole::configMenuSelected(int iD)
+void Konsole::tabMenuSelected(int id)
{
-// QString temp;
-// qDebug( temp.sprintf("configmenu %d",iD));
-
- TEWidget* te = getTe();
- Config cfg("Konsole");
- cfg.setGroup("Menubar");
- int i,j;
-#ifdef QT_QWS_OPIE
- i=-29;j=-30;
-#else
- i=-28;j=-29;
-#endif
-
- if(iD == -4) {
+ Config cfg("Qkonsole");
cfg.setGroup("Tabs");
- QString tmp=cfg.readEntry("Position","Bottom");
-
- if(tmp=="Top") {
+ tabMenu->setItemChecked(tabPos, false);
+ if (id == tm_bottom)
+ {
+ printf("set bottom tab\n");
+ tab->getTabBar()->show();
tab->setTabPosition(QTabWidget::Bottom);
- configMenu->changeItem( iD, tr("Tabs on Top"));
+ tab->getTabBar()->show();
cfg.writeEntry("Position","Bottom");
- } else {
+ }
+ else if (id == tm_top)
+ {
+ printf("set top tab\n");
+ tab->getTabBar()->show();
+ tab->setTabPosition(QTabWidget::Bottom);
tab->setTabPosition(QTabWidget::Top);
- configMenu->changeItem( iD, tr("Tabs on Bottom"));
+ tab->getTabBar()->show();
cfg.writeEntry("Position","Top");
}
+ else if (id == tm_hidden)
+ {
+ tab->getTabBar()->hide();
+ tab->setMargin(tab->margin());
+ cfg.writeEntry("Position","Hidden");
+ }
+ tabMenu->setItemChecked(id, true);
+ tabPos = id;
}
- if(iD == i) {
+
+
+void Konsole::configMenuSelected(int iD)
+{
+ // QString temp;
+ // qDebug( temp.sprintf("configmenu %d",iD));
+
+ TEWidget* te = getTe();
+ Config cfg("Qkonsole");
+ cfg.setGroup("Menubar");
+ if(iD == cm_wrap)
+ {
cfg.setGroup("ScrollBar");
bool b=cfg.readBoolEntry("HorzScroll",0);
b=!b;
cfg.writeEntry("HorzScroll", b );
cfg.write();
doWrap();
- if(cfg.readNumEntry("Position",2) == 0) {
+ if(cfg.readNumEntry("Position",2) == 0)
+ {
te->setScrollbarLocation(1);
- } else {
+ }
+ else
+ {
te->setScrollbarLocation(0);
}
te->setScrollbarLocation( cfg.readNumEntry("Position",2));
}
- if(iD == j) {
+ if(iD == cm_beep)
+ {
cfg.setGroup("Menubar");
bool b=cfg.readBoolEntry("useBeep",0);
b=!b;
cfg.writeEntry("useBeep", b );
cfg.write();
- configMenu->setItemChecked(j,b);
+ configMenu->setItemChecked(cm_beep,b);
te->useBeep=b;
}
}
void Konsole::changeCommand(const QString &text, int c)
{
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("Commands");
- if(commonCmds[c] != text) {
+ if(commonCmds[c] != text)
+ {
cfg.writeEntry(QString::number(c),text);
commonCombo->clearEdit();
commonCombo->setCurrentItem(c);
}
}
-void Konsole::setColor()
+void Konsole::setColor(int sess)
{
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("Colors");
- int scheme = cfg.readNumEntry("Schema",1);
- if(scheme != 1) colorMenuSelected( -scheme);
+ QColor foreground, background;
+ QString ss = QString("Session") + QString::number(sess);
+ foreground.setRgb(cfg.readNumEntry("foregroundRed"+ss,
+ cfg.readNumEntry("foregroundRed",0xff)),
+ cfg.readNumEntry("foregroundGreen"+ss,
+ cfg.readNumEntry("foregroundGreen",0xff)),
+ cfg.readNumEntry("foregroundBlue"+ss,
+ cfg.readNumEntry("foregroundBlue",0xff)));
+ background.setRgb(cfg.readNumEntry("backgroundRed"+ss,
+ cfg.readNumEntry("backgroundRed",0)),
+ cfg.readNumEntry("backgroundGreen"+ss,
+ cfg.readNumEntry("backgroundGreen",0)),
+ cfg.readNumEntry("backgroundBlue"+ss,
+ cfg.readNumEntry("backgroundBlue",0)));
+ setColors(foreground, background);
}
void Konsole::scrollMenuSelected(int index)
@@ -991,27 +1702,28 @@ void Konsole::scrollMenuSelected(int index)
// qDebug( "scrollbar menu %d",index);
TEWidget* te = getTe();
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("ScrollBar");
- int i,j,k;
-#ifdef QT_QWS_OPIE
-i=-25;j=-26;k=-27;
-#else
-i=-24;j=-25;k=-26;
-#endif
- if(index == i) {
+ if(index == sm_none)
+ {
te->setScrollbarLocation(0);
cfg.writeEntry("Position",0);
- } else if(index == j) {
-
+ }
+ else if(index == sm_left)
+ {
te->setScrollbarLocation(1);
cfg.writeEntry("Position",1);
- } else if(index == k) {
-
+ }
+ else if(index == sm_right)
+ {
te->setScrollbarLocation(2);
cfg.writeEntry("Position",2);
}
+ scrollMenu->setItemChecked(sm_none, index == sm_none);
+ scrollMenu->setItemChecked(sm_left, index == sm_left);
+ scrollMenu->setItemChecked(sm_right, index == sm_right);
+}
// case -29: {
// bool b=cfg.readBoolEntry("HorzScroll",0);
@@ -1027,45 +1739,61 @@ i=-24;j=-25;k=-26;
// te->setScrollbarLocation( cfg.readNumEntry("Position",2));
// }
// break;
-}
void Konsole::editCommandListMenuSelected(int iD)
{
// QString temp;
// qDebug( temp.sprintf("edit command list %d",iD));
+
+ // FIXME: more cleanup needed here
+
+
TEWidget* te = getTe();
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("Menubar");
- if( iD == -3) {
- if(!secondToolBar->isHidden()) {
+ if( iD == ec_cmdlist)
+ {
+ if(!secondToolBar->isHidden())
+ {
secondToolBar->hide();
configMenu->changeItem( iD,tr( "Show Command List" ));
cfg.writeEntry("Hidden","TRUE");
- configMenu->setItemEnabled(-23 ,FALSE);
- } else {
+ configMenu->setItemEnabled(ec_edit ,FALSE);
+ configMenu->setItemEnabled(ec_quick ,FALSE);
+ }
+ else
+ {
secondToolBar->show();
configMenu->changeItem( iD,tr( "Hide Command List" ));
cfg.writeEntry("Hidden","FALSE");
- configMenu->setItemEnabled(-23 ,TRUE);
+ configMenu->setItemEnabled(ec_edit ,TRUE);
+ configMenu->setItemEnabled(ec_quick ,TRUE);
- if(cfg.readEntry("EditEnabled","FALSE")=="TRUE") {
- configMenu->setItemChecked(-23,TRUE);
+ if(cfg.readEntry("EditEnabled","FALSE")=="TRUE")
+ {
+ configMenu->setItemChecked(ec_edit,TRUE);
commonCombo->setEditable( TRUE );
- } else {
- configMenu->setItemChecked(-23,FALSE);
+ }
+ else
+ {
+ configMenu->setItemChecked(ec_edit,FALSE);
commonCombo->setEditable( FALSE );
}
}
}
- if( iD == -23) {
+ if( iD == ec_quick)
+ {
cfg.setGroup("Commands");
// qDebug("enableCommandEdit");
- if( !configMenu->isItemChecked(iD) ) {
+ if( !configMenu->isItemChecked(iD) )
+ {
commonCombo->setEditable( TRUE );
configMenu->setItemChecked(iD,TRUE);
commonCombo->setCurrentItem(0);
cfg.writeEntry("EditEnabled","TRUE");
- } else {
+ }
+ else
+ {
commonCombo->setEditable( FALSE );
configMenu->setItemChecked(iD,FALSE);
cfg.writeEntry("EditEnabled","FALSE");
@@ -1073,43 +1801,58 @@ void Konsole::editCommandListMenuSelected(int iD)
te->setFocus();
}
}
- if(iD == -24) {
+ if(iD == ec_edit)
+ {
// "edit commands"
CommandEditDialog *m = new CommandEditDialog(this);
connect(m,SIGNAL(commandsEdited()),this,SLOT(initCommandList()));
- QPEApplication::showDialog( m );
+ m->showMaximized();
}
}
// $QPEDIR/bin/qcop QPE/Application/embeddedkonsole 'setDocument(QString)' 'ssh -V'
-void Konsole::setDocument( const QString &cmd) {
+void Konsole::setDocument( const QString &cmd)
+{
newSession();
TEWidget* te = getTe();
- if(cmd.find("-e", 0, TRUE) != -1) {
+ if(cmd.find("-e", 0, TRUE) != -1)
+ {
QString cmd2;
cmd2=cmd.right(cmd.length()-3)+" &";
system(cmd2.latin1());
- if(startUp <= 1 && nsessions < 2) {
- doneSession(getTe()->currentSession, 0);
+ if(startUp <= 1 && nsessions < 2)
+ {
+ doneSession(getTe(), 0);
exit(0);
- } else
- doneSession(getTe()->currentSession, 0);
- } else {
- if (te != 0) {
+ }
+ else
+ doneSession(getTe(), 0);
+ }
+ else
+ {
+ if (te != 0)
+ {
te->emitText(cmd+"\r");
}
}
startUp++;
}
-void Konsole::parseCommandLine() {
+
+// what is the point of this when you can just
+// run commands by using the shell directly??
+void Konsole::parseCommandLine()
+{
QString cmd;
// newSession();
- for (int i=1;i< qApp->argc();i++) {
- if( QString(qApp->argv()[i]) == "-e") {
+ for (int i=1;i< qApp->argc();i++)
+ {
+ if( QString(qApp->argv()[i]) == "-e")
+ {
i++;
- for ( int j=i;j< qApp->argc();j++) {
+ for ( int j=i;j< qApp->argc();j++)
+ {
cmd+=QString(qApp->argv()[j])+" ";
}
cmd.stripWhiteSpace();
@@ -1120,8 +1863,9 @@ void Konsole::parseCommandLine() {
startUp++;
}
-void Konsole::changeForegroundColor(const QColor &color) {
- Config cfg("Konsole");
+void Konsole::changeForegroundColor(const QColor &color)
+{
+ Config cfg("Qkonsole");
cfg.setGroup("Colors");
int r, g, b;
color.rgb(&r,&g,&b);
@@ -1141,10 +1885,11 @@ qDebug("do other dialog");
#endif
}
-void Konsole::changeBackgroundColor(const QColor &color) {
+void Konsole::changeBackgroundColor(const QColor &color)
+{
qDebug("Change background");
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("Colors");
int r, g, b;
color.rgb(&r,&g,&b);
@@ -1154,23 +1899,20 @@ void Konsole::changeBackgroundColor(const QColor &color) {
cfg.write();
}
-void Konsole::doWrap() {
-int i;
-#ifdef QT_QWS_OPIE
-i=-29;
-#else
-i=-28;
-#endif
-
- Config cfg("Konsole");
+void Konsole::doWrap()
+{
+ Config cfg("Qkonsole");
cfg.setGroup("ScrollBar");
TEWidget* te = getTe();
- if( !cfg.readBoolEntry("HorzScroll",0)) {
+ if( !cfg.readBoolEntry("HorzScroll",0))
+ {
te->setWrapAt(0);
- configMenu->setItemChecked( i,TRUE);
- } else {
+ configMenu->setItemChecked( cm_wrap,TRUE);
+ }
+ else
+ {
// te->setWrapAt(90);
te->setWrapAt(120);
- configMenu->setItemChecked( i,FALSE);
+ configMenu->setItemChecked( cm_wrap,FALSE);
}
}
diff --git a/core/apps/embeddedkonsole/konsole.h b/core/apps/embeddedkonsole/konsole.h
index 7d5a908..37babbb 100644
--- a/core/apps/embeddedkonsole/konsole.h
+++ b/core/apps/embeddedkonsole/konsole.h
@@ -46,24 +46,43 @@ class Konsole : public QMainWindow
Q_OBJECT
public:
- static QString appName() { return QString::fromLatin1("embeddedkonsole"); }
+
+ static QString appName()
+ {
+ return QString::fromLatin1("embeddedkonsole");
+ }
Konsole(QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
+ Konsole(const char * name, const char* pgm, QStrList & _args, int histon);
~Konsole();
void setColLin(int columns, int lines);
QToolBar *secondToolBar;
void show();
- void setColor();
+ void setColor(int);
int lastSelectedMenu;
int startUp;
+
+public slots:
+ void changeFontSize(int);
+ void toggleFullScreen();
+ void setFullScreen(bool);
+ void changeSession(int);
+ void cycleZoom();
+ void newSession();
+
private slots:
void setDocument(const QString &);
- void doneSession(TESession*,int);
+ void doneSession(TEWidget*,int);
+ void changeTitle(TEWidget*,QString);
void changeColumns(int);
- void fontChanged(int);
+ void setFont(int);
+ // void fontChanged(int);
void configMenuSelected(int );
void colorMenuSelected(int);
void colorMenuIsSelected(int);
+ void tabMenuSelected(int);
+ void sessionListSelected(int);
+
void enterCommand(int);
void hitEnter();
void hitSpace();
@@ -72,7 +91,6 @@ private slots:
void hitUp();
void hitDown();
void switchSession(QWidget *);
- void newSession();
void changeCommand(const QString &, int);
void initCommandList();
void scrollMenuSelected(int);
@@ -80,6 +98,10 @@ private slots:
void parseCommandLine();
void changeForegroundColor(const QColor &);
void changeBackgroundColor(const QColor &);
+
+ void historyDialog();
+ void fullscreenTimeout();
+
private:
void doWrap();
void init(const char* _pgm, QStrList & _args);
@@ -87,46 +109,86 @@ private:
void runSession(TESession* s);
void setColorPixmaps();
void setHistory(bool);
+ void setColors(QColor foreground, QColor background);
+ int findFont(QString name, int size, bool exact = false);
QSize calcSize(int columns, int lines);
TEWidget* getTe();
QStringList commands;
QLabel * msgLabel;
QColor foreground, background;
bool fromMenu;
+
+ bool fullscreen;
+
private:
class VTFont
{
public:
- VTFont(QString name, QFont& font)
+ VTFont(QString name, QFont& font, QString family, int familyNum, int size)
{
this->name = name;
this->font = font;
+ this->family = family;
+ this->size = size;
+ this->familyNum = familyNum;
}
QFont& getFont()
{
return font;
}
-
QString getName()
{
return name;
}
+ int getSize()
+ {
+ return(size);
+ }
+ QString getFamily()
+ {
+ return(family);
+ }
+ int getFamilyNum()
+ {
+ return(familyNum);
+ }
private:
- QString name;
QFont font;
+ QString name;
+ QString family;
+ int familyNum;
+ int size;
};
EKNumTabWidget* tab;
+ int tabPos;
int nsessions;
QList<VTFont> fonts;
int cfont;
QCString se_pgm;
QStrList se_args;
- QPopupMenu *fontList,*configMenu,*colorMenu,*scrollMenu,*editCommandListMenu;
+ QToolBar *menuToolBar;
+ QToolBar *toolBar;
QComboBox *commonCombo;
+
+ QPopupMenu *fontList,*configMenu,*colorMenu,*scrollMenu,*editCommandListMenu;
+ QPopupMenu *sessionList, *tabMenu;
+
+ int sm_none, sm_left, sm_right;
+ int cm_beep, cm_wrap;
+ int cm_default;
+ int cm_bw, cm_wb, cm_gb, cm_bt, cm_br, cm_rb, cm_gy, cm_bm, cm_mb, cm_cw, cm_wc, cm_bb, cm_ab;
+ int tm_top, tm_bottom, tm_hidden;
+ int ec_edit, ec_cmdlist, ec_quick;
+
+ bool show_fullscreen_msg;
+ QTimer *fullscreen_timer;
+ QLabel *fullscreen_msg;
+
+
// history scrolling I think
bool b_scroll;
diff --git a/core/apps/embeddedkonsole/main.cpp b/core/apps/embeddedkonsole/main.cpp
index f77fe24..a6a079c 100644
--- a/core/apps/embeddedkonsole/main.cpp
+++ b/core/apps/embeddedkonsole/main.cpp
@@ -36,3 +36,4 @@
/* --| main |------------------------------------------------------ */
OPIE_EXPORT_APP( OApplicationFactory<Konsole> )
+
diff --git a/core/apps/embeddedkonsole/session.cpp b/core/apps/embeddedkonsole/session.cpp
index 520af86..17acb8c 100644
--- a/core/apps/embeddedkonsole/session.cpp
+++ b/core/apps/embeddedkonsole/session.cpp
@@ -23,14 +23,15 @@
of the abilities of the framework - multible sessions.
*/
-TESession::TESession(QMainWindow* main, TEWidget* te, const char* _pgm, QStrList & _args, const char *_term) : schema_no(0), font_no(3), pgm(_pgm), args(_args)
+TESession::TESession(QMainWindow* main, TEWidget* _te, const char* _pgm, QStrList & _args, const char *_term) : schema_no(0), font_no(3), pgm(_pgm), args(_args)
{
+ te = _te;
+ term = _term;
+
// sh = new TEPty();
sh = new MyPty();
em = new TEmuVt102(te);
- term = _term;
-
sh->setSize(te->Lines(),te->Columns()); // not absolutely nessesary
QObject::connect( sh,SIGNAL(block_in(const char*,int)),
em,SLOT(onRcvBlock(const char*,int)) );
@@ -48,10 +49,12 @@ TESession::TESession(QMainWindow* main, TEWidget* te, const char* _pgm, QStrList
sh,SLOT(send_bytes(const char*,int)) );
QObject::connect( em,SIGNAL(changeColumns(int)),
main,SLOT(changeColumns(int)) );
-/*
+
+
+
QObject::connect( em,SIGNAL(changeTitle(int, const QString&)),
- main,SLOT(changeTitle(int, const QString&)) );
-*/
+ this,SLOT(changeTitle(int, const QString&)) );
+
QObject::connect( sh,SIGNAL(done(int)), this,SLOT(done(int)) );
}
@@ -83,7 +86,7 @@ void TESession::setConnect(bool c)
void TESession::done(int status)
{
- emit done(this,status);
+ emit done(te,status);
}
void TESession::terminate()
@@ -134,9 +137,10 @@ void TESession::setFontNo(int fn)
font_no = fn;
}
-void TESession::setTitle(const QString& title)
+void TESession::changeTitle(int, const QString& title)
{
this->title = title;
+ emit changeTitle(te, title);
}
const QString& TESession::Title()
diff --git a/core/apps/embeddedkonsole/session.h b/core/apps/embeddedkonsole/session.h
index 4a61569..f399e96 100644
--- a/core/apps/embeddedkonsole/session.h
+++ b/core/apps/embeddedkonsole/session.h
@@ -56,7 +56,6 @@ public:
void setSchemaNo(int sn);
void setKeymapNo(int kn);
void setFontNo(int fn);
- void setTitle(const QString& title);
void kill(int signal);
public slots:
@@ -64,10 +63,12 @@ public slots:
void run();
void done(int status);
void terminate();
+ void changeTitle(int, const QString& title);
signals:
- void done(TESession*, int);
+ void done(TEWidget*, int);
+ void changeTitle(TEWidget*, QString);
private: