本文整理汇总了C++中Contact类的典型用法代码示例。如果您正苦于以下问题:C++ Contact类的具体用法?C++ Contact怎么用?C++ Contact使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Contact类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: switch
void *SearchDialog::processEvent(Event *e)
{
switch (e->type()){
case EventClientsChanged:
case EventClientChanged:
fillClients();
break;
case EventCommandExec:{
CommandDef *cmd = (CommandDef*)(e->param());
if (cmd->menu_id == MenuSearchGroups){
Group *grp = getContacts()->group(cmd->id - CmdContactGroup);
if (grp){
Contact *contact = NULL;
if ((QWidget*)(cmd->param) == m_search->btnSearch){
if (m_current){
connect(this, SIGNAL(createContact(unsigned,Contact*&)), m_current, SLOT(createContact(unsigned,Contact*&)));
emit createContact(CONTACT_TEMP, contact);
disconnect(this, SIGNAL(createContact(unsigned,Contact*&)), m_current, SLOT(createContact(unsigned,Contact*&)));
}
}else{
contact = createContact(CONTACT_TEMP);
}
if (contact){
if ((contact->getFlags() & CONTACT_TEMP) == 0){
QString err = i18n("%1 already in contact list") .arg(contact->getName());
if ((QWidget*)(cmd->param) == m_search->btnAdd){
BalloonMsg::message(err, m_search->btnAdd);
}else if ((QWidget*)(cmd->param) == m_search->btnSearch){
BalloonMsg::message(err, m_search->btnSearch);
}else{
QRect rc = m_result->itemRect((QListViewItem*)(e->param()));
QPoint p = m_result->viewport()->mapToGlobal(QPoint(rc.left(), rc.top()));
rc = QRect(p.x(), p.y(), rc.width(), rc.height());
BalloonMsg::message(err, m_result, false, 150, &rc);
}
return e->param();
}
contact->setFlags(contact->getFlags() & ~CONTACT_TEMP);
contact->setGroup(grp->id());
Event e(EventContactChanged, contact);
e.process();
}
}
return e->param();
}
if (cmd->id == CmdSearchInfo){
Contact *contact = createContact(CONTACT_TEMP);
if (contact == NULL)
return e->param();
Command cmd;
cmd->id = CmdInfo;
cmd->menu_id = MenuContact;
cmd->param = (void*)(contact->id());
CorePlugin::m_plugin->showInfo(cmd);
return e->param();
}
if (cmd->id == CmdSearchMsg){
Contact *contact = createContact(CONTACT_TEMP);
if (contact == NULL)
return e->param();
Message *m = new Message(MessageGeneric);
m->setContact(contact->id());
Event e(EventOpenMessage, &m);
e.process();
delete m;
}
break;
}
示例2: query
bool NameServiceOnTriples::cmdQuery(NameTripleState& act, bool nested) {
ConstString port = act.cmd.get(1).asString();
ParseName parser;
parser.apply(port.c_str());
port = parser.getPortName();
/*
// port names may be prefixed - sort that out
string base = port.c_str();
string pat = "";
if (base.find("/net=") == 0 || base.find("/NET=") == 0) {
int patStart = 5;
int patEnd = base.find('/',patStart);
if (patEnd>=patStart) {
pat = base.substr(patStart,patEnd-patStart);
base = base.substr(patEnd);
}
port = base.c_str();
}
*/
if (act.reply.size()==0 && !act.bottleMode) {
act.reply.addString("old");
}
Bottle& q=(act.bottleMode&&!act.nestedMode)?
act.reply :
act.reply.addList();
Contact c = query(port.c_str(),act,parser.getNetworkChoice(),nested);
string host = c.getHost().c_str();
string carrier = c.getCarrier().c_str();
int sock = c.getPort();
if (c.isValid()) {
if (!act.bottleMode) {
q.addString("registration");
q.addString("name");
q.addString(port.c_str());
q.addString("ip");
q.addString(host.c_str());
q.addString("port");
q.addInt(sock);
q.addString("type");
q.addString(carrier.c_str());
} else {
Bottle bname;
bname.addString("name");
bname.addString(port.c_str());
Bottle bip;
bip.addString("ip");
bip.addString(host.c_str());
Bottle bnum;
bnum.addString("port_number");
bnum.addInt(sock);
Bottle bcarrier;
bcarrier.addString("carrier");
bcarrier.addString(carrier.c_str());
q.addString("port");
q.addList() = bname;
q.addList() = bip;
q.addList() = bnum;
q.addList() = bcarrier;
}
} else {
if (act.bottleMode) {
Bottle bstate;
bstate.addString("error");
bstate.addInt(-2);
bstate.addString("port not known");
q.addString("port");
q.addList() = bstate;
}
}
return true;
}
示例3: printf
Contact NameServiceOnTriples::query(const yarp::os::ConstString& portName,
NameTripleState& act,
const yarp::os::ConstString& prefix,
bool nested) {
if (!nested) lock();
Triple t;
t.setNameValue("port",portName.c_str());
int result = act.mem.find(t,NULL);
TripleContext context;
context.setRid(result);
if (result!=-1) {
string host = "";
if (string(prefix)!="") {
printf("LOOKING AT IPS FOR %s\n", prefix.c_str());
t.setNameValue("ips","*");
list<Triple> lst = act.mem.query(t,&context);
for (list<Triple>::iterator it=lst.begin();it!=lst.end();it++) {
printf("LOOKING AT IPS %s\n", it->value.c_str());
if (it->value.find(prefix)==0) {
host = it->value;
break;
}
}
}
if (host=="") {
t.setNameValue("host","*");
list<Triple> lst = act.mem.query(t,&context);
if (lst.size()>0) {
host = lst.begin()->value.c_str();
}
}
if (host=="") {
host = "localhost";
}
t.setNameValue("socket","*");
list<Triple> lst = act.mem.query(t,&context);
int sock = 10000;
if (lst.size()>0) {
sock = atoi(lst.begin()->value.c_str());
}
t.setNameValue("carrier","*");
string carrier = "tcp";
lst = act.mem.query(t,&context);
if (lst.size()>0) {
carrier = lst.begin()->value.c_str();
}
t.setNameValue("type","*");
string typ = "*";
lst = act.mem.query(t,&context);
if (lst.size()>0) {
typ = lst.begin()->value.c_str();
}
if (!nested) unlock();
Contact result = Contact::byName(portName).addSocket(carrier.c_str(),
host.c_str(),
sock);
if (typ!="" && typ!="*") {
NestedContact nc;
nc.fromString(result.getName());
nc.setTypeName(typ);
result.setNested(nc);
}
return result;
}
if (!nested) unlock();
if (delegate && !nested) {
return delegate->queryName(portName);
}
return Contact::invalid();
}
示例4: UserTblItem
void *ICQSearchResult::processEvent(Event *e)
{
if ((e->type() > EventUser) && m_id && (m_id != SEARCH_FAIL)){
ICQPlugin *plugin = static_cast<ICQPlugin*>(m_client->protocol()->plugin());
if (e->type() == plugin->EventSearch){
SearchResult *result = (SearchResult*)(e->param());
if ((result->id == m_id) && (result->client == m_client)){
new UserTblItem(tblUser, m_client, &result->data);
m_nFound++;
setStatus();
}
}
if (e->type() == plugin->EventSearchDone){
SearchResult *result = (SearchResult*)(e->param());
if ((result->id == m_id) && (result->client == m_client))
setRequestId(0);
}
}
if (e->type() == EventCommandExec){
CommandDef *cmd = (CommandDef*)(e->param());
if (cmd->menu_id == static_cast<ICQPlugin*>(m_client->protocol()->plugin())->MenuSearchResult){
Contact *contact;
if (cmd->id == static_cast<ICQPlugin*>(m_client->protocol()->plugin())->CmdSendMessage){
contact = createContact(CONTACT_TEMP);
if (!contact) return NULL;
Message msg(MessageGeneric);
msg.setContact(contact->id());
Event e(EventOpenMessage, &msg);
e.process();
}
if (cmd->id == CmdInfo){
contact = createContact(CONTACT_TEMP);
if (!contact) return NULL;
m_client->addFullInfoRequest(atol(tblUser->currentItem()->text(0).latin1()), true);
Command cmd;
cmd->id = CmdInfo;
cmd->menu_id = MenuContact;
cmd->param = (void*)contact->id();
Event e(EventCommandExec, cmd);
e.process();
}
return e->param();
}
if (cmd->menu_id == static_cast<ICQPlugin*>(m_client->protocol()->plugin())->MenuGroups){
Contact *contact = createContact(0);
if (!contact) return NULL;
contact->setGroup(cmd->id - 1);
Event eContact(EventContactChanged, contact);
eContact.process();
return e->param();
}
}
if (e->type() == EventCheckState){
CommandDef *cmd = (CommandDef*)(e->param());
if ((cmd->menu_id == static_cast<ICQPlugin*>(m_client->protocol()->plugin())->MenuGroups) &&
(cmd->id == static_cast<ICQPlugin*>(m_client->protocol()->plugin())->CmdGroups)){
unsigned n = 1;
ContactList::GroupIterator it;
while (++it)
n++;
CommandDef *cmds = new CommandDef[n];
memset(cmds, 0, sizeof(CommandDef) * n);
n = 0;
it.reset();
Group *grp;
while ((grp = ++it) != NULL){
cmds[n].id = grp->id() + 1;
cmds[n].text = "_";
QString name = grp->getName();
if (grp->id() == 0)
name = i18n("Not in list");
cmds[n].text_wrk = strdup(name.utf8());
n++;
}
cmd->param = cmds;
cmd->flags |= COMMAND_RECURSIVE;
return e->param();
}
}
return NULL;
}
示例5: getContacts
bool ForwardPlugin::processEvent(Event *e)
{
if (e->type() == eEventMessageReceived){
EventMessage *em = static_cast<EventMessage*>(e);
Message *msg = em->msg();
if (msg->type() == MessageStatus)
return false;
QString text = msg->getPlainText();
if (text.isEmpty())
return false;
if (msg->type() == MessageSMS){
SMSMessage *sms = static_cast<SMSMessage*>(msg);
QString phone = sms->getPhone();
bool bMyPhone;
SIM::PropertyHubPtr data = getContacts()->getUserData("forward");
bMyPhone = ContactList::cmpPhone(phone, data->value("Phone").toString());
if (!bMyPhone){
Group *grp;
ContactList::GroupIterator it;
while ((grp = ++it) != NULL){
data = grp->getUserData("forward", false);
if (data && !data->value("Phone").toString().isEmpty()){
bMyPhone = ContactList::cmpPhone(phone, data->value("Phone").toString());
break;
}
}
}
if (!bMyPhone){
Contact *contact;
ContactList::ContactIterator it;
while ((contact = ++it) != NULL){
data = contact->getUserData("forward", false);
if (data && !data->value("Phone").toString().isEmpty())
{
bMyPhone = ContactList::cmpPhone(phone, data->value("Phone").toString());
break;
}
}
}
if (bMyPhone){
int n = text.indexOf(": ");
if (n > 0){
QString name = text.left(n);
QString msg_text = text.mid(n + 2);
Contact *contact;
ContactList::ContactIterator it;
while ((contact = ++it) != NULL){
if (contact->getName() == name){
Message *msg = new Message(MessageGeneric);
msg->setContact(contact->id());
msg->setText(msg_text);
void *data;
ClientDataIterator it(contact->clientData);
while ((data = ++it) != NULL){
if (it.client()->send(msg, data))
break;
}
if (data == NULL)
delete msg;
return true;
}
}
}
}
}
Contact *contact = getContacts()->contact(msg->contact());
if (contact == NULL)
return false;
SIM::PropertyHubPtr data = contact->getUserData("forward");
if (!data || data->value("Key").toString().isEmpty())
return false;
CorePlugin *core = GET_CorePlugin();
unsigned status = core->getManualStatus();
if ((status == STATUS_AWAY) || (status == STATUS_NA)){
text = contact->getName() + ": " + text;
unsigned flags = MESSAGE_NOHISTORY;
if (data->value("Send1st").toBool())
flags |= MESSAGE_1ST_PART;
if (data->value("Translit").toBool())
flags |= MESSAGE_TRANSLIT;
SMSMessage *m = new SMSMessage;
m->setPhone(data->value("Phone").toString());
m->setText(text);
m->setFlags(flags);
unsigned i;
for (i = 0; i < getContacts()->nClients(); i++){
Client *client = getContacts()->getClient(i);
if (client->send(m, NULL))
break;
}
if (i >= getContacts()->nClients())
delete m;
}
}
return false;
}
示例6: while
void ContactManager::AddPair(void* proxyUserDataA, void* proxyUserDataB)
{
FixtureProxy* proxyA = (FixtureProxy*)proxyUserDataA;
FixtureProxy* proxyB = (FixtureProxy*)proxyUserDataB;
Fixture* fixtureA = proxyA->fixture;
Fixture* fixtureB = proxyB->fixture;
s32 indexA = proxyA->childIndex;
s32 indexB = proxyB->childIndex;
Body* bodyA = fixtureA->GetBody();
Body* bodyB = fixtureB->GetBody();
// Are the fixtures on the same body?
if (bodyA == bodyB)
{
return;
}
// TODO_ERIN use a hash table to remove a potential bottleneck when both
// bodies have a lot of contacts.
// Does a contact already exist?
ContactEdge* edge = bodyB->GetContactList();
while (edge)
{
if (edge->other == bodyA)
{
Fixture* fA = edge->contact->GetFixtureA();
Fixture* fB = edge->contact->GetFixtureB();
s32 iA = edge->contact->GetChildIndexA();
s32 iB = edge->contact->GetChildIndexB();
if (fA == fixtureA && fB == fixtureB && iA == indexA && iB == indexB)
{
// A contact already exists.
return;
}
if (fA == fixtureB && fB == fixtureA && iA == indexB && iB == indexA)
{
// A contact already exists.
return;
}
}
edge = edge->next;
}
// Does a joint override collision? Is at least one body dynamic?
if (bodyB->ShouldCollide(bodyA) == false)
{
return;
}
// Check user filtering.
if (m_contactFilter && m_contactFilter->ShouldCollide(fixtureA, fixtureB) == false)
{
return;
}
// Call the factory.
Contact* c = Contact::Create(fixtureA, indexA, fixtureB, indexB, m_allocator);
if (c == NULL)
{
return;
}
// Contact creation may swap fixtures.
fixtureA = c->GetFixtureA();
fixtureB = c->GetFixtureB();
indexA = c->GetChildIndexA();
indexB = c->GetChildIndexB();
bodyA = fixtureA->GetBody();
bodyB = fixtureB->GetBody();
// Insert into the world.
c->m_prev = NULL;
c->m_next = m_contactList;
if (m_contactList != NULL)
{
m_contactList->m_prev = c;
}
m_contactList = c;
// Connect to island graph.
// Connect to body A
c->m_nodeA.contact = c;
c->m_nodeA.other = bodyB;
c->m_nodeA.prev = NULL;
c->m_nodeA.next = bodyA->m_contactList;
if (bodyA->m_contactList != NULL)
{
bodyA->m_contactList->prev = &c->m_nodeA;
}
bodyA->m_contactList = &c->m_nodeA;
// Connect to body B
//.........这里部分代码省略.........
示例7: vertexPos
unsigned CollisionDetector::boxAndHalfSpace(
const CollisionBox &box,
const CollisionPlane &plane,
CollisionData *data
)
{
// Make sure we have contacts
if (data->contactsLeft <= 0) return 0;
// Check for intersection
if (!IntersectionTests::boxAndHalfSpace(box, plane))
{
return 0;
}
// We have an intersection, so find the intersection points. We can make
// do with only checking vertices. If the box is resting on a plane
// or on an edge, it will be reported as four or two contact points.
// Go through each combination of + and - for each half-size
static real mults[8][3] = {{1,1,1},{-1,1,1},{1,-1,1},{-1,-1,1},
{1,1,-1},{-1,1,-1},{1,-1,-1},{-1,-1,-1}};
Contact* contact = data->contacts;
unsigned contactsUsed = 0;
for (unsigned i = 0; i < 8; i++) {
// Calculate the position of each vertex
Vector3 vertexPos(mults[i][0], mults[i][1], mults[i][2]);
vertexPos.componentProductUpdate(box.halfSize);
vertexPos = box.transform.transform(vertexPos);
// Calculate the distance from the plane
real vertexDistance = vertexPos * plane.direction;
// Compare this to the plane's distance
if (vertexDistance <= plane.offset)
{
// Create the contact data.
// The contact point is halfway between the vertex and the
// plane - we multiply the direction by half the separation
// distance and add the vertex location.
contact->contactPoint = plane.direction;
contact->contactPoint *= (vertexDistance-plane.offset);
contact->contactPoint += vertexPos;
contact->contactNormal = plane.direction;
contact->penetration = plane.offset - vertexDistance;
// Write the appropriate data
contact->setBodyData(box.body, NULL,
data->friction, data->restitution);
// Move onto the next contact
contact++;
contactsUsed++;
if (contactsUsed == (unsigned)data->contactsLeft) return contactsUsed;
}
}
data->addContacts(contactsUsed);
return contactsUsed;
}
示例8: getContacts
QString MsgViewBase::messageText(Message *msg, bool bUnread)
{
QString options;
QString info;
QString status;
const char *icon = "message";
const CommandDef *def = CorePlugin::m_plugin->messageTypes.find(msg->type());
if (def)
icon = def->icon;
bool bDirection = false;
if (msg->type() == MessageStatus){
icon = "empty";
StatusMessage *sm = static_cast<StatusMessage*>(msg);
Client *client = NULL;
string clientStr;
if (msg->client())
clientStr = msg->client();
int n = clientStr.find_last_of('.');
if (n >= 0){
clientStr = clientStr.substr(0, n);
}else{
clientStr = "";
}
if (!clientStr.empty()){
for (unsigned i = 0; i < getContacts()->nClients(); i++){
string n = getContacts()->getClient(i)->name();
if (n.length() < clientStr.length())
continue;
n = n.substr(0, clientStr.length());
if (clientStr == n){
client = getContacts()->getClient(i);
break;
}
}
}
if ((client == NULL) && getContacts()->nClients())
client = getContacts()->getClient(0);
if (client){
for (def = client->protocol()->statusList(); def->text; def++){
if (def->id == sm->getStatus()){
icon = def->icon;
status = i18n(def->text);
break;
}
}
}
options += " direction=\"2\"";
bDirection = true;
}else{
MessageDef *m_def = (MessageDef*)(def->param);
if (m_def->flags & MESSAGE_INFO){
options += " direction=\"2\"";
bDirection = true;
}
}
info = QString("<icon>%1</icon>") .arg(icon);
QString contactName;
if (msg->getFlags() & MESSAGE_RECEIVED){
if (!bDirection)
options += " direction=\"1\"";
Contact *contact = getContacts()->contact(msg->contact());
if (contact){
contactName = contact->getName();
if (contactName.isEmpty()){
Client *client = NULL;
ClientDataIterator it(contact->clientData);
void *data;
while ((data = ++it) != NULL){
if (it.client()->dataName(data) == msg->client()){
client = it.client();
break;
}
}
}
}
if (!bUnread){
for (list<msg_id>::iterator it = CorePlugin::m_plugin->unread.begin(); it != CorePlugin::m_plugin->unread.end(); ++it){
msg_id &m = (*it);
if ((m.id == msg->id()) &&
(m.contact == msg->contact()) &&
(m.client == msg->client())){
bUnread = true;
break;
}
}
}
if (bUnread)
options += " unread=\"1\"";
}else{
if (!bDirection)
options += " direction=\"0\"";
contactName = getContacts()->owner()->getName();
}
if (contactName.isEmpty())
contactName = "???";
info += QString("<from>%1</from>") .arg(quoteString(contactName));
QString id = QString::number(msg->id());
id += ",";
//.........这里部分代码省略.........
示例9: CHECK_OVERLAP
unsigned CollisionDetector::boxAndBox(
const CollisionBox &one,
const CollisionBox &two,
CollisionData *data
)
{
//if (!IntersectionTests::boxAndBox(one, two)) return 0;
// Find the vector between the two centres
Vector3 toCentre = two.getAxis(3) - one.getAxis(3);
// We start assuming there is no contact
real pen = REAL_MAX;
unsigned best = 0xffffff;
// Now we check each axes, returning if it gives us
// a separating axis, and keeping track of the axis with
// the smallest penetration otherwise.
CHECK_OVERLAP(one.getAxis(0), 0);
CHECK_OVERLAP(one.getAxis(1), 1);
CHECK_OVERLAP(one.getAxis(2), 2);
CHECK_OVERLAP(two.getAxis(0), 3);
CHECK_OVERLAP(two.getAxis(1), 4);
CHECK_OVERLAP(two.getAxis(2), 5);
// Store the best axis-major, in case we run into almost
// parallel edge collisions later
unsigned bestSingleAxis = best;
CHECK_OVERLAP(one.getAxis(0) % two.getAxis(0), 6);
CHECK_OVERLAP(one.getAxis(0) % two.getAxis(1), 7);
CHECK_OVERLAP(one.getAxis(0) % two.getAxis(2), 8);
CHECK_OVERLAP(one.getAxis(1) % two.getAxis(0), 9);
CHECK_OVERLAP(one.getAxis(1) % two.getAxis(1), 10);
CHECK_OVERLAP(one.getAxis(1) % two.getAxis(2), 11);
CHECK_OVERLAP(one.getAxis(2) % two.getAxis(0), 12);
CHECK_OVERLAP(one.getAxis(2) % two.getAxis(1), 13);
CHECK_OVERLAP(one.getAxis(2) % two.getAxis(2), 14);
// Make sure we've got a result.
assert(best != 0xffffff);
// We now know there's a collision, and we know which
// of the axes gave the smallest penetration. We now
// can deal with it in different ways depending on
// the case.
if (best < 3)
{
// We've got a vertex of box two on a face of box one.
fillPointFaceBoxBox(one, two, toCentre, data, best, pen);
data->addContacts(1);
return 1;
}
else if (best < 6)
{
// We've got a vertex of box one on a face of box two.
// We use the same algorithm as above, but swap around
// one and two (and therefore also the vector between their
// centres).
fillPointFaceBoxBox(two, one, toCentre*-1.0f, data, best-3, pen);
data->addContacts(1);
return 1;
}
else
{
// We've got an edge-edge contact. Find out which axes
best -= 6;
unsigned oneAxisIndex = best / 3;
unsigned twoAxisIndex = best % 3;
Vector3 oneAxis = one.getAxis(oneAxisIndex);
Vector3 twoAxis = two.getAxis(twoAxisIndex);
Vector3 axis = oneAxis % twoAxis;
axis.normalise();
// The axis should point from box one to box two.
if (axis * toCentre > 0) axis = axis * -1.0f;
// We have the axes, but not the edges: each axis has 4 edges parallel
// to it, we need to find which of the 4 for each object. We do
// that by finding the point in the centre of the edge. We know
// its component in the direction of the box's collision axis is zero
// (its a mid-point) and we determine which of the extremes in each
// of the other axes is closest.
Vector3 ptOnOneEdge = one.halfSize;
Vector3 ptOnTwoEdge = two.halfSize;
for (unsigned i = 0; i < 3; i++)
{
if (i == oneAxisIndex) ptOnOneEdge[i] = 0;
else if (one.getAxis(i) * axis > 0) ptOnOneEdge[i] = -ptOnOneEdge[i];
if (i == twoAxisIndex) ptOnTwoEdge[i] = 0;
else if (two.getAxis(i) * axis < 0) ptOnTwoEdge[i] = -ptOnTwoEdge[i];
}
// Move them into world coordinates (they are already oriented
// correctly, since they have been derived from the axes).
ptOnOneEdge = one.transform * ptOnOneEdge;
ptOnTwoEdge = two.transform * ptOnTwoEdge;
//.........这里部分代码省略.........
示例10: eShow
void *FilterPlugin::processEvent(Event *e)
{
if (e->type() == EventContactChanged){
Contact *contact = (Contact*)(e->param());
if (contact->getGroup()){
Command cmd;
cmd->id = CmdIgnore;
cmd->flags = BTN_HIDE;
cmd->param = (void*)(contact->id());
Event eShow(EventCommandShow, cmd);
eShow.process();
}
return NULL;
}
if (e->type() == EventMessageReceived){
Message *msg = (Message*)(e->param());
if (!msg || (msg->type() == MessageStatus))
return NULL;
Contact *contact = getContacts()->contact(msg->contact());
FilterUserData *data = NULL;
// check if we accept only from users on the list
if (getFromList() && ((contact == NULL) || (contact->getFlags() & CONTACT_TEMPORARY))){
delete msg;
delete contact;
return msg;
}
if (!contact)
return NULL;
// check if the user is a ignored user
if (contact->getIgnore()){
delete msg;
return msg;
}
// get filter-data
data = (FilterUserData*)(contact->getUserData(user_data_id));
if (data && data->SpamList.ptr && *data->SpamList.ptr){
if (checkSpam(msg->getPlainText(), QString::fromUtf8(data->SpamList.ptr))){
delete msg;
return msg;
}
}
return NULL;
}
if (e->type() == EventCheckState){
CommandDef *cmd = (CommandDef*)(e->param());
if (cmd->id == CmdIgnore){
cmd->flags &= ~BTN_HIDE;
Contact *contact = getContacts()->contact((unsigned)(cmd->param));
if (contact && contact->getGroup())
cmd->flags |= BTN_HIDE;
return e->param();
}
if (cmd->id == CmdIgnoreText){
cmd->flags &= ~COMMAND_CHECKED;
if (cmd->menu_id == MenuMsgView){
MsgViewBase *edit = (MsgViewBase*)(cmd->param);
if (edit->hasSelectedText())
return e->param();
}else if (cmd->menu_id == MenuTextEdit){
TextEdit *edit = ((MsgEdit*)(cmd->param))->m_edit;
if (edit->hasSelectedText())
return e->param();
}
return NULL;
}
if (cmd->menu_id == MenuContactGroup){
if (cmd->id == CmdIgnoreList){
Contact *contact = getContacts()->contact((unsigned)(cmd->param));
if (contact == NULL)
return NULL;
cmd->flags &= COMMAND_CHECKED;
if (contact->getIgnore())
cmd->flags |= COMMAND_CHECKED;
return e->param();
}
}
}
if (e->type() == EventCommandExec){
CommandDef *cmd = (CommandDef*)(e->param());
if (cmd->id == CmdIgnore){
Contact *contact = getContacts()->contact((unsigned)(cmd->param));
if (contact){
QString text = i18n("Add %1 to ignore list?") .arg(contact->getName());
Command cmd;
cmd->id = CmdIgnore;
cmd->param = (void*)(contact->id());
Event e(EventCommandWidget, cmd);
QWidget *w = (QWidget*)(e.process());
BalloonMsg::ask((void*)(contact->id()), text, w, SLOT(addToIgnore(void*)), NULL, NULL, this);
}
return e->param();
}
示例11: SLOT
void *HistoryWindow::processEvent(Event *e)
{
if (e->type() == EventContactDeleted){
Contact *contact = (Contact*)(e->param());
if (contact->id() == m_id)
QTimer::singleShot(0, this, SLOT(close()));
}
if (e->type() == EventContactChanged){
Contact *contact = (Contact*)(e->param());
if (contact->id() == m_id)
setName();
}
if (e->type() == EventCheckState){
CommandDef *cmd = (CommandDef*)(e->param());
if ((cmd->id == CmdHistoryDirection) && ((unsigned long)(cmd->param) == m_id)){
cmd->flags &= ~COMMAND_CHECKED;
if (m_bDirection)
cmd->flags |= COMMAND_CHECKED;
return e->param();
}
if (((cmd->id == CmdDeleteMessage) || (cmd->id == CmdCutHistory)) &&
(cmd->param == m_view) && m_view->currentMessage()){
cmd->flags &= ~COMMAND_CHECKED;
return e->param();
}
return NULL;
}
if (e->type() == EventCommandExec){
CommandDef *cmd = (CommandDef*)(e->param());
if ((unsigned long)(cmd->param) != m_id)
return NULL;
if (cmd->id == CmdHistoryDirection){
bool bDirection = ((cmd->flags & COMMAND_CHECKED) != 0);
CorePlugin::m_plugin->setHistoryDirection(bDirection);
if (bDirection != m_bDirection){
m_bDirection = bDirection;
m_page = 0;
m_states.clear();
fill();
}
return e->param();
}
if (cmd->id == CmdHistoryNext){
if (m_page + 1 < m_states.size()){
m_page++;
fill();
}
return e->param();
}
if (cmd->id == CmdHistoryPrev){
if (m_page > 0){
m_page--;
fill();
}
return e->param();
}
if (cmd->id == CmdHistorySave){
QString str = QFileDialog::getSaveFileName(QString::null, i18n("Textfile (*.txt)"), this);
if (str && !str.isEmpty()){
bool res = true;
if (QFile::exists(str)){
QMessageBox mb(i18n("Error"), i18n("File already exists. Overwrite?"),
QMessageBox::Warning,
QMessageBox::Yes | QMessageBox::Default,
QMessageBox::No,
QMessageBox::Cancel | QMessageBox::Escape);
mb.setButtonText(QMessageBox::Yes, i18n("&Overwrite"));
mb.setButtonText(QMessageBox::No, i18n("&Append"));
switch (mb.exec()){
case QMessageBox::Yes:
res = History::save(m_id, str, false);
break;
case QMessageBox::No:
res = History::save(m_id, str, true);
break;
case QMessageBox::Cancel:
break;
}
}else
res = History::save(m_id, str);
if (!res)
QMessageBox::critical(this, i18n("Error"), i18n("Save failed"), QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
}
return e->param();
}
if (cmd->id == CmdHistoryFind){
m_filter = "";
if (cmd->flags & COMMAND_CHECKED){
Command cmd;
cmd->id = CmdHistoryFind;
cmd->param = (void*)m_id;
Event eWidget(EventCommandWidget, cmd);
CToolCombo *cmbFind = (CToolCombo*)(eWidget.process());
if (cmbFind){
QString text = cmbFind->lineEdit()->text();
if (!text.isEmpty()){
addHistory(text);
m_filter = text;
}
}
//.........这里部分代码省略.........
示例12: XSL
void HistoryConfig::fillPreview()
{
m_bDirty = false;
int cur = cmbStyle->currentItem();
if ((cur < 0) || (cur >= (int)m_styles.size()))
return;
XSL *xsl = new XSL(m_styles[cur].name);
if (!m_styles[cur].text.isEmpty())
xsl->setXSL(m_styles[cur].text);
Contact *contact = getContacts()->contact(0, true);
contact->setName("Buddy");
contact->setFlags(CONTACT_TEMP);
edtPreview->clear();
edtPreview->setXSL(xsl);
time_t now;
time(&now);
bool saveSmiles = CorePlugin::m_plugin->getUseSmiles();
bool saveOwn = CorePlugin::m_plugin->getOwnColors();
CorePlugin::m_plugin->setUseSmiles(chkSmile->isChecked());
CorePlugin::m_plugin->setOwnColors(chkOwn->isChecked());
Message m1;
m1.setId((unsigned)(-1));
m1.setFlags(MESSAGE_RECEIVED | MESSAGE_LIST);
m1.setText(i18n("Hi! ;)"));
m1.setTime(now - 360);
m1.setContact(contact->id());
edtPreview->addMessage(&m1);
Message m2;
m2.setId((unsigned)(-2));
m2.setText(i18n("Hi!"));
m2.setTime(now - 300);
m2.setContact(contact->id());
edtPreview->addMessage(&m2);
Message m3;
m3.setId((unsigned)(-3));
m3.setText(i18n("<b><font color=\"#FF0000\">C</font><font color=\"#FFFF00\">olored</font></b> message"));
m3.setTime(now - 120);
m3.setFlags(MESSAGE_SECURE | MESSAGE_URGENT | MESSAGE_RICHTEXT);
m3.setBackground(0xC0C0C0);
m3.setForeground(0x008000);
m3.setContact(contact->id());
edtPreview->addMessage(&m3);
Message m4;
m4.setId((unsigned)(-4));
m4.setText(i18n("New message"));
m4.setFlags(MESSAGE_RECEIVED);
m4.setTime(now - 60);
m4.setContact(contact->id());
edtPreview->addMessage(&m4, true);
StatusMessage m5;
m5.setId((unsigned)(-5));
m5.setStatus(STATUS_OFFLINE);
m5.setTime(now);
m5.setContact(contact->id());
if (getContacts()->nClients())
m5.setClient((getContacts()->getClient(0)->name() + ".").c_str());
edtPreview->addMessage(&m5);
delete contact;
CorePlugin::m_plugin->setUseSmiles(saveSmiles);
CorePlugin::m_plugin->setOwnColors(saveOwn);
}
示例13: eContact
void RostersRequest::element_end(const char *el)
{
if (strcmp(el, "group") == 0){
m_data = NULL;
return;
}
if (strcmp(el, "item") == 0){
bool bChanged = false;
JabberListRequest *lr = m_client->findRequest(m_jid.c_str(), false);
Contact *contact;
JabberUserData *data = m_client->findContact(m_jid.c_str(), NULL, m_name.c_str(), false, contact);
if (data == NULL){
if (lr && lr->bDelete){
m_client->findRequest(m_jid.c_str(), true);
}else{
bChanged = true;
data = m_client->findContact(m_jid.c_str(), NULL, m_name.c_str(), true, contact);
if (m_bSubscription){
contact->setTemporary(CONTACT_TEMP);
Event eContact(EventContactChanged, contact);
eContact.process();
m_client->auth_request(m_jid.c_str(), MessageAuthRequest, m_subscription.c_str(), true);
data = m_client->findContact(m_jid.c_str(), NULL, m_name.c_str(), false, contact);
}
}
}
if (data == NULL)
return;
if (data->Subscribe != m_subscribe){
bChanged = true;
data->Subscribe = m_subscribe;
}
data->bChecked = true;
if (lr == NULL){
unsigned grp = 0;
if (!m_grp.empty()){
Group *group;
ContactList::GroupIterator it;
while ((group = ++it) != NULL){
if (m_grp == (const char*)(group->getName().utf8())){
grp = group->id();
break;
}
}
}
if (contact->getGroup() != grp){
if (grp == 0){
void *d = NULL;
ClientDataIterator it_d(contact->clientData);
while ((d = ++it_d) != NULL){
if (d != data)
break;
}
if (d){
grp = contact->getGroup();
Group *group = getContacts()->group(grp);
if (group)
m_client->listRequest(data, contact->getName().utf8(), group->getName().utf8(), false);
}
}
contact->setGroup(grp);
bChanged = true;
}
}
if (bChanged){
Event e(EventContactChanged, contact);
e.process();
}
}
}
示例14: parse
QString Parser::parse(const QString &s, BuddyOrContact buddyOrContact, const QObject * const object, bool escape)
{
Buddy buddy = buddyOrContact.buddy();
Contact contact = buddyOrContact.contact();
kdebugmf(KDEBUG_DUMP, "%s escape=%i\n", qPrintable(s), escape);
int index = 0, i, len = s.length();
QList<ParserToken> parseStack;
static QHash<QChar, bool> searchChars;
if (!searchChars.value('%', false))
{
searchChars['%'] = true;
searchChars['['] = true;
searchChars['{'] = true;
searchChars['\\'] = true;
searchChars['$'] = true;
searchChars['@'] = true;
searchChars['#'] = true;
searchChars['}'] = true;
searchChars[']'] = true;
}
bool allowExec = config_file.readBoolEntry("General", "AllowExecutingFromParser", false);
searchChars['`'] = allowExec;
searchChars['\''] = allowExec;
while (index < len)
{
ParserToken pe1, pe;
for(i = index; i < len; ++i)
if (searchChars.value(s.at(i), false))
break;
// this is the same, but code above is muuuuch faster
// i=s.find(QRegExp("%|`|\\{|\\[|'|\\}|\\]"), index);
if (i != index)
{
pe1.type = ParserToken::PT_STRING;
pe1.content = s.mid(index, i - index);
parseStack.push_back(pe1);
if (i == len)
break;
}
char c = s.at(i).toAscii();
if (c == '%')
{
++i;
if (i == len)
break;
pe.type = ParserToken::PT_STRING;
switch (s.at(i).toAscii())
{
case 's':
++i;
if (contact)
{
StatusType *type = StatusTypeManager::instance()->statusType(contact.currentStatus().type());
if (type)
pe.content = type->displayName();
}
break; // TODO: 't' removed
case 'q':
++i;
if (contact)
{
StatusContainer *container = contact.contactAccount().statusContainer();
if (container)
pe.content = container->statusIconPath(contact.currentStatus().type());
}
break;
case 'd':
++i;
if (contact)
pe.content = contact.currentStatus().description();
if (escape)
HtmlDocument::escapeText(pe.content);
if (config_file.readBoolEntry("Look", "ShowMultilineDesc"))
{
pe.content.replace('\n', QLatin1String("<br/>"));
pe.content.replace(QRegExp("\\s\\s"), QString(" "));
}
break;
case 'i':
++i;
if (contact)
pe.content = contact.address().toString();
break;
case 'v':
++i;
if (contact)
pe.content = contact.dnsName();
break;
//.........这里部分代码省略.........
示例15: while
void OSDPlugin::processQueue()
{
if (m_timer->isActive())
return;
while (queue.size()){
m_request = queue.front();
queue.erase(queue.begin());
Contact *contact = getContacts()->contact(m_request.contact);
if ((contact == NULL) || contact->getIgnore()){
continue;
}
QString text;
OSDUserData *data = NULL;
data = (OSDUserData*)contact->getUserData(user_data_id);
switch (m_request.type){
case OSD_ALERT:
if (data->EnableAlert.bValue){
unsigned style = 0;
const char *statusIcon = NULL;
if (contact->contactInfo(style, statusIcon) >= STATUS_ONLINE)
text = g_i18n("%1 is online", contact) .arg(contact->getName());
}
break;
case OSD_TYPING:
if (data->EnableTyping.bValue){
unsigned style = 0;
string wrkIcons;
const char *statusIcon = NULL;
contact->contactInfo(style, statusIcon, &wrkIcons);
bool bTyping = false;
while (!wrkIcons.empty()){
if (getToken(wrkIcons, ',') == "typing"){
bTyping = true;
break;
}
}
if (bTyping)
text = g_i18n("%1 is typing", contact) .arg(contact->getName());
}
break;
case OSD_MESSAGE:
if (data->EnableMessage.bValue && core){
list<msg_id>::iterator it;
TYPE_MAP types;
TYPE_MAP::iterator itc;
QString msg_text;
for (it = core->unread.begin(); it != core->unread.end(); ++it){
if ((*it).contact != m_request.contact)
continue;
unsigned type = (*it).type;
itc = types.find(type);
if (itc == types.end()){
types.insert(TYPE_MAP::value_type(type, 1));
}else{
(*itc).second++;
}
if (!data->EnableMessageShowContent.bValue)
continue;
MessageID id;
id.id = (*it).id;
id.contact = (*it).contact;
id.client = (*it).client.c_str();
Event e(EventLoadMessage, &id);
Message *msg = (Message*)(e.process());
if (msg == NULL)
continue;
QString msgText = msg->getPlainText().stripWhiteSpace();
if (msgText.isEmpty())
continue;
if (!msg_text.isEmpty())
msg_text += "\n";
msg_text += msgText;
}
if (types.empty())
break;
for (itc = types.begin(); itc != types.end(); ++itc){
CommandDef *def = core->messageTypes.find((*itc).first);
if (def == NULL)
continue;
MessageDef *mdef = (MessageDef*)(def->param);
QString msg = i18n(mdef->singular, mdef->plural, (*itc).second);
if ((*itc).second == 1){
int pos = msg.find("1 ");
if (pos > 0){
msg = msg.left(pos);
}else if (pos == 0){
msg = msg.mid(2);
}
msg = msg.left(1).upper() + msg.mid(1);
}
if (!text.isEmpty())
text += ", ";
text += msg;
}
text = i18n("%1 from %2") .arg(text) .arg(contact->getName());
if (msg_text.isEmpty())
break;
text += ":\n";
text += msg_text;
}
//.........这里部分代码省略.........