1 /*
2  *      dcctabitem.h
3  *
4  *      Copyright 2010 David Vachulka <arch_dvx@users.sourceforge.net>
5  *
6  *      This program is free software; you can redistribute it and/or modify
7  *      it under the terms of the GNU General Public License as published by
8  *      the Free Software Foundation; either version 2 of the License, or
9  *      (at your option) any later version.
10  *
11  *      This program is distributed in the hope that it will be useful,
12  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *      GNU General Public License for more details.
15  *
16  *      You should have received a copy of the GNU General Public License
17  *      along with this program; if not, write to the Free Software
18  *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  *      MA 02110-1301, USA.
20  */
21 
22 
23 #ifndef DCCTABITEM_H
24 #define DCCTABITEM_H
25 
26 #include <fstream>
27 #include "dxtabitem.h"
28 #include "dxpipe.h"
29 #include "logthread.h"
30 #ifndef DXSOCKET_H
31 #include "engine/dxsocket.h"
32 #endif
33 
34 class dxirc;
35 class IrcEngine;
36 
37 class DccTabItem: public dxTabItem
38 {
39     FXDECLARE(DccTabItem)
40     friend class dxirc;
41 public:
42     DccTabItem(dxTabBook *tab, const FXString &mynick, const FXString &nick, const FXString &address="0", FXint portD=0, FXint portH=0, FXbool listen=FALSE, FXIcon *icon=0, FXuint opts=TAB_TOP_NORMAL, FXint id=0, FXFont *font=NULL, IrcEngine *engine=NULL);
43     virtual ~DccTabItem();
44 
45     void createGeom();
46     void clearChat();
getServerName()47     FXString getServerName() { return m_address; }
getServerPort()48     FXint getServerPort() { return m_portD; }
getNickName()49     FXString getNickName() { return m_mynick; }
getRealServerName()50     FXString getRealServerName() { return m_address; }
getType()51     TYPE getType() { return DCC; }
52     void reparentTab();
53     void preferencesUpdated();
54     void setIrcFont(FXFont*);
55     void setCommandFocus();
56     void setSmileys(FXbool smiley, dxSmileyArray nsmileys);
57     void showSpellComboUpdated();
58     void removeSmileys();
59     void makeLastRowVisible();
60     FXString getSpellLang();
getConnected()61     FXbool getConnected() { return m_socket->isConnected(); }
disconnect()62     void disconnect() { m_socket->disconnect(); }
63 
64     long onCommandline(FXObject *, FXSelector, void*);
65     long onKeyPress(FXObject *, FXSelector, void*);
66     long onPipeTimeout(FXObject *, FXSelector, void*);
67     long onCloseTimeout(FXObject *, FXSelector, void*);
68     long onPipe(FXObject *, FXSelector, void*);
69     long onSpellLang(FXObject *, FXSelector, void*);
70     long onSocketCanRead(FXObject*, FXSelector, void*);
71     long onSocketConnected(FXObject*, FXSelector, void*);
72     long onSocketDisconnected(FXObject*, FXSelector, void*);
73     long onSocketError(FXObject*, FXSelector, void*);
74     long onSocketStartAccept(FXObject*, FXSelector, void*);
75     long onSocketListen(FXObject*, FXSelector, void*);
76     long onIrcEvent(FXObject*, FXSelector, void*);
77     long onListLogThread(FXObject*, FXSelector, void*);
78     long onLinesLogThread(FXObject*, FXSelector, void*);
79 protected:
80     void appendText(FXString msg, FXbool highlight, FXbool logLine=TRUE);
81     void appendStyledText(FXString text, FXint style, FXbool highlight, FXbool disableStrip=FALSE, FXbool logLine=TRUE);
82     FXbool processLine(const FXString &);
83     void setHasAllCommand(FXbool);
84     void setHasOwnMsg(FXbool);
85 
86 private:
DccTabItem()87     DccTabItem():m_parent(NULL),m_pipe(NULL),m_textframe(NULL),m_mainframe(NULL),m_commandframe(NULL)
88     ,m_commandline(NULL),m_currentPosition(0),m_historyMax(0),m_dccTimeout(0)
89     ,m_sendPipe(FALSE),m_listen(FALSE),m_scriptHasAll(FALSE),m_scriptHasOwnMsg(FALSE)
90     ,m_logstream(NULL),m_spellLangs(NULL),m_portD(0),m_portH(0),m_socket(NULL),m_engine(NULL),m_logThread(NULL)
91     {}
92 
93     dxTabBook *m_parent;
94     dxPipe *m_pipe;
95     FXVerticalFrame *m_textframe, *m_mainframe;
96     FXHorizontalFrame *m_commandframe;
97     dxTextField *m_commandline;
98     FXint m_currentPosition, m_historyMax, m_dccTimeout;
99     FXbool m_sendPipe, m_listen;
100     FXbool m_scriptHasAll, m_scriptHasOwnMsg;
101     dxStringArray m_commandsHistory, m_pipeStrings;
102     dxHiliteArray m_textStyleList;
103     std::ofstream *m_logstream;
104     FXComboBox *m_spellLangs;
105     FXString m_mynick, m_nick, m_address, m_receiveRest, m_dccIP;
106     FXint m_portD, m_portH;
107     dxSocket *m_socket;
108     IrcEngine *m_engine;
109     LogThread *m_logThread;
110 
111     void appendIrcText(FXString msg, FXTime time, FXbool disableStrip=FALSE, FXbool logLine=TRUE);
112     void appendIrcStyledText(FXString styled, FXint stylenum, FXTime time, FXbool disableStrip=FALSE, FXbool logLine=TRUE);
113     void appendIrcNickText(FXString nick, FXString msg, FXint style, FXTime time, FXbool logLine=TRUE);
114     void appendLinkText(const FXString &, FXint);
115     void appendMyMsg(FXString msg, FXTime time);
116     void startLogging();
117     void stopLogging();
118     void logLine(const FXString &line, const FXTime &time);
119     void setTextForeColor(FXColor);
120     void setTextBackColor(FXColor);
121     void setUserColor(FXColor);
122     void setActionsColor(FXColor);
123     void setNoticeColor(FXColor);
124     void setErrorColor(FXColor);
125     void setHilightColor(FXColor);
126     void setLinkColor(FXColor);
127     void setMymsgColor(FXColor);
128     void setLogColor(FXColor);
129     FXbool processCommand(const FXString &);
130     FXbool showHelp(FXString);
131     FXint getNickStyle(const FXString &);
132     FXint hiliteStyleExist(FXColor foreColor, FXColor backColor, FXuint style);
133     void createHiliteStyle(FXColor foreColor, FXColor backColor, FXuint style);
134     dxStringArray cutText(FXString, FXint);
135     FXbool highlightNeeded(const FXString &);
136     FXbool sendLine(const FXString &line);
137     void writeIrcEvent(IrcEvent &event);
138     void loadLogLines();
139     void listLogFiles();
140     void completeHelpCommand();
141 };
142 
143 #endif // DCCCTABITEM_H
144