proceeding with configuration stuff

svn path=/trunk/kdebase/konsole/; revision=12189
This commit is contained in:
Lars Doelle
1998-11-06 04:35:52 +00:00
parent 943275b951
commit da738c8fb1
9 changed files with 306 additions and 198 deletions

View File

@@ -13,6 +13,8 @@
#ifndef TECOMMON_H
#define TECOMMON_H
#include <qcolor.h>
#ifndef BOOL
typedef int BOOL;
#endif
@@ -76,4 +78,11 @@ inline BOOL operator != (ca a, ca b)
return a.c != b.c || a.f != b.f || a.b != b.b || a.r != b.r;
}
struct ColorEntry
{
QColor color;
bool transparent; // if used on bg
bool bold; // if used on fg
};
#endif // TECOMMON_H

View File

@@ -22,13 +22,6 @@
#include "TECommon.h"
struct ColorEntry
{
QColor color;
bool transparent; // if used on bg
bool bold; // if used on fg
};
class TEWidget : public QFrame
// a widget representing attributed text
{ Q_OBJECT

View File

@@ -5,6 +5,7 @@
#include <qwidget.h>
#include <qlabel.h>
#include <qlistbox.h>
#include <kcontrol.h>
class PageFrame : public QWidget
@@ -22,11 +23,22 @@ public:
~GeneralPage();
};
class ColorTable : public QFrame
{
public:
ColorTable(QWidget* parent);
protected:
//void paintEvent(QPaintEvent* e);
//void resizeEvent(QResizeEvent* e);
};
class SchemaConfig : public PageFrame
{ Q_OBJECT
public:
SchemaConfig(QWidget* parent);
~SchemaConfig();
private:
QListBox* lbox;
};
class SessionConfig : public PageFrame

View File

