<?

class Ui_field_block_size extends Ui_field {
	function onChange() {
		GLOBAL $OP, $Graphs, $Ui_fields;


		if($this->get() <= 0) {
			$this->set($this->def, false);
		}

		/*
		// проверку значение
		if($this->get() < 1000) {
			messageBox(ERROR_MIN_GOOD_SPEED, "");
			$this->set(1000, false);
		}*/

		parent::onChange();

		$Graphs['frags']->select_bar->set_stepKb($this->get());

		// если стоит галочка автовыбора, то выбираем размер пропуска
		if($OP['antifrag_auto']) {
			$block_size_mb = $this->get() / 1024;

			if($block_size_mb <= 2)
				$Ui_fields['antifrag_size']->set(1); // 1 mb. Там все равно если блок будет размером с 2 mb, то и антифрагменатция меньше не станет потому что ceil
			else 
				$Ui_fields['antifrag_size']->set(0);
		}
	}
}

class Ui_field_good_speed extends Ui_field {
	function onChange() {
		GLOBAL $OP, $log, $Graphs, $Ui_fields, $INFO;

		// не работает из-за неправильных событий
		//if($this->is_user_input) return false;

		parent::onChange();

		if(!isset($INFO['step'])) return true;

		// на этапе после чтения, это делать не надо, иначе при переключении на другой диск, а потом возврата к этому, ползунок может съехать
		if( ! ($INFO['step'] == ANALIZE_BLOCKS or $INFO['step'] == FINAL_OPERATIONS or $INFO['step'] == FINAL_BLOCKS)) {

			// устанавливаем ползунок графика скоростей, чтобы он не был ниже параметра good_speed, чтобы не появилось окно "надо увеличить скорость"
			$cur_value = $this->get();
			$analize_good_speed = $Ui_fields['analize_good_speed']->get();

			if($analize_good_speed < $cur_value) {
				// выбираем верхнюю ближайшую скорость на графике, иначе будет бесконечный цикл из-за этой проверки
				list($floor, $ceil, $near) = $Graphs['speed']->near_cols($cur_value);

				if($near >= $analize_good_speed)
					 $new_value = $near;
				else $new_value = $ceil;

				// $log->line("Старая скорость " . $analize_good_speed);
				// $log->line("Новая $ceil");

				$Ui_fields['analize_good_speed']->set($ceil, true);
			}
		}

		// если стоит галочка автовыбора, то скорость берем в половину хорошей
		if($OP['antifrag_auto']) {
			$Ui_fields['antifrag_speed']->set($this->get() / 2);
		}
	}
}

class Ui_field_part_size extends Ui_field {
	function onChange() {
		GLOBAL $log;

		//$log->line('part_size->onChange()');
		parent::onChange();
		Ui_create_blocks::change_part_size();
	}
}

class Ui_field_use_part extends Ui_field {
	function onChange() {
		GLOBAL $log;

		//$log->line('use_part->onChange()');
		//$log->line(var_dump_str($this->get()));

		parent::onChange();
		Ui_create_blocks::change_part_size();

		// показываем-затемняем поле "часть диска"
		$part_size = c('Fm->part_size');
		if($this->get())
			 $part_size->enabled = true;
		else $part_size->enabled = false;

		// видимость сообщения об особенностях параметра "часть диска"
		Ui_create_blocks::info_right_panel();
		
	}
}

class Ui_field_antifrag_auto extends Ui_field {
	function onChange() {
		GLOBAL $log, $Ui_fields ;

		//$log->line('use_part->onChange()');
		//$log->line(var_dump_str($this->get()));

		parent::onChange();

		// включаем/выключаем поля
		if($this->get()) {
			 $enabled = false;
			 // чтобы пересчет произошел на основе параметров
			 $Ui_fields['good_speed']->onChange();
			 $Ui_fields['block_size']->onChange();
		}
		else $enabled = true;
		
		c('Fm->antifrag_speed')->enabled = $enabled;
		c('Fm->antifrag_size')->enabled = $enabled;
	}
}


class Ui_field_analize_mode extends Ui_field {
	function onChange() {
		parent::onChange();
		Ui_analize_blocks::bt_select_mode();
	}
}


class Ui_field_min_frag_size extends Ui_field {
	function onChange() {
		GLOBAL $Graphs, $Measure_convert, $log, $INFO;

		$cur_value = $this->get();
		// надо проверить, чтобы случайно не заблокировать все фрагменты
		// проверяем, чтобы справа от ползунка были фрагменты
		// проверяем только на этапе анализа, когда график заполнен, иначе могут быть ложные срабатывания
		if(isset($INFO['step']) and $INFO['step'] == ANALIZE_BLOCKS) {
			if(!Gr_select_bar::check_right_pos('graph_frags', $cur_value)) {
				$this->wrong_input_msg(ERROR_BLOCK_FULL_DISK);
				$max_right_pos = Gr_select_bar::search_max_right_pos('graph_frags');

				$this->set($max_right_pos, false);
			}
		}

		parent::onChange();

		$value = round_nobug($this->get(), 2);
		$text = $Measure_convert->pretty_size($value, 'MB', false); 
		get_ui($this->fmName.'->'.'min_frag_size_display')->text = $text;

		// двигаем ползунок графика
		$Graphs['frags']->select_bar->set_mb($value);

		// указываем что настройки изменились
		Ui_analize_blocks::$changed_setting = true;
	}
}

