@@ -177,7 +177,7 @@ void ParamWidget::step() { | |||||
engine::ParamQuantity* pq = getParamQuantity(); | engine::ParamQuantity* pq = getParamQuantity(); | ||||
if (pq) { | if (pq) { | ||||
float value = pq->getSmoothValue(); | float value = pq->getSmoothValue(); | ||||
// Trigger change event when the ParamQuantity value changes | |||||
// Dispatch change event when the ParamQuantity value changes | |||||
if (value != lastValue) { | if (value != lastValue) { | ||||
ChangeEvent eChange; | ChangeEvent eChange; | ||||
onChange(eChange); | onChange(eChange); | ||||
@@ -265,7 +265,7 @@ static void Engine_updateExpander(Engine* that, Module* module, bool side) { | |||||
} | } | ||||
if (expander.module != oldExpanderModule) { | if (expander.module != oldExpanderModule) { | ||||
// Trigger ExpanderChangeEvent event | |||||
// Dispatch ExpanderChangeEvent | |||||
Module::ExpanderChangeEvent e; | Module::ExpanderChangeEvent e; | ||||
e.side = side; | e.side = side; | ||||
module->onExpanderChange(e); | module->onExpanderChange(e); | ||||
@@ -579,7 +579,7 @@ void Engine::setPrimaryModule(Module* module) { | |||||
WriteLock lock(internal->mutex); | WriteLock lock(internal->mutex); | ||||
if (internal->primaryModule) { | if (internal->primaryModule) { | ||||
// Trigger UnsetPrimaryEvent | |||||
// Dispatch UnsetPrimaryEvent | |||||
Module::UnsetPrimaryEvent e; | Module::UnsetPrimaryEvent e; | ||||
internal->primaryModule->onUnsetPrimary(e); | internal->primaryModule->onUnsetPrimary(e); | ||||
} | } | ||||
@@ -587,7 +587,7 @@ void Engine::setPrimaryModule(Module* module) { | |||||
internal->primaryModule = module; | internal->primaryModule = module; | ||||
if (internal->primaryModule) { | if (internal->primaryModule) { | ||||
// Trigger SetPrimaryEvent | |||||
// Dispatch SetPrimaryEvent | |||||
Module::SetPrimaryEvent e; | Module::SetPrimaryEvent e; | ||||
internal->primaryModule->onSetPrimary(e); | internal->primaryModule->onSetPrimary(e); | ||||
} | } | ||||
@@ -611,7 +611,7 @@ void Engine::setSampleRate(float sampleRate) { | |||||
internal->sampleRate = sampleRate; | internal->sampleRate = sampleRate; | ||||
internal->sampleTime = 1.f / sampleRate; | internal->sampleTime = 1.f / sampleRate; | ||||
// Trigger SampleRateChangeEvent | |||||
// Dispatch SampleRateChangeEvent | |||||
Module::SampleRateChangeEvent e; | Module::SampleRateChangeEvent e; | ||||
e.sampleRate = internal->sampleRate; | e.sampleRate = internal->sampleRate; | ||||
e.sampleTime = internal->sampleTime; | e.sampleTime = internal->sampleTime; | ||||
@@ -733,7 +733,7 @@ void Engine::addModule(Module* module) { | |||||
// Add module | // Add module | ||||
internal->modules.push_back(module); | internal->modules.push_back(module); | ||||
internal->modulesCache[module->id] = module; | internal->modulesCache[module->id] = module; | ||||
// Trigger Add event | |||||
// Dispatch AddEvent | |||||
Module::AddEvent eAdd; | Module::AddEvent eAdd; | ||||
module->onAdd(eAdd); | module->onAdd(eAdd); | ||||
// Update ParamHandles' module pointers | // Update ParamHandles' module pointers | ||||
@@ -780,7 +780,7 @@ void Engine::removeModule_NoLock(Module* module) { | |||||
m->rightExpander.module = NULL; | m->rightExpander.module = NULL; | ||||
} | } | ||||
} | } | ||||
// Trigger Remove event | |||||
// Dispatch RemoveEvent | |||||
Module::RemoveEvent eRemove; | Module::RemoveEvent eRemove; | ||||
module->onRemove(eRemove); | module->onRemove(eRemove); | ||||
// Unset primary module | // Unset primary module | ||||
@@ -841,12 +841,13 @@ void Engine::bypassModule(Module* module, bool bypassed) { | |||||
} | } | ||||
// Set bypassed state | // Set bypassed state | ||||
module->setBypassed(bypassed); | module->setBypassed(bypassed); | ||||
// Trigger event | |||||
if (bypassed) { | if (bypassed) { | ||||
// Dispatch BypassEvent | |||||
Module::BypassEvent eBypass; | Module::BypassEvent eBypass; | ||||
module->onBypass(eBypass); | module->onBypass(eBypass); | ||||
} | } | ||||
else { | else { | ||||
// Dispatch UnBypassEvent | |||||
Module::UnBypassEvent eUnBypass; | Module::UnBypassEvent eUnBypass; | ||||
module->onUnBypass(eUnBypass); | module->onUnBypass(eUnBypass); | ||||
} | } | ||||
@@ -929,7 +930,7 @@ void Engine::addCable(Cable* cable) { | |||||
internal->cables.push_back(cable); | internal->cables.push_back(cable); | ||||
internal->cablesCache[cable->id] = cable; | internal->cablesCache[cable->id] = cable; | ||||
Engine_updateConnected(this); | Engine_updateConnected(this); | ||||
// Trigger input port event | |||||
// Dispatch input port event | |||||
{ | { | ||||
Module::PortChangeEvent e; | Module::PortChangeEvent e; | ||||
e.connecting = true; | e.connecting = true; | ||||
@@ -937,7 +938,7 @@ void Engine::addCable(Cable* cable) { | |||||
e.portId = cable->inputId; | e.portId = cable->inputId; | ||||
cable->inputModule->onPortChange(e); | cable->inputModule->onPortChange(e); | ||||
} | } | ||||
// Trigger output port event if its state went from disconnected to connected. | |||||
// Dispatch output port event if its state went from disconnected to connected. | |||||
if (!outputWasConnected) { | if (!outputWasConnected) { | ||||
Module::PortChangeEvent e; | Module::PortChangeEvent e; | ||||
e.connecting = true; | e.connecting = true; | ||||
@@ -970,7 +971,7 @@ void Engine::removeCable_NoLock(Cable* cable) { | |||||
if (cable2->outputModule == cable->outputModule && cable2->outputId == cable->outputId) | if (cable2->outputModule == cable->outputModule && cable2->outputId == cable->outputId) | ||||
outputIsConnected = true; | outputIsConnected = true; | ||||
} | } | ||||
// Trigger input port event | |||||
// Dispatch input port event | |||||
{ | { | ||||
Module::PortChangeEvent e; | Module::PortChangeEvent e; | ||||
e.connecting = false; | e.connecting = false; | ||||
@@ -978,7 +979,7 @@ void Engine::removeCable_NoLock(Cable* cable) { | |||||
e.portId = cable->inputId; | e.portId = cable->inputId; | ||||
cable->inputModule->onPortChange(e); | cable->inputModule->onPortChange(e); | ||||
} | } | ||||
// Trigger output port event if its state went from connected to disconnected. | |||||
// Dispatch output port event if its state went from connected to disconnected. | |||||
if (!outputIsConnected) { | if (!outputIsConnected) { | ||||
Module::PortChangeEvent e; | Module::PortChangeEvent e; | ||||
e.connecting = false; | e.connecting = false; | ||||
@@ -35,7 +35,7 @@ void Widget::setPosition(math::Vec pos) { | |||||
if (pos.equals(box.pos)) | if (pos.equals(box.pos)) | ||||
return; | return; | ||||
box.pos = pos; | box.pos = pos; | ||||
// Trigger Reposition event | |||||
// Dispatch Reposition event | |||||
RepositionEvent eReposition; | RepositionEvent eReposition; | ||||
onReposition(eReposition); | onReposition(eReposition); | ||||
} | } | ||||
@@ -50,7 +50,7 @@ void Widget::setSize(math::Vec size) { | |||||
if (size.equals(box.size)) | if (size.equals(box.size)) | ||||
return; | return; | ||||
box.size = size; | box.size = size; | ||||
// Trigger Resize event | |||||
// Dispatch Resize event | |||||
ResizeEvent eResize; | ResizeEvent eResize; | ||||
onResize(eResize); | onResize(eResize); | ||||
} | } | ||||
@@ -71,12 +71,12 @@ void Widget::setVisible(bool visible) { | |||||
return; | return; | ||||
this->visible = visible; | this->visible = visible; | ||||
if (visible) { | if (visible) { | ||||
// Trigger Show event | |||||
// Dispatch Show event | |||||
ShowEvent eShow; | ShowEvent eShow; | ||||
onShow(eShow); | onShow(eShow); | ||||
} | } | ||||
else { | else { | ||||
// Trigger Hide event | |||||
// Dispatch Hide event | |||||
HideEvent eHide; | HideEvent eHide; | ||||
onHide(eHide); | onHide(eHide); | ||||
} | } | ||||
@@ -159,7 +159,7 @@ void Widget::addChild(Widget* child) { | |||||
// Add child | // Add child | ||||
child->parent = this; | child->parent = this; | ||||
children.push_back(child); | children.push_back(child); | ||||
// Trigger Add event | |||||
// Dispatch Add event | |||||
AddEvent eAdd; | AddEvent eAdd; | ||||
child->onAdd(eAdd); | child->onAdd(eAdd); | ||||
} | } | ||||
@@ -171,7 +171,7 @@ void Widget::addChildBottom(Widget* child) { | |||||
// Add child | // Add child | ||||
child->parent = this; | child->parent = this; | ||||
children.push_front(child); | children.push_front(child); | ||||
// Trigger Add event | |||||
// Dispatch Add event | |||||
AddEvent eAdd; | AddEvent eAdd; | ||||
child->onAdd(eAdd); | child->onAdd(eAdd); | ||||
} | } | ||||
@@ -185,7 +185,7 @@ void Widget::addChildBelow(Widget* child, Widget* sibling) { | |||||
// Add child | // Add child | ||||
child->parent = this; | child->parent = this; | ||||
children.insert(it, child); | children.insert(it, child); | ||||
// Trigger Add event | |||||
// Dispatch Add event | |||||
AddEvent eAdd; | AddEvent eAdd; | ||||
child->onAdd(eAdd); | child->onAdd(eAdd); | ||||
} | } | ||||
@@ -200,7 +200,7 @@ void Widget::addChildAbove(Widget* child, Widget* sibling) { | |||||
child->parent = this; | child->parent = this; | ||||
it++; | it++; | ||||
children.insert(it, child); | children.insert(it, child); | ||||
// Trigger Add event | |||||
// Dispatch Add event | |||||
AddEvent eAdd; | AddEvent eAdd; | ||||
child->onAdd(eAdd); | child->onAdd(eAdd); | ||||
} | } | ||||
@@ -210,7 +210,7 @@ void Widget::removeChild(Widget* child) { | |||||
assert(child); | assert(child); | ||||
// Make sure `this` is the child's parent | // Make sure `this` is the child's parent | ||||
assert(child->parent == this); | assert(child->parent == this); | ||||
// Trigger Remove event | |||||
// Dispatch Remove event | |||||
RemoveEvent eRemove; | RemoveEvent eRemove; | ||||
child->onRemove(eRemove); | child->onRemove(eRemove); | ||||
// Prepare to remove widget from the event state | // Prepare to remove widget from the event state | ||||
@@ -226,7 +226,7 @@ void Widget::removeChild(Widget* child) { | |||||
void Widget::clearChildren() { | void Widget::clearChildren() { | ||||
for (Widget* child : children) { | for (Widget* child : children) { | ||||
// Trigger Remove event | |||||
// Dispatch Remove event | |||||
RemoveEvent eRemove; | RemoveEvent eRemove; | ||||
child->onRemove(eRemove); | child->onRemove(eRemove); | ||||
APP->event->finalizeWidget(child); | APP->event->finalizeWidget(child); | ||||
@@ -242,7 +242,7 @@ void Widget::step() { | |||||
Widget* child = *it; | Widget* child = *it; | ||||
// Delete children if a delete is requested | // Delete children if a delete is requested | ||||
if (child->requestedDelete) { | if (child->requestedDelete) { | ||||
// Trigger Remove event | |||||
// Dispatch Remove event | |||||
RemoveEvent eRemove; | RemoveEvent eRemove; | ||||
child->onRemove(eRemove); | child->onRemove(eRemove); | ||||
APP->event->finalizeWidget(child); | APP->event->finalizeWidget(child); | ||||
@@ -32,7 +32,7 @@ void ZoomWidget::setZoom(float zoom) { | |||||
return; | return; | ||||
this->zoom = zoom; | this->zoom = zoom; | ||||
// Trigger Dirty event | |||||
// Dispatch Dirty event | |||||
widget::EventContext cDirty; | widget::EventContext cDirty; | ||||
DirtyEvent eDirty; | DirtyEvent eDirty; | ||||
eDirty.context = &cDirty; | eDirty.context = &cDirty; | ||||
@@ -13,14 +13,14 @@ void EventState::setHovered(widget::Widget* w) { | |||||
return; | return; | ||||
if (hoveredWidget) { | if (hoveredWidget) { | ||||
// Trigger LeaveEvent | |||||
// Dispatch LeaveEvent | |||||
Widget::LeaveEvent eLeave; | Widget::LeaveEvent eLeave; | ||||
hoveredWidget->onLeave(eLeave); | hoveredWidget->onLeave(eLeave); | ||||
hoveredWidget = NULL; | hoveredWidget = NULL; | ||||
} | } | ||||
if (w) { | if (w) { | ||||
// Trigger EnterEvent | |||||
// Dispatch EnterEvent | |||||
EventContext cEnter; | EventContext cEnter; | ||||
cEnter.target = w; | cEnter.target = w; | ||||
Widget::EnterEvent eEnter; | Widget::EnterEvent eEnter; | ||||
@@ -35,7 +35,7 @@ void EventState::setDragged(widget::Widget* w, int button) { | |||||
return; | return; | ||||
if (draggedWidget) { | if (draggedWidget) { | ||||
// Trigger DragEndEvent | |||||
// Dispatch DragEndEvent | |||||
Widget::DragEndEvent eDragEnd; | Widget::DragEndEvent eDragEnd; | ||||
eDragEnd.button = dragButton; | eDragEnd.button = dragButton; | ||||
draggedWidget->onDragEnd(eDragEnd); | draggedWidget->onDragEnd(eDragEnd); | ||||
@@ -45,7 +45,7 @@ void EventState::setDragged(widget::Widget* w, int button) { | |||||
dragButton = button; | dragButton = button; | ||||
if (w) { | if (w) { | ||||
// Trigger DragStartEvent | |||||
// Dispatch DragStartEvent | |||||
EventContext cDragStart; | EventContext cDragStart; | ||||
cDragStart.target = w; | cDragStart.target = w; | ||||
Widget::DragStartEvent eDragStart; | Widget::DragStartEvent eDragStart; | ||||
@@ -61,7 +61,7 @@ void EventState::setDragHovered(widget::Widget* w) { | |||||
return; | return; | ||||
if (dragHoveredWidget) { | if (dragHoveredWidget) { | ||||
// Trigger DragLeaveEvent | |||||
// Dispatch DragLeaveEvent | |||||
Widget::DragLeaveEvent eDragLeave; | Widget::DragLeaveEvent eDragLeave; | ||||
eDragLeave.button = dragButton; | eDragLeave.button = dragButton; | ||||
eDragLeave.origin = draggedWidget; | eDragLeave.origin = draggedWidget; | ||||
@@ -70,7 +70,7 @@ void EventState::setDragHovered(widget::Widget* w) { | |||||
} | } | ||||
if (w) { | if (w) { | ||||
// Trigger DragEnterEvent | |||||
// Dispatch DragEnterEvent | |||||
EventContext cDragEnter; | EventContext cDragEnter; | ||||
cDragEnter.target = w; | cDragEnter.target = w; | ||||
Widget::DragEnterEvent eDragEnter; | Widget::DragEnterEvent eDragEnter; | ||||
@@ -87,14 +87,14 @@ void EventState::setSelected(widget::Widget* w) { | |||||
return; | return; | ||||
if (selectedWidget) { | if (selectedWidget) { | ||||
// Trigger DeselectEvent | |||||
// Dispatch DeselectEvent | |||||
Widget::DeselectEvent eDeselect; | Widget::DeselectEvent eDeselect; | ||||
selectedWidget->onDeselect(eDeselect); | selectedWidget->onDeselect(eDeselect); | ||||
selectedWidget = NULL; | selectedWidget = NULL; | ||||
} | } | ||||
if (w) { | if (w) { | ||||
// Trigger SelectEvent | |||||
// Dispatch SelectEvent | |||||
EventContext cSelect; | EventContext cSelect; | ||||
cSelect.target = w; | cSelect.target = w; | ||||
Widget::SelectEvent eSelect; | Widget::SelectEvent eSelect; | ||||
@@ -122,7 +122,7 @@ bool EventState::handleButton(math::Vec pos, int button, int action, int mods) { | |||||
widget::Widget* clickedWidget = NULL; | widget::Widget* clickedWidget = NULL; | ||||
if (!cursorLocked) { | if (!cursorLocked) { | ||||
// Trigger ButtonEvent | |||||
// Dispatch ButtonEvent | |||||
EventContext cButton; | EventContext cButton; | ||||
Widget::ButtonEvent eButton; | Widget::ButtonEvent eButton; | ||||
eButton.context = &cButton; | eButton.context = &cButton; | ||||
@@ -142,7 +142,7 @@ bool EventState::handleButton(math::Vec pos, int button, int action, int mods) { | |||||
setDragHovered(NULL); | setDragHovered(NULL); | ||||
if (clickedWidget && draggedWidget) { | if (clickedWidget && draggedWidget) { | ||||
// Trigger DragDropEvent | |||||
// Dispatch DragDropEvent | |||||
Widget::DragDropEvent eDragDrop; | Widget::DragDropEvent eDragDrop; | ||||
eDragDrop.button = dragButton; | eDragDrop.button = dragButton; | ||||
eDragDrop.origin = draggedWidget; | eDragDrop.origin = draggedWidget; | ||||
@@ -163,7 +163,7 @@ bool EventState::handleButton(math::Vec pos, int button, int action, int mods) { | |||||
if (clickedWidget | if (clickedWidget | ||||
&& clickTime - lastClickTime <= doubleClickDuration | && clickTime - lastClickTime <= doubleClickDuration | ||||
&& lastClickedWidget == clickedWidget) { | && lastClickedWidget == clickedWidget) { | ||||
// Trigger DoubleClickEvent | |||||
// Dispatch DoubleClickEvent | |||||
Widget::DoubleClickEvent eDoubleClick; | Widget::DoubleClickEvent eDoubleClick; | ||||
clickedWidget->onDoubleClick(eDoubleClick); | clickedWidget->onDoubleClick(eDoubleClick); | ||||
// Reset double click | // Reset double click | ||||
@@ -195,7 +195,7 @@ bool EventState::handleHover(math::Vec pos, math::Vec mouseDelta) { | |||||
if (draggedWidget) { | if (draggedWidget) { | ||||
bool dragHovered = false; | bool dragHovered = false; | ||||
if (!cursorLocked) { | if (!cursorLocked) { | ||||
// Trigger DragHoverEvent | |||||
// Dispatch DragHoverEvent | |||||
EventContext cDragHover; | EventContext cDragHover; | ||||
Widget::DragHoverEvent eDragHover; | Widget::DragHoverEvent eDragHover; | ||||
eDragHover.context = &cDragHover; | eDragHover.context = &cDragHover; | ||||
@@ -211,7 +211,7 @@ bool EventState::handleHover(math::Vec pos, math::Vec mouseDelta) { | |||||
dragHovered = true; | dragHovered = true; | ||||
} | } | ||||
// Trigger DragMoveEvent | |||||
// Dispatch DragMoveEvent | |||||
Widget::DragMoveEvent eDragMove; | Widget::DragMoveEvent eDragMove; | ||||
eDragMove.button = dragButton; | eDragMove.button = dragButton; | ||||
eDragMove.mouseDelta = mouseDelta; | eDragMove.mouseDelta = mouseDelta; | ||||
@@ -221,7 +221,7 @@ bool EventState::handleHover(math::Vec pos, math::Vec mouseDelta) { | |||||
} | } | ||||
if (!cursorLocked) { | if (!cursorLocked) { | ||||
// Trigger HoverEvent | |||||
// Dispatch HoverEvent | |||||
EventContext cHover; | EventContext cHover; | ||||
Widget::HoverEvent eHover; | Widget::HoverEvent eHover; | ||||
eHover.context = &cHover; | eHover.context = &cHover; | ||||
@@ -245,7 +245,7 @@ bool EventState::handleLeave() { | |||||
} | } | ||||
bool EventState::handleScroll(math::Vec pos, math::Vec scrollDelta) { | bool EventState::handleScroll(math::Vec pos, math::Vec scrollDelta) { | ||||
// Trigger HoverScrollEvent | |||||
// Dispatch HoverScrollEvent | |||||
EventContext cHoverScroll; | EventContext cHoverScroll; | ||||
Widget::HoverScrollEvent eHoverScroll; | Widget::HoverScrollEvent eHoverScroll; | ||||
eHoverScroll.context = &cHoverScroll; | eHoverScroll.context = &cHoverScroll; | ||||
@@ -257,7 +257,7 @@ bool EventState::handleScroll(math::Vec pos, math::Vec scrollDelta) { | |||||
} | } | ||||
bool EventState::handleDrop(math::Vec pos, const std::vector<std::string>& paths) { | bool EventState::handleDrop(math::Vec pos, const std::vector<std::string>& paths) { | ||||
// Trigger PathDropEvent | |||||
// Dispatch PathDropEvent | |||||
EventContext cPathDrop; | EventContext cPathDrop; | ||||
Widget::PathDropEvent ePathDrop(paths); | Widget::PathDropEvent ePathDrop(paths); | ||||
ePathDrop.context = &cPathDrop; | ePathDrop.context = &cPathDrop; | ||||
@@ -269,7 +269,7 @@ bool EventState::handleDrop(math::Vec pos, const std::vector<std::string>& paths | |||||
bool EventState::handleText(math::Vec pos, int codepoint) { | bool EventState::handleText(math::Vec pos, int codepoint) { | ||||
if (selectedWidget) { | if (selectedWidget) { | ||||
// Trigger SelectTextEvent | |||||
// Dispatch SelectTextEvent | |||||
EventContext cSelectText; | EventContext cSelectText; | ||||
Widget::SelectTextEvent eSelectText; | Widget::SelectTextEvent eSelectText; | ||||
eSelectText.context = &cSelectText; | eSelectText.context = &cSelectText; | ||||
@@ -279,7 +279,7 @@ bool EventState::handleText(math::Vec pos, int codepoint) { | |||||
return true; | return true; | ||||
} | } | ||||
// Trigger HoverText | |||||
// Dispatch HoverText | |||||
EventContext cHoverText; | EventContext cHoverText; | ||||
Widget::HoverTextEvent eHoverText; | Widget::HoverTextEvent eHoverText; | ||||
eHoverText.context = &cHoverText; | eHoverText.context = &cHoverText; | ||||
@@ -302,7 +302,7 @@ bool EventState::handleKey(math::Vec pos, int key, int scancode, int action, int | |||||
} | } | ||||
if (selectedWidget) { | if (selectedWidget) { | ||||
// Trigger SelectKeyEvent | |||||
// Dispatch SelectKeyEvent | |||||
EventContext cSelectKey; | EventContext cSelectKey; | ||||
Widget::SelectKeyEvent eSelectKey; | Widget::SelectKeyEvent eSelectKey; | ||||
eSelectKey.context = &cSelectKey; | eSelectKey.context = &cSelectKey; | ||||
@@ -318,7 +318,7 @@ bool EventState::handleKey(math::Vec pos, int key, int scancode, int action, int | |||||
return true; | return true; | ||||
} | } | ||||
// Trigger HoverKeyEvent | |||||
// Dispatch HoverKeyEvent | |||||
EventContext cHoverKey; | EventContext cHoverKey; | ||||
Widget::HoverKeyEvent eHoverKey; | Widget::HoverKeyEvent eHoverKey; | ||||
eHoverKey.context = &cHoverKey; | eHoverKey.context = &cHoverKey; | ||||
@@ -335,7 +335,7 @@ bool EventState::handleKey(math::Vec pos, int key, int scancode, int action, int | |||||
} | } | ||||
bool EventState::handleDirty() { | bool EventState::handleDirty() { | ||||
// Trigger DirtyEvent | |||||
// Dispatch DirtyEvent | |||||
EventContext cDirty; | EventContext cDirty; | ||||
Widget::DirtyEvent eDirty; | Widget::DirtyEvent eDirty; | ||||
eDirty.context = &cDirty; | eDirty.context = &cDirty; | ||||