Добрый день.
Есть
<widget type="select" multiple>
Хочу при щелчке по элементу в дереве сделать текст редактируемым (изменить имя файла в дереве каталогов). Для этого вставляю в DOM <widget type=input>.
Но проблема в том, что по щелчку левой кнопкой мыши по элементу в дереве, в handle_mouse() не приходят события MOUSE_UP, MOUSE_DOWN и важное в данном случае MOUSE_CLICK.
Для правой кнопки мыши все события приходят.
Что делать?
Что означает событие 0xFFF?
Спасибо.
Здравствуйте, Jukier, Вы писали:
J>Но проблема в том, что по щелчку левой кнопкой мыши по элементу в дереве, в handle_mouse() не приходят события MOUSE_UP, MOUSE_DOWN и важное в
MOUSE_DOWN приходит. Вернее (MOUSE_DOWN | HANDLED) ибо select обрабатывает мышиные события.
Можно также ловить (MOUSE_DOWN | SINKING) если требуется обрбатывать событие до behavior:select.
А вообще всё несколько сложнее, вот более-менее полный пример в Sciter:
<html>
<head>
<style>
widget.editable[type="select"]
{
prototype: EditableList;
}
widget.editable[type="select"] caption[editor]
{
behavior:edit;
cursor:text;
outline:1px solid red;
}
</style>
<script type="text/tiscript">
class EditableList
{
function attached()
{
this.editorCandidate = null;
this.preValue = null;
}
function onOptionTextChanged(option, previousText, newText) {}
function onControlEvent(evt)
{
if( evt.type == Event.SELECT_SELECTION_CHANGED )
{
var editor = this.$(caption[editor]);
if( editor ) this.removeEditor(editor);
}
}
function onFocus(evt)
{
if( evt.type == (Event.LOST_FOCUS | Event.SINKING ) &&
view.focus.parent.$p(widget) === this )
this.removeEditor(view.focus);
}
function onMouse(evt)
{
switch( evt.type )
{
case Event.MOUSE_DOWN:
if(evt.target.$is(option:current>caption)) // tick on <caption> in current option
this.editorCandidate = evt.target;
else
this.editorCandidate = null;
break;
case Event.MOUSE_UP:
if(evt.target === this.editorCandidate) // tick on <caption> in current option
this.setupEditor(evt.target);
this.editorCandidate = null;
break;
}
}
function setupEditor(textEl)
{
this.preValue = textEl.text;
textEl.attributes["editor"] = true;
textEl.style#display; // force style to be updated and behavior:edit; to be removed.
textEl.xcall(#selectAll,true);
view.focus = textEl;
}
function removeEditor(editor)
{
var text = editor.value;
editor.attributes["editor"] = undefined;
editor.style#display; // force style to be updated and behavior:edit; to be removed.
if( text != this.preValue )
this.onOptionTextChanged(editor.parent, this.preValue, text);
return true;
}
}
</script>
</head>
<body>
<widget .editable type="select" multiple >
<option><caption>One</caption></option>
<option><caption>Two</caption></option>
<option><caption>Three</caption></option>
</widget>
</body>
</html>
Спасибо.
А как сделать, чтобы при вводе текста edit расширялся на ширину введенного текста? Как узнать ширину текста в px?