diff options
Diffstat (limited to 'kbfxlib/common/kbfxconfig.cpp')
-rw-r--r-- | kbfxlib/common/kbfxconfig.cpp | 862 |
1 files changed, 862 insertions, 0 deletions
diff --git a/kbfxlib/common/kbfxconfig.cpp b/kbfxlib/common/kbfxconfig.cpp new file mode 100644 index 0000000..15c2590 --- /dev/null +++ b/kbfxlib/common/kbfxconfig.cpp @@ -0,0 +1,862 @@ +/* + * Copyright (C) 2006 + * Siraj Razick <[email protected]> + * PhobosK <[email protected]> + * see Also AUTHORS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License version 2 as + * published by the Free Software Foundation + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "kbfxconfig.h" + +KbfxConfig::KbfxConfig() +{ + /* set default configuration values */ + + /* KBFX internal settings */ + KbfxThemeRcDestination = KGlobal::dirs()->saveLocation ( "data", QString ( "kbfx/themerc/" ), TRUE ); + KbfxRcPath = KGlobal::dirs()->findResource ( "config", "kbfxrc" ); + m_KbfxDeleteOldConf = FALSE; + QString _unspecified = tr2i18n ( "Not Specified" ); + QString path = locate ( "data", "kbfx/skins/default/bg.png" ); + path.remove ( "default/bg.png" ); + + kdDebug() << "Configuration path skins: " + path << endl; + + /* KBFX general settings */ + m_KbfxGeneralVersionDefault = APPLICATION_INTERNAL_VERSION; + m_KbfxThemesVersion = "version-2"; + + m_KbfxHistoryDefault = ""; + + /* theme properties */ + m_SpinxThemeNameDefault = "default"; + m_SpinxThemeBasePathDefault = path; + m_UserSpinxThemeBasePathDefault = path; + + m_KbfxMenuTypeDefault = "spinx"; + m_ToolBarResizeDefault = FALSE; + m_KbfxWatcherDefault = TRUE; + m_KbfxShowOldThemesDefault = FALSE; + + /* user(dude) image properties */ + m_SpinxDudeBlinkDefault = FALSE; + KUser *user = new KUser(); + m_SpinxDudeImageDefault = locate ( "data", user->homeDir () + "/.face.icon" ); + delete user; + + /* tooltip properties */ + m_ToolTipDefault = FALSE; + m_ToolTipAnimationDefault = TRUE; + m_ToolTipTextDefault = "Application menu"; + m_ToolTipAvatarDefault = path + "default/butterfly.png"; + m_SpinxTooltipDudeboxDefault = path + "default/tooltip_dudebox.png"; + m_SpinxTooltipMaskDefault = path + "default/tooltip_mask.png"; + m_SpinxTooltipWindowDefault = path + "default/tooltip_window.png"; + m_SpinxTooltipLogoDefault = path + "default/tooltip_logo.png"; + + /* KBFX plugins */ + m_pluginsLeftDefault="Applications"; + m_pluginsRightDefault="Settings"; + + /* specific theme KBFX settings */ + + /* KBFX panel button */ + m_KbfxNormalButtonPathDefault = path + "default/normal.png"; + m_KbfxHoverButtonPathDefault = path + "default/hover.png"; + m_KbfxPressedButtonPathDefault = path + "default/pressed.png"; + + /* face properties */ + m_facePos_xDefault = -1; + m_facePos_yDefault = -1; + m_faceIconXDefault = 27; + m_faceIconYDefault = 8; + m_faceIconHDefault = 64; + m_faceIconWDefault = 65; + m_userNamePos_xDefault = 130; + m_userNamePos_yDefault = 32; + m_faceBoxHideTextDefault = FALSE; + + /* top bar properties */ + m_topBar_xDefault = 0; + m_topBar_yDefault = 0; + m_topBar_hDefault = 95; + m_topBar_wDefault = 504; //108+190+74; + + /* bottom bar properties */ + m_botBar_xDefault = 0; + m_botBar_yDefault = 428; + m_botBar_hDefault = 38; + m_botBar_wDefault = 504; //108+190+74; + + /* scroll bar properties */ + m_scrollBarBotYDefault = 95; + m_scrollBarBotXDefault = 108; + m_scrollBarTopXDefault = 108; + m_scrollBarTopYDefault = 95; + + /* listbox properties */ + m_listBox_xDefault = 0; + m_listBox_yDefault = m_topBar_hDefault; + m_listBox_wDefault = 132; + m_listBox_hDefault = 275; + + /* search box properties */ + m_searchBox_hDefault = 22; + m_searchBox_wDefault = 240; + m_searchBox_xDefault = 130; + m_searchBox_yDefault = 48; + m_searchBox_staticDefault = TRUE; + + /* item view properties */ + m_itemView_hDefault = 380; + m_itemView_wDefault = 240; + m_itemView_xDefault = 132; + m_itemView_yDefault = m_topBar_hDefault; + + /* toolbar properties */ + m_toolBarButtonNormalSizeDefault = 48; + m_toolBarButtonExpandSizeDefault = 48; + + /* KBFX misc properties */ + m_userMenuHeightDefault = 513; + m_userMenuWidthDefault = 504; + m_startHiddenDefault = FALSE; + m_fadeTimeDefault = 75; + m_noCommentsDefault = FALSE; + m_commentMargineDefault = 66; + m_iconSizeDefault = 32; + + /* set default fonts values */ + m_fontTooltipColorDefault = QColor ( 0,0,0 ); + m_fontTooltipFontDefault = QFont ( "Arial", 8, QFont::Normal ); + m_fontAppNameColorDefault = QColor ( 0,0,0 ); + m_fontAppNameFontDefault = QFont ( "Arial", 8, QFont::Normal ); + m_fontAppCommentColorDefault = QColor ( 128,125,0 ); + m_fontAppCommentFontDefault = QFont ( "Arial", 8, QFont::Normal ); + m_fontIndexColorDefault = QColor ( 0,0,0 ); + m_fontIndexFontDefault = QFont ( "Arial", 8, QFont::Normal ); + m_userNameColorDefault = QColor ( 255,255,255 ); + m_userNameFontDefault = QFont ( "Arial", 10, QFont::Bold ); + m_sepNameColorDefault = QColor ( 0,0,0 ); + m_sepNameFontDefault = QFont ( "Arial", 8, QFont::Bold ); + m_pluginNameColorDefault = QColor ( 0,0,0 ); + m_pluginNameFontDefault = QFont ( "Arial", 8, QFont::Normal ); + m_lineColorDefault = QColor ( 255,220,125 ); + m_fontHoverBoldDefault = FALSE; + + /* set default theme info values */ + m_InfoVersionDefault = _unspecified; + m_InfoAuthorDefault = _unspecified; + m_InfoEmailDefault = _unspecified; + m_InfoUrlDefault = _unspecified; + + read(); +} + +KbfxConfig& ConfigInit() +{ + static KbfxConfig _config; + return _config; +} + +void KbfxConfig::setDefault() +{ + /* set default configuration */ + m_KbfxHistory = m_KbfxHistoryDefault; + + m_SpinxThemeName = m_SpinxThemeNameDefault; + m_SpinxThemeBasePath = m_SpinxThemeBasePathDefault; + m_UserSpinxThemeBasePath = m_UserSpinxThemeBasePathDefault; + + m_KbfxMenuType = m_KbfxMenuTypeDefault; + m_ToolBarResize = m_ToolBarResizeDefault; + m_KbfxWatcher = m_KbfxWatcherDefault; + m_KbfxShowOldThemes = m_KbfxShowOldThemesDefault; + + m_SpinxDudeBlink = m_SpinxDudeBlinkDefault; + m_SpinxDudeImage = m_SpinxDudeImageDefault; + + m_ToolTip = m_ToolTipDefault; + m_ToolTipAnimation = m_ToolTipAnimationDefault; + m_ToolTipText = m_ToolTipTextDefault; + + m_pluginsLeft = m_pluginsLeftDefault; + m_pluginsRight = m_pluginsRightDefault; +} + +void KbfxConfig::setThemeInfoDefault() +{ + /* set default configuration */ + m_InfoVersion = m_InfoVersionDefault; + m_InfoAuthor = m_InfoAuthorDefault; + m_InfoEmail = m_InfoEmailDefault; + m_InfoUrl = m_InfoUrlDefault; +} + +void KbfxConfig::setThemeDefault() +{ + /* set default theme layout configuration */ + m_KbfxNormalButtonPath = m_KbfxNormalButtonPathDefault; + m_KbfxHoverButtonPath = m_KbfxHoverButtonPathDefault; + m_KbfxPressedButtonPath = m_KbfxPressedButtonPathDefault; + + m_ToolTipAvatar = m_ToolTipAvatarDefault; + m_SpinxTooltipDudebox = m_SpinxTooltipDudeboxDefault; + m_SpinxTooltipMask = m_SpinxTooltipMaskDefault; + m_SpinxTooltipWindow = m_SpinxTooltipWindowDefault; + m_SpinxTooltipLogo = m_SpinxTooltipLogoDefault; + + m_facePos_x = m_facePos_xDefault; + m_facePos_y = m_facePos_yDefault; + m_faceIconX = m_faceIconXDefault; + m_faceIconY = m_faceIconYDefault; + m_faceIconH = m_faceIconHDefault; + m_faceIconW = m_faceIconWDefault; + m_userNamePos_x = m_userNamePos_xDefault; + m_userNamePos_y = m_userNamePos_yDefault; + m_faceBoxHideText = m_faceBoxHideTextDefault; + + m_topBar_x = m_topBar_xDefault; + m_topBar_y = m_topBar_yDefault; + m_topBar_h = m_topBar_hDefault; + m_topBar_w = m_topBar_wDefault; + + m_botBar_x = m_botBar_xDefault; + m_botBar_y = m_botBar_yDefault; + m_botBar_h = m_botBar_hDefault; + m_botBar_w = m_botBar_wDefault; + + m_scrollBarBotY = m_scrollBarBotYDefault; + m_scrollBarBotX = m_scrollBarBotXDefault; + m_scrollBarTopX = m_scrollBarTopXDefault; + m_scrollBarTopY = m_scrollBarTopYDefault; + + m_listBox_x = m_listBox_xDefault; + m_listBox_y = m_listBox_yDefault; + m_listBox_w = m_listBox_wDefault; + m_listBox_h = m_listBox_hDefault; + + m_searchBox_h = m_searchBox_hDefault; + m_searchBox_w = m_searchBox_wDefault; + m_searchBox_x = m_searchBox_xDefault; + m_searchBox_y = m_searchBox_yDefault; + m_searchBox_static = m_searchBox_staticDefault; + + m_itemView_h = m_itemView_hDefault; + m_itemView_w = m_itemView_wDefault; + m_itemView_x = m_itemView_xDefault; + m_itemView_y = m_itemView_yDefault; + + m_toolBarButtonNormalSize = m_toolBarButtonNormalSizeDefault; + m_toolBarButtonExpandSize = m_toolBarButtonExpandSizeDefault; + + m_userMenuHeight = m_userMenuHeightDefault; + m_userMenuWidth = m_userMenuWidthDefault; + m_startHidden = m_startHiddenDefault; + m_fadeTime = m_fadeTimeDefault; + m_noComments = m_noCommentsDefault; + m_commentMargine = m_commentMargineDefault; + m_iconSize = m_iconSizeDefault; +} + +void KbfxConfig::setFontsDefault() +{ + /* set default fonts values */ + m_fontTooltipColor = m_fontTooltipColorDefault; + m_fontTooltipFont = m_fontTooltipFontDefault; + m_fontAppNameColor = m_fontAppNameColorDefault; + m_fontAppNameFont = m_fontAppNameFontDefault; + m_fontAppCommentColor = m_fontAppCommentColorDefault; + m_fontAppCommentFont = m_fontAppCommentFontDefault; + m_fontIndexColor = m_fontIndexColorDefault; + m_fontIndexFont = m_fontIndexFontDefault; + m_userNameColor = m_userNameColorDefault; + m_userNameFont = m_userNameFontDefault; + m_sepNameColor = m_sepNameColorDefault; + m_sepNameFont = m_sepNameFontDefault; + m_pluginNameColor = m_pluginNameColorDefault; + m_pluginNameFont = m_pluginNameFontDefault; + m_lineColor = m_lineColorDefault; + m_fontHoverBold = m_fontHoverBoldDefault; +} + +void KbfxConfig::readThemeInfo ( QString &themePath, QString &themeName ) +{ + setThemeInfoDefault(); + + QFileInfo * info_theme = new QFileInfo ( themePath + themeName + "/" + m_KbfxThemesVersion ); + KConfig * infoconfig = 0; + + if ( info_theme->exists() == TRUE ) + { + infoconfig = new KConfig ( info_theme->absFilePath() ); + infoconfig->setGroup ( "ThemeGeneral" ); + m_InfoVersion = infoconfig->readEntry ( "ThemeVersion", m_InfoVersionDefault ); + m_InfoAuthor = infoconfig->readEntry ( "AuthorName", m_InfoAuthorDefault ); + m_InfoEmail = infoconfig->readEntry ( "AuthorEmail", m_InfoEmailDefault ); + m_InfoUrl = infoconfig->readEntry ( "Homepage", m_InfoUrlDefault ); + } + +/* + kdDebug() << " m_InfoVersion: " << m_InfoVersion + << endl << " m_InfoAuthor: " << m_InfoAuthor + << endl << " m_InfoEmail: " << m_InfoEmail + << endl << " m_InfoUrl: " << m_InfoUrl + << endl; +*/ + + delete info_theme; + delete infoconfig; +} + +void KbfxConfig::read() +{ + /* read general configuration */ + KConfigSkeleton *confskel = new KConfigSkeleton ( QString::fromLatin1 ( "kbfxrc" ) ); + + KConfig *conf = confskel->config(); + + QString __default = KGlobal::iconLoader()->iconPath ( "kbfx", ( int ) KIcon::Desktop, FALSE ); + + conf->setGroup ( "KbfxGeneral" ); + m_KbfxGeneralVersion = conf->readNumEntry ( "Version", 0 ); + m_ToolBarResize = conf->readBoolEntry ( "ToolBarResize", m_ToolBarResizeDefault ); + m_KbfxMenuType = conf->readEntry ( "MenuType", m_KbfxMenuTypeDefault ); + m_KbfxWatcher = conf->readBoolEntry ( "KbfxWatcher", m_KbfxWatcherDefault ); + m_KbfxShowOldThemes = conf->readBoolEntry ( "KbfxShowOld", m_KbfxShowOldThemesDefault ); + + conf->setGroup ( "SpinxTheme" ); + m_UserSpinxThemeBasePath = conf->readEntry ( "UserThemePath", m_UserSpinxThemeBasePathDefault ); + /* if a new version use default theme */ + if ( m_KbfxGeneralVersion < m_KbfxGeneralVersionDefault ) + { + m_SpinxThemeName = m_SpinxThemeNameDefault; + m_SpinxThemeBasePath = m_SpinxThemeBasePathDefault; + } + else + { + m_SpinxThemeName = conf->readEntry ( "ThemeName", m_SpinxThemeNameDefault ); + m_SpinxThemeBasePath = conf->readEntry ( "ThemePath", m_SpinxThemeBasePathDefault ); + } + + conf->setGroup ( "UserImage" ); + m_SpinxDudeBlink = conf->readBoolEntry ( "DudeBlink", m_SpinxDudeBlinkDefault ); + + conf->setGroup ( "ToolTip" ); + m_ToolTip = conf->readBoolEntry ( "EnableToolTip", m_ToolTipDefault ); + m_ToolTipAnimation = conf->readBoolEntry ( "AnimatedTooltip", m_ToolTipAnimationDefault ); + m_ToolTipText = conf->readEntry ( "ToolTipText", m_ToolTipTextDefault ); + + conf->setGroup ( "Plugins" ); + m_pluginsLeft = conf->readListEntry ( "LoadedPluginsLeft", m_pluginsLeftDefault ); + m_pluginsRight = conf->readListEntry ( "LoadedPluginsRight", m_pluginsRightDefault ); + + conf->setGroup ( "Runtime" ); + m_KbfxHistory = conf->readEntry ( "History", m_KbfxHistoryDefault ); + + /* + kdDebug() << " m_KbfxGeneralVersion: " << m_KbfxGeneralVersion + << endl << " m_KbfxMenuType: " << m_KbfxMenuType + << endl << " m_KbfxWatcher: " << m_KbfxWatcher + << endl << " m_KbfxShowOldThemes: " << m_KbfxShowOldThemes + << endl << " m_ToolBarResize: " << m_ToolBarResize + << endl << " m_UserSpinxThemeBasePath : " << m_UserSpinxThemeBasePath + << endl << " m_SpinxThemeName: " << m_SpinxThemeName + << endl << " m_SpinxThemeBasePath: " << m_SpinxThemeBasePath + << endl << " m_SpinxDudeBlink: " << m_SpinxDudeBlink + << endl << " m_ToolTip: " << m_ToolTip + << endl << " m_ToolTipAnimation: " << m_ToolTipAnimation + << endl << " m_ToolTipText: " << m_ToolTipText + << endl << " m_KbfxHoverButtonPath: " << m_KbfxHoverButtonPath + << endl << " m_KbfxPressedButtonPath: " << m_KbfxPressedButtonPath + << endl << " m_pluginsLeft: " << m_pluginsLeft + << endl << " m_pluginsRight: " << m_pluginsRight + << endl << " m_KbfxHistory: " << m_KbfxHistory + << endl; + */ + + delete confskel; + + readFontrc ( m_SpinxThemeBasePath, m_SpinxThemeName ); + readThemerc ( m_SpinxThemeBasePath, m_SpinxThemeName ); + + if ( m_KbfxGeneralVersion < m_KbfxGeneralVersionDefault ) + { + m_KbfxGeneralVersion = m_KbfxGeneralVersionDefault; + m_KbfxDeleteOldConf = TRUE; + } +} + +void KbfxConfig::readFontrc ( QString & themePath, QString & themeName, bool user_rc ) +{ + setFontsDefault(); + + /* if a new version use default theme fonts */ + if ( m_KbfxGeneralVersion < m_KbfxGeneralVersionDefault ) + { + themePath = m_SpinxThemeBasePathDefault; + themeName = m_SpinxThemeNameDefault; + } + /* get some font settings from theme file or from theme section */ + QString _abs_path = ""; + QFileInfo * info = new QFileInfo ( themePath + themeName + "/kbfxfontrc" ); + QFileInfo * info_theme = new QFileInfo ( KbfxThemeRcDestination + "/" + themeName + "_fontrc" ); + KConfig * fontconfig = 0; + + /* if theme kbfxfontrc exists, make its configuration as default values - prefer users' configuration */ + if ( info_theme->exists() == TRUE || info->exists() == TRUE ) + { + if ( info_theme->exists() == TRUE && m_KbfxGeneralVersion >= m_KbfxGeneralVersionDefault && user_rc ) + { + _abs_path = info_theme->absFilePath(); + } + else if ( info->exists() == TRUE || m_KbfxGeneralVersion < m_KbfxGeneralVersionDefault ) + { + _abs_path = info->absFilePath(); + } + fontconfig = new KConfig ( _abs_path ); + + fontconfig->setGroup ( "Fonts" ); + m_fontTooltipColor = fontconfig->readColorEntry ( "TooltipText", &m_fontTooltipColorDefault ); + m_fontTooltipFont = fontconfig->readFontEntry ( "TooltipTextFont", &m_fontTooltipFontDefault ); + m_fontAppNameColor = fontconfig->readColorEntry ( "ApplicationText", &m_fontAppNameColorDefault ); + m_fontAppNameFont = fontconfig->readFontEntry ( "ApplicationTextFont", &m_fontAppNameFontDefault ); + m_fontAppCommentColor = fontconfig->readColorEntry ( "CommentText", &m_fontAppCommentColorDefault ); + m_fontAppCommentFont = fontconfig->readFontEntry ( "CommentTextFont", &m_fontAppCommentFontDefault ); + m_fontIndexColor = fontconfig->readColorEntry ( "GroupText", &m_fontIndexColorDefault ); + m_fontIndexFont = fontconfig->readFontEntry ( "GroupTextFont", &m_fontIndexFontDefault ); + m_userNameColor = fontconfig->readColorEntry ( "UserName", &m_userNameColorDefault ); + m_userNameFont = fontconfig->readFontEntry ( "UserNameFont", &m_userNameFontDefault ); + m_sepNameColor = fontconfig->readColorEntry ( "SeparatorColor", &m_sepNameColorDefault ); + m_sepNameFont = fontconfig->readFontEntry ( "SeparatorFont", &m_sepNameFontDefault ); + m_pluginNameColor = fontconfig->readColorEntry ( "PluginColor", &m_pluginNameColorDefault ); + m_pluginNameFont = fontconfig->readFontEntry ( "PluginFont", &m_pluginNameFontDefault ); + m_lineColor = fontconfig->readColorEntry ( "LineColor", &m_lineColorDefault ); + m_fontHoverBold = fontconfig->readBoolEntry ( "HoverBold",m_fontHoverBoldDefault ); + kdDebug() << "Read default font settings for theme: " + << themeName + << " from file: " + << _abs_path + << endl; + } + else + { + kdDebug() << "Left Default Font Values for theme: " + << themeName + << endl; + } + + /* + kdDebug() << "Font Values:" << endl + << m_fontTooltipColor << endl + << m_fontTooltipFont << endl + << m_fontAppNameColor << endl + << m_fontAppNameFont << endl + << m_fontAppCommentColor << endl + << m_fontAppCommentFont << endl + << m_fontIndexColor << endl + << m_fontIndexFont << endl + << m_userNameColor << endl + << m_userNameFont << endl + << m_sepNameColor << endl + << m_sepNameFont << endl + << m_pluginNameColor << endl + << m_pluginNameFont << endl + << m_fontHoverBold << endl + << m_lineColor << endl + ; + */ + + delete info; + delete info_theme; + delete fontconfig; +} + +void KbfxConfig::readThemerc ( QString &themePath, QString &themeName, bool user_rc ) +{ + /* if a new version use default theme layout */ + if ( m_KbfxGeneralVersion < m_KbfxGeneralVersionDefault ) + { + themePath = m_SpinxThemeBasePathDefault; + themeName = m_SpinxThemeNameDefault; + } + + /* load theme's on and off buttons if any */ + KbfxOnImg = QPixmap::QPixmap ( KbfxPlasmaPixmapProvider::PixmapPath ( "on", themePath, themeName ) ); + KbfxOffImg = QPixmap::QPixmap ( KbfxPlasmaPixmapProvider::PixmapPath ( "off", themePath, themeName ) ); + + /* use theme's default dude image if any */ + KConfigSkeleton *confskel = new KConfigSkeleton ( QString::fromLatin1 ( "kbfxrc" ) ); + KConfig *conf = confskel->config(); + QString __default = KGlobal::iconLoader()->iconPath ( "kbfx", ( int ) KIcon::Desktop, FALSE ); + + if ( m_SpinxDudeImageDefault == QString::null || !KStandardDirs::exists ( m_SpinxDudeImageDefault ) ) + { + m_SpinxDudeImageDefault = KbfxPlasmaPixmapProvider::PixmapPath ( "menu_top_image_person", themePath, themeName ); + } + conf->setGroup ( "UserImage" ); + m_SpinxDudeImage = conf->readEntry ( "DudeImage", m_SpinxDudeImageDefault ); + delete confskel; + + /* load theme's default buttons if any */ + m_KbfxNormalButtonPathDefault = KbfxPlasmaPixmapProvider::PixmapPath ( "normal", themePath, themeName ); + m_KbfxHoverButtonPathDefault = KbfxPlasmaPixmapProvider::PixmapPath ( "hover", themePath, themeName ); + m_KbfxPressedButtonPathDefault = KbfxPlasmaPixmapProvider::PixmapPath ( "pressed", themePath, themeName ); + + /* load theme's default tooltip images if any */ + m_ToolTipAvatarDefault = KbfxPlasmaPixmapProvider::PixmapPath ( "butterfly", themePath, themeName ); + m_SpinxTooltipDudeboxDefault = KbfxPlasmaPixmapProvider::PixmapPath ( "tooltip_dudebox", themePath, themeName ); + m_SpinxTooltipMaskDefault = KbfxPlasmaPixmapProvider::PixmapPath ( "tooltip_mask", themePath, themeName ); + m_SpinxTooltipWindowDefault = KbfxPlasmaPixmapProvider::PixmapPath ( "tooltip_window", themePath, themeName ); + m_SpinxTooltipLogoDefault = KbfxPlasmaPixmapProvider::PixmapPath ( "tooltip_logo", themePath, themeName ); + + setThemeDefault(); + + /* get some theme layout settings from theme file or from theme section */ + QString _abs_path = ""; + QFileInfo * info = new QFileInfo ( themePath + themeName + "/kbfxlayoutrc" ); + QFileInfo * info_theme = new QFileInfo ( KbfxThemeRcDestination + "/" + themeName + "_layoutrc" ); + KConfig *layoutconfig = 0; + + /* if theme kbfxlayoutrc exists, make its configuration as default values - prefer users' configuration */ + if ( info_theme->exists() == TRUE || info->exists() == TRUE ) + { + if ( info_theme->exists() == TRUE && m_KbfxGeneralVersion >= m_KbfxGeneralVersionDefault && user_rc ) + { + _abs_path = info_theme->absFilePath(); + } + else if ( info->exists() == TRUE || m_KbfxGeneralVersion < m_KbfxGeneralVersionDefault ) + { + _abs_path = info->absFilePath(); + } + + layoutconfig = new KConfig ( _abs_path ); + + layoutconfig->setGroup ( "KbfxButton" ); + m_KbfxNormalButtonPath = layoutconfig->readEntry ( "Normal", m_KbfxNormalButtonPathDefault ); + m_KbfxHoverButtonPath = layoutconfig->readEntry ( "Hover", m_KbfxHoverButtonPathDefault ); + m_KbfxPressedButtonPath = layoutconfig->readEntry ( "Press", m_KbfxPressedButtonPathDefault ); + m_fadeTime = layoutconfig->readNumEntry ( "FadeTime", m_fadeTimeDefault ); + + layoutconfig->setGroup ( "ToolTip" ); + m_ToolTipAvatar = layoutconfig->readEntry ( "Avatar", m_ToolTipAvatarDefault ); + m_SpinxTooltipDudebox = layoutconfig->readEntry ( "Dudebox", m_SpinxTooltipDudeboxDefault ); + m_SpinxTooltipMask = layoutconfig->readEntry ( "Mask", m_SpinxTooltipMaskDefault ); + m_SpinxTooltipWindow = layoutconfig->readEntry ( "Window", m_SpinxTooltipWindowDefault ); + m_SpinxTooltipLogo = layoutconfig->readEntry ( "Logo", m_SpinxTooltipLogoDefault ); + + layoutconfig->setGroup ( "TopBar" ); + m_facePos_x = layoutconfig->readNumEntry ( "DudeX", m_facePos_xDefault ); + m_facePos_y = layoutconfig->readNumEntry ( "DudeY", m_facePos_yDefault ); + m_faceIconX = layoutconfig->readNumEntry ( "FaceX",m_faceIconXDefault ); + m_faceIconY = layoutconfig->readNumEntry ( "FaceY",m_faceIconYDefault ); + m_faceIconH = layoutconfig->readNumEntry ( "FaceH",m_faceIconHDefault ); + m_faceIconW = layoutconfig->readNumEntry ( "FaceW",m_faceIconWDefault ); + m_userNamePos_x = layoutconfig->readNumEntry ( "UserNameX", m_userNamePos_xDefault ); + m_userNamePos_y = layoutconfig->readNumEntry ( "UserNameY", m_userNamePos_yDefault ); + m_faceBoxHideText= layoutconfig->readBoolEntry ( "DisableUserName", m_faceBoxHideTextDefault ); + m_topBar_h = layoutconfig->readNumEntry ( "Height", m_topBar_hDefault ); + m_topBar_w = layoutconfig->readNumEntry ( "Width", m_topBar_wDefault ); + m_topBar_x = layoutconfig->readNumEntry ( "X", m_topBar_xDefault ); + m_topBar_y = layoutconfig->readNumEntry ( "Y", m_topBar_yDefault ); + + layoutconfig->setGroup ( "BottomBar" ); + m_botBar_h = layoutconfig->readNumEntry ( "Height", m_botBar_hDefault ); + m_botBar_w = layoutconfig->readNumEntry ( "Width", m_botBar_wDefault ); + m_botBar_x = layoutconfig->readNumEntry ( "X", m_botBar_xDefault ); + m_botBar_y = layoutconfig->readNumEntry ( "Y", m_botBar_yDefault ); + + layoutconfig->setGroup ( "Scrollbars" ); + m_scrollBarBotX = layoutconfig->readNumEntry ( "ScrollBarBotX", m_scrollBarBotXDefault ); + m_scrollBarBotY = layoutconfig->readNumEntry ( "ScrollBarBotY", m_scrollBarBotYDefault ); + m_scrollBarTopX = layoutconfig->readNumEntry ( "ScrollBarTopX", m_scrollBarTopXDefault ); + m_scrollBarTopY = layoutconfig->readNumEntry ( "ScrollBarTopY", m_scrollBarTopYDefault ); + + layoutconfig->setGroup ( "ListBox" ); + m_listBox_h = layoutconfig->readNumEntry ( "Height", m_listBox_hDefault ); + m_listBox_w = layoutconfig->readNumEntry ( "Width", m_listBox_wDefault ); + m_listBox_x = layoutconfig->readNumEntry ( "X", m_listBox_xDefault ); + m_listBox_y = layoutconfig->readNumEntry ( "Y", m_listBox_yDefault ); + + layoutconfig->setGroup ( "SearchBox" ); + m_searchBox_h = layoutconfig->readNumEntry ( "Height", m_searchBox_hDefault ); + m_searchBox_w = layoutconfig->readNumEntry ( "Width", m_searchBox_wDefault ); + m_searchBox_x = layoutconfig->readNumEntry ( "X", m_searchBox_xDefault ); + m_searchBox_y = layoutconfig->readNumEntry ( "Y", m_searchBox_yDefault ); + m_searchBox_static = layoutconfig->readBoolEntry ( "FixedPos", m_searchBox_staticDefault ); + + layoutconfig->setGroup ( "ItemView" ); + m_itemView_h = layoutconfig->readNumEntry ( "Height", m_itemView_hDefault ); + m_itemView_w = layoutconfig->readNumEntry ( "Width", m_itemView_wDefault ); + m_itemView_x = layoutconfig->readNumEntry ( "X", m_itemView_xDefault ); + m_itemView_y = layoutconfig->readNumEntry ( "Y", m_itemView_yDefault ); + + layoutconfig->setGroup ( "ToolBar" ); + m_toolBarButtonNormalSize = layoutconfig->readNumEntry ( "ButtonNormalSize", m_toolBarButtonNormalSizeDefault ); + m_toolBarButtonExpandSize = layoutconfig->readNumEntry ( "ButtonPressedSize", m_toolBarButtonExpandSizeDefault ); + + layoutconfig->setGroup ( "MainMenu" ); + m_userMenuHeight = layoutconfig->readNumEntry ( "UserMenuHeight",m_userMenuHeightDefault ); + m_userMenuWidth = layoutconfig->readNumEntry ( "UserMenuWidth",m_userMenuWidthDefault ); + m_startHidden = layoutconfig->readBoolEntry ( "ContractedMenu", m_startHiddenDefault ); + + layoutconfig->setGroup ( "ItemProperties" ); + m_noComments = layoutconfig->readBoolEntry ( "NoComments",m_noCommentsDefault ); + m_commentMargine = layoutconfig->readNumEntry ( "CommentMargin",m_commentMargineDefault ); + m_iconSize = layoutconfig->readNumEntry ( "IconSize",m_iconSizeDefault ); + + kdDebug() << "Read default layout settings for theme: " + << themeName + << " from file: " + << _abs_path + << endl; + } + else + { + kdDebug() << "Left Default Layout Values for theme: " + << themeName + << endl; + } + + /* + kdDebug() << " m_KbfxNormalButtonPath: " << m_KbfxNormalButtonPath + << endl << " m_KbfxHoverButtonPath: " << m_KbfxHoverButtonPath + << endl << " m_KbfxPressedButtonPath: " << m_KbfxPressedButtonPath + << endl << " m_fadeTime: " << m_fadeTime + << endl << " m_SpinxDudeImage: " << m_SpinxDudeImage + << endl << " m_ToolTipAvatar: " << m_ToolTipAvatar + << endl << " m_SpinxTooltipDudebox: " << m_SpinxTooltipDudebox + << endl << " m_SpinxTooltipMask: " << m_SpinxTooltipMask + << endl << " m_SpinxTooltipWindow: " << m_SpinxTooltipWindow + << endl << " m_SpinxTooltipLogo: " << m_SpinxTooltipLogo + << endl << " m_facePos_x: " << m_facePos_x + << endl << " m_facePos_y: " << m_facePos_y + << endl << " m_faceIconX: " << m_faceIconX + << endl << " m_faceIconY: " << m_faceIconY + << endl << " m_faceIconH: " << m_faceIconH + << endl << " m_faceIconW: " << m_faceIconW + << endl << " m_userNamePos_x: " << m_userNamePos_x + << endl << " m_userNamePos_y: " << m_userNamePos_y + << endl << " m_faceBoxHideText: " << m_faceBoxHideText + << endl << " m_topBar_x: " << m_topBar_x + << endl << " m_topBar_y: " << m_topBar_y + << endl << " m_topBar_h: " << m_topBar_h + << endl << " m_topBar_w: " << m_topBar_w + << endl << " m_botBar_x: " << m_botBar_x + << endl << " m_botBar_y: " << m_botBar_y + << endl << " m_botBar_h: " << m_botBar_h + << endl << " m_botBar_w: " << m_botBar_w + << endl << " m_scrollBarBotY: " << m_scrollBarBotY + << endl << " m_scrollBarBotX: " << m_scrollBarBotX + << endl << " m_scrollBarTopX: " << m_scrollBarTopX + << endl << " m_scrollBarTopY: " << m_scrollBarTopY + << endl << " m_listBox_x: " << m_listBox_x + << endl << " m_listBox_y: " << m_listBox_y + << endl << " m_listBox_w: " << m_listBox_w + << endl << " m_listBox_h: " << m_listBox_h + << endl << " m_searchBox_h: " << m_searchBox_h + << endl << " m_searchBox_w: " << m_searchBox_w + << endl << " m_searchBox_x: " << m_searchBox_x + << endl << " m_searchBox_y: " << m_searchBox_y + << endl << " m_searchBox_static: " << m_searchBox_static + << endl << " m_itemView_h: " << m_itemView_h + << endl << " m_itemView_w: " << m_itemView_w + << endl << " m_itemView_x: " << m_itemView_x + << endl << " m_itemView_y: " << m_itemView_y + << endl << " m_toolBarButtonNormalSize: " << m_toolBarButtonNormalSize + << endl << " m_toolBarButtonExpandSize: " << m_toolBarButtonExpandSize + << endl << " m_userMenuHeight: " << m_userMenuHeight + << endl << " m_userMenuWidth: " << m_userMenuHeight + << endl << " m_startHidden: " << m_startHidden + << endl << " m_noComments: " << m_noComments + << endl << " m_commentMargine: " << m_commentMargine + << endl << " m_iconSize: " << m_iconSize + << endl; + */ + + checkValues(); + + delete info; + delete info_theme; + delete layoutconfig; +} + +void KbfxConfig::write() +{ + if ( m_KbfxDeleteOldConf && KbfxRcPath != QString::null ) + { + QFile::remove ( KbfxRcPath ); + kdDebug() << "Deleting general RC file: " << KbfxRcPath << endl; + } + + KConfigSkeleton *confskel = new KConfigSkeleton ( QString::fromLatin1 ( "kbfxrc" ) ); + + /* write general KBFX configuration options */ + KConfig *conf = confskel->config(); + + conf->setGroup ( "KDE Action Restrictions" ); + conf->writeEntry ( "warn_unwritable_config", FALSE ); + + conf->setGroup ( "KbfxGeneral" ); + conf->writeEntry ( "Version", m_KbfxGeneralVersion ); + conf->writeEntry ( "MenuType", m_KbfxMenuType ); + conf->writeEntry ( "ToolBarResize", m_ToolBarResize ); + conf->writeEntry ( "KbfxWatcher", m_KbfxWatcher ); + conf->writeEntry ( "KbfxShowOld", m_KbfxShowOldThemes ); + + conf->setGroup ( "SpinxTheme" ); + conf->writeEntry ( "UserThemePath", m_UserSpinxThemeBasePath ); + conf->writeEntry ( "ThemeName", m_SpinxThemeName ); + conf->writeEntry ( "ThemePath", m_SpinxThemeBasePath ); + + conf->setGroup ( "UserImage" ); + conf->writeEntry ( "DudeBlink", m_SpinxDudeBlink ); + conf->writeEntry ( "DudeImage", m_SpinxDudeImage ); + + conf->setGroup ( "ToolTip" ); + conf->writeEntry ( "EnableToolTip", m_ToolTip ); + conf->writeEntry ( "AnimatedTooltip", m_ToolTipAnimation ); + conf->writeEntry ( "ToolTipText", m_ToolTipText ); + + conf->setGroup ( "Plugins" ); + conf->writeEntry ( "LoadedPluginsLeft", m_pluginsLeft ); + conf->writeEntry ( "LoadedPluginsRight", m_pluginsRight ); + + conf->setGroup ( "Runtime" ); + conf->writeEntry ( "History", m_KbfxHistory ); + + conf->sync(); + + delete confskel; +} + +void KbfxConfig::writeFontrc ( QString & themeName ) +{ + /* write fonts KBFX configuration from theme name */ + KConfig *fontconfig = new KConfig ( KbfxThemeRcDestination + "/" + themeName + "_fontrc" ); + + fontconfig->setGroup ( "Fonts" ); + fontconfig->writeEntry ( "TooltipText", m_fontTooltipColor ); + fontconfig->writeEntry ( "TooltipTextFont", m_fontTooltipFont ); + fontconfig->writeEntry ( "ApplicationText", m_fontAppNameColor ); + fontconfig->writeEntry ( "ApplicationTextFont", m_fontAppNameFont ); + fontconfig->writeEntry ( "CommentText", m_fontAppCommentColor ); + fontconfig->writeEntry ( "CommentTextFont", m_fontAppCommentFont ); + fontconfig->writeEntry ( "GroupText", m_fontIndexColor ); + fontconfig->writeEntry ( "GroupTextFont", m_fontIndexFont ); + fontconfig->writeEntry ( "UserName", m_userNameColor ); + fontconfig->writeEntry ( "UserNameFont", m_userNameFont ); + fontconfig->writeEntry ( "SeparatorColor", m_sepNameColor ); + fontconfig->writeEntry ( "SeparatorFont", m_sepNameFont ); + fontconfig->writeEntry ( "PluginColor", m_pluginNameColor ); + fontconfig->writeEntry ( "PluginFont", m_pluginNameFont ); + fontconfig->writeEntry ( "LineColor", m_lineColor ); + fontconfig->writeEntry ( "HoverBold",m_fontHoverBold ); + fontconfig->sync(); + + delete fontconfig; +} + +void KbfxConfig::writeThemerc ( QString & themeName ) +{ + checkValues(); + + /* write layout theme configuration from theme name */ + KConfig *layoutconfig = new KConfig ( KbfxThemeRcDestination + "/" + themeName + "_layoutrc" ); + + layoutconfig->setGroup ( "KbfxButton" ); + layoutconfig->writeEntry ( "Normal", m_KbfxNormalButtonPath ); + layoutconfig->writeEntry ( "Hover", m_KbfxHoverButtonPath ); + layoutconfig->writeEntry ( "Press", m_KbfxPressedButtonPath ); + layoutconfig->writeEntry ( "FadeTime", m_fadeTime ); + + layoutconfig->setGroup ( "ToolTip" ); + layoutconfig->writeEntry ( "Avatar", m_ToolTipAvatar ); + layoutconfig->writeEntry ( "Dudebox", m_SpinxTooltipDudebox ); + layoutconfig->writeEntry ( "Mask", m_SpinxTooltipMask ); + layoutconfig->writeEntry ( "Window", m_SpinxTooltipWindow ); + layoutconfig->writeEntry ( "Logo", m_SpinxTooltipLogo ); + + layoutconfig->setGroup ( "TopBar" ); + layoutconfig->writeEntry ( "DudeX", m_facePos_x ); + layoutconfig->writeEntry ( "DudeY", m_facePos_y ); + layoutconfig->writeEntry ( "FaceX",m_faceIconX ); + layoutconfig->writeEntry ( "FaceY",m_faceIconY ); + layoutconfig->writeEntry ( "FaceH",m_faceIconH ); + layoutconfig->writeEntry ( "FaceW",m_faceIconW ); + layoutconfig->writeEntry ( "UserNameX", m_userNamePos_x ); + layoutconfig->writeEntry ( "UserNameY", m_userNamePos_y ); + layoutconfig->writeEntry ( "DisableUserName", m_faceBoxHideText ); + layoutconfig->writeEntry ( "Height", m_topBar_h ); + layoutconfig->writeEntry ( "Width", m_topBar_w ); + layoutconfig->writeEntry ( "X", m_topBar_x ); + layoutconfig->writeEntry ( "Y", m_topBar_y ); + + layoutconfig->setGroup ( "BottomBar" ); + layoutconfig->writeEntry ( "Height", m_botBar_h ); + layoutconfig->writeEntry ( "Width", m_botBar_w ); + layoutconfig->writeEntry ( "X", m_botBar_x ); + layoutconfig->writeEntry ( "Y", m_botBar_y ); + + layoutconfig->setGroup ( "Scrollbars" ); + layoutconfig->writeEntry ( "ScrollBarBotX", m_scrollBarBotX ); + layoutconfig->writeEntry ( "ScrollBarBotY", m_scrollBarBotY ); + layoutconfig->writeEntry ( "ScrollBarTopX", m_scrollBarTopX ); + layoutconfig->writeEntry ( "ScrollBarTopY", m_scrollBarTopY ); + + layoutconfig->setGroup ( "ListBox" ); + layoutconfig->writeEntry ( "Height", m_listBox_h ); + layoutconfig->writeEntry ( "Width", m_listBox_w ); + layoutconfig->writeEntry ( "X", m_listBox_x ); + layoutconfig->writeEntry ( "Y", m_listBox_y ); + + layoutconfig->setGroup ( "SearchBox" ); + layoutconfig->writeEntry ( "Height", m_searchBox_h ); + layoutconfig->writeEntry ( "Width", m_searchBox_w ); + layoutconfig->writeEntry ( "X", m_searchBox_x ); + layoutconfig->writeEntry ( "Y", m_searchBox_y ); + layoutconfig->writeEntry ( "FixedPos", m_searchBox_static ); + + layoutconfig->setGroup ( "ItemView" ); + layoutconfig->writeEntry ( "Height", m_itemView_h ); + layoutconfig->writeEntry ( "Width", m_itemView_w ); + layoutconfig->writeEntry ( "X", m_itemView_x ); + layoutconfig->writeEntry ( "Y", m_itemView_y ); + + layoutconfig->setGroup ( "ToolBar" ); + layoutconfig->writeEntry ( "ButtonNormalSize", m_toolBarButtonNormalSize ); + layoutconfig->writeEntry ( "ButtonPressedSize", m_toolBarButtonExpandSize ); + + layoutconfig->setGroup ( "MainMenu" ); + layoutconfig->writeEntry ( "UserMenuHeight",m_userMenuHeight ); + layoutconfig->writeEntry ( "UserMenuWidth",m_userMenuWidth ); + layoutconfig->writeEntry ( "ContractedMenu", m_startHidden ); + + layoutconfig->setGroup ( "ItemProperties" ); + layoutconfig->writeEntry ( "NoComments",m_noComments ); + layoutconfig->writeEntry ( "CommentMargin",m_commentMargine ); + layoutconfig->writeEntry ( "IconSize",m_iconSize ); + + layoutconfig->sync(); + + delete layoutconfig; +} + +void KbfxConfig::checkValues() +{ + /* Protect some of the values */ + m_fadeTime = ( m_fadeTime == 0 ) ? m_fadeTime: ( m_fadeTime < 20 ) ? 20: ( m_fadeTime > 1000 ) ? 1000: m_fadeTime; +} |