windows-curses icon indicating copy to clipboard operation
windows-curses copied to clipboard

curses constant names for mouse wheel movements?

Open pjfarleyiii opened this issue 4 years ago • 0 comments

I have a python curses project trying to detect mouse wheel movements, and I understand that mouse wheel events by convention are reported as BUTTON4 and BUTTON5 events.

I am running on a Win10 system with python 3.8.7 and windows-curses 2.2.0, which I am given to understand uses the gohlke PDCurses wheels for the underlying curses implementation.

I can display the values of all of the BUTTON1 to BUTTON4 event constants but python 3.8.7 barfs if I try to use any BUTTON5 event names. It also does not recognize the BUTTONn_RESERVED_EVENT names for buttons 1-4.

print(       "B1={:08x},{:08x},{:08x},{:08x},{:08x}\n".format(
                    curses.BUTTON1_RELEASED, curses.BUTTON1_PRESSED, curses.BUTTON1_CLICKED, 
                    curses.BUTTON1_DOUBLE_CLICKED, curses.BUTTON1_TRIPLE_CLICKED) + \
                "B2={:08x},{:08x},{:08x},{:08x},{:08x}\n".format(
                    curses.BUTTON2_RELEASED, curses.BUTTON2_PRESSED, curses.BUTTON2_CLICKED, 
                    curses.BUTTON2_DOUBLE_CLICKED, curses.BUTTON2_TRIPLE_CLICKED) + \
                "B3={:08x},{:08x},{:08x},{:08x},{:08x}\n".format(
                    curses.BUTTON3_RELEASED, curses.BUTTON3_PRESSED, curses.BUTTON3_CLICKED, 
                    curses.BUTTON3_DOUBLE_CLICKED, curses.BUTTON3_TRIPLE_CLICKED) + \
                "B4={:08x},{:08x},{:08x},{:08x},{:08x}\n".format(
                    curses.BUTTON4_RELEASED, curses.BUTTON4_PRESSED, curses.BUTTON4_CLICKED, 
                    curses.BUTTON4_DOUBLE_CLICKED, curses.BUTTON4_TRIPLE_CLICKED) + \
                "S/C/A={:08x},{:08x},{:08x}".format(
                    curses.BUTTON_SHIFT, curses.BUTTON_CTRL, curses.BUTTON_ALT))

yields this output:

B1=00000001,00000002,00000004,00000008,00000010
B2=00000020,00000040,00000080,00000100,00000200
B3=00000400,00000800,00001000,00002000,00004000
B4=00008000,00010000,00020000,00040000,00080000
S/C/A=04000000,08000000,10000000

Any attempt to use a BUTTON5 constant name or BUTTONn_RESERVED_EVENT constant name fails:

Python 3.8.7 (tags/v3.8.7:6503f05, Dec 21 2020, 17:59:51) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
>>> print("B5={:08x}".format(curses.BUTTON5_RELEASED))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'curses' has no attribute 'BUTTON5_RELEASED'
>>> print("B5={:08x}".format(curses.BUTTON1_RESERVED_EVENT))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'curses' has no attribute 'BUTTON1_RESERVED_EVENT'

When I actually capture mouse wheel events, the wheel-up event is reported as 0x00010000 or BUTTON4_PRESSED, but the wheel-down event is reported as 0x 00200000, which has no constant name associated with it for which I can find any documentation.

This is a logging trace if curses.get_wch() and curses.getkey() results and the curses.getmouse() results when KEY_MOUSE is returned. I have manually annotated the getmouse display lines indicating what mouse action I actually performed.

DEBUG:root:wch='539' = 0x021b at (0,0) DEBUG:root:3ch='KEY_MOUSE at (0,0)' DEBUG:root:3ch KEY_MOUSE detected at (0,0) DEBUG:root:Mouse data id=0, x=60, y=31, z=0, bs=00000004 Button 1 click DEBUG:root:wch='539' = 0x021b at (0,0) DEBUG:root:3ch='KEY_MOUSE at (0,0)' DEBUG:root:3ch KEY_MOUSE detected at (0,0) DEBUG:root:Mouse data id=0, x=-1, y=-1, z=0, bs=00010000 wheel up once DEBUG:root:wch='539' = 0x021b at (0,0) DEBUG:root:3ch='KEY_MOUSE at (0,0)' DEBUG:root:3ch KEY_MOUSE detected at (0,0) DEBUG:root:Mouse data id=0, x=-1, y=-1, z=0, bs=00200000 wheel down once DEBUG:root:wch='539' = 0x021b at (0,0) DEBUG:root:3ch='KEY_MOUSE at (0,0)' DEBUG:root:3ch KEY_MOUSE detected at (0,0) DEBUG:root:Mouse data id=0, x=-1, y=-1, z=0, bs=00010000 wheel up once DEBUG:root:wch='539' = 0x021b at (0,0) DEBUG:root:3ch='KEY_MOUSE at (0,0)' DEBUG:root:3ch KEY_MOUSE detected at (0,0) DEBUG:root:Mouse data id=0, x=-1, y=-1, z=0, bs=00200000 wheel down once

Where can I find any documentation of the correct curses constant name(s) to use for detecting a "wheel down" action? Or do I just have to manually define my own BUTTON5 constant name for the wheel-down event?

TIA for any help or RTFM you can provide.

Peter

pjfarleyiii avatar Mar 07 '21 07:03 pjfarleyiii