Japanese Simutrans Forum

開発 => プログラム => トピック開設者: z9999+ さんの発言 2010/06/28 23:07

トピック名: [patch] 数字入力ボックスの拡張
投稿者: z9999+ さんの発言 2010/06/28 23:07
数字入力ボックスの動作を以下のように拡張します。

1.shiftキーを押しながら左右矢印をクリックまたはキーボードの上下キーを操 作した場合、値が「1」ずつ変わります。
2.ctrlキーを押しながら左右矢印をクリックまたはキーボードの上下キーを操作 した場合、値が通常操作時の10倍ずつ変わります。つまり通常50ずつ変わるコントロールの場合500ずつかわります。

また、オリジナルではキーボードの↑キーで値が減少し、キーボードの↓キーで増加するという気持ち悪い事になっていたので、これを逆に修正してあります。

コード: [選択]
Index: gui/components/gui_numberinput.cc
===================================================================
--- gui/components/gui_numberinput.cc (リビジョン 3478)
+++ gui/components/gui_numberinput.cc (作業コピー)
@@ -132,6 +132,10 @@
  return (wrapping  &&  value==max_value) ? min_value : max_value;
  }
 
+ if(event_get_last_control_shift()==1) {
+ return clamp( value+1, min_value, max_value );
+ }
+
  switch( step_mode ) {
  // automatic linear
  case AUTOLINEAR:
@@ -160,7 +164,11 @@
  }
  // default value is step size
  default:
- return clamp( ((value+step_mode)/step_mode)*step_mode, min_value, max_value );
+ if(event_get_last_control_shift()==2) {
+ return clamp( ((value+step_mode*10)/step_mode)*step_mode, min_value, max_value );
+ } else {
+ return clamp( ((value+step_mode)/step_mode)*step_mode, min_value, max_value );
+ }
  }
 }
 
@@ -173,6 +181,10 @@
  return (wrapping  &&  value==min_value) ? max_value : min_value;
  }
 
+ if(event_get_last_control_shift()==1) {
+ return clamp( value-1, min_value, max_value );
+ }
+
  switch( step_mode ) {
  // automatic linear
  case AUTOLINEAR:
@@ -201,7 +213,11 @@
  }
  // default value is step size
  default:
- return clamp( value-step_mode, min_value, max_value );
+ if(event_get_last_control_shift()==2) {
+ return clamp( value-step_mode*10, min_value, max_value );
+ } else {
+ return clamp( value-step_mode, min_value, max_value );
+ }
  }
 }
 
@@ -275,7 +291,7 @@
  case SIM_KEY_UP:
  case SIM_KEY_DOWN:
  // next/previous choice
- new_value = (ev->ev_code==SIM_KEY_UP) ? get_prev_value() : get_next_value();
+ new_value = (ev->ev_code==SIM_KEY_DOWN) ? get_prev_value() : get_next_value();
  }
  if(  call_textinp  ) {
  event_t ev2 = *ev;

トピック名: Re:[patch] 数字入力ボックスの拡張
投稿者: z9999+ さんの発言 2010/06/29 05:08
上記のものにさらにAUTOLINEARモードの機能を変更したバージョンです。

オリジナルではAUTOLINEARモードでは(最大値/最小値)/100ずつ変更するようになっているのですが、これがとても気持ち悪いので、現在値の2つ下の桁を1つずつ変更するようにしてみました。
たとえば9900だと→9910→9920と10ずつ変わりますが、10000を超えると→10100→10200のように100ずつ変わります。