• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • libkdegames
 

libkdegames

  • libkdegames
  • kgame
kgameproperty.cpp
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 (martin@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  $Id$
22 */
23 
24 #include "kgameproperty.h"
25 #include "kgamepropertyhandler.h"
26 #include "kgamemessage.h"
27 #include "kplayer.h"
28 #include "kgame.h"
29 
30 #define KPLAYERHANDLER_LOAD_COOKIE 6239
31 
32 KGamePropertyBase::KGamePropertyBase(int id, KGame* parent)
33 {
34  init();
35  registerData(id, parent);
36 }
37 
38 KGamePropertyBase::KGamePropertyBase(int id, KPlayer* parent)
39 {
40  init();
41  registerData(id, parent);
42 }
43 
44 KGamePropertyBase::KGamePropertyBase(int id, KGamePropertyHandler* owner)
45 {
46  init();
47  registerData(id, owner);
48 }
49 
50 KGamePropertyBase::KGamePropertyBase()
51 {
52  init();
53 }
54 
55 KGamePropertyBase::~KGamePropertyBase()
56 {
57  unregisterData();
58 }
59 
60 void KGamePropertyBase::init()
61 {
62  mOwner = 0;
63  setDirty(false);
64 
65  // this is very useful and used by e.g. KGameDialog so
66  // it is activated by default. Big games may profit by deactivating it to get
67  // a better performance.
68  setEmittingSignal(true);
69 
70  setOptimized(false);
71 
72  //setReadOnly(false);
73  mFlags.bits.locked = false ; // setLocked(false); is NOT possible as it checks whether isLocked() allows to change the status
74 
75  // local is default
76  setPolicy(PolicyLocal);
77 }
78 
79 int KGamePropertyBase::registerData(int id, KGame* owner, TQString name)
80 { return registerData(id, owner->dataHandler(), name); }
81 
82 int KGamePropertyBase::registerData(int id, KPlayer* owner, TQString name)
83 { return registerData(id, owner->dataHandler(), name); }
84 
85 int KGamePropertyBase::registerData( KGamePropertyHandler* owner,PropertyPolicy p, TQString name)
86 { return registerData(-1, owner,p, name); }
87 
88 int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner, TQString name)
89 { return registerData(id, owner,PolicyUndefined, name); }
90 
91 int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner,PropertyPolicy p, TQString name)
92 {
93 // we don't support changing the id
94  if (!owner) {
95  kdWarning(11001) << k_funcinfo << "Resetting owner=0. Sure you want to do this?" << endl;
96  mOwner=0;
97  return -1;
98  }
99  if (!mOwner) {
100  if (id==-1) {
101  id=owner->uniquePropertyId();
102  }
103  mId = id;
104  mOwner = owner;
105  mOwner->addProperty(this, name);
106  if (p!=PolicyUndefined) {
107  setPolicy(p);
108  } else {
109  setPolicy(mOwner->policy());
110  }
111  }
112  return mId;
113 }
114 
115 void KGamePropertyBase::unregisterData()
116 {
117  if (!mOwner) {
118  return;
119  }
120  mOwner->removeProperty(this);
121  mOwner = 0;
122 }
123 
124 bool KGamePropertyBase::sendProperty()
125 {
126  TQByteArray b;
127  TQDataStream s(b, IO_WriteOnly);
128  KGameMessage::createPropertyHeader(s, id());
129  save(s);
130  if (mOwner) {
131  return mOwner->sendProperty(s);
132  } else {
133  kdError(11001) << k_funcinfo << "Cannot send because there is no receiver defined" << endl;
134  return false;
135  }
136 }
137 
138 bool KGamePropertyBase::sendProperty(const TQByteArray& data)
139 {
140  TQByteArray b;
141  TQDataStream s(b, IO_WriteOnly);
142  KGameMessage::createPropertyHeader(s, id());
143  s.writeRawBytes(data.data(), data.size());
144  if (mOwner) {
145  return mOwner->sendProperty(s);
146  } else {
147  kdError(11001) << k_funcinfo << ": Cannot send because there is no receiver defined" << endl;
148  return false;
149  }
150 }
151 
152 bool KGamePropertyBase::lock()
153 {
154  if (isLocked()) {
155  return false;
156  }
157  setLock(true);
158  return true;
159 }
160 
161 bool KGamePropertyBase::unlock(bool force)
162 {
163  if (isLocked() && !force) {
164  return false;
165  }
166  setLock(false);
167  return true;
168 }
169 
170 void KGamePropertyBase::setLock(bool l)
171 {
172  TQByteArray b;
173  TQDataStream s(b, IO_WriteOnly);
174  KGameMessage::createPropertyCommand(s, IdCommand, id(), CmdLock);
175 
176  s << (TQ_INT8)l;
177  if (mOwner) {
178  mOwner->sendProperty(s);
179  } else {
180  kdError(11001) << k_funcinfo << ": Cannot send because there is no receiver defined" << endl;
181  return ;
182  }
183 }
184 
185 void KGamePropertyBase::emitSignal()
186 {
187  //kdDebug(11001) << k_funcinfo << ": mOwnerP="<< mOwner << " id=" << id() << endl;
188  if (mOwner ) {
189  mOwner->emitSignal(this);
190  } else {
191  kdError(11001) << k_funcinfo << ":id="<<id()<<" Cannot emitSignal because there is no handler set" << endl;
192  }
193 }
194 
195 void KGamePropertyBase::command(TQDataStream& s, int cmd, bool isSender)
196 {
197  switch (cmd) {
198  case CmdLock:
199  {
200  if (!isSender) {
201  TQ_INT8 locked;
202  s >> locked;
203  mFlags.bits.locked = (bool)locked ;
204  break;
205  }
206  }
207  default: // probably in derived classes
208  break;
209  }
210 }
211 

libkdegames

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

libkdegames

Skip menu "libkdegames"
  • libkdegames
Generated for libkdegames by doxygen 1.8.1.2
This website is maintained by Timothy Pearson.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. |