<?php
class Calc {
   protected $glade;
   protected $firstParam = null;
   protected $operation = null;
   
   function __construct($glade) {
      $this->glade = $glade;
   }
   /* Calculer le résultat de l'opération */
   protected function calculate($operation) {
      $secondParam = (float) $this->glade->get_widget('entry1')->get_text();
      $firstParam = (float) $this->firstParam;
      $result = 0;
      switch($this->operation) {
         case '*': 
            $result = $firstParam * $secondParam; 
            break;
         case '/': 
            $result = ($secondParam > 0 ? $firstParam / $secondParam : 0); 
            break;
         case '+': 
            $result = $firstParam + $secondParam; 
            break;
         case '-': 
            $result = $firstParam - $secondParam; 
            break;
      }
      $this->glade->get_widget('entry1')->set_text($result);
      $this->firstParam = $result;
      $this->operation = null;
   }
   /* Effectuer une opération */
   public function performAction($obj) {
      if ($this->firstParam == null) {
         $this->firstParam = $this->glade->get_widget('entry1')->get_text();
         $this->glade->get_widget('entry1')->set_text('');
      } 
      if ($this->operation == null) {
         $this->operation = str_replace(
            array('action_mul', 'action_add', 'action_min', 'action_div'), 
            array('*', '+', '-', '/'), 
            $obj->name
         );
         $this->glade->get_widget('entry1')->set_text('');
      } else {
         $this->calculate($obj->name);
      }
   }
   /* Ajout du caractère à la valeur courante de la zone d'entrée */
   public function enterValue($obj) {
      /* Puisque nous avons les noms des boutons Input0 .. input1, vous devez couper le "input" et obtenir la valeur */
      /* Je sais que c'est stupide, mais la tâche n'est pas d'écrire des articles pour l'algorithme de calcul) */
      $this->glade->get_widget('entry1')->set_text(
         $this->glade->get_widget('entry1')->get_text().
         str_replace('input', '', $obj->name)
      );
   }
   /* Effacer le champ d'entrée, et la valeur de la première variable, et l'opération étant exécutée */
   public function clearCalc($obj) {
      $this->firstParam = null;
      $this->operation = null;
      $this->glade->get_widget('entry1')->set_text('');
   }
   /* quitter */
   public function quit() {
      exit;
   }
}
/* Загрузить файл интефейса */
$glade = new GladeXML('calc.glade');
/* Указать, что все обработчики событий в классе Calc */
$glade->signal_autoconnect_instance(new Calc($glade));
/* При закрытии окна закрывать приложение */
$glade->get_widget('window1')->connect_simple('destroy', array('Gtk', 'main_quit'));
/* Инициализация GTK приложения */
Gtk::main();


