01 May 2013 - After the site upgrade, all passwords were reset and you will need to ask the site for a login reset on your first connection.
This code snippet shows one of the many ways to handle multiple windows in
PHP-GTK 2. In the following example will build 3 classes
(Application, GtkWindow_One
and GtkWindow_Two).
This class will implement 3 static methods for the managment of
GtkWindow classes. A more complete version of this
class is available at
php-gtk.pastebin.com
<?php
/**
* Class for handling multiple GtkWindow objects
* @author Leon Pegg <leon.pegg@gmail.com>
*/
class Application {
/**
* GtkWindow object array
* Structure:
* [int window_id]
* array(
* GtkWindow_Name - Store GtkWindow object
* )
*
* @var array GtkWindow
*/
protected static $GtkWindows = array();
private function __construct() {
}
/**
* Adds a GtkWindow object to Application::$GtkWindows
*
* @param GtkWindow $GtkWindow
* @return bool
*/
public static function add_window(GtkWindow $GtkWindow) {
$GtkWindow_Name = $GtkWindow->get_name();
if ($GtkWindow_Name !== '' && !array_key_exists($GtkWindow_Name,
self::$GtkWindows)) {
self::$GtkWindows[$GtkWindow_Name] = $GtkWindow;
return true;
}
return false;
}
/**
* Retrieves GtkWindow object from Application::$GtkWindows
*
* @param string $GtkWindow_Name
* @return GtkWindow
*/
public static function window($GtkWindow_Name) {
if ($GtkWindow_Name !== '' && array_key_exists($GtkWindow_Name,
self::$GtkWindows)) {
return self::$GtkWindows[$GtkWindow_Name];
}
}
/**
* Retrieves Application::$GtkWindows infomation array
* Structure:
* [int server_id]
* array(
* name - Name of GtkWindow
* class - Name of GtkWindow class
* )
*
* @return array
*/
public static function list_windows() {
$Window_List = array();
foreach (self::$GtkWindows as $GtkWindow_Name => $Class) {
$Class_Name = get_class($Class);
$Window_List[] = array(
'name' => $GtkWindow_Name,
'class' => $Class_Name);
}
return $Window_List;
}
}
?>This method is used to add instances of GtkWindow
or derived from GtkWindow to the Application.
This method will fail in two cases:
Application::$GtkWindows array.This method is used to retrieve instances of
GtkWindow or derived from it.
GtkWindow instancefalseThis method will fail in one case:
Application::$GtkWindows array.This method is used to retrieve an array of infomation
about the current GtkWindow or objects
derived from GtkWindow objects in the
Application::$GtkWindows.
Information is returned in the following format:
array(
array(
'name' => [GtkWindow name],
'class' => [Class name]
)
)
<?php
class GtkWindow_One extends GtkWindow {
protected $widgets = array();
public function __construct() {
parent::__construct();
parent::set_name('wnd_one');
$this->build_ui();
Application::add_window($this);
}
protected function build_ui() {
$btn_show = new GtkButton("Show window two");
$btn_show->set_name('btn_show');
parent::add($btn_show);
$this->widgets['btn_show'] = $btn_show;
$btn_show->connect_simple('clicked',
array($this, 'clicked_btn_show'));
parent::connect_simple('destroy',
array('Gtk', 'main_quit'));
}
public function widget($widget_name) {
if ($widget_name !== '' && array_key_exists($widget_name,
$this->widgets)) {
return $this->widgets[$widget_name];
}
return false;
}
public function clicked_btn_show() {
if (Application::window('wnd_two') !== false) {
Application::window('wnd_two')->show_all();
}
}
}
?><?php
class GtkWindow_Two extends GtkWindow {
protected $widgets = array();
public function __construct() {
parent::__construct();
parent::set_name('wnd_two');
$this->build_ui();
Application::add_window($this);
}
protected function build_ui() {
$btn_hide = new GtkButton("Hide window");
$btn_hide->set_name('btn_hide');
parent::add($btn_hide);
$this->widgets['btn_hide'] = $btn_hide;
$btn_hide->connect_simple('clicked',
array($this, 'clicked_btn_hide'));
parent::connect_simple('delete-event',
array($this, 'delete_event'));
}
public function widget($widget_name) {
if ($widget_name !== '' && array_key_exists($widget_name,
$this->widgets)) {
return $this->widgets[$widget_name];
}
return false;
}
public function clicked_btn_hide() {
parent::hide_all();
}
public function delete_event() {
parent::hide_all();
return true;
}
}
?><?php
/**
* A class to handle multiple GtkWindow objects
* @author Leon Pegg <leon.pegg@gmail.com>
*/
class Application {
/**
* GtkWindow object array
* Structure:
* [int window_id]
* array(
* GtkWindow_Name - Store GtkWindow object
* )
*
* @var array GtkWindow
*/
protected static $GtkWindows = array();
private function __construct() {
}
/**
* Adds a GtkWindow object to Application::$GtkWindows
*
* @param GtkWindow $GtkWindow
* @return bool
*/
public static function add_window(GtkWindow $GtkWindow) {
$GtkWindow_Name = $GtkWindow->get_name();
if ($GtkWindow_Name !== ''
&& !array_key_exists($GtkWindow_Name, self::$GtkWindows)) {
self::$GtkWindows[$GtkWindow_Name] = $GtkWindow;
return true;
}
return false;
}
/**
* Retrieves GtkWindow object from Application::$GtkWindows
*
* @param string $GtkWindow_Name
* @return GtkWindow
*/
public static function window($GtkWindow_Name) {
if ($GtkWindow_Name !== '' &&
array_key_exists($GtkWindow_Name, self::$GtkWindows)) {
return self::$GtkWindows[$GtkWindow_Name];
}
return false;
}
/**
* Retrieves Application::$GtkWindows infomation array
* Structure:
* [int server_id]
* array(
* name - Name of GtkWindow
* class - Name of GtkWindow class
* )
*
* @return array
*/
public static function list_windows() {
$Window_List = array();
foreach (self::$GtkWindows as $GtkWindow_Name => $Class) {
$Class_Name = get_class($Class);
$Window_List[] = array(
'name' => $GtkWindow_Name,
'class' => $Class_Name);
}
return $Window_List;
}
}
class GtkWindow_One extends GtkWindow {
protected $widgets = array();
public function __construct() {
parent::__construct();
parent::set_name('wnd_one');
$this->build_ui();
Application::add_window($this);
}
protected function build_ui() {
$btn_show = new GtkButton("Show window two");
$btn_show->set_name('btn_show');
parent::add($btn_show);
$this->widgets['btn_show'] = $btn_show;
$btn_show->connect_simple('clicked',
array($this, 'clicked_btn_show'));
parent::connect_simple('destroy',
array('Gtk', 'main_quit'));
}
public function widget($widget_name) {
if ($widget_name !== ''
&& array_key_exists($widget_name, $this->widgets)) {
return $this->widgets[$widget_name];
}
return false;
}
public function clicked_btn_show() {
if (Application::window('wnd_two') !== false) {
Application::window('wnd_two')->show_all();
}
}
}
class GtkWindow_Two extends GtkWindow {
protected $widgets = array();
public function __construct() {
parent::__construct();
parent::set_name('wnd_two');
$this->build_ui();
Application::add_window($this);
}
protected function build_ui() {
$btn_hide = new GtkButton("Hide window");
$btn_hide->set_name('btn_hide');
parent::add($btn_hide);
$this->widgets['btn_hide'] = $btn_hide;
$btn_hide->connect_simple('clicked',
array($this, 'clicked_btn_hide'));
parent::connect_simple('delete-event',
array($this, 'delete_event'));
}
public function widget($widget_name) {
if ($widget_name !== ''
&& array_key_exists($widget_name, $this->widgets)) {
return $this->widgets[$widget_name];
}
return false;
}
public function clicked_btn_hide() {
parent::hide_all();
}
public function delete_event() {
parent::hide_all();
return true;
}
}
new GtkWindow_One();
new GtkWindow_Two();
Application::window('wnd_one')->show_all();
Gtk::main();
?>
Commentaires récents
il y a 43 semaines 1 jour
il y a 44 semaines 1 jour
il y a 44 semaines 4 jours
il y a 47 semaines 1 jour
il y a 1 an 15 semaines
il y a 1 an 19 semaines
il y a 1 an 23 semaines
il y a 1 an 23 semaines
il y a 1 an 23 semaines
il y a 1 an 40 semaines