summaryrefslogtreecommitdiff
authorwaspe <waspe>2004-02-22 12:57:58 (UTC)
committer waspe <waspe>2004-02-22 12:57:58 (UTC)
commit5bc4dbd932fcfa64773b6e17fe57c665bdcd50b8 (patch) (side-by-side diff)
treeb97f5281b807b4218f437150a4e9082694e7a642
parent908f9c9f0c68d1c3e5a620a69bbf0d05684e2ab3 (diff)
downloadopie-5bc4dbd932fcfa64773b6e17fe57c665bdcd50b8.zip
opie-5bc4dbd932fcfa64773b6e17fe57c665bdcd50b8.tar.gz
opie-5bc4dbd932fcfa64773b6e17fe57c665bdcd50b8.tar.bz2
merged changes form qkonsole back into opie-embeddedkonsole (most likely not bugfree !)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/MyPty.cpp10
-rw-r--r--core/apps/embeddedkonsole/TEHistory.cpp275
-rw-r--r--core/apps/embeddedkonsole/TEHistory.h50
-rw-r--r--core/apps/embeddedkonsole/TEScreen.cpp18
-rw-r--r--core/apps/embeddedkonsole/TEWidget.cpp148
-rw-r--r--core/apps/embeddedkonsole/TEWidget.h16
-rw-r--r--core/apps/embeddedkonsole/TEmulation.cpp1
-rw-r--r--core/apps/embeddedkonsole/commandeditdialog.cpp4
-rw-r--r--core/apps/embeddedkonsole/konsole.cpp2214
-rw-r--r--core/apps/embeddedkonsole/konsole.h224
-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, 1941 insertions, 1045 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
@@ -81,2 +81,3 @@
+#undef HAVE_OPENPTY
#ifdef HAVE_OPENPTY
@@ -148,2 +149,8 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int)
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);
@@ -165,4 +172,3 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int)
tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
- if(strlen(getenv("TERM"))<=0)
- setenv("TERM","vt100",1);
+ 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
@@ -8,3 +8,3 @@
/* */
-/* This file is part of Konsole - an X terminal for KDE */
+/* This file is part of Qkonsole - an X terminal for KDE */
/* */
@@ -12,3 +12,3 @@
/* */
-/* Ported Konsole to Qt/Embedded */
+/* Ported Qkonsole to Qt/Embedded */
/* */
@@ -26,2 +26,4 @@
+#include <qpe/config.h>
+
#define HERE printf("%s(%d): here\n",__FILE__,__LINE__)
@@ -42,129 +44,61 @@
-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()
+HistoryScroll::HistoryScroll()
{
- ion = -1;
- length = 0;
+ 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;
}
-HistoryBuffer::~HistoryBuffer()
+HistoryScroll::~HistoryScroll()
{
- setScroll(FALSE);
+ setSize(0,0);
}
-
-void HistoryBuffer::setScroll(bool on)
+
+void HistoryScroll::setSize(int lines, int cells)
{
- 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);
+ // could try to preserve the existing data...
+ // printf("setSize(%d,%d)\n", lines, cells);
+ if (m_lines) {
+ delete m_lines;
+ m_lines = NULL;
}
- else
- {
- assert( ion >= 0 );
- close(ion);
- ion = -1;
- length = 0;
+ if (m_cells) {
+ delete m_cells;
+ m_cells = NULL;
}
+ 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];
+ }
+ m_first_line = 0;
+ m_num_lines = 0;
+ m_last_cell = 0;
+ m_start_line = 0;
}
-
-bool HistoryBuffer::hasScroll()
-{
- 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; }
-}
-
-int HistoryBuffer::len()
-{
- return length;
-}
-
-// 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()
-{
-}
-
-HistoryScroll::~HistoryScroll()
-{
-}
-
+
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);
+ }
}
@@ -173,3 +107,3 @@ bool HistoryScroll::hasScroll()
{
- return index.hasScroll() && cells.hasScroll();
+ return (m_max_lines > 0);
}
@@ -178,4 +112,3 @@ int HistoryScroll::getLines()
{
- if (!hasScroll()) return 0;
- return index.len() / sizeof(int);
+ return(m_num_lines);
}
@@ -185,3 +118,12 @@ 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);
}
@@ -190,23 +132,79 @@ 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--;
+ }
+ }
+ }
}
@@ -216,4 +214,17 @@ 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
@@ -23,25 +23,2 @@
-/*
- 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
@@ -53,15 +30,13 @@ public:
public:
- void setScroll(bool on);
- bool hasScroll();
+ 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[]);
+ int getLines();
+ int getLineLen(int lineno);
+ 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();
@@ -70,4 +45,11 @@ 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;
};
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
@@ -512,2 +512,6 @@ ca* TEScreen::getCookedImage()
+ if (histCursor > hist.getLines()) {
+ histCursor = hist.getLines();
+ }
+
for (y = 0; (y < lines) && (y < (hist.getLines()-histCursor)); y++)
@@ -560,3 +564,3 @@ void TEScreen::reset()
{
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("ScrollBar");
@@ -973,2 +977,5 @@ void TEScreen::setSelBeginXY(const int x, const int y)
{
+ if (histCursor > hist.getLines()) {
+ histCursor = hist.getLines();
+ }
sel_begin = loc(x,y+histCursor) ;
@@ -981,2 +988,5 @@ 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);
@@ -1187,2 +1197,8 @@ void TEScreen::setHistCursor(int cursor)
histCursor = cursor; //FIXME:rangecheck
+ if (histCursor > hist.getLines()) {
+ histCursor = hist.getLines();
+ }
+ if (histCursor < 0) {
+ histCursor = 0;
+ }
}
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
@@ -68,2 +68,3 @@
#include <qdragobject.h>
+#include <qnamespace.h>
@@ -246,19 +247,13 @@ void TEWidget::fontChange(const QFont &)
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_a = fm.ascent();
-//printf("font_h: %d\n",font_h);
-//printf("font_w: %d\n",font_w);
-//printf("font_a: %d\n",font_a);
-//printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii());
-//printf("rawname: %s\n",font().rawName().ascii());
+ // 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);
+ //printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii());
+ //printf("rawname: %s\n",font().rawName().ascii());
fontMap =
@@ -309,3 +304,3 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name)
hScrollbar->setOrientation(QScrollBar::Horizontal);
- hScrollbar->setMaximumHeight(16);
+ // hScrollbar->setMaximumHeight(16);
@@ -313,3 +308,3 @@ TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name)
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("ScrollBar");
@@ -686,3 +681,4 @@ void TEWidget::mousePressEvent(QMouseEvent* ev)
- word_selection_mode = FALSE;
+ mouse_down_x = ev->x();
+ mouse_down_y = ev->y();
@@ -693,2 +689,4 @@ void TEWidget::mousePressEvent(QMouseEvent* ev)
+ word_selection_mode = (ev->state() & ShiftButton);
+
if ( ev->state() & ControlButton ) preserve_line_breaks = FALSE ;
@@ -817,2 +815,8 @@ void TEWidget::mouseReleaseEvent(QMouseEvent* ev)
{
+ 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);
@@ -1032,3 +1036,2 @@ bool TEWidget::eventFilter( QObject *obj, QEvent *e )
bool dele=FALSE;
-
if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
@@ -1071,21 +1074,79 @@ bool TEWidget::eventFilter( QObject *obj, QEvent *e )
// 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());
-
- }
-
- if( ke->state() == ShiftButton && ke->key() == Key_Tab) {
- //lets hardcode this sucker
-
-// qDebug("key pressed 2 is 0x%x", ke->key());
- emitText("\\"); // expose
- }
- 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
+
+ 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
+
+ case 0x201b: // fn-5
+ case Key_F4:
+ emit toggleFullScreen();
+ break;
+
+ case 0x200f: // fn-1 magnify minus
+ case Key_F5:
+ emit changeFontSize(-1);
+ break;
+
+ case 0x2010: // fn-2 magnify plus
+ case Key_F6:
+ emit changeFontSize(1);
+ break;
+
+ default:
+ special_function = false;
+ }
+ 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();
+ // }
+ emit keyPressedSignal(ke); // expose
ke->accept();
@@ -1118,3 +1179,2 @@ void TEWidget::frameChanged()
}
-
/* ------------------------------------------------------------------------- */
@@ -1169,3 +1229,3 @@ void TEWidget::calcGeometry()
int dcolumns;
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("ScrollBar");
@@ -1370,4 +1430,4 @@ void TEWidget::setWrapAt(int columns)
vcolumns = columns;
- propagateSize();
- update();
+ propagateSize();
+ update();
}
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
@@ -39,3 +39,4 @@ class TEWidget : public QFrame
// a widget representing attributed text
-{ Q_OBJECT
+{
+ Q_OBJECT
@@ -76,2 +77,3 @@ public:
bool useBeep;
+ int color_menu_item;
@@ -95,2 +97,7 @@ signals:
+ void changeFontSize(int);
+ void toggleFullScreen();
+ void setFullScreen(bool);
+ void changeSession(int);
+ void newSession();
@@ -154,3 +161,3 @@ private:
- bool fixed_font; // has fixed pitch
+ // bool fixed_font; // has fixed pitch
int font_h; // height
@@ -184,4 +191,5 @@ private:
int scrollLoc, hScrollLoc;
- int hposition, vcolumns;
+ int hposition, vcolumns;
+ int mouse_down_x, mouse_down_y;
@@ -196,2 +204,3 @@ private:
QString dropText;
+
public:
@@ -199,2 +208,3 @@ private:
TESession *currentSession;
+
private slots:
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
@@ -197,2 +197,3 @@ void TEmulation::onRcvChar(int c)
c &= 0xff;
+
switch (c)
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
@@ -104,3 +104,3 @@ connect(ToolButton5,SIGNAL(clicked()),m_PlayListSelection,SLOT(moveSelectedDown(
m_SuggestedCommandList->ensureItemVisible( m_SuggestedCommandList->selectedItem() );
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("Commands");
@@ -154,3 +154,3 @@ void CommandEditDialog::accept()
int i = 0;
- Config *cfg = new Config("Konsole");
+ Config *cfg = new Config("Qkonsole");
cfg->setGroup("Commands");
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 +1,2 @@
+
/* ---------------------------------------------------------------------- */
@@ -23,3 +24,3 @@
-#include "signal.h"
+#include <stdlib.h>
@@ -46,11 +47,12 @@
#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>
@@ -67,33 +69,61 @@
-#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++) {
- QTab* left=0;
- QListIterator<QTab> it(*tabList());
- int x=INT_MAX;
- for( QTab* t; (t=it.current()); ++it ) {
- int tx = t->rect().x();
- if ( tx<x && tx>m ) {
- x = tx;
- left = t;
- }
- }
- if ( left ) {
- left->setText(QString::number(i+1));
- m = left->rect().x();
- }
- }
+ // 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++)
+ {
+ QTab* left=0;
+ QListIterator<QTab> it(*tabList());
+ int x=INT_MAX;
+ for( QTab* t; (t=it.current()); ++it )
+ {
+ int tx = t->rect().x();
+ if ( tx<x && tx>m )
+ {
+ x = tx;
+ left = t;
+ }
+ }
+ 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:
@@ -101,8 +131,16 @@ public:
{
+ 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));
- QTabWidget::addTab(w,t);
+ QTab* t = new QTab(QString::number(tabBar()->count()+1));
+ QTabWidget::addTab(w,t);
}
@@ -111,4 +149,4 @@ public:
{
- removePage(w);
- ((EKNumTabBar*)tabBar())->numberTabs();
+ removePage(w);
+ ((EKNumTabBar*)tabBar())->numberTabs();
}
@@ -119,408 +157,595 @@ public:
static const char *commonCmds[] =
-{
- "ls ", // I left this here, cause it looks better than the first alpha
- "cardctl eject",
- "cat ",
- "cd ",
- "chmod ",
- "clear",
- "cp ",
- "dc ",
- "df ",
- "dmesg",
- "echo ",
- "env",
- "find ",
- "free",
- "grep ",
- "ifconfig ",
- "ipkg ",
- "mkdir ",
- "mv ",
- "nc localhost 7776",
- "nc localhost 7777",
- "netstat ",
- "nslookup ",
- "ping ",
- "ps aux",
- "pwd ",
- "qcop QPE/System 'linkChanged(QString)' ''",
- "qcop QPE/System 'restart()'",
- "qcop QPE/System 'quit()'",
- "rm ",
- "rmdir ",
- "route ",
- "set ",
- "traceroute",
-
-/*
- "gzip",
- "gunzip",
- "chgrp",
- "chown",
- "date",
- "dd",
- "df",
- "dmesg",
- "fuser",
- "hostname",
- "kill",
- "killall",
- "ln",
- "ping",
- "mount",
- "more",
- "sort",
- "touch",
- "umount",
- "mknod",
- "netstat",
-*/
+ {
+ "ls ", // I left this here, cause it looks better than the first alpha
+ "cardctl eject",
+ "cat ",
+ "cd ",
+ "chmod ",
+ "clear",
+ "cp ",
+ "dc ",
+ "df ",
+ "dmesg",
+ "echo ",
+ "env",
+ "find ",
+ "free",
+ "grep ",
+ "ifconfig ",
+ "ipkg ",
+ "mkdir ",
+ "mv ",
+ "nc localhost 7776",
+ "nc localhost 7777",
+ "netstat ",
+ "nslookup ",
+ "ping ",
+ "ps aux",
+ "pwd ",
+ "qcop QPE/System 'linkChanged(QString)' ''",
+ "qcop QPE/System 'restart()'",
+ "qcop QPE/System 'quit()'",
+ "rm ",
+ "rmdir ",
+ "route ",
+ "set ",
+ "traceroute",
+
+ /*
+ "gzip",
+ "gunzip",
+ "chgrp",
+ "chown",
+ "date",
+ "dd",
+ "df",
+ "dmesg",
+ "fuser",
+ "hostname",
+ "kill",
+ "killall",
+ "ln",
+ "ping",
+ "mount",
+ "more",
+ "sort",
+ "touch",
+ "umount",
+ "mknod",
+ "netstat",
+ */
+
+ "exit",
+ NULL
+ };
- "exit",
- NULL
-};
-static void konsoleInit(const char** shell) {
- if(setuid(getuid()) !=0) qDebug("setuid failed");
- if(setgid(getgid()) != 0) qDebug("setgid failed"); // drop privileges
+Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) :
+ QMainWindow(parent, name, fl)
+{
+ QStrList args;
+ init("/bin/bash",args);
+}
-// signal (SIGSTOP, SIG_IGN);
-
-// QPEApplication::grabKeyboard(); // for CTRL and ALT
+Konsole::Konsole(const char* name, const char* _pgm, QStrList & _args, int)
+ : QMainWindow(0, name)
+{
+ init(_pgm,_args);
+}
-// qDebug("keyboard grabbed");
-#ifdef FAKE_CTRL_AND_ALT
- qDebug("Fake Ctrl and Alt defined");
- QPEApplication::grabKeyboard(); // for CTRL and ALT
-#endif
+struct HistoryItem
+{
+ HistoryItem(int c, const QString &l)
+ {
+ count = c;
+ line = l;
+ }
+ int count;
+ QString line;
+};
- *shell = getenv("SHELL");
-// qWarning("SHell initially is %s", *shell );
+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);
+ }
+};
- if (shell == NULL || *shell == '\0') {
- struct passwd *ent = 0;
- uid_t me = getuid();
- *shell = "/bin/sh";
+void Konsole::initCommandList()
+{
+ // qDebug("Konsole::initCommandList");
+ Config cfg("Qkonsole");
+ cfg.setGroup("Commands");
+ // commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
+ commonCombo->clear();
- while ( (ent = getpwent()) != 0 ) {
- if (ent->pw_uid == me) {
- if (ent->pw_shell != "")
- *shell = ent->pw_shell;
- break;
+ 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;
+ }
+ 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),""));
}
- 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)
+static void sig_handler(int x)
{
- QStrList tmp; const char* shell;
-
- setCaption( tr("Terminal") );
-
- konsoleInit( &shell);
-// qWarning("Using shell %s", shell);
- init(shell,tmp);
+ printf("got signal %d\n",x);
}
-
-
-void Konsole::initCommandList()
+void Konsole::init(const char* _pgm, QStrList & _args)
{
-// qDebug("Konsole::initCommandList");
- Config cfg("Konsole");
- cfg.setGroup("Commands");
- 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 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( "Qkonsole" );
+ setIcon( Resource::loadPixmap( "qkonsole/qkonsole" ) );
+
+ Config cfg("Qkonsole");
+ cfg.setGroup("Font");
+ QString tmp;
+
+ // initialize the list of allowed fonts ///////////////////////////////////
+
+ QString cfgFontName = cfg.readEntry("FontName","Lcfont");
+ int cfgFontSize = cfg.readNumEntry("FontSize",18);
+
+ cfont = -1;
+
+ // 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 );
+
+ 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 ) + "]";
}
- } else {
- for (int i = 0; i < 100; i++) {
- if (!(cfg.readEntry( QString::number(i),"")).isEmpty())
- commonCombo->insertItem((cfg.readEntry( QString::number(i),"")));
+ s[0] = s[0].upper();
+
+ QValueList<int> sizes = fontDB.pointSizes( familyNames[j] );
+
+ printf("family[%d] = %s with %d sizes\n", j, familyNames[j].latin1(),
+ sizes.count());
+
+ if (sizes.count() > 0)
+ {
+ QPopupMenu *sizeMenu;
+ QFont f;
+ int last_width = -1;
+ sizeMenu = NULL;
+
+ 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;
+
+ 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
+
+ f = QFont(familyNames[j], size);
+ f.setFixedPitch(true);
+ 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++;
+ }
}
+
}
-}
+ if (cfont < 0 || cfont >= (int)fonts.count())
+ {
+ cfont = 0;
+ }
-void Konsole::init(const char* _pgm, QStrList & _args)
-{
- b_scroll = TRUE; // histon;
- n_keytab = 0;
- n_render = 0;
- startUp=0;
- fromMenu = FALSE;
-
- setCaption( tr("Terminal") );
- setIcon( Resource::loadPixmap( "konsole" ) );
-
- Config cfg("Konsole");
- cfg.setGroup("Konsole");
- 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));
-
- f = QFont("Fixed", 12, QFont::Normal);
- f.setFixedPitch(TRUE);
- fonts.append(new VTFont(tr("Medium Fixed"), f));
-
-// NEW STUFF
-
- QStringList ignfont = cfg.readListEntry("IgnFont", ',');
- /* If there is no "IgnFont = ..." entry in "myonsole.conf",
- * put some Japanese fonts of the SL-C7x0 to "ignfont". */
-
- if (ignfont.isEmpty()) {
- ignfont = QStringList::split (',',"jisupasp,mmkjg1,mmkjg4,mmkjg5");
- }
-
-// QFont
- f = QFont("Fixed", 16, QFont::Normal);
- f.setFixedPitch(true);
- fonts.append(new VTFont(tr("Default"), f));
-
- int fcount = 1;
-
- f.setCharSet(QFont::AnyCharSet);
- f.setStyleHint(QFont::TypeWriter, QFont::PreferMatch);
-// f.setWeight(QFont::Normal);
+ // create terminal emulation framework ////////////////////////////////////
+ nsessions = 0;
- /*
- * 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( fit != "fixed" && fit != "micro" ) {
- if ( ignfont.contains(*it) == 0) {
- QValueList<int> pt = fdb.pointSizes(*it);
-
- for (QValueList<int>::Iterator itv = pt.begin();
- itv != pt.end(); ++itv ) {
- int size = (*itv)/10;
- if(size > 0) {
- f.setFamily(*it);
- f.setPointSize(size);
- }
-
- 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.setFixedPitch(true);
- fonts.append(new VTFont(*it + ' ' + QString::number(size), f));
- fcount++;
- }
- }
- }
- }
- }
-
-// END NEW STUFF
-
-
-// create terminal emulation framework ////////////////////////////////////
- nsessions = 0;
-
- tab = new EKNumTabWidget(this);
-
- connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*)));
-
- // create terminal toolbar ////////////////////////////////////////////////
- setToolBarsMovable( FALSE );
- QToolBar *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);
- }
+ tab = new EKNumTabWidget(this);
+ // tab->setMargin(tab->margin()-5);
+ connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*)));
- fontChanged(cfont);
+ // create terminal toolbar ////////////////////////////////////////////////
+ setToolBarsMovable( FALSE );
+ menuToolBar = new QToolBar( this );
+ menuToolBar->setHorizontalStretchable( TRUE );
- configMenu = new QPopupMenu( this);
- colorMenu = new QPopupMenu( this);
- scrollMenu = new QPopupMenu( this);
- editCommandListMenu = new QPopupMenu( this);
+ QMenuBar *menuBar = new QMenuBar( menuToolBar );
- configMenu->insertItem(tr("Command List"), editCommandListMenu);
+ 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);
- bool listHidden;
- cfg.setGroup("Menubar");
- if( cfg.readEntry("Hidden","FALSE") == "TRUE") {
- editCommandListMenu->insertItem( tr( "Show command list" ));
- listHidden=TRUE;
- } else {
- editCommandListMenu->insertItem( tr( "Hide command list" ));
- listHidden=FALSE;
- }
+ setFont(cfont);
- cfg.setGroup("Tabs");
- tmp=cfg.readEntry("Position","Bottom");
- if(tmp=="Top") {
- tab->setTabPosition(QTabWidget::Top);
- configMenu->insertItem( tr( "Tabs on Bottom" ) );
- } else {
- 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"));
+ configMenu = new QPopupMenu( this);
+ colorMenu = new QPopupMenu( this);
+ scrollMenu = new QPopupMenu( this);
+ editCommandListMenu = new QPopupMenu( this);
+
+ configMenu->insertItem(tr("Command List"), editCommandListMenu);
+
+ bool listHidden;
+ cfg.setGroup("Menubar");
+ if( cfg.readEntry("Hidden","FALSE") == "TRUE")
+ {
+ ec_cmdlist = editCommandListMenu->insertItem( tr( "Show command list" ));
+ listHidden=TRUE;
+ }
+ else
+ {
+ ec_cmdlist = editCommandListMenu->insertItem( tr( "Hide command list" ));
+ listHidden=FALSE;
+ }
+
+ cfg.setGroup("Tabs");
+
+ 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);
+ tab->getTabBar()->show();
+ tabPos = tm_top;
+ }
+ else if (tmp=="Bottom")
+ {
+ tab->setTabPosition(QTabWidget::Bottom);
+ 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"));
+
+ colorMenu->insertItem(tr( "Custom"));
#endif
- configMenu->insertItem( tr("Font"), fontList );
- configMenu->insertItem(tr( "Colors") ,colorMenu);
-
- 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( scrollMenu, SIGNAL(activated(int)),this,SLOT(scrollMenuSelected(int)));
- connect(editCommandListMenu,SIGNAL(activated(int)),this,SLOT(editCommandListMenuSelected(int)));
-
- menuBar->insertItem( tr("Options"), configMenu );
-
- QToolBar *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("Enter"), Resource::loadPixmap( "konsole/enter" ), QString::null, 0, this, 0 );
- 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 );
- a = new QAction( tr("Tab"), Resource::loadPixmap( "konsole/tab" ), QString::null, 0, this, 0 );
- 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 );
- 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 );
-*/
+ configMenu->insertItem(tr( "Colors") ,colorMenu);
- secondToolBar = new QToolBar( this );
- secondToolBar->setHorizontalStretchable( TRUE );
+ sessionList = new QPopupMenu(this);
+ sessionList-> insertItem ( Resource::loadPixmap ( "qkonsole/qkonsole" ), tr( "new session" ), this,
+ SLOT(newSession()) );
- commonCombo = new QComboBox( secondToolBar );
- commonCombo->setMaximumWidth(236);
+ // 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) ) );
- editCommandListMenu->insertItem( tr( "Quick Edit" ) );
- if( listHidden) {
- secondToolBar->hide();
- editCommandListMenu->setItemEnabled(-23 ,FALSE);
- }
- editCommandListMenu->insertItem(tr( "Edit" ) );
+ menuBar->insertItem( tr("View"), configMenu );
+ menuBar->insertItem( tr("Fonts"), fontList );
+ menuBar->insertItem( tr("Sessions"), sessionList );
+
+ toolBar = new QToolBar( this );
- cfg.setGroup("Commands");
- commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
+ QAction *a;
- initCommandList();
-// for (int i = 0; commonCmds[i] != NULL; i++) {
-// commonCombo->insertItem( commonCmds[i], i );
-// tmp = cfg.readEntry( QString::number(i),"");
-// if(tmp != "")
-// commonCombo->changeItem( tmp,i );
-// }
+ // Button Commands
+ a = new QAction( tr("New"), Resource::loadPixmap( "konsole/Terminal" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( newSession() ) );
+ a->addTo( toolBar );
- connect( commonCombo, SIGNAL( activated(int) ), this, SLOT( enterCommand(int) ));
+ a = new QAction( tr("Full Screen"), Resource::loadPixmap( "fullscreen" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( toggleFullScreen() ) );
+ a->addTo( toolBar );
- scrollMenu->insertItem(tr( "None" ));
- scrollMenu->insertItem(tr( "Left" ));
- scrollMenu->insertItem(tr( "Right" ));
-// scrollMenu->insertSeparator(4);
-// scrollMenu->insertItem(tr( "Horizontal" ));
+ a = new QAction( tr("Zoom"), Resource::loadPixmap( "zoom" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( cycleZoom() ) );
+ a->addTo( toolBar );
- configMenu->insertItem(tr( "ScrollBar" ),scrollMenu);
- int jut = configMenu->insertItem(tr( "Wrap" ));
+ /*
+ a = new QAction( tr("Enter"), Resource::loadPixmap( "konsole/enter" ), QString::null, 0, this, 0 );
+ 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 );
+ a = new QAction( tr("Tab"), Resource::loadPixmap( "konsole/tab" ), QString::null, 0, this, 0 );
+ 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 );
+ 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 );
+
+ secondToolBar = new QToolBar( this );
+ secondToolBar->setHorizontalStretchable( TRUE );
+
+ commonCombo = new QComboBox( secondToolBar );
+ // commonCombo->setMaximumWidth(236);
+
+ ec_quick = editCommandListMenu->insertItem( tr( "Quick Edit" ) );
+ if( listHidden)
+ {
+ secondToolBar->hide();
+ editCommandListMenu->setItemEnabled(ec_quick ,FALSE);
+ }
+ ec_edit = editCommandListMenu->insertItem(tr( "Edit" ) );
+
+ cfg.setGroup("Commands");
+ commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
+
+ initCommandList();
+ // for (int i = 0; commonCmds[i] != NULL; i++) {
+ // commonCombo->insertItem( commonCmds[i], i );
+ // tmp = cfg.readEntry( QString::number(i),"");
+ // if(tmp != "")
+ // commonCombo->changeItem( tmp,i );
+ // }
+
+ connect( commonCombo, SIGNAL( activated(int) ), this, SLOT( enterCommand(int) ));
+
+ 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);
+
+ configMenu->insertItem(tr( "History" ), this, SLOT(historyDialog()));
+
+ cm_wrap = configMenu->insertItem(tr( "Wrap" ));
cfg.setGroup("ScrollBar");
- configMenu->setItemChecked(jut, cfg.readBoolEntry("HorzScroll",0));
-
- jut = configMenu->insertItem(tr( "Use Beep" ));
- cfg.setGroup("Menubar");
-
- configMenu->setItemChecked(jut, cfg.readBoolEntry("useBeep",0));
-
-
-//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 /////////////////////////////////////////////////////
- setCentralWidget(tab);
-
- // load keymaps ////////////////////////////////////////////////////////////
- KeyTrans::loadAll();
- for (int i = 0; i < KeyTrans::count(); i++)
- { KeyTrans* s = KeyTrans::find(i);
- assert( s );
- }
+ configMenu->setItemChecked(cm_wrap, cfg.readBoolEntry("HorzScroll",0));
+
+ cm_beep = configMenu->insertItem(tr( "Use Beep" ));
+ cfg.setGroup("Menubar");
+ configMenu->setItemChecked(cm_beep, 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");
+ // 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 /////////////////////////////////////////////////////
+ setCentralWidget(tab);
+
+ // load keymaps ////////////////////////////////////////////////////////////
+ KeyTrans::loadAll();
+ for (int i = 0; i < KeyTrans::count(); i++)
+ {
+ KeyTrans* s = KeyTrans::find(i);
+ assert( s );
+ }
+
+ se_pgm = _pgm;
+ se_args = _args;
+
+ cfg.setGroup("CommandLine");
- se_pgm = _pgm;
- se_args = _args;
- se_args.prepend("--login");
-parseCommandLine();
- // read and apply default values ///////////////////////////////////////////
- resize(321, 321); // Dummy.
- QSize currentSize = size();
- if (currentSize != size())
- defaultSize = size();
+ 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 ));
}
@@ -529,6 +754,7 @@ void Konsole::show()
{
- if ( !nsessions ) {
- newSession();
- }
- QMainWindow::show();
+ if ( !nsessions )
+ {
+ newSession();
+ }
+ QMainWindow::show();
@@ -538,3 +764,3 @@ void Konsole::initSession(const char*, QStrList &)
{
- QMainWindow::show();
+ QMainWindow::show();
}
@@ -543,11 +769,176 @@ 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);
+ }
+}
+
+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);
+}
- Config cfg("Konsole");
- cfg.setGroup("Konsole");
- cfg.writeEntry("FontID", cfont);
+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)
@@ -555,4 +946,6 @@ 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);
@@ -563,3 +956,4 @@ void Konsole::fontChanged(int f)
TEWidget* te = getTe();
- if (te != 0) {
+ if (te != 0)
+ {
te->setVTFont(font->getFont());
@@ -568,2 +962,3 @@ void Konsole::fontChanged(int f)
}
+#endif
@@ -573,7 +968,11 @@ 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);
@@ -586,4 +985,5 @@ void Konsole::hitEnter()
TEWidget* te = getTe();
- if (te != 0) {
- te->emitText(QString("\r"));
+ if (te != 0)
+ {
+ te->emitText(QString("\r"));
}
@@ -594,4 +994,5 @@ void Konsole::hitSpace()
TEWidget* te = getTe();
- if (te != 0) {
- te->emitText(QString(" "));
+ if (te != 0)
+ {
+ te->emitText(QString(" "));
}
@@ -602,4 +1003,5 @@ void Konsole::hitTab()
TEWidget* te = getTe();
- if (te != 0) {
- te->emitText(QString("\t"));
+ if (te != 0)
+ {
+ te->emitText(QString("\t"));
}
@@ -610,4 +1012,5 @@ void Konsole::hitPaste()
TEWidget* te = getTe();
- if (te != 0) {
- te->pasteClipboard();
+ if (te != 0)
+ {
+ te->pasteClipboard();
}
@@ -618,5 +1021,6 @@ void Konsole::hitUp()
TEWidget* te = getTe();
- if (te != 0) {
- QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Up, 0, 0);
- QApplication::sendEvent( te, &ke );
+ if (te != 0)
+ {
+ QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Up, 0, 0);
+ QApplication::sendEvent( te, &ke );
}
@@ -627,5 +1031,6 @@ void Konsole::hitDown()
TEWidget* te = getTe();
- if (te != 0) {
- QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Down, 0, 0);
- QApplication::sendEvent( te, &ke );
+ if (te != 0)
+ {
+ QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Down, 0, 0);
+ QApplication::sendEvent( te, &ke );
}
@@ -637,10 +1042,14 @@ void Konsole::hitDown()
*/
-QSize Konsole::calcSize(int columns, int lines) {
+QSize Konsole::calcSize(int columns, int lines)
+{
TEWidget* te = getTe();
- if (te != 0) {
- QSize size = te->calcSize(columns, lines);
- return size;
- } else {
- QSize size;
- return size;
+ if (te != 0)
+ {
+ QSize size = te->calcSize(columns, lines);
+ return size;
+ }
+ else
+ {
+ QSize size;
+ return size;
}
@@ -655,16 +1064,18 @@ void Konsole::setColLin(int columns, int lines)
{
- qDebug("konsole::setColLin:: Columns %d", columns);
+ qDebug("konsole::setColLin:: Columns %d", columns);
- if ((columns==0) || (lines==0))
- {
- if (defaultSize.isEmpty()) // not in config file : set default value
+ if ((columns==0) || (lines==0))
{
- defaultSize = calcSize(80,24);
- // notifySize(24,80); // set menu items (strange arg order !)
+ if (defaultSize.isEmpty()) // not in config file : set default value
+ {
+ defaultSize = calcSize(80,24);
+ // notifySize(24,80); // set menu items (strange arg order !)
+ }
+ resize(defaultSize);
+ }
+ else
+ {
+ resize(calcSize(columns, lines));
+ // notifySize(lines,columns); // set menu items (strange arg order !)
}
- resize(defaultSize);
- } else {
- resize(calcSize(columns, lines));
- // notifySize(lines,columns); // set menu items (strange arg order !)
- }
}
@@ -699,11 +1110,10 @@ void Konsole::setFont(int fontno)
-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) {
-// setColLin(columns,te->Lines());
-// te->update();
-// }
+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) {
+ // setColLin(columns,te->Lines());
+ // te->update();
+ // }
}
@@ -714,27 +1124,75 @@ void Konsole::changeColumns(int columns)
-void Konsole::doneSession(TESession*, int )
+void Konsole::doneSession(TEWidget* te, int )
{
- TEWidget *te = getTe();
- if (te != 0) {
- te->currentSession->setConnect(FALSE);
- tab->removeTab(te);
- delete te->currentSession;
- delete te;
- nsessions--;
- }
+ // 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)
+ {
+ te->currentSession->setConnect(FALSE);
+ tab->removeTab(te);
+ delete te->currentSession;
+ delete te;
+ sessionList->removeItem(nsessions);
+ nsessions--;
+ }
+ if (nsessions == 0)
+ {
+ close();
+ }
+}
- if (nsessions == 0) {
- close();
- }
+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);
-// te->setBackgroundMode(PaletteBase); //we want transparent!!
+void Konsole::newSession()
+{
+ if(nsessions < 15)
+ { // seems to be something weird about 16 tabs on the Zaurus.... memory?
+ TEWidget* te = new TEWidget(tab);
+ 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);
@@ -742,3 +1200,10 @@ void Konsole::newSession() {
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();
@@ -746,6 +1211,7 @@ void Konsole::newSession() {
se->setHistory(b_scroll);
- tab->setCurrentPage(nsessions);
nsessions++;
+ sessionList->insertItem(QString::number(nsessions), nsessions);
+ sessionListSelected(nsessions);
doWrap();
- setColor();
+ setColor(nsessions-1);
}
@@ -753,25 +1219,182 @@ void Konsole::newSession() {
-TEWidget* Konsole::getTe() {
- if (nsessions) {
- return (TEWidget *) tab->currentPage();
- } else {
- return 0;
- }
+TEWidget* Konsole::getTe()
+{
+ if (nsessions)
+ {
+ return (TEWidget *) tab->currentPage();
+ }
+ 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();
- QFont teFnt = te->getVTFont();
- for(uint i = 0; i < fonts.count(); i++) {
- VTFont *fnt = fonts.at(i);
- bool cf = fnt->getFont() == teFnt;
- fontList->setItemChecked(i, cf);
- if (cf) {
- cfont = i;
+ 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::colorMenuIsSelected(int iD) {
+
+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();
+ 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)
+ {
+ 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)
+{
fromMenu = TRUE;
@@ -781,19 +1404,39 @@ void Konsole::colorMenuIsSelected(int iD) {
/// ------------------------------- some new stuff by L.J. Potter
+
+
void Konsole::colorMenuSelected(int iD)
-{ // this is NOT pretty, elegant or anything else besides functional
-// QString temp;
-// qDebug( temp.sprintf("colormenu %d", iD));
+{
+ // this is NOT pretty, elegant or anything else besides functional
+ // QString temp;
+ // qDebug( temp.sprintf("colormenu %d", iD));
- TEWidget* te = getTe();
- Config cfg("Konsole");
+ TEWidget* te = getTe();
+ 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;
@@ -801,85 +1444,87 @@ void Konsole::colorMenuSelected(int iD)
m_table[i].transparent=1;
- cfg.writeEntry("Schema","9");
- colorMenu->setItemChecked(-9,TRUE);
- }
- } else {
- if(iD==-6) { // green black
- foreground.setRgb(0x18,255,0x18);
- background.setRgb(0x00,0x00,0x00);
- cfg.writeEntry("Schema","6");
- colorMenu->setItemChecked(-6,TRUE);
- }
- if(iD==-7) { // black white
- foreground.setRgb(0x00,0x00,0x00);
- background.setRgb(0xFF,0xFF,0xFF);
- cfg.writeEntry("Schema","7");
- colorMenu->setItemChecked(-7,TRUE);
- }
- if(iD==-8) { // white black
- foreground.setRgb(0xFF,0xFF,0xFF);
- background.setRgb(0x00,0x00,0x00);
- cfg.writeEntry("Schema","8");
- colorMenu->setItemChecked(-8,TRUE);
- }
- if(iD==-10) {// Black, Red
- foreground.setRgb(0x00,0x00,0x00);
- background.setRgb(0xB2,0x18,0x18);
- cfg.writeEntry("Schema","10");
- colorMenu->setItemChecked(-10,TRUE);
- }
- if(iD==-11) {// Red, Black
- foreground.setRgb(230,31,31); //0xB2,0x18,0x18
- background.setRgb(0x00,0x00,0x00);
- cfg.writeEntry("Schema","11");
- colorMenu->setItemChecked(-11,TRUE);
- }
- if(iD==-12) {// Green, Yellow - is ugly
-// foreground.setRgb(0x18,0xB2,0x18);
- foreground.setRgb(36,139,10);
-// 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);
- background.setRgb(0xFF,0xFF,0xFF);
- cfg.writeEntry("Schema","15");
- colorMenu->setItemChecked(-15,TRUE);
- }
- if(iD==-16) {// White, Cyan
- background.setRgb(0x18,0xB2,0xB2);
- foreground.setRgb(0xFF,0xFF,0xFF);
- cfg.writeEntry("Schema","16");
- colorMenu->setItemChecked(-16,TRUE);
- }
- if(iD==-17) {// Black, Blue
- background.setRgb(0x00,0x00,0x00);
- foreground.setRgb(0x18,0xB2,0xB2);
- cfg.writeEntry("Schema","17");
- colorMenu->setItemChecked(-17,TRUE);
- }
- if(iD==-18) {// Black, Gold
- background.setRgb(0x00,0x00,0x00);
- foreground.setRgb(255,215,0);
- cfg.writeEntry("Schema","18");
- colorMenu->setItemChecked(-18,TRUE);
+ colorMenu->setItemChecked(cm_default,TRUE);
}
+ te->setColorTable(m_table);
+ }
+ if(iD==cm_gb)
+ { // green black
+ foreground.setRgb(100,255,100); // (0x18,255,0x18);
+ background.setRgb(0x00,0x00,0x00);
+ colorMenu->setItemChecked(cm_gb,TRUE);
+ }
+ if(iD==cm_bw)
+ { // black white
+ foreground.setRgb(0x00,0x00,0x00);
+ background.setRgb(0xFF,0xFF,0xFF);
+ colorMenu->setItemChecked(cm_bw,TRUE);
+ }
+ if(iD==cm_wb)
+ { // white black
+ foreground.setRgb(0xFF,0xFF,0xFF);
+ background.setRgb(0x00,0x00,0x00);
+ colorMenu->setItemChecked(cm_wb,TRUE);
+ }
+ if(iD==cm_br)
+ {// Black, Red
+ foreground.setRgb(0x00,0x00,0x00);
+ background.setRgb(255,85,85); //(0xB2,0x18,0x18);
+ colorMenu->setItemChecked(cm_br,TRUE);
+ }
+ if(iD==cm_rb)
+ {// Red, Black
+ foreground.setRgb(255,85,85);
+ background.setRgb(0x00,0x00,0x00);
+ colorMenu->setItemChecked(cm_rb,TRUE);
+ }
+ if(iD==cm_gy)
+ {// Green, Yellow - is ugly
+ // foreground.setRgb(0x18,0xB2,0x18);
+ foreground.setRgb(15,115,0);
+ // background.setRgb(0xB2,0x68,0x18);
+ background.setRgb(255,255,0);
+ 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);
+ colorMenu->setItemChecked(cm_cw,TRUE);
+ }
+ if(iD==cm_wc)
+ {// White, Cyan
+ background.setRgb(8,91,129);
+ foreground.setRgb(0xFF,0xFF,0xFF);
+ colorMenu->setItemChecked(cm_wc,TRUE);
+ }
+ if(iD==cm_bb)
+ {// Black, Blue
+ background.setRgb(0x00,0x00,0x00);
+ foreground.setRgb(127,147,225);
+ colorMenu->setItemChecked(cm_bb,TRUE);
+ }
+ if(iD==cm_ab)
+ {// Black, Gold
+ background.setRgb(0x00,0x00,0x00);
+ foreground.setRgb(255,215,105);
+ colorMenu->setItemChecked(cm_ab,TRUE);
+ }
#ifdef QT_QWS_OPIE
- if(iD==-19) {
-// Custom
- qDebug("do custom");
- if(fromMenu) {
+ if(iD==-19)
+ {
+ // Custom
+ qDebug("do custom");
+ if(fromMenu)
+ {
OColorPopupMenu* penColorPopupMenu = new OColorPopupMenu(Qt::black, this, "foreground color");
@@ -888,81 +1533,133 @@ void Konsole::colorMenuSelected(int iD)
penColorPopupMenu->exec();
- }
- cfg.writeEntry("Schema","19");
- if(!fromMenu) {
- foreground.setNamedColor(cfg.readEntry("foreground",""));
- background.setNamedColor(cfg.readEntry("background",""));
- }
- fromMenu=FALSE;
- colorMenu->setItemChecked(-19,TRUE);
}
-#endif
- 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
- m_table[i].color = defaultCt[i].color;
+ if(!fromMenu)
+ {
+ foreground.setNamedColor(cfg.readEntry("foreground",""));
+ background.setNamedColor(cfg.readEntry("background",""));
}
+ fromMenu=FALSE;
+ colorMenu->setItemChecked(-19,TRUE);
}
+#endif
+
lastSelectedMenu = iD;
- te->setColorTable(m_table);
+
+ 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
+ m_table[i].color = defaultCt[i].color;
+ }
+ te->setColorTable(m_table);
}
+void Konsole::tabMenuSelected(int id)
+{
+ Config cfg("Qkonsole");
+ cfg.setGroup("Tabs");
+ tabMenu->setItemChecked(tabPos, false);
+ if (id == tm_bottom)
+ {
+ printf("set bottom tab\n");
+ tab->getTabBar()->show();
+ tab->setTabPosition(QTabWidget::Bottom);
+ tab->getTabBar()->show();
+ cfg.writeEntry("Position","Bottom");
+ }
+ else if (id == tm_top)
+ {
+ printf("set top tab\n");
+ tab->getTabBar()->show();
+ tab->setTabPosition(QTabWidget::Bottom);
+ tab->setTabPosition(QTabWidget::Top);
+ 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;
+}
+
+
void Konsole::configMenuSelected(int iD)
{
-// QString temp;
-// qDebug( temp.sprintf("configmenu %d",iD));
+ // QString temp;
+ // qDebug( temp.sprintf("configmenu %d",iD));
- TEWidget* te = getTe();
- Config cfg("Konsole");
+ TEWidget* te = getTe();
+ Config cfg("Qkonsole");
cfg.setGroup("Menubar");
- int i,j;
-#ifdef QT_QWS_OPIE
- i=-29;j=-30;
-#else
- i=-28;j=-29;
-#endif
-
- if(iD == -4) {
- cfg.setGroup("Tabs");
- QString tmp=cfg.readEntry("Position","Bottom");
-
- if(tmp=="Top") {
- tab->setTabPosition(QTabWidget::Bottom);
- configMenu->changeItem( iD, tr("Tabs on Top"));
- cfg.writeEntry("Position","Bottom");
- } else {
- tab->setTabPosition(QTabWidget::Top);
- configMenu->changeItem( iD, tr("Tabs on Bottom"));
- cfg.writeEntry("Position","Top");
- }
- }
- if(iD == i) {
- cfg.setGroup("ScrollBar");
- bool b=cfg.readBoolEntry("HorzScroll",0);
- b=!b;
- cfg.writeEntry("HorzScroll", b );
- cfg.write();
- doWrap();
- if(cfg.readNumEntry("Position",2) == 0) {
- te->setScrollbarLocation(1);
- } else {
- te->setScrollbarLocation(0);
- }
- te->setScrollbarLocation( cfg.readNumEntry("Position",2));
- }
- if(iD == j) {
- cfg.setGroup("Menubar");
- bool b=cfg.readBoolEntry("useBeep",0);
- b=!b;
- cfg.writeEntry("useBeep", b );
- cfg.write();
- configMenu->setItemChecked(j,b);
- te->useBeep=b;
- }
+ 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)
+ {
+ te->setScrollbarLocation(1);
+ }
+ else
+ {
+ te->setScrollbarLocation(0);
+ }
+ te->setScrollbarLocation( cfg.readNumEntry("Position",2));
+ }
+ if(iD == cm_beep)
+ {
+ cfg.setGroup("Menubar");
+ bool b=cfg.readBoolEntry("useBeep",0);
+ b=!b;
+ cfg.writeEntry("useBeep", b );
+ cfg.write();
+ configMenu->setItemChecked(cm_beep,b);
+ te->useBeep=b;
+ }
}
@@ -971,5 +1668,6 @@ 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);
@@ -980,8 +1678,21 @@ void Konsole::changeCommand(const QString &text, int 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);
}
@@ -990,26 +1701,27 @@ void Konsole::scrollMenuSelected(int index)
{
-// qDebug( "scrollbar menu %d",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) {
-
- te->setScrollbarLocation(0);
- cfg.writeEntry("Position",0);
- } else if(index == j) {
-
- te->setScrollbarLocation(1);
- cfg.writeEntry("Position",1);
- } else if(index == k) {
- te->setScrollbarLocation(2);
- cfg.writeEntry("Position",2);
- }
+ if(index == sm_none)
+ {
+ te->setScrollbarLocation(0);
+ cfg.writeEntry("Position",0);
+ }
+ else if(index == sm_left)
+ {
+ te->setScrollbarLocation(1);
+ cfg.writeEntry("Position",1);
+ }
+ 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);
+}
@@ -1029,3 +1741,2 @@ i=-24;j=-25;k=-26;
// break;
-}
@@ -1033,9 +1744,15 @@ void Konsole::editCommandListMenuSelected(int iD)
{
-// QString temp;
-// qDebug( temp.sprintf("edit command list %d",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();
@@ -1043,4 +1760,7 @@ void Konsole::editCommandListMenuSelected(int iD)
cfg.writeEntry("Hidden","TRUE");
- configMenu->setItemEnabled(-23 ,FALSE);
- } else {
+ configMenu->setItemEnabled(ec_edit ,FALSE);
+ configMenu->setItemEnabled(ec_quick ,FALSE);
+ }
+ else
+ {
secondToolBar->show();
@@ -1048,9 +1768,13 @@ void Konsole::editCommandListMenuSelected(int iD)
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 );
@@ -1059,6 +1783,8 @@ void Konsole::editCommandListMenuSelected(int iD)
}
- if( iD == -23) {
+ if( iD == ec_quick)
+ {
cfg.setGroup("Commands");
-// qDebug("enableCommandEdit");
- if( !configMenu->isItemChecked(iD) ) {
+ // qDebug("enableCommandEdit");
+ if( !configMenu->isItemChecked(iD) )
+ {
commonCombo->setEditable( TRUE );
@@ -1067,3 +1793,5 @@ void Konsole::editCommandListMenuSelected(int iD)
cfg.writeEntry("EditEnabled","TRUE");
- } else {
+ }
+ else
+ {
commonCombo->setEditable( FALSE );
@@ -1075,7 +1803,8 @@ void Konsole::editCommandListMenuSelected(int iD)
}
- if(iD == -24) {
- // "edit commands"
- CommandEditDialog *m = new CommandEditDialog(this);
- connect(m,SIGNAL(commandsEdited()),this,SLOT(initCommandList()));
- QPEApplication::showDialog( m );
+ if(iD == ec_edit)
+ {
+ // "edit commands"
+ CommandEditDialog *m = new CommandEditDialog(this);
+ connect(m,SIGNAL(commandsEdited()),this,SLOT(initCommandList()));
+ m->showMaximized();
}
@@ -1085,6 +1814,8 @@ void Konsole::editCommandListMenuSelected(int iD)
// $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;
@@ -1092,9 +1823,14 @@ void Konsole::setDocument( const QString &cmd) {
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");
@@ -1105,9 +1841,16 @@ void Konsole::setDocument( const QString &cmd) {
-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") {
+ // newSession();
+ 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])+" ";
@@ -1122,4 +1865,5 @@ void Konsole::parseCommandLine() {
-void Konsole::changeForegroundColor(const QColor &color) {
- Config cfg("Konsole");
+void Konsole::changeForegroundColor(const QColor &color)
+{
+ Config cfg("Qkonsole");
cfg.setGroup("Colors");
@@ -1133,9 +1877,9 @@ void Konsole::changeForegroundColor(const QColor &color) {
-qDebug("do other dialog");
+ qDebug("do other dialog");
#ifdef QT_QWS_OPIE
- OColorPopupMenu* penColorPopupMenu2 = new OColorPopupMenu(Qt::black, this,"background color");
+ OColorPopupMenu* penColorPopupMenu2 = new OColorPopupMenu(Qt::black, this,"background color");
connect(penColorPopupMenu2, SIGNAL(colorSelected(const QColor&)), this,
SLOT(changeBackgroundColor(const QColor&)));
- penColorPopupMenu2->exec();
+ penColorPopupMenu2->exec();
#endif
@@ -1143,6 +1887,7 @@ qDebug("do other dialog");
-void Konsole::changeBackgroundColor(const QColor &color) {
+void Konsole::changeBackgroundColor(const QColor &color)
+{
qDebug("Change background");
- Config cfg("Konsole");
+ Config cfg("Qkonsole");
cfg.setGroup("Colors");
@@ -1156,20 +1901,17 @@ void Konsole::changeBackgroundColor(const QColor &color) {
-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 {
-// te->setWrapAt(90);
+ 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
@@ -48,93 +48,155 @@ class Konsole : public QMainWindow
public:
- static QString appName() { return QString::fromLatin1("embeddedkonsole"); }
-
- Konsole(QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
- ~Konsole();
- void setColLin(int columns, int lines);
- QToolBar *secondToolBar;
- void show();
- void setColor();
- int lastSelectedMenu;
- int startUp;
+
+ 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(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 changeColumns(int);
- void fontChanged(int);
- void configMenuSelected(int );
- void colorMenuSelected(int);
- void colorMenuIsSelected(int);
- void enterCommand(int);
- void hitEnter();
- void hitSpace();
- void hitTab();
- void hitPaste();
- void hitUp();
- void hitDown();
- void switchSession(QWidget *);
- void newSession();
- void changeCommand(const QString &, int);
- void initCommandList();
- void scrollMenuSelected(int);
- void editCommandListMenuSelected(int);
- void parseCommandLine();
+ void setDocument(const QString &);
+ void doneSession(TEWidget*,int);
+ void changeTitle(TEWidget*,QString);
+ void changeColumns(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();
+ void hitTab();
+ void hitPaste();
+ void hitUp();
+ void hitDown();
+ void switchSession(QWidget *);
+ void changeCommand(const QString &, int);
+ void initCommandList();
+ void scrollMenuSelected(int);
+ void editCommandListMenuSelected(int);
+ void parseCommandLine();
void changeForegroundColor(const QColor &);
void changeBackgroundColor(const QColor &);
+
+ void historyDialog();
+ void fullscreenTimeout();
+
private:
void doWrap();
- void init(const char* _pgm, QStrList & _args);
- void initSession(const char* _pgm, QStrList & _args);
- void runSession(TESession* s);
- void setColorPixmaps();
- void setHistory(bool);
- QSize calcSize(int columns, int lines);
- TEWidget* getTe();
- QStringList commands;
- QLabel * msgLabel;
- QColor foreground, background;
-bool fromMenu;
-private:
- class VTFont
- {
- public:
- VTFont(QString name, QFont& font)
- {
- this->name = name;
- this->font = font;
- }
-
- QFont& getFont()
- {
- return font;
- }
+ void init(const char* _pgm, QStrList & _args);
+ void initSession(const char* _pgm, QStrList & _args);
+ 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;
- QString getName()
+private:
+ class VTFont
{
- return name;
- }
-
- private:
- QString name;
- QFont font;
- };
+ public:
+ 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:
+ 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;
+
+ 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;
- EKNumTabWidget* tab;
- int nsessions;
- QList<VTFont> fonts;
- int cfont;
- QCString se_pgm;
- QStrList se_args;
- QPopupMenu *fontList,*configMenu,*colorMenu,*scrollMenu,*editCommandListMenu;
- QComboBox *commonCombo;
// history scrolling I think
- bool b_scroll;
-
- int n_keytab;
- int n_scroll;
- int n_render;
- QString pmPath; // pixmap path
- QString dropText;
- QFont defaultFont;
- QSize defaultSize;
+ bool b_scroll;
+
+ int n_keytab;
+ int n_scroll;
+ int n_render;
+ QString pmPath; // pixmap path
+ QString dropText;
+ QFont defaultFont;
+ QSize defaultSize;
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
@@ -38 +38,2 @@
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
@@ -25,4 +25,7 @@
-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();
@@ -31,4 +34,2 @@ TESession::TESession(QMainWindow* main, TEWidget* te, const char* _pgm, QStrList
- term = _term;
-
sh->setSize(te->Lines(),te->Columns()); // not absolutely nessesary
@@ -50,6 +51,8 @@ TESession::TESession(QMainWindow* main, TEWidget* te, const char* _pgm, QStrList
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)) );
@@ -85,3 +88,3 @@ void TESession::done(int status)
{
- emit done(this,status);
+ emit done(te,status);
}
@@ -136,5 +139,6 @@ void TESession::setFontNo(int fn)
-void TESession::setTitle(const QString& title)
+void TESession::changeTitle(int, const QString& title)
{
this->title = title;
+ emit changeTitle(te, 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
@@ -58,3 +58,2 @@ public:
void setFontNo(int fn);
- void setTitle(const QString& title);
void kill(int signal);
@@ -66,2 +65,3 @@ public slots:
void terminate();
+ void changeTitle(int, const QString& title);
@@ -69,3 +69,4 @@ signals:
- void done(TESession*, int);
+ void done(TEWidget*, int);
+ void changeTitle(TEWidget*, QString);