bool SkinSogou::loadSkin(const QString skinPath) { init(); QFile sogouSkinConfFile(skinPath + "skin.ini"); if (!sogouSkinConfFile.exists()) return false; if (!sogouSkinConfFile.open(QIODevice::ReadOnly)) return false; QString line; QString key, value; /// parse ini file content bool general = false; bool display = false; bool scheme_h1 = false; bool scheme_v1 = false; bool statusbar = false; int h_pt, h_pb, h_pl, h_pr; int v_pt, v_pb, v_pl, v_pr; unsigned int pinyin_color, zhongwen_color, zhongwen_first_color, comphint_color; int fontPixelSize = 12; setAdjustWidth(10); setAdjustHeight(30); setHorizontalTileMode("Stretch"); setVerticalTileMode("Stretch"); setInputStringPosX(0); setInputStringPosY(0); setOutputCandPosX(0); setOutputCandPosY(0); QTextStream textStream(sogouSkinConfFile.readAll()); do { line = textStream.readLine(); if (line.isEmpty() || line.at(0) == '#') continue; if (line.at(0) == '[') { general = (line == "[General]"); display = (line == "[Display]"); scheme_h1 = (line == "[Scheme_H1]"); scheme_v1 = (line == "[Scheme_V1]"); statusbar = (line == "[StatusBar]"); continue; } if (!line.contains('=')) continue; key = line.split('=').at(0); value = line.split('=').at(1); if (value.isEmpty()) continue; if (display) { if (key == "font_size") setFontSize(value.toInt()); else if (key == "pinyin_color"){ pinyin_color = value.toUInt(0, 0); setInputColor(QColor(qBlue(pinyin_color), qGreen(pinyin_color), qRed(pinyin_color))); } else if (key == "zhongwen_color"){ zhongwen_color = value.toUInt(0, 0); setOtherColor(QColor(qBlue(zhongwen_color), qGreen(zhongwen_color), qRed(zhongwen_color))); } else if (key == "zhongwen_first_color"){ zhongwen_first_color = value.toUInt(0, 0); setFirstCandColor(QColor(qBlue(zhongwen_first_color), qGreen(zhongwen_first_color), qRed(zhongwen_first_color))); } else if (key == "comphint_color"){ //FIXME //comphint_color = value.toUInt(0, 0); } }else if (scheme_h1) { if (key == "pic" && MainModel::self()->isHorizontal()) { setInputBackImg("file:/" + skinPath + value); } else if (key == "pinyin_marge") { QStringList list = value.split(','); h_pt = list.at(0).trimmed().toInt(); h_pb = list.at(1).trimmed().toInt(); h_pl = list.at(2).trimmed().toInt(); h_pr = list.at(3).trimmed().toInt(); if (MainModel::self()->isHorizontal()){ setMarginTop(h_pt); setMarginBottom(h_pb); setMarginLeft(h_pl); setMarginRight(h_pr); } } else if (key == "custom0_align") { //todo } else if (key == "custom0") { mCustomImgH1[0] = value; setCustomImg0 ("file:/" + skinPath + value); } else if (key == "custom1") { mCustomImgH1[1] = value; setCustomImg1 ("file:/" + skinPath + value); } else if (key == "custom_cnt") { mCustomCntH1 = value.toInt(); } }else if (scheme_v1) { if (key == "pic" && !MainModel::self()->isHorizontal()) { setInputBackImg("file:/" + skinPath + value); } else if (key == "pinyin_marge") { QStringList list = value.split(','); v_pt = list.at(0).trimmed().toInt(); v_pb = list.at(1).trimmed().toInt(); v_pl = list.at(2).trimmed().toInt(); v_pr = list.at(3).trimmed().toInt(); if (!MainModel::self()->isHorizontal()){ setMarginTop(v_pt); setMarginBottom(v_pb); setMarginLeft(v_pl); setMarginRight(v_pr); } } else if (key == "custom0") { mCustomImgV1[0] = value; //qDebug() << "cuystom0 " << value; //setCustomImg0(value); } else if (key == "custom1") { mCustomImgV1[1] = value; qDebug() << "cuystom1 " << value; //setCustomImg1(value); } else if (key == "custom_cnt") { mCustomCntV1 = value.toInt(); //qDebug() << "cuystom_cnt " << mCustomCntV1; } } else if (statusbar) { if (key == "pic") { //FIXME //setTipsImg("file:/" + skinPath + value); } } } while (!line.isNull()); sogouSkinConfFile.close(); return true; }
void SystemTrayMenu::doUpdateSkinListMenu() { int i; size_t len; QDir skinDir; bool checked = false; MyAction *firstMenu = NULL, *menu; QFileInfoList list; QFileInfoList::Iterator iter; QString skinName = MainController::self()->getSkinName(); SkinClass skinClass; bool localExist; MyAction *skinNameMenu = NULL; mSkinMenu->clear(); QString localSkinPath = qgetenv("HOME") + "/.config/fcitx-qimpanel/skin/"; for (i = 0; i < 1; i ++) { skinDir = QDir(localSkinPath); if (!skinDir.exists()) continue; skinDir.setFilter(QDir::Dirs); list = skinDir.entryInfoList(); for (iter = list.begin(); iter != list.end(); ++ iter) { if (iter->isDir() && "." != iter->fileName() && ".." != iter->fileName()) { QFile fcitxSkinConfFile(iter->absoluteFilePath() + "/fcitx_skin.conf"); QFile sogouSkinConfFile(iter->absoluteFilePath() + "/skin.ini"); if (fcitxSkinConfFile.exists()){ skinClass = FCITX; }else continue; menu = new MyAction(iter->fileName(), this); menu->setMyActionType(SkinAction); menu->setSkinPath(iter->absoluteFilePath() + "/"); menu->setSkinClass(skinClass); mSkinMenu->addAction(menu); if (firstMenu == NULL) firstMenu = menu; menu->setCheckable(true); if (iter->fileName() == skinName) { checked = true; menu->setChecked(true); skinNameMenu = menu; } } } } char* ukSkinPath = getQimpanelSharePath("skin"); for (i = 0; i < 1; i ++) { skinDir = QDir(ukSkinPath); if (!skinDir.exists()) continue; skinDir.setFilter(QDir::Dirs); list = skinDir.entryInfoList(); for (iter = list.begin(); iter != list.end(); ++ iter) { if (iter->isDir() && "." != iter->fileName() && ".." != iter->fileName()) { QFile fcitxSkinConfFile(iter->absoluteFilePath() + "/fcitx_skin.conf"); QFile sogouSkinConfFile(iter->absoluteFilePath() + "/skin.ini"); if (fcitxSkinConfFile.exists()){ skinClass = FCITX; }else continue; //check if exist in local localExist = false; QList<QAction *> localExistList = this->actions(); QList<QAction *>::iterator localExistIter; for (localExistIter = localExistList.begin(); localExistIter != localExistList.end(); ++ localExistIter) { if (((MyAction *)(*localExistIter))->text() == iter->fileName()) { localExist = true; break; } } if (localExist) continue; menu = new MyAction(iter->fileName(), this); menu->setMyActionType(SkinAction); //qDebug() << iter->absoluteFilePath(); menu->setSkinPath(iter->absoluteFilePath() + "/"); menu->setSkinClass(skinClass); mSkinMenu->addAction(menu); if (firstMenu == NULL) firstMenu = menu; menu->setCheckable(true); if (iter->fileName() == skinName) { checked = true; menu->setChecked(true); skinNameMenu = menu; } } } } char **skinPath = FcitxXDGGetPathWithPrefix(&len, "skin"); for (i = 0; i < len; i ++) { skinDir = QDir(skinPath[i]); if (!skinDir.exists()) continue; skinDir.setFilter(QDir::Dirs); list = skinDir.entryInfoList(); for (iter = list.begin(); iter != list.end(); ++ iter) { if (iter->isDir() && "." != iter->fileName() && ".." != iter->fileName()) { QFile fcitxSkinConfFile(iter->absoluteFilePath() + "/fcitx_skin.conf"); QFile sogouSkinConfFile(iter->absoluteFilePath() + "/skin.ini"); if (fcitxSkinConfFile.exists()){ skinClass = FCITX; }else continue; menu = new MyAction(iter->fileName(), this); menu->setMyActionType(SkinAction); menu->setSkinPath(iter->absoluteFilePath() + "/"); menu->setSkinClass(skinClass); mSkinMenu->addAction(menu); if (firstMenu == NULL) firstMenu = menu; menu->setCheckable(true); if (iter->fileName() == skinName) { checked = true; menu->setChecked(true); skinNameMenu = menu; } } } } if (!checked) firstMenu->setChecked(true); if (skinNameMenu == NULL) skinNameMenu = firstMenu; FcitxXDGFreePath(skinPath); skinMenuItemOnClick(skinNameMenu); this->addMenu(mSkinMenu); }