Esempio n. 1
0
 /**
  * Construct
  */
 public function start()
 {
     ncurses_keypad($this->getWindow(), true);
     ncurses_noecho();
     $this->setBorder();
     ncurses_wattron($this->getWindow(), NCURSES_A_BOLD);
     ncurses_mvwaddstr($this->getWindow(), 0, 1, $this->title);
     ncurses_wattroff($this->getWindow(), NCURSES_A_BOLD);
     ncurses_mvwaddstr($this->getWindow(), 2, 2, $this->text);
     $this->processing();
 }
Esempio n. 2
0
 public function __construct($line, $colonne)
 {
     parent::__construct();
     self::$instance = $this;
     if (!extension_loaded("ncurses")) {
         throw new \Exception("curse not supported");
     }
     $this->window = new Window();
     $this->window->border();
     $this->window->getMaxYX($y, $x);
     $this->timer = new Timer(3, 10, 5, 5);
     $this->timer->border();
     $this->listbox = new Listbox($this->window, 5, 20, 5, 20);
     $this->listbox->border();
     $this->listbox->setItems(array(array("title" => "Quitter", "bold" => false), array("title" => "Regenerer map", "bold" => false)));
     $this->statistic = new Statictic($this->window, 5, 20, 10, 30);
     $this->statistic->border();
     $this->map = new Map($y / 2, $x / 2, $y / 2 / 2, $x / 2 / 2);
     $this->map->border();
     $this->cursor = new Cursor(0, 0, false);
     ncurses_keypad($this->window->getWindow(), true);
 }
Esempio n. 3
0
function dialog($params)
{
    ###############################################################################################
    if (empty($params) || !is_array($params)) {
        trigger_error('params must be non-empty array');
        return NULL;
    }
    $message = isset($params['message']) ? $params['message'] : '';
    $buttons = !empty($params['buttons']) && is_array($params['buttons']) ? $params['buttons'] : array('OK');
    $n_buttons = count($buttons);
    for ($i = 0; $i < $n_buttons; $i++) {
        $buttons[$i] = ' ' . $buttons[$i] . ' ';
    }
    $parent_rows = isset($params['rows']) && $params['rows'] > 0 ? (int) $params['rows'] : 25;
    $parent_cols = isset($params['cols']) && $params['cols'] > 0 ? (int) $params['cols'] : 80;
    if (empty($message) || empty($buttons) || $parent_rows <= 0 || $parent_cols <= 0) {
        trigger_error('wrong params');
        return NULL;
    }
    $message_lines = split("\n", $message);
    $message_width = 0;
    $n_message_lines = count($message_lines);
    for ($i = 0; $i < $n_message_lines; $i++) {
        $message_width = max(strlen($message_lines[$i]), $message_width);
    }
    $buttons_delim = '  ';
    $buttons_delim_len = strlen($buttons_delim);
    $buttons_len = strlen(implode($buttons_delim, $buttons));
    $width = 4 + max($buttons_len + 2 * $buttons_delim_len, $message_width);
    $height = 4 + $n_message_lines;
    $dlg_y = $parent_rows > $height ? $parent_rows - $height >> 1 : 1;
    $dlg_x = $parent_cols > $width ? $parent_cols - $width >> 1 : 1;
    $window = ncurses_newwin($height, $width, $dlg_y, $dlg_x);
    if (empty($window)) {
        trigger_error('unable to create window');
        return NULL;
    }
    ncurses_wborder($window, 0, 0, 0, 0, 0, 0, 0, 0);
    $i_x = 0;
    $i_y = 0;
    for ($i = 0; $i < $n_message_lines; $i++) {
        $i_y = 1 + $i;
        $i_x = 1 + ($width - 2 - strlen($message_lines[$i]) >> 1);
        ncurses_mvwaddstr($window, $i_y, $i_x, rtrim($message_lines[$i]));
    }
    $buttons_data = array();
    $buttons_shift_x = 1 + ($width - 1 - $buttons_len >> 1);
    $buttons_shift_y = 2 + $n_message_lines;
    $i_title = '';
    $i_x = $buttons_shift_x;
    for ($i = 0; $i < $n_buttons; $i++) {
        $i_title = $buttons[$i];
        $buttons_data[] = array('x' => $i_x, 's' => $i_title);
        if (0 == $i) {
            ncurses_wattron($window, NCURSES_A_REVERSE);
        }
        ncurses_mvwaddstr($window, $buttons_shift_y, $i_x, $i_title);
        if (0 == $i) {
            ncurses_wattroff($window, NCURSES_A_REVERSE);
        }
        $i_x += strlen($i_title) + $buttons_delim_len;
    }
    ncurses_wrefresh($window);
    ncurses_keypad($window, TRUE);
    ncurses_curs_set(0);
    ncurses_noecho();
    $result = -1;
    $do_loop = 1;
    $move = 0;
    $current = 0;
    while ($do_loop) {
        $key = ncurses_wgetch($window);
        $move = 0;
        switch ($key) {
            case NCURSES_KEY_LEFT:
                if ($current > 0) {
                    $move = -1;
                }
                break;
            case NCURSES_KEY_RIGHT:
                if ($current < $n_buttons - 1) {
                    $move = 1;
                }
                break;
            case XCURSES_KEY_LF:
            case XCURSES_KEY_CR:
                $result = $current;
                $do_loop = 0;
                break;
            case XCURSES_KEY_ESC:
                $do_loop = 0;
                break;
        }
        if (0 == $do_loop) {
            ncurses_flushinp();
        } elseif ($move) {
            ncurses_mvwaddstr($window, $buttons_shift_y, $buttons_data[$current]['x'], $buttons_data[$current]['s']);
            $current += $move;
            ncurses_wattron($window, NCURSES_A_REVERSE);
            ncurses_mvwaddstr($window, $buttons_shift_y, $buttons_data[$current]['x'], $buttons_data[$current]['s']);
            ncurses_wattroff($window, NCURSES_A_REVERSE);
            ncurses_wrefresh($window);
        }
    }
    ncurses_delwin($window);
    return $result;
}
 /**
  * Creates the ncurses pad.
  * If the pad already exists, it is deleted and recreated.
  * @throws \RuntimeException
  */
 protected function createPad()
 {
     if (null !== $this->pad) {
         ncurses_delwin($this->pad);
     } elseif (null === $this->padRealWidth) {
         $this->calculatePadRealSize();
     }
     $globalWidth = null;
     $globalHeight = null;
     ncurses_getmaxyx(STDSCR, $globalHeight, $globalWidth);
     $this->padWidth = $globalWidth;
     $this->padHeight = $globalHeight - 3;
     $w = max($this->padWidth, $this->padRealWidth);
     $h = max($this->padHeight, $this->padRealHeight);
     $this->pad = ncurses_newpad($h, $w);
     if (false === $this->pad) {
         throw new \RuntimeException("Failed to create a ncurses pad (width: {$this->padRealWidth}, height: {$this->padRealHeight})");
     }
     ncurses_keypad($this->pad, true);
 }
