libkdegames/kgame
kgameproperty.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "kgameproperty.h"
00022 #include "kgamepropertyhandler.h"
00023 #include "kgamemessage.h"
00024 #include "kplayer.h"
00025 #include "kgame.h"
00026
00027 #define KPLAYERHANDLER_LOAD_COOKIE 6239
00028
00029 KGamePropertyBase::KGamePropertyBase(int id, KGame* parent)
00030 {
00031 init();
00032 registerData(id, parent);
00033 }
00034
00035 KGamePropertyBase::KGamePropertyBase(int id, KPlayer* parent)
00036 {
00037 init();
00038 registerData(id, parent);
00039 }
00040
00041 KGamePropertyBase::KGamePropertyBase(int id, KGamePropertyHandler* owner)
00042 {
00043 init();
00044 registerData(id, owner);
00045 }
00046
00047 KGamePropertyBase::KGamePropertyBase()
00048 {
00049 init();
00050 }
00051
00052 KGamePropertyBase::~KGamePropertyBase()
00053 {
00054 unregisterData();
00055 }
00056
00057 void KGamePropertyBase::init()
00058 {
00059 mOwner = 0;
00060 setDirty(false);
00061
00062
00063
00064
00065 setEmittingSignal(true);
00066
00067 setOptimized(false);
00068
00069
00070 mFlags.bits.locked = false ;
00071
00072
00073 setPolicy(PolicyLocal);
00074 }
00075
00076 int KGamePropertyBase::registerData(int id, KGame* owner, const QString& name)
00077 { return registerData(id, owner->dataHandler(), name); }
00078
00079 int KGamePropertyBase::registerData(int id, KPlayer* owner, const QString& name)
00080 { return registerData(id, owner->dataHandler(), name); }
00081
00082 int KGamePropertyBase::registerData( KGamePropertyHandler* owner,PropertyPolicy p, const QString& name)
00083 { return registerData(-1, owner,p, name); }
00084
00085 int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner, const QString& name)
00086 { return registerData(id, owner,PolicyUndefined, name); }
00087
00088 int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner,PropertyPolicy p, const QString& name)
00089 {
00090
00091 if (!owner) {
00092 kWarning(11001) << "Resetting owner=0. Sure you want to do this?";
00093 mOwner=0;
00094 return -1;
00095 }
00096 if (!mOwner) {
00097 if (id==-1) {
00098 id=owner->uniquePropertyId();
00099 }
00100 mId = id;
00101 mOwner = owner;
00102 mOwner->addProperty(this, name);
00103 if (p!=PolicyUndefined) {
00104 setPolicy(p);
00105 } else {
00106 setPolicy(mOwner->policy());
00107 }
00108 }
00109 return mId;
00110 }
00111
00112 void KGamePropertyBase::unregisterData()
00113 {
00114 if (!mOwner) {
00115 return;
00116 }
00117 mOwner->removeProperty(this);
00118 mOwner = 0;
00119 }
00120
00121 bool KGamePropertyBase::sendProperty()
00122 {
00123 QByteArray b;
00124 QDataStream s(&b, QIODevice::WriteOnly);
00125 KGameMessage::createPropertyHeader(s, id());
00126 save(s);
00127 if (mOwner) {
00128 return mOwner->sendProperty(s);
00129 } else {
00130 kError(11001) << "Cannot send because there is no receiver defined";
00131 return false;
00132 }
00133 }
00134
00135 bool KGamePropertyBase::sendProperty(const QByteArray& data)
00136 {
00137 QByteArray b;
00138 QDataStream s(&b, QIODevice::WriteOnly);
00139 KGameMessage::createPropertyHeader(s, id());
00140 s.writeRawData(data.data(), data.size());
00141 if (mOwner) {
00142 return mOwner->sendProperty(s);
00143 } else {
00144 kError(11001) << ": Cannot send because there is no receiver defined";
00145 return false;
00146 }
00147 }
00148
00149 bool KGamePropertyBase::lock()
00150 {
00151 if (isLocked()) {
00152 return false;
00153 }
00154 setLock(true);
00155 return true;
00156 }
00157
00158 bool KGamePropertyBase::unlock(bool force)
00159 {
00160 if (isLocked() && !force) {
00161 return false;
00162 }
00163 setLock(false);
00164 return true;
00165 }
00166
00167 void KGamePropertyBase::setLock(bool l)
00168 {
00169 QByteArray b;
00170 QDataStream s(&b, QIODevice::WriteOnly);
00171 KGameMessage::createPropertyCommand(s, IdCommand, id(), CmdLock);
00172
00173 s << (qint8)l;
00174 if (mOwner) {
00175 mOwner->sendProperty(s);
00176 } else {
00177 kError(11001) << ": Cannot send because there is no receiver defined";
00178 return ;
00179 }
00180 }
00181
00182 void KGamePropertyBase::emitSignal()
00183 {
00184
00185 if (mOwner ) {
00186 mOwner->emitSignal(this);
00187 } else {
00188 kError(11001) << ":id="<<id()<<" Cannot emitSignal because there is no handler set";
00189 }
00190 }
00191
00192 void KGamePropertyBase::command(QDataStream& s, int cmd, bool isSender)
00193 {
00194 switch (cmd) {
00195 case CmdLock:
00196 {
00197 if (!isSender) {
00198 qint8 locked;
00199 s >> locked;
00200 mFlags.bits.locked = (bool)locked ;
00201 break;
00202 }
00203 }
00204 default:
00205 break;
00206 }
00207 }
00208