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.
kvirc/src/kvirc/ui/kvi_input.h

265 lines
8.5 KiB

#ifndef _KVI_INPUT_H_
#define _KVI_INPUT_H_
//=============================================================================
//
// File : kvi_input.h
// Creation date : Sun Jan 3 1999 23:04:10 by Szymon Stefanek
//
// This file is part of the KVirc irc client distribution
// Copyright (C) 1999-2007 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 <tqwidget.h>
#include "kvi_tal_hbox.h"
#include <tqpixmap.h>
#include "kvi_pointerlist.h"
#include "kvi_string.h"
//#include <tqdialog.h>
#include <tqtoolbutton.h>
class KviUserListView;
class KviWindow;
class KviInput;
class KviTalHBox;
class TQFontMetrics;
// Default maximum buffer size.
#define KVI_INPUT_MAX_BUFFER_SIZE 400
// Border , better do not touch this
#define KVI_INPUT_BORDER 1
#define KVI_INPUT_MARGIN 2
// Cursor blink time...just don't set it to a value less than 100 if
// you don't want to be lagged by your cursors :)
#define KVI_INPUT_BLINK_TIME 800
// Drag scroll speed...(smaller values = faster)
#define KVI_INPUT_DRAG_TIMEOUT 80
// Maximum entries in the history buffer
#define KVI_INPUT_MAX_HISTORY_ENTRIES 100
class KVIRC_API KviInputHistory
{
public:
KviInputHistory();
~KviInputHistory();
protected:
KviPointerList<TQString> * m_pStringList;
public:
void add(TQString * s);
KviPointerList<TQString> * list(){ return m_pStringList; };
void save(const char * filename);
void load(const char * filename);
};
#ifdef COMPILE_USE_QT4
#define TQIMEvent TQInputMethodEvent
#endif
class KVIRC_API KviInputEditor : public TQFrame
{
// friend class KviUserParser;
//TQ_PROPERTY( int KviProperty_FocusOwner READ heightHint )
TQ_PROPERTY( int TransparencyCapable READ heightHint )
Q_OBJECT
TQ_OBJECT
public:
KviInputEditor(TQWidget * par,KviWindow *wnd,KviUserListView * view = 0);
~KviInputEditor();
protected:
TQString m_szTextBuffer;
int m_iCursorPosition;
int m_iFirstVisibleChar;
int m_iSelectionBegin;
int m_iSelectionEnd;
int m_iMaxBufferSize;
bool m_bSpSlowFlag; // <-- what is this ?
// members for supporting input methods
TQString m_szIMText;
int m_iIMStart;
int m_iIMLength;
int m_iIMSelectionBegin;
int m_iIMSelectionLength;
bool m_bIMComposing;
unsigned char m_iCurFore;
unsigned char m_iCurBack;
bool m_bCurBold;
bool m_bCurUnderline;
int m_iBlockLen;
int m_iBlockWidth;
bool m_bControlBlock;
bool m_bCursorOn;
int m_iCursorTimer;
int m_iDragTimer;
int m_iLastCursorXPosition;
int m_iSelectionAnchorChar;
// History stuff
KviPointerList<TQString> * m_pHistory;
int m_iCurHistoryIdx;
KviStr m_szSaveTextBuffer;
// Nick completion
KviUserListView * m_pUserListView;
TQString m_szLastCompletedNick;
TQString m_szLastCompletionBuffer;
int m_iLastCompletionCursorPosition;
int m_iLastCompletionCursorXPosition;
int m_iLastCompletionFirstVisibleChar;
bool m_bLastCompletionFinished;
bool m_bUpdatesEnabled;
KviStr m_szAltKeyCode;
KviWindow * m_pKviWindow;
TQWidget * m_pInputParent;
KviTalPopupMenu * m_pIconMenu;
bool m_bReadOnly;
public:
int heightHint() const;
virtual TQSize sizeHint() const;
void setText(const TQString text);
TQString text() { return m_szTextBuffer; };
void insertChar(TQChar c);
void insertText(const TQString &text);
void applyOptions();
void setMaxBufferSize(int size) { m_iMaxBufferSize = size; };
void setReadOnly(bool bReadOnly) {m_bReadOnly=bReadOnly; };
bool readOnly() {return m_bReadOnly; };
private:
void replaceWordBeforeCursor(const TQString &word,const TQString &replacement,bool bRepaint = true);
int replaceSegment(int start, int length, const TQString &string);
void getWordBeforeCursor(TQString &buffer,bool * bIsFirstWordInLine);
void runUpToTheFirstVisibleChar();
void extractNextBlock(int idx,TQFontMetrics & fm,int curXPos,int maxXPos);
void drawTextBlock(TQPainter *pa,TQFontMetrics & fm,int curXPos,int textBaseline,int idx,int len,bool bSelected=FALSE);
TQChar getSubstituteChar(unsigned short control_code);
void moveRightFirstVisibleCharToShowCursor();
void repaintWithCursorOn();
void selectOneChar(int pos);
int charIndexFromXPosition(int xPos);
int xPositionFromCharIndex(TQFontMetrics& fm,int chIdx,bool bContentsCoords=FALSE);
int xPositionFromCharIndex(int chIdx,bool bContentsCoords=FALSE);
void killDragTimer();
void handleDragSelection();
void end();
void home();
bool hasSelection();
void moveCursorTo(int idx,bool bRepaint = true);
void returnPressed(bool bRepaint = true);
void completion(bool bShift);
void standardNickCompletion(bool bAddMask,TQString &word,bool bFirstWordInLine);
void recalcFontMetrics(TQFontMetrics * pFm);
void internalCursorRight(bool bShift);
void internalCursorLeft(bool bShift);
public slots:
void iconPopupActivated(int id);
void copyToSelection(bool bDonNotCopyToClipboard=true);
void copyToClipboard();
void removeSelected();
void cut();
void pasteClipboardWithConfirmation();
void pasteSelectionWithConfirmation();
void pasteSlow();
void stopPasteSlow();
void pasteFile();
void selectAll();
void clear();
signals:
void escapePressed();
void enterPressed();
protected:
virtual void drawContents(TQPainter *);
//virtual void resizeEvent(TQResizeEvent *);
virtual void timerEvent(TQTimerEvent *e);
virtual void focusInEvent(TQFocusEvent *);
virtual void focusOutEvent(TQFocusEvent *);
virtual void keyPressEvent(TQKeyEvent *e);
virtual void keyReleaseEvent(TQKeyEvent *e);
virtual void mousePressEvent(TQMouseEvent *e);
virtual void mouseReleaseEvent(TQMouseEvent *);
virtual void dragEnterEvent(TQDragEnterEvent *e);
virtual void dropEvent(TQDropEvent *e);
virtual void imStartEvent(TQIMEvent *e);
virtual void imComposeEvent(TQIMEvent *e);
virtual void imEndEvent(TQIMEvent *e);
#ifdef COMPILE_USE_QT4
virtual void paintEvent(TQPaintEvent *e);
#endif
};
class KviScriptEditor;
class KVIRC_API KviInput : public TQWidget
{
Q_OBJECT
TQ_OBJECT
public:
KviInput(KviWindow *par,KviUserListView * view = 0);
~KviInput();
public:
KviWindow * m_pWindow;
KviInputEditor * m_pInputEditor;
KviScriptEditor * m_pMultiLineEditor;
KviTalHBox * m_pButtonContainer;
TQToolButton * m_pMultiEditorButton;
TQToolButton * m_pHistoryButton;
TQToolButton * m_pIconButton;
TQToolButton * m_pCommandlineModeButton;
TQToolButton * m_pHideToolsButton;
protected:
// virtual void resizeEvent(TQResizeEvent * e);
virtual void focusInEvent(TQFocusEvent * e);
virtual void setFocusProxy(TQWidget * w);
virtual void keyPressEvent(TQKeyEvent * e);
public slots:
void multilineEditorButtonToggled(bool bOn);
void historyButtonClicked();
void iconButtonClicked();
void inputEditorEnterPressed();
void toggleToolButtons();
public:
virtual void setFocus();
void multiLinePaste(const TQString &text);
bool isUserFriendly() { return m_pCommandlineModeButton->isOn(); };
void setUserFriendly(bool bSet) { m_pCommandlineModeButton->setOn(bSet); };
int heightHint() const;
void setText(const TQString &text);
void insertChar(char c);
void insertText(const TQString & text);
void applyOptions();
bool isButtonsHidden();
void setButtonsHidden(bool bHidden);
//const TQString & text();
TQString text();
};
#endif //_KVI_INPUT_H_