Modified: desktop/trunk/lib/actions.class.php (62 => 63)
--- desktop/trunk/lib/actions.class.php 2006-12-08 20:08:34 UTC (rev 62)
+++ desktop/trunk/lib/actions.class.php 2006-12-08 22:38:45 UTC (rev 63)
@@ -11,7 +11,7 @@
* @link http://callicore.net/desktop
* @license http://www.opensource.org/licenses/gpl-license.php GPL
* @version $Id$
- * @since Php 5.2.0
+ * @since Php 5.1.0
* @package callicore
* @subpackage desktop
* @category lib
@@ -53,11 +53,11 @@
*/
public function __construct()
{
- if(!is_null(self::$singleton))
+ if (!is_null(self::$singleton))
{
- throw new Exception(CC::i18n(
+ throw new CC_Exception(
'%1$s is a singleton class - use %1$s::instance() to retrieve the current object',
- 'CC_Actions'));
+ 'CC_Actions');
}
self::$singleton = $this;
@@ -66,6 +66,45 @@
}
/**
+ * public function get_group
+ *
+ * returns action group
+ *
+ * @param string $group name of action group to get
+ * @return instanceof GtkActionGroup
+ */
+ public function get_group($group)
+ {
+ return isset($this->groups[$group]) ? $this->groups[$group] : NULL;
+ }
+
+ /**
+ * public function list_groups
+ *
+ * returns an array of all current gtkactiongroups
+ *
+ * @return array all current groups stored
+ */
+ public function list_groups()
+ {
+ return $this->groups;
+ }
+
+ /**
+ * public function get_action
+ *
+ * returns an action from a group (shortcut)
+ *
+ * @param string $group name of action group to get
+ * @param string $action name of action to get
+ * @return instanceof GtkAction
+ */
+ public function get_action($group, $action)
+ {
+ return $this->get_group($group)->get_action($action);
+ }
+
+ /**
* public function get_accel
*
* returns GtkAccelGroup instance, use this to set it in the right window
@@ -136,11 +175,11 @@
{
$tips = CC_Tooltips::instance();
$item = $this->get_action($group, $action);
- if($item instanceof GtkRadioAction)
+ if ($item instanceof GtkRadioAction)
{
$button = new GtkRadioButton();
}
- elseif($item instanceof GtkToggleAction)
+ elseif ($item instanceof GtkToggleAction)
{
$button = new GtkCheckButton();
}
@@ -195,33 +234,6 @@
}
/**
- * public function get_group
- *
- * returns action group
- *
- * @param string $group name of action group to get
- * @return instanceof GtkActionGroup
- */
- public function get_group($group)
- {
- return isset($this->groups[$group]) ? $this->groups[$group] : NULL;
- }
-
- /**
- * public function get_action
- *
- * returns an action from a group (shortcut)
- *
- * @param string $group name of action group to get
- * @param string $action name of action to get
- * @return instanceof GtkAction
- */
- public function get_action($group, $action)
- {
- return $this->get_group($group)->get_action($action);
- }
-
- /**
* public function add_group
*
* adds a new group with the specific name
@@ -236,9 +248,9 @@
}
/**
- * public function add_actions
+ * public function add_action
*
- * adds actions to a specific group (shortcut)
+ * adds and action to a specific group (shortcut)
* definition is array(
* 'type' => action|toggle|radio,
* 'callback' => php callback,
@@ -251,62 +263,154 @@
* 'value' => value for radio action,
* 'radio' => for radio items, the name of the action to group with
* );
- *
*
* @param string $group group to add to
- * @param array $definitions array of action definitions
+ * @param array $def action definition array
* @return void
*/
- public function add_actions($group, $definitions)
+ public function add_action($group, $def)
{
- if(!isset($this->groups[$group]))
+ if (!isset($this->groups[$group]))
{
$this->add_group($group);
}
$group = $this->get_group($group);
- foreach($definitions as $def)
+
+ if (!isset($def['image']))
{
- if(!isset($def['image']))
+ $def['image'] = NULL;
+ }
+ switch ($def['type'])
+ {
+ case 'radio':
+ $action = new GtkRadioAction($def['name'], CC::i18n($def['label']), CC::i18n($def['tooltip']),$def['image'],$def['value']);
+ $signal = 'toggled';
+ break;
+ case 'toggle':
+ $action = new GtkToggleAction($def['name'], CC::i18n($def['label']), CC::i18n($def['tooltip']),$def['image']);
+ $signal = 'toggled';
+ break;
+ default:
+ $action = new GtkAction($def['name'], CC::i18n($def['label']), CC::i18n($def['tooltip']),$def['image']);
+ $signal = 'activate';
+ }
+ $action->set_property('short-label', isset($def['short-label']) ? CC::i18n($def['short-label']) : NULL);
+ if (isset($def['callback']))
+ {
+ $action->connect($signal, $def['callback']);
+ }
+ if (isset($def['accel']))
+ {
+ $action->set_accel_group($this->accel);
+ $group->add_action_with_accel($action, $def['accel']);
+ }
+ else
+ {
+ $group->add_action($action);
+ }
+ if (isset($def['radio']))
+ {
+ $action->set_group($group->get_action($def['radio']));
+ }
+ return;
+ }
+
+ /**
+ * public function add_actions
+ *
+ * adds an array of actions - shortcut for add_action
+ *
+ * @param string $group group to add to
+ * @param array $definitions array of action definitions
+ * @return void
+ */
+ public function add_actions($group, $definitions)
+ {
+ foreach ($definitions as $def)
+ {
+ $this->add_action($group, $def);
+ }
+ return;
+ }
+
+ /**
+ * public function connect_instance
+ *
+ * connects ALL ACTIONS in a specific group automatically to a
+ *
+ * @param string $group group to add to
+ * @param array $definitions array of action definitions
+ * @return void
+ */
+ public function connect_instance($group, $object)
+ {
+ $list = $this->get_group($group)->list_actions();
+ foreach($list as $action)
+ {
+ $name = $action->get_name();
+ $methods = array(
+ 'on_' . $name . '_activate',
+ 'on_' . $name . '_toggled',
+ 'on_action_' . $name . '_activate',
+ 'on_action_' . $name . '_toggled'
+ );
+
+ foreach($methods as $method)
{
- $def['image'] = NULL;
+ if(method_exists($object, $method))
+ {
+ $action->connect('activate', array($object, $method));
+ }
}
- switch($def['type'])
- {
- case 'radio':
- $action = new GtkRadioAction($def['name'], CC::i18n($def['label']), CC::i18n($def['tooltip']),$def['image'],$def['value']);
- $signal = 'toggled';
- break;
- case 'toggle':
- $action = new GtkToggleAction($def['name'], CC::i18n($def['label']), CC::i18n($def['tooltip']),$def['image']);
- $signal = 'toggled';
- break;
- default:
- $action = new GtkAction($def['name'], CC::i18n($def['label']), CC::i18n($def['tooltip']),$def['image']);
- $signal = 'activate';
- }
- $action->set_property('short-label', isset($def['short-label']) ? CC::i18n($def['short-label']) : NULL);
- if(isset($def['callback']))
- {
- $action->connect($signal, $def['callback']);
- }
- if(isset($def['accel']))
- {
- $action->set_accel_group($this->accel);
- $group->add_action_with_accel($action, $def['accel']);
- }
- else
- {
- $group->add_action($action);
- }
- if(isset($def['radio']))
- {
- $action->set_group($group->get_action($def['radio']));
- }
}
return;
}
/**
+ * public function connect
+ *
+ * connects ALL ACTIONS in a specific group to a callback
+ *
+ * @param string $group group to add to
+ * @param array $definitions array of action definitions
+ * @return void
+ */
+ public function connect_all($group, $signal, $callback)
+ {
+ $args = func_get_args();
+ array_shift($args);
+ $list = $this->get_group($group)->list_actions();
+ foreach($list as $action)
+ foreach ($group as $action)
+ {
+ call_user_func_array(array($action, 'connect'), $args);
+ }
+ return;
+ }
+
+ /**
+ * public function connect_simple
+ *
+ * connects ALL ACTIONS in a specific group to a callback using connect_simple
+ *
+ * @param string $group group to add to
+ * @param array $definitions array of action definitions
+ * @return void
+ */
+ public function connect_all_simple($group, $signal, $callback)
+ {
+ // need list groups and list actions
+ $args = func_get_args();
+ array_shift($args);
+ $list = $this->get_group($group)->list_actions();
+ foreach($list as $action)
+ {
+ call_user_func_array(array($action, 'connect_simple'), $args);
+ }
+ return;
+ }
+
+ /**
* static public function instance
*
* this is how items can access the actions
@@ -315,7 +419,7 @@
*/
static public function instance()
{
- if(is_null(self::$singleton))
+ if (is_null(self::$singleton))
{
self::$singleton = new CC_Actions();
}
@@ -331,7 +435,7 @@
*/
public function __clone()
{
- throw new Exception(CC::i18n('Cannot clone singleton object %s', 'CC_Actions'));
+ throw new CC_Exception('Cannot clone singleton object %s', 'CC_Actions');
return;
}
}