You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
254 lines
9.8 KiB
254 lines
9.8 KiB
#ifndef _KVI_IRCVIEW_H_
|
|
#define _KVI_IRCVIEW_H_
|
|
//=========================================================================================================
|
|
//
|
|
// File : kvi_ircview.h
|
|
// Creation date : Fri Mar 19 1999 05:39:01 by Szymon Stefanek
|
|
//
|
|
// This file is part of the KVirc irc client distribution
|
|
// Copyright (C) 1999-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_string.h"
|
|
#include "kvi_pointerlist.h"
|
|
|
|
#include <tqwidget.h>
|
|
#include <tqpixmap.h> // needed
|
|
|
|
class TQScrollBar;
|
|
class TQLineEdit;
|
|
class TQFile;
|
|
class TQToolButton;
|
|
class TQFontMetrics;
|
|
class KviTalPopupMenu;
|
|
|
|
class KviWindow;
|
|
class KviFrame;
|
|
class KviConsole;
|
|
class KviIrcViewToolWidget;
|
|
class KviIrcViewToolTip;
|
|
|
|
typedef struct _KviIrcViewLineChunk KviIrcViewLineChunk;
|
|
typedef struct _KviIrcViewWrappedBlock KviIrcViewWrappedBlock;
|
|
typedef struct _KviIrcViewLine KviIrcViewLine;
|
|
typedef struct _KviIrcViewWrappedBlockSelectionInfoTag KviIrcViewWrappedBlockSelectionInfo;
|
|
|
|
#define KVI_IRCVIEW_INVALID_LINE_MARK_INDEX 0xffffffff
|
|
|
|
class KVIRC_API KviIrcView : public TQWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
TQ_PROPERTY(int TransparencyCapable READ dummyRead)
|
|
// we cannot #ifdef due to a bug in tqmoc
|
|
TQ_PROPERTY(bool usePaintOnScreen READ getPaintOnScreen WRITE setPaintOnScreen)
|
|
public:
|
|
friend class KviIrcViewToolTip;
|
|
friend class KviIrcViewToolWidget;
|
|
public:
|
|
KviIrcView(TQWidget *parent,KviFrame *pFrm,KviWindow *pWnd);
|
|
~KviIrcView();
|
|
public:
|
|
int dummyRead() const { return 0; };
|
|
#ifdef COMPILE_USE_QT4
|
|
bool getPaintOnScreen() const { return testAttribute(TQt::WA_PaintOnScreen);};
|
|
void setPaintOnScreen(bool bFlag){setAttribute(TQt::WA_PaintOnScreen,bFlag);} ;
|
|
#else
|
|
// hack to fix tqmoc bug on win qt4
|
|
bool getPaintOnScreen() const { return 0;};
|
|
void setPaintOnScreen(bool bFlag){} ;
|
|
#endif
|
|
private:
|
|
// TQDate m_lastLogDay;
|
|
int m_iFlushTimer;
|
|
KviIrcViewLine * m_pFirstLine;
|
|
KviIrcViewLine * m_pCurLine; // Bottom line in the view
|
|
KviIrcViewLine * m_pLastLine;
|
|
KviIrcViewLine * m_pCursorLine;
|
|
unsigned int m_uLineMarkLineIndex;
|
|
|
|
// Highliting of links
|
|
KviIrcViewWrappedBlock * m_pLastLinkUnderMouse;
|
|
int m_iLastLinkRectTop;
|
|
int m_iLastLinkRectHeight;
|
|
|
|
int m_iNumLines;
|
|
int m_iMaxLines;
|
|
|
|
unsigned int m_uNextLineIndex;
|
|
|
|
TQPixmap * m_pPrivateBackgroundPixmap;
|
|
TQScrollBar * m_pScrollBar;
|
|
TQToolButton * m_pToolsButton;
|
|
KviTalPopupMenu * m_pToolsPopup;
|
|
|
|
KviIrcViewToolWidget * m_pToolWidget;
|
|
|
|
int m_iLastScrollBarValue;
|
|
|
|
// Font related stuff (needs precalculation!)
|
|
int m_iFontLineSpacing;
|
|
int m_iFontLineWidth;
|
|
int m_iFontDescent;
|
|
int m_iFontCharacterWidth[256]; //1024 bytes fixed
|
|
|
|
int m_iWrapMargin;
|
|
int m_iMinimumPaintWidth;
|
|
int m_iRelativePixmapY;
|
|
int m_iIconWidth;
|
|
int m_iIconSideSpacing;
|
|
|
|
TQPoint m_mousePressPos;
|
|
TQPoint m_mouseCurrentPos;
|
|
|
|
// Selection
|
|
int m_iSelectionBegin;
|
|
int m_iSelectionTop;
|
|
int m_iSelectionEnd;
|
|
int m_iSelectionBottom;
|
|
int m_iSelectionLeft;
|
|
int m_iSelectionRight;
|
|
|
|
bool m_bMouseIsDown;
|
|
bool m_bShiftPressed;
|
|
|
|
bool m_bSkipScrollBarRepaint;
|
|
int m_iSelectTimer;
|
|
int m_iMouseTimer;
|
|
//int m_iTipTimer;
|
|
TQString m_szLastSelection;
|
|
TQString m_szLastSelectionLine;
|
|
KviWindow * m_pKviWindow;
|
|
KviIrcViewWrappedBlockSelectionInfo * m_pWrappedBlockSelectionInfo;
|
|
TQFile * m_pLogFile;
|
|
KviFrame * m_pFrm;
|
|
bool m_bAcceptDrops;
|
|
int m_iUnprocessedPaintEventRequests;
|
|
bool m_bPostedPaintEventPending;
|
|
KviPointerList<KviIrcViewLine> * m_pMessagesStoppedWhileSelecting;
|
|
KviIrcView * m_pMasterView;
|
|
TQFontMetrics * m_pFm; // assume this valid only inside a paint event (may be 0 in other circumstances)
|
|
|
|
TQMouseEvent * m_pLastEvent;
|
|
|
|
KviIrcViewToolTip * m_pToolTip;
|
|
bool m_bHaveUnreadedHighlightedMessages;
|
|
bool m_bHaveUnreadedMessages;
|
|
public:
|
|
void checkLogDate();
|
|
void clearUnreaded();
|
|
void applyOptions();
|
|
void enableDnd(bool bEnable);
|
|
bool haveUnreadedMessages() { return m_bHaveUnreadedMessages; };
|
|
bool haveUnreadedHighlightedMessages() { return m_bHaveUnreadedHighlightedMessages; };
|
|
enum AppendTextFlags { NoRepaint = 1, NoTimestamp = 2, SetLineMark = 4 };
|
|
void appendText(int msg_type,const kvi_wchar_t *data_ptr,int iFlags = 0);
|
|
void clearLineMark(bool bRepaint=false);
|
|
bool hasLineMark(){ return m_uLineMarkLineIndex != KVI_IRCVIEW_INVALID_LINE_MARK_INDEX; };
|
|
void removeHeadLine(bool bRepaint=false);
|
|
void emptyBuffer(bool bRepaint=true);
|
|
void getTextBuffer(TQString &buffer);
|
|
void setMaxBufferSize(int maxBufSize,bool bRepaint=true);
|
|
int maxBufferSize(){ return m_iMaxLines; }; //Never used ?
|
|
bool saveBuffer(const char *filename);
|
|
void findNext(const TQString& szText,bool bCaseS = false,bool bRegExp = false,bool bExtended = false);
|
|
void findPrev(const TQString& szText,bool bCaseS = false,bool bRegExp = false,bool bExtended = false);
|
|
KviWindow * parentKviWindow(){ return m_pKviWindow; };
|
|
KviConsole * console();
|
|
// A null pixmap passed here unsets the private backgrdound.
|
|
void setPrivateBackgroundPixmap(const TQPixmap &pixmap,bool bRepaint=true);
|
|
bool hasPrivateBackgroundPixmap(){ return (m_pPrivateBackgroundPixmap != 0); };
|
|
|
|
//==============================================================================================
|
|
// Logging
|
|
// Stops previous logging session too...
|
|
bool startLogging(const TQString& fname = TQString(),bool bPrependCurBuffer = false);
|
|
void stopLogging();
|
|
bool isLogging(){ return (m_pLogFile != 0); };
|
|
void getLogFileName(KviStr &buffer);
|
|
void getLogFileName(TQString &buffer);
|
|
//void add2Log(const char *buffer,int buf_len=-1);
|
|
void add2Log(const TQString &szBuffer,int iMsgType=0);
|
|
|
|
//==============================================================================================
|
|
// Channel view splitting
|
|
void setMasterView(KviIrcView * v);
|
|
void splitMessagesTo(KviIrcView * v);
|
|
void joinMessagesFrom(KviIrcView * v);
|
|
void appendMessagesFrom(KviIrcView * v);
|
|
|
|
void prevLine();
|
|
void nextLine();
|
|
void nextPage();
|
|
void prevPage();
|
|
virtual TQSize sizeHint() const;
|
|
const TQString & lastLineOfText();
|
|
const TQString & lastMessageText();
|
|
virtual void setFont(const TQFont &f);
|
|
public slots:
|
|
void flushLog();
|
|
void showToolsPopup();
|
|
void clearBuffer();
|
|
void toggleToolWidget();
|
|
void increaseFontSize();
|
|
void decreaseFontSize();
|
|
void chooseFont();
|
|
void chooseBackground();
|
|
void resetBackground();
|
|
signals:
|
|
void rightClicked();
|
|
void dndEntered();
|
|
void fileDropped(const char *);
|
|
private:
|
|
void setCursorLine(KviIrcViewLine * l);
|
|
KviIrcViewLine * getVisibleLineAt(int xPos,int yPos);
|
|
void getLinkEscapeCommand(TQString &buffer,const TQString &escape_cmd,const TQString &escape_label);
|
|
void appendLine(KviIrcViewLine *ptr,bool bRepaint);
|
|
void postUpdateEvent();
|
|
void fastScroll(int lines = 1);
|
|
const kvi_wchar_t * getTextLine(int msg_type,const kvi_wchar_t * data_ptr,KviIrcViewLine *line_ptr,bool bEnableTimeStamp = true);
|
|
void calculateLineWraps(KviIrcViewLine *ptr,int maxWidth);
|
|
void recalcFontVariables(const TQFontMetrics &fm,const TQFontInfo &fi);
|
|
bool checkSelectionBlock(KviIrcViewLine * line,int left,int bottom,int bufIndex);
|
|
void calculateSelectionBounds();
|
|
KviIrcViewWrappedBlock * getLinkUnderMouse(int xPos,int yPos,TQRect * pRect = 0,TQString * linkCmd = 0,TQString * linkText = 0);
|
|
void doLinkToolTip(const TQRect &rct,TQString &linkCmd,TQString &linkText);
|
|
protected:
|
|
virtual void paintEvent(TQPaintEvent *);
|
|
virtual void resizeEvent(TQResizeEvent *);
|
|
virtual void mousePressEvent(TQMouseEvent *e);
|
|
virtual void mouseRealPressEvent(TQMouseEvent *e);
|
|
virtual void mouseReleaseEvent(TQMouseEvent *);
|
|
virtual void mouseDoubleClickEvent(TQMouseEvent *e);
|
|
virtual void mouseMoveEvent(TQMouseEvent *e);
|
|
virtual void timerEvent(TQTimerEvent *e);
|
|
virtual void dragEnterEvent(TQDragEnterEvent *e);
|
|
virtual void dropEvent(TQDropEvent *e);
|
|
virtual bool event(TQEvent *e);
|
|
virtual void wheelEvent(TQWheelEvent *e);
|
|
virtual void keyPressEvent(TQKeyEvent *e);
|
|
void maybeTip(const TQPoint &pnt);
|
|
virtual void leaveEvent ( TQEvent * );
|
|
protected slots:
|
|
virtual void scrollBarPositionChanged(int newValue);
|
|
void masterDead();
|
|
};
|
|
|
|
#endif //_KVI_IRCVIEW_H_
|