summaryrefslogtreecommitdiffstats
path: root/kpersonalizer/ksysinfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kpersonalizer/ksysinfo.cpp')
-rw-r--r--kpersonalizer/ksysinfo.cpp261
1 files changed, 261 insertions, 0 deletions
diff --git a/kpersonalizer/ksysinfo.cpp b/kpersonalizer/ksysinfo.cpp
new file mode 100644
index 000000000..a16c707be
--- /dev/null
+++ b/kpersonalizer/ksysinfo.cpp
@@ -0,0 +1,261 @@
+/***************************************************************************
+ ksysinfo.cpp - description
+ -------------------
+ begin : Don Jul 11 2002
+ copyright : (C) 2002 by Carsten Wolff, Christoph Held
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 <qfontdatabase.h>
+#include <qfont.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+#include <kdebug.h>
+
+#include <X11/Xlib.h>
+
+#include "ksysinfo.h"
+
+KSysInfo::KSysInfo() {
+ m_fdb = new QFontDatabase();
+ 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 ? QString::null : (QString)ServerVendor(dpy);
+ // XFree-Inc?
+ m_xfree_inc = m_xvendor.contains("XFree86");
+ // X.org ?
+ m_xorg = m_xvendor.contains("X.Org");
+ // release-number
+ m_xrelease = !dpy ? 0 : VendorRelease(dpy);
+ // RENDER-support
+ m_xrender = false;
+ int extCount;
+ QString extension;
+ char **extensions = XListExtensions( dpy, &extCount );
+ for (int i = 0; i < extCount; i++ ) {
+ extension=QString( 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() {
+ QFontDatabase fdb;
+ QStringList families = fdb.families();
+ m_normal_font = QString::null;
+ m_fixed_font = QString::null;
+ int normal_priority = 0, fixed_priority = 0;
+ for (uint i=0; i < families.count(); i++) {
+ QString font = *families.at(i);
+ //add further NORMAL fonts here
+ if ( (font.contains("Arial [") || font=="Arial") && normal_priority < 15 ) {
+ m_normal_font = font;
+ normal_priority = 15;
+ } else if ( font.contains("Vera Sans") && normal_priority < 12 ) {
+ m_normal_font = font;
+ normal_priority = 12;
+ } else if ( (font.contains("Luxi Sans") || font.contains("Lucidux Sans")) && normal_priority < 10 ) {
+ m_normal_font = font;
+ normal_priority = 10;
+ } else if ( font.contains("Helmet") && normal_priority < 7 ) {
+ m_normal_font = font;
+ normal_priority = 7;
+ } else if ( font.contains("Nimbus Sans") && normal_priority < 5 ) {
+ m_normal_font = font;
+ normal_priority = 5;
+ } else if ( font.contains("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.contains("Courier New") && fixed_priority < 15){
+ m_fixed_font = font;
+ fixed_priority = 15;
+ } else if ( (font.contains("Luxi Mono") || font.contains("Lucidux Mono")) && fixed_priority < 10 ) {
+ m_fixed_font = font;
+ fixed_priority = 10;
+ } else if (font.contains("Andale Mono") && fixed_priority < 5) {
+ m_fixed_font = font;
+ fixed_priority = 5;
+ } else if ( font.contains("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;
+ }
+ }
+}
+
+QFont KSysInfo::getNormalFont() {
+ return m_fdb->font(m_normal_font,"Normal",12); // this will return the current font, if !m_normal_font
+}
+
+QFont KSysInfo::getSmallFont(){
+ return m_fdb->font(m_normal_font,"Normal",11);
+}
+
+QFont KSysInfo::getBoldFont(){
+ return m_fdb->font(m_normal_font,"Bold",12);
+}
+
+QFont KSysInfo::getFixedWidthFont(){
+ return m_fdb->font(m_fixed_font,"Normal",10);
+}
+
+/**
+ * Hardware - Info
+ * (Architecture - dependent code)
+ */
+
+///////////////////
+#ifdef __linux__
+///////////////////
+
+ #include <qfile.h>
+ #include <math.h>
+
+ void KSysInfo::initHWInfo() {
+ char buf[512];
+ QFile *file = new QFile("/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) {
+ QString s1 = QString::fromLocal8Bit(buf);
+ QString s2 = s1.mid(s1.find(":") + 1);
+ s1.truncate(s1.find(":"));
+ s1=s1.stripWhiteSpace();
+ s2=s2.stripWhiteSpace();
+ if(s1.contains("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;
+}