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

📄 bcmenuitem.c

📁 用你的语音Modem实现像电话一样通话的程序
💻 C
字号:
#include "bcmenubar.h"// ======================================= menu itemBC_MenuItem::BC_MenuItem(char *text, char *hotkey_text, int hotkey){	checked = 0;	this->hotkey = hotkey;	if(this->hotkey == 0) this->hotkey = 65535;	active = 0;	highlighted = 0;	submenu = 0;	shift_set = 0;	strcpy(this->text, text);	strcpy(this->hotkey_text, hotkey_text);}BC_MenuItem::BC_MenuItem(char *text){	checked = hotkey = 0;	active = 0;	highlighted = 0;	submenu = 0;	shift_set = 0;	strcpy(this->text, text);	this->hotkey_text[0] = 0;}BC_MenuItem::create_objects(BC_Menu* menu, int y){	this->menu = menu;    this->y = y;	if(!strcmp(text, "-")) h = 5; else h = 22; }BC_MenuItem::~BC_MenuItem(){// derived submenu must be deleted manually// delete underived submenu	if(submenu) delete submenu;	menu->remove_menuitem(this); // remove this pointer}BC_MenuItem::set_done(int return_value){	menu->set_done(return_value);}BC_MenuItem::set_text(char *text){	strcpy(this->text, text);}BC_MenuItem::get_height(){	return h;}BC_MenuItem::get_y(){	return y;}BC_MenuItem::in_submenu(){	if(submenu) return submenu->in_submenu();	else return 0;}BC_MenuItem::get_text_width(XFontStruct *font, char *text){	return menu->get_text_width(font, text);}BC_MenuItem::get_text_width(){	static int w;	w = menu->get_text_width(menu->top_level->largefont, text) + 20;	if(get_checked()) { w += 20; }	return w;}BC_MenuItem::get_checked(){	if(submenu) return submenu->get_checked();	else	return checked;}BC_MenuItem::get_hotkey_width(){	static int w;	w = menu->get_text_width(menu->top_level->largefont, hotkey_text) + 10;	return w;}BC_MenuItem::get_width(){	return menu->get_width();}BC_MenuItem::set_shift(){	shift_set = 1;}BC_MenuItem::set_checked(int checked){	this->checked = checked;}BC_MenuItem::add_submenu(BC_SubMenu* submenu){	this->submenu = submenu;	submenu->create_objects(this, menu->get_width() - 10, y - 5);}BC_MenuItem::draw(){	if(!strcmp(text, "-"))	{		menu->popup_menu->set_color(DKGREY);		menu->popup_menu->draw_line(5, y + h / 2, menu->popup_menu->w - 5, y + h / 2);		menu->popup_menu->set_color(LTGREY);		menu->popup_menu->draw_line(5, y + h / 2 + 1, menu->popup_menu->w - 5, y + h / 2 + 1);	}	else	{		if(highlighted)		{			if(menu->button_down())			{				if(y == 0)				menu->popup_menu->draw_3d_big(2, y + 2, menu->popup_menu->w - 4, h - 4, DKCYAN, MDCYAN, LTCYAN);				else				menu->popup_menu->draw_3d_big(2, y, menu->popup_menu->w - 4, h - 2, DKCYAN, MDCYAN, LTCYAN);			}			else			{				menu->popup_menu->set_color(LTBLUE);				if(y == 0)				menu->popup_menu->draw_box(2, y + 2, menu->popup_menu->w - 4, h - 4);				else				menu->popup_menu->draw_box(2, y, menu->popup_menu->w - 4, h - 2);			}		}		menu->popup_menu->set_color(BLACK);		if(get_checked())		{			menu->popup_menu->draw_check(10, y + 2, 15, 15);			menu->popup_menu->draw_text(30, y + h - 7, text);			menu->popup_menu->draw_text(menu->hotkey_x, y + h - 7, hotkey_text);		}		else		{			menu->popup_menu->draw_text(10, y + h - 7, text);			menu->popup_menu->draw_text(menu->hotkey_x, y + h - 7, hotkey_text);		}	}}BC_MenuItem::deactivate(){	highlighted = 0;	if(submenu) submenu->deactivate();	return 1;}BC_MenuItem::activate(){	highlighted = 1;	if(submenu) submenu->activate();	return 1;}BC_MenuItem::cursor_left_dispatch(){	int result = 0;		if(submenu && submenu->active) result += submenu->cursor_left_dispatch();	else	if(highlighted)	{		deactivate();		result = 1;	}	return result;}BC_MenuItem::key_press(){//printf("%d %d\n", menu->get_keypress(), menu->shift_down());	if((menu->get_keypress() == hotkey && !menu->shift_down() && !shift_set) || 		 (menu->get_keypress() == hotkey && menu->shift_down() && shift_set))	{		handle_event();// trap keypress		menu->set_keypress(0);	}}BC_MenuItem::cursor_motion(int cursor_x, int cursor_y){	static int result;		result = 0;// test only submenu if submenu active	if(submenu && submenu->active) submenu->motion_event_dispatch();// test this item	if(highlighted)	{// cursor just moved out		if(cursor_x < 0 || cursor_x > menu->popup_menu->w ||		   cursor_y < y || cursor_y > y + h)		{			if(!submenu || !submenu->in_submenu()) result = deactivate();		}	}	else	{// cursor just moved in		if(cursor_x > 0 && cursor_x < menu->popup_menu->w &&		   cursor_y > y && cursor_y < y + h)		{			//menu->deactivate_items();			if(!menu->in_submenu()) result = activate();		}	}		return result;}BC_MenuItem::button_press(){	if(submenu) submenu->button_press_dispatch();	if(highlighted) draw();}BC_MenuItem::button_release_dispatch(int cursor_x, int cursor_y){//printf("BC_MenuItem::button_release 1\n");	if(strcmp(text, "-"))	{// test submenu		if(submenu) submenu->button_release_dispatch();// didn't find in submenu//printf("BC_MenuItem::button_release 2 cursor_x %d cursor_y %d active %d\n", cursor_x, cursor_y, active);		if(menu->active)		{			if(cursor_x > 0 && cursor_x < menu->popup_menu->w &&				 cursor_y > y && cursor_y < y + h)			{				menu->menubar->deactivate();				handle_event();			}		}	}}

⌨️ 快捷键说明

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