Esempio n. 5
0
 /**
  * Creates the footer window.
  * If the footer window already exists, it is deleted and recreated.
  */
 protected function createFooterWindow()
 {
     if (null !== $this->windowFooter) {
         ncurses_delwin($this->windowFooter);
     }
     $globalWidth = null;
     $globalHeight = null;
     ncurses_getmaxyx(STDSCR, $globalHeight, $globalWidth);
     $this->windowFooter = ncurses_newwin(1, 0, $globalHeight - 1, 0);
     ncurses_getmaxyx($this->windowFooter, $this->windowFooterHeight, $this->windowFooterWidth);
     ncurses_keypad($this->windowFooter, true);
 }
Esempio n. 6
0
function menu_select($params)
{
    ###################################################################################################
    if (!is_array($params) || empty($params)) {
        trigger_error('wrong params');
        return NULL;
    }
    $menu = isset($params['items']) ? $params['items'] : NULL;
    $rows = isset($params['rows']) ? (int) $params['rows'] : 0;
    $cols = isset($params['cols']) ? (int) $params['cols'] : 0;
    $selected = isset($params['selected']) ? (int) $params['selected'] : 0;
    $centered = empty($params['centered']) ? 0 : 1;
    $y_menu = isset($params['y']) ? (int) $params['y'] : 0;
    $x_menu = isset($params['x']) ? (int) $params['x'] : 0;
    if (!is_array($menu) || empty($menu) || $rows <= 0 || $cols <= 0 || $y_menu < 0 || $x_menu < 0) {
        trigger_error('wrong params');
        return NULL;
    }
    $keys = array_keys($menu);
    $values = array();
    $current = 0;
    $width = 0;
    $height = count($menu) + 2;
    foreach ($menu as $value) {
        $width = max($width, strlen($value));
    }
    $i = 0;
    foreach ($menu as $k => $v) {
        $values[$i] = ' ' . $v . str_repeat(' ', 1 + $width - strlen($v));
        if ($k == $selected) {
            $current = $i;
        }
        $i++;
    }
    $width += 4;
    if ($centered) {
        $y_menu = $rows - $height >> 1;
        $x_menu = $cols - $width >> 1;
    }
    $window = ncurses_newwin($height, $width, $y_menu, $x_menu);
    if (empty($window)) {
        trigger_error('unable to create window');
        return NULL;
    }
    ncurses_wborder($window, 0, 0, 0, 0, 0, 0, 0, 0);
    for ($a = 0; $a < count($values); $a++) {
        if ($a == $current) {
            ncurses_wattron($window, NCURSES_A_REVERSE);
        }
        ncurses_mvwaddstr($window, 1 + $a, 1, $values[$a]);
        if ($a == $current) {
            ncurses_wattroff($window, NCURSES_A_REVERSE);
        }
    }
    ncurses_wrefresh($window);
    ncurses_keypad($window, TRUE);
    ncurses_curs_set(0);
    do {
        $key = ncurses_wgetch($window);
        $move = 0;
        switch ($key) {
            case NCURSES_KEY_UP:
                if ($current > 0) {
                    $move = -1;
                }
                break;
            case NCURSES_KEY_DOWN:
                if ($current < count($values) - 1) {
                    $move = 1;
                }
                break;
            case XCURSES_KEY_LF:
            case XCURSES_KEY_CR:
                $result = $keys[$current];
                break;
            case XCURSES_KEY_ESC:
                ncurses_flushinp();
                $result = '';
                break;
        }
        if ($move) {
            ncurses_mvwaddstr($window, 1 + $current, 1, $values[$current]);
            $current += $move;
            ncurses_wattron($window, NCURSES_A_REVERSE);
            ncurses_mvwaddstr($window, 1 + $current, 1, $values[$current]);
            ncurses_wattroff($window, NCURSES_A_REVERSE);
            ncurses_wrefresh($window);
        }
    } while (!isset($result));
    ncurses_delwin($window);
    return $result;
}
Esempio n. 7
0
function dlg_input($params = array())
{
    ###############################################################################################
    $title = isset($params['title']) ? $params['title'] : NULL;
    $max_length = isset($params['max_len']) ? (int) $params['max_len'] : 10;
    $dlg_rows = isset($params['dlg_cols']) ? (int) $params['dlg_cols'] : 3;
    $dlg_cols = isset($params['dlg_cols']) ? (int) $params['dlg_cols'] : 40;
    $parent_cols = isset($params['cols']) ? (int) $params['cols'] : NULL;
    $parent_rows = isset($params['rows']) ? (int) $params['rows'] : NULL;
    $dlg_x = (int) (($parent_cols - $dlg_cols) / 2);
    if ($dlg_x < 0) {
        $dlg_x = 0;
    }
    $dlg_y = (int) (($parent_rows - $dlg_rows) / 2);
    if ($dlg_y < 0) {
        $dlg_y = 0;
    }
    if ($max_length <= 0 || $dlg_rows <= 0 || $dlg_cols <= 0) {
        trigger_error('wrong params');
        return NULL;
    }
    $dlg_window = ncurses_newwin($dlg_rows, $dlg_cols, $dlg_y, $dlg_x);
    if (empty($dlg_window)) {
        return NULL;
    }
    ncurses_wborder($dlg_window, 0, 0, 0, 0, 0, 0, 0, 0);
    if ($title) {
        ncurses_wattron($dlg_window, NCURSES_A_REVERSE);
        ncurses_mvwaddstr($dlg_window, 0, 2, ' ' . $title . ' ');
        ncurses_wattroff($dlg_window, NCURSES_A_REVERSE);
    }
    ncurses_curs_set(1);
    ncurses_wmove($dlg_window, 2, 2);
    ncurses_wrefresh($dlg_window);
    $do_getch = 1;
    $input_val = '';
    $input_char = '';
    $input_len = 0;
    $cursor_x = 2;
    $cursor_y = 1;
    ncurses_wmove($dlg_window, $cursor_y, $cursor_x);
    ncurses_noecho();
    ncurses_keypad($dlg_window, TRUE);
    while ($do_getch) {
        $key_code = ncurses_wgetch($dlg_window);
        if ($key_code == XCURSES_KEY_CR || $key_code == XCURSES_KEY_LF) {
            $do_getch = 0;
        } elseif ($key_code == NCURSES_KEY_BACKSPACE) {
            if ($input_len > 0) {
                $input_len--;
                $input_val = substr($input_val, 0, $input_len);
                $cursor_x--;
                ncurses_mvwaddstr($dlg_window, $cursor_y, $cursor_x, ' ');
                ncurses_wmove($dlg_window, $cursor_y, $cursor_x);
            }
        } elseif ($key_code < XCURSES_KEY_PRINTABLE_MIN || $key_code > XCURSES_KEY_PRINTABLE_MAX) {
            continue;
        } elseif ($input_len < $max_length) {
            $input_val .= $input_char = chr($key_code);
            $input_len++;
            $cursor_x++;
            ncurses_waddstr($dlg_window, $input_char);
        }
    }
    ncurses_delwin($dlg_window);
    return $input_val;
}
Esempio n. 8
0
 /**
  * Enable or disable the keypad
  *
  * @param bool $keypad Wheter the keypad should be enabled or not.
  *
  * @return void
  */
 public function enableKeypad($keypad)
 {
     ncurses_keypad($this->window, $keypad);
 }
