11/* IMPLEMENTATION FOR SYMSHELL MENU AND RELEATED FEATURES */
2+ /** \date 2023 - 01 - 17 (last modification) */
23/**********************************************************/
34//#include "platform.h"
45
1920extern "C"
2021#endif
2122
22- extern HWND WB_Hwnd ;//W symshwin.c
23+ extern HWND WB_Hwnd ; //W symshwin.c
2324
25+ /// <summary>
26+ /// Ustala tekst nazwy okna w jego belce
27+ /// \note Wygl¹da ¿e sta³o siê redundantne z nowsz¹ funkcj¹ set_title()
28+ /// </summary>
29+ /// \return TRUE -> success
30+ int ssh_set_window_name (const char * WindowName )
31+ { assert (WindowName != 0 );
32+ return SetWindowText (WB_Hwnd , WindowName ); // SetWindowText return TRUE on success!
33+ }
34+
35+ /// <summary>
36+ /// Daje uchwyt do g³ównego menu
37+ /// </summary>
2438ssh_menu_handle ssh_main_menu ()
2539{
26- return GetMenu (WB_Hwnd );
40+ return GetMenu (WB_Hwnd );
2741}
2842
43+ /// <summary>
44+ /// Daje uchwyt do pod-menu o ustalonej pozycji
45+ /// </summary>
2946ssh_menu_handle ssh_sub_menu (
3047 ssh_menu_handle hMenu ,
31- unsigned Position )
32- {
33- return GetSubMenu ((HMENU )hMenu ,Position );
48+ unsigned Position
49+ )
50+ { assert (hMenu != 0 );
51+ return GetSubMenu ((HMENU )hMenu ,Position );
3452}
3553
54+
3655unsigned ssh_get_item_position (
3756 ssh_menu_handle hMenu ,
38- const char * ItemName )
57+ const char * ItemName
58+ )
3959{
60+ assert (hMenu != 0 );
4061 size_t i ,len = strlen (ItemName );
4162 char * pom = malloc (len + 1 );
4263 int N = GetMenuItemCount (hMenu );
4364
4465 for (i = 0 ;i < N ;i ++ )
4566 {
4667 int ret = GetMenuString (hMenu ,i ,pom ,len + 1 ,MF_BYPOSITION );
47- assert (ret != 0 );
68+ assert (ret != 0 );
4869 if (strcmp (ItemName ,pom )== 0 )
4970 {
5071 free (pom );
@@ -56,47 +77,96 @@ unsigned ssh_get_item_position(
5677 return UINT_MAX ;
5778}
5879
80+ /// <summary>
81+ /// Dodaje item do menu
82+ /// </summary>
5983int ssh_menu_add_item (
6084 ssh_menu_handle hMenu ,
6185 const char * ItemName ,
6286 unsigned Message ,
63- unsigned Flags )
64- {
65- /*wchar_t UniItemName[1024];
66- //I tak nie dziala - zostaja krzaczki
67- int ret=MultiByteToWideChar(
68- 1252,//CP_ACP, // UINT CodePage, // code page
69- MB_PRECOMPOSED , //DWORD dwFlags, // character-type options
70- ItemName, //LPCSTR lpMultiByteStr, // address of string to map
71- strlen(ItemName)+1, //number of bytes in string
72- UniItemName, //LPWSTR lpWideCharStr, // address of wide-character buffer
73- 1024 //int cchWideChar // size of buffer
74- );
75- */
76- if (Flags == 0 )/* Ma byc domyslnie */
77- Flags = MF_ENABLED ;
78- //return AppendMenuW(hMenu,Flags,Message,UniItemName);
79- return AppendMenu (hMenu ,Flags ,Message ,ItemName );
87+ unsigned Flags
88+ )
89+ { assert (hMenu != 0 );
90+ /*wchar_t UniItemName[1024];
91+ //I tak nie dziala - zostaja krzaczki
92+ int ret=MultiByteToWideChar(
93+ 1252,//CP_ACP, // UINT CodePage, // code page
94+ MB_PRECOMPOSED , // DWORD dwFlags, // character-type options
95+ ItemName, // LPCSTR lpMultiByteStr, // address of string to map
96+ strlen(ItemName)+1, // number of bytes in string
97+ UniItemName, // LPWSTR lpWideCharStr, // address of wide-character buffer
98+ 1024 // int cchWideChar // size of buffer
99+ );
100+ */
101+ if (Flags == 0 ) // Ma byc domyslnie
102+ Flags = MF_ENABLED ;
103+
104+ return AppendMenu (hMenu ,Flags ,Message ,ItemName ); //return AppendMenuW(hMenu,Flags,Message,UniItemName);
80105}
81106
82- int ssh_menu_mark_item (
107+ /// <summary>
108+ /// Usuwa item z menu. Item mo¿e byæ identyfikowany wg. pozycji, albo wg. komendy któr¹ generuje (liczby z zakresu 0-FFFF)
109+ /// </summary>
110+ int ssh_menu_remove_item (
83111 ssh_menu_handle hMenu ,
84- unsigned Check ,
85- unsigned ItemCommandOrPosition ,
86- unsigned asPosition
87- )
88- {
89- UINT Flags = 0 ;
90- if (Check ) Flags |=MF_CHECKED ;
91- else Flags |=MF_UNCHECKED ;
92- if (asPosition ) Flags |=MF_BYPOSITION ;
93- else Flags |=MF_BYCOMMAND ;
94- return CheckMenuItem (hMenu ,ItemCommandOrPosition ,Flags )!= 0xffffffff ;
112+ unsigned ItemCommandOrPosition ,
113+ unsigned asPosition
114+ )
115+ { assert (hMenu != 0 );
116+ UINT Flags = 0 ;
117+ if (asPosition )
118+ Flags |= MF_BYPOSITION ;
119+ else
120+ Flags |= MF_BYCOMMAND ;
121+ return RemoveMenu (hMenu , ItemCommandOrPosition , Flags ) != 0xffffffff ;
122+ }
123+
124+ /// <summary>
125+ /// Ustawia lub usuwa marker przy itemie
126+ /// </summary>
127+ int ssh_menu_mark_item (
128+ ssh_menu_handle hMenu ,
129+ unsigned Check ,
130+ unsigned ItemCommandOrPosition ,
131+ unsigned asPosition
132+ )
133+ { assert (hMenu != 0 );
134+ UINT Flags = 0 ;
135+ if (Check ) Flags |=MF_CHECKED ;
136+ else Flags |=MF_UNCHECKED ;
137+ if (asPosition ) Flags |=MF_BYPOSITION ;
138+ else Flags |=MF_BYCOMMAND ;
139+ return CheckMenuItem (hMenu ,ItemCommandOrPosition ,Flags )!= 0xffffffff ;
95140}
96141
142+ /// <summary>
143+ /// Ustawia lub usuwa marker przy itemie, wersja 2.
144+ /// </summary>
145+ int ssh_menu_mark_item2 (
146+ ssh_menu_handle hMenu ,
147+ unsigned Check ,
148+ unsigned ItemCommandOrPosition ,
149+ unsigned asPosition
150+ )
151+ { assert (hMenu != 0 );
152+ UINT Flags = 0 ;
153+ if (Check )
154+ Flags |= MF_CHECKED ;
155+ else
156+ Flags |= MF_UNCHECKED ;
157+ if (asPosition )
158+ Flags |= MF_BYPOSITION ;
159+ else
160+ Flags |= MF_BYCOMMAND ;
161+ return CheckMenuItem (hMenu , ItemCommandOrPosition , Flags ) != 0xffffffff ;
162+ }
163+
164+ /// <summary>
165+ /// Wymusza pojawienie siê uprzednio zdefiniowanego lub zmodyfikowanego menu.
166+ /// </summary>
97167int ssh_realize_menu (ssh_menu_handle hMenu )
98- {
99- return DrawMenuBar (WB_Hwnd );
168+ { assert ( hMenu != 0 );
169+ return DrawMenuBar (WB_Hwnd );
100170}
101171
102172#else
@@ -106,10 +176,8 @@ return DrawMenuBar(WB_Hwnd );
106176/********************************************************************/
107177/* THIS CODE IS DESIGNED & COPYRIGHT BY: */
108178/* W O J C I E C H B O R K O W S K I */
109- /* Zaklad Systematyki i Geografii Roslin Uniwersytetu Warszawskiego */
110- /* & Instytut Studiow Spolecznych Uniwersytetu Warszawskiego */
111- /* WWW: http://moderato.iss.uw.edu.pl/~borkowsk */
112- 179+ /* Instytut Studiow Spolecznych Uniwersytetu Warszawskiego */
180+ 113181/* (Don't change or remove this note) */
114182/********************************************************************/
115183
0 commit comments