private void Room_Panel_MouseDown(object sender, MouseEventArgs e)
        {
            Panel p   = (Panel)sender;
            Point tmp = p.PointToClient(Cursor.Position);

            if (cell_side == 0 || (tmp.X / cell_side) >= room.cells.GetLength(1) || (tmp.X / cell_side) < 0 || (tmp.Y / cell_side) >= room.cells.GetLength(0) || (tmp.Y / cell_side) < 0)
            {
                return;
            }
            tmp.X /= cell_side;
            tmp.Y /= cell_side;
            //====================================================
            if (Heat_Soruce_RadioButton.Checked == true)
            {
                room.cells[tmp.Y, tmp.X].update(false, false, ValueToColor.colors[ValueToColor.colors.Length - 1], false, ValueToColor.sMax);
                room.color_data[tmp.Y, tmp.X]   = ValueToColor.sMax;
                room.normal_cells[tmp.Y, tmp.X] = 0;
                room.block_cells[tmp.Y, tmp.X]  = 0;
            }
            else if (Cold_Soruce_RadioButton.Checked == true)
            {
                room.cells[tmp.Y, tmp.X].update(false, false, ValueToColor.colors[0], false, ValueToColor.sMin);
                room.color_data[tmp.Y, tmp.X]   = ValueToColor.sMin;
                room.normal_cells[tmp.Y, tmp.X] = 0;
                room.block_cells[tmp.Y, tmp.X]  = 0;
            }
            else if (Block_RadioButton.Checked == true)
            {
                room.cells[tmp.Y, tmp.X].update(false, true, Color.Black, false, 0);
                room.color_data[tmp.Y, tmp.X]   = 0;
                room.normal_cells[tmp.Y, tmp.X] = 0;
                room.block_cells[tmp.Y, tmp.X]  = 1;
            }
            else if (Window_RadioButton.Checked == true)
            {
                room.cells[tmp.Y, tmp.X].update(false, false, mid_color, true, (ValueToColor.sMax + ValueToColor.sMin) / 2.0);
                room.color_data[tmp.Y, tmp.X]   = (ValueToColor.sMax + ValueToColor.sMin) / 2.0;
                room.normal_cells[tmp.Y, tmp.X] = 0;
                room.block_cells[tmp.Y, tmp.X]  = 0;
            }
            else if (Normal_Cell_RadioButton.Checked == true)
            {
                room.cells[tmp.Y, tmp.X].update(true, false, mid_color, false, (ValueToColor.sMax + ValueToColor.sMin) / 2.0);
                room.color_data[tmp.Y, tmp.X]   = (ValueToColor.sMax + ValueToColor.sMin) / 2.0;
                room.normal_cells[tmp.Y, tmp.X] = 1;
                room.block_cells[tmp.Y, tmp.X]  = 0;
            }
            else
            {
                hint.SetToolTip(Room_Panel, "(" + tmp.Y * cell_side + "," + tmp.X * cell_side + "), value :" + room.cells[tmp.Y, tmp.X].color_data.ToString());
            }
            room.tmp_data[tmp.Y, tmp.X]             = room.color_data[tmp.Y, tmp.X];
            room.cells[tmp.Y, tmp.X].color_data_tmp = room.cells[tmp.Y, tmp.X].color_data;
            //====================================================
            mouse_clicked = true;
            if (simulation_is_running == false)// 34an b3d mbdos start by3ml ivalidate mrten mra bsbb el click w mra bsbb el cells update fa m4 hy3ml invalidate hna 8er abl ma simulation ybd2.
            {
                Room_Panel.Invalidate();
            }
        }
        private void Start_Button_Click(object sender, EventArgs e)
        {
            simulation_is_running = !simulation_is_running;

            if (simulation_is_running)
            {
                Start_Button.Text = "Stop";
            }
            else
            {
                Start_Button.Text = "Continue";
                stop_pressed      = true;
                Room_Panel.Invalidate();
            }

            while (simulation_is_running)
            {
                if (Sequ_RadioButton.Checked)
                {
                    room.update_cells_sequential();
                    room.update_tmp_value_sequential();
                }
                else if (Parallel_C_Sharp_RadioButton.Checked)
                {
                    room.update_cells_c_sharp_parallel();
                    room.update_tmp_value_c_sharp_parallel();
                }
                else
                {
                    room.update_cells_c_plus_plus_parallel();
                }

                Room_Panel.Invalidate();
                Application.DoEvents();
            }
        }