Example #1
0
/** Handle Ctrl-key combination. */
static void key_handle_ctrl(kbd_event_t const *ev)
{
	switch (ev->key) {
	case KC_Q:
		done = true;
		break;
	case KC_S:
		if (doc.file_name != NULL)
			file_save(doc.file_name);
		else
			file_save_as();
		break;
	case KC_E:
		file_save_as();
		break;
	case KC_C:
		selection_copy();
		break;
	case KC_V:
		selection_delete();
		insert_clipboard_data();
		pane.rflags |= REDRAW_TEXT;
		caret_update();
		break;
	case KC_X:
		selection_copy();
		selection_delete();
		pane.rflags |= REDRAW_TEXT;
		caret_update();
		break;
	case KC_A:
		selection_sel_all();
		break;
	default:
		break;
	}
}
Example #2
0
void RichTextLabel::_input_event(InputEvent p_event) {

	switch(p_event.type) {

		case InputEvent::MOUSE_BUTTON: {

			if (main->first_invalid_line<main->lines.size())
				return;

			const InputEventMouseButton& b = p_event.mouse_button;

			if (b.button_index==BUTTON_LEFT) {

				if (true) {


					if (b.pressed && !b.doubleclick) {
						int line=0;
						Item *item=NULL;

						bool outside;
						_find_click(main,Point2i(b.x,b.y),&item,&line,&outside);

						if (item) {

							Variant meta;
							if (!outside && _find_meta(item,&meta)) {
								//meta clicked

								emit_signal("meta_clicked",meta);
							} else if (selection.enabled) {

								selection.click=item;
								selection.click_char=line;

							}

						}

					} else if (!b.pressed) {

						selection.click=NULL;
					}
				}
			}

			if (b.button_index==BUTTON_WHEEL_UP) {

				if (scroll_active)
					vscroll->set_val( vscroll->get_val()-vscroll->get_page()/8 );
			}
			if (b.button_index==BUTTON_WHEEL_DOWN) {

				if (scroll_active)
					vscroll->set_val( vscroll->get_val()+vscroll->get_page()/8 );
			}
		} break;
		case InputEvent::KEY: {

			const InputEventKey &k=p_event.key;
			if (k.pressed && !k.mod.alt && !k.mod.shift && !k.mod.meta) {
				bool handled=true;
				switch(k.scancode) {
					case KEY_PAGEUP: {

						if (vscroll->is_visible())
							vscroll->set_val( vscroll->get_val() - vscroll->get_page() );
					} break;
					case KEY_PAGEDOWN: {

						if (vscroll->is_visible())
							vscroll->set_val( vscroll->get_val() + vscroll->get_page() );
					} break;
					case KEY_UP: {

						if (vscroll->is_visible())
							vscroll->set_val( vscroll->get_val() - get_font("normal_font")->get_height() );
					} break;
					case KEY_DOWN: {

						if (vscroll->is_visible())
							vscroll->set_val( vscroll->get_val() + get_font("normal_font")->get_height() );
					} break;
					case KEY_HOME: {

						if (vscroll->is_visible())
							vscroll->set_val( 0 );
					} break;
					case KEY_END: {

						if (vscroll->is_visible())
							vscroll->set_val( vscroll->get_max() );
					} break;
					case KEY_INSERT:
					case KEY_C: {

						if (k.mod.command) {
							selection_copy();
						} else {
							handled=false;
						}

					} break;
					default: handled=false;
				}


				if (handled)
					accept_event();
			}

		} break;
		case InputEvent::MOUSE_MOTION: {

			if (main->first_invalid_line<main->lines.size())
				return;

			const InputEventMouseMotion& m = p_event.mouse_motion;

			if (selection.click) {

				int line=0;
				Item *item=NULL;
				_find_click(main,Point2i(m.x,m.y),&item,&line);
				if (!item)
					return; // do not update


				selection.from=selection.click;
				selection.from_char=selection.click_char;

				selection.to=item;
				selection.to_char=line;

				bool swap=false;
				if (selection.from->index > selection.to->index )
					swap=true;
				else if (selection.from->index == selection.to->index) {
					if (selection.from_char > selection.to_char)
						swap=true;
					else if (selection.from_char == selection.to_char) {

						selection.active=false;
						return;
					}
				}

				if (swap) {
					SWAP( selection.from, selection.to );
					SWAP( selection.from_char, selection.to_char );
				}

				selection.active=true;
				update();

			}

		} break;
	}

}