80 lines
2.8 KiB
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();
|
|
|
|
|