File indexing completed on 2024-12-01 06:51:45

0001 /***************************************************************************
0002                                cmaproom.h
0003                              -------------------
0004     begin                : Sat Mar 10 2001
0005     copyright            : (C) 2001 by Kmud Developer Team
0006     email                : kmud-devel@kmud.de
0007  ***************************************************************************/
0008 
0009 /***************************************************************************
0010  *                                                                         *
0011  *   This program is free software; you can redistribute it and/or modify  *
0012  *   it under the terms of the GNU General Public License as published by  *
0013  *   the Free Software Foundation; either version 2 of the License, or     *
0014  *   (at your option) any later version.                                   *
0015  *                                                                         *
0016  ***************************************************************************/
0017 
0018 #ifndef CMAPROOM_H
0019 #define CMAPROOM_H
0020 
0021 #include <qcolor.h>
0022 #include <qstringlist.h>
0023 #include <QList>
0024 
0025 #include "cmapelement.h"
0026 
0027 class CMapPath;
0028 class CMapText;
0029 
0030 #include "kmemconfig.h"
0031 
0032 /**The class used to store room data
0033   *@author Kmud Developer Team
0034   */
0035 class KMUDDY_EXPORT CMapRoom : public CMapElement
0036 {
0037 public:
0038     enum labelPosTyp { NORTH =0, SOUTH , WEST , EAST , NORTHWEST, NORTHEAST, SOUTHEAST , SOUTHWEST, HIDE, CUSTOM } ;
0039 
0040 public: 
0041     CMapRoom(CMapManager *manager,QRect rect,CMapLevel *level);
0042     ~CMapRoom() override;
0043 
0044     elementTyp getElementType(void) override    { return ROOM ; }
0045 
0046         void setLevel(CMapLevel *level) override;
0047 
0048     void setLabel(QString str);
0049     QString getLabel(void)                      { return label; }
0050     void setDescription (QString str)           { description = str; }
0051     QString getDescription (void)               { return description; }
0052 
0053     /** Used to add a exit from the room */
0054     void addPath(CMapPath *path);
0055     /** Used to find the path for the give direction. If a path can't be found then
0056         null is returned                                                             */
0057         CMapPath *getPathDirection(directionTyp dir,QString specialCmd);
0058     CMapRoom *getPathTarget(directionTyp dir,QString specialCmd);
0059         directionTyp bestDirectionToRoom(CMapRoom *room);
0060     /** Get a list of the paths from this room */
0061     QList<CMapPath *> *getPathList() { return &pathList; }
0062     /** Get a list of the paths connecting with this room */
0063     QList<CMapPath *> *getConnectingPathList() { return &connectingPaths; }
0064     /** Get a pointer to the contents list */
0065     QStringList *getContentsList(void)          { return &contentsList; }
0066 
0067     void setUseDefaultCol(bool b)               { useDefaultCol = b; }
0068     bool getUseDefaultCol(void)                 { return useDefaultCol; }
0069     void setColor(QColor col)                  { color = col; }
0070     QColor getColor(void)                      { return color; }
0071 
0072     void setCurrentRoom(bool currentRoom);
0073     bool getCurrentRoom(void)                   { return current; }
0074     void setLoginRoom(bool loginRoom);
0075     bool getLoginRoom(void)                     { return login; }
0076 
0077     void setCopiedRoom(CMapRoom *room)          { copiedRoom = room; }
0078     CMapRoom *getCopiedRoom(void)               { return copiedRoom; }
0079 
0080     void setMoveTime(int moveTime)              { time = moveTime; }
0081     int getMoveTime(void)                       { return time; }
0082 
0083     void paint(QPainter *p,CMapZone *) override;
0084     void dragPaint(QPoint offset,QPainter *p,CMapZone *) override;
0085     void lowerPaint(QPainter *p,CMapZone *) override;
0086     void higherPaint(QPainter *p,CMapZone *) override;
0087 
0088     CMapElement *copy(void) override;
0089 
0090     labelPosTyp getLabelPosition(void);
0091     void setLabelPosition(labelPosTyp pos);
0092     void setLabelPosition(labelPosTyp pos,CMapText *text);
0093     void textRemove(void);
0094 
0095     /** Used to load the properties of the element from a list of properties */
0096     void loadProperties(KConfigGroup properties) override;
0097     /** Used to save the properties of the element to a list of properties */
0098     void saveProperties(KConfigGroup properties) override;
0099     /** Used to save the element as an XML object 
0100       * @param properties The XML object to save the properties too
0101       * @param doc The XML Document */
0102     void saveQDomElement(QDomDocument *doc,QDomElement *properties) override;
0103     /** Used to load the properties from a XML object 
0104       * @param properties The XML object to load the properties too */
0105     void loadQDomElement(QDomElement *properties) override;
0106     
0107     /** Used to move the element relative to it's current position */
0108     void moveBy(QPoint offset) override;
0109     /** This is used to resize the element */
0110     void resize(QPoint offset,int resizeId) override;
0111     /** This is used to get a unique ID for the room */
0112     unsigned int getRoomID(void);
0113     /** This is used to set the ID of the room */
0114     void setRoomID(unsigned int id);
0115     /** Get the text element linked to this element */
0116     CMapText *getLinkedElement(void)                       { return textElement; }
0117     
0118 protected:
0119     /** Used to paint the element at a given location and size
0120       * @param p The painer to paint the element to
0121       * @param pos The position to paint the elmenet
0122       * @param size The size the element should be draw
0123       * @param zone The current zone being viewed */
0124     void paintElementResize(QPainter *p,QPoint pos,QSize size,CMapZone *zone) override;
0125     void geometryChanged(void);
0126     
0127     unsigned int m_ID;
0128 
0129 private:
0130     int time;
0131     /** Used to store details of all the paths from this room */
0132     QList<CMapPath *> pathList;
0133     QList<CMapPath *> connectingPaths;
0134 
0135     QStringList contentsList;
0136 
0137     labelPosTyp labelPosition;
0138 
0139     bool current,login,useDefaultCol;
0140 
0141     QColor color;
0142 
0143     CMapText *textElement;
0144 
0145     QString label;
0146     QString description;
0147 
0148     CMapRoom *copiedRoom;
0149 };
0150 
0151 #endif