[QScintilla] hotspot error on Linux
Matic Kukovec
matic.kukovec at pametnidom.si
Mon Aug 25 10:50:52 BST 2014
On 14.8.2014 11:05, Phil Thompson wrote:
> On 08/08/2014 11:25 pm, Matic Kukovec wrote:
>> The last 5 lines of the function are at the same indentation level as
>> the others,
>> Thunderbird just messed up the indentation.
>> Sorry.
>>
>> On 9.8.2014 0:19, Matic Kukovec wrote:
>>> Hi guys,
>>>
>>> I have a PyQt4 application with a QScintilla2 editor with Python3
>>> and the following function:
>>> def create_hotspot(node_tab):
>>> #Create the hotspot boundaries
>>> hotspot_line = node_tab.lines()-2
>>> hotspot_first_ch =
>>> node_tab.text(hotspot_line).index("-")
>>> hotspot_length = node_tab.lineLength(hotspot_line)
>>> hotspot_start =
>>> node_tab.positionFromLineIndex(hotspot_line, hotspot_first_ch)
>>> hotspot_end =
>>> node_tab.positionFromLineIndex(hotspot_line, hotspot_length)
>>> #Style the hotspot
>>> node_tab.SendScintilla(PyQt4.Qsci.QsciScintillaBase.SCI_STYLESETHOTSPOT,
>>> 2, True)
>>> node_tab.SendScintilla(PyQt4.Qsci.QsciScintillaBase.SCI_SETHOTSPOTACTIVEFORE,
>>> True, 0xff0000)
>>> node_tab.SendScintilla(PyQt4.Qsci.QsciScintillaBase.SCI_SETHOTSPOTACTIVEUNDERLINE,
>>> True)
>>> node_tab.SendScintilla(PyQt4.Qsci.QsciScintillaBase.SCI_STARTSTYLING, hotspot_start,
>>> 31)
>>> node_tab.SendScintilla(PyQt4.Qsci.QsciScintillaBase.SCI_SETSTYLING,
>>> hotspot_end, 2) <- ERROR
>>>
>>>
>>> On Windows this works great, but on Ubuntu this gives me the error
>>> at the last line with the message:
>>> Assertion [lengthStyle == 0 || (lengthStyle > 0 && lengthStyle +
>>> position <= style.Length())]
>>> failed at ../src/CellBuffer.cpp 426
>
> I'd need a short complete example that demonstrates the problem.
>
> However a better solution would be to add a decent hotspot API so you
> wouldn't need to fiddle with things like this. Do you want to propose
> such an API?
>
> Phil
Hi Phil,
Just figured out that when calling SendScintilla with SCI_SETSTYLING, I
used indexes that went out of the document scope.
That doesn't seem to raise an error on Windows, only on Linux.
As for the hotspot API, I think something like the indicators use would
be the best and the most consistent.
Scintilla uses only a single hotspot, so if adding multiple styles is
not an option, scratch that idea.
Setting up a hotspot style:
int setHotspotForeColor(QColor color, int hotspotNumber)
QColor hotspotForeColor(int hotspotNumber)
int sethotspotForeColorEnabled(bool useForegroundColor, int
hotspotNumber)
bool hotspotForeColorEnabled(int hotspotNumber)
int setHotspotBackColor(bool useBackgroundColor, QColor
color, int hotspotNumber)
QColor hotspotBackColor(int hotspotNumber)
int sethotspotBackColorEnabled(bool useBackgroundColor, int
hotspotNumber)
bool hotspotBackColorEnabled(int hotspotNumber)
int setHotspotUnderline(bool underline, int hotspotNumber)
bool hotspotUnderline(int hotspotNumber)
int setHotspotSingleLine(bool singleLine, int hotspotNumber)
bool hotspotSingleLine(int hotspotNumber)
Styling with a hotspot:
fillHotspotRange(int lineFrom, int indexFrom, int lineTo, int
indexTo, int hotspotNumber)
clearHotspotRange(int lineFrom, int indexFrom, int lineTo, int
indexTo, int hotspotNumber)
I hope I understood you correctly about the API proposal.
Matic
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/qscintilla/attachments/20140825/bb566b9b/attachment.html>
More information about the QScintilla
mailing list