Board.KolibriOS.org

Official KolibriOS board
It is currently Mon May 20, 2019 1:44 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 43 posts ]  Go to page 1 2 3 Next
Author Message
 Post subject: libkmenu
PostPosted: Fri Jul 31, 2015 1:08 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Библиотека для отображения главного и контекстных меню.

FAQ:
В первую очередь вызываем kmenu_init для задания палитры отображаемого меню.

Далее создаем объект меню используя функцию ksubmenu_new.
При помощи функций kmenuitem_new и ksubmenu_add добавляем пункты меню.
Функция kmenuitem_new понимает три типа элементов:
KMENUITEM_NORMAL - обычный пункт меню, третьим параметром kmenuitem_new примет ID кнопки, который потом пришлет библиотека по клику на этот пункт меню
KMENUITEM_SEPARATOR - рисуется разделитель
KMENUITEM_SUBMENU - пункт меню указывающий на вложенное меню, третьим параметром kmenuitem_new примет указатель на ksubmenu_t*

Для отображения главного меню окна вызываем при отрисовке окна функцию kmainmenu_draw, а также при обработке событий вызываем kmainmenu_dispatch_cursorevent.
Важно: устанавливает фильтрацию позиции курсора

Для отрисовки всплывающих контекстных меню вызываем функцию ksubmenu_draw. Обработка событий производится автономно.

Для изменения состояния пунктов меню можно изменять параметры is_enabled и is_visible объекта kmenuitem_t.
Также можно назначить свою функцию отрисовки элементов меню, изменив указатель paint объекта kmenuitem_t


Attachments:
menu.png
menu.png [ 5.13 KiB | Viewed 3131 times ]
libkmenu.zip [10.11 KiB]
Downloaded 124 times


Last edited by Veliant on Fri Feb 19, 2016 9:43 pm, edited 1 time in total.
Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 2:48 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5047
Кто может добавить меню в TextEdit?

_________________
Через тернии к звездам


Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 3:26 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1262
В принципе, я могу, но библиотеки довольно сложно подключаются, пока целостной картины не имею.


Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 12:42 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Небольшое косметическое изменение - добавлены стрелки для выпадающих подменю.
Исправлено пару багов
Attachment:
menu2.png
menu2.png [ 2.58 KiB | Viewed 3035 times ]


Attachments:
libkmenu.zip [11.18 KiB]
Downloaded 122 times
Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 1:10 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5047
Я ждал этого :)

Костя, может ты добавишь строку меню в TextEdit?
По крайней мере базовый вариант, дальше я или Pathoswithin.

_________________
Через тернии к звездам


Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 2:09 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Вот первичный задел
Правились t_edit, t_data, t_draw (draw_but_toolbar)
Для выхода из программы по пункту меню, в текущей реализации меню нельзя использовать id=1 (используетсяв внутренних целях для закрытия родительских выпадающих меню), придется назначать новый.
Attachment:
textedit.png
textedit.png [ 6.51 KiB | Viewed 3017 times ]


Attachments:
t_edit.zip [290.66 KiB]
Downloaded 92 times
Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 2:52 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5047
Спасибо! Я продолжу.

_________________
Через тернии к звездам


Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 3:09 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5047
Есть бага.

Вырираешь: Файл -> Открыть -> Открывается OpenDialog.
При этом пункт меню "Файл" исчезает http://prntscr.com/7zxaaq

_________________
Через тернии к звездам


Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 3:16 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Leency wrote:
Есть бага.

Вырираешь: Файл -> Открыть -> Открывается OpenDialog.
При этом пункт меню "Файл" исчезает http://prntscr.com/7zxaaq


Мой косяк. На скорую руку делал.
Code:
stdcall [kmainmenu_draw], [main_menu]

надо перенести внутрь draw_window: между mcall 12,1 и mcall 12,2

Да и весь код
Code:
   stdcall [kmenu_init], sc
   
   stdcall [ksubmenu_new]
   mov [main_menu], eax
   
   stdcall [ksubmenu_new]
   mov [main_menu_file], eax
   
   stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_New, 3
   stdcall [ksubmenu_add], [main_menu_file], eax
   stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Open, 4
   stdcall [ksubmenu_add], [main_menu_file], eax
   stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Save, 5
   stdcall [ksubmenu_add], [main_menu_file], eax
   stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0
   stdcall [ksubmenu_add], [main_menu_file], eax
   stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Exit, 1
   stdcall [ksubmenu_add], [main_menu_file], eax
   
   stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_File, [main_menu_file]
   stdcall [ksubmenu_add], [main_menu], eax


перенести за комментарий
Code:
;проверка на сколько удачно загузились библиотеки


Top
   
 Post subject:
PostPosted: Sun Aug 02, 2015 5:16 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1148
Исходники будут?

_________________
я лишь учусь


Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 5:43 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Сорцы + используемый самописный фреймворк


Attachments:
menu_src.zip [71.36 KiB]
Downloaded 151 times
Top
   
 Post subject: Re: libkmenu
PostPosted: Sun Aug 02, 2015 7:14 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Исправил утечку памяти при отрисовке


Attachments:
kmenu.obj [23.97 KiB]
Downloaded 101 times
Top
   
 Post subject: Re: libkmenu
PostPosted: Mon Aug 03, 2015 8:36 pm 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Вопрос.
Перевожу icon на библиотеку kmenu. Всё отлично, меню появляется. Но одно но. Никак не получается принять инфу о нажатии пункта меню. Не приходит сообщение о нажатии кнопки.
Вот так создал меню:
Spoiler: Show
Code:
;это в инициализации icon
   mcall   48,3,sc,40
   invoke   kmenu_init,sc
   invoke   ksubmenu_new
   mov   [hMenu],eax
...
   invoke   kmenuitem_new, KMI_NORMAL,RMenuAlign,MII_ALIGN
   invoke   ksubmenu_add,[hMenu],eax

... ; это вызываю при клике правой кнопкой
   invoke   ksubmenu_draw,[hMenu],posRMenu

Приём сообщений 3 разблокирован. Всё как надо, все сообщения приходят. Но не кнопки.
Spoiler: Show
Code:
   mcall   40,01100100b       ;нужны только события мыши и IPC и кнопок(меню п.к.м.),
                ;перерисовка иконок будет в другом потоке
messages:
   mcall   10
   cmp   eax,3
   je   MSGBtn
   cmp   eax,6
   jz   MSGMouse
   cmp   eax,7
   jz   MSGIPC
   jmp   messages
MSGBtn:
   mcall   17
   call   rb_onBtn
   jmp   messages

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
 Post subject: Re: libkmenu
PostPosted: Mon Aug 03, 2015 10:26 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5047
Посмотри реализацию в textEdit, может поможет.
rev 5649

_________________
Через тернии к звездам


Top
   
 Post subject: Re: libkmenu
PostPosted: Tue Aug 04, 2015 12:39 am 
Offline
User avatar

Joined: Mon Nov 19, 2012 5:22 pm
Posts: 455
Хм. У меня главное окно - рабочий стол: PID 1, слот 1, размеры окна 0,0. Оно точно будет активизироваться, чтобы получить сообщение? Или может ещё что-то.
И ещё. Нашёл баг. Если кликнуть близко к нижней границе экрана, то пункт выделяется не тот, что под мышью(даже если поводить мышью):
Spoiler: Show
Attachment:
12344.png
12344.png [ 64.34 KiB | Viewed 2858 times ]

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 43 posts ]  Go to page 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: Yandex [Bot] and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited