summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2005-02-06 02:25:25 (UTC)
committer llornkcor <llornkcor>2005-02-06 02:25:25 (UTC)
commitc3892e6c1a4ca15383a7da48f6d72b1d7d26f43d (patch) (unidiff)
treef4d401a3479c04923e11da27ef976bd21df4d12c
parent57d3426a26a2695be0d5358c99be3db9a90da806 (diff)
downloadopie-c3892e6c1a4ca15383a7da48f6d72b1d7d26f43d.zip
opie-c3892e6c1a4ca15383a7da48f6d72b1d7d26f43d.tar.gz
opie-c3892e6c1a4ca15383a7da48f6d72b1d7d26f43d.tar.bz2
adding shell history into command combo off by default
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/apps/embeddedkonsole/konsole.cpp43
1 files changed, 14 insertions, 29 deletions
diff --git a/core/apps/embeddedkonsole/konsole.cpp b/core/apps/embeddedkonsole/konsole.cpp
index 5cfd644..8b4202d 100644
--- a/core/apps/embeddedkonsole/konsole.cpp
+++ b/core/apps/embeddedkonsole/konsole.cpp
@@ -35,578 +35,563 @@ using namespace Opie;
35 35
36#include <qpe/resource.h> 36#include <qpe/resource.h>
37 37
38#include <qmenubar.h> 38#include <qmenubar.h>
39#include <qtabbar.h> 39#include <qtabbar.h>
40#include <qpe/config.h> 40#include <qpe/config.h>
41#include <qfontdatabase.h> 41#include <qfontdatabase.h>
42#include <qfile.h> 42#include <qfile.h>
43#include <qspinbox.h> 43#include <qspinbox.h>
44#include <qlayout.h> 44#include <qlayout.h>
45 45
46#include <sys/wait.h> 46#include <sys/wait.h>
47#include <stdio.h> 47#include <stdio.h>
48#include <stdlib.h> 48#include <stdlib.h>
49#include <assert.h> 49#include <assert.h>
50 50
51#include "konsole.h" 51#include "konsole.h"
52#include "commandeditdialog.h" 52#include "commandeditdialog.h"
53 53
54class EKNumTabBar : public QTabBar 54class EKNumTabBar : public QTabBar
55{ 55{
56public: 56public:
57 EKNumTabBar(QWidget *parent = 0, const char *name = 0) : 57 EKNumTabBar(QWidget *parent = 0, const char *name = 0) :
58 QTabBar(parent, name) 58 QTabBar(parent, name)
59 {} 59 {}
60 60
61 // QList<QTab> *getTabList() { return(tabList()); } 61 // QList<QTab> *getTabList() { return(tabList()); }
62 62
63 void numberTabs() 63 void numberTabs()
64 { 64 {
65 // Yes, it really is this messy. QTabWidget needs functions 65 // Yes, it really is this messy. QTabWidget needs functions
66 // that provide acces to tabs in a sequential way. 66 // that provide acces to tabs in a sequential way.
67 int m=INT_MIN; 67 int m=INT_MIN;
68 for (int i=0; i<count(); i++) 68 for (int i=0; i<count(); i++)
69 { 69 {
70 QTab* left=0; 70 QTab* left=0;
71 QListIterator<QTab> it(*tabList()); 71 QListIterator<QTab> it(*tabList());
72 int x=INT_MAX; 72 int x=INT_MAX;
73 for( QTab* t; (t=it.current()); ++it ) 73 for( QTab* t; (t=it.current()); ++it )
74 { 74 {
75 int tx = t->rect().x(); 75 int tx = t->rect().x();
76 if ( tx<x && tx>m ) 76 if ( tx<x && tx>m )
77 { 77 {
78 x = tx; 78 x = tx;
79 left = t; 79 left = t;
80 } 80 }
81 } 81 }
82 if ( left ) 82 if ( left )
83 { 83 {
84 left->setText(QString::number(i+1)); 84 left->setText(QString::number(i+1));
85 m = left->rect().x(); 85 m = left->rect().x();
86 } 86 }
87 } 87 }
88 } 88 }
89 89
90 virtual QSize sizeHint() const 90 virtual QSize sizeHint() const
91 { 91 {
92 if (isHidden()) 92 if (isHidden())
93 { 93 {
94 return(QSize(0,0)); 94 return(QSize(0,0));
95 } 95 }
96 else 96 else
97 { 97 {
98 QSize size = QTabBar::sizeHint(); 98 QSize size = QTabBar::sizeHint();
99 int shrink = 5; 99 int shrink = 5;
100 if (qApp->desktop()->width() > 600 || qApp->desktop()->height() > 600) 100 if (qApp->desktop()->width() > 600 || qApp->desktop()->height() > 600)
101 { 101 {
102 shrink = 10; 102 shrink = 10;
103 } 103 }
104 size.setHeight(size.height() - shrink); 104 size.setHeight(size.height() - shrink);
105 return(size); 105 return(size);
106 } 106 }
107 } 107 }
108 108
109}; 109};
110 110
111class EKNumTabWidget : public QTabWidget 111class EKNumTabWidget : public QTabWidget
112{ 112{
113public: 113public:
114 EKNumTabWidget(QWidget* parent) : QTabWidget(parent) 114 EKNumTabWidget(QWidget* parent) : QTabWidget(parent)
115 { 115 {
116 setTabBar(new EKNumTabBar(parent,"EKTabBar")); 116 setTabBar(new EKNumTabBar(parent,"EKTabBar"));
117 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); 117 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
118 } 118 }
119 119
120 EKNumTabBar *getTabBar() const 120 EKNumTabBar *getTabBar() const
121 { 121 {
122 return ((EKNumTabBar*)tabBar()); 122 return ((EKNumTabBar*)tabBar());
123 } 123 }
124 124
125 125
126 void addTab(QWidget* w) 126 void addTab(QWidget* w)
127 { 127 {
128 QTab* t = new QTab(QString::number(tabBar()->count()+1)); 128 QTab* t = new QTab(QString::number(tabBar()->count()+1));
129 QTabWidget::addTab(w,t); 129 QTabWidget::addTab(w,t);
130 } 130 }
131 131
132 void removeTab(QWidget* w) 132 void removeTab(QWidget* w)
133 { 133 {
134 removePage(w); 134 removePage(w);
135 ((EKNumTabBar*)tabBar())->numberTabs(); 135 ((EKNumTabBar*)tabBar())->numberTabs();
136 } 136 }
137}; 137};
138 138
139// This could be configurable or dynamicly generated from the bash history 139// This could be configurable or dynamicly generated from the bash history
140// file of the user 140// file of the user
141static const char *commonCmds[] = 141static const char *commonCmds[] =
142 { 142 {
143 "ls ", // I left this here, cause it looks better than the first alpha 143 "ls ", // I left this here, cause it looks better than the first alpha
144 "cardctl eject", 144 "cardctl eject",
145 "cat ", 145 "cat ",
146 "cd ", 146 "cd ",
147 "chmod ", 147 "chmod ",
148 "clear", 148 "clear",
149 "cp ", 149 "cp ",
150 "dc ", 150 "dc ",
151 "df ", 151 "df ",
152 "dmesg", 152 "dmesg",
153 "echo ", 153 "echo ",
154 "env", 154 "env",
155 "find ", 155 "find ",
156 "free", 156 "free",
157 "grep ", 157 "grep ",
158 "ifconfig ", 158 "ifconfig ",
159 "ipkg ", 159 "ipkg ",
160 "mkdir ", 160 "mkdir ",
161 "mv ", 161 "mv ",
162 "nc localhost 7776", 162 "nc localhost 7776",
163 "nc localhost 7777", 163 "nc localhost 7777",
164 "netstat ", 164 "netstat ",
165 "nslookup ", 165 "nslookup ",
166 "ping ", 166 "ping ",
167 "ps aux", 167 "ps aux",
168 "pwd ", 168 "pwd ",
169 "qcop QPE/System 'linkChanged(QString)' ''", 169 "qcop QPE/System 'linkChanged(QString)' ''",
170 "qcop QPE/System 'restart()'", 170 "qcop QPE/System 'restart()'",
171 "qcop QPE/System 'quit()'", 171 "qcop QPE/System 'quit()'",
172 "rm ", 172 "rm ",
173 "rmdir ", 173 "rmdir ",
174 "route ", 174 "route ",
175 "set ", 175 "set ",
176 "traceroute", 176 "traceroute",
177 177
178 /* 178 /*
179 "gzip", 179 "gzip",
180 "gunzip", 180 "gunzip",
181 "chgrp", 181 "chgrp",
182 "chown", 182 "chown",
183 "date", 183 "date",
184 "dd", 184 "dd",
185 "df", 185 "df",
186 "dmesg", 186 "dmesg",
187 "fuser", 187 "fuser",
188 "hostname", 188 "hostname",
189 "kill", 189 "kill",
190 "killall", 190 "killall",
191 "ln", 191 "ln",
192 "ping", 192 "ping",
193 "mount", 193 "mount",
194 "more", 194 "more",
195 "sort", 195 "sort",
196 "touch", 196 "touch",
197 "umount", 197 "umount",
198 "mknod", 198 "mknod",
199 "netstat", 199 "netstat",
200 */ 200 */
201 201
202 "exit", 202 "exit",
203 NULL 203 NULL
204 }; 204 };
205 205
206 206
207static void konsoleInit(const char** shell) { 207static void konsoleInit(const char** shell) {
208 if(setuid(getuid()) !=0) odebug << "setuid failed" << oendl; 208 if(setuid(getuid()) !=0) odebug << "setuid failed" << oendl;
209 if(setgid(getgid()) != 0) odebug << "setgid failed" << oendl; // drop privileges 209 if(setgid(getgid()) != 0) odebug << "setgid failed" << oendl; // drop privileges
210 210
211 211
212// QPEApplication::grabKeyboard(); // for CTRL and ALT 212// QPEApplication::grabKeyboard(); // for CTRL and ALT
213 213
214 odebug << "keyboard grabbed" << oendl; 214 odebug << "keyboard grabbed" << oendl;
215#ifdef FAKE_CTRL_AND_ALT 215#ifdef FAKE_CTRL_AND_ALT
216 odebug << "Fake Ctrl and Alt defined" << oendl; 216 odebug << "Fake Ctrl and Alt defined" << oendl;
217 QPEApplication::grabKeyboard(); // for CTRL and ALT 217 QPEApplication::grabKeyboard(); // for CTRL and ALT
218#endif 218#endif
219 219
220 *shell = getenv("SHELL"); 220 *shell = getenv("SHELL");
221 owarn << "SHell initially is " << *shell << "" << oendl; 221 owarn << "SHell initially is " << *shell << "" << oendl;
222 222
223 if (shell == NULL || *shell == '\0') { 223 if (shell == NULL || *shell == '\0') {
224 struct passwd *ent = 0; 224 struct passwd *ent = 0;
225 uid_t me = getuid(); 225 uid_t me = getuid();
226 *shell = "/bin/sh"; 226 *shell = "/bin/sh";
227 227
228 while ( (ent = getpwent()) != 0 ) { 228 while ( (ent = getpwent()) != 0 ) {
229 if (ent->pw_uid == me) { 229 if (ent->pw_uid == me) {
230 if (ent->pw_shell != "") 230 if (ent->pw_shell != "")
231 *shell = ent->pw_shell; 231 *shell = ent->pw_shell;
232 break; 232 break;
233 } 233 }
234 } 234 }
235 endpwent(); 235 endpwent();
236 } 236 }
237 237
238 if( putenv((char*)"COLORTERM=") !=0) 238 if( putenv((char*)"COLORTERM=") !=0)
239 odebug << "putenv failed" << oendl; // to trigger mc's color detection 239 odebug << "putenv failed" << oendl; // to trigger mc's color detection
240} 240}
241 241
242 242
243Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) : 243Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) :
244 QMainWindow(parent, name, fl) 244 QMainWindow(parent, name, fl)
245{ 245{
246 QStrList tmp; const char* shell; 246 QStrList tmp; const char* shell;
247 247
248 konsoleInit( &shell); 248 konsoleInit( &shell);
249 init(shell,tmp); 249 init(shell,tmp);
250} 250}
251 251
252Konsole::Konsole(const char* name, const char* _pgm, QStrList & _args, int) 252Konsole::Konsole(const char* name, const char* _pgm, QStrList & _args, int)
253 : QMainWindow(0, name) 253 : QMainWindow(0, name)
254{ 254{
255 init(_pgm,_args); 255 init(_pgm,_args);
256} 256}
257 257
258struct HistoryItem 258struct HistoryItem
259{ 259{
260 HistoryItem(int c, const QString &l) 260 HistoryItem(int c, const QString &l)
261 { 261 {
262 count = c; 262 count = c;
263 line = l; 263 line = l;
264 } 264 }
265 int count; 265 int count;
266 QString line; 266 QString line;
267}; 267};
268 268
269class HistoryList : public QList<HistoryItem> 269class HistoryList : public QList<HistoryItem>
270{ 270{
271 virtual int compareItems( QCollection::Item item1, QCollection::Item item2) 271 virtual int compareItems( QCollection::Item item1, QCollection::Item item2)
272 { 272 {
273 int c1 = ((HistoryItem*)item1)->count; 273 int c1 = ((HistoryItem*)item1)->count;
274 int c2 = ((HistoryItem*)item2)->count; 274 int c2 = ((HistoryItem*)item2)->count;
275 if (c1 > c2) 275 if (c1 > c2)
276 return(1); 276 return(1);
277 if (c1 < c2) 277 if (c1 < c2)
278 return(-1); 278 return(-1);
279 return(0); 279 return(0);
280 } 280 }
281}; 281};
282 282
283void Konsole::initCommandList() 283void Konsole::initCommandList()
284{ 284{
285 // odebug << "Konsole::initCommandList" << oendl; 285 // odebug << "Konsole::initCommandList" << oendl;
286 Config cfg( "Konsole" ); 286 Config cfg( "Konsole" );
287 cfg.setGroup("Commands"); 287 cfg.setGroup("Commands");
288 // commonCombo->setInsertionPolicy(QComboBox::AtCurrent); 288 // commonCombo->setInsertionPolicy(QComboBox::AtCurrent);
289 commonCombo->clear(); 289 commonCombo->clear();
290 290
291 if (cfg.readEntry("ShellHistory","TRUE") == "TRUE") 291 if (cfg.readEntry("ShellHistory","TRUE") == "FALSE") {
292 {
293 QString histfilename = QString(getenv("HOME")) + "/.bash_history"; 292 QString histfilename = QString(getenv("HOME")) + "/.bash_history";
294 histfilename = cfg.readEntry("ShellHistoryPath",histfilename); 293 histfilename = cfg.readEntry("ShellHistoryPath",histfilename);
295 QFile histfile(histfilename); 294 QFile histfile(histfilename);
296 // note: compiler barfed on: 295 // note: compiler barfed on:
297 // QFile histfile(QString(getenv("HOME")) + "/.bash_history"); 296 // QFile histfile(QString(getenv("HOME")) + "/.bash_history");
298 if (histfile.open( IO_ReadOnly )) 297 if (histfile.open( IO_ReadOnly )) {
299 {
300 QString line; 298 QString line;
301 uint i; 299 uint i;
302 HistoryList items; 300 HistoryList items;
303 301
304 int lineno = 0; 302 int lineno = 0;
305 while(!histfile.atEnd()) 303 while(!histfile.atEnd()) {
306 { 304 if (histfile.readLine(line, 200) < 0) {
307 if (histfile.readLine(line, 200) < 0)
308 {
309 break; 305 break;
310 } 306 }
311 line = line.left(line.length()-1); 307 line = line.left(line.length()-1);
312 lineno++; 308 lineno++;
313 309
314 for(i=0; i<items.count(); i++) 310 for(i=0; i<items.count(); i++) {
315 { 311 if (line == items.at(i)->line) {
316 if (line == items.at(i)->line)
317 {
318 // weight recent commands & repeated commands more 312 // weight recent commands & repeated commands more
319 // by adding up the index of each command 313 // by adding up the index of each command
320 items.at(i)->count += lineno; 314 items.at(i)->count += lineno;
321 break; 315 break;
322 } 316 }
323 } 317 }
324 if (i >= items.count()) 318 if (i >= items.count()) {
325 {
326 items.append(new HistoryItem(lineno, line)); 319 items.append(new HistoryItem(lineno, line));
327 } 320 }
328 } 321 }
329 items.sort(); 322 items.sort();
330 int n = items.count(); 323 int n = items.count();
331 if (n > 40) 324 if (n > 40) {
332 {
333 n = 40; 325 n = 40;
334 } 326 }
335 for(int i=0; i<n; i++) 327 for(int i=0; i<n; i++) {
336 {
337 // should insert start of command, but keep whole thing 328 // should insert start of command, but keep whole thing
338 if (items.at(items.count()-i-1)->line.length() < 30) 329 if (items.at(items.count()-i-1)->line.length() < 30) {
339 {
340 commonCombo->insertItem(items.at(items.count()-i-1)->line); 330 commonCombo->insertItem(items.at(items.count()-i-1)->line);
341 } 331 }
342 } 332 }
343 histfile.close(); 333 histfile.close();
344 } 334 }
345 } 335 }
346 if (cfg.readEntry("Commands Set","FALSE") == "FALSE") 336 if (cfg.readEntry("Commands Set","FALSE") == "FALSE") {
347 { 337 for (int i = 0; commonCmds[i] != NULL; i++) {
348 for (int i = 0; commonCmds[i] != NULL; i++)
349 {
350 commonCombo->insertItem(commonCmds[i]); 338 commonCombo->insertItem(commonCmds[i]);
351 } 339 }
352 } 340 } else {
353 else 341 for (int i = 0; i < 100; i++) {
354 {
355 for (int i = 0; i < 100; i++)
356 {
357 if (!(cfg.readEntry( QString::number(i),"")).isEmpty()) 342 if (!(cfg.readEntry( QString::number(i),"")).isEmpty())
358 commonCombo->insertItem(cfg.readEntry( QString::number(i),"")); 343 commonCombo->insertItem(cfg.readEntry( QString::number(i),""));
359 } 344 }
360 } 345 }
361 346
362 347
363} 348}
364 349
365static void sig_handler(int x) 350static void sig_handler(int x)
366{ 351{
367 printf("got signal %d\n",x); 352 printf("got signal %d\n",x);
368} 353}
369 354
370void Konsole::init(const char* _pgm, QStrList & _args) 355void Konsole::init(const char* _pgm, QStrList & _args)
371{ 356{
372 357
373#if 0 358#if 0
374 for(int i=1; i<=31; i++) 359 for(int i=1; i<=31; i++)
375 { 360 {
376 if (i != SIGPIPE && i != SIGPROF && i != SIGSEGV 361 if (i != SIGPIPE && i != SIGPROF && i != SIGSEGV
377 && i != SIGINT && i != SIGILL && i != SIGTERM 362 && i != SIGINT && i != SIGILL && i != SIGTERM
378 && i != SIGBUS) 363 && i != SIGBUS)
379 signal(i,sig_handler); 364 signal(i,sig_handler);
380 } 365 }
381#endif 366#endif
382 signal(SIGSTOP, sig_handler); 367 signal(SIGSTOP, sig_handler);
383 signal(SIGCONT, sig_handler); 368 signal(SIGCONT, sig_handler);
384 signal(SIGTSTP, sig_handler); 369 signal(SIGTSTP, sig_handler);
385 370
386 b_scroll = TRUE; // histon; 371 b_scroll = TRUE; // histon;
387 n_keytab = 0; 372 n_keytab = 0;
388 n_render = 0; 373 n_render = 0;
389 startUp=0; 374 startUp=0;
390 fromMenu = FALSE; 375 fromMenu = FALSE;
391 fullscreen = false; 376 fullscreen = false;
392 377
393 setCaption( tr( "Konsole" ) ); 378 setCaption( tr( "Konsole" ) );
394 setIcon( Resource::loadPixmap( "konsole/Terminal" ) ); 379 setIcon( Resource::loadPixmap( "konsole/Terminal" ) );
395 380
396 Config cfg( "Konsole" ); 381 Config cfg( "Konsole" );
397 cfg.setGroup("Font"); 382 cfg.setGroup("Font");
398 QString tmp; 383 QString tmp;
399 384
400 // initialize the list of allowed fonts /////////////////////////////////// 385 // initialize the list of allowed fonts ///////////////////////////////////
401 386
402 QString cfgFontName = cfg.readEntry("FontName","Lcfont"); 387 QString cfgFontName = cfg.readEntry("FontName","Lcfont");
403 int cfgFontSize = cfg.readNumEntry("FontSize",18); 388 int cfgFontSize = cfg.readNumEntry("FontSize",18);
404 389
405 cfont = -1; 390 cfont = -1;
406 391
407 // this code causes repeated access to all the font files 392 // this code causes repeated access to all the font files
408 // which does slow down startup 393 // which does slow down startup
409 QFontDatabase fontDB; 394 QFontDatabase fontDB;
410 QStringList familyNames; 395 QStringList familyNames;
411 familyNames = fontDB.families( FALSE ); 396 familyNames = fontDB.families( FALSE );
412 QString s; 397 QString s;
413 int fontIndex = 0; 398 int fontIndex = 0;
414 int familyNum = 0; 399 int familyNum = 0;
415 fontList = new QPopupMenu( this ); 400 fontList = new QPopupMenu( this );
416 401
417 for(uint j = 0; j < (uint)familyNames.count(); j++) 402 for(uint j = 0; j < (uint)familyNames.count(); j++)
418 { 403 {
419 s = familyNames[j]; 404 s = familyNames[j];
420 if ( s.contains('-') ) 405 if ( s.contains('-') )
421 { 406 {
422 int i = s.find('-'); 407 int i = s.find('-');
423 s = s.right( s.length() - i - 1 ) + " [" + s.left( i ) + "]"; 408 s = s.right( s.length() - i - 1 ) + " [" + s.left( i ) + "]";
424 } 409 }
425 s[0] = s[0].upper(); 410 s[0] = s[0].upper();
426 411
427 QValueList<int> sizes = fontDB.pointSizes( familyNames[j] ); 412 QValueList<int> sizes = fontDB.pointSizes( familyNames[j] );
428 413
429 printf("family[%d] = %s with %d sizes\n", j, familyNames[j].latin1(), 414 printf("family[%d] = %s with %d sizes\n", j, familyNames[j].latin1(),
430 sizes.count()); 415 sizes.count());
431 416
432 if (sizes.count() > 0) 417 if (sizes.count() > 0)
433 { 418 {
434 QPopupMenu *sizeMenu; 419 QPopupMenu *sizeMenu;
435 QFont f; 420 QFont f;
436 int last_width = -1; 421 int last_width = -1;
437 sizeMenu = NULL; 422 sizeMenu = NULL;
438 423
439 for(uint i = 0; i < (uint)sizes.count() + 4; i++) 424 for(uint i = 0; i < (uint)sizes.count() + 4; i++)
440 { 425 {
441 // printf("family %s size %d ", familyNames[j].latin1(), sizes[i]); 426 // printf("family %s size %d ", familyNames[j].latin1(), sizes[i]);
442 // need to divide by 10 on the Z, but not otherwise 427 // need to divide by 10 on the Z, but not otherwise
443 int size; 428 int size;
444 429
445 if (i >= (uint)sizes.count()) 430 if (i >= (uint)sizes.count())
446 { 431 {
447 // try for expandable fonts 432 // try for expandable fonts
448 size = sizes[sizes.count()-1] + 2 * (i - sizes.count() + 1); 433 size = sizes[sizes.count()-1] + 2 * (i - sizes.count() + 1);
449 } 434 }
450 else 435 else
451 { 436 {
452 printf("sizes[%d] = %d\n", i, sizes[i]); 437 printf("sizes[%d] = %d\n", i, sizes[i]);
453 size = sizes[i]; 438 size = sizes[i];
454 } 439 }
455 440
456 f = QFont(familyNames[j], size); 441 f = QFont(familyNames[j], size);
457 f.setFixedPitch(true); 442 f.setFixedPitch(true);
458 QFontMetrics fm(f); 443 QFontMetrics fm(f);
459 // don't trust f.fixedPitch() or f.exactMatch(), they lie!! 444 // don't trust f.fixedPitch() or f.exactMatch(), they lie!!
460 if (fm.width("l") == fm.width("m") 445 if (fm.width("l") == fm.width("m")
461 && (i < (uint)sizes.count() 446 && (i < (uint)sizes.count()
462 || fm.width("m") > last_width)) 447 || fm.width("m") > last_width))
463 { 448 {
464 if (i < (uint)sizes.count()) 449 if (i < (uint)sizes.count())
465 { 450 {
466 last_width = fm.width("m"); 451 last_width = fm.width("m");
467 } 452 }
468 if (sizeMenu == NULL) 453 if (sizeMenu == NULL)
469 { 454 {
470 sizeMenu = new QPopupMenu(); 455 sizeMenu = new QPopupMenu();
471 } 456 }
472 int id = sizeMenu->insertItem(QString("%1").arg(size), fontIndex); 457 int id = sizeMenu->insertItem(QString("%1").arg(size), fontIndex);
473 sizeMenu->setItemParameter(id, fontIndex); 458 sizeMenu->setItemParameter(id, fontIndex);
474 sizeMenu->connectItem(id, this, SLOT(setFont(int))); 459 sizeMenu->connectItem(id, this, SLOT(setFont(int)));
475 QString name = s + " " + QString::number(size); 460 QString name = s + " " + QString::number(size);
476 fonts.append(new VTFont(name, f, familyNames[j], familyNum, size)); 461 fonts.append(new VTFont(name, f, familyNames[j], familyNum, size));
477 if (familyNames[j] == cfgFontName && size == cfgFontSize) 462 if (familyNames[j] == cfgFontName && size == cfgFontSize)
478 { 463 {
479 cfont = fontIndex; 464 cfont = fontIndex;
480 } 465 }
481 printf("FOUND: %s family %s size %d\n", name.latin1(), familyNames[j].latin1(), size); 466 printf("FOUND: %s family %s size %d\n", name.latin1(), familyNames[j].latin1(), size);
482 fontIndex++; 467 fontIndex++;
483 } 468 }
484 } 469 }
485 if (sizeMenu) 470 if (sizeMenu)
486 { 471 {
487 fontList->insertItem(s, sizeMenu, familyNum + 1000); 472 fontList->insertItem(s, sizeMenu, familyNum + 1000);
488 473
489 familyNum++; 474 familyNum++;
490 } 475 }
491 } 476 }
492 477
493 } 478 }
494 479
495 if (cfont < 0 || cfont >= (int)fonts.count()) 480 if (cfont < 0 || cfont >= (int)fonts.count())
496 { 481 {
497 cfont = 0; 482 cfont = 0;
498 } 483 }
499 484
500 // create terminal emulation framework //////////////////////////////////// 485 // create terminal emulation framework ////////////////////////////////////
501 nsessions = 0; 486 nsessions = 0;
502 487
503 tab = new EKNumTabWidget(this); 488 tab = new EKNumTabWidget(this);
504 // tab->setMargin(tab->margin()-5); 489 // tab->setMargin(tab->margin()-5);
505 connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*))); 490 connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*)));
506 491
507 // create terminal toolbar //////////////////////////////////////////////// 492 // create terminal toolbar ////////////////////////////////////////////////
508 setToolBarsMovable( FALSE ); 493 setToolBarsMovable( FALSE );
509 menuToolBar = new QToolBar( this ); 494 menuToolBar = new QToolBar( this );
510 menuToolBar->setHorizontalStretchable( TRUE ); 495 menuToolBar->setHorizontalStretchable( TRUE );
511 496
512 QMenuBar *menuBar = new QMenuBar( menuToolBar ); 497 QMenuBar *menuBar = new QMenuBar( menuToolBar );
513 498
514 setFont(cfont); 499 setFont(cfont);
515 500
516 configMenu = new QPopupMenu( this); 501 configMenu = new QPopupMenu( this);
517 colorMenu = new QPopupMenu( this); 502 colorMenu = new QPopupMenu( this);
518 scrollMenu = new QPopupMenu( this); 503 scrollMenu = new QPopupMenu( this);
519 editCommandListMenu = new QPopupMenu( this); 504 editCommandListMenu = new QPopupMenu( this);
520 505
521 configMenu->insertItem(tr("Command List"), editCommandListMenu); 506 configMenu->insertItem(tr("Command List"), editCommandListMenu);
522 507
523 bool listHidden; 508 bool listHidden;
524 cfg.setGroup("Menubar"); 509 cfg.setGroup("Menubar");
525 if( cfg.readEntry("Hidden","FALSE") == "TRUE") 510 if( cfg.readEntry("Hidden","FALSE") == "TRUE")
526 { 511 {
527 ec_cmdlist = editCommandListMenu->insertItem( tr( "Show command list" )); 512 ec_cmdlist = editCommandListMenu->insertItem( tr( "Show command list" ));
528 listHidden=TRUE; 513 listHidden=TRUE;
529 } 514 }
530 else 515 else
531 { 516 {
532 ec_cmdlist = editCommandListMenu->insertItem( tr( "Hide command list" )); 517 ec_cmdlist = editCommandListMenu->insertItem( tr( "Hide command list" ));
533 listHidden=FALSE; 518 listHidden=FALSE;
534 } 519 }
535 520
536 cfg.setGroup("Tabs"); 521 cfg.setGroup("Tabs");
537 522
538 tabMenu = new QPopupMenu(this); 523 tabMenu = new QPopupMenu(this);
539 tm_bottom = tabMenu->insertItem(tr("Bottom" )); 524 tm_bottom = tabMenu->insertItem(tr("Bottom" ));
540 tm_top = tabMenu->insertItem(tr("Top")); 525 tm_top = tabMenu->insertItem(tr("Top"));
541 tm_hidden = tabMenu->insertItem(tr("Hidden")); 526 tm_hidden = tabMenu->insertItem(tr("Hidden"));
542 527
543 configMenu->insertItem(tr("Tabs"), tabMenu); 528 configMenu->insertItem(tr("Tabs"), tabMenu);
544 529
545 tmp=cfg.readEntry("Position","Top"); 530 tmp=cfg.readEntry("Position","Top");
546 if(tmp=="Top") 531 if(tmp=="Top")
547 { 532 {
548 tab->setTabPosition(QTabWidget::Top); 533 tab->setTabPosition(QTabWidget::Top);
549 tab->getTabBar()->show(); 534 tab->getTabBar()->show();
550 tabPos = tm_top; 535 tabPos = tm_top;
551 } 536 }
552 else if (tmp=="Bottom") 537 else if (tmp=="Bottom")
553 { 538 {
554 tab->setTabPosition(QTabWidget::Bottom); 539 tab->setTabPosition(QTabWidget::Bottom);
555 tab->getTabBar()->show(); 540 tab->getTabBar()->show();
556 tabPos = tm_bottom; 541 tabPos = tm_bottom;
557 } 542 }
558 else 543 else
559 { 544 {
560 tab->getTabBar()->hide(); 545 tab->getTabBar()->hide();
561 tab->setMargin(tab->margin()); 546 tab->setMargin(tab->margin());
562 tabPos = tm_hidden; 547 tabPos = tm_hidden;
563 } 548 }
564 549
565 cm_bw = colorMenu->insertItem(tr( "Black on White")); 550 cm_bw = colorMenu->insertItem(tr( "Black on White"));
566 cm_wb = colorMenu->insertItem(tr( "White on Black")); 551 cm_wb = colorMenu->insertItem(tr( "White on Black"));
567 cm_gb = colorMenu->insertItem(tr( "Green on Black")); 552 cm_gb = colorMenu->insertItem(tr( "Green on Black"));
568 // cm_bt = colorMenu->insertItem(tr( "Black on Transparent")); 553 // cm_bt = colorMenu->insertItem(tr( "Black on Transparent"));
569 cm_br = colorMenu->insertItem(tr( "Black on Pink")); 554 cm_br = colorMenu->insertItem(tr( "Black on Pink"));
570 cm_rb = colorMenu->insertItem(tr( "Pink on Black")); 555 cm_rb = colorMenu->insertItem(tr( "Pink on Black"));
571 cm_gy = colorMenu->insertItem(tr( "Green on Yellow")); 556 cm_gy = colorMenu->insertItem(tr( "Green on Yellow"));
572 cm_bm = colorMenu->insertItem(tr( "Blue on Magenta")); 557 cm_bm = colorMenu->insertItem(tr( "Blue on Magenta"));
573 cm_mb = colorMenu->insertItem(tr( "Magenta on Blue")); 558 cm_mb = colorMenu->insertItem(tr( "Magenta on Blue"));
574 cm_cw = colorMenu->insertItem(tr( "Cyan on White")); 559 cm_cw = colorMenu->insertItem(tr( "Cyan on White"));
575 cm_wc = colorMenu->insertItem(tr( "White on Cyan")); 560 cm_wc = colorMenu->insertItem(tr( "White on Cyan"));
576 cm_bb = colorMenu->insertItem(tr( "Blue on Black")); 561 cm_bb = colorMenu->insertItem(tr( "Blue on Black"));
577 cm_ab = colorMenu->insertItem(tr( "Amber on Black")); 562 cm_ab = colorMenu->insertItem(tr( "Amber on Black"));
578 cm_default = colorMenu->insertItem(tr("default")); 563 cm_default = colorMenu->insertItem(tr("default"));
579 564
580#ifdef QT_QWS_OPIE 565#ifdef QT_QWS_OPIE
581 566
582 colorMenu->insertItem(tr( "Custom")); 567 colorMenu->insertItem(tr( "Custom"));
583#endif 568#endif
584 569
585 configMenu->insertItem(tr( "Colors") ,colorMenu); 570 configMenu->insertItem(tr( "Colors") ,colorMenu);
586 571
587 sessionList = new QPopupMenu(this); 572 sessionList = new QPopupMenu(this);
588 sessionList-> insertItem ( Resource::loadPixmap ( "konsole/Terminal" ), tr( "new session" ), this, 573 sessionList-> insertItem ( Resource::loadPixmap ( "konsole/Terminal" ), tr( "new session" ), this,
589 SLOT(newSession()) ); 574 SLOT(newSession()) );
590 575
591 // connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) )); 576 // connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) ));
592 connect( configMenu, SIGNAL( activated(int) ), this, SLOT( configMenuSelected(int) )); 577 connect( configMenu, SIGNAL( activated(int) ), this, SLOT( configMenuSelected(int) ));
593 connect( colorMenu, SIGNAL( activated(int) ), this, SLOT( colorMenuIsSelected(int) )); 578 connect( colorMenu, SIGNAL( activated(int) ), this, SLOT( colorMenuIsSelected(int) ));
594 connect( tabMenu, SIGNAL( activated(int) ), this, SLOT( tabMenuSelected(int) )); 579 connect( tabMenu, SIGNAL( activated(int) ), this, SLOT( tabMenuSelected(int) ));
595 connect( scrollMenu, SIGNAL(activated(int)),this,SLOT(scrollMenuSelected(int))); 580 connect( scrollMenu, SIGNAL(activated(int)),this,SLOT(scrollMenuSelected(int)));
596 connect( editCommandListMenu,SIGNAL(activated(int)),this,SLOT(editCommandListMenuSelected(int))); 581 connect( editCommandListMenu,SIGNAL(activated(int)),this,SLOT(editCommandListMenuSelected(int)));
597 connect( sessionList, SIGNAL(activated(int)), this, SLOT( sessionListSelected(int) ) ); 582 connect( sessionList, SIGNAL(activated(int)), this, SLOT( sessionListSelected(int) ) );
598 583
599 menuBar->insertItem( tr("View"), configMenu ); 584 menuBar->insertItem( tr("View"), configMenu );
600 menuBar->insertItem( tr("Fonts"), fontList ); 585 menuBar->insertItem( tr("Fonts"), fontList );
601 menuBar->insertItem( tr("Sessions"), sessionList ); 586 menuBar->insertItem( tr("Sessions"), sessionList );
602 587
603 toolBar = new QToolBar( this ); 588 toolBar = new QToolBar( this );
604 589
605 QAction *a; 590 QAction *a;
606 591
607 // Button Commands 592 // Button Commands
608 a = new QAction( tr("New"), Resource::loadPixmap( "konsole/konsole" ), QString::null, 0, this, 0 ); 593 a = new QAction( tr("New"), Resource::loadPixmap( "konsole/konsole" ), QString::null, 0, this, 0 );
609 connect( a, SIGNAL( activated() ), this, SLOT( newSession() ) ); 594 connect( a, SIGNAL( activated() ), this, SLOT( newSession() ) );
610 a->addTo( toolBar ); 595 a->addTo( toolBar );
611 596
612 a = new QAction( tr("Full Screen"), Resource::loadPixmap( "fullscreen" ), QString::null, 0, this, 0 ); 597 a = new QAction( tr("Full Screen"), Resource::loadPixmap( "fullscreen" ), QString::null, 0, this, 0 );