• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdegames API Reference
  • KDE Home
  • Contact Us
 

libkdegames/libkdegamesprivate/kgame

  • sources
  • kde-4.14
  • kdegames
  • libkdegames
  • libkdegamesprivate
  • kgame
kgameproperty.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the KDE games library
3  Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
4  Copyright (C) 2001 Martin Heni (kde at heni-online.de)
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Library General Public
8  License version 2 as published by the Free Software Foundation.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Library General Public License for more details.
14 
15  You should have received a copy of the GNU Library General Public License
16  along with this library; see the file COPYING.LIB. If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19 */
20 
21 #include "kgameproperty.h"
22 #include "kgamepropertyhandler.h"
23 #include "kgamemessage.h"
24 #include "kplayer.h"
25 #include "kgame.h"
26 
27 #define KPLAYERHANDLER_LOAD_COOKIE 6239
28 
29 KGamePropertyBase::KGamePropertyBase(int id, KGame* parent)
30 {
31  init();
32  registerData(id, parent);
33 }
34 
35 KGamePropertyBase::KGamePropertyBase(int id, KPlayer* parent)
36 {
37  init();
38  registerData(id, parent);
39 }
40 
41 KGamePropertyBase::KGamePropertyBase(int id, KGamePropertyHandler* owner)
42 {
43  init();
44  registerData(id, owner);
45 }
46 
47 KGamePropertyBase::KGamePropertyBase()
48 {
49  init();
50 }
51 
52 KGamePropertyBase::~KGamePropertyBase()
53 {
54  unregisterData();
55 }
56 
57 void KGamePropertyBase::init()
58 {
59  mOwner = 0;
60  setDirty(false);
61 
62  // this is very useful and used by e.g. KGameDialog so
63  // it is activated by default. Big games may profit by deactivating it to get
64  // a better performance.
65  setEmittingSignal(true);
66 
67  setOptimized(false);
68 
69  //setReadOnly(false);
70  mFlags.bits.locked = false ; // setLocked(false); is NOT possible as it checks whether isLocked() allows to change the status
71 
72  // local is default
73  setPolicy(PolicyLocal);
74 }
75 
76 int KGamePropertyBase::registerData(int id, KGame* owner, const QString& name)
77 { return registerData(id, owner->dataHandler(), name); }
78 
79 int KGamePropertyBase::registerData(int id, KPlayer* owner, const QString& name)
80 { return registerData(id, owner->dataHandler(), name); }
81 
82 int KGamePropertyBase::registerData( KGamePropertyHandler* owner,PropertyPolicy p, const QString& name)
83 { return registerData(-1, owner,p, name); }
84 
85 int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner, const QString& name)
86 { return registerData(id, owner,PolicyUndefined, name); }
87 
88 int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner,PropertyPolicy p, const QString& name)
89 {
90 // we don't support changing the id
91  if (!owner) {
92  kWarning(11001) << "Resetting owner=0. Sure you want to do this?";
93  mOwner=0;
94  return -1;
95  }
96  if (!mOwner) {
97  if (id==-1) {
98  id=owner->uniquePropertyId();
99  }
100  mId = id;
101  mOwner = owner;
102  mOwner->addProperty(this, name);
103  if (p!=PolicyUndefined) {
104  setPolicy(p);
105  } else {
106  setPolicy(mOwner->policy());
107  }
108  }
109  return mId;
110 }
111 
112 void KGamePropertyBase::unregisterData()
113 {
114  if (!mOwner) {
115  return;
116  }
117  mOwner->removeProperty(this);
118  mOwner = 0;
119 }
120 
121 bool KGamePropertyBase::sendProperty()
122 {
123  QByteArray b;
124  QDataStream s(&b, QIODevice::WriteOnly);
125  KGameMessage::createPropertyHeader(s, id());
126  save(s);
127  if (mOwner) {
128  return mOwner->sendProperty(s);
129  } else {
130  kError(11001) << "Cannot send because there is no receiver defined";
131  return false;
132  }
133 }
134 
135 bool KGamePropertyBase::sendProperty(const QByteArray& data)
136 {
137  QByteArray b;
138  QDataStream s(&b, QIODevice::WriteOnly);
139  KGameMessage::createPropertyHeader(s, id());
140  s.writeRawData(data.data(), data.size());
141  if (mOwner) {
142  return mOwner->sendProperty(s);
143  } else {
144  kError(11001) << ": Cannot send because there is no receiver defined";
145  return false;
146  }
147 }
148 
149 bool KGamePropertyBase::lock()
150 {
151  if (isLocked()) {
152  return false;
153  }
154  setLock(true);
155  return true;
156 }
157 
158 bool KGamePropertyBase::unlock(bool force)
159 {
160  if (isLocked() && !force) {
161  return false;
162  }
163  setLock(false);
164  return true;
165 }
166 
167 void KGamePropertyBase::setLock(bool l)
168 {
169  QByteArray b;
170  QDataStream s(&b, QIODevice::WriteOnly);
171  KGameMessage::createPropertyCommand(s, IdCommand, id(), CmdLock);
172 
173  s << (qint8)l;
174  if (mOwner) {
175  mOwner->sendProperty(s);
176  } else {
177  kError(11001) << ": Cannot send because there is no receiver defined";
178  return ;
179  }
180 }
181 
182 void KGamePropertyBase::emitSignal()
183 {
184  //kDebug(11001) << ": mOwnerP="<< mOwner << "id=" << id();
185  if (mOwner ) {
186  mOwner->emitSignal(this);
187  } else {
188  kError(11001) << ":id="<<id()<<" Cannot emitSignal because there is no handler set";
189  }
190 }
191 
192 void KGamePropertyBase::command(QDataStream& s, int cmd, bool isSender)
193 {
194  switch (cmd) {
195  case CmdLock:
196  {
197  if (!isSender) {
198  qint8 locked;
199  s >> locked;
200  mFlags.bits.locked = (bool)locked ;
201  break;
202  }
203  }
204  default: // probably in derived classes
205  break;
206  }
207 }
208 
KGamePropertyBase::setEmittingSignal
void setEmittingSignal(bool p)
Sets this property to emit a signal on value changed.
Definition: kgameproperty.h:160
KGamePropertyBase::registerData
int registerData(int id, KGamePropertyHandler *owner, PropertyPolicy p, const QString &name=QString())
You have to register a KGamePropertyBase before you can use it.
Definition: kgameproperty.cpp:88
kgame.h
QByteArray
KGamePropertyBase::isLocked
bool isLocked() const
A locked property can only be changed by the player who has set the lock.
Definition: kgameproperty.h:190
KGamePropertyBase::sendProperty
bool sendProperty()
Forward the data to the owner of this property which then sends it over network.
Definition: kgameproperty.cpp:121
QDataStream
KGamePropertyHandler
A collection class for KGameProperty objects.
Definition: kgamepropertyhandler.h:73
KGamePropertyBase::setOptimized
void setOptimized(bool p)
Sets this property to try to optimize signal and network handling by not sending it out when the prop...
Definition: kgameproperty.h:172
KGamePropertyBase::setDirty
void setDirty(bool d)
Sets the "dirty" flag of the property.
Definition: kgameproperty.h:318
KGamePropertyHandler::removeProperty
bool removeProperty(KGamePropertyBase *data)
Removes a property from the handler.
Definition: kgamepropertyhandler.cpp:134
KGamePropertyBase::PropertyPolicy
PropertyPolicy
The policy of the property.
Definition: kgameproperty.h:112
KGamePropertyBase::emitSignal
void emitSignal()
Causes the parent object to emit a signal on value change.
Definition: kgameproperty.cpp:182
KGameMessage::createPropertyHeader
static void createPropertyHeader(QDataStream &msg, int id)
Creates a property header given the property id.
Definition: kgamemessage.cpp:72
KGamePropertyBase::setLock
void setLock(bool l)
A locked property can only be changed by the player who has set the lock.
Definition: kgameproperty.cpp:167
KGame::dataHandler
KGamePropertyHandler * dataHandler() const
Returns a pointer to the KGame property handler.
Definition: kgame.cpp:701
KGamePropertyBase::Flags::bits
struct KGamePropertyBase::Flags::@0 bits
kgamepropertyhandler.h
kgameproperty.h
KGamePropertyHandler::emitSignal
void emitSignal(KGamePropertyBase *data)
called by a property to emit a signal This call is simply forwarded to the parent object ...
Definition: kgamepropertyhandler.cpp:296
KGamePropertyBase::PolicyLocal
Definition: kgameproperty.h:117
KGamePropertyBase::mFlags
union KGamePropertyBase::Flags mFlags
KGamePropertyBase::unlock
bool unlock(bool force=false)
A locked property can only be changed by the player who has set the lock.
Definition: kgameproperty.cpp:158
KGamePropertyBase::setPolicy
void setPolicy(PropertyPolicy p)
Changes the consistency policy of a property.
Definition: kgameproperty.h:148
QString
KGamePropertyHandler::uniquePropertyId
int uniquePropertyId()
returns a unique property ID starting called usually with a base of KGamePropertyBase::IdAutomatic.
Definition: kgamepropertyhandler.cpp:257
KGamePropertyBase::IdCommand
Definition: kgameproperty.h:65
kgamemessage.h
KPlayer
Base class for a game player.
Definition: kplayer.h:69
KGamePropertyHandler::sendProperty
bool sendProperty(QDataStream &s)
called by a property to send itself into the datastream.
Definition: kgamepropertyhandler.cpp:315
KGamePropertyBase::KGamePropertyBase
KGamePropertyBase()
Creates a KGamePropertyBase object without an owner.
Definition: kgameproperty.cpp:47
KGamePropertyBase::lock
bool lock()
A locked property can only be changed by the player who has set the lock.
Definition: kgameproperty.cpp:149
KGamePropertyBase::unregisterData
void unregisterData()
Definition: kgameproperty.cpp:112
KGamePropertyBase::save
virtual void save(QDataStream &s)=0
Write the value into a stream.
KGamePropertyBase::~KGamePropertyBase
virtual ~KGamePropertyBase()
Definition: kgameproperty.cpp:52
KGamePropertyHandler::addProperty
bool addProperty(KGamePropertyBase *data, const QString &name=QString())
Adds a KGameProperty property to the handler.
Definition: kgamepropertyhandler.cpp:144
KGame
The main KDE game object.
Definition: kgame.h:60
KPlayer::dataHandler
KGamePropertyHandler * dataHandler()
Definition: kplayer.cpp:250
kplayer.h
QDataStream::writeRawData
int writeRawData(const char *s, int len)
KGamePropertyBase::command
virtual void command(QDataStream &stream, int msgid, bool isSender=false)
send a command to advanced properties like arrays
Definition: kgameproperty.cpp:192
QByteArray::data
char * data()
KGameMessage::createPropertyCommand
static void createPropertyCommand(QDataStream &msg, int cmdid, int pid, int cmd)
Creates a property header given the property id.
Definition: kgamemessage.cpp:84
KGamePropertyBase::PolicyUndefined
Definition: kgameproperty.h:114
KGamePropertyBase::mOwner
KGamePropertyHandler * mOwner
Definition: kgameproperty.h:354
KGamePropertyBase::Flags::locked
unsigned char locked
Definition: kgameproperty.h:372
QByteArray::size
int size() const
KGamePropertyBase::CmdLock
Definition: kgameproperty.h:77
KGamePropertyHandler::policy
KGamePropertyBase::PropertyPolicy policy()
Returns the default policy for this property handler.
Definition: kgamepropertyhandler.cpp:220
KGamePropertyBase::id
int id() const
Definition: kgameproperty.h:241
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:18:54 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libkdegames/libkdegamesprivate/kgame

Skip menu "libkdegames/libkdegamesprivate/kgame"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdegames API Reference

Skip menu "kdegames API Reference"
  • granatier
  • kapman
  • kblackbox
  • kgoldrunner
  • kigo
  • kmahjongg
  • KShisen
  • ksquares
  • libkdegames
  •   highscore
  •   libkdegamesprivate
  •     kgame
  • libkmahjongg
  • palapeli
  •   libpala

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal