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

📄 panel_select.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	switch (event_action(event)) {		case ACTION_ERASE_CHAR_BACKWARD:		case ACTION_ERASE_CHAR_FORWARD:		case ACTION_ERASE_WORD_BACKWARD:		case ACTION_ERASE_WORD_FORWARD:		case ACTION_ERASE_LINE_BACKWARD:		case ACTION_ERASE_LINE_END:			return 1;                case UP_CURSOR_KEY:                case DOWN_CURSOR_KEY:                case RIGHT_CURSOR_KEY:                case LEFT_CURSOR_KEY:                        if (event_is_up(event))                                return 0;                        else                                return 1;		default:			return 0;	}}		panel_default_event(panel, event)register panel_handle	panel;register Event		*event;{   panel_item_handle	new;   panel_item_handle    object = PANEL_ITEM_CAST(panel);   int                                  slider_active;    if (is_panel(panel)) {       /* panel is a panel_handle */                slider_active = panel->SliderActive;        } else {        /* panel is a panel_item_handle */                object = PANEL_ITEM_CAST(panel);                slider_active = object->panel->SliderActive;        }   if (!slider_active) {        /* find out who's under the locator */        new = panel_finditem(panel, event);        /* use the panel if not over some item */        if (!new)                new = (panel_item_handle) panel;   }else                         new = panel->current;   /* cancel the old item if needed */   if (new != panel->current) {      (void)panel_cancel((Panel_item) panel->current, event);      panel->current = new;      /* Map the event to an object-enter event:       * LOC_MOVE -> PANEL_EVENT_MOVE_IN,       * LOC_DRAG -> PANEL_EVENT_DRAG_IN.       */       if (event_id(event) == LOC_MOVE)	 event_id(event) = PANEL_EVENT_MOVE_IN;       else if (event_id(event) == LOC_DRAG)	 event_id(event) = PANEL_EVENT_DRAG_IN;   }   /* If help event, call help request function. */   if (event_action(event) == HELP_KEY) {       if (event_is_down(event)) {	 char *help;         if (new != (panel_item_handle) panel && new->help_data)	    help = new->help_data;         else	    help = panel->help_data;	    (void)help_request((Window)(LINT_CAST(panel)), help, event);       }   } else   /* Here we offer keyboard events first to the    * item under the locator (which may be the panel),    * then to the item with the caret.    */	if (event_is_euc(event) || panel_event_is_panel_semantic(event) ||                        event_is_iso(event) ||			panel_event_is_sunview_semantic(event)) {		if (wants_key(new))			/* tell the item about the key event */			(void)panel_handle_event((Panel_item) new, event);		else if (panel->caret)			/* give the key event to the caret item */			(void)panel_handle_event((Panel_item) panel->caret, event);		else			/* nobody wants the key event */;	} else {		/* tell the item about the non-key event */		(void)panel_handle_event((Panel_item) new, event);	}          /* no current item if window-exit */   if (event_id(event) == LOC_WINEXIT){        panel->current = NULL;        panel->SliderActive = FALSE;   }}panel_handle_event(client_object, event)Panel_item	client_object;	/* could be a Panel */Event		*event;{   panel_item_handle	object = PANEL_ITEM_CAST(client_object);   if (!object)      return;   (*object->ops->handle_event)(object, event);}panel_begin_preview(client_object, event)Panel_item	client_object;	/* could be a Panel */Event		*event;{   panel_item_handle	object = PANEL_ITEM_CAST(client_object);   if (!object)      return;   (*object->ops->begin_preview)(object, event);}panel_update_preview(client_object, event)Panel_item	client_object;	/* could be a Panel */Event		*event;{   panel_item_handle	object = PANEL_ITEM_CAST(client_object);   if (!object)      return;   (*object->ops->update_preview)(object, event);}panel_accept_preview(client_object, event)Panel_item	client_object;	/* could be a Panel */Event			*event;{   panel_item_handle	object = PANEL_ITEM_CAST(client_object);   if (!object)      return;   (*object->ops->accept_preview)(object, event);}panel_cancel_preview(client_object, event)Panel_item	client_object;	/* could be a Panel */Event		*event;{   panel_item_handle	object = PANEL_ITEM_CAST(client_object);   if (!object)      return;   (*object->ops->cancel_preview)(object, event);}panel_accept_menu(client_object, event)Panel_item	client_object;	/* could be a Panel */Event		*event;{   panel_item_handle	object = PANEL_ITEM_CAST(client_object);   if (!object || !show_menu(object))      return;   (*object->ops->accept_menu)(object, event);}panel_accept_key(client_object, event)Panel_item	client_object;	/* could be a Panel */Event			*event;{   panel_item_handle	object = PANEL_ITEM_CAST(client_object);   if (!object)      return;   (*object->ops->accept_key)(object, event);}panel_cancel(client_object, event)Panel_item	client_object;	/* could be a Panel */Event		*event;{   Event		cancel_event;   if (!client_object)      return;   cancel_event = *event;   event_id(&cancel_event) = PANEL_EVENT_CANCEL;   (void)panel_handle_event(client_object, &cancel_event);}panel_default_handle_event(client_object, event)Panel_item	client_object;	/* could be a Panel */register Event	*event;{   Panel_setting 	current_state;   panel_item_handle    object = PANEL_ITEM_CAST(client_object);        panel_handle            panel_object = PANEL_CAST(client_object);      current_state = (Panel_setting) panel_get(client_object, PANEL_MOUSE_STATE);   switch (event_id(event)) {        /*         * Middle button begin & accept preview actions same as left button         * for text items only.  Ignore middle button for other panel items.         */      case MS_MIDDLE:           /* middle button up or down */         if (is_item(object) && (object->item_type != PANEL_TEXT_ITEM)) break;      case MS_LEFT:		/* left button up or down */	 if (event_is_up(event))	    (void)panel_accept_preview(client_object, event);	 else	    (void)panel_begin_preview(client_object, event);	 break;      case MS_RIGHT:		/* right button up or down */	 if (event_is_down(event) && current_state == PANEL_NONE_DOWN)	    (void)panel_accept_menu(client_object, event);	 break;      case PANEL_EVENT_DRAG_IN:		/* drag into item rect */	 if (current_state == PANEL_LEFT_DOWN)	    (void)panel_begin_preview(client_object, event);	 break;      case LOC_DRAG:	/* left, middle, or right drag */         if ((current_state == PANEL_LEFT_DOWN)                        ||             ((current_state == PANEL_MIDDLE_DOWN) &&              is_item(object) && (object->item_type == PANEL_TEXT_ITEM)) )	    (void)panel_update_preview(client_object, event);	 break;      case LOC_WINEXIT:	/* exit from panel */         if (current_state == PANEL_LEFT_DOWN)            (void)panel_cancel_preview(client_object, event);         break;      case PANEL_EVENT_CANCEL:		/* exit from item rectangle */         if (current_state == PANEL_LEFT_DOWN){                if (is_item(object)?(object->panel)->SliderActive                        :panel_object->SliderActive){                     event_id(event) = LOC_DRAG; /* pass more events */                     (void)panel_update_preview(client_object,event);                     break;                }else                (void)panel_cancel_preview(client_object, event);                break;         }      default:			/* some other event */		/* Comment out the following line for keymapped events.  The new         * line edit events are outside the ascii range. */	 if (event_is_euc(event) || panel_event_is_panel_semantic(event)                || event_is_iso(event)		|| panel_event_is_sunview_semantic(event))	    (void)panel_accept_key(client_object, event);	 break;   }}static panel_item_handlepanel_finditem(panel, event)panel_handle	 	panel;Event	*event;{   register panel_item_handle	ip = panel->current;   register int	   		x = event_x(event);   register int			y = event_y(event);      if (!panel->items)      return NULL;   if (ip && is_item(ip) && !hidden(ip) && rect_includespoint(&ip->rect, x, y))	 return ip;   for (ip = hidden(panel->items) ?	     panel_successor(panel->items) : panel->items;	ip && !rect_includespoint(&ip->rect, x, y);	ip = panel_successor(ip));   return ip;}

⌨️ 快捷键说明

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