{.experimental: "codeReordering".}
import winim
import tables
, lists
const
windoww_main_loop_break* = -1
window_loop_continue* = 1
window_unregister_message* = 32786
type
Margins* = object
up*: int
down*: int
left*: int
right*: int
Win32_Point* = object
x*: int
y*: int
Win32_Command_ID* = distinct int
Win32_Event_Object = ref object of RootObj
Win32_Event* = ref object of Win32_Event_Object
window*: Win32_Window
mOrigin*: HWND
mMsg*: UINT
command_id*: Win32_Command_ID
w_param*: WPARAM
l_param*: LPARAM
userData*: int
skip*: bool
propagationLevel*: int
l_result*: LRESULT
key_status*: array[256, int8] # use int8 so that we can test if it < 0
mouse_Position*: Win32_Point
client_Position*: Win32_Point
# Event handler with event object as parameter.
Win32_Event_Proc* = proc (event: Win32_Event)
# Event handler without parameter.
Win32_Event_Neat_Proc* = proc ()
Win32_Message_Loop_Hook_Proc* = proc (msg: var MSG
, modal_hwnd: HWND
): int
## Hook procedure to the message loop. *modalHwnd* is not 0 if it is a modal
## window message loop instead of main loop. Returns > 0 to continue(skip) the loop,
## and returns < 0 to break(exit) the loop.
##
Win32_Hook_Proc* = proc ( self: Win32_Window
, message: UINT
, wParam: WPARAM
, lParam: LPARAM
): bool
Win32_Event_Connection* = object
message: UINT
id*: Win32_Command_ID
handler*: Win32_Event_Proc
neat_handler*: Win32_Event_Neat_Proc
user_data*: int
is_undeletable*: bool
Win32_Drop_Target* = object
lpVtbl*: ptr IDropTargetVtbl
vtbl*: IDropTargetVtbl
self*: Win32_Window
effect*: DWORD
Win32_Draggable_Info* = ref object
is_enabled*: bool
is_in_client*: bool
is_dragging*: bool
start_mouse_position*: Win32_Point
start_position*: Win32_Point
connection*: array[3,Win32_Event_Connection] # move, up, down
Direction* = object
up*: int
down*: int
left*: int
right*: int
Win32_Sizing_Info* = ref object
border*: Direction
dragging*: bool
ready*: tuple[up, down, left, right: bool]
offset*: Direction
connection*: array[3,Win32_Event_Connection] # move, up, down
Win32_Accelerator_Table* = ref object of RootObj
handle*: HACCEL
accels*: seq[ACCEL]
was_modified*: bool
Win32_Status_Bar* = ref object of Win32_Window
filed_Numbers*: int
widths*: array[256, int32]
help_index*: int
size_connection*: Win32_Event_Connection
Win32_Gdi_Object* = ref object of RootObj
handle*: HANDLE
is_deletable*: bool
Win32_Brush* = ref object of Win32_Gdi_Object
color*: int32
style*: DWORD
Win32_Pen* = ref object of Win32_Gdi_Object
color*: int32
style*: DWORD
width*: int
Win32_Bitmap* = ref object of Win32_Gdi_Object
width*: int
height*: int
depth*: int
Win32_Icon* = ref object of Win32_Gdi_Object
width*: int
height*: int
Win32_Size* = object
width*: int
height*: int
Win32_Cursor* = ref object of Win32_Gdi_Object
width*: int
height*: int
hotspot*: Win32_Point
has_icon_resource*: bool
Win32_Font* = ref object of Win32_Gdi_Object
point_size*: float
family*: int
weight*: int
is_italic*: bool
underline*: bool
strikeout*: bool
face_name*: string
encoding*: int
Win32_Menu_Item_Kind* = enum
Normal
Separator
Check
Radio
Sub_Menu
Win32_Menu_Base* = ref object of RootObj
h_menu*: HMENU
Win32_Menu_Item* = ref object of RootObj
id*: Win32_Command_ID
menu_item_kind*: Win32_Menu_Item_Kind
text*: string
help_string*: string
bitmap*: Win32_Bitmap
submenu*: Win32_Menu
data*: int
Win32_Menu* = ref object of Win32_Menu_Base
bitmap*: Win32_Bitmap
item_list*: seq[Win32_Menu_Item]
is_deletable*: bool
Win32_Toolbar_Tool* = ref object of RootObj
bitmap*: Win32_Bitmap
short_help*: string
long_help*: string
menu*: Win32_Menu
Win32_Toolbar* = ref object of Win32_Window
tools*: seq[Win32_Toolbar_Tool]
size_connection*: Win32_Event_Connection
command_connection*: Win32_Event_Connection
Win32_Image_List* = ref object of RootObj
handle*: HIMAGELIST
Win32_Rebar* = ref object of Win32_Control
controls*: seq[Win32_Control]
image_list*: Win32_Image_List
size_connection*: Win32_Event_Connection
dragging*: bool
can_min_max*: bool
can_drag*: bool
Win32_Control* = ref object of Win32_Window_Object
Win32_Window_Object = object of RootObj
hwnd*: HWND
parent_window*: Win32_Window
sub_windows*: seq[Win32_Window]
data*: int
class_name*: string
is_registered*: bool
system_connection_table*: Table[UINT, DoublyLinkedList[Win32_Event_Connection]]
connection_table*: Table[UINT, DoublyLinkedList[Win32_Event_Connection]]
margins*: Margins
status_bar*: Win32_Status_Bar
toolbars*: seq[Win32_Toolbar]
rebar*: Win32_Rebar
font*: Win32_Font
background_color*: int32
foreground_color*: int32
background_brush*: Win32_Brush
cursor*: Win32_Cursor
overrided_cursor*: Win32_Cursor
accelerator_table*: Win32_Accelerator_Table
popup_menu*: Win32_Menu
save_focus_hwnd*: HWND
is_focusable*: bool
mouse_In_window*: bool
max_size*: Win32_Size
min_size*: Win32_Size
dummy_parent*: HWND
tip_hwnd*: HWND
sizing_info*: Win32_Sizing_Info
draggable_info*: Win32_Draggable_Info
drop_target*: ref Win32_Drop_Target
hook_proc*: Win32_Hook_Proc
Win32_Window* = ref object of Win32_Window_Object