mescigares/app_gestion/phpgtk/calc.php

80 lines
2.8 KiB
PHP

<?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();