#ifndef _KVI_CHANNEL_H_ #define _KVI_CHANNEL_H_ //============================================================================= // // File : kvi_channel.h // Creation date : Tue Aug 1 2000 01:42:00 by Szymon Stefanek // // This file is part of the KVirc irc client distribution // Copyright (C) 2000-2004 Szymon Stefanek (pragma at kvirc dot net) // // This program is FREE software. You can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your opinion) any later version. // // This program is distributed in the HOPE that it will be USEFUL, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, write to the Free Software Foundation, // Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // //============================================================================= #include "kvi_settings.h" #include "kvi_console.h" #include "kvi_window.h" #include "kvi_string.h" #include "kvi_ircuserdb.h" #include "kvi_pixmap.h" #include "kvi_userlistview.h" #include "kvi_time.h" #include "kvi_modew.h" #include "kvi_valuelist.h" #include #include "kvi_pointerhashtable.h" #include class KviConsole; class TQSplitter; class TQToolButton; class KviTopicWidget; class KviIrcMask; class KviThemedLabel; class KviTalHBox; #ifdef COMPILE_ON_WINDOWS // windows compiler wants this instead of the forward decl #include "kvi_tqmaskeditor.h" #else typedef struct _KviMaskEntry KviMaskEntry; // kvi_tqmaskeditor.h #endif class KviMaskEditor; class KviModeEditor; #define KVI_CHANNEL_STATE_HAVEALLNAMES 1 #define KVI_CHANNEL_STATE_HAVEBANLIST (1 << 1) #define KVI_CHANNEL_STATE_HAVEWHOLIST (1 << 2) #define KVI_CHANNEL_STATE_HAVEBANEXCEPTIONLIST (1 << 3) #define KVI_CHANNEL_STATE_HAVEINVITELIST (1 << 4) #define KVI_CHANNEL_STATE_DEADCHAN (1 << 5) #define KVI_CHANNEL_STATE_SENTBANLISTREQUEST (1 << 6) #define KVI_CHANNEL_STATE_SENTBANEXCEPTIONLISTREQUEST (1 << 7) #define KVI_CHANNEL_STATE_SENTINVITELISTREQUEST (1 << 8) #define KVI_CHANNEL_STATE_SENTWHOREQUEST (1 << 9) #define KVI_CHANNEL_STATE_SENTPART (1 << 10) #define KVI_CHANNEL_STATE_SYNCHRONIZED (1 << 11) #define KVI_CHANNEL_STATE_NOCLOSEONPART (1 << 12) #define KVI_CHANNEL_STATE_SENTSYNCWHOREQUEST (1 << 13) typedef struct _KviChannelAction { TQString szNick; // action source nick unsigned int uActionType; // type of the action kvi_time_t tTime; // time of the action int iTemperature; // temperature of the action } KviChannelAction; // this is the maximum count of actions that we keep in memory #define KVI_CHANNEL_ACTION_HISTORY_MAX_COUNT 40 // this is the timespan of the oldest action that we keep in memory // 600 secs = 10 mins #define KVI_CHANNEL_ACTION_HISTORY_MAX_TIMESPAN 600 typedef struct _KviChannelActivityStats { unsigned int uActionCount; // number of actions in the history bool bStatsInaccurate; // the stats are inaccurate because we have just joined the chan unsigned int uLastActionTimeSpan; // the timespan between the last action and now unsigned int uFirstActionTimeSpan; // the time span between the first and the last action double dActionsPerMinute; // average number of actions per minute in the lastActionTimeSpan unsigned int uActionsInTheLastMinute; // number of actions in the last minute int iAverageActionTemperature; // the average chan temperature unsigned int uHotActionCount; unsigned int uHotActionPercent; TQStringList lTalkingUsers; // users that seem to be talking NOW TQStringList lWereTalkingUsers; } KviChannelActivityStats; class KVIRC_API KviChannel : public KviWindow { Q_OBJECT TQ_OBJECT public: KviChannel(KviFrame * lpFrm,KviConsole * lpConsole,const char * name); ~KviChannel(); protected: TQSplitter * m_pTopSplitter; TQSplitter * m_pVertSplitter; BUTTON_CLASS * m_pDoubleViewButton; KviWindowToolPageButton * m_pListViewButton; KviWindowToolPageButton * m_pBanEditorButton; KviWindowToolPageButton * m_pBanExceptionEditorButton; KviWindowToolPageButton * m_pInviteEditorButton; KviWindowToolPageButton * m_pModeEditorButton; KviMaskEditor * m_pBanEditor; KviMaskEditor * m_pBanExceptionEditor; KviMaskEditor * m_pInviteEditor; KviModeEditor * m_pModeEditor; KviIrcView * m_pMessageView; KviTopicWidget * m_pTopicWidget; KviUserListView * m_pUserListView; KviModeWidget * m_pModeWidget; int m_iStateFlags; TQString m_szChannelMode; TQString m_szChannelKey; KviStr m_szChannelLimit; KviPointerList * m_pBanList; KviPointerList * m_pBanExceptionList; KviPointerList * m_pInviteList; KviPixmap m_privateBackground; TQDateTime m_joinTime; TQString m_szNameWithUserFlag; KviPointerHashTable * m_pTmpHighLighted; unsigned int m_uActionHistoryHotActionCount; KviPointerList * m_pActionHistory; kvi_time_t m_tLastReceivedWhoReply; KviValueList m_VertSplitterSizesList; KviTalHBox * m_pButtonContainer; protected: bool eventFilter(TQObject *, TQEvent *); virtual TQPixmap * myIconPtr(); virtual void fillCaptionBuffers(); virtual void resizeEvent(TQResizeEvent *e); virtual void closeEvent(TQCloseEvent *e); // virtual void fillContextPopup(KviTalPopupMenu * p); virtual void getConfigGroupName(TQString &buf); virtual void saveProperties(KviConfig * cfg); virtual void loadProperties(KviConfig * cfg); virtual void applyOptions(); virtual void getBaseLogFileName(TQString &buffer); virtual void triggerCreationEvents(); void toggleEditor(KviMaskEditor ** ppEd,KviWindowToolPageButton ** ppBtn,KviPointerList *l,char flag,const char *edName); void internalMask(const TQString &tqmask,bool bAdd,const TQString &setBy,unsigned int setAt,KviPointerList *l,KviMaskEditor **ppEd); void checkChannelSync(); void showDoubleView(bool bShow); void fixActionHistory(); void getTalkingUsersStats(TQString &buffer,TQStringList &l,bool bPast); public: void getChannelActivityStats(KviChannelActivityStats * s); //void getChannelActivityStatsDescription(TQString &buffer); KviPointerList * banList(){ return m_pBanList; }; KviPointerList * banExceptionList(){ return m_pBanExceptionList; }; KviPointerList * inviteList(){ return m_pInviteList; }; TQString * firstSelectedNickname(){ return m_pUserListView->firstSelectedNickname(); }; TQString * nextSelectedNickname(){ return m_pUserListView->nextSelectedNickname(); }; int selectedCount(){ return m_pUserListView->selectedCount(); }; int opCount(){ return m_pUserListView->opCount(); }; int voiceCount(){ return m_pUserListView->voiceCount(); }; int halfOpCount(){ return m_pUserListView->halfOpCount(); }; int userOpCount(){ return m_pUserListView->userOpCount(); }; int chanAdminCount(){ return m_pUserListView->chanAdminCount(); }; int chanOwnerCount(){ return m_pUserListView->chanOwnerCount(); }; unsigned int count(){ return m_pUserListView->count(); }; unsigned int banCount(){ return m_pBanList->count(); }; unsigned int banExceptionCount(){ return m_pBanExceptionList->count(); }; unsigned int inviteCount(){ return m_pInviteList->count(); }; const TQString & nameWithUserFlag(){ return m_szNameWithUserFlag; }; virtual const TQString & target(){ return windowName(); }; // void appendSelectedNicknames(KviStr &buffer); void setMask(char flag, const TQString &tqmask,bool bAdd,const TQString &setBy,unsigned int setAt); kvi_time_t lastReceivedWhoReply(){ return m_tLastReceivedWhoReply; }; void setLastReceivedWhoReply(kvi_time_t tTime){ m_tLastReceivedWhoReply = tTime; }; void setSentSyncWhoRequest(){ m_iStateFlags |= KVI_CHANNEL_STATE_SENTSYNCWHOREQUEST; }; void clearSentSyncWhoRequest(){ m_iStateFlags ^= KVI_CHANNEL_STATE_SENTSYNCWHOREQUEST; }; bool sentSyncWhoRequest(){ return (m_iStateFlags & KVI_CHANNEL_STATE_SENTSYNCWHOREQUEST); }; bool sentWhoRequest(){ return (m_iStateFlags & KVI_CHANNEL_STATE_SENTWHOREQUEST); }; void setSentWhoRequest(){ m_iStateFlags |= KVI_CHANNEL_STATE_SENTWHOREQUEST; }; bool sentInviteListRequest(){ return (m_iStateFlags & KVI_CHANNEL_STATE_SENTINVITELISTREQUEST); }; void setSentInviteListRequest(){ m_iStateFlags |= KVI_CHANNEL_STATE_SENTINVITELISTREQUEST; }; void setInviteListDone(){ m_iStateFlags ^= KVI_CHANNEL_STATE_SENTINVITELISTREQUEST; }; bool sentBanListRequest(){ return (m_iStateFlags & KVI_CHANNEL_STATE_SENTBANLISTREQUEST); }; void setSentBanListRequest(){ m_iStateFlags |= KVI_CHANNEL_STATE_SENTBANLISTREQUEST; }; void setBanListDone(){ m_iStateFlags ^= KVI_CHANNEL_STATE_SENTBANLISTREQUEST; }; bool sentBanExceptionListRequest(){ return (m_iStateFlags & KVI_CHANNEL_STATE_SENTBANEXCEPTIONLISTREQUEST); }; void setSentBanExceptionListRequest(){ m_iStateFlags |= KVI_CHANNEL_STATE_SENTBANEXCEPTIONLISTREQUEST; }; void setBanExceptionListDone(){ m_iStateFlags ^= KVI_CHANNEL_STATE_SENTBANEXCEPTIONLISTREQUEST; }; bool hasAllNames(){ return (m_iStateFlags & KVI_CHANNEL_STATE_HAVEALLNAMES); }; void setHasAllNames(){ m_iStateFlags |= KVI_CHANNEL_STATE_HAVEALLNAMES; checkChannelSync(); }; bool hasInviteList(){ return (m_iStateFlags & KVI_CHANNEL_STATE_HAVEINVITELIST); checkChannelSync(); }; void setHasInviteList(){ m_iStateFlags |= KVI_CHANNEL_STATE_HAVEINVITELIST; }; bool hasWhoList(){ return (m_iStateFlags & KVI_CHANNEL_STATE_HAVEWHOLIST); }; void setHasWhoList(){ m_iStateFlags |= KVI_CHANNEL_STATE_HAVEWHOLIST; checkChannelSync(); }; bool hasBanList(){ return (m_iStateFlags & KVI_CHANNEL_STATE_HAVEBANLIST); }; void setHasBanList(){ m_iStateFlags |= KVI_CHANNEL_STATE_HAVEBANLIST; checkChannelSync(); }; bool hasBanExceptionList(){ return (m_iStateFlags & KVI_CHANNEL_STATE_HAVEBANEXCEPTIONLIST); }; void setHasBanExceptionList(){ m_iStateFlags |= KVI_CHANNEL_STATE_HAVEBANEXCEPTIONLIST; checkChannelSync(); }; bool closeOnPart(){ return !(m_iStateFlags & KVI_CHANNEL_STATE_NOCLOSEONPART); }; void partMessageSent(bool bCloseOnPart = true,bool bShowMessage = true); virtual bool activityMeter(unsigned int * puActivityValue,unsigned int * puActivityTemperature); void setDeadChan(); void setAliveChan(); void prependUserFlag(const TQString &nick,TQString &buffer){ m_pUserListView->prependUserFlag(nick,buffer); }; char getUserFlag(const TQString &nick){ return m_pUserListView->getUserFlag(nick); }; bool isDeadChan(){ return (m_iStateFlags & KVI_CHANNEL_STATE_DEADCHAN); }; virtual TQSize tqsizeHint() const; void enableUserListUpdates(bool bEnable){ m_pUserListView->enableUpdates(bEnable); }; KviUserListEntry * join(const TQString &nick,const TQString &user = TQString(),const TQString &host = TQString(),int iFlags = 0) { return m_pUserListView->join(nick,user,host,iFlags); }; bool op(const TQString &nick,bool bOp){ return m_pUserListView->op(nick,bOp); }; bool avatarChanged(const TQString &nick){ return m_pUserListView->avatarChanged(nick); }; bool voice(const TQString &nick,bool bVoice){ return m_pUserListView->voice(nick,bVoice); }; bool halfop(const TQString &nick,bool bHalfOp){ return m_pUserListView->halfop(nick,bHalfOp); }; bool userop(const TQString &nick,bool bUserOp){ return m_pUserListView->userop(nick,bUserOp); }; bool setChanOwner(const TQString &nick,bool bChanOwner){ return m_pUserListView->setChanOwner(nick,bChanOwner); }; bool setChanAdmin(const TQString &nick,bool bChanAdmin){ return m_pUserListView->setChanAdmin(nick,bChanAdmin); }; void userAction(KviIrcMask * user,unsigned int uActionType); void userAction(const TQString &nick,unsigned int uActionType); void userAction(const TQString &nick,const TQString &user,const TQString &host,unsigned int uActionType); bool nickChange(const TQString &oldNick,const TQString &newNick); void channelAction(const TQString &nick,unsigned int uActionType,int iTemperature); bool part(const TQString &nick); bool isOn(const TQString &nick){ return (m_pUserListView->findEntry(nick) != 0); }; KviUserListEntry * findEntry(const TQString &nick){ return m_pUserListView->findEntry(nick); }; KviUserListView * userListView(){ return m_pUserListView; }; bool isMeOp(bool bAtLeast = false); bool isMeChanOwner(bool bAtLeast = false); bool isMeChanAdmin(bool bAtLeast = false); bool isMeVoice(bool bAtLeast = false); bool isMeHalfOp(bool bAtLeast = false); bool isMeUserOp(bool bAtLeast = false); bool isOp(const TQString &nick,bool bAtLeast = false){ return m_pUserListView->isOp(nick,bAtLeast); }; bool isVoice(const TQString &nick,bool bAtLeast = false){ return m_pUserListView->isVoice(nick,bAtLeast); }; bool isHalfOp(const TQString &nick,bool bAtLeast = false){ return m_pUserListView->isHalfOp(nick,bAtLeast); }; bool isUserOp(const TQString &nick,bool bAtLeast = false){ return m_pUserListView->isUserOp(nick,bAtLeast); }; bool isChanOwner(const TQString &nick,bool bAtLeast = false){ return m_pUserListView->isChanOwner(nick,bAtLeast); }; bool isChanAdmin(const TQString &nick,bool bAtLeast = false){ return m_pUserListView->isChanAdmin(nick,bAtLeast); }; int myFlags(); void updateModeLabel(); KviTopicWidget * topicWidget(){ return m_pTopicWidget; }; virtual void outputMessage(int msg_type,const TQString &msg); void ownMessage(const TQString &buffer); void ownAction(const TQString &buffer); void setChannelMode(char mode,bool bAdd); void setChannelKey(const char * key); void setChannelLimit(const char * limit); void getChannelModeString(TQString &buffer); KviStr & channelLimit(){ return m_szChannelLimit; }; bool hasChannelLimit(){ return m_szChannelLimit.hasData(); }; bool hasChannelKey() { return !m_szChannelKey.isEmpty(); }; TQString & channelKey(){ return m_szChannelKey; }; void addHighlightedUser(const char * nick); void removeHighlightedUser(const char * nick); bool isHighlightedUser(const char * nick) { return m_pTmpHighLighted->tqfind(nick); }; KviIrcView * messageView() const { return m_pMessageView; }; virtual void lostUserFocus(); virtual void getTaskBarTipText(TQString &buffer); TQString channelMode() { return m_szChannelMode; }; void unhighlight(); TQFrame * buttonContainer() { return (TQFrame*)m_pButtonContainer; }; private slots: void toggleDoubleView(); void toggleListView(); void toggleBanEditor(); void toggleBanExceptionEditor(); void toggleInviteEditor(); void toggleModeEditor(); void topicSelected(const TQString & topic); void setMode(const char * mode); void modeSelectorDone(); void textViewRightClicked(); void removeMasks(KviMaskEditor *ed,KviPointerList *l); void toggleToolButtons(); protected: virtual void preprocessMessage(TQString & szMessage); }; #endif //_KVI_CHANNEL_H_