Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/etk_server/examples


Modified Files:
        etk.php 


Log Message:
- extend php5 demo a bit to show how we can use callbacks

===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk_server/examples/etk.php,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- etk.php     20 Mar 2006 02:45:44 -0000      1.1
+++ etk.php     20 Mar 2006 10:20:53 -0000      1.2
@@ -1,13 +1,17 @@
-#!/usr/bin/php -q
-
+#!/usr/local/bin/php -q
 <?php
 
+/* Etk-Php Demo. Required Php 5.x */
+
 define(FIFO, "/tmp/etk_server_fifo");
 define(EtkTrue, 1);
 define(EtkFalse, 0);
 
 class Etk
 {    
+    static private $loop = true;
+    static private $callbacks = Array();
+    
     function Etk()
     { }
     
@@ -61,36 +65,81 @@
     {
        return 0;
     }
+    
+    function AddCallback($name, $callback)
+    {
+       if(!is_array(self::$callbacks[$name]))
+         self::$callbacks[$name] = Array();
+          
+       array_push(self::$callbacks[$name], $callback);
+    }
+    
+    function Main()
+    {
+       $this->loop = EtkTrue;
+       
+       while ( $this->loop )
+       {
+           $event = Etk::Call("server_callback");
+           
+           if(!is_array(self::$callbacks[$event]))
+             continue;    
+           
+           if(array_count_values(self::$callbacks[$event]) > 0)
+           {           
+               foreach(self::$callbacks[$event] as $func)
+                 $func();                 
+           }
+       }       
+    }
+    
+    function MainQuit()
+    {
+       $this->loop = EtkFalse;
+       $this->Call("main_quit");
+       $this->Call("server_shutdown");
+    }
 }
 
-class Widget extends Etk
+class Object extends Etk
+{
+    var $object;
+    
+    function Object()
+    {
+       parent::Etk();
+    }
+    
+    function SignalConnect($name, $callback)
+    {
+       $this->Call("server_signal_connect \"$name\" ".$this->Get()." 
\"".$name."_".$this->object."\"");
+       $this->AddCallback($name."_".$this->object, $callback);
+    }    
+}
+
+class Widget extends Object
 {
     var $widget;
     
     function Widget()
     {
-       parent::Etk();
+       parent::Object();
     }
     
     function Set($w)
     {
-       $this->widget = $w;
+       $this->object = $w;
     }
     
     function Get()
     {
-       return $this->widget;
+       return $this->object;
     }
     
     function ShowAll()
     {
        $this->Call("widget_show_all ".$this->Get());
-    }
-    
-    function SignalConnect($name, $id)
-    {
-       $this->Call("server_signal_connect \"$name\" ".$this->Get()." \"$id\"");
-    }
+    }    
 }
 
 class Image extends Widget
@@ -106,13 +155,43 @@
     }
 }          
 
-class Button extends Widget
+class Container extends Widget
+{
+    function Container()
+    {
+       parent::Widget();
+    }
+    
+    function Add($widget)
+    {
+       $this->Call("container_add ".$this->Get(). " ".$widget->Get());
+    }  
+}
+
+class Bin extends Container
+{
+    function Bin()
+    {
+       parent::Container();
+    }
+    
+    function ChildSet($child)
+    {
+       $this->Call("bin_child_set ".$this->Get()." ".$child->Get());
+    }
+    
+    function ChildGet()
+    {
+    }
+}
+       
+class Button extends Bin
 {
     var $image;
     
     function Button($label = "", $img = "")
     {
-       parent::Widget();
+       parent::Bin();
        
        if(!empty($label))
          $this->Set($this->Call("button_new_with_label \"$label\""));
@@ -127,17 +206,16 @@
     }
 }
 
-class Container extends Widget
+class CheckButton extends Button
 {
-    function Container()
+    function CheckButton($label = "")
     {
-       parent::Widget();
+       parent::Button($label);
+       if(!empty($label))
+         $this->Set($this->Call("check_button_new_with_label \"$label\""));
+       else
+         $this->Set($this->Call("check_button_new"));
     }
-    
-    function Add($widget)
-    {
-       $this->Call("container_add ".$this->Get(). " ".$widget->Get());
-    }  
 }
 
 class Window extends Container
@@ -196,27 +274,42 @@
     }
 }
 
-Etk::Connect();
-Etk::Call("init");
+class HBox Extends Box
+{
+    function HBox($homogenous = EtkFalse, $padding = 0)
+    {
+       parent::Box();
+       $this->Set($this->Call("hbox_new $homogenous $padding"));
+    }
+}
+
+/* Main Application */
+
+$etk = new Etk();
+$etk->Connect();
+$etk->Call("init");
 
 $win = new Window("Etk-Php Demo");
-$win->SignalConnect("delete_event", "window_deleted");
+$win->SignalConnect("delete_event", _window_deleted_cb);
 
 $vbox = new VBox(EtkFalse, 0);
 
 $button1 = new Button("Php owns!");
-$button1->SignalConnect("clicked", "button_1_clicked");
+$button1->SignalConnect("clicked", _button_1_clicked_cb);
 
 $button2 = new Button("Etk owns!");
-$button2->SignalConnect("clicked", "button_2_clicked");
+$button2->SignalConnect("clicked", _button_2_clicked_cb);
+
+$check_button1 = new CheckButton("Check me!");
 
 $entry = new Entry("Moo!");
 
 $button3 = new Button("Get Text");
-$button3->SignalConnect("clicked", "button_3_clicked");
+$button3->SignalConnect("clicked", _button_3_clicked_cb);
 
 $vbox->PackStart($button1);
 $vbox->PackStart($button2);
+$vbox->PackStart($check_button1);
 $vbox->PackStart($entry);
 $vbox->PackStart($button3);
 
@@ -224,32 +317,30 @@
 
 $win->ShowAll();
 
-$loop = EtkTrue;
-while ( $loop )
+$etk->Main();
+
+function _button_1_clicked_cb()
+{
+    printf("Button 1 clicked!\n");
+}
+               
+function _button_2_clicked_cb()
+{
+    printf("Button 2 clicked!\n");
+}
+               
+function _button_3_clicked_cb()
 {
-    $event = Etk::Call("server_callback");
+    global $entry;
     
-    switch($event)
-    {
-     case "button_1_clicked":
-       print("Button 1 clicked!\n");
-       break;
-       
-     case "button_2_clicked":
-       print("Button 2 clicked!\n");
-       break;
-
-     case "button_3_clicked":
-       printf("Text = ".$entry->TextGet());
-       break;
-       
-     case "window_deleted":
-       $loop = EtkFalse;
-       break;
-    }
+    printf("Text = ".$entry->TextGet()."\n");
+}
+               
+function _window_deleted_cb()
+{
+    global $etk;
+    
+    $etk->MainQuit();
 }
-
-Etk::Call("main_quit");
-Etk::Call("server_shutdown");
 
 ?>




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to