]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backport of 1.8-1.10 (of _Menumodule.c):
authorJack Jansen <jack.jansen@cwi.nl>
Wed, 27 Feb 2002 23:15:29 +0000 (23:15 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Wed, 27 Feb 2002 23:15:29 +0000 (23:15 +0000)
- The output MenuRef of GetMenuItemHierarchicalMenu() may be NULL.
- Added support for optional MenuObj arguments
- Added a bunch of calls as functions with an optional
  MenuObj first argument. The same calls already
  exist as methods, but then the first arg isn't
  optional... The method versions could go as far as I'm
  concerned. Jack?

Mac/Modules/menu/_Menumodule.c
Mac/Modules/menu/menuedit.py
Mac/Modules/menu/menuscan.py
Mac/Modules/menu/menusupport.py

index 398f6fab0c0e7fda12f48e21f825afbc3d7acef5..f46eb83098e469ca0941120704d6024d89b98af0 100644 (file)
@@ -50,6 +50,29 @@ extern int _MenuObj_Convert(PyObject *, MenuHandle *);
 #define as_Menu(h) ((MenuHandle)h)
 #define as_Resource(h) ((Handle)h)
 
+
+/* Alternative version of MenuObj_New, which returns None for NULL argument */
+PyObject *OptMenuObj_New(MenuRef itself)
+{
+       if (itself == NULL) {
+               Py_INCREF(Py_None);
+               return Py_None;
+       }
+       return MenuObj_New(itself);
+}
+
+/* Alternative version of MenuObj_Convert, which returns NULL for a None argument */
+int OptMenuObj_Convert(PyObject *v, MenuRef *p_itself)
+{
+       PyObject *tmp;
+       
+       if ( v == Py_None ) {
+               *p_itself = NULL;
+               return 1;
+       }
+       return MenuObj_Convert(v, p_itself);
+}
+
 static PyObject *Menu_Error;
 
 /* ------------------------ Object type Menu ------------------------ */
@@ -1615,7 +1638,7 @@ static PyObject *MenuObj_GetMenuItemHierarchicalMenu(MenuObject *_self, PyObject
                                           &outHierMenu);
        if (_err != noErr) return PyMac_Error(_err);
        _res = Py_BuildValue("O&",
-                            MenuObj_New, outHierMenu);
+                            OptMenuObj_New, outHierMenu);
        return _res;
 }
 #endif