@@ -25,16 +25,7 @@
#include "TEWidget.h"
#include "TEmuVt102.h"
#include "session.h"
struct ColorSchema
{
QString path;
int numb;
QString title;
QString imagepath;
int alignment;
ColorEntry table[TABLE_COLORS];
};
#include "schema.h"
class TEDemo : public KTMainWindow
{ Q_OBJECT
@@ -82,13 +73,9 @@ private:
void setColorPixmaps();
void setColLin(int columns, int lines);
void addSchema(const ColorSchema* s);
void loadAllSchemas();
void setSchema(const char* path);
void setSchema(const ColorSchema* s);
void setFont(int fontno);
ColorSchema* readSchema(const char* path);
ColorSchema* defaultSchema();
void addSessionCommand(const char* path);
void loadSessionCommands();
@@ -108,9 +95,6 @@ private:
QPopupMenu* m_font;
QPopupMenu* m_schema;
QPopupMenu* m_size;
//
QIntDict<ColorSchema> numb2schema;
QDict<ColorSchema> path2schema;
//
bool b_menuvis;
bool b_framevis;

29
include/schema.h Normal file
View File

@@ -0,0 +1,29 @@
#ifndef SCHEMA_include
#define SCHEMA_include
#include <qstring.h>
#include "TECommon.h"
#include <qdict.h>
#include <qintdict.h>
struct ColorSchema
{
public:
QString path;
int numb;
QString title;
QString imagepath;
int alignment;
ColorEntry table[TABLE_COLORS];
public:
static ColorSchema* readSchema(const char* path);
static ColorSchema* find(const char* path);
static ColorSchema* find(int num);
static ColorSchema* defaultSchema();
static void loadAllSchemas();
static int count();
public:
void addSchema();
};
#endif

View File

@@ -37,16 +37,16 @@ bin_PROGRAMS = konsole kcmkonsole
lib_LTLIBRARIES = libkonsole.la
libkonsole_la_SOURCES = session.C TEWidget.C TEmuVt102.C TEScreen.C TEmulation.C TEShell.C
libkonsole_la_SOURCES = TEWidget.C TEmuVt102.C TEScreen.C TEmulation.C TEShell.C
libkonsole_la_LDFLAGS = -version-info `expr $(VERSION) + $(SUBVERS)`:$(RELEASE):$(SUBVERS)
# Which sources should be compiled for konsole.
konsole_SOURCES = main.C
konsole_SOURCES = main.C schema.C session.C
konsole_LDADD = libkonsole.la $(LIB_KIMGIO) $(LIB_KDEUI)
konsole_LDFLAGS = $(all_libraries) $(KDE_RPATH)
kcmkonsole_SOURCES = kcmkonsole.C
kcmkonsole_SOURCES = kcmkonsole.C schema.C
kcmkonsole_LDADD = $(LIB_KIMGIO) $(LIB_KDEUI)
kcmkonsole_LDFLAGS = $(all_libraries) $(KDE_RPATH)

View File

@@ -12,9 +12,11 @@
*/
#include "kcmkonsole.h"
#include "schema.h"
#include "qlayout.h"
#include "qpushbt.h"
#include "qpixmap.h"
#include "qtableview.h"
#include <kiconloader.h>
#include <stdio.h>
@@ -86,12 +88,52 @@ GeneralPage::~GeneralPage()
//--| Schema configuration |----------------------------------------------------
ColorTable::ColorTable(QWidget* parent) : QFrame(parent)
{
//setFrameStyle( QFrame::Panel | QFrame::Sunken );
setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
setBackgroundMode(PaletteBase);
}
//void ColorTable::resizeEvent(QResizeEvent* e)
//{
//}
//void ColorTable::paintCell(QPainter* p, int row, int col)
//{
//}
SchemaConfig::SchemaConfig(QWidget* parent) : PageFrame(parent)
{
QLabel *bigWidget = new QLabel( "This is work in progress.", this );
QLabel *bigWidget = new QLabel(this); //( "This is work in progress.", this );
bigWidget->setFrameStyle( QFrame::Panel | QFrame::Sunken );
bigWidget->setAlignment( AlignCenter );
bigWidget->setBackgroundMode(PaletteBase);
QLabel *smlWidget = new QLabel( "This is work in progress.", bigWidget );
smlWidget->setFrameStyle( QFrame::Panel | QFrame::Sunken );
smlWidget->setAlignment( AlignCenter );
smlWidget->setBackgroundMode(PaletteBase);
QGridLayout* topLayout = new QGridLayout( bigWidget, 2, 2, 5 );
lbox = new QListBox(bigWidget); //FIXME: QT does not react on setFrameStyle
ColorTable* colorTableW = new ColorTable(bigWidget);
topLayout->setColStretch(0,4);
topLayout->setColStretch(1,2);
topLayout->setRowStretch(0,4);
topLayout->setRowStretch(1,1);
topLayout->addWidget( colorTableW, 0, 0 );
topLayout->addWidget( lbox, 0, 1 );
topLayout->addMultiCellWidget( smlWidget, 1,1, 0,1 );
ColorSchema::loadAllSchemas();
for (int i = 0; i < ColorSchema::count(); i++)
{ ColorSchema* s = ColorSchema::find(i);
// assert( s );
lbox->insertItem(s->title.data());
}
topLayout->activate();
Contents
( i18n(
"Color Schema Management"
@@ -140,6 +182,10 @@ KcmKonsole::KcmKonsole(int &argc, char **argv, const char *name)
{
if (runGUI())
{
// if (!pages || pages->contains("schemes"))
addPage(schemes = new SchemaConfig(dialog),
klocale->translate("&Color Schemes"),
"kcmkonsole-not-written-yet.html");
// if (!pages || pages->contains("general"))
addPage(general = new GeneralPage(dialog),
klocale->translate("&General"),
@@ -148,10 +194,6 @@ KcmKonsole::KcmKonsole(int &argc, char **argv, const char *name)
addPage(sessions = new SessionConfig(dialog),
klocale->translate("&Sessions"),
"kcmkonsole-not-written-yet.html");
// if (!pages || pages->contains("schemes"))
addPage(schemes = new SchemaConfig(dialog),
klocale->translate("&Color Schemes"),
"kcmkonsole-not-written-yet.html");
if (schemes || sessions || general)
dialog->show();

View File

@@ -70,8 +70,6 @@ static int session_no = 0;
static QIntDict<KSimpleConfig> no2command;
static int cmd_serial = 0;
static int schema_serial = 1;
TEDemo::TEDemo(const char* args[], int login_shell) : KTMainWindow()
{
se = NULL;
@@ -101,7 +99,12 @@ TEDemo::TEDemo(const char* args[], int login_shell) : KTMainWindow()
// load schema /////////////////////////////////////////////////////////////
curr_schema = 0;
loadAllSchemas();
ColorSchema::loadAllSchemas();
for (int i = 0; i < ColorSchema::count(); i++)
{ ColorSchema* s = ColorSchema::find(i);
assert( s );
m_schema->insertItem(s->title.data(),s->numb);
}
//FIXME: we should build a complete session before running it.
@@ -117,7 +120,7 @@ TEDemo::TEDemo(const char* args[], int login_shell) : KTMainWindow()
TESession* initial = new TESession(this,te,args,"xterm",login_shell);
initial->setFontNo(n_font);
initial->setSchemaNo(path2schema.find(s_schema)->numb);
initial->setSchemaNo(ColorSchema::find(s_schema)->numb);
initial->setTitle(args[0]);
// start first session /////////////////////////////////////////////////////
@@ -582,7 +585,7 @@ void TEDemo::newSession(int i)
ColorSchema* schema = sch.isEmpty()
? (ColorSchema*)NULL
: path2schema.find(sch);
: ColorSchema::find(sch);
int schmno = schema?schema->numb:se->schemaNo();
@@ -639,167 +642,7 @@ void TEDemo::doneSession(TESession* s, int status)
}
}
// --| Schema support |-------------------------------------------------------
void TEDemo::addSchema(const ColorSchema* s)
{
numb2schema.insert(s->numb,s);
path2schema.insert(s->path.data(),s);
m_schema->insertItem(s->title.data(),s->numb);
}
void TEDemo::setSchema(int numb)
{
ColorSchema* s = numb2schema.find(numb);
if (s) setSchema(s);
}
void TEDemo::setSchema(const char* path)
{
ColorSchema* s = path2schema.find(path);
if (s) setSchema(s);
}
void TEDemo::setSchema(const ColorSchema* s)
{
if (!s) return;
m_schema->setItemChecked(curr_schema,FALSE);
m_schema->setItemChecked(s->numb,TRUE);
s_schema = s->path;
curr_schema = s->numb;
pmPath = s->imagepath;
te->setColorTable(s->table); //FIXME: set twice here to work around a bug
pixmap_menu_activated(s->alignment);
te->setColorTable(s->table);
if (se) se->setSchemaNo(s->numb);
}
ColorSchema* TEDemo::readSchema(const char* path)
{ FILE* sysin = fopen(path,"r");
char line[100]; int i;
if (!sysin) return NULL;
//
ColorSchema* res = new ColorSchema;
res->path = path;
res->numb = schema_serial++;
for (i = 0; i < TABLE_COLORS; i++)
{
res->table[i].color = QColor(0,0,0);
res->table[i].transparent = 0;
res->table[i].bold = 0;
}
res->title = "[missing title]";
res->imagepath = "";
res->alignment = 1;
//
while (fscanf(sysin,"%80[^\n]\n",line) > 0)
{
if (strlen(line) > 5)
{
if (!strncmp(line,"title",5))
{
res->title = line+6;
}
if (!strncmp(line,"image",5))
{ char rend[100], path[100]; int attr = 1;
if (sscanf(line,"image %s %s",rend,path) != 2)
continue;
if (!strcmp(rend,"tile" )) attr = 2; else
if (!strcmp(rend,"center")) attr = 3; else
if (!strcmp(rend,"full" )) attr = 4; else
continue;
res->imagepath = path;
res->alignment = attr;
}
if (!strncmp(line,"color",5))
{ int fi,cr,cg,cb,tr,bo;
if(sscanf(line,"color %d %d %d %d %d %d",&fi,&cr,&cg,&cb,&tr,&bo) != 6)
continue;
if (!(0 <= fi && fi <= TABLE_COLORS)) continue;
if (!(0 <= cr && cr <= 255 )) continue;
if (!(0 <= cg && cg <= 255 )) continue;
if (!(0 <= cb && cb <= 255 )) continue;
if (!(0 <= tr && tr <= 1 )) continue;
if (!(0 <= bo && bo <= 1 )) continue;
res->table[fi].color = QColor(cr,cg,cb);
res->table[fi].transparent = tr;
res->table[fi].bold = bo;
}
if (!strncmp(line,"sysfg",5))
{ int fi,tr,bo;
if(sscanf(line,"sysfg %d %d %d",&fi,&tr,&bo) != 3)
continue;
if (!(0 <= fi && fi <= TABLE_COLORS)) continue;
if (!(0 <= tr && tr <= 1 )) continue;
if (!(0 <= bo && bo <= 1 )) continue;
res->table[fi].color = kapp->textColor;
res->table[fi].transparent = tr;
res->table[fi].bold = bo;
}
if (!strncmp(line,"sysbg",5))
{ int fi,tr,bo;
if(sscanf(line,"sysbg %d %d %d",&fi,&tr,&bo) != 3)
continue;
if (!(0 <= fi && fi <= TABLE_COLORS)) continue;
if (!(0 <= tr && tr <= 1 )) continue;
if (!(0 <= bo && bo <= 1 )) continue;
res->table[fi].color = kapp->backgroundColor;
res->table[fi].transparent = tr;
res->table[fi].bold = bo;
}
}
}
fclose(sysin);
return res;
}
static const ColorEntry default_table[TABLE_COLORS] =
// The following are almost IBM standard color codes, with some slight
// gamma correction for the dim colors to compensate for bright X screens.
// It contains the 8 ansiterm/xterm colors in 2 intensities.
{
{ QColor(0x00,0x00,0x00), 0, 0 }, { QColor(0xFF,0xFF,0xFF), 1, 0 }, // Dfore, Dback
{ QColor(0x00,0x00,0x00), 0, 0 }, { QColor(0xB2,0x18,0x18), 0, 0 }, // Black, Red
{ QColor(0x18,0xB2,0x18), 0, 0 }, { QColor(0xB2,0x68,0x18), 0, 0 }, // Green, Yellow
{ QColor(0x18,0x18,0xB2), 0, 0 }, { QColor(0xB2,0x18,0xB2), 0, 0 }, // Blue, Magenta
{ QColor(0x18,0xB2,0xB2), 0, 0 }, { QColor(0xB2,0xB2,0xB2), 0, 0 }, // Cyan, White
// intensive
{ QColor(0x00,0x00,0x00), 0, 1 }, { QColor(0xFF,0xFF,0xFF), 1, 0 },
{ QColor(0x68,0x68,0x68), 0, 0 }, { QColor(0xFF,0x54,0x54), 0, 0 },
{ QColor(0x54,0xFF,0x54), 0, 0 }, { QColor(0xFF,0xFF,0x54), 0, 0 },
{ QColor(0x54,0x54,0xFF), 0, 0 }, { QColor(0xFF,0x54,0xFF), 0, 0 },
{ QColor(0x54,0xFF,0xFF), 0, 0 }, { QColor(0xFF,0xFF,0xFF), 0, 0 }
};
ColorSchema* TEDemo::defaultSchema()
{
ColorSchema* res = new ColorSchema;
res->path = "";
res->numb = 0;
res->title = "Konsole Default";
res->imagepath = ""; // background pixmap
res->alignment = 1; // none
for (int i = 0; i < TABLE_COLORS; i++)
res->table[i] = default_table[i];
return res;
}
void TEDemo::loadAllSchemas()
{
addSchema(defaultSchema());
QString path = kapp->kde_datadir() + "/konsole";
QDir d( path );
if(!d.exists())
return;
d.setFilter( QDir::Files | QDir::Readable );
d.setNameFilter( "*.schema" );
const QFileInfoList *list = d.entryInfoList();
QFileInfoListIterator it( *list ); // create list iterator
for(QFileInfo *fi; (fi=it.current()); ++it )
addSchema(readSchema(fi->filePath()));
}
// --| Session support |-------------------------------------------------------
void TEDemo::addSessionCommand(const char* path)
{
@@ -832,6 +675,34 @@ void TEDemo::loadSessionCommands()
addSessionCommand(fi->filePath());
}
// --| Schema support |-------------------------------------------------------
void TEDemo::setSchema(int numb)
{
ColorSchema* s = ColorSchema::find(numb);
if (s) setSchema(s);
}
void TEDemo::setSchema(const char* path)
{
ColorSchema* s = ColorSchema::find(path);
if (s) setSchema(s);
}
void TEDemo::setSchema(const ColorSchema* s)
{
if (!s) return;
m_schema->setItemChecked(curr_schema,FALSE);
m_schema->setItemChecked(s->numb,TRUE);
s_schema = s->path;
curr_schema = s->numb;
pmPath = s->imagepath;
te->setColorTable(s->table); //FIXME: set twice here to work around a bug
pixmap_menu_activated(s->alignment);
te->setColorTable(s->table);
if (se) se->setSchemaNo(s->numb);
}
/* --| main |---------------------------------------------------------------- */
static void usage()

168
src/schema.C Normal file
View File

@@ -0,0 +1,168 @@
// [schema.C]
/*! /class ColorSchema
This is new stuff, so no docs yet.
The identifier is the path. `numb' is guarantied to range from 0 to
count-1. Note when reloading the path can be assumed to still identify
a know schema, while the `numb' may vary.
*/
#include "schema.h"
#include <stdio.h>
#include "kapp.h"
#include <qdir.h>
static int schema_serial = 0; //FIXME: remove,localize
static QIntDict<ColorSchema> numb2schema;
static QDict<ColorSchema> path2schema;
ColorSchema* ColorSchema::readSchema(const char* path)
{ FILE* sysin = fopen(path,"r");
char line[100]; int i;
if (!sysin) return NULL;
//
ColorSchema* res = new ColorSchema;
res->path = path;
res->numb = schema_serial++;
for (i = 0; i < TABLE_COLORS; i++)
{
res->table[i].color = QColor(0,0,0);
res->table[i].transparent = 0;
res->table[i].bold = 0;
}
res->title = "[missing title]";
res->imagepath = "";
res->alignment = 1;
//
while (fscanf(sysin,"%80[^\n]\n",line) > 0)
{
if (strlen(line) > 5)
{
if (!strncmp(line,"title",5))
{
res->title = line+6;
}
if (!strncmp(line,"image",5))
{ char rend[100], path[100]; int attr = 1;
if (sscanf(line,"image %s %s",rend,path) != 2)
continue;
if (!strcmp(rend,"tile" )) attr = 2; else
if (!strcmp(rend,"center")) attr = 3; else
if (!strcmp(rend,"full" )) attr = 4; else
continue;
res->imagepath = path;
res->alignment = attr;
}
if (!strncmp(line,"color",5))
{ int fi,cr,cg,cb,tr,bo;
if(sscanf(line,"color %d %d %d %d %d %d",&fi,&cr,&cg,&cb,&tr,&bo) != 6)
continue;
if (!(0 <= fi && fi <= TABLE_COLORS)) continue;
if (!(0 <= cr && cr <= 255 )) continue;
if (!(0 <= cg && cg <= 255 )) continue;
if (!(0 <= cb && cb <= 255 )) continue;
if (!(0 <= tr && tr <= 1 )) continue;
if (!(0 <= bo && bo <= 1 )) continue;
res->table[fi].color = QColor(cr,cg,cb);
res->table[fi].transparent = tr;
res->table[fi].bold = bo;
}
if (!strncmp(line,"sysfg",5))
{ int fi,tr,bo;
if(sscanf(line,"sysfg %d %d %d",&fi,&tr,&bo) != 3)
continue;
if (!(0 <= fi && fi <= TABLE_COLORS)) continue;
if (!(0 <= tr && tr <= 1 )) continue;
if (!(0 <= bo && bo <= 1 )) continue;
res->table[fi].color = kapp->textColor;
res->table[fi].transparent = tr;
res->table[fi].bold = bo;
}
if (!strncmp(line,"sysbg",5))
{ int fi,tr,bo;
if(sscanf(line,"sysbg %d %d %d",&fi,&tr,&bo) != 3)
continue;
if (!(0 <= fi && fi <= TABLE_COLORS)) continue;
if (!(0 <= tr && tr <= 1 )) continue;
if (!(0 <= bo && bo <= 1 )) continue;
res->table[fi].color = kapp->backgroundColor;
res->table[fi].transparent = tr;
res->table[fi].bold = bo;
}
}
}
fclose(sysin);
return res;
}
ColorSchema* ColorSchema::find(int numb)
{
return numb2schema.find(numb);
}
ColorSchema* ColorSchema::find(const char* path)
{
return path2schema.find(path);
}
int ColorSchema::count()
{
return numb2schema.count();
}
void ColorSchema::addSchema()
{
numb2schema.insert(numb,this);
path2schema.insert(path.data(),this);
}
static const ColorEntry default_table[TABLE_COLORS] =
// The following are almost IBM standard color codes, with some slight
// gamma correction for the dim colors to compensate for bright X screens.
// It contains the 8 ansiterm/xterm colors in 2 intensities.
{
{ QColor(0x00,0x00,0x00), 0, 0 }, { QColor(0xFF,0xFF,0xFF), 1, 0 }, // Dfore, Dback
{ QColor(0x00,0x00,0x00), 0, 0 }, { QColor(0xB2,0x18,0x18), 0, 0 }, // Black, Red
{ QColor(0x18,0xB2,0x18), 0, 0 }, { QColor(0xB2,0x68,0x18), 0, 0 }, // Green, Yellow
{ QColor(0x18,0x18,0xB2), 0, 0 }, { QColor(0xB2,0x18,0xB2), 0, 0 }, // Blue, Magenta
{ QColor(0x18,0xB2,0xB2), 0, 0 }, { QColor(0xB2,0xB2,0xB2), 0, 0 }, // Cyan, White
// intensive
{ QColor(0x00,0x00,0x00), 0, 1 }, { QColor(0xFF,0xFF,0xFF), 1, 0 },
{ QColor(0x68,0x68,0x68), 0, 0 }, { QColor(0xFF,0x54,0x54), 0, 0 },
{ QColor(0x54,0xFF,0x54), 0, 0 }, { QColor(0xFF,0xFF,0x54), 0, 0 },
{ QColor(0x54,0x54,0xFF), 0, 0 }, { QColor(0xFF,0x54,0xFF), 0, 0 },
{ QColor(0x54,0xFF,0xFF), 0, 0 }, { QColor(0xFF,0xFF,0xFF), 0, 0 }
};
ColorSchema* ColorSchema::defaultSchema()
{
ColorSchema* res = new ColorSchema;
res->path = "";
res->numb = 0;
res->title = "Konsole Default";
res->imagepath = ""; // background pixmap
res->alignment = 1; // none
for (int i = 0; i < TABLE_COLORS; i++)
res->table[i] = default_table[i];
return res;
}
void ColorSchema::loadAllSchemas()
{
defaultSchema()->addSchema();
schema_serial = 1;
QString path = kapp->kde_datadir() + "/konsole";
QDir d( path );
if(!d.exists())
return;
d.setFilter( QDir::Files | QDir::Readable );
d.setNameFilter( "*.schema" );
const QFileInfoList *list = d.entryInfoList();
QFileInfoListIterator it( *list ); // create list iterator
for(QFileInfo *fi; (fi=it.current()); ++it )
ColorSchema::readSchema(fi->filePath())->addSchema(); //FIXME: check for NULL
}