OpenRTM / OpenRTP-aist

OpenRTP-aist: RT-Middleware and OMG RTC based component and system development tools implemented by AIST
Other
1 stars 6 forks source link

[RTSE]更新された値のみ制約チェックを実行するように修正 #467

Closed ga-sakamoto closed 2 years ago

ga-sakamoto commented 2 years ago

Identify the Bug

Link to #444

Description of the Change

Configurationの値を変更した際に,ConfigurationSet全体ではなく,変更した部分のみ制約チェックを実行するように修正させて頂きました.

Verification

n-kawauchi commented 2 years ago

動作確認手順と、使用したRTCを教えてください。動作確認用に制約条件を持つパラメータを持つRTCをすぐに用意できないので。 また、Applyにチェックが入っていない場合の動作確認で、初期値を覚えておくとありますが、具体的な確認方法が分からないので、よろしくお願いします。

ga-sakamoto commented 2 years ago

こちらで使用したコンポーネントは,C++版のサンプルのConfigSampleコンポーネントとなります.

また,修正内容といたしましては, これまでConfigrationダイアログでは,OKボタンを押下した際などに,全てのconfigurationパラメータに対して,制約チェックを行っていたのに対して, 変更を行ったConfigrationパラメータのみ制約チェックを行うように修正しております.

こちらで行った確認方法は,以下の通りです. 01.Configration Viewでint_param0(制約:0<=x<=150)の値に,150を超える値を設定 02.「編集」ボタンをクリックし,Configurationダイアログを表示 03.int_param0以外のパラメータの値を変更し,「OK」ボタンをクリック 04.Configurationダイアログが閉じ,変更したパラメータの値が設定されている事を確認 →以前は,全てのパラメータの制約チェックを行っていたため,int_param0がチェックに引っ掛かってしまい,ダイアログが閉じず,更新ができなかった

n-kawauchi commented 2 years ago

教えて頂いたConfigSampleで手順通り実行し、改善していることを確認できました。ありがとうございます。 しかし、他のパラメータ値を変更してみたら動作が気になりました。

int_param0はwidget種別がスライダーで、制約上限値の150を超えた値をConfigration Viewでセットすると、その値がConfigurationダイアログにも反映されています。 しかし、int_param1(制約:0<=x<=1000)widget種別スピンに対しては、Configuration Viewで 1001を入力後、Configurationダイアログを表示すると、上限値の1000になっています。これでよいのでしょうか?

widgetによって振る舞いが違う?

n-ando commented 2 years ago

Configuration Viewとダイアログの振る舞いについて

ことにします。このように修正をお願いします。

ga-sakamoto commented 2 years ago

上記の仕様で修正させて頂きました.

ただ,Widgetとしてスピナを使用した場合,値を直接設定する事ができませんでした. このため,スピナの場合,

Viewで設定された範囲外の値はそのまま保持、ただしエラーメッセージは表示

こちらを実現できておりません.

また,先日のお打ち合わせでは,

OK/キャンセルボタンは廃止 → Closeボタンのみ

というお話となりましたが,改めて再検討した所,OKボタンも残した方が良いように思いました. 例えば,Applyチェックボックスを外した状態で,幾つかのパラメータを編集し,最後に一気に反映したい場合などがあるのでは?と思ったためです. (ただ,上記の場合,編集したパラメータの中に,制約チェックに引っ掛かっているものが残っている場合に,どのような振る舞いにするのか?は検討が必要だと感じております.

などの仕様が考えられるかと思っております)

n-ando commented 2 years ago

OK/キャンセルボタンは残す方向でお願いします。 OKを押した場合の動作としては、

ということは可能でしょうか?

ga-sakamoto commented 2 years ago

上記の仕様なのですが, 制約チェックに引っかかっているパラメータがある場合で,表示したダイアログでCanceが選択された場合には, どのパラメータも更新せず,元の画面に戻る形でよろしいでしょうか? それとも,キャンセルが選択された場合には,制約チェックに引っ掛かっていないパラメータのみ設定し,ダイアログを閉じる形でしょうか? (恐らく,前者だろうなぁ・・・とは思ったのですが,1文目が気になったため,念のためご確認させて頂きました)

ga-sakamoto commented 2 years ago

OK/Cancelボタンを元に戻しました. また,OKボタンをクリックした際に,各パラメータの制約条件チェックを実行し,制約に違反するパラメータが存在する場合には,メッセージボックスを表示するようにしました.

メッセージボックスで,OKが選択された場合には,指定された内容をそのまま設定するようにしました. メッセージボックスで,キャンセルが選択された場合には,元のダイアログに戻るようにしました.

n-ando commented 2 years ago

修正ありがとうございます。 Calcelボタンが押された場合は、何もせずにダイアログを閉じるという動作でお願いします。

ga-sakamoto commented 2 years ago

制約に違反するパラメータが存在する場合に表示するメッセージボックスでCancelボタンを押した場合, メッセージボックスを閉じて,コンフィグパラメータ編集ダイアログに戻る,という仕様で良いのでしょうか? それとも,メッセージボックスも,コンフィグパラメータ編集ダイアログも閉じてしまうのでしょうか?

現状では,メッセージボックスを閉じて,コンフィグパラメータ編集ダイアログに戻る,という形としております.