class Ui_field_analize_good_speed extends Ui_field {
	function onChange() {
		GLOBAL $OP, $Graphs, $log, $INFO;


		//ВНИМАНИЕ! Если вводить максимальное значение основанное на данных графика, это нужно делать только на этапе анализа, потому что при чтении в графике может быть мало данных и будет ложное срабатывание.

		$cur_value = $this->get();
		if(isset($INFO['step']) and $INFO['step'] == ANALIZE_BLOCKS) {
			if($cur_value < $OP['good_speed']) {
				$this->wrong_input_msg(ERROR_FIELD_MIN_ANALIZE_GOOD_SPEED);

				// выбираем верхнюю ближайшую скорость на графике, иначе будет бесконечный цикл из-за этой проверки
				list($floor, $ceil, $near) = $Graphs['speed']->near_cols($OP['good_speed']);
				if($near >= $OP['good_speed'])
					 $new_value = $near;
				else $new_value = $ceil;

				$this->set($new_value, false);
			}
			
			// elseif($cur_value > 500) {
			// 	$this->wrong_input_msg("Выбрана слишком большая скорость, уменьшите ее.");
			// 	$this->set(300, false);
			// }
		}

		// видимость сообщения о черезмерной скорости
		$view_msg = false;
		if(isset($INFO['step'])) {
			if($INFO['step'] == ANALIZE_BLOCKS or
		   	   $INFO['step'] == FINAL_OPERATIONS or
			   $INFO['step'] == FINAL_BLOCKS) {

				if($cur_value > $OP['speed_msgfrag']) {
					$view_msg = true;
				}
			}
		}
		//visible_nobug(c('grSpeed_msgfrag'), $view_msg);
		c($this->fmName.'->'.'grSpeed_msgfrag')->visible = $view_msg;
		//visible_group('grSpeed_msgfrag', $view_msg);


		parent::onChange();

		$value = $this->get();

		// двигаем ползунок графика
		$Graphs['speed']->select_bar->set_mb($value);

		$value = round_nobug($value, 2);
		get_ui($this->fmName.'->'.'analize_good_speed_display')->text = $value . ' MB/s';

		// указываем что настройки изменились
		Ui_analize_blocks::$changed_setting = true;
	}
}


// Прости меня господи за этот пиздец.
class Ui_field_autochoice_blocked_size_proc extends Ui_field {
	function onChange() {
		GLOBAL $OP, $Graphs, $log, $Ui_fields;

		parent::onChange();

		$value = $this->get();
		$Ui_fields['autochoice_blocked_size_proc']->set($value, false);
		$Ui_fields['autochoice_blocked_size_proc2']->set($value, false);
		$Ui_fields['autochoice_blocked_size_proc3']->set($value, false);
	}
}

class Ui_field_autochoice_blocked_size_proc2 extends Ui_field {
	function onChange() {
		GLOBAL $OP, $Graphs, $log, $Ui_fields;

		parent::onChange();

		$value = $this->get();
		$Ui_fields['autochoice_blocked_size_proc']->set($value, false);
		$Ui_fields['autochoice_blocked_size_proc2']->set($value, false);
		$Ui_fields['autochoice_blocked_size_proc3']->set($value, false);
	}
}

class Ui_field_autochoice_blocked_size_proc3 extends Ui_field {
	function onChange() {
		GLOBAL $OP, $Graphs, $log, $Ui_fields;

		parent::onChange();

		$value = $this->get();
		$Ui_fields['autochoice_blocked_size_proc']->set($value, false);
		$Ui_fields['autochoice_blocked_size_proc2']->set($value, false);
		$Ui_fields['autochoice_blocked_size_proc3']->set($value, false);
	}
}



class Ui_field_step_analize_autoprohod extends Ui_field {
	function onChange() {
		GLOBAL $OP, $Graphs, $log, $Ui_fields;

		parent::onChange();

		$value = $this->get();
		$Ui_fields['step_analize_autoprohod2']->set($value, false);

		// лампочка автопрохода
		// в другом чекбоксе не надо, они ведь связаны
		$signal = c('Fm->autoprohod_podbor_parametrov_signal');
		if($value)
			 $color = 0x4400FF;
		else $color = 0xaaaaaa;

		$signal->font->color = $color;
	}
}

class Ui_field_step_analize_autoprohod2 extends Ui_field {
	function onChange() {
		GLOBAL $OP, $Graphs, $log, $Ui_fields;

		parent::onChange();

		$value = $this->get();
		$Ui_fields['step_analize_autoprohod']->set($value, false);
	}
}

?>