last_value = $this->value = $value; $this->filter = $filter !== false && @preg_match( $filter, '' ) !== false ? $filter : false; $this->update(); } /** * Update the input control on the screen * * Widget is highlighted when active */ public function update() { $this->attribute_on( NCURSES_A_UNDERLINE ); if( $this->active ) { $this->attribute_on( NCURSES_A_REVERSE ); } $this->write_fixed( 0, 0, substr( $this->value, - $this->width ) ); $this->attribute_off( NCURSES_A_UNDERLINE ); $this->attribute_off( NCURSES_A_REVERSE ); } /** * Get or set value */ public function value( $value = false ) { if( $value === false ) { return $this->value; } else { $this->value = $value; } } /** * Activate input widget and accept input * * Input ends when the user presses the enter key. * If a filter has been set and the input does not pass the filter, the value * reverts to the previous value, and this function returns false. * * @return string|boolean Text entered, or false */ public function get() { $this->active = true; $this->update(); while( $this->active ) { $key = $this->get_char(); switch( $key ) { case NCURSES_KEY_BACKSPACE: $this->value = substr( $this->value, 0, strlen( $this->value ) - 1 ); break; case 13: $this->active = false; break; default: if( in_array( $key, range( 32, 126 ) ) ) { $this->value .= chr( $key ); } } $this->update(); } $this->update(); return $this->filter !== false && @preg_match( $this->filter, $this->value ) < 1 ? false : $this->value; } public function focus() { parent::focus(); $this->active = true; $this->update(); } public function blur() { $this->active = false; $this->update(); parent::blur(); } public function on_key_press($key) { switch( $key ) { case NCURSES_KEY_BACKSPACE: $this->value = substr( $this->value, 0, strlen( $this->value ) - 1 ); break; case 27: // ESC $this->value = $this->last_value; break; case 9: // TAB case 13: // RETURN if( $this->value !== $this->last_value ) { $this->emit('change', $this->value); } $this->blur(); break; default: if( in_array( $key, range( 32, 126 ) ) ) { $this->value .= chr( $key ); } parent::on_key_press($key); } $this->update(); } } ?>