예제 #1
0
//wparam=MenuObjectHandle
//lparam=vKey
int MO_ProcessHotKeys(WPARAM wParam,LPARAM lParam)
{
	int objidx;//pos in array
	PMO_IntMenuItem pimi;
	int i;
	int vKey=(int)lParam;

	if (!isGenMenuInited) return -1;
	lockmo();
	objidx=GetMenuObjbyId((int)wParam);
	if (objidx==-1){unlockmo();return(FALSE);}


	for(i=0;i<MenuObjects[objidx].MenuItemsCount;i++) {
		pimi=&MenuObjects[objidx].MenuItems[i];
		if (pimi->mi.hotKey==0) continue;
		if (HIWORD(pimi->mi.hotKey)!=vKey) continue;
		if (!(LOWORD(pimi->mi.hotKey)&MOD_ALT)!=!(GetKeyState(VK_MENU)&0x8000)) continue;
		if (!(LOWORD(pimi->mi.hotKey)&MOD_CONTROL)!=!(GetKeyState(VK_CONTROL)&0x8000)) continue;
		if (!(LOWORD(pimi->mi.hotKey)&MOD_SHIFT)!=!(GetKeyState(VK_SHIFT)&0x8000)) continue;

		MO_ProcessCommand((WPARAM)getGlobalId(MenuObjects[objidx].id,pimi->id),(LPARAM)0);
		unlockmo();
		return TRUE;
	}

	unlockmo();
	return(FALSE);
}
예제 #2
0
bullet* newBullet(){
	if (bullet_num>=bullet_max)
		return 0;
	if ((bullet_array[bullet_num]=malloc(sizeof(bullet)))==0){
		perror("newBullet bullet malloc");
		return 0;
	}
	memset(bullet_array[bullet_num],0,sizeof(bullet));
	bullet_array[bullet_num]->id=getGlobalId();
	do{
		int *index;
		if ((index=malloc(sizeof(*index)))==0){
			perror("newBullet index malloc");
			break;
		}
		*index=bullet_num;
//		printf("%d newNpc index %d added %d\n",npc_array[npc_num]->id, npc_num,*index);
		if (bintreeAdd(&bullet_tree, bullet_array[bullet_num]->id, index)==0){
			perror("newBullet bintreeAdd malloc");
			break;
		}
		bullet_num++;
		return bullet_array[bullet_num-1];
	}while(0);
	delBullet(0, bullet_array[bullet_num]);
	return 0;
}
예제 #3
0
int RecursiveRemoveChilds(int pos,ListParam *param)
{
	ListParam localparam;
	int rootid;
	int i=0;
	int menuitemid;//id
	int objidx;//pos in array
	int *MenuItemsCount;
	PMO_IntMenuItem *MenuItems=NULL;

	objidx=GetMenuObjbyId(param->MenuObjectHandle);
	if ((objidx==-1)){return(-1);}

	localparam=*param;

	//rootid=(*param->MenuItems)[pos].id|param->cntFlag;
	rootid=getGlobalId(MenuObjects[objidx].id,MenuObjects[objidx].MenuItems[pos].id);
	menuitemid=MenuObjects[objidx].MenuItems[pos].id;

	MenuItems=&MenuObjects[objidx].MenuItems;
	MenuItemsCount=&MenuObjects[objidx].MenuItemsCount;

	if ((*MenuItems)[pos].mi.flags&CMIF_ROOTPOPUP) {
		while(i<*MenuItemsCount) {
			if ((*MenuItems)[i].mi.root!=rootid||(*MenuItems)[i].mi.root==-1) {
				i++;
				continue;
			}
			if ((*MenuItems)[i].mi.flags&CMIF_ROOTPOPUP) {
				RecursiveRemoveChilds(i,&localparam);
				i=0;
				continue;
			}
			if ((*MenuItems)[i].mi.flags&CMIF_CHILDPOPUP) {
				FreeAndNil(&((*MenuItems)[i].mi.pszName));
				FreeAndNil(&((*MenuItems)[i].CustomName));
				FreeAndNil(&((*MenuItems)[i].UniqName));
				if (MenuObjects[objidx].FreeService)
					CallService(MenuObjects[objidx].FreeService,(WPARAM)(*MenuItems)[i].globalid,(LPARAM)(*MenuItems)[i].mi.ownerdata);

				RemoveFromList(i,(void **)MenuItems,MenuItemsCount,sizeof(TMO_IntMenuItem));
				i=0;
				continue;
	}	}	}

	i = GetMenuItembyId( objidx, menuitemid );
	if ( i >= 0 && i < *MenuItemsCount ) {
		FreeAndNil(&((*MenuItems)[i].mi.pszName));
		FreeAndNil(&((*MenuItems)[i].CustomName));
		FreeAndNil(&((*MenuItems)[i].UniqName));

		if (MenuObjects[objidx].FreeService)
			CallService(MenuObjects[objidx].FreeService,(WPARAM)(*MenuItems)[i].globalid,(LPARAM)(*MenuItems)[i].mi.ownerdata);

		RemoveFromList(i,(void **)MenuItems,MenuItemsCount,sizeof(TMO_IntMenuItem));
	}
	return 0;
}
예제 #4
0
//wparam=MenuObjectHandle
//lparam=PMO_MenuItem
int MO_AddOldNewMenuItem(WPARAM wParam,LPARAM lParam)
{
	PMO_MenuItem pmi=(PMO_MenuItem)lParam;
	int objidx;
	int oldroot,i;

	if (!isGenMenuInited) return -1;
	if (pmi==NULL){return(-1);}
	objidx=GetMenuObjbyId(wParam);
	if (objidx==-1){return(-1);}

	if (pmi->cbSize!=sizeof(TMO_MenuItem)) return 0;

	if ((pmi->flags&CMIF_ROOTPOPUP||pmi->flags&CMIF_CHILDPOPUP))	{return(0);}

	//is item with popup or not
	if (pmi->root==0)
	{
		//yes,this without popup
		pmi->root=-1;//first level
	}
	else
	{
		//no,search for needed root and create it if need
		TCHAR* tszRoot = ( TCHAR* )CallService( MS_LANGPACK_PCHARTOTCHAR, 0, (LPARAM)pmi->root );

		oldroot=-1;
		for(i=0;i<MenuObjects[objidx].MenuItemsCount;i++) {
			TMO_IntMenuItem *p = &MenuObjects[objidx].MenuItems[i];
			if ( p->mi.pszName == NULL )
				continue;
			if (( p->mi.flags & CMIF_ROOTPOPUP) && !_tcscmp( p->mi.pszName, tszRoot)) {
				oldroot = getGlobalId( MenuObjects[objidx].id, p->id );
				break;
		}	}
		mir_free( tszRoot );
		if (oldroot==-1)
		{
			//not found,creating root
			TMO_MenuItem tmi;
			ZeroMemory(&tmi,sizeof(tmi));
			tmi=*(PMO_MenuItem)lParam;
			tmi.flags|=CMIF_ROOTPOPUP;
			tmi.ownerdata=0;
			tmi.root=-1;
			//copy pszPopupName
			tmi.pszName=(TCHAR*)pmi->root;
			oldroot=MO_AddNewMenuItem(wParam,(LPARAM)&tmi);
		}
		pmi->root=oldroot;
		//popup will be created in next commands
	}
	pmi->flags|=CMIF_CHILDPOPUP;
	//add popup(root allready exists)
	return(MO_AddNewMenuItem(wParam,(LPARAM)pmi));
}
예제 #5
0
tower* newTower(){
	if (tower_num==tower_max)
		return 0;
	if ((tower_array[tower_num]=malloc(sizeof(tower)))==0)
		return 0;
	memset(tower_array[tower_num],0,sizeof(tower));
	tower_array[tower_num]->id=getGlobalId();
	tower_num++;
	return tower_array[tower_num-1];
}
예제 #6
0
/** Map
 * @param mapping Description of the param.
 * @return void
 */
