Пример #1
0
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);
}