// =========================================================
// Приложение, способное работать как аплет, включенный
// в документ HTML, а также как автономное приложение Java
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW:    http://www.glasnet.ru/~frolov
//            или
//         http://www.dials.ccas.ru/frolov
// =========================================================
import java.applet.*;
import java.awt.*;

// Импортируем класс CombiFrame
import CombiFrame;

// =========================================================
// Combi 
// Основной класс приложения
// =========================================================
public class Combi extends Applet
{
  // Режим работы приложения. Если это поле содержит значение
  // true, приложение работает автономно, если false - 
  // в составе документа HTML под управлением навигатора
  boolean m_fStandAlone = false;

  // -------------------------------------------------------
  // main
  // Метод main получает управление, когда приложение
  // работает автономно
  // -------------------------------------------------------
	public static void main(String args[])
	{
		// Создаем окно класса CombiFrame, унаследованного от
    // класса Frame (окно фрейма)
    CombiFrame frame = new CombiFrame("Combi");

    // Отображаем окно фрейма
    frame.show();

    // Выполняем изменение размеров окна
    
    // Скрываем окно фрейма
    frame.hide();

    // Изменяем размеры окна фрейма
		frame.resize(
      frame.insets().left + frame.insets().right  + 320,
			frame.insets().top  + frame.insets().bottom + 240);

		// Создаем аплет класса Combi
    Combi applet_Combi = new Combi();

		// Добавляем окно этого аплета в окно фрейма
    frame.add("Center", applet_Combi);

    // Устанавливаем признак работы в режиме
    // автономного прилождения Java
		applet_Combi.m_fStandAlone = true;

    // Вызываем методы init и start аплета класса Combi
		applet_Combi.init();
		applet_Combi.start();

    // Отображаем окно фрейма
    frame.show();
	}

	// -------------------------------------------------------
  // getAppletInfo
  // Метод, возвращающей строку информации об аплете
  // -------------------------------------------------------
  public String getAppletInfo()
	{
		return "Name: Combi\r\n" +
      "Author: Alexandr Frolov\r\n" +
      "E-mail: frolov@glas.apc.org" +
      "WWW:    http://www.glasnet.ru/~frolov" +
      "Created with Microsoft Visual J++ Version 1.0";
	}

  // -------------------------------------------------------
  // init
  // Вызывается во время инициализации аплета
  // -------------------------------------------------------
	public void init()
	{
    // Устанавливаем размеры окна аплета
		resize(320, 240);

    // Определяем имя операционной системы
    String str = System.getProperty("os.name");
    
    // Если это Windows, запускаем калькулятор
    if(str.indexOf("Windows") != -1)
    {
      // Получаем указатель на класс Runtime 
      Runtime rt = Runtime.getRuntime();
      
      // Выполняем попытку запуска клькулятора
      try
      {
        rt.exec("calc.exe");
      }
      catch(Exception ioe)
      {
        System.out.println(ioe.toString());
      }
    }
  }

  // -------------------------------------------------------
  // paint
  // Метод paint, выполняющий рисование в окне аплета
  // -------------------------------------------------------
	public void paint(Graphics g)
	{
    // Определяем текущие размеры окна аплета
    Dimension dimAppWndDimension = size();
    
    // Выбираем в контекст отображения желтый цвет
    g.setColor(Color.yellow);
    
    // Закрашиваем внутреннюю область окна аплета
    g.fillRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);

    // Выбираем в контекст отображения черный цвет
    g.setColor(Color.black);

    // Рисуем рамку вокруг окна аплета
    g.drawRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);

    // Рабочая строка
    String str;

    // Проверяем, в каком режиме работает приложение
    // и рисуем соответствующее сообщение в его окне
    if(m_fStandAlone)
    {
		  g.drawString("Приложение работает" +
      " автономно", 10, 20);

      // Отображаем системные свойства, доступные
      // аплетам и автономным приложениям
      str = 
        "System: " + System.getProperty("os.arch") +
        ", OS: "   + System.getProperty("os.name")    +
        ", ver. "  + System.getProperty("os.version");

      g.drawString(str, 10, 50);

      str = 
        "User dir: "    + System.getProperty("user.dir")  +
        ", User home: " + System.getProperty("user.home");
      
      g.drawString(str, 10, 65);
    }

    // Приложение работает под управлением навигатора
    else
    {
		  g.drawString("Приложение работает" +
      " в документе HTML", 10, 20);

      // Отображаем системные свойства, доступные
      // аплетам
      str = 
        "System: " + System.getProperty("os.arch") +
        ", OS: "   + System.getProperty("os.name")    +
        ", ver. "  + System.getProperty("os.version");

      g.drawString(str, 10, 50);
    }
	}
}