void PlainDictionary::updateIDs() {
    unsigned int i;

    for (i = 0; i < shared.size(); i++) {
        shared[i]->id = getGlobalId(i, SHARED_SUBJECT);
    }

    for (i = 0; i < subjects.size(); i++) {
        subjects[i]->id = getGlobalId(i, NOT_SHARED_SUBJECT);
    }

    for (i = 0; i < objects.size(); i++) {
        objects[i]->id = getGlobalId(i, NOT_SHARED_OBJECT);
    }

    for (i = 0; i < predicates.size(); i++) {
        predicates[i]->id = getGlobalId(i, NOT_SHARED_PREDICATE);
    }
}
예제 #7
0
//wparam=MenuObjectHandle
//lparam=PMO_MenuItem
//return MenuItemHandle
int MO_AddNewMenuItem(WPARAM wParam,LPARAM lParam)
{
	PMO_MenuItem pmi=(PMO_MenuItem)lParam;
	int objidx,menuobjecthandle;
	int miidx,result;
	int res;

	if (!isGenMenuInited) return -1;
	if (pmi==NULL){return(-1);}
	lockmo();
	menuobjecthandle=wParam;
	objidx=GetMenuObjbyId(menuobjecthandle);
	if (objidx==-1){unlockmo();return(-1);}

	if (pmi->cbSize!=sizeof(TMO_MenuItem)) {unlockmo();return -1;}

	if (!(pmi->flags&CMIF_ROOTPOPUP||pmi->flags&CMIF_CHILDPOPUP)){
		//old mode
		unlockmo();
		res=(int)MO_AddOldNewMenuItem(wParam,lParam);
		return(res);
	}

	MenuObjects[objidx].MenuItems=(PMO_IntMenuItem)mir_realloc(MenuObjects[objidx].MenuItems,sizeof(TMO_IntMenuItem)*(MenuObjects[objidx].MenuItemsCount+1));
	miidx=MenuObjects[objidx].MenuItemsCount;

	ZeroMemory(&MenuObjects[objidx].MenuItems[miidx],sizeof(MenuObjects[objidx].MenuItems[miidx]));
	MenuObjects[objidx].MenuItems[miidx].id=NextObjectMenuItemId++;
	MenuObjects[objidx].MenuItems[miidx].globalid=getGlobalId(menuobjecthandle,MenuObjects[objidx].MenuItems[miidx].id);
	MenuObjects[objidx].MenuItems[miidx].mi=*pmi;
	MenuObjects[objidx].MenuItems[miidx].mi.pszName = (TCHAR*)CallService( MS_LANGPACK_PCHARTOTCHAR,0,(LPARAM)pmi->pszName);
	MenuObjects[objidx].MenuItems[miidx].iconId=-1;
	MenuObjects[objidx].MenuItems[miidx].OverrideShow=TRUE;
	MenuObjects[objidx].MenuItems[miidx].IconRegistred=FALSE;
	if (pmi->hIcon!=NULL) 
		MenuObjects[objidx].MenuItems[miidx].iconId=ImageList_AddIcon(MenuObjects[objidx].hMenuIcons,pmi->hIcon);

	result=getGlobalId(wParam,MenuObjects[objidx].MenuItems[miidx].id);
	MenuObjects[objidx].MenuItemsCount++;
	unlockmo();
	return(result);
}
예제 #8
0
void
DocumentId::print(std::ostream& out, bool verbose, const std::string& indent) const
{
    (void) indent;
    if (verbose) {
        out << "DocumentId(id = ";
    }
    out << _id->toString().c_str();
    if (verbose) {
        out << ", " << getGlobalId().toString() << ")";
    }
}
예제 #9
0
unsigned int FourSectionDictionary::stringToId(std::string &key, TripleComponentRole position)
{
	unsigned int ret;

        if(key.length()==0) {
		return 0;
        }

	switch (position) {
	case SUBJECT:
		ret = shared->locate((const unsigned char *)key.c_str(), key.length());
		if( ret != 0) {
			return getGlobalId(ret,SHARED_SUBJECT);
		}
		ret = subjects->locate((const unsigned char *)key.c_str(), key.length());
		if(ret != 0) {
			return getGlobalId(ret,NOT_SHARED_SUBJECT);
		}
        return 0;
	case PREDICATE:
		ret = predicates->locate((const unsigned char *)key.c_str(), key.length());
		if(ret!=0) {
			return getGlobalId(ret, NOT_SHARED_PREDICATE);
		}
        return 0;

	case OBJECT:
		ret = shared->locate((const unsigned char *)key.c_str(), key.length());
		if( ret != 0) {
			return getGlobalId(ret,SHARED_OBJECT);
		}
		ret = objects->locate((const unsigned char *)key.c_str(), key.length());
		if(ret != 0) {
			return getGlobalId(ret,NOT_SHARED_OBJECT);
		}
        return 0;
	}
	return 0;
}
예제 #10
0
//LOWORD(wparam) menuident
int MO_ProcessCommandByMenuIdent(WPARAM wParam,LPARAM lParam)
{
	int i,j;

	if (!isGenMenuInited) return -1;
	lockmo();
	for (i=0;i<MenuObjectsCount;i++)
	{
		for (j=0;j<MenuObjects[i].MenuItemsCount;j++)
		{
			if (MenuObjects[i].MenuItems[j].id==(int)wParam)
			{
				int globid;
				globid=getGlobalId(MenuObjects[i].id,MenuObjects[i].MenuItems[j].id);
				unlockmo();
				return(MO_ProcessCommand(globid,lParam));
			}
		}
	}
	unlockmo();
	return(FALSE);
}
예제 #11
0
HMENU BuildRecursiveMenu(HMENU hMenu,ListParam *param)
{
	int i,j;
	MENUITEMINFO mii;
	PMO_MenuItem mi;
	HMENU hSubMenu;
	ListParam localparam;
	TCheckProcParam CheckParam;
	//PIntMenuObject pimo=NULL;
	int pimoidx;

	PMO_IntMenuItem MenuItems=NULL;
	int rootlevel;
	//	int cntFlag;
	int MenuItemsCount;
	char *checkproc=NULL;
	char *onAddproc=NULL;
	char MenuNameItems[256];

	if (param==NULL) return(NULL);
	pimoidx=GetMenuObjbyId(param->MenuObjectHandle);
	if (pimoidx==-1){return(NULL);}
	//pimo=&MenuObjects[pimoidx];

	MenuItems=MenuObjects[pimoidx].MenuItems;
	MenuItemsCount=MenuObjects[pimoidx].MenuItemsCount;
	rootlevel=param->rootlevel;
	//cntFlag=param->cntFlag;
	checkproc=MenuObjects[pimoidx].CheckService;
	onAddproc=MenuObjects[pimoidx].onAddService;

	localparam=*param;
	wsprintfA(MenuNameItems, "%s_Items", MenuObjects[pimoidx].Name);
	/*
	while((rootlevel==-1)&&(GetMenuItemCount(hMenu)>(param->cntFlag==MENU_CUSTOMITEMMAIN?1:0)) )
	DeleteMenu(hMenu,0,MF_BYPOSITION);
	*/
	while((rootlevel==-1)&&GetMenuItemCount(hMenu)>0) DeleteMenu(hMenu,0,MF_BYPOSITION);

	for(j=0;j<MenuItemsCount;j++) {
		mi=&(MenuItems[j].mi);
		if (mi->cbSize!=sizeof(TMO_MenuItem)) continue;

		//
		//		RegisterOneIcon(pimoidx,j);

		if (checkproc!=NULL)	{
			CheckParam.lParam=param->lParam;
			CheckParam.wParam=param->wParam;
			CheckParam.MenuItemOwnerData=mi->ownerdata;
			CheckParam.MenuItemHandle=getGlobalId(param->MenuObjectHandle,MenuItems[j].id);
			if (CallService(checkproc,(WPARAM)&CheckParam,(LPARAM)0)==FALSE)	continue;
		}

		/**************************************/
		if (rootlevel==-1&&mi->root==-1&&MenuObjects[pimoidx].bUseUserDefinedItems) {
			char menuItemName[256];
			char DBString[256];
			DBVARIANT dbv;
			memset(&dbv,0,sizeof(dbv));

			GetMenuItemName( &MenuItems[j], menuItemName, sizeof(menuItemName));

			// check if it visible
			wsprintfA(DBString, "%s_visible", menuItemName);
			if (DBGetContactSettingByte(NULL, MenuNameItems, DBString, -1)==-1)
				DBWriteContactSettingByte(NULL,MenuNameItems, DBString,1);

			MenuItems[j].OverrideShow=TRUE;
			if (!DBGetContactSettingByte(NULL, MenuNameItems, DBString, 1)) {
				MenuItems[j].OverrideShow=FALSE;
				continue;  // find out what value to return if not getting added
			}

			// mi.pszName
			wsprintfA(DBString, "%s_name", menuItemName);
			if (!DBGetContactSettingTString(NULL, MenuNameItems, DBString, &dbv)) {
				if (_tcslen(dbv.ptszVal)>0) {
					if (MenuItems[j].CustomName) mir_free(MenuItems[j].CustomName);
					MenuItems[j].CustomName=mir_tstrdup(dbv.ptszVal);
				}
				if (dbv.ptszVal)	mir_free(dbv.ptszVal);
			}

			wsprintfA(DBString, "%s_pos", menuItemName);
			if (DBGetContactSettingDword(NULL, MenuNameItems, DBString, -1)==-1)
				DBWriteContactSettingDword(NULL,MenuNameItems, DBString,mi->position);

			mi->position = DBGetContactSettingDword(NULL, MenuNameItems, DBString, mi->position);
		}

		/**************************************/

		ZeroMemory(&mii,sizeof(mii));
		i=0;
		//hMenu=hMainMenu;
		mii.cbSize=MENUITEMINFO_V4_SIZE;
		mii.fMask=MIIM_SUBMENU|MIIM_TYPE|MIIM_DATA;
		mii.dwItemData=getGlobalId(param->MenuObjectHandle,MenuItems[j].id);
		hSubMenu=NULL;

		if (rootlevel!=(int)MenuItems[j].mi.root)
			continue;

		if ((MenuItems[j].mi.flags&CMIF_CHILDPOPUP)||(MenuItems[j].mi.flags&CMIF_ROOTPOPUP))	{
			if (rootlevel==(int)MenuItems[j].mi.root) {
				//our level
				if (MenuItems[j].mi.flags&CMIF_ROOTPOPUP) {
					i=WhereToPlace(hMenu,mi,&mii,&localparam);

					if (!IsWinVer98Plus()) {
						mii.cbSize=MENUITEMINFO_V4_SIZE;
						mii.fMask=MIIM_DATA|MIIM_TYPE|MIIM_ID|MIIM_SUBMENU;
					}
					else {
						mii.cbSize=sizeof(mii);
						mii.fMask=MIIM_DATA|MIIM_ID|MIIM_STRING|MIIM_SUBMENU;
						if (MenuItems[j].iconId!=-1) mii.fMask|=MIIM_BITMAP;
					}

					mii.fType=MFT_STRING;
					//mii.dwItemData=getGlobalId(param->MenuObjectHandle,MenuItems[j].id);
					mii.dwItemData=MenuItems[j].globalid;

					hSubMenu=CreatePopupMenu();
					mii.hSubMenu=hSubMenu;
					mii.hbmpItem=HBMMENU_CALLBACK;
					mii.dwTypeData=(MenuItems[j].CustomName)?(MenuItems[j].CustomName):(mi->pszName);
#ifdef PUTPOSITIONSONMENU
					if (GetKeyState(VK_CONTROL)&0x8000) {
						TCHAR str[256];
						mir_sntprintf(str,SIZEOF(str),_T("%s (%d,id %x)"),mi->pszName,mi->position,mii.dwItemData);
						mii.dwTypeData=str;
					}
#endif
					InsertMenuItemWithSeparators(hMenu,i,TRUE,&mii,&localparam);
					localparam.rootlevel=getGlobalId(param->MenuObjectHandle,MenuItems[j].id);//MenuItems[j].id|cntFlag;
					BuildRecursiveMenu(hSubMenu,&localparam);

					continue;
				}

				i=WhereToPlace(hMenu,mi,&mii,&localparam);

				if (!IsWinVer98Plus()) {
					mii.cbSize=MENUITEMINFO_V4_SIZE;
					mii.fMask=MIIM_DATA|MIIM_TYPE|MIIM_ID|MIIM_STATE;
				}
				else {
					mii.cbSize=sizeof(mii);
					mii.fMask=MIIM_DATA|MIIM_ID|MIIM_STRING|MIIM_STATE;
					if (MenuItems[j].iconId!=-1) mii.fMask|=MIIM_BITMAP;
				}
				mii.fState=((MenuItems[j].mi.flags&CMIF_GRAYED)?MFS_GRAYED:MFS_ENABLED);
				mii.fState|=((MenuItems[j].mi.flags&CMIF_CHECKED)?MFS_CHECKED:MFS_UNCHECKED);
				mii.fType=MFT_STRING;
				mii.wID=MenuItems[j].id;
				//mii.dwItemData=getGlobalId(param->MenuObjectHandle,MenuItems[j].id);//MenuItems[j].id|cntFlag;
				mii.dwItemData=MenuItems[j].globalid;

				mii.hbmpItem=HBMMENU_CALLBACK;
				mii.dwTypeData=(MenuItems[j].CustomName)?(MenuItems[j].CustomName):(mi->pszName);
#ifdef PUTPOSITIONSONMENU
				if (GetKeyState(VK_CONTROL)&0x8000) {
					TCHAR str[256];
					mir_sntprintf( str, SIZEOF(str), _T("%s (%d,id %x)"),mi->pszName,mi->position,mii.dwItemData);
					mii.dwTypeData=str;
				}
#endif
				if (onAddproc!=NULL)
					if (CallService(onAddproc,(WPARAM)&mii,(LPARAM)MenuItems[j].globalid)==FALSE)	continue;

				InsertMenuItemWithSeparators(hMenu,i,TRUE,&mii,&localparam);
				continue;
			}
		}
		else {
			//old items - not needed
			if (rootlevel==-1) {
			}
		}
	}
	return hMenu;
}
예제 #12
0
unsigned int FourSectionDictionary::getGlobalId(unsigned int id, DictionarySection position) {
	return getGlobalId(this->mapping, id, position);
}