⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xaosmenu.cpp

📁 另一个分形程序
💻 CPP
字号:
/* *     XaoS, a fast portable realtime fractal zoomer  *                  Copyright © 1996-1999 by * *      Jan Hubicka          (hubicka@paru.cas.cz) *      Thomas Marsh         (tmarsh@austin.ibm.com) * *	be_error.cpp	BeOS user interface error output * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <string.h>#include <Rect.h>#include <MenuItem.h>#include <Application.h>#include <ctype.h>#include "XaoSMenu.h"#include "xmenu.h"XaoSMenu::XaoSMenu(port_id port, CONST char *name,int width,int height):        type(BROOTMENU),       mEventPort(port){       BRect rect(0,0,width,height);       menu=menuBox=new BMenuBar(rect,name);	root=NULL;	next=NULL;	popup=NULL;	previous=NULL;	target=NULL;}XaoSMenu *XaoSMenu::pmenu=NULL;XaoSMenu::XaoSMenu(port_id port, CONST char *name, BPoint w, BHandler *t):        type(BPOPUPMENU),       mEventPort(port),       target(t),       where(w){       if(pmenu) delete pmenu, pmenu=NULL;       menu=popup=new BPopUpMenu(name,this);       pmenu=this;	root=NULL;	previous=NULL;       next=NULL;}XaoSMenu::XaoSMenu(port_id port, CONST char *name, BHandler *t):        type(BSUBMENU),       mEventPort(port),       target(t){        menu=new BMenu(name);	next=NULL;	root=NULL;	popup=NULL;	previous=NULL;}voidXaoSMenu::DeleteSubmenus(XaoSMenu *m){	if (next) next->DeleteSubmenus(m);	if (this->root==m) 	{		if(next) next->DeleteSubmenus(this);		this->cleanMenu();		delete this;	}}XaoSMenu::~XaoSMenu(){	DeleteSubmenus(this);	if (menu) delete menu;	if (next) next->previous=previous;	if (previous) previous->next=next;}voidXaoSMenu::removeItems(void){	BMenuItem *i;	int c=menu->CountItems(),n;	for(n=c-1;n>=0;n--)	{		i=menu->ItemAt(0);		if(i->Submenu()) {			XaoSMenu *m=next->findMenu(i->Submenu());			m->cleanMenu();			delete m;		}		menu->RemoveItem(i);	}}voidXaoSMenu::cleanMenu(){        if(type == BROOTMENU && pmenu && !popup) pmenu=NULL, delete pmenu;	menu=NULL;}XaoSMenu *XaoSMenu::findMenu(BMenu *m){	if(menu == m) return this;	if(!next) return NULL;	return (next->findMenu(m));	//Unlock();}voidXaoSMenu::setMenu(struct uih_context *c, CONST char *n){	int i;	CONST menuitem *item;	BMenuItem *beitem;	removeItems();	strcpy(name,n);	context=c;	menu->SetRadioMode(false);	for (i=0; (item = menu_item(name, i)) != NULL; i++)	{                if(item->type==MENU_SEPARATOR)                {			menu->AddSeparatorItem();                } else if(item->type==MENU_SUBMENU)		{			BMessage *m1=new BMessage('XaCm');			m1->AddPointer("Cmd",item);			XaoSMenu *m = new XaoSMenu(mEventPort, item->name, target);			AddToList(m);			m->root=this;			m->setMenu(c,item->shortname);			beitem= new BMenuItem(m->menu,m1);			if (item->key && type != BROOTMENU) beitem->SetShortcut(toupper(item->key[0]),0);			menu->AddItem(beitem);		} else {			BMessage *m=new BMessage('XaCm');			m->AddPointer("Cmd",item);			menu->AddItem(beitem = new BMenuItem(item->name, m));			if (item->key && type != BROOTMENU) beitem->SetShortcut(toupper(item->key[0]),0);			beitem->SetMarked (menu_enabled(item,c));                }	}	if (target!=NULL) menu->SetTargetForItems(target);        if (popup) popup->Go(where, true, false, true);}void XaoSMenu::EnableDisable(CONST menuitem *i){	int c=menu->CountItems(),n;	BMenuItem *bi;	for(n=0;n<c;n++)	{		bi=menu->ItemAt(n);		if(!bi->Submenu() && bi->Message()) {		   CONST menuitem *ptr;			   bi->Message()->FindPointer("Cmd",(void **)&ptr);		   if (ptr==i) {			bi->SetMarked(menu_enabled(i,context));			if (i->flags & MENUFLAG_RADIO) {			  int d;			  for(d=0;d<c;d++)			  {				bi=menu->ItemAt(d);				if(d!=n&&!bi->Submenu() && bi->Message())				{		   			bi->Message()->FindPointer("Cmd",(void **)&ptr);					if (ptr && (ptr->flags & MENUFLAG_RADIO)) bi->SetMarked(menu_enabled(ptr,context));				}			  }			}		   }		}			}	if(next) next->EnableDisable(i);}void XaoSMenu::AddToList(XaoSMenu *m){	XaoSMenu *lm=this;	while(lm->next) lm=lm->next;	m->previous=lm;	if(lm->next) next->previous=lm;	lm->next=m;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -