TVision
view release on metacpan or search on metacpan
tvision.git/source/tvision/teditor1.cpp view on Meta::CPAN
if (encoding == encSingleByte || s.size() == 0)
{
++p;
++width;
}
else
{
size_t p_ = 0, w_ = 0;
TText::next(s, p_, w_);
p += p_; width += w_;
}
}
Boolean TEditor::formatCell( TSpan<TScreenCell> cells, uint &width,
TStringView text, uint &p, TColorAttr color )
{
size_t p_ = 0, w_ = width;
if (TText::drawOne(cells, w_, text, p_, color))
{
p += p_; width = w_;
return True;
}
return False;
}
int TEditor::charPos( uint p, uint target )
{
uint pos = 0;
while( p < target )
{
TStringView chars = bufChars(p);
if( chars[0] == '\x9' )
pos |= 7;
nextChar(chars, p, pos);
}
return pos;
}
uint TEditor::charPtr( uint p, int target )
{
uint pos = 0;
uint lastP = p;
char c;
TStringView chars;
while( (int) pos < target && p < bufLen &&
(c = (chars = bufChars(p))[0]) != '\r' && c != '\n' )
{
lastP = p;
if( c == '\x09' )
pos |= 7;
nextChar(chars, p, pos);
}
if( (int) pos > target)
p = lastP;
return p;
}
Boolean TEditor::clipCopy()
{
Boolean res = False;
if( clipboard != this )
{
if( clipboard != 0 )
res = clipboard->insertFrom(this);
else
{
TClipboard::setText( TStringView( buffer + bufPtr(selStart),
selEnd - selStart ) );
res = True;
}
selecting = False;
update(ufUpdate);
}
return res;
}
void TEditor::clipCut()
{
if( clipCopy() == True )
deleteSelect();
}
void TEditor::clipPaste()
{
if( clipboard != this )
{
if( clipboard != 0 )
insertFrom(clipboard);
else
TClipboard::requestText();
}
}
void TEditor::convertEvent( TEvent& event )
{
if( event.what == evKeyDown )
{
if( (event.keyDown.controlKeyState & kbShift) != 0 &&
event.keyDown.charScan.scanCode >= 0x47 &&
event.keyDown.charScan.scanCode <= 0x51
)
event.keyDown.charScan.charCode = 0;
ushort key = event.keyDown.keyCode;
if( keyState != 0 )
{
if( (key & 0xFF) >= 0x01 && (key & 0xFF) <= 0x1A )
key += 0x40;
if( (key & 0xFF) >= 0x61 && (key & 0xFF) <= 0x7A )
key -= 0x20;
}
key = scanKeyMap(keyMap[keyState], key);
keyState = 0;
if( key != 0 )
{
if( (key & 0xFF00) == 0xFF00 )
{
keyState = (key & 0xFF);
clearEvent(event);
}
else
{
event.what = evCommand;
event.message.command = key;
}
}
}
}
Boolean TEditor::cursorVisible()
{
return Boolean((curPos.y >= delta.y) && (curPos.y < delta.y + size.y));
}
void TEditor::deleteRange( uint startPtr,
uint endPtr,
Boolean delSelect
)
{
if( hasSelection() == True && delSelect == True )
deleteSelect();
else
{
setSelect(curPtr, endPtr, True);
deleteSelect();
setSelect(startPtr, curPtr, False);
deleteSelect();
}
( run in 0.345 second using v1.01-cache-2.11-cpan-2398b32b56e )