Exemplo n.º 1
0
void FGAPIENTRY glutRemoveMenuItem(int num)
{
	SFG_WinMenuItem *item, **prev;
	int i;
	
	if (fgMappedMenu)
		menuModificationError();
	
	i = fgCurrentMenu->Num;
	prev = &fgCurrentMenu->List;
	item = fgCurrentMenu->List;
	while (item) 
	{
		if (i == num) 
		{
			/* Found the menu item in list to remove. */
			fgCurrentMenu->Num--;
			
			/* Patch up menu's item list. */
			*prev = item->Next;
			
			RemoveMenu(fgCurrentMenu->Handle, (UINT) i - 1, MF_BYPOSITION);
			
			free(item->Label);
			free(item);
			return;
		}
		i--;
		prev = &item->Next;
		item = item->Next;
	}
	fgWarning("Current menu has no %d item.", num);
}
Exemplo n.º 2
0
int APIENTRY
glutCreateMenu(GLUTselectCB selectFunc)
{
  GLUTmenu *menu;
  int menuid;

  if (__glutMappedMenu) {
    menuModificationError();
  }
  menuid = getUnusedMenuSlot();
  menu = (GLUTmenu *) malloc(sizeof(GLUTmenu));
  if (!menu) {
    __glutFatalError("out of memory.");
  }
  menu->id = menuid;
  menu->num = 0;
  menu->submenus = 0;
  menu->select = selectFunc;
  menu->list = NULL;
  menu->cascade = NULL;
  menu->highlighted = NULL;
  menu->anchor = NULL;
  menu->win = (HWND) CreatePopupMenu();
  menuList[menuid] = menu;
  __glutSetMenu(menu);
  return menuid + 1;
}
Exemplo n.º 3
0
void APIENTRY
glutDestroyMenu(int menunum)
{
  GLUTmenu *menu = __glutGetMenuByNum(menunum);
  GLUTmenuItem *item, *next;

  if (__glutMappedMenu) {
    menuModificationError();
  }
  assert(menu->id == menunum - 1);
  DestroyMenu( (HMENU) menu->win);
  menuList[menunum - 1] = NULL;
  /* free all menu entries */
  item = menu->list;
  while (item) {
    assert(item->menu == menu);
    next = item->next;
    free(item->label);
    free(item);
    item = next;
  }
  if (__glutCurrentMenu == menu) {
    __glutCurrentMenu = NULL;
  }
  free(menu);
}
Exemplo n.º 4
0
void APIENTRY
glutRemoveMenuItem(int num)
{
  GLUTmenuItem *item, **prev;
  int i;

  if (__glutMappedMenu) {
    menuModificationError();
  }
  i = __glutCurrentMenu->num;
  prev = &__glutCurrentMenu->list;
  item = __glutCurrentMenu->list;
  while (item) {
    if (i == num) {
      /* Found the menu item in list to remove. */
      __glutCurrentMenu->num--;

      /* Patch up menu's item list. */
      *prev = item->next;

      RemoveMenu((HMENU) __glutCurrentMenu->win, (UINT) i - 1, MF_BYPOSITION);

      free(item->label);
      free(item);
      return;
    }
    i--;
    prev = &item->next;
    item = item->next;
  }
  __glutWarning("Current menu has no %d item.", num);
}
Exemplo n.º 5
0
void FGAPIENTRY glutDestroyMenu(int menunum)
{
	SFG_WinMenu *menu = fgGetMenuByNum(menunum);
	SFG_WinMenuItem *item, *next;
	
	if (fgMappedMenu) 
		menuModificationError();

	assert(menu->ID == menunum - 1);
	DestroyMenu(menu->Handle);
	menuList[menunum - 1] = NULL;
	/* free all menu entries */
	item = menu->List;
	while (item) 
	{
		assert(item->Menu == menu);
		next = item->Next;
		free(item->Label);
		free(item);
		item = next;
	}
	if (fgCurrentMenu == menu)
		fgCurrentMenu = NULL;

	free(menu);
}
Exemplo n.º 6
0
int FGAPIENTRY glutCreateMenu(FGCBMenu selectFunc)
{
	SFG_WinMenu *menu;
	int menuid;
	
	if (fgMappedMenu) 
		menuModificationError();
	
	menuid = getUnusedMenuSlot();
	menu = (SFG_WinMenu *) malloc(sizeof(SFG_WinMenu));
	if (!menu)
		fgError("out of memory.");

	menu->ID = menuid;
	menu->Num = 0;
	menu->SubMenus = 0;
	menu->Select = selectFunc;
	menu->List = NULL;
	menu->Cascade = NULL;
	menu->Highlighted = NULL;
	menu->Anchor = NULL;
	menu->Handle = CreatePopupMenu();

	menuList[menuid] = menu;
	fgSetMenu(menu);
	return menuid + 1;
}
Exemplo n.º 7
0
void FGAPIENTRY glutChangeToSubMenu(int num, const char *label, int menu)
{
	SFG_WinMenu *popupmenu;
	SFG_WinMenuItem *item;
	int i;
#ifdef UNICODE
	WCHAR *wlabel;
#endif
	
	if (fgMappedMenu)
		menuModificationError();
	
	i = fgCurrentMenu->Num;
	item = fgCurrentMenu->List;
	while (item) 
	{
		if (i == num) 
		{
			if (!item->IsTrigger) 
			{
			/* If changing a menu entry to as submenu trigger, we
				need to account for submenus.  */
				item->Menu->SubMenus++;
			}
			free(item->Label);
			
			item->Label = _strdup(label);
			if (!item->Label)
				fgError("out of memory");
			item->IsTrigger = TRUE;
			item->Len = (int) strlen(label);
			item->Value = menu - 1;
			item->Unique = UniqueMenuHandler++;
			popupmenu = fgGetMenuByNum(menu);
			if (popupmenu)
				item->Handle = popupmenu->Handle;
#ifdef UNICODE
			wlabel = (WCHAR*)malloc((item->Len + 1) * sizeof(WCHAR));
			mbstowcs(wlabel, label, item->Len + 1);
#endif			
			RemoveMenu(fgCurrentMenu->Handle, (UINT) i - 1, MF_BYPOSITION);
			InsertMenu(fgCurrentMenu->Handle, (UINT) i - 1, MF_BYPOSITION | MFT_STRING | MF_POPUP, (UINT)item->Handle, 
#ifdef UNICODE
				wlabel
#else
				label
#endif
				);
#ifdef UNICODE
			free(wlabel);
#endif
			
			return;
		}
		i--;
		item = item->Next;
	}
	fgWarning("Current menu has no %d item.", num);
}
Exemplo n.º 8
0
void FGAPIENTRY glutDetachMenu(int button)
{
	if (fgMappedMenu)
		menuModificationError();
	
	if (fgStructure.Window->Menu[button] > 0) 
	{
		fgStructure.Window->ButtonUses--;
		fgStructure.Window->Menu[button] = 0;
	}
}
Exemplo n.º 9
0
void APIENTRY
glutDetachMenu(int button)
{
  if (__glutMappedMenu) {
    menuModificationError();
  }
  if (__glutCurrentWindow->menu[button] > 0) {
    __glutCurrentWindow->buttonUses--;
    __glutCurrentWindow->menu[button] = 0;
  }
}
Exemplo n.º 10
0
void FGAPIENTRY glutAttachMenu(int button)
{
/*	if (fgStructure.Window->Window.Handle == fgGameModeWindow) 
	{
		fgWarning("cannot attach menus in game mode.");
		return;
	}*/
	if (fgMappedMenu)
		menuModificationError();
	
	if (fgStructure.Window->Menu[button] < 1)
		fgStructure.Window->ButtonUses++;
	
	fgStructure.Window->Menu[button] = fgCurrentMenu->ID + 1;
}
Exemplo n.º 11
0
void APIENTRY
glutAttachMenu(int button)
{
  if (__glutCurrentWindow == __glutGameModeWindow) {
    __glutWarning("cannot attach menus in game mode.");
    return;
  }
  if (__glutMappedMenu) {
    menuModificationError();
  }
  if (__glutCurrentWindow->menu[button] < 1) {
    __glutCurrentWindow->buttonUses++;
  }
  __glutCurrentWindow->menu[button] = __glutCurrentMenu->id + 1;
}
Exemplo n.º 12
0
void FGAPIENTRY glutAddMenuEntry(const char *label, int value)
{
	SFG_WinMenuItem *entry;
	
	if (fgMappedMenu)
		menuModificationError();
	
	entry = (SFG_WinMenuItem *) malloc(sizeof(SFG_WinMenuItem));
	if (!entry)
		fgError("out of memory.");
	
	entry->Menu = fgCurrentMenu;
	setMenuItem(entry, label, value, FALSE);
	fgCurrentMenu->Num++;
	entry->Next = fgCurrentMenu->List;
	fgCurrentMenu->List = entry;
}
Exemplo n.º 13
0
void APIENTRY
glutAddMenuEntry(const char *label, int value)
{
  GLUTmenuItem *entry;

  if (__glutMappedMenu) {
    menuModificationError();
  }
  entry = (GLUTmenuItem *) malloc(sizeof(GLUTmenuItem));
  if (!entry) {
    __glutFatalError("out of memory.");
  }
  entry->menu = __glutCurrentMenu;
  setMenuItem(entry, label, value, FALSE);
  __glutCurrentMenu->num++;
  entry->next = __glutCurrentMenu->list;
  __glutCurrentMenu->list = entry;
}
Exemplo n.º 14
0
void APIENTRY
glutChangeToSubMenu(int num, const char *label, int menu)
{
	GLUTmenu *popupmenu;
	GLUTmenuItem *item;
	int i;
	
	if (__glutMappedMenu) {
		menuModificationError();
	}
	i = __glutCurrentMenu->num;
	item = __glutCurrentMenu->list;
	while (item) {
		if (i == num) {
			if (!item->isTrigger) {
				/* If changing a menu entry to as submenu trigger, we
				need to account for submenus.  */
				item->menu->submenus++;
			}
			free(item->label);
			
			item->label = strdup(label);
			if (!item->label)
				__glutFatalError("out of memory");
			item->isTrigger = TRUE;
			item->len = (int) strlen(label);
			item->value = menu - 1;
			item->unique = uniqueMenuHandler++;
			popupmenu = __glutGetMenuByNum(menu);
			if (popupmenu)
				item->win = popupmenu->win;
			
			RemoveMenu(__glutCurrentMenu->win, (UINT) i - 1, MF_BYPOSITION);
			InsertMenu(__glutCurrentMenu->win, (UINT) i - 1, MF_BYPOSITION | MFT_STRING | MF_POPUP, (UINT)item->win, label);
			
			return;
		}
		i--;
		item = item->next;
	}
	__glutWarning("Current menu has no %d item.", num);
}
Exemplo n.º 15
0
void APIENTRY
glutChangeToMenuEntry(int num, const char *label, int value)
{
  GLUTmenuItem *item;
  int i;

  if (__glutMappedMenu) {
    menuModificationError();
  }
  i = __glutCurrentMenu->num;
  item = __glutCurrentMenu->list;
  while (item) {
    if (i == num) {
      if (item->isTrigger) {
        /* If changing a submenu trigger to a menu entry, we
           need to account for submenus.  */
        item->menu->submenus--;
    /* Nuke the Win32 menu. */
    DestroyMenu((HMENU) item->win);
      }
      free(item->label);

      item->label = strdup(label);
      if (!item->label)
    __glutFatalError("out of memory");
      item->isTrigger = FALSE;
      item->len = (int) strlen(label);
      item->value = value;
      item->unique = uniqueMenuHandler++;
      ModifyMenu((HMENU) __glutCurrentMenu->win, (UINT) i - 1,
        MF_BYPOSITION | MFT_STRING, item->unique, label);

      return;
    }
    i--;
    item = item->next;
  }
  __glutWarning("Current menu has no %d item.", num);
}
Exemplo n.º 16
0
void FGAPIENTRY glutAddSubMenu(const char *label, int menu)
{
	SFG_WinMenuItem *submenu;
	SFG_WinMenu     *popupmenu;
	
	if (fgMappedMenu) 
		menuModificationError();
	
	submenu = (SFG_WinMenuItem *) malloc(sizeof(SFG_WinMenuItem));
	if (!submenu)
		fgError("out of memory.");
	
	fgCurrentMenu->SubMenus++;
	submenu->Menu = fgCurrentMenu;
	popupmenu = fgGetMenuByNum(menu);
	if (popupmenu)
		submenu->Handle = popupmenu->Handle;
	
	setMenuItem(submenu, label, /* base 0 */ menu - 1, TRUE);
	fgCurrentMenu->Num++;
	submenu->Next = fgCurrentMenu->List;
	fgCurrentMenu->List = submenu;
}
Exemplo n.º 17
0
void APIENTRY
glutAddSubMenu(const char *label, int menu)
{
  GLUTmenuItem *submenu;
  GLUTmenu     *popupmenu;

  if (__glutMappedMenu) {
    menuModificationError();
  }
  submenu = (GLUTmenuItem *) malloc(sizeof(GLUTmenuItem));
  if (!submenu) {
    __glutFatalError("out of memory.");
  }
  __glutCurrentMenu->submenus++;
  submenu->menu = __glutCurrentMenu;
  popupmenu = __glutGetMenuByNum(menu);
  if (popupmenu) {
    submenu->win = popupmenu->win;
  }
  setMenuItem(submenu, label, /* base 0 */ menu - 1, TRUE);
  __glutCurrentMenu->num++;
  submenu->next = __glutCurrentMenu->list;
  __glutCurrentMenu->list = submenu;
}