kolibrios-fun/programs/develop/libraries/box_lib/branch/box_lib.mac
Alexey Teplov ( 425d79e6aa Support new flags for checkbox.
git-svn-id: svn://kolibrios.org@1660 a494cfbc-eb01-0410-851d-a64ba20cac60
2010-10-15 07:08:53 +00:00

400 lines
18 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use EditBox ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ed_width equ [edi] ;ширина компонента
ed_left equ [edi+4] ;положение по оси х
ed_top equ [edi+8] ;положение по оси у
ed_color equ [edi+12] ;цвет фона компонента
shift_color equ [edi+16] ;=0x6a9480 для примера возьем желеный цвет бокса
ed_focus_border_color equ [edi+20] ;цвет рамки компонента
ed_blur_border_color equ [edi+24] ;цвет не активного компонента
ed_text_color equ [edi+28] ;цвет текста
ed_max equ [edi+32] ;кол-во символов которые можно максимально ввести
ed_text equ [edi+36] ;указатель на буфер
ed_mouse_variable equ [edi+40] ; указатель на переменную для бокса/группы
ed_flags equ [edi+44] ;флаги
bp_flags equ [ebp+44] ;в некоторых процедурах edi используется, взамен указатель храниться в ebp
ed_size equ [edi+48] ;кол-во символов
bp_size equ [ebp+48] ;кол-во симвполов, для адресации испльзуется ebpб edi занят
ed_pos equ [edi+52] ;позиция курсора
ed_offset equ [edi+56] ;смещение
cl_curs_x equ [edi+60] ;предыдущее координата курсора по х
cl_curs_y equ [edi+64] ;предыдущее координата курсора по у
ed_shift_pos equ [edi+68] ;положение курсора
ed_shift_pos_old equ [edi+72] ;старое положение курсора
ed_struc_size=76
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Bit mask from editbox
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ed_figure_only= 1000000000000000b ;одни символы
ed_always_focus= 100000000000000b
ed_focus= 10b ;фокус приложения
ed_shift_on= 1000b ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift
ed_shift_on_off=1111111111110111b
ed_shift= 100b ;включается при нажатии на shift т.е. если нажимаю
ed_shift_off= 1111111111111011b
ed_shift_bac= 10000b ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение
ed_shift_bac_cl=1111111111101111b ;очистка при удалении выделения
ed_shift_cl= 1111111111100011b
ed_shift_mcl= 1111111111111011b
ed_left_fl= 100000b
ed_right_fl= 1111111111011111b
ed_offset_fl= 1000000b
ed_offset_cl= 1111111110111111b
ed_insert= 10000000b
ed_insert_cl= 1111111101111111b
ed_mouse_on = 100000000b
ed_mous_adn_b= 100011000b
ed_mouse_on_off=1111111011111111b
ed_height=14 ; высота
struc edit_box width,left,top,color,shift_color,focus_border_color,\
blur_border_color,text_color,max,text,mouse_variable,flags,size,pos
{
.width dd width
.left dd left
.top dd top
.color dd color
.shift_color dd shift_color
.focus_border_color dd focus_border_color
.blur_border_color dd blur_border_color
.text_color dd text_color
.max dd max
.text dd text
.mouse_variable dd mouse_variable
.flags dd flags+0
.size dd size+0
.pos dd pos+0
.offset dd 0
.cl_curs_x dd 0
.cl_curs_y dd 0
.shift dd 0
.shift_old dd 0
}
macro edit_boxes_set_sys_color start,end,color_table
{
mov edi,start
mov ecx,((end-start)/ed_struc_size)
mov esi,color_table
@@:
mov eax,dword [esi+36]
mov ebx,dword [esi+20]
push dword eax
pop dword ed_focus_border_color
shr bh,1
shr bl,1
shr ah,1
shr al,1
add ah,bh
add al,bl
ror eax,16
ror ebx,16
shr bl,1
shr al,1
add al,bl
ror eax,16
mov dword ed_blur_border_color,eax
mov dword shift_color,eax
add edi,ed_struc_size
loop @b
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use CheckBox ;
;Last change 12.10.2010 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ch_struc_size=36 ;размер структуры
ch_flag_en=10b ;флаг установленного чек бокса.
ch_flag_top=0x0 ;флаг расположения текста вверху т.е. 3-й бит
ch_flag_middle=100b ;флаг расположения текста в центре т.е. 4-й бит.
ch_flag_bottom=1000b ;флаг расположения текста в низу т.е. по умолчанию принимается значение внизу т.е. отсуствие 3-го и 4-го бита
ch_left_s equ [ebp] ;кордината начала рисования по х
ch_top_s equ [ebp+4] ;координата начала рисования по у
ch_text_margin equ [ebp+8] ;=4 расстояние от прямоугольника чек бокса до надписи
ch_color equ [ebp+12] ;цвет внутри checkbox
ch_border_color equ [ebp+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно
ch_text_color equ [ebp+20] ;[edi+4] ;цвет текста
ch_text_ptr equ [ebp+24] ;указатель на начало текстовой строки
ch_flags equ [ebp+28] ;флаги
ch_sz_str equ [ebp+32] ;длинна строки, вычисляется при инициализации компонента
struc check_box left_s,top_s,ch_text_margin,color,border_color,text_color,text,flags
{ ;структура параметров для чек бокса
.left_s: dd left_s ;+0 положение по х dw + размер dw
.top_s: dd top_s ;+4 положение по у dw + размер dw
.ch_text_margin: dd ch_text_margin ;расстояние от прямоугольника чек бокса до надписи
.color: dd color ;цвет внутри чекбокса
.border_color: dd border_color ;цвет рамки
.text_color: dd text_color ;цвет надписи
.text: dd text ;адрес в коде программы где расположен текст
.flags: dd flags+0 ;флаги
.size_of_str: dd 0x0 ;длинна строки, вычисляется при инициализации компонента
}
;Макрос проверки щелчка мышки над группой checkboxes.
macro init_checkboxes start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;указатель на первый checkbox
call [check_box_mouse] ;макрос проверки мышки над checkbox'ом
add ebp,ch_struc_size
loop @b
}
;Макрос отрисовки группы checkboxes.
macro checkboxes_draw start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;указатель на первый checkbox
call [check_box_draw] ;нарисовать checkbox
add ebp,ch_struc_size
loop @b
}
;Макрос отрисовки группы checkboxes.
macro checkboxes_draw start,end
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
@@:
push ebp ;указатель на первый checkbox
call [check_box_draw] ;нарисовать checkbox
add ebp,ch_struc_size
loop @b
}
macro check_boxes_set_sys_color start,end,color_table
{
mov ebp,start
mov ecx,((end-start)/ch_struc_size)
mov esi,color_table
@@:
push dword [esi+32] ;цвет текста в рабочей области окна
pop dword ch_text_color
push dword [esi+36] ;цвет графики в окне (разделительные линии и т.п.)
pop dword ch_border_color
add ebp,ch_struc_size
loop @b
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use OptionBox ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags
{ ;структура параметров для чек бокса
op_flag_en=10b
.option_group: dd point_gr
.left: dw left ;+0 ;положение по х
.top: dw top ;положение по у
.ch_text_margin: dd op_text_margin ;расстояние от прямоугольника чек бокса до надписи
.ch_size: dd op_size ;размер квадрата чек бокса, для примера 12
.color: dd color ;цвет внутри чекбокса
.border_color: dd border_color ;цвет рамки
.text_color: dd text_color ;цвет надписи
.text: dd text ;адрес в коде программы где расположен текст
.ch_text_length: dd op_text_length ;длинна строки с символами
.flags: dd flags+0 ; флаги
}
option_group equ [edi]
op_left equ [edi+4] ;координата начала рисования по х
op_top equ [edi+6] ;координата начала рисования по у
op_text_margin equ [edi+8] ;=4 расстояние от прямоугольника чек бокса до надписи
op_size equ [edi+12] ;12 размер квадрата чек бокса
op_color equ [edi+16]
op_border_color equ [edi+20] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно
op_text_color equ [edi+24];[edi+4] ;цвет текста
op_text_ptr equ [edi+28] ;указатель на начало текстовой строки
op_text_length equ [edi+32]
op_flags equ [edi+36] ;флаги
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use TreeList ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
info_capt_len,el_focus, p_scrol,on_press {
.data_info dd 0
.info_size dw info_size
.info_max_count dd info_max_count
.style dd style
.data_nodes dd 0
.data_img dd 0
.img_cx dw img_cx
.img_cy dw img_cy
.data_img_sys dd 0
.ch_tim dd 0
.ls_tim dd 0
.tim_undo dd 0
.cur_pos dd 0
.col_bkg dd col_bkg
.col_zag dd col_zag
.col_txt dd col_txt
.box_left dd box_l
.box_top dd box_t
.box_width dd box_w
.box_height dd box_h
.capt_cy dw capt_cy
.info_capt_offs dw info_capt_offs
.info_capt_len dw info_capt_len
.el_focus dd el_focus
.p_scrol dd p_scrol
rb 4
.on_activate dd 0
.on_press dd on_press
}
tl_info_size equ word[edi +4] ;размер данных выделяемых для каждого узла (пользовательськие данные + текст для подписи)
tl_info_max_count equ dword[edi+6] ;максимальное количество узлов, которые можно добавить в элемент
tl_style equ dword[edi+10] ;стили элемента
tl_data_nodes equ dword[edi+14] ;указатель на структуры узлов
tl_data_img equ dword[edi+18] ;указатель на изображения с иконками узлов
tl_img_cx equ word[edi+22] ;ширина иконок
tl_img_cy equ word[edi+24] ;высота иконок
tl_data_img_sys equ dword[edi+26] ;указатель на системные изображения (стрелки, плюсики)
tl_ch_tim equ dword[edi+30] ;количество изменений в файле
tl_tim_undo equ dword[edi+38] ;количество отмененных действий
tl_cur_pos equ dword[edi+42] ;позиция курсора
tl_col_bkg equ dword[edi+46] ;цвет фона
tl_col_zag equ dword[edi+50] ;цвет заголовка
tl_col_txt equ dword[edi+54] ;цвет текста
tl_box_left equ dword[edi+58]
tl_box_top equ dword[edi+62]
tl_box_width equ dword[edi+66]
tl_box_height equ dword[edi+70]
tl_capt_cy equ word[edi+74] ;высота подписи
tl_info_capt_offs equ word[edi+76] ;сдвиг для начала текста (подписи узла)
tl_info_capt_len equ word[edi+78] ;длинна текста подписи узла (если = 0 то до конца структуры)
tl_el_focus equ dword[edi+80] ;указатель на структуру элемента в фокусе
tl_p_scrol equ dword[edi+84] ;указатель на структуру скроллинга
tl_on_press equ dword[edi+96] ;указатель на функцию, которая вызывается при нажатии Enter
;data_info dd ? ;+ 0 указатель на основные даные
;ls_tim dd ? ;+34 время последнего сохранения
;on_activate dd ? ;+92 указатель на функцию при активировании узла
;константы стиля
tl_key_no_edit equ 1b ;элемент нельзя редактировать на клавиатуре (изменять уровни, удалять)
tl_draw_par_line equ 10b ;рисовать линии к родительскому узлу
tl_list_box_mode equ 100b ;стиль не отображает уровни (как в ListBox все одного уровня)
;константы для функций
tl_err_save_memory_size equ 10b ;не хватает памяти для сохранения элемента
tl_err_load_caption equ 1b ;в памяти нет заголовка 'tree'
tl_err_load_info_size equ 100b ;не совпадает размер информационной структуры при открытии
tl_load_mode_add equ 0x20000 ;опция считывания в режиме добавления информации
tl_save_load_heder_size equ 26 ;размер заголовка для записи/чтения элементов
tl_offs_box equ 58 ;начало BOX структуры для tree_list
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use TextEditor ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ted_wnd_l equ dword[edi+ 0] ;окно редактора: отступ слева
ted_wnd_t equ dword[edi+ 4] ;окно редактора: отступ сверху
ted_wnd_w equ dword[edi+ 8] ;окно редактора: ширина
ted_wnd_h equ dword[edi+12] ;окно редактора: высота
ted_rec_l equ dword[edi+16] ;ширина панели в окне
ted_rec_t equ dword[edi+20] ;высота панели в окне
ted_rec_w equ dword[edi+24] ;ширина символа (знакоместа) в окне
ted_rec_h equ dword[edi+28] ;высота символа (знакоместа) в окне
ted_drag_m equ byte[edi+32] ;выделение от мыши
ted_drag_k equ byte[edi+33] ;выделение от клавиатуры
ted_sel_x0 equ dword[edi+34] ;координата выделения x0
ted_sel_y0 equ dword[edi+38] ;координата выделения y0
ted_sel_x1 equ dword[edi+42] ;координата выделения x1
ted_sel_y1 equ dword[edi+46] ;координата выделения y1
;запасные координаты выделения
ted_seln_x0 equ dword[edi+50]
ted_seln_y0 equ dword[edi+54]
ted_seln_x1 equ dword[edi+58]
ted_seln_y1 equ dword[edi+62]
ted_tex equ dword[edi+66] ;указатель на память для хранения текста
ted_tex_1 equ dword[edi+70] ;указатель на 1-ю стркутру символа
ted_tex_end equ dword[edi+74] ;указатель на последнюю структуру символа
ted_cur_x equ dword[edi+78] ;координата x курсора
ted_cur_y equ dword[edi+82] ;координата y курсора
ted_max_chars equ dword[edi+86] ;максимальное число символов в одном документе
ted_colors_text_count equ dword[edi+90] ;колличество цветов текста
ted_key_words_count equ dword[edi+94] ;колличество ключевых слов
ted_color_cursor equ dword[edi+98] ;цвет курсора
ted_color_wnd_capt equ dword[edi+102] ;цвет полей вокруг окна
ted_color_wnd_work equ dword[edi+106] ;цвет фона окна
ted_color_wnd_bord equ dword[edi+110] ;цвет текста на полях
ted_color_select equ dword[edi+114] ;цвет выделения
ted_color_cur_text equ dword[edi+118] ;цвет символа под курсором
ted_color_wnd_text equ dword[edi+122] ;цвет текста в окне
ted_syntax_file equ dword[edi+126] ;указатель на начало файла синтаксиса
ted_syntax_file_size equ dword[edi+130] ;максимальный размер файла синтаксиса
ted_text_colors equ dword[edi+134] ;указатель на массив цветов текста
ted_help_text_f1 equ dword[edi+138] ;указатель на текст справки (по нажатии F1)
ted_help_id equ dword[edi+142] ;идентификатор для справки
ted_key_words_data equ dword[edi+146] ;указатель на структуры ключевых слов TexColViv
ted_tim_ch equ dword[edi+150] ;колличество изменений в файле
ted_tim_undo equ dword[edi+154] ;колличество отмененных действий
ted_tim_ls equ dword[edi+158] ;время последнего сохранения
ted_tim_co equ dword[edi+162] ;время последней цветовой разметки
ted_el_focus equ dword[edi+166] ;указатель на переменную элемента в фокусе
ted_err_save equ byte[edi+170] ;ошибка сохранения файла
ted_panel_id equ byte[edi+171] ;номер открытой панели
ted_key_new equ byte[edi+172] ;символ, который будет добавлятся с клавиатуры
ted_symbol_new_line equ byte[edi+173] ;символ завершения строки
ted_scr_w equ dword[edi+174] ;вертикальный скроллинг
ted_scr_h equ dword[edi+178] ;горизонтальный скроллинг
ted_arr_key_pos equ dword[edi+182] ;указатель на массив позиций ключевых слов
ted_buffer equ dword[edi+186] ;указатель на буфер копирования/вставки
ted_buffer_find equ dword[edi+190] ;указатель на буфер для поиска
ted_cur_ins equ byte[edi+194] ;режим работы курсора (обычный или замена)
ted_mode_color equ byte[edi+195] ;режим выделения слов цветом (0-выкл. 1-вкл.)
ted_mode_invis equ byte[edi+196] ;режим показа непечатаемых символов
ted_gp_opt equ byte[edi+197] ;опции возвращаемые функцией ted_get_pos_by_cursor
ted_fun_on_key_ctrl_o equ dword[edi+198] ;указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла)
ted_fun_on_key_ctrl_f equ dword[edi+202] ;... Ctrl+F (вызова/скрытия панели поиска)
ted_fun_on_key_ctrl_n equ dword[edi+206] ;... Ctrl+N (создание нового документа)
ted_fun_on_key_ctrl_s equ dword[edi+210] ;... Ctrl+S
ted_buffer_size equ dword[edi+214] ;размер буфера копирования/вставки
ted_fun_find_err equ dword[edi+218] ;указатель на функцию вызываемую если поиск закончился неудачно
ted_fun_init_synt_err equ dword[edi+222] ;указатель на функцию вызываемую при ошибочном открытии файла синтаксиса
ted_fun_draw_panel_buttons equ dword[edi+226] ;указатель на функцию рисования панели с кнопками
ted_fun_draw_panel_find equ dword[edi+230] ;указатель на функцию рисования панели поиска
ted_fun_draw_panel_syntax equ dword[edi+234] ;указатель на функцию рисования панели синтаксиса
ted_fun_save_err equ dword[edi+238] ;указатель на функцию вызываемую если сохранение файла закончилось неудачно
ted_increase_size equ dword[edi+242] ;число символов на которые будет увечиваться память при нехватке
ted_ptr_free_symb equ dword[edi+246] ;указатель на свободную память, в которую можно добавлять символ (используется внутри элемента для ускорения вставки текста)
;------------------------------------------------------------------------------
ted_opt_ed_move_cursor equ 1 ;двигать курсор после добавления текста
ted_opt_ed_change_time equ 2 ;добавлять изменения при редактировании текста
ted_offs_sel equ 34 ;смещение структуры sel
ted_offs_seln equ 50 ;смещение структуры seln
ted_offs_count_colors equ 90 ;смещение переменной колличества цветов
ted_offs_key_new equ 172
ted_offs_symbol_new_line equ 173 ;смещение символа новой строки
;------------------------------------------------------------------------------
; *** scroll bar constant ***
sb_offs_size_x equ 0
sb_offs_start_x equ 2
sb_offs_size_y equ 4
sb_offs_start_y equ 6
sb_offs_max_area equ 16
sb_offs_cur_area equ 20
sb_offs_position equ 24
sb_offs_bckg_col equ 28
sb_offs_frnt_col equ 32
sb_offs_line_col equ 36
sb_offs_redraw equ 40
sb_offs_delta2 equ 46
sb_offs_all_redraw equ 80
;------------------------------------------------------------------------------