diff --git a/modules/gui/src/python_shell/python_shell_widget.cc b/modules/gui/src/python_shell/python_shell_widget.cc index 0a0c7726fe3b33511dc51373855d1e6771e87303..404633e58af81cd5865a5f92795aec25f9a06f2b 100644 --- a/modules/gui/src/python_shell/python_shell_widget.cc +++ b/modules/gui/src/python_shell/python_shell_widget.cc @@ -180,8 +180,8 @@ void PythonShellWidget::setup_state_machine_() new BlockStatusGuard(this,CODE_BLOCK_INCOMPLETE)); single_line->addTransition(tr3); connect(tr3,SIGNAL(triggered()),this,SLOT(OnEnterTransition())); - single_line->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::NoModifier,history_up)); - single_line->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::NoModifier,history_down)); + single_line->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::KeypadModifier,history_up)); + single_line->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::KeypadModifier,history_down)); KeyEventTransition* tr4=new KeyEventTransition(QEvent::KeyPress, Qt::Key_Return, @@ -198,11 +198,11 @@ void PythonShellWidget::setup_state_machine_() new BlockStatusGuard(this,CODE_BLOCK_INCOMPLETE)); multi_line_inactive->addTransition(tr6); connect(tr6,SIGNAL(triggered()),this,SLOT(OnEnterTransition())); - multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Left,Qt::NoModifier,multiline_active_state_)); - multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Right,Qt::NoModifier,multiline_active_state_)); + multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Left,Qt::KeypadModifier,multiline_active_state_)); + multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Right,Qt::KeypadModifier,multiline_active_state_)); multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Return,Qt::ControlModifier,multiline_active_state_)); - multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::NoModifier,history_up)); - multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::NoModifier,history_down)); + multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::KeypadModifier,history_up)); + multi_line_inactive->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::KeypadModifier,history_down)); KeyEventTransition* tr7=new KeyEventTransition(QEvent::KeyPress, Qt::Key_Return, @@ -221,8 +221,8 @@ void PythonShellWidget::setup_state_machine_() connect(tr8,SIGNAL(triggered()),this,SLOT(OnEnterTransition())); multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Escape,Qt::NoModifier,multi_line_inactive)); - multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::ControlModifier,history_up)); - multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::ControlModifier,history_down)); + multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Up,Qt::ControlModifier | Qt::KeypadModifier,history_up)); + multiline_active_state_->addTransition(new KeyEventTransition(QEvent::KeyPress,Qt::Key_Down,Qt::ControlModifier | Qt::KeypadModifier,history_down)); history_up->addTransition(new AutomaticTransition(multi_line_inactive,new HistoryGuard(&history_,EDITMODE_MULTILINE_INACTIVE))); history_up->addTransition(new AutomaticTransition(single_line,new HistoryGuard(&history_,EDITMODE_SINGLELINE))); @@ -280,13 +280,16 @@ void PythonShellWidget::OnMultiLineInactiveStateEntered() } void PythonShellWidget::OnHistoryUpStateEntered() { - --history_; + if(history_.AtEnd()){ + history_.SetCurrentCommand(GetCommand(),get_block_edit_mode_()); + } + history_.MoveToPreviousMatch(); set_command_(history_.GetCommand()); set_block_edit_mode_(history_.GetCommandMode()); } void PythonShellWidget::OnHistoryDownStateEntered() { - ++history_; + history_.MoveToNextMatch(); set_command_(history_.GetCommand()); set_block_edit_mode_(history_.GetCommandMode()); }