summaryrefslogtreecommitdiffstats
path: root/qt/ScintillaQt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt/ScintillaQt.cpp')
-rw-r--r--qt/ScintillaQt.cpp695
1 files changed, 0 insertions, 695 deletions
diff --git a/qt/ScintillaQt.cpp b/qt/ScintillaQt.cpp
deleted file mode 100644
index 7d3722b..0000000
--- a/qt/ScintillaQt.cpp
+++ /dev/null
@@ -1,695 +0,0 @@
-// The implementation of the TQt specific subclass of ScintillaBase.
-//
-// Copyright (c) 2006
-// Riverbank Computing Limited <info@riverbankcomputing.co.uk>
-//
-// This file is part of TQScintilla.
-//
-// This copy of TQScintilla 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, or (at your option) any
-// later version.
-//
-// TQScintilla is supplied 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
-// TQScintilla; see the file LICENSE. If not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <tqapplication.h>
-#include <tqscrollbar.h>
-#include <tqpopupmenu.h>
-#include <tqstring.h>
-#include <tqtimer.h>
-#include <tqclipboard.h>
-#include <tqdragobject.h>
-#include <tqpainter.h>
-
-#include "qextscintillabase.h"
-#include "ScintillaQt.h"
-
-
-// We want to use the Scintilla notification names as TQt signal names.
-#undef SCEN_CHANGE
-#undef SCN_AUTOCSELECTION
-#undef SCN_CALLTIPCLICK
-#undef SCN_CHARADDED
-#undef SCN_DOUBLECLICK
-#undef SCN_DWELLEND
-#undef SCN_DWELLSTART
-#undef SCN_HOTSPOTCLICK
-#undef SCN_HOTSPOTDOUBLECLICK
-#undef SCN_MACRORECORD
-#undef SCN_MARGINCLICK
-#undef SCN_MODIFIED
-#undef SCN_MODIFYATTEMPTRO
-#undef SCN_NEEDSHOWN
-#undef SCN_PAINTED
-#undef SCN_SAVEPOINTLEFT
-#undef SCN_SAVEPOINTREACHED
-#undef SCN_STYLENEEDED
-#undef SCN_UPDATEUI
-#undef SCN_USERLISTSELECTION
-#undef SCN_ZOOM
-
-enum
-{
- SCEN_CHANGE = 768,
- SCN_AUTOCSELECTION = 2022,
- SCN_CALLTIPCLICK = 2021,
- SCN_CHARADDED = 2001,
- SCN_DOUBLECLICK = 2006,
- SCN_DWELLEND = 2017,
- SCN_DWELLSTART = 2016,
- SCN_HOTSPOTCLICK = 2019,
- SCN_HOTSPOTDOUBLECLICK = 2020,
- SCN_MACRORECORD = 2009,
- SCN_MARGINCLICK = 2010,
- SCN_MODIFIED = 2008,
- SCN_MODIFYATTEMPTRO = 2004,
- SCN_NEEDSHOWN = 2011,
- SCN_PAINTED = 2013,
- SCN_SAVEPOINTLEFT = 2003,
- SCN_SAVEPOINTREACHED = 2002,
- SCN_STYLENEEDED = 2000,
- SCN_UPDATEUI = 2007,
- SCN_USERLISTSELECTION = 2014,
- SCN_ZOOM = 2018
-};
-
-
-// The ctor.
-ScintillaTQt::ScintillaTQt(QextScintillaBase *qsb_) :
- capturedMouse(false), qsb(qsb_)
-{
- wMain = qsb -> txtarea;
-
- // We aren't a TQObject so we use the API class to do TQObject related
- // things for us.
- qsb -> connect(&qtimer,TQT_SIGNAL(timeout()),TQT_SLOT(handleTimer()));
-
- Initialise();
-}
-
-
-// The dtor.
-ScintillaTQt::~ScintillaTQt()
-{
- Finalise();
-}
-
-
-// Initialise the instance.
-void ScintillaTQt::Initialise()
-{
- SetTicking(true);
-}
-
-
-// Tidy up the instance.
-void ScintillaTQt::Finalise()
-{
- SetTicking(false);
- ScintillaBase::Finalise();
-}
-
-
-// Start a drag.
-void ScintillaTQt::StartDrag()
-{
- // Allow applications to re-implement the drag start.
- qsb -> startDrag();
-}
-
-
-// Do the real drag start.
-void ScintillaTQt::StartDragImpl()
-{
- TQDragObject *dobj = new TQTextDrag(textRange(&drag),qsb -> txtarea);
-
- // Remove the dragged text if it was a move to another widget or
- // application.
- if (dobj -> drag() && dobj -> target() != qsb -> txtarea)
- ClearSelection();
-
- inDragDrop = false;
- SetDragPosition(invalidPosition);
-}
-
-
-// Handle a drag enter event.
-void ScintillaTQt::dragEnterEvent(TQDragEnterEvent *dee)
-{
- dragMoveEvent(dee);
-}
-
-
-// Handle a drag move event.
-void ScintillaTQt::dragMoveEvent(TQDragMoveEvent *dme)
-{
- dme -> acceptAction(TQTextDrag::canDecode(dme));
- SetDragPosition(PositionFromLocation(Point(dme -> pos().x(),dme -> pos().y())));
-}
-
-
-// Handle a drag leave event.
-void ScintillaTQt::dragLeaveEvent(TQDragLeaveEvent *dle)
-{
- SetDragPosition(invalidPosition);
-}
-
-
-// Handle a drop event.
-void ScintillaTQt::dropEvent(TQDropEvent *de)
-{
- TQString text;
-
- if (TQTextDrag::decode(de,text))
- {
- bool moving = (de -> source() == qsb -> txtarea && de -> action() == TQDropEvent::Move);
-
- de -> acceptAction();
-
- const char *s;
- TQCString us;
-
- if (IsUnicodeMode())
- {
- us = text.utf8();
- s = us.data();
- }
- else
- s = text.latin1();
-
- DropAt(posDrop,s,moving,false);
- SetDragPosition(invalidPosition);
- Redraw();
- }
-}
-
-
-// Re-implement to trap certain messages.
-sptr_t ScintillaTQt::WndProc(unsigned int iMessage,uptr_t wParam,sptr_t lParam)
-{
- switch (iMessage)
- {
- case SCI_GRABFOCUS:
- PWindow(wMain) -> setFocus();
- return 0;
-
- case SCI_GETDIRECTFUNCTION:
- return reinterpret_cast<sptr_t>(DirectFunction);
-
- case SCI_GETDIRECTPOINTER:
- return reinterpret_cast<sptr_t>(this);
- }
-
- return ScintillaBase::WndProc(iMessage,wParam,lParam);
-}
-
-
-// Windows nonsense.
-sptr_t ScintillaTQt::DefWndProc(unsigned int,uptr_t,sptr_t)
-{
- return 0;
-}
-
-
-// Manage the timer.
-void ScintillaTQt::SetTicking(bool on)
-{
- if (timer.ticking != on)
- {
- timer.ticking = on;
-
- if (timer.ticking)
- qtimer.start(timer.tickSize);
- else
- qtimer.stop();
- }
-
- timer.ticksToWait = caret.period;
-}
-
-
-// Grab or release the mouse (and keyboard).
-void ScintillaTQt::SetMouseCapture(bool on)
-{
- if (mouseDownCaptures)
- if (on)
- PWindow(wMain) -> grabMouse();
- else
- PWindow(wMain) -> releaseMouse();
-
- capturedMouse = on;
-}
-
-
-// Return true if the mouse/keyboard are currently grabbed.
-bool ScintillaTQt::HaveMouseCapture()
-{
- return capturedMouse;
-}
-
-
-// Set the position of the vertical scrollbar.
-void ScintillaTQt::SetVerticalScrollPos()
-{
- qsb -> vsb -> setValue(topLine);
-}
-
-
-// Set the position of the horizontal scrollbar.
-void ScintillaTQt::SetHorizontalScrollPos()
-{
- qsb -> hsb -> setValue(xOffset);
-}
-
-
-// Set the extent of the vertical and horizontal scrollbars and return true if
-// the view needs re-drawing.
-bool ScintillaTQt::ModifyScrollBars(int nMax,int nPage)
-{
- qsb -> vsb -> setMinValue(0);
- qsb -> vsb -> setMaxValue(nMax - nPage + 1);
- qsb -> vsb -> setLineStep(1);
- qsb -> vsb -> setPageStep(nPage);
-
- qsb -> hsb -> setMinValue(0);
- qsb -> hsb -> setMaxValue(scrollWidth);
- qsb -> hsb -> setPageStep(scrollWidth / 10);
-
- return true;
-}
-
-
-// Called after SCI_SETWRAPMODE and SCI_SETHSCROLLBAR.
-void ScintillaTQt::ReconfigureScrollBars()
-{
- // Hide or show the scrollbars if needed.
- if (horizontalScrollBarVisible && wrapState == eWrapNone)
- qsb->hsb->show();
- else
- qsb->hsb->hide();
-
- if (verticalScrollBarVisible)
- qsb->vsb->show();
- else
- qsb->vsb->hide();
-}
-
-
-// Notify interested parties of any change in the document.
-void ScintillaTQt::NotifyChange()
-{
- emit qsb -> SCEN_CHANGE();
-}
-
-
-// Notify interested parties of various events. This is the main mapping
-// between Scintilla notifications and TQt signals.
-void ScintillaTQt::NotifyParent(SCNotification scn)
-{
- switch (scn.nmhdr.code)
- {
- case SCN_CALLTIPCLICK:
- emit qsb -> SCN_CALLTIPCLICK(scn.position);
- break;
-
- case SCN_AUTOCSELECTION:
- emit qsb -> SCN_AUTOCSELECTION(scn.text,scn.lParam);
- break;
-
- case SCN_CHARADDED:
- emit qsb -> SCN_CHARADDED(scn.ch);
- break;
-
- case SCN_DOUBLECLICK:
- emit qsb -> SCN_DOUBLECLICK();
- break;
-
- case SCN_DWELLEND:
- emit qsb -> SCN_DWELLEND(scn.position,scn.x,scn.y);
- break;
-
- case SCN_DWELLSTART:
- emit qsb -> SCN_DWELLSTART(scn.position,scn.x,scn.y);
- break;
-
- case SCN_HOTSPOTCLICK:
- emit qsb -> SCN_HOTSPOTCLICK(scn.position,scn.modifiers);
- break;
-
- case SCN_HOTSPOTDOUBLECLICK:
- emit qsb -> SCN_HOTSPOTDOUBLECLICK(scn.position,scn.modifiers);
- break;
-
- case SCN_MACRORECORD:
- emit qsb -> SCN_MACRORECORD(scn.message,scn.wParam,scn.lParam);
- break;
-
- case SCN_MARGINCLICK:
- emit qsb -> SCN_MARGINCLICK(scn.position,scn.modifiers,
- scn.margin);
- break;
-
- case SCN_MODIFIED:
- emit qsb -> SCN_MODIFIED(scn.position,scn.modificationType,
- scn.text,scn.length,scn.linesAdded,
- scn.line,scn.foldLevelNow,
- scn.foldLevelPrev);
- break;
-
- case SCN_MODIFYATTEMPTRO:
- emit qsb -> SCN_MODIFYATTEMPTRO();
- break;
-
- case SCN_NEEDSHOWN:
- emit qsb -> SCN_NEEDSHOWN(scn.position,scn.length);
- break;
-
- case SCN_PAINTED:
- emit qsb -> SCN_PAINTED();
- break;
-
- case SCN_SAVEPOINTLEFT:
- emit qsb -> SCN_SAVEPOINTLEFT();
- break;
-
- case SCN_SAVEPOINTREACHED:
- emit qsb -> SCN_SAVEPOINTREACHED();
- break;
-
- case SCN_STYLENEEDED:
- emit qsb -> SCN_STYLENEEDED(scn.position);
- break;
-
- case SCN_UPDATEUI:
- emit qsb -> SCN_UPDATEUI();
- break;
-
- case SCN_USERLISTSELECTION:
- emit qsb -> SCN_USERLISTSELECTION(scn.text,scn.wParam);
- break;
-
- case SCN_ZOOM:
- emit qsb -> SCN_ZOOM();
- break;
-
- default:
- tqWarning("Unknown notification: %u",scn.nmhdr.code);
- }
-}
-
-
-// Handle a key that hasn't been filtered out as a command key. Return 0 if we
-// haven't handled it.
-int ScintillaTQt::KeyDefault(int key,int modifiers)
-{
- // On Windows Alt Gr is returned as Ctrl-Alt (on X11 it seems to be the
- // Meta key). We therefore ignore that combination.
-#if defined(Q_OS_WIN)
- modifiers &= (SCI_CTRL | SCI_ALT);
-
- if (modifiers == SCI_CTRL || modifiers == SCI_ALT)
- return 0;
-#else
- if (modifiers & (SCI_CTRL | SCI_ALT))
- return 0;
-#endif
-
- AddChar(key);
-
- return 1;
-}
-
-
-// Convert a text range to a TQString.
-TQString ScintillaTQt::textRange(const SelectionText *text)
-{
- TQString qs;
-
- if (text -> s)
- if (IsUnicodeMode())
- qs = TQString::fromUtf8(text -> s);
- else
- qs.setLatin1(text -> s);
-
- return qs;
-}
-
-
-// Copy the selected text to the clipboard.
-void ScintillaTQt::CopyToClipboard(const SelectionText &selectedText)
-{
- TQApplication::clipboard() -> setText(textRange(&selectedText));
-}
-
-
-// Implement copy.
-void ScintillaTQt::Copy()
-{
- if (currentPos != anchor)
- {
- SelectionText text;
-
- CopySelectionRange(&text);
- CopyToClipboard(text);
- }
-}
-
-
-// Implement paste.
-void ScintillaTQt::Paste()
-{
- TQString str = TQApplication::clipboard() -> text();
-
- if (str.isEmpty())
- return;
-
- pdoc -> BeginUndoAction();
-
- ClearSelection();
-
- int len;
-
- if (IsUnicodeMode())
- {
- TQCString s = str.utf8();
-
- len = s.length();
-
- if (len)
- pdoc -> InsertString(currentPos,s.data(),len);
- }
- else
- {
- const char *s = str.latin1();
-
- len = (s ? strlen(s) : 0);
-
- if (len)
- pdoc -> InsertString(currentPos,s,len);
- }
-
- SetEmptySelection(currentPos + len);
-
- pdoc -> EndUndoAction();
-
- NotifyChange();
- Redraw();
-}
-
-
-// A simple TQWidget sub-class to implement a call tip. No need to bother with
-// all the moc stuff.
-class TQtCallTip : public TQWidget
-{
-public:
- TQtCallTip(TQWidget *parent,ScintillaTQt *sci_);
- ~TQtCallTip();
-
-protected:
- void paintEvent(TQPaintEvent *);
- void mousePressEvent(TQMouseEvent *me);
-
-private:
- ScintillaTQt *sci;
-};
-
-
-// Create a call tip.
-TQtCallTip::TQtCallTip(TQWidget *parent,ScintillaTQt *sci_) :
- TQWidget(parent,0,WType_Popup|WStyle_Customize|WStyle_NoBorder), sci(sci_)
-{
- // Ensure that the main window keeps the focus (and the caret flashing)
- // when this is displayed.
- setFocusProxy(parent);
-}
-
-
-// Destroy a call tip.
-TQtCallTip::~TQtCallTip()
-{
- // Ensure that the main window doesn't receive a focus out event when
- // this is destroyed.
- setFocusProxy(0);
-}
-
-
-// Paint a call tip.
-void TQtCallTip::paintEvent(TQPaintEvent *)
-{
- Surface *surfaceWindow = Surface::Allocate();
-
- if (surfaceWindow)
- {
- TQPainter p(this);
-
- surfaceWindow -> Init(&p,0);
- sci -> ct.PaintCT(surfaceWindow);
- surfaceWindow -> Release();
-
- delete surfaceWindow;
- }
-}
-
-
-// Handle a mouse press in a call tip.
-void TQtCallTip::mousePressEvent(TQMouseEvent *me)
-{
- Point pt;
-
- pt.x = me -> x();
- pt.y = me -> y();
-
- sci -> ct.MouseClick(pt);
- sci -> CallTipClick();
-}
-
-
-// Create a call tip window.
-void ScintillaTQt::CreateCallTipWindow(PRectangle rc)
-{
- if (!ct.wCallTip.Created())
- ct.wCallTip = ct.wDraw = new TQtCallTip(qsb,this);
-
- PWindow(ct.wCallTip) -> resize(rc.right - rc.left,rc.bottom - rc.top);
- ct.wCallTip.Show();
-}
-
-
-// Add an item to the right button menu.
-void ScintillaTQt::AddToPopUp(const char *label,int cmd,bool enabled)
-{
- TQPopupMenu *pm = static_cast<TQPopupMenu *>(popup.GetID());
-
- if (label[0] != '\0')
- {
- TQString tr_label = tqApp -> translate("ContextMenu",label);
-
- pm -> insertItem(tr_label,qsb,TQT_SLOT(handlePopUp(int)),0,cmd);
- pm -> setItemEnabled(cmd,enabled);
- }
- else
- pm -> insertSeparator();
-}
-
-
-// Claim the selection.
-void ScintillaTQt::ClaimSelection()
-{
- bool isSel = (currentPos != anchor);
-
- if (isSel)
- {
- TQClipboard *cb = TQApplication::clipboard();
-
- // If we support X11 style selection then make it available
- // now.
- if (cb -> supportsSelection())
- {
- SelectionText text;
-
- CopySelectionRange(&text);
-
- if (text.s)
- {
- cb -> setSelectionMode(TRUE);
- cb -> setText(text.s);
- cb -> setSelectionMode(FALSE);
- }
- }
-
- primarySelection = true;
- }
- else
- primarySelection = false;
-
- emit qsb -> TQSCN_SELCHANGED(isSel);
-}
-
-
-// Unclaim the selection.
-void ScintillaTQt::UnclaimSelection()
-{
- if (primarySelection)
- {
- primarySelection = false;
- qsb -> txtarea -> update();
- }
-}
-
-
-// Implemented to provide compatibility with the Windows version.
-sptr_t ScintillaTQt::DirectFunction(ScintillaTQt *sciThis,unsigned int iMessage,
- uptr_t wParam,sptr_t lParam)
-{
- return sciThis -> WndProc(iMessage,wParam,lParam);
-}
-
-
-// Draw the contents of the widget.
-void ScintillaTQt::paintEvent(TQPaintEvent *pe)
-{
- bool isUnicodeMode = (pdoc && pdoc -> dbcsCodePage == SC_CP_UTF8);
-
- paintState = painting;
-
- const TQRect &qr = pe -> rect();
-
- rcPaint.left = qr.left();
- rcPaint.top = qr.top();
- rcPaint.right = qr.right() + 1;
- rcPaint.bottom = qr.bottom() + 1;
-
- PRectangle rcText = GetTextRectangle();
- paintingAllText = rcPaint.Contains(rcText);
-
- Surface *sw = Surface::Allocate();
-
- if (sw)
- {
- TQPainter painter(PWindow(wMain));
-
- sw -> Init(&painter,0);
- sw -> SetUnicodeMode(isUnicodeMode);
- Paint(sw,rcPaint);
- sw -> Release();
- delete sw;
-
- // If the painting area was insufficient to cover the new style
- // or brace highlight positions then repaint the whole thing.
- if (paintState == paintAbandoned)
- PWindow(wMain) -> update();
- }
-
- paintState = notPainting;
-}