@@ -3678,6 +3701,243 @@ static PyObject *Menu_DrawMenuBar(PyObject *_self, PyObject *_args)
        return _res;
 }
 
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Menu_CountMenuItemsWithCommandID(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       ItemCount _rv;
+       MenuHandle inMenu;
+       MenuCommand inCommandID;
+#ifndef CountMenuItemsWithCommandID
+       PyMac_PRECHECK(CountMenuItemsWithCommandID);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&l",
+                             OptMenuObj_Convert, &inMenu,
+                             &inCommandID))
+               return NULL;
+       _rv = CountMenuItemsWithCommandID(inMenu,
+                                         inCommandID);
+       _res = Py_BuildValue("l",
+                            _rv);
+       return _res;
+}
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Menu_GetIndMenuItemWithCommandID(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       OSStatus _err;
+       MenuHandle inMenu;
+       MenuCommand inCommandID;
+       UInt32 inItemIndex;
+       MenuHandle outMenu;
+       MenuItemIndex outIndex;
+#ifndef GetIndMenuItemWithCommandID
+       PyMac_PRECHECK(GetIndMenuItemWithCommandID);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&ll",
+                             OptMenuObj_Convert, &inMenu,
+                             &inCommandID,
+                             &inItemIndex))
+               return NULL;
+       _err = GetIndMenuItemWithCommandID(inMenu,
+                                          inCommandID,
+                                          inItemIndex,
+                                          &outMenu,
+                                          &outIndex);
+       if (_err != noErr) return PyMac_Error(_err);
+       _res = Py_BuildValue("O&h",
+                            MenuObj_New, outMenu,
+                            outIndex);
+       return _res;
+}
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Menu_EnableMenuCommand(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       MenuHandle inMenu;
+       MenuCommand inCommandID;
+#ifndef EnableMenuCommand
+       PyMac_PRECHECK(EnableMenuCommand);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&l",
+                             OptMenuObj_Convert, &inMenu,
+                             &inCommandID))
+               return NULL;
+       EnableMenuCommand(inMenu,
+                         inCommandID);
+       Py_INCREF(Py_None);
+       _res = Py_None;
+       return _res;
+}
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Menu_DisableMenuCommand(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       MenuHandle inMenu;
+       MenuCommand inCommandID;
+#ifndef DisableMenuCommand
+       PyMac_PRECHECK(DisableMenuCommand);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&l",
+                             OptMenuObj_Convert, &inMenu,
+                             &inCommandID))
+               return NULL;
+       DisableMenuCommand(inMenu,
+                          inCommandID);
+       Py_INCREF(Py_None);
+       _res = Py_None;
+       return _res;
+}
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Menu_IsMenuCommandEnabled(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       Boolean _rv;
+       MenuHandle inMenu;
+       MenuCommand inCommandID;
+#ifndef IsMenuCommandEnabled
+       PyMac_PRECHECK(IsMenuCommandEnabled);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&l",
+                             OptMenuObj_Convert, &inMenu,
+                             &inCommandID))
+               return NULL;
+       _rv = IsMenuCommandEnabled(inMenu,
+                                  inCommandID);
+       _res = Py_BuildValue("b",
+                            _rv);
+       return _res;
+}
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Menu_SetMenuCommandMark(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       OSStatus _err;
+       MenuHandle inMenu;
+       MenuCommand inCommandID;
+       UniChar inMark;
+#ifndef SetMenuCommandMark
+       PyMac_PRECHECK(SetMenuCommandMark);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&lh",
+                             OptMenuObj_Convert, &inMenu,
+                             &inCommandID,
+                             &inMark))
+               return NULL;
+       _err = SetMenuCommandMark(inMenu,
+                                 inCommandID,
+                                 inMark);
+       if (_err != noErr) return PyMac_Error(_err);
+       Py_INCREF(Py_None);
+       _res = Py_None;
+       return _res;
+}
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Menu_GetMenuCommandMark(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       OSStatus _err;
+       MenuHandle inMenu;
+       MenuCommand inCommandID;
+       UniChar outMark;
+#ifndef GetMenuCommandMark
+       PyMac_PRECHECK(GetMenuCommandMark);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&l",
+                             OptMenuObj_Convert, &inMenu,
+                             &inCommandID))
+               return NULL;
+       _err = GetMenuCommandMark(inMenu,
+                                 inCommandID,
+                                 &outMark);
+       if (_err != noErr) return PyMac_Error(_err);
+       _res = Py_BuildValue("h",
+                            outMark);
+       return _res;
+}
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Menu_GetMenuCommandPropertySize(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       OSStatus _err;
+       MenuHandle inMenu;
+       MenuCommand inCommandID;
+       OSType inPropertyCreator;
+       OSType inPropertyTag;
+       ByteCount outSize;
+#ifndef GetMenuCommandPropertySize
+       PyMac_PRECHECK(GetMenuCommandPropertySize);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&lO&O&",
+                             OptMenuObj_Convert, &inMenu,
+                             &inCommandID,
+                             PyMac_GetOSType, &inPropertyCreator,
+                             PyMac_GetOSType, &inPropertyTag))
+               return NULL;
+       _err = GetMenuCommandPropertySize(inMenu,
+                                         inCommandID,
+                                         inPropertyCreator,
+                                         inPropertyTag,
+                                         &outSize);
+       if (_err != noErr) return PyMac_Error(_err);
+       _res = Py_BuildValue("l",
+                            outSize);
+       return _res;
+}
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Menu_RemoveMenuCommandProperty(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       OSStatus _err;
+       MenuHandle inMenu;
+       MenuCommand inCommandID;
+       OSType inPropertyCreator;
+       OSType inPropertyTag;
+#ifndef RemoveMenuCommandProperty
+       PyMac_PRECHECK(RemoveMenuCommandProperty);
+#endif
+       if (!PyArg_ParseTuple(_args, "O&lO&O&",
+                             OptMenuObj_Convert, &inMenu,
+                             &inCommandID,
+                             PyMac_GetOSType, &inPropertyCreator,
+                             PyMac_GetOSType, &inPropertyTag))
+               return NULL;
+       _err = RemoveMenuCommandProperty(inMenu,
+                                        inCommandID,
+                                        inPropertyCreator,
+                                        inPropertyTag);
+       if (_err != noErr) return PyMac_Error(_err);
+       Py_INCREF(Py_None);
+       _res = Py_None;
+       return _res;
+}
+#endif
+
 static PyMethodDef Menu_methods[] = {
 
 #if !TARGET_API_MAC_CARBON
@@ -3787,6 +4047,51 @@ static PyMethodDef Menu_methods[] = {
         "(short menuID) -> None"},
        {"DrawMenuBar", (PyCFunction)Menu_DrawMenuBar, 1,
         "() -> None"},
+
+#if TARGET_API_MAC_CARBON
+       {"CountMenuItemsWithCommandID", (PyCFunction)Menu_CountMenuItemsWithCommandID, 1,
+        "(MenuHandle inMenu, MenuCommand inCommandID) -> (ItemCount _rv)"},
+#endif
+
+#if TARGET_API_MAC_CARBON
+       {"GetIndMenuItemWithCommandID", (PyCFunction)Menu_GetIndMenuItemWithCommandID, 1,
+        "(MenuHandle inMenu, MenuCommand inCommandID, UInt32 inItemIndex) -> (MenuHandle outMenu, MenuItemIndex outIndex)"},
+#endif
+
+#if TARGET_API_MAC_CARBON
+       {"EnableMenuCommand", (PyCFunction)Menu_EnableMenuCommand, 1,
+        "(MenuHandle inMenu, MenuCommand inCommandID) -> None"},
+#endif
+
+#if TARGET_API_MAC_CARBON
+       {"DisableMenuCommand", (PyCFunction)Menu_DisableMenuCommand, 1,
+        "(MenuHandle inMenu, MenuCommand inCommandID) -> None"},
+#endif
+
+#if TARGET_API_MAC_CARBON
+       {"IsMenuCommandEnabled", (PyCFunction)Menu_IsMenuCommandEnabled, 1,
+        "(MenuHandle inMenu, MenuCommand inCommandID) -> (Boolean _rv)"},
+#endif
+
+#if TARGET_API_MAC_CARBON
+       {"SetMenuCommandMark", (PyCFunction)Menu_SetMenuCommandMark, 1,
+        "(MenuHandle inMenu, MenuCommand inCommandID, UniChar inMark) -> None"},
+#endif
+
+#if TARGET_API_MAC_CARBON
+       {"GetMenuCommandMark", (PyCFunction)Menu_GetMenuCommandMark, 1,
+        "(MenuHandle inMenu, MenuCommand inCommandID) -> (UniChar outMark)"},
+#endif
+
+#if TARGET_API_MAC_CARBON
+       {"GetMenuCommandPropertySize", (PyCFunction)Menu_GetMenuCommandPropertySize, 1,
+        "(MenuHandle inMenu, MenuCommand inCommandID, OSType inPropertyCreator, OSType inPropertyTag) -> (ByteCount outSize)"},
+#endif
+
+#if TARGET_API_MAC_CARBON
+       {"RemoveMenuCommandProperty", (PyCFunction)Menu_RemoveMenuCommandProperty, 1,
+        "(MenuHandle inMenu, MenuCommand inCommandID, OSType inPropertyCreator, OSType inPropertyTag) -> None"},
+#endif
        {NULL, NULL, 0}
 };
 
