• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

libkdegames/kgame

kgameproperty.cpp

Go to the documentation of this file.
00001 /*
00002     This file is part of the KDE games library
00003     Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
00004     Copyright (C) 2001 Martin Heni (kde  at heni-online.de)
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License version 2 as published by the Free Software Foundation.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public License
00016     along with this library; see the file COPYING.LIB.  If not, write to
00017     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018     Boston, MA 02110-1301, USA.
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  // this is very useful and used by e.g. KGameDialog so
00063  // it is activated by default. Big games may profit by deactivating it to get
00064  // a better performance. 
00065  setEmittingSignal(true);
00066 
00067  setOptimized(false); 
00068  
00069  //setReadOnly(false);
00070  mFlags.bits.locked = false ; // setLocked(false); is NOT possible as it checks whether isLocked() allows to change the status
00071 
00072  // local is default
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 // we don't support changing the id
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  //kDebug(11001) << ": mOwnerP="<< mOwner << "id=" << id();
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: // probably in derived classes
00205         break;
00206  }
00207 }
00208 

libkdegames/kgame

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

API Reference

Skip menu "API Reference"
  • kblackbox
  • kgoldrunner
  • kmahjongg
  • ksquares
  • libkdegames
  •   highscore
  •   kgame
  •   kggzgames
  •   kggzmod
  •   kggznet
  • libkmahjongg
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal