⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendar.cpp

📁 funambol windows mobile plugin source code, the source code is taken from the funambol site
💻 CPP
字号:
/*
 * Copyright (C) 2003-2007 Funambol, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU 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, TITLE, NONINFRINGEMENT or FITNESS FOR A PARTICULAR
 * PURPOSE.  See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 * 02111-1307  USA
 */


#include "vocl/iCalendar/Calendar.h"

Calendar::Calendar() {
    prodID = NULL;
    version = NULL;
    calScale = NULL;
    method = NULL;
    xTags = NULL;
    events = NULL;
    todos = NULL;
}

Calendar::~Calendar() {
    if(prodID) {
        delete prodID; prodID = NULL;
    }
    if(version) {
        delete version; version = NULL;
    }
    if(calScale) {
        delete calScale; calScale = NULL;
    }
    if(method) {
        delete method; method = NULL;
    }
    if(xTags) {
        delete xTags; xTags = NULL;
    }
    if(events) {
        delete events; events = NULL;
    }
    if(todos) {
        delete todos; todos = NULL;
    }
}

void Calendar::set(iCalProperty** oldProperty, iCalProperty& newProperty) {
    if (*oldProperty) delete *oldProperty;

    *oldProperty = (iCalProperty*)newProperty.clone();
}

void Calendar::setProdID(iCalProperty& p) {
    set(&prodID, p);
}
void Calendar::setVersion(iCalProperty& p) {
    set(&version, p);
}
void Calendar::setCalScale(iCalProperty& p) {
    set(&calScale, p);
}
void Calendar::setMethod(iCalProperty& p) {
    set(&method, p);
}
void Calendar::setXTags(ArrayList& list) {
    if (xTags) {
        xTags->clear();
    } else {
        xTags = new ArrayList();
    }

    int s = list.size();
    for (int i=0; i<s; ++i) {
        xTags->add(*list[i]);
    }
}
void Calendar::setEvents(ArrayList& list) {
    if (events) {
        events->clear();
    } else {
        events = new ArrayList();
    }

    int s = list.size();
    for (int i=0; i<s; ++i) {
        events->add(*list[i]);
    }
}
void Calendar::setToDos(ArrayList& list) {
    if (todos) {
        todos->clear();
    } else {
        todos = new ArrayList();
    }

    int s = list.size();
    for (int i=0; i<s; ++i) {
        todos->add(*list[i]);
    }
}
iCalProperty* Calendar::getProdID() {
    return prodID;
}
iCalProperty* Calendar::getVersion() {
    return version;
}
iCalProperty* Calendar::getCalScale() {
    return calScale;
}
iCalProperty* Calendar::getMethod() {
    return method;
}
ArrayList* Calendar::getXTags() {
    return xTags;
}
ArrayList* Calendar::getEvents() {
    return events;
}
ArrayList* Calendar::getToDos() {
    return todos;
}
WCHAR* Calendar::toString() {

    WCHAR eol[] = TEXT("\r\n");
    WCHAR* ret = new WCHAR[ICALENDAR_BUFFER];
    wcscpy(ret, TEXT("BEGIN:VCALENDAR\r\n"));
    if(version) {
        wcscat(ret, TEXT("VERSION:"));
        wcscat(ret, version->getValue());
        wcscat(ret, eol);
    }
    if(prodID) {
        wcscat(ret, TEXT("PRODID:"));
        wcscat(ret, prodID->getValue());
        wcscat(ret, eol);
    }
    if(calScale) {
        wcscat(ret, TEXT("CALSCALE:"));
        wcscat(ret, calScale->getValue());
        wcscat(ret, eol);
    }
    if(method) {
        wcscat(ret, TEXT("METHOD:"));
        wcscat(ret, method->getValue());
        wcscat(ret, eol);
    }
    if(events)
        for(int i=0; i < events->size(); i++) {
            Event* ev = (Event*)events->get(i);
            wcscat(ret, ev->toString());
        }
    if(todos)
        for(int i=0; i < todos->size(); i++) {
            ToDo* task = (ToDo*)todos->get(i);
            wcscat(ret, task->toString());
        }
    wcscat(ret, TEXT("END:VCALENDAR\r\n"));

    return ret;
}

