You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
7.0 KiB
262 lines
7.0 KiB
/***************************************************************************
|
|
ksysinfo.cpp - description
|
|
-------------------
|
|
begin : Don Jul 11 2002
|
|
copyright : (C) 2002 by Carsten Wolff, Christoph Held
|
|
email : wolff@kde.org, c-held@web.de
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
/*
|
|
* Code partly taken from kcontrol/info and kcontrol/fonts
|
|
*/
|
|
|
|
#include <tqfontdatabase.h>
|
|
#include <tqfont.h>
|
|
#include <tqstring.h>
|
|
#include <tqstringlist.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <X11/Xlib.h>
|
|
|
|
#include "ksysinfo.h"
|
|
|
|
KSysInfo::KSysInfo() {
|
|
m_fdb = new TQFontDatabase();
|
|
initXInfo();
|
|
initFontFamilies();
|
|
initHWInfo();
|
|
kdDebug() << "KSysInfo: XServer Vendor: " << m_xvendor << endl
|
|
<< "KSysInfo: XServer from XFree Inc: " << m_xfree_inc << endl
|
|
<< "KSysInfo: XServer Release Number: " << m_xrelease << endl
|
|
<< "KSysInfo: XRENDER support is: " << m_xrender << endl
|
|
<< "KSysInfo: Chosen normal font: "<< m_normal_font << endl
|
|
<< "KSysInfo: Chosen fixed width font: "<< m_fixed_font << endl
|
|
<< "KSysInfo: CPU speed: " << m_cpu_speed << " MHz" << endl;
|
|
}
|
|
|
|
KSysInfo::~KSysInfo() {
|
|
delete m_fdb;
|
|
}
|
|
|
|
/*
|
|
* XServer - Info
|
|
*/
|
|
|
|
void KSysInfo::initXInfo() {
|
|
Display *dpy = XOpenDisplay(0);
|
|
// vendor
|
|
m_xvendor = !dpy ? TQString::null : (TQString)ServerVendor(dpy);
|
|
// XFree-Inc?
|
|
m_xfree_inc = m_xvendor.tqcontains("XFree86");
|
|
// X.org ?
|
|
m_xorg = m_xvendor.tqcontains("X.Org");
|
|
// release-number
|
|
m_xrelease = !dpy ? 0 : VendorRelease(dpy);
|
|
// RENDER-support
|
|
m_xrender = false;
|
|
int extCount;
|
|
TQString extension;
|
|
char **extensions = XListExtensions( dpy, &extCount );
|
|
for (int i = 0; i < extCount; i++ ) {
|
|
extension=TQString( extensions[i] );
|
|
extension=extension.stripWhiteSpace();
|
|
if (!extension.compare("RENDER"))
|
|
m_xrender=true;
|
|
}
|
|
XFreeExtensionList(extensions);
|
|
XCloseDisplay (dpy);
|
|
}
|
|
|
|
bool KSysInfo::isXfromXFreeInc() {
|
|
return m_xfree_inc;
|
|
}
|
|
|
|
bool KSysInfo::isXfromXOrg() {
|
|
return m_xorg;
|
|
}
|
|
|
|
int KSysInfo::getXRelease() {
|
|
return m_xrelease;
|
|
}
|
|
|
|
bool KSysInfo::getRenderSupport(){
|
|
return m_xrender;
|
|
}
|
|
|
|
/*
|
|
* Font - Info
|
|
*/
|
|
|
|
void KSysInfo::initFontFamilies() {
|
|
TQFontDatabase fdb;
|
|
TQStringList families = fdb.tqfamilies();
|
|
m_normal_font = TQString::null;
|
|
m_fixed_font = TQString::null;
|
|
int normal_priority = 0, fixed_priority = 0;
|
|
for (uint i=0; i < families.count(); i++) {
|
|
TQString font = *families.tqat(i);
|
|
//add further NORMAL fonts here
|
|
if ( (font.tqcontains("Arial [") || font=="Arial") && normal_priority < 15 ) {
|
|
m_normal_font = font;
|
|
normal_priority = 15;
|
|
} else if ( font.tqcontains("Vera Sans") && normal_priority < 12 ) {
|
|
m_normal_font = font;
|
|
normal_priority = 12;
|
|
} else if ( (font.tqcontains("Luxi Sans") || font.tqcontains("Lucidux Sans")) && normal_priority < 10 ) {
|
|
m_normal_font = font;
|
|
normal_priority = 10;
|
|
} else if ( font.tqcontains("Helmet") && normal_priority < 7 ) {
|
|
m_normal_font = font;
|
|
normal_priority = 7;
|
|
} else if ( font.tqcontains("Nimbus Sans") && normal_priority < 5 ) {
|
|
m_normal_font = font;
|
|
normal_priority = 5;
|
|
} else if ( font.tqcontains("Sans") & m_fdb->isSmoothlyScalable(font) && normal_priority < 3 ) {
|
|
m_normal_font = font;
|
|
normal_priority = 3;
|
|
} else if ( m_fdb->isSmoothlyScalable(font) && !(m_fdb->isFixedPitch(font,"Normal") && m_fdb->isFixedPitch(font,"Bold")) && normal_priority < 2) {
|
|
m_normal_font = font;
|
|
normal_priority = 2;
|
|
} else if ( m_fdb->isSmoothlyScalable(font) && normal_priority < 1 ) {
|
|
m_normal_font = font;
|
|
normal_priority = 1;
|
|
}
|
|
//add further FIXED fonts here
|
|
if (font.tqcontains("Courier New") && fixed_priority < 15){
|
|
m_fixed_font = font;
|
|
fixed_priority = 15;
|
|
} else if ( (font.tqcontains("Luxi Mono") || font.tqcontains("Lucidux Mono")) && fixed_priority < 10 ) {
|
|
m_fixed_font = font;
|
|
fixed_priority = 10;
|
|
} else if (font.tqcontains("Andale Mono") && fixed_priority < 5) {
|
|
m_fixed_font = font;
|
|
fixed_priority = 5;
|
|
} else if ( font.tqcontains("Mono") && m_fdb->isSmoothlyScalable(font) && fixed_priority < 3 ) {
|
|
m_fixed_font = font;
|
|
fixed_priority = 3;
|
|
} else if ( m_fdb->isSmoothlyScalable(font) && m_fdb->isFixedPitch(font,"Normal") && fixed_priority < 2 ) {
|
|
m_fixed_font = font;
|
|
fixed_priority = 2;
|
|
} else if ( m_fdb->isSmoothlyScalable(font) && fixed_priority < 1 ) {
|
|
m_fixed_font = font;
|
|
fixed_priority = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
TQFont KSysInfo::getNormalFont() {
|
|
return m_fdb->font(m_normal_font,"Normal",12); // this will return the current font, if !m_normal_font
|
|
}
|
|
|
|
TQFont KSysInfo::getSmallFont(){
|
|
return m_fdb->font(m_normal_font,"Normal",11);
|
|
}
|
|
|
|
TQFont KSysInfo::getBoldFont(){
|
|
return m_fdb->font(m_normal_font,"Bold",12);
|
|
}
|
|
|
|
TQFont KSysInfo::getFixedWidthFont(){
|
|
return m_fdb->font(m_fixed_font,"Normal",10);
|
|
}
|
|
|
|
/**
|
|
* Hardware - Info
|
|
* (Architecture - dependent code)
|
|
*/
|
|
|
|
///////////////////
|
|
#ifdef __linux__
|
|
///////////////////
|
|
|
|
#include <tqfile.h>
|
|
#include <math.h>
|
|
|
|
void KSysInfo::initHWInfo() {
|
|
char buf[512];
|
|
TQFile *file = new TQFile("/proc/cpuinfo");
|
|
|
|
m_cpu_speed = 0;
|
|
|
|
if (!file->exists()) { //CPU info file does not exist, use default value
|
|
delete file; //only the object :o)
|
|
return;
|
|
}
|
|
|
|
if (!file->open(IO_ReadOnly)) { //No read access, use default value
|
|
delete file;
|
|
return;
|
|
}
|
|
|
|
// File Parser
|
|
while (file->readLine(buf, sizeof(buf) - 1) > 0) {
|
|
TQString s1 = TQString::fromLocal8Bit(buf);
|
|
TQString s2 = s1.mid(s1.tqfind(":") + 1);
|
|
s1.truncate(s1.tqfind(":"));
|
|
s1=s1.stripWhiteSpace();
|
|
s2=s2.stripWhiteSpace();
|
|
if(s1.tqcontains("MHz")){
|
|
float fspeed = s2.toFloat(0);
|
|
fspeed = floor(fspeed);
|
|
m_cpu_speed = (int)fspeed;
|
|
}
|
|
}
|
|
delete file;
|
|
}
|
|
|
|
///////////////////
|
|
//#elif sgi
|
|
///////////////////
|
|
|
|
///////////////////
|
|
//#elif __FreeBSD__
|
|
///////////////////
|
|
|
|
///////////////////
|
|
//#elif hpux
|
|
///////////////////
|
|
|
|
///////////////////
|
|
//#elif __NetBSD__
|
|
///////////////////
|
|
|
|
///////////////////
|
|
//#elif __OpenBSD__
|
|
///////////////////
|
|
|
|
///////////////////
|
|
//#elif defined(__svr4__) && defined(sun)
|
|
///////////////////
|
|
|
|
///////////////////
|
|
//#elif __svr4__
|
|
///////////////////
|
|
|
|
///////////////////
|
|
//#elif _AIX
|
|
///////////////////
|
|
|
|
///////////////////
|
|
#else
|
|
///////////////////
|
|
|
|
void KSysInfo::initHWInfo() {
|
|
m_cpu_speed = 0;
|
|
}
|
|
|
|
#endif
|
|
|
|
int KSysInfo::getCpuSpeed() {
|
|
return m_cpu_speed;
|
|
}
|