qstescintillabase.cpp
来自「porting scintilla to qt」· C++ 代码 · 共 713 行 · 第 1/2 页
CPP
713 行
Point pos(event->x(),event->y()); if(event->button() == Qt::LeftButton){ unsigned clickTime; if(triple_click.isActive() && (event->globalPos() - triple_click_at).manhattanLength() < QApplication::startDragDistance()) clickTime = lastClickTime + Platform::DoubleClickTime() - 1; else clickTime = lastClickTime + Platform::DoubleClickTime() + 1; triple_click.stop(); bool shift = event->modifiers() & Qt::ShiftModifier; bool ctrl = event->modifiers() & Qt::ControlModifier; bool alt = event->modifiers() & Qt::AltModifier;// ButtonDown(pos,clickTime,shift,ctrl,alt); change alt<->shift just to cheat reflection ButtonDown(pos,clickTime,alt,ctrl,shift); }else if(event->button() == Qt::MidButton){ QClipboard *cb = QApplication::clipboard(); if(cb->supportsSelection()){ int ppos = PositionFromLocation(pos); SetSelection(ppos,ppos); pasteFromClipboard(QClipboard::Selection); } }}//reimplemented to handle mouse releasesvoid QSteScintillaBase::mouseReleaseEvent(QMouseEvent *event){ if(HaveMouseCapture() && event->button() == Qt::LeftButton){ //inherits from Editor bool ctrl = event->modifiers() & Qt::ControlModifier; ButtonUp(Point(event->x(),event->y()),0,ctrl); }}//reimplemented to handle viewport paintvoid QSteScintillaBase::paintEvent(QPaintEvent *event){ Surface *sw = Surface::Allocate(); if(!sw) return; paintState = painting;//inherits from Editor const QRect &rect = event->rect(); rcPaint.left = rect.left();//inherits from Editor rcPaint.top = rect.top(); rcPaint.bottom = rect.bottom() + 1; rcPaint.right = rect.right() + 1; PRectangle rctext = GetTextRectangle(); paintingAllText = rcPaint.Contains(rctext); QPainter painter(viewport()); sw->Init(&painter); sw->SetUnicodeMode(CodePage() == SC_CP_UTF8); Paint(sw,rcPaint); delete sw; if(paintState == paintAbandoned) update(); paintState = notPainting;}//reimplemented to handle resizesvoid QSteScintillaBase::resizeEvent(QResizeEvent *event){ ChangeSize();//inherits from Editor}//reimplemented to handle scrollingvoid QSteScintillaBase::scrollContentsBy(int dx,int dy){}void QSteScintillaBase::handleTimer(){ Tick();//inherits from Editor}void QSteScintillaBase::handleVSb(int value){ ScrollTo(value);}void QSteScintillaBase::handleHSb(int value){ HorizontalScrollTo(value);}void QSteScintillaBase::handleSelection(){ if(!QApplication::clipboard()->ownsSelection()) unclaimSelection();}sptr_t QSteScintillaBase::WndProc(unsigned int msg,uptr_t wparam,sptr_t lparam){ switch(msg){ case SCI_GETDIRECTFUNCTION: return reinterpret_cast<sptr_t>(DirectFunction); case SCI_GETDIRECTPOINTER: return reinterpret_cast<sptr_t>(this); } return ScintillaBase::WndProc(msg,wparam,lparam);}sptr_t QSteScintillaBase::DirectFunction(QSteScintillaBase *qste, unsigned int msg,uptr_t wparam,sptr_t lparam){ return qste->WndProc(msg,wparam,lparam);}void QSteScintillaBase::Initialise(){ SetTicking(true);//inherits from Editor}void QSteScintillaBase::Finalise(){ SetTicking(false); ScintillaBase::Finalise();}void QSteScintillaBase::StartDrag()//overload of Editor{ QMimeData *mime = new QMimeData; mime->setText(textRange(&drag));//drag inherits from Editor QDrag *d = new QDrag(this); d->setMimeData(mime); Qt::DropActions actions = Qt::CopyAction; if(!pdoc->IsReadOnly()) actions |= Qt::MoveAction; Qt::DropAction act = d->start(actions); if(act == Qt::MoveAction && d->target() != this) ClearSelection(); inDragDrop = ddNone;//inDragDrop inherits from Editor SetDragPosition(-1);//inDragDrop inherits from Editor}sptr_t QSteScintillaBase::DefWndProc(unsigned int,uptr_t,sptr_t){ return 0;}void QSteScintillaBase::SetTicking(bool on){ if(timer.ticking != on){//timer inherits from scintillaBase->Editor timer.ticking = on; if(timer.ticking){ qtimer.start(timer.tickSize); }else{ qtimer.stop(); } } timer.ticksToWait = caret.period;//caret inherits from scintillabase->Editor}void QSteScintillaBase::SetMouseCapture(bool on){ if(mouseDownCaptures){//mouseDownCaptures inherits from scintillaBase->Editor if(on) viewport()->grabMouse(); else viewport()->releaseMouse(); } capturedMouse = on;}bool QSteScintillaBase::HaveMouseCapture(){ return capturedMouse;}void QSteScintillaBase::SetVerticalScrollPos(){ verticalScrollBar()->setValue(topLine);//topLine inherits from scintillaBase->Editor}void QSteScintillaBase::SetHorizontalScrollPos(){ horizontalScrollBar()->setValue(xOffset);//xOffset inherits from scintillaBase->Editor}bool QSteScintillaBase::ModifyScrollBars(int nmax,int npage){ verticalScrollBar()->setMinimum(0); horizontalScrollBar()->setMinimum(0); verticalScrollBar()->setMaximum(nmax - npage + 1); horizontalScrollBar()->setMaximum(scrollWidth);//scrollWidth inherits from scintillaBase->Editor verticalScrollBar()->setSingleStep(1);//will get from QSteGlobalProper verticalScrollBar()->setPageStep(npage); horizontalScrollBar()->setPageStep(scrollWidth/10); return true;}void QSteScintillaBase::reconfigureScrollBars(){ bool show = (horizontalScrollBarVisible && wrapState == eWrapNone);//wrap & eWrapNone inherit from scintillaBase->Editor setHorizontalScrollBarPolicy(show? Qt::ScrollBarAlwaysOn : Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(verticalScrollBarVisible ? Qt::ScrollBarAlwaysOn : Qt::ScrollBarAlwaysOff);}void QSteScintillaBase::NotifyChange(){ emit qsteDocChanged();}void QSteScintillaBase::NotifyParent(SCNotification scn)//inherits from Editor{ switch(scn.nmhdr.code){ case SCN_CALLTIPCLICK: emit qsteCallTipClick(scn.position); break; case SCN_AUTOCSELECTION: printf("notify autocomplete\n"); emit qsteAutoCompleteSelect(scn.text,scn.lParam); break; case SCN_CHARADDED: emit qsteAddCharacter(scn.ch); break; case SCN_DOUBLECLICK: emit qsteDoubleClick(scn.position,scn.line,scn.modifiers); break; case SCN_DWELLEND: emit qsteDwellEnd(scn.position,scn.x,scn.y); break; case SCN_DWELLSTART: emit qsteDwellStart(scn.position,scn.x,scn.y); break; case SCN_HOTSPOTCLICK: emit qsteHotspotClick(scn.position,scn.modifiers); break; case SCN_HOTSPOTDOUBLECLICK: emit qsteHotspotDoubleClick(scn.position,scn.modifiers); break; case SCN_MACRORECORD: emit qsteMarcoRecordExecute(scn.message,scn.wParam,scn.lParam); break; case SCN_MARGINCLICK: emit qsteMarginClick(scn.position,scn.modifiers,scn.margin); break; case SCN_MODIFYATTEMPTRO: emit qsteModifiedReadOnly(); break; case SCN_NEEDSHOWN: emit qsteNeedShown(scn.position,scn.length); break; case SCN_PAINTED:// emit qstep(); break; case SCN_SAVEPOINTLEFT: emit qsteSavePointLeft(); break; case SCN_SAVEPOINTREACHED: emit qsteSavePointReached(); break; case SCN_STYLENEEDED: emit qsteStyleNeeded(scn.position); break; case SCN_UPDATEUI: emit qsteUpdated(); break; case SCN_USERLISTSELECTION: emit qsteUserListSelection(scn.text,scn.wParam); break; case SCN_ZOOM: emit qsteZoom(); break; default: //no undefined msgId break; }}void QSteScintillaBase::CopyToClipboard(const SelectionText &seltext){ QApplication::clipboard()->setText(textRange(&seltext));}void QSteScintillaBase::Copy(){ if(currentPos != anchor){ SelectionText text; CopySelectionRange(&text);//inherits from Editor CopyToClipboard(text); }}void QSteScintillaBase::Paste(){ pasteFromClipboard(QClipboard::Clipboard);}void QSteScintillaBase::CreateCallTipWindow(PRectangle rc){ if(!ct.wCallTip.Created())//ct inher ct.wCallTip = ct.wDraw = new QSteCallTip(this); QSteCallTip *wtip = reinterpret_cast<QSteCallTip *>(ct.wCallTip.GetID()); wtip->resize(rc.right - rc.left,rc.bottom - rc.top); ct.wCallTip.Show();}void QSteScintillaBase::AddToPopUp(const char *label,int cmd,bool enable){ QStePopup *pmenuitem = static_cast<QStePopup *>(popup.GetID());//popup inherits from ScintillaBase if(*label) pmenuitem->addItem(qApp->translate("ContextMenu",label),cmd,enable,this); else pmenuitem->addSeparator();}void QSteScintillaBase::ClaimSelection(){ bool isSel = (currentPos != anchor); if(isSel){ QClipboard *cb = QApplication::clipboard(); if(cb->supportsSelection()){ SelectionText text; CopySelectionRange(&text); if(text.s) cb->setText(text.s,QClipboard::Selection); } primarySelection = true;//primarySelection inherits from Editor }else{ primarySelection = false; } emit qsteSelectChanged(isSel);}void QSteScintillaBase::unclaimSelection(){ if(primarySelection){ primarySelection = false; viewport()->update(); }}QString QSteScintillaBase::textRange(const SelectionText *seltext){ if(!seltext->s) return QString(); if(IsUnicodeMode())//inherits from Editor return QString::fromUtf8(seltext->s); else return QString::fromLatin1(seltext->s);}void QSteScintillaBase::pasteFromClipboard(QClipboard::Mode mode){ QString str = QApplication::clipboard()->text(mode); if(str.isEmpty()) return; pdoc->BeginUndoAction(); ClearSelection();//inherts from Editor int len; const char *s; QByteArray bytes; if(IsUnicodeMode()){ bytes = str.toUtf8(); len = bytes.length(); s = bytes.data(); }else{ bytes = str.toLatin1(); len = bytes.length(); s = bytes.data(); } if(len > 0) pdoc->InsertString(currentPos,s,len); SetEmptySelection(currentPos + len); pdoc->EndUndoAction(); NotifyChange(); Redraw();//inherits from Editor}void QSteScintillaBase::startAutoComplete(){}bool QSteScintillaBase::gotoBraceMatch(){ return true;}void QSteScintillaBase::selectBraceMatch(){}void QSteScintillaBase::insertAbbreviation(){}void QSteScintillaBase::expandAbbreviation(){}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?