/** ******************************************************************************* * @file MsgBroadcast.h * @brief Editeur De N'ours : message beetween thread and GUI elements ... (header) * @author Edouard DUPIN * @date 04/02/2011 * @par Project * Edn * * @par Copyright * Copyright 2010 Edouard DUPIN, all right reserved * * This software is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY. * * Licence summary : * You can modify and redistribute the sources code and binaries. * You can send me the bug-fix * You can not earn money with this Software (if the source extract from Edn * represent less than 50% of original Sources) * Term of the licence in in the file licence.txt. * ******************************************************************************* */ #ifndef __MSG_BROADCAST_H__ #define __MSG_BROADCAST_H__ #include "tools_debug.h" #include "Edn.h" #include "Singleton.h" // broadCast Message // Message to prevent the curent thread that Buffer has changed // the ID we'll use to identify our event typedef enum { EDN_MSG__NONE = 0, // Programm is Quitting... close all if needed ... EDN_MSG__QUIT, EDN_MSG__BUFFER_CHANGE_CURRENT, // set the new current BUFFER ... // DESTINATION : GUI_MANAGER MSG_TO_GUI_MANAGER__START, // GUI windows openning and closing EDN_MSG__GUI_SHOW_MAIN_WINDOWS, EDN_MSG__GUI_SHOW_SEARCH, EDN_MSG__GUI_SHOW_PREFERENCE, EDN_MSG__GUI_SHOW_REPLACE, EDN_MSG__GUI_SHOW_OPEN_FILE, EDN_MSG__GUI_SHOW_SAVE_AS, EDN_MSG__GUI_SHOW_GOTO_LINE, EDN_MSG__GUI_SHOW_ABOUT, MSG_TO_GUI_MANAGER__STOP, // DESTINATION : GUI // generate by the current buffer to said the buffer has changing MSG_TO_GUI__START, EDN_MSG__BUFFER_REMOVE, EDN_MSG__BUFFER_REMOVE_ALL, EDN_MSG__BUFFER_ADD, EDN_MSG__BUFFER_CHANGE_STATE, EDN_MSG__BUFFER_CHANGE_NAME, EDN_MSG__BUFFER_CHANGE_MODIFY, EDN_MSG__BUFFER_CHANGE_HAS_HISTORY, EDN_MSG__BUFFER_CHANGE_HAS_NOT_HISTORY, EDN_MSG__BUFFER_CHANGE_HAS_FUTURE_HISTORY, EDN_MSG__BUFFER_CHANGE_HAS_NOT_FUTURE_HISTORY, MSG_TO_GUI__STOP, // DESTINATION : Buffer MANAGER MSG_TO_BUFFER_MANAGER__START, // create a new buffer EDN_MSG__NEW, // Event For All buffer ==> goto the buffer MANAGER EDN_MSG__BUFF_ALL_SAVE, EDN_MSG__BUFF_ALL_CLOSE, // Event For Specific Buffer ID : ==> GOTO the buffer MANAGER EDN_MSG__BUFF_ID_CLOSE, EDN_MSG__BUFF_ID_SAVE, MSG_TO_BUFFER_MANAGER__STOP, // DESTINATION : Working AREA MSG_TO_WORKING_AREA__START, // GUI event for the selected buffer EDN_MSG__CURRENT_CHANGE_BUFFER_ID, EDN_MSG__CURRENT_SAVE, EDN_MSG__CURRENT_SAVE_AS, EDN_MSG__CURRENT_SELECT_ALL, EDN_MSG__CURRENT_REMOVE_LINE, EDN_MSG__CURRENT_UN_SELECT, EDN_MSG__CURRENT_COPY, EDN_MSG__CURRENT_CUT, EDN_MSG__CURRENT_PASTE, EDN_MSG__CURRENT_FIND_PREVIOUS, EDN_MSG__CURRENT_FIND_OLD_PREVIOUS, EDN_MSG__CURRENT_FIND_NEXT, EDN_MSG__CURRENT_FIND_OLD_NEXT, EDN_MSG__CURRENT_REPLACE, EDN_MSG__CURRENT_REPLACE_ALL, EDN_MSG__CURRENT_CLOSE, EDN_MSG__CURRENT_UNDO, EDN_MSG__CURRENT_REDO, EDN_MSG__CURRENT_GOTO_LINE, EDN_MSG__REFRESH_DISPLAY, EDN_MSG__CURRENT_SET_CHARSET, MSG_TO_WORKING_AREA__STOP, // DESTINATION : SYSTEM ... MSG_TO_SYSTEM__START, MSG_TO_SYSTEM__STOP, // DESTINATION : CTAGS ... MSG_TO_CTAGS__START, EDN_MSG__OPEN_CTAGS, EDN_MSG__RELOAD_CTAGS, EDN_MSG__JUMP_TO_CURRENT_SELECTION, EDN_MSG__JUMP_BACK, MSG_TO_CTAGS__STOP, // DESTINATION : context popup ... MSG_TO_CONTEXT__START, MSG_TO_CONTEXT__STOP, }messageType_te; typedef enum { EDN_CAT_NONE, EDN_CAT_GUI, EDN_CAT_WORK_AREA, EDN_CAT_SYSTEM, EDN_CAT_BUFFER_MANAGER, EDN_CAT_GUI_MANAGER, EDN_CAT_CTAGS, EDN_CAT_MENU_CONTEXT, }messageCat_te; typedef struct { messageType_te msgId; int32_t dataId; }messageData_ts; class MsgBroadcastCore; class MsgBroadcast { private: Edn::String m_className; MsgBroadcastCore * m_messageSystem; messageCat_te m_cat; public: MsgBroadcast(const char * className, messageCat_te cat); virtual ~MsgBroadcast(void); // caul when a message is send virtual void OnMessage(int32_t id, int32_t dataID); Edn::String& GetName(void) { return m_className; }; messageCat_te GetCat(void) { return m_cat; }; protected : void SendMessage(messageType_te id, int32_t dataID = -1); }; typedef struct { int32_t localMessageID; messageCat_te msgCatDest; messageType_te msgId; int32_t data; }messageElement_ts; // need to create a syngleton ... class MsgBroadcastCore: public Singleton { friend class Singleton; // specific for sigleton system... private: // Constructeur MsgBroadcastCore(void); ~MsgBroadcastCore(void); public: void SendMessage(MsgBroadcast * pointerOnSender, messageType_te id, int32_t dataID = -1); void AddReceiver(MsgBroadcast * pointerOnReceiver); void RmReceiver(MsgBroadcast * pointerOnReceiver); private: EdnVectorBin m_listMessage; uint32_t m_messageID; EdnVectorBin m_listOfMessage; }; void GeneralSendMessage(messageType_te id, int32_t dataID = -1); #endif