aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/Channel.hpp30
-rw-r--r--include/ChannelSidePanel.hpp2
-rw-r--r--include/MessageBoard.hpp9
-rw-r--r--include/User.hpp35
-rw-r--r--include/UsersSidePanel.hpp7
5 files changed, 71 insertions, 12 deletions
diff --git a/include/Channel.hpp b/include/Channel.hpp
index 4bdb4b5..6f5495f 100644
--- a/include/Channel.hpp
+++ b/include/Channel.hpp
@@ -4,25 +4,45 @@
#include "Chatbar.hpp"
#include "User.hpp"
#include "Channel.hpp"
+#include <vector>
+#include <odhtdb/DatabaseNode.hpp>
+#include <odhtdb/Signature.hpp>
+
+namespace odhtdb
+{
+ class Database;
+}
namespace dchat
{
class Channel
{
public:
- Channel(const std::string &name);
- ~Channel();
+ Channel(const std::string &name, const odhtdb::DatabaseNode &databaseNodeInfo = odhtdb::DatabaseNode(), User *localUser = nullptr, odhtdb::Database *database = nullptr);
+ virtual ~Channel();
User* getLocalUser();
MessageBoard& getMessageBoard();
+
const std::string& getName() const;
+ const std::vector<User*> getUsers() const;
+ User* getUserByPublicKey(const odhtdb::Signature::PublicKey &publicKey);
+
+ void addLocalMessage(const std::string &msg, User *owner);
+ void addMessage(const std::string &msg);
+ void addUser(User *user);
void processEvent(const sf::Event &event);
void draw(sf::RenderWindow &window, Cache &cache);
- private:
+ protected:
+ odhtdb::Database *database;
+ odhtdb::DatabaseNode databaseNodeInfo;
+ std::string name;
MessageBoard messageBoard;
Chatbar chatbar;
- OfflineUser localOfflineUser;
- std::string name;
+ User *localUser;
+ SystemUser systemUser;
+ std::vector<User*> users;
+ odhtdb::Signature::MapPublicKey<OnlineUser*> publicKeyOnlineUsersMap;
};
}
diff --git a/include/ChannelSidePanel.hpp b/include/ChannelSidePanel.hpp
index c1ed5d6..9cee907 100644
--- a/include/ChannelSidePanel.hpp
+++ b/include/ChannelSidePanel.hpp
@@ -10,6 +10,8 @@ namespace dchat
{
public:
static void addChannel(Channel *channel);
+ static void removeAllChannels();
+
static void draw(sf::RenderWindow &window);
static float getWidth();
};
diff --git a/include/MessageBoard.hpp b/include/MessageBoard.hpp
index ca1405f..b431af8 100644
--- a/include/MessageBoard.hpp
+++ b/include/MessageBoard.hpp
@@ -10,18 +10,21 @@
namespace dchat
{
+ class Channel;
+
class MessageBoard
{
+ friend class Channel;
public:
MessageBoard(const sf::Vector2u &size);
~MessageBoard();
- void updateStaticContentTexture(const sf::Vector2u &newSize);
- void addMessage(Message *message);
-
void processEvent(const sf::Event &event);
void draw(sf::RenderWindow &window, Cache &cache);
private:
+ void updateStaticContentTexture(const sf::Vector2u &newSize);
+ void addMessage(Message *message);
+ private:
sf::RenderTexture staticContentTexture;
bool dirty;
bool selectingText;
diff --git a/include/User.hpp b/include/User.hpp
index 2a8f46b..e9e334a 100644
--- a/include/User.hpp
+++ b/include/User.hpp
@@ -2,13 +2,37 @@
#include <string>
+namespace odhtdb
+{
+ class User;
+}
+
namespace dchat
{
class User
{
public:
+ enum class Type
+ {
+ ONLINE,
+ OFFLINE,
+ SYSTEM
+ };
+
+ User(Type type);
virtual ~User(){}
virtual const std::string& getName() const = 0;
+
+ const Type type;
+ };
+
+ class OnlineUser : public User
+ {
+ public:
+ OnlineUser(const odhtdb::User *databaseUser);
+ virtual const std::string& getName() const override;
+
+ const odhtdb::User *databaseUser;
};
class OfflineUser : public User
@@ -16,7 +40,14 @@ namespace dchat
public:
OfflineUser(const std::string &name);
virtual const std::string& getName() const override;
-
- std::string name;
+
+ const std::string name;
+ };
+
+ class SystemUser : public User
+ {
+ public:
+ SystemUser();
+ virtual const std::string& getName() const override;
};
}
diff --git a/include/UsersSidePanel.hpp b/include/UsersSidePanel.hpp
index aebdb34..b2855bb 100644
--- a/include/UsersSidePanel.hpp
+++ b/include/UsersSidePanel.hpp
@@ -1,14 +1,17 @@
#pragma once
-#include "User.hpp"
#include <SFML/Graphics/RenderWindow.hpp>
namespace dchat
{
+ class Channel;
+
class UsersSidePanel
{
public:
- static void addUser(User *user);
+ static void setCurrentChannel(Channel *channel);
+ static Channel* getCurrentChannel();
+
static void draw(sf::RenderWindow &window);
static float getWidth();
};