mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2026-02-22 14:08:37 +01:00
Merge edge swipe functionality from matrixx567/edge_swipe (add nextion2text)
This commit is contained in:
committed by
github-actions[bot]
parent
8109346738
commit
8e0b85a12d
@@ -995,6 +995,117 @@ Button arm4
|
||||
prints crcval,2
|
||||
tCode.txt=""
|
||||
|
||||
Hotspot mSwipePrev
|
||||
Attributes
|
||||
ID : 35
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 0
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing left button if swiped on the left side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Hotspot mSwipeNext
|
||||
Attributes
|
||||
ID : 36
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 311
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing right button if swiped on the right side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",1
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bNext,1
|
||||
}
|
||||
|
||||
Hotspot mSwipeUp
|
||||
Attributes
|
||||
ID : 37
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 10
|
||||
y coordinate : 0
|
||||
Width : 300
|
||||
Height : 9
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing up button if swiped on the top side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="2")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Timer tmSerial
|
||||
Attributes
|
||||
ID : 5
|
||||
|
||||
@@ -2439,6 +2439,117 @@ Hotspot m4
|
||||
page popupLight
|
||||
}
|
||||
|
||||
Hotspot mSwipeNext
|
||||
Attributes
|
||||
ID : 74
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 311
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing right button if swiped on the right side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",1
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bNext,1
|
||||
}
|
||||
|
||||
Hotspot mSwipeUp
|
||||
Attributes
|
||||
ID : 75
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 10
|
||||
y coordinate : 0
|
||||
Width : 300
|
||||
Height : 9
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing up button if swiped on the top side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="2")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Hotspot mSwipePrev
|
||||
Attributes
|
||||
ID : 76
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 0
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing left button if swiped on the left side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Timer tmSerial
|
||||
Attributes
|
||||
ID : 30
|
||||
|
||||
@@ -958,6 +958,117 @@ Hotspot mSpecial
|
||||
page pageTest
|
||||
}
|
||||
|
||||
Hotspot mSwipeNext
|
||||
Attributes
|
||||
ID : 39
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 311
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing right button if swiped on the right side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",1
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bNext,1
|
||||
}
|
||||
|
||||
Hotspot mSwipeUp
|
||||
Attributes
|
||||
ID : 40
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 10
|
||||
y coordinate : 0
|
||||
Width : 300
|
||||
Height : 9
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing up button if swiped on the top side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="2")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Hotspot mSwipePrev
|
||||
Attributes
|
||||
ID : 41
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 0
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing left button if swiped on the left side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Timer tmSerial
|
||||
Attributes
|
||||
ID : 7
|
||||
|
||||
@@ -877,6 +877,117 @@ Button bPrev
|
||||
prints tSend.txt,0
|
||||
prints crcval,2
|
||||
|
||||
Hotspot mSwipeNext
|
||||
Attributes
|
||||
ID : 30
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 311
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing right button if swiped on the right side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",1
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bNext,1
|
||||
}
|
||||
|
||||
Hotspot mSwipeUp
|
||||
Attributes
|
||||
ID : 31
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 10
|
||||
y coordinate : 0
|
||||
Width : 300
|
||||
Height : 9
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing up button if swiped on the top side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="2")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Hotspot mSwipePrev
|
||||
Attributes
|
||||
ID : 32
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 0
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing left button if swiped on the left side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Timer tmSerial
|
||||
Attributes
|
||||
ID : 6
|
||||
|
||||
@@ -551,7 +551,7 @@ Button bDown
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 3
|
||||
x coordinate : 9
|
||||
y coordinate : 189
|
||||
Width : 64
|
||||
Height : 64
|
||||
@@ -1146,6 +1146,117 @@ Dual-state Button bt8
|
||||
prints tSend.txt,0
|
||||
prints crcval,2
|
||||
|
||||
Hotspot mSwipeNext
|
||||
Attributes
|
||||
ID : 41
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 311
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing right button if swiped on the right side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",1
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bNext,1
|
||||
}
|
||||
|
||||
Hotspot mSwipeUp
|
||||
Attributes
|
||||
ID : 42
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 10
|
||||
y coordinate : 0
|
||||
Width : 300
|
||||
Height : 9
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing up button if swiped on the top side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="2")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Hotspot mSwipePrev
|
||||
Attributes
|
||||
ID : 43
|
||||
Scope : local
|
||||
Dragging : 0
|
||||
Disable release event after dragging: 0
|
||||
Send Component ID : disabled
|
||||
Opacity : 127
|
||||
x coordinate : 0
|
||||
y coordinate : 5
|
||||
Width : 9
|
||||
Height : 470
|
||||
Effect : load
|
||||
Effect Priority : 0
|
||||
Effect Time : 300
|
||||
|
||||
Events
|
||||
Touch Press Event
|
||||
//This thin hotspot down the edge will intercept swipes
|
||||
//from the bezel into the screen area before the
|
||||
//Nextion register touch for any other components -
|
||||
//IF the hotspot is 'layered' at the top (use the up
|
||||
//arrow at the far left of the Nextion Editor Tool Bar).
|
||||
//
|
||||
//Calibrate how wide the edge hotspot has to be on your
|
||||
//own physical device using this screen to test the
|
||||
//x & y coordinates where the swipe is first detected.)
|
||||
//---------------------------
|
||||
//The navigation text is stored as local variable within tld.txt
|
||||
//Pressing left button if swiped on the left side of the screen
|
||||
//
|
||||
spstr tId.txt,tTmp.txt,"|",0
|
||||
if(tTmp.txt=="1")
|
||||
{
|
||||
click bPrev,1
|
||||
}
|
||||
|
||||
Timer tmSerial
|
||||
Attributes
|
||||
ID : 5
|
||||
|
||||
@@ -18,10 +18,10 @@ popupShutter
|
||||
20 Component(s)
|
||||
193 Line(s) of event code
|
||||
109 Unique line(s) of event code
|
||||
cardGrid
|
||||
39 Component(s)
|
||||
420 Line(s) of event code
|
||||
246 Unique line(s) of event code
|
||||
cardMedia
|
||||
33 Component(s)
|
||||
346 Line(s) of event code
|
||||
177 Unique line(s) of event code
|
||||
pageStartup
|
||||
19 Component(s)
|
||||
150 Line(s) of event code
|
||||
@@ -30,29 +30,29 @@ screensaver
|
||||
35 Component(s)
|
||||
292 Line(s) of event code
|
||||
235 Unique line(s) of event code
|
||||
cardMedia
|
||||
30 Component(s)
|
||||
331 Line(s) of event code
|
||||
171 Unique line(s) of event code
|
||||
cardAlarm
|
||||
35 Component(s)
|
||||
345 Line(s) of event code
|
||||
216 Unique line(s) of event code
|
||||
38 Component(s)
|
||||
360 Line(s) of event code
|
||||
222 Unique line(s) of event code
|
||||
popupLight
|
||||
27 Component(s)
|
||||
341 Line(s) of event code
|
||||
185 Unique line(s) of event code
|
||||
cardGrid
|
||||
42 Component(s)
|
||||
435 Line(s) of event code
|
||||
252 Unique line(s) of event code
|
||||
cardThermo
|
||||
41 Component(s)
|
||||
444 Line(s) of event code
|
||||
249 Unique line(s) of event code
|
||||
44 Component(s)
|
||||
459 Line(s) of event code
|
||||
255 Unique line(s) of event code
|
||||
cardEntities
|
||||
74 Component(s)
|
||||
1159 Line(s) of event code
|
||||
481 Unique line(s) of event code
|
||||
77 Component(s)
|
||||
1174 Line(s) of event code
|
||||
487 Unique line(s) of event code
|
||||
|
||||
Total
|
||||
12 Page(s)
|
||||
356 Component(s)
|
||||
3894 Line(s) of event code
|
||||
1080 Unique line(s) of event code
|
||||
371 Component(s)
|
||||
3969 Line(s) of event code
|
||||
1086 Unique line(s) of event code
|
||||
|
||||
Reference in New Issue
Block a user