Rev 7035 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3244 | IgorA | 1 | ; |
2 | ; в этом файле собраны функции нужные для создания и |
||
3 | ; работы окна с поиском в ключевых словах |
||
4 | ; |
||
5 | |||
6 | prop_wnd_width equ 350 ;ширина окна с поиском |
||
7 | SIZE_ONE_FLOAT equ 14 |
||
8 | |||
9 | IMAGE_TOOLBAR_ICON_SIZE equ 20*20*3 |
||
10 | |||
7035 | IgorA | 11 | wnd_k_words_run dd 0 ;переменная следящая за тем что-бы не запускать больше 1-го окна одновременно |
3244 | IgorA | 12 | |
13 | if lang eq ru |
||
14 | txt_caption db 'Поиск в ключевых словах',0 |
||
15 | else |
||
16 | txt_caption db 'Search in keywords',0 |
||
17 | end if |
||
18 | |||
19 | ;даное окно (процесс) вызываеться функцией but_wnd_coords |
||
20 | align 4 |
||
21 | prop_start: |
||
22 | pushad |
||
6087 | IgorA | 23 | mcall SF_SET_EVENTS_MASK,0xC0000027 ;маска ожидаемых событий |
3244 | IgorA | 24 | |
25 | ;настройка списка объектов |
||
26 | mov dword[tree3.info_max_count],2 |
||
27 | mov edi,tedit0 |
||
28 | mov edx,ted_key_words_count |
||
29 | add dword[tree3.info_max_count],edx ;ставим число узлов, равное колличеству ключевых слов в файле подсветки (+2 на начало и конец списка) |
||
7575 | IgorA | 30 | stdcall [tl_data_init], tree3 |
3244 | IgorA | 31 | mov eax,dword[icon_tl_sys] |
32 | mov dword[tree3.data_img],eax |
||
33 | mov eax,dword[tree1.data_img_sys] |
||
34 | mov dword[tree3.data_img_sys],eax |
||
35 | |||
36 | edit_boxes_set_sys_color edit3,editboxes_end,sc ;установка системных цветов |
||
37 | popad |
||
38 | |||
39 | align 4 |
||
40 | prop_red_win: |
||
41 | pushad |
||
6087 | IgorA | 42 | mcall SF_REDRAW,SSF_BEGIN_DRAW |
3244 | IgorA | 43 | |
44 | mov bx,word[procinfo.box.left] |
||
45 | add bx,5 ;word[buf_0.l] |
||
46 | shl ebx,16 |
||
47 | mov bx,prop_wnd_width |
||
48 | mov cx,word[procinfo.box.top] |
||
5831 | IgorA | 49 | add cx,42 ;word[buf_0.t] |
3244 | IgorA | 50 | shl ecx,16 |
51 | mov cx,250 |
||
6087 | IgorA | 52 | mcall SF_CREATE_WINDOW,,,0x33ffffd0,,txt_caption |
3244 | IgorA | 53 | |
6087 | IgorA | 54 | mcall SF_DEFINE_BUTTON,(5 shl 16)+19,(5 shl 16)+19,3,[sc.work_button] |
3244 | IgorA | 55 | add ebx,(25 shl 16) |
6087 | IgorA | 56 | mcall ,,,4 |
3244 | IgorA | 57 | |
58 | mov ebx,[bmp_icon] |
||
7575 | IgorA | 59 | add ebx,(ID_BUT_FIND-ID_BUT_0)*IMAGE_TOOLBAR_ICON_SIZE |
6087 | IgorA | 60 | mcall SF_PUT_IMAGE,,(20 shl 16)+20,(5 shl 16)+5 ;найти |
3244 | IgorA | 61 | |
62 | sub ebx,2*IMAGE_TOOLBAR_ICON_SIZE |
||
63 | mov edx,(30 shl 16)+5 ;копировать |
||
64 | int 0x40 |
||
65 | |||
7575 | IgorA | 66 | mcall SF_THREAD_INFO,procinfo,-1 |
67 | mov eax,[procinfo.box.height] |
||
68 | cmp eax,90 |
||
69 | jge @f |
||
70 | mov eax,90 ;min size |
||
71 | @@: |
||
72 | sub eax,58 |
||
73 | cmp [tree3.box_height],eax |
||
74 | je @f |
||
75 | mov [tree3.box_height],eax |
||
76 | mov word[w_scr_t3.y_size],ax |
||
77 | ;need call tb_scrol_resize |
||
78 | @@: |
||
79 | |||
3244 | IgorA | 80 | mov dword[w_scr_t3.all_redraw],1 |
6087 | IgorA | 81 | stdcall [scrollbar_ver_draw], w_scr_t3 |
3244 | IgorA | 82 | stdcall [tl_draw], tree3 |
83 | stdcall [edit_box_draw], edit3 |
||
6087 | IgorA | 84 | mcall SF_REDRAW,SSF_END_DRAW |
3244 | IgorA | 85 | popad |
86 | |||
87 | ;не отрывать эту функцию от предыдущей |
||
88 | align 4 |
||
89 | prop_still: |
||
6087 | IgorA | 90 | mcall SF_WAIT_EVENT |
3244 | IgorA | 91 | |
92 | cmp al,1 ;изм. положение окна |
||
93 | jz prop_red_win |
||
94 | cmp al,2 |
||
95 | jne @f |
||
96 | call prop_key |
||
97 | @@: |
||
98 | cmp al,3 |
||
99 | jne @f |
||
100 | call prop_button |
||
101 | @@: |
||
102 | cmp al,6 |
||
103 | jne @f |
||
104 | call prop_mouse |
||
105 | @@: |
||
106 | jmp prop_still |
||
107 | .exit: |
||
108 | mov dword[tree3.data_img],0 ;чистим указатели на иконки что-бы их не удалил деструктор |
||
109 | mov dword[tree3.data_img_sys],0 ;т. к. они еще используються в других элементах |
||
7575 | IgorA | 110 | stdcall [tl_data_clear], tree3 |
7035 | IgorA | 111 | mov dword[wnd_k_words_run],0 ;обнуляем ID окна |
6087 | IgorA | 112 | mcall SF_TERMINATE_PROCESS |
3244 | IgorA | 113 | |
114 | align 4 |
||
115 | prop_key: |
||
116 | push eax |
||
6087 | IgorA | 117 | mcall SF_GET_KEY |
3244 | IgorA | 118 | stdcall [edit_box_key], edit3 |
119 | stdcall [tl_key], tree3 |
||
120 | pop eax |
||
121 | ret |
||
122 | |||
123 | align 4 |
||
124 | prop_mouse: |
||
125 | ;push ecx edi |
||
126 | stdcall [tl_mouse], tree3 |
||
127 | stdcall [edit_box_mouse], edit3 |
||
128 | ;pop edi ecx |
||
129 | ret |
||
130 | |||
131 | align 4 |
||
132 | prop_button: |
||
133 | pushad |
||
6087 | IgorA | 134 | mcall SF_GET_BUTTON |
3244 | IgorA | 135 | |
136 | cmp ah,1 |
||
137 | je prop_still.exit |
||
138 | |||
139 | cmp ah,3 |
||
140 | jne @f |
||
141 | ;найти слова |
||
142 | mov edi,tedit0 |
||
143 | cmp ted_syntax_file,0 |
||
144 | je @f |
||
7575 | IgorA | 145 | stdcall [tl_info_clear], tree3 |
146 | and dword[tree3.style], not tl_cursor_pos_limited |
||
3244 | IgorA | 147 | |
148 | mov ebx,ted_key_words_data |
||
149 | mov ecx,ted_key_words_count |
||
150 | cld |
||
151 | .cycle_0: |
||
152 | stdcall str_instr, ebx,[edit3.text] |
||
153 | test al,al |
||
154 | jnz .end_add |
||
6087 | IgorA | 155 | ;ключевое слово |
7575 | IgorA | 156 | stdcall [tl_node_add], tree3, (1 shl 16), ebx |
157 | stdcall [tl_cur_next], tree3 |
||
6087 | IgorA | 158 | mov edx,[ebx+MAX_COLOR_WORD_LEN] |
159 | or edx,edx |
||
160 | jz .end_add |
||
161 | ;справка по ключевому слову |
||
162 | add edx,ted_help_text_f1 |
||
7575 | IgorA | 163 | stdcall [tl_node_add], tree3, 1, edx |
164 | stdcall [tl_cur_next], tree3 |
||
3244 | IgorA | 165 | .end_add: |
166 | add ebx,MAX_COLOR_WORD_LEN+8 ;sizeof.TexColViv |
||
167 | loop .cycle_0 |
||
168 | |||
7575 | IgorA | 169 | stdcall [tl_cur_beg], tree3 |
170 | or dword[tree3.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка |
||
171 | stdcall [tl_draw], tree3 |
||
6087 | IgorA | 172 | jmp .no_select_0 |
3244 | IgorA | 173 | @@: |
174 | cmp ah,4 |
||
175 | jne @f |
||
176 | ;копировать в буфер |
||
177 | stdcall [tl_node_get_data],tree3 |
||
5911 | IgorA | 178 | or eax,eax |
5831 | IgorA | 179 | jz .no_select_0 |
5911 | IgorA | 180 | mov esi,eax |
3244 | IgorA | 181 | mov edi,[tedit0.buffer] |
5831 | IgorA | 182 | mov dword[edi],MAX_COLOR_WORD_LEN |
183 | mov dword[edi+4],0 ;text data |
||
184 | mov dword[edi+8],1 ;code 866 |
||
185 | add edi,12 ;system buffer header size |
||
3244 | IgorA | 186 | mov byte[edi+MAX_COLOR_WORD_LEN],0 |
187 | mov ecx,MAX_COLOR_WORD_LEN |
||
188 | cld |
||
189 | rep movsb |
||
6087 | IgorA | 190 | mcall SF_CLIPBOARD,SSF_WRITE_CB,12+MAX_COLOR_WORD_LEN,[tedit0.buffer] |
3244 | IgorA | 191 | .no_select_0: |
192 | @@: |
||
193 | |||
194 | popad |
||
195 | ret |
||
196 | |||
197 | ;дерево с объектами в пользовательском файле |
||
198 | align 4 |
||
6087 | IgorA | 199 | tree3 tree_list MAX_COLOR_WORD_LEN,3,tl_key_no_edit,\ |
200 | 16,16, 0x8080ff,0x0000ff,0xffffff, 5,30,300,160, 16, 0,0, el_focus, w_scr_t3,0 |
||
3244 | IgorA | 201 | |
202 | align 4 |
||
6254 | leency | 203 | edit3 edit_box 80, 70, 8, 0xffffff, 0xff, 0x80ff, 0, 0x8000, MAX_COLOR_WORD_LEN+2, string1, mouse_dd, ed_focus |
3244 | IgorA | 204 | editboxes_end: |
205 | |||
206 | string1 rb MAX_COLOR_WORD_LEN |
||
207 | |||
208 | align 4 |
||
5911 | IgorA | 209 | w_scr_t3 scrollbar 16,0, 3,0, 15, 100, 0,0, 0xeeeeee, 0xbbddff, 0, 1 |