Esempio n. 9
0
function menu_check_list($params)
{
    ###############################################################################################
    if (!is_array($params) || empty($params)) {
        trigger_error('wrong_params');
        return NULL;
    }
    $menu = isset($params['items']) ? $params['items'] : NULL;
    $rows = isset($params['rows']) ? (int) $params['rows'] : 0;
    $cols = isset($params['cols']) ? (int) $params['cols'] : 0;
    $centered = empty($params['centered']) ? 0 : 1;
    $y_menu = isset($params['y']) ? (int) $params['y'] : 0;
    $x_menu = isset($params['x']) ? (int) $params['x'] : 0;
    if (!is_array($menu) || empty($menu) || $rows <= 0 || $cols <= 0 || $y_menu < 0 || $x_menu < 0) {
        trigger_error('wrong params');
        return NULL;
    }
    $keys = array_keys($menu);
    $n_menu = count($keys);
    $items = array();
    $checked = array();
    $current = 0;
    $width = 0;
    $height = $n_menu + 2;
    $i = 0;
    $k = NULL;
    $i_checked = NULL;
    for ($i = 0; $i < $n_menu; $i++) {
        $k = $keys[$i];
        $i_checked = isset($menu[$k][1]) && $menu[$k][1] == 1 ? 1 : 0;
        $items[$i] = ' [' . ($i_checked ? '*' : ' ') . '] ' . $menu[$k][0];
        $width = max($width, strlen($items[$i]));
        $checked[$i] = $i_checked;
    }
    for ($i = 0; $i < $n_menu; $i++) {
        $items[$i] = $items[$i] . str_repeat(' ', 2 + $width - strlen($items[$i]));
    }
    $width += 4;
    if ($centered) {
        $r = $rows - $height >> 1;
        $c = $cols - $width >> 1;
    }
    $window = ncurses_newwin($height, $width, $r, $c);
    if (empty($window)) {
        trigger_error('unable to create window');
        return NULL;
    }
    ncurses_wborder($window, 0, 0, 0, 0, 0, 0, 0, 0);
    $n_items = count($items);
    for ($i = 0; $i < $n_items; $i++) {
        if ($i == $current) {
            ncurses_wattron($window, NCURSES_A_REVERSE);
        }
        ncurses_mvwaddstr($window, 1 + $i, 1, $items[$i]);
        if ($i == $current) {
            ncurses_wattroff($window, NCURSES_A_REVERSE);
        }
    }
    ncurses_wrefresh($window);
    ncurses_keypad($window, TRUE);
    ncurses_noecho();
    ncurses_curs_set(0);
    $do_loop = 1;
    $save_result = 0;
    while ($do_loop) {
        $key = ncurses_wgetch($window);
        $move = 0;
        switch ($key) {
            case NCURSES_KEY_UP:
                if ($current > 0) {
                    $move = -1;
                }
                break;
            case NCURSES_KEY_DOWN:
                if ($current < $n_menu - 1) {
                    $move = 1;
                }
                break;
            case XCURSES_KEY_LF:
            case XCURSES_KEY_CR:
                $do_loop = 0;
                $save_result = 1;
                break;
            case XCURSES_KEY_SPACE:
                if ($checked[$current]) {
                    $checked[$current] = 0;
                    $items[$current] = ' [ ] ' . substr($items[$current], 5);
                } else {
                    $checked[$current] = 1;
                    $items[$current] = ' [*] ' . substr($items[$current], 5);
                }
                ncurses_wattron($window, NCURSES_A_REVERSE);
                ncurses_mvwaddstr($window, 1 + $current, 1, $items[$current]);
                ncurses_wattroff($window, NCURSES_A_REVERSE);
                ncurses_wrefresh($window);
                break;
            case XCURSES_KEY_ESC:
                ncurses_flushinp();
                $do_loop = 0;
                break;
        }
        if ($move) {
            ncurses_mvwaddstr($window, 1 + $current, 1, $items[$current]);
            $current += $move;
            ncurses_wattron($window, NCURSES_A_REVERSE);
            ncurses_mvwaddstr($window, 1 + $current, 1, $items[$current]);
            ncurses_wattroff($window, NCURSES_A_REVERSE);
            ncurses_wrefresh($window);
        }
    }
    ncurses_delwin($window);
    $result = NULL;
    if ($save_result) {
        for ($i = 0; $i < $n_menu; $i++) {
            $result[$keys[$i]] = $checked[$i];
        }
    }
    return $result;
}