index 4a9cf2afc898440e59c18b0ef30a858fb83e9e09..d1f1f24a6b311db0e504d9d6d6cfb8174ff741eb 100644 (file)
@@ -59,3 +59,81 @@ f = Function(void, 'DrawMenuBar',
 )
 functions.append(f)
 
+
+#
+# The following functions take an *optional* MenuRef as their first argument
+#
+
+f = Function(ItemCount, 'CountMenuItemsWithCommandID',
+    (OptMenuRef, 'inMenu', InMode),
+    (MenuCommand, 'inCommandID', InMode),
+    condition='#if TARGET_API_MAC_CARBON',
+)
+functions.append(f)
+
+f = Function(OSStatus, 'GetIndMenuItemWithCommandID',
+    (OptMenuRef, 'inMenu', InMode),
+    (MenuCommand, 'inCommandID', InMode),
+    (UInt32, 'inItemIndex', InMode),
+    (MenuRef, 'outMenu', OutMode),
+    (MenuItemIndex, 'outIndex', OutMode),
+    condition='#if TARGET_API_MAC_CARBON',
+)
+functions.append(f)
+
+f = Function(void, 'EnableMenuCommand',
+    (OptMenuRef, 'inMenu', InMode),
+    (MenuCommand, 'inCommandID', InMode),
+    condition='#if TARGET_API_MAC_CARBON',
+)
+functions.append(f)
+
+f = Function(void, 'DisableMenuCommand',
+    (OptMenuRef, 'inMenu', InMode),
+    (MenuCommand, 'inCommandID', InMode),
+    condition='#if TARGET_API_MAC_CARBON',
+)
+functions.append(f)
+
+f = Function(Boolean, 'IsMenuCommandEnabled',
+    (OptMenuRef, 'inMenu', InMode),
+    (MenuCommand, 'inCommandID', InMode),
+    condition='#if TARGET_API_MAC_CARBON',
+)
+functions.append(f)
+
+f = Function(OSStatus, 'SetMenuCommandMark',
+    (OptMenuRef, 'inMenu', InMode),
+    (MenuCommand, 'inCommandID', InMode),
+    (UniChar, 'inMark', InMode),
+    condition='#if TARGET_API_MAC_CARBON',
+)
+functions.append(f)
+
+f = Function(OSStatus, 'GetMenuCommandMark',
+    (OptMenuRef, 'inMenu', InMode),
+    (MenuCommand, 'inCommandID', InMode),
+    (UniChar, 'outMark', OutMode),
+    condition='#if TARGET_API_MAC_CARBON',
+)
+functions.append(f)
+
+f = Function(OSStatus, 'GetMenuCommandPropertySize',
+    (OptMenuRef, 'inMenu', InMode),
+    (MenuCommand, 'inCommandID', InMode),
+    (OSType, 'inPropertyCreator', InMode),
+    (OSType, 'inPropertyTag', InMode),
+    (ByteCount, 'outSize', OutMode),
+    condition='#if TARGET_API_MAC_CARBON',
+)
+functions.append(f)
+
+f = Function(OSStatus, 'RemoveMenuCommandProperty',
+    (OptMenuRef, 'inMenu', InMode),
+    (MenuCommand, 'inCommandID', InMode),
+    (OSType, 'inPropertyCreator', InMode),
+    (OSType, 'inPropertyTag', InMode),
+    condition='#if TARGET_API_MAC_CARBON',
+)
+functions.append(f)
+
index ef2d2f80757cb64b754f0bb11d01f76ba2477fab..11be8f219092b4d56f4dc8326ceaf4e947398ccd 100644 (file)
@@ -144,6 +144,8 @@ class MyScanner(Scanner):
                        ([("void", "*", "OutMode"), ("long", "*", "InMode"),
                                                    ("long", "*", "OutMode")],
                         [("VarVarOutBuffer", "*", "InOutMode")]),
