📄 panel_select.c
字号:
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 + -