<?

class Ui_adapt_size {

	static $height_max = 1500;
	static $width_max = 1000; //990;//1100; при меньше 1000 образует горизонтальная прокрутка так где появляется вертикальная

	static $pxRatio = 1; // если в винде стоят увеличенны шрифты, то размеры всех элементов тоже меняются

	static function init() {
		GLOBAL $GOP;

		// вычисляет коэфицент увеличения элементов
		self::$pxRatio = $ratio = с('screen_ratio')->w / 100;

		// меняем размеры 
		self::$height_max *= $ratio;
		self::$width_max *= $ratio;

		Hint::$min_height *= $ratio;

		$GOP['scrollbox_info_noscroll_h'] *= $ratio;
		$GOP['log_min_h'] *= $ratio;
		$GOP['space_between_graphs'] *= $ratio;
		$GOP['bt_graph_height_step'] *= $ratio; 
	}

	// подстраиваем размеры окна под разрешение экрана
	// вызывается из таймера потому что некоторые свойства при load нельзя установить.
	static function window_by_screen() {
		GLOBAL $SCREEN, $Ui_steps_story, $log;

		if(empty($GLOBALS['log'])) 
			return false;

		$ratio = self::$pxRatio;

		//$log->line('window_by_screen');	

		// TODO: при ресайзе пользователем, хорошо бы сохранять настройки окна и использовать уже их. Причем настройки привязывать к разрешению экрана.

		$menu_run_height = 40*$ratio; // высота меню пуск. Высота примерная, для win 7 подходит.
								// здесь бесполезно учитывать бордюр формы, не работает почему то+ пару пикселей на борюдр самой формы

		// если высота экрана меньше максимальной, используем ее
		// иначе используем максимальную высоту
		$screen_height = $SCREEN->height - $menu_run_height;

		$height = ($screen_height > self::$height_max)
					? self::$height_max
					: $screen_height;

		$width = ($SCREEN->width > self::$width_max)
					? self::$width_max
					: $SCREEN->width;

		$x = ($SCREEN->width - $width) / 2; // по центру экрана

		//$log->line("SCREEN->width:{$SCREEN->width}; SCREEN->height: {$SCREEN->height};  $menu_run_height");
		//$log->line("form->w = $width; form->h = $height");

		// на самом деле мы изменяем размеры главной формы
		$form = get_ui(Form_root::$name);
		$form->w = $width;
		$form->h = $height;
		$form->x = $x;
		$form->y = 0; // высоту можно установить только после события "создание формы"
	}


	// адаптация панелей под текущий размер окна
	static function panels_by_window() {
		GLOBAL $GOP, $log;

		// поскольку установлен по событию "ресайз окна", то он будет вызван еще до полного создания формы
		// и определения всех классов. Поэтому блокируем данные случай
		// таким идиотским способом
		if(empty($GLOBALS['log'])) 
			return false;

		// событие "изменение размера" срабатывает при закрытии
		// но так как к тому моменту формы уже не существует, мы вынуждены сделать здесь проверку.
		// иначе в логе будет ошибка указывающая на это место.
		if(!$form = get_ui(Form_root::$name))
			return false;

		//$log->line('panels_by_window');

		$scrollbox_info = c('Fm->scrollbox_info');
		$w = $form->clientWidth - get_ui('Fm->RIGHT_PANEL')->x;

		// при 800Х600 RIGHT_PANEL почему то имеет размер больше формы
		// поэтому руками меняем ее размер
		get_ui('Fm->RIGHT_PANEL')->w = $w;

		// ширина справки
		get_ui('Fm->hint_panel')->w = $w;
		get_ui('Fm->hint_panel')->toFront(); // она должна быть выше всего, даже панели настроек

		// устанавливаем размер скроллбара с инфой так чтобы был без прокрутки
		$total_h = get_ui('Fm->RIGHT_PANEL')->h;
		//$log->line("RIGHT_PANEL->h = $total_h");

		$total_h -= $GOP['log_min_h'];
		if($GOP['scrollbox_info_noscroll_h'] < $total_h)
			$h = $GOP['scrollbox_info_noscroll_h'];
		else $h = $total_h;

		// иногда h получаетс в ноль почему то, поэтому делаем костылек
		if($h < 150)
			$h = 150;

		//$log->line("total_h = $total_h; h = $h");

		$scrollbox_info->h  = $h;
		
		self::right_panel_bg();
	}

	// не используется потмоу что фона больше нет. Но рабочая, оставим на всякий случай
	# корректируем ширину фона
	// вызываем в одном из первых тиков таймера, поскоольку если вызвать в на этапе загрузки формы, он считает что есть полоса скролбара справа и получается дыра
	static function right_panel_bg() {
		// $bg = c('bg_grad');
		// $scrollbox_info = c('scrollbox_info');

		// // проверяем, есть ли вертикальная прокрутка
		// $bg_w = $scrollbox_info->w;
		// if(Scrollbox::get_client_height($scrollbox_info) != $scrollbox_info->h)
		// 	$bg_w -= 17 * self::$pxRatio;

		// $bg->w = $bg_w; // почему то с ним не вышло, влом разбираться. Scrollbox::get_client_width($scrollbox_info);
	}


	// подгоняем графики под размер скролбокса
	static function adapt_objs_right_scrollbox() {
		GLOBAL $Graphs, $GOP;

		$ratio = self::$pxRatio;

		$graph_min_h = 100 * $ratio;
		$graph_optimal_frags = 110 * $ratio; // оптимальный размер графика фрагментов. Он не нужно такой детальный как скоростей, поэтому его делаем меньше.

		$scrollbox_info = get_ui('Fm->scrollbox_info'); 
		$speed_wrap = get_ui('Fm->graph_speed_wrap');
		$frags_wrap = get_ui('Fm->graph_frags_wrap');

		$before_graphs_h = $speed_wrap->y;

		// берем высоту скролбокса
		// нужно именно высота видимой области скроллбока а не его общей.
		// новый размер графиков
		$graph_h = ($scrollbox_info->h - $before_graphs_h - $GOP['space_between_graphs']) / 2;
		if($graph_h < $graph_min_h) {
			$speed_wrap->h = $graph_min_h;
			$frags_wrap->h = $graph_min_h; 
		}
		else {
			$add = $graph_h - $graph_optimal_frags;

			$speed_wrap->h = $graph_h + $add;
			$frags_wrap->h = $graph_optimal_frags; 
		}

		// меняем высоту графиков
		$Graphs['speed']->adapt_size();
		$Graphs['frags']->adapt_size();

		// справочный блок для создания файлов
 		c('Fm->info_create_blocks')->y = $speed_wrap->y;

		// двигаем график фрагметов чтобы между ним и графиком скоростей не было дырок
		$frags_wrap->y =  $speed_wrap->h + $speed_wrap->y + $GOP['space_between_graphs'];

	}
}


?>