+                       ([("MenuRef", 'outHierMenu', "OutMode")],
+                        [("OptMenuRef", 'outHierMenu', "OutMode")]),
                        ]
 
        def writeinitialdefs(self):
index 210a6b3c7c98cc204578d53aa7f878335b63095b..b53a616220a80c10b00bd16f33c9d5bd28e66b33 100644 (file)
@@ -24,6 +24,7 @@ from macsupport import *
 
 MenuHandle = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
 MenuRef = MenuHandle
+OptMenuRef = OpaqueByValueType(OBJECTTYPE, "Opt" + OBJECTPREFIX)
 Handle = OpaqueByValueType("Handle", "ResObj")
 MenuBarHandle = OpaqueByValueType("MenuBarHandle", "ResObj")
 MenuID = Type("MenuID", "h")
@@ -68,6 +69,29 @@ extern int _MenuObj_Convert(PyObject *, MenuHandle *);
 
 #define as_Menu(h) ((MenuHandle)h)
 #define as_Resource(h) ((Handle)h)
+
+
+/* Alternative version of MenuObj_New, which returns None for NULL argument */
+PyObject *OptMenuObj_New(MenuRef itself)
+{
+       if (itself == NULL) {
+               Py_INCREF(Py_None);
+               return Py_None;
+       }
+       return MenuObj_New(itself);
+}
+
+/* Alternative version of MenuObj_Convert, which returns NULL for a None argument */
+int OptMenuObj_Convert(PyObject *v, MenuRef *p_itself)
+{
+       PyObject *tmp;
+       
+       if ( v == Py_None ) {
+               *p_itself = NULL;
+               return 1;
+       }
+       return MenuObj_Convert(v, p_itself);
+}
 """
 
 initstuff = initstuff + """