n-ando commented 2 years ago
ga-sakamoto commented 2 years ago

何度も申し訳ございません. 制約条件にひっかかったパラメータが存在する場合の挙動について,再度,ご確認させてください.

現状の仕様では,

 制約チェックを実行し,条件外のパラメータが存在する場合,ダイアログ表示  ダイアログでは「設定された値が制約条件に違反しているパラメータが存在します.  このまま強制的に設定しますか?」というメッセージを表示し,「OK」が選択された場合には,  全てのパラメータを設定

 制約チェックを実行し,条件外のパラメータが存在する場合,ダイアログ表示  ダイアログでは「パラメータX, ....は制約条件を満たしていないので反映されません。続けますか?」というメッセージを表示し,「OK」が選択された場合には,  制約条件を満たしているパラメータのみ設定

となっており,ConfigurationViewで設定した場合と,ConfigurationParameta設定ダイアログで設定した場合で,制約条件に引っ掛かったパラメータの設定方法が異なるのですが,こちらはこのままの仕様でよろしかったでしょうか?

n-ando commented 2 years ago

現在 ConfigurationView で制約条件外のパラメータを設定した際には、ダイアログは出なかったように思います。つまりViewの方で変更する際は、問答無用で条件外のパラメータがセットされます。これはこれで良いかと思います。

ConfigurationParameterダイアログでは、範囲外に設定された場合はいずれにしろ強制設定はできないという理解だったと思います。

ga-sakamoto commented 2 years ago

ConfogurationViewの「適用」も,ダイアログの「OK」も修正したパラメータのみ設定する. 修正したパラメータが制約を外れている場合には,強制的に設定するかどうかのダイアログを表示する

n-ando commented 2 years ago

OKです。その様に修正をお願いいたします。

ga-sakamoto commented 2 years ago

ConfogurationViewの「適用」も,ダイアログの「OK」も修正したパラメータのみ制約チェックを行うように修正させて頂きました.

n-ando commented 2 years ago

Configuration Parameter の反映タイミングが、

ga-sakamoto commented 2 years ago

WidgetにTextボックスが指定されている場合は,フォーカスが外れたタイミングでConfiguration Parameter の設定を行うように修正させて頂きました.

ただ,河内さんからご指摘のございましたint_param0」パラメータにつきましては,WidgetはTextボックスではなく,Sliderが指定されております. SliderとSpinにつきましては,設定された値を隣に配置しているTextボックスにも表示するようになっており,このTextボックスも直接編集可となっております.そして,こちらのTextボックスが編集されると,Sliderのバー移動,Spinの上下矢印イベントが発生するようになっています. このため,今回の修正では,河内さんが言われている現象は改善できておりません.

対策としましては,SliderとSpinの横に配置したTextボックスは,直接編集できないようにし,Sliderはバー移動,Spinは上下矢印でのみ値を変更できるようにする形があるかと思います.

n-ando commented 2 years ago

調査ありがとうございました。では、SliderとSpinのTextボックスは編集不可に設定をしてください。 よろしくお願いいたします。。

ga-sakamoto commented 2 years ago

Sliderにつきましては,バーを移動したイベントと,テキストボックスを編集したイベントを分離する事ができました. このため,テキスト編集時には編集内容を反映せず,フォーカスが外れたタイミングorバー移動が発生したタイミングで設定値を反映するように修正しました. Spinnerにつきましては,テキスト編集と,上下ボタンクリックのイベントを分離する事ができなかったので,テキストボックス部分を編集不可に設定しました.

n-kawauchi commented 2 years ago

確認したところ、Ubuntu環境のSpinnerに問題があります。Windows環境では下記のように上下ボタンが有効なので値変更が可能です。 Win10+OpenRTM122_0104

しかしUbuntu環境では今回の修正により +- のボタンが押せなくなり、ダイアログでの値変更ができません。 Ubuntu20 04+OpenRTM2 0_0104

ga-sakamoto commented 2 years ago

たいへん失礼いたしました.Spinnerのテキストボックス部分を編集可に戻させて頂きました.

その上で,keyPressed/keyReleasedイベントおよびfocusLostイベントを追加し,キーボードで数値を入力した場合には,設定値を反映せずに,フォーカスが外れたタイミングで設定値を反映するように修正してみました. (上下キーで値を変更した場合には,これまで通り,反映するようにしております)

n-kawauchi commented 2 years ago

Slider、Spinner 各テキストボックスの値を変更して動作確認しました。 Sliderの方は問題ないとの判断ですが、Spinnerの動作がWindows環境でおかしいです。

問題なしと判断したSlider動作は次のものです。

問題があると思えたSpinner動作は次のものです。

ga-sakamoto commented 2 years ago

ご連絡が遅くなってしまい,たいへん申し訳ございません. また,色々と詳細なご調査ありがとうございました.

ご連絡を頂きました内容を基に,再度,色々と確認してみたのですが,Windows版で値の桁数がおかしくなってしまうのは,イベントの発生タイミングがLinux版と異なるためのようでした.

そこで,再度,以下のように修正させて頂きました.

本当に何度もご面倒をお掛けしてしまい,たいへん申し訳ございませんが,再度,ご確認を頂ければ幸いです. よろしくお願いいたします.