ArrayElement* Calendar::clone() {
    Calendar* ret = new Calendar();
    if(prodID)
        ret->setProdID(*prodID);
    if(version)
        ret->setVersion(*version);
    if(calScale)
        ret->setCalScale(*calScale);
    if(method)
        ret->setMethod(*method);
    if(xTags)
        ret->setXTags(*xTags);
    if(events)
        ret->setEvents(*events);
    if(todos)
        ret->setToDos(*todos);

    return (ArrayElement*)ret;
}

iCalProperty* Calendar::getiCalPropertyFromVProperty(VProperty* vp) {
    if (vp) {
        iCalProperty *prop = new iCalProperty(vp->getValue());
        if(vp->getParameterValue(TEXT("ALTREP")))
            prop->setAltre(vp->getParameterValue(TEXT("ALTREP")));
        if(vp->getParameterValue(TEXT("CN")))
            prop->setCn(vp->getParameterValue(TEXT("CN")));
        if(vp->getParameterValue(TEXT("CUTYPE")))
            prop->setAltre(vp->getParameterValue(TEXT("CUTYPE")));
        if(vp->getParameterValue(TEXT("DELEGATED-FROM")))
            prop->setDelegatedFrom(vp->getParameterValue(TEXT("DELEGATED-FROM")));
        if(vp->getParameterValue(TEXT("DELEGATED-TO")))
            prop->setDelegatedTo(vp->getParameterValue(TEXT("DELEGATED-TO")));
        if(vp->getParameterValue(TEXT("DIR")))
            prop->setDir(vp->getParameterValue(TEXT("DIR")));
        if(vp->getParameterValue(TEXT("ENCODING")))
            prop->setEncoding(vp->getParameterValue(TEXT("ENCODING")));
        if(vp->getParameterValue(TEXT("FMTTYPE")))
            prop->setFormatType(vp->getParameterValue(TEXT("FMTTYPE")));
        if(vp->getParameterValue(TEXT("FBTYPE")))
            prop->setFbType(vp->getParameterValue(TEXT("FBTYPE")));
        if(vp->getParameterValue(TEXT("LANGUAGE")))
            prop->setLanguage(vp->getParameterValue(TEXT("LANGUAGE")));
        if(vp->getParameterValue(TEXT("MEMBER")))
            prop->setMember(vp->getParameterValue(TEXT("MEMBER")));
        if(vp->getParameterValue(TEXT("PARTSTAT")))
            prop->setPartStat(vp->getParameterValue(TEXT("PARTSTAT")));
        if(vp->getParameterValue(TEXT("RANGE")))
            prop->setRange(vp->getParameterValue(TEXT("RANGE")));
        if(vp->getParameterValue(TEXT("RELATED")))
            prop->setTrigRel(vp->getParameterValue(TEXT("RELATED")));
        if(vp->getParameterValue(TEXT("RELTYPE")))
            prop->setRelated(vp->getParameterValue(TEXT("RELTYPE")));
        if(vp->getParameterValue(TEXT("ROLE")))
            prop->setRole(vp->getParameterValue(TEXT("ROLE")));
        if(vp->getParameterValue(TEXT("RSVP")))
            prop->setRsvp(vp->getParameterValue(TEXT("RSVP")));
        if(vp->getParameterValue(TEXT("SENT-BY")))
            prop->setSentBy(vp->getParameterValue(TEXT("SENT-BY")));
        if(vp->getParameterValue(TEXT("TZID")))
            prop->setTzID(vp->getParameterValue(TEXT("TZID")));
        if(vp->getParameterValue(TEXT("VALUE")))
            prop->setValueType(vp->getParameterValue(TEXT("VALUE")));

        ArrayList* xParamList = NULL;
        WKeyValuePair* xTagParam = NULL;
        WCHAR* xParamName = NULL;
        for(int i = 0; i < vp->parameterCount(); i++) {
            if(wcsstr(vp->getParameter(i),TEXT("X-")) == vp->getParameter(i)) {
                xParamName = new WCHAR[wcslen(vp->getParameter(i)) + 1];
                wcscpy(xParamName, vp->getParameter(i));

                xTagParam = new WKeyValuePair();
                xTagParam->setKey(xParamName);
                if(vp->getParameterValue(xParamName))
                    xTagParam->setValue(vp->getParameterValue(xParamName));
                if(!xParamList)
                    xParamList = new ArrayList();
                xParamList->add((ArrayElement&) *xTagParam);
                delete [] xParamName; xParamName = NULL;
                delete xTagParam; xTagParam = NULL;
            }
        }
        if(xParamList)
            prop->setXParam(*xParamList);
        delete xParamList; xParamList = NULL;

        return prop;
    }
    else
        return NULL;

}
VProperty* Calendar::getVPropertyFromiCalProperty(WCHAR* name, iCalProperty* prop) {
    if(name && prop) {
        VProperty *vprop = new VProperty(name, prop->getValue());

        if(prop->getAltre())
            vprop->addParameter(TEXT("ALTREP"), prop->getAltre());
        if(prop->getCn())
            vprop->addParameter(TEXT("CN"), prop->getCn());
        if(prop->getCutype())
            vprop->addParameter(TEXT("CUTYPE"), prop->getCutype());
        if(prop->getDelegatedFrom())
            vprop->addParameter(TEXT("DELEGATED-FROM"), prop->getDelegatedFrom());
        if(prop->getDelegatedTo())
            vprop->addParameter(TEXT("DELEGATED-TO"), prop->getDelegatedTo());
        if(prop->getDir())
            vprop->addParameter(TEXT("DIR"), prop->getDir());
        if(prop->getEncoding())
            vprop->addParameter(TEXT("ENCODING"), prop->getEncoding());
        if(prop->getFormatType())
            vprop->addParameter(TEXT("FMTTYPE"), prop->getFormatType());
        if(prop->getFbType())
            vprop->addParameter(TEXT("FBTYPE"), prop->getFbType());
        if(prop->getLanguage())
            vprop->addParameter(TEXT("LANGUAGE"), prop->getLanguage());
        if(prop->getMember())
            vprop->addParameter(TEXT("MEMBER"), prop->getMember());
        if(prop->getPartStat())
            vprop->addParameter(TEXT("PARTSTAT"), prop->getPartStat());
        if(prop->getRange())
            vprop->addParameter(TEXT("RANGE"), prop->getRange());
        if(prop->getTrigRel())
            vprop->addParameter(TEXT("RELATED"), prop->getTrigRel());
        if(prop->getRelated())
            vprop->addParameter(TEXT("RELTYPE"), prop->getRelated());
        if(prop->getRole())
            vprop->addParameter(TEXT("ROLE"), prop->getRole());
        if(prop->getRsvp())
            vprop->addParameter(TEXT("RSVP"), prop->getRsvp());
        if(prop->getSentBy())
            vprop->addParameter(TEXT("SENT-BY"), prop->getSentBy());
        if(prop->getTzID())
            vprop->addParameter(TEXT("TZID"), prop->getTzID());
        if(prop->getValueType())
            vprop->addParameter(TEXT("VALUE"), prop->getValueType());
        if(prop->getXParam()) {
            ArrayList* xParamList = new ArrayList();
            xParamList = prop->getXParam();
            for(int i = 0; i<xParamList->size(); i++) {
                WKeyValuePair* xParam = (WKeyValuePair*)xParamList->get(i);
                if(xParam->getKey())
                    if(xParam->getValue())
                        vprop->addParameter(xParam->getKey(), xParam->getValue());
                    else
                        vprop->addParameter(xParam->getKey(), NULL);
            }
            delete xParamList; xParamList = NULL;
        }

        return vprop;
    }
    else
        return NULL;
}
void Calendar::addEvent(Event* ev) {
    if(ev) {
        if(!events)
            events = new ArrayList();
        events->add((ArrayElement&)*ev);
    }
}
void Calendar::addToDo(ToDo* task) {
    if(task) {
        if(!todos)
            todos = new ArrayList();
        todos->add((ArrayElement&)*task);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -