From 303edb1dd308d3812102fbe25438e56413cd79a3 Mon Sep 17 00:00:00 2001 From: tof <> Date: Mon, 13 Oct 2008 13:40:34 +0000 Subject: Added drag and drop components --- .../protected/pages/ActiveControls/DragDrop.page | 26 +++++ .../protected/pages/ActiveControls/Home.page | 22 +++- .../ActiveControls/Samples/DragDrop/Home.page | 90 +++++++++++++++++ .../pages/ActiveControls/Samples/DragDrop/Home.php | 112 +++++++++++++++++++++ .../Samples/DragDrop/assets/product1.png | Bin 0 -> 10711 bytes .../Samples/DragDrop/assets/product2.png | Bin 0 -> 9550 bytes .../Samples/DragDrop/assets/trash.png | Bin 0 -> 783 bytes 7 files changed, 249 insertions(+), 1 deletion(-) create mode 100755 demos/quickstart/protected/pages/ActiveControls/DragDrop.page create mode 100755 demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/Home.page create mode 100755 demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/Home.php create mode 100755 demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/product1.png create mode 100755 demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/product2.png create mode 100755 demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/trash.png (limited to 'demos/quickstart/protected/pages/ActiveControls') diff --git a/demos/quickstart/protected/pages/ActiveControls/DragDrop.page b/demos/quickstart/protected/pages/ActiveControls/DragDrop.page new file mode 100755 index 00000000..0969ddd0 --- /dev/null +++ b/demos/quickstart/protected/pages/ActiveControls/DragDrop.page @@ -0,0 +1,26 @@ + + +

TDropContainer

+ + +

TDropContainer represent an area where +TDraggable controls can be dropped. +When a TDraggable is dropped, a +callback request is initiated. The OnCallback event is raised +during a callback request and it is raised after +the OnDropk event. +

+ + +

TDraggable

+ + +

TDraggable will make its child controls 'draggable'. +When a TDraggable is dropped, a +callback request is initiated. The OnCallback event is raised +during a callback request and it is raised after +the OnDropk event. +

+ + +
$Id$
\ No newline at end of file diff --git a/demos/quickstart/protected/pages/ActiveControls/Home.page b/demos/quickstart/protected/pages/ActiveControls/Home.page index 5cf4ab17..3cd9b0aa 100644 --- a/demos/quickstart/protected/pages/ActiveControls/Home.page +++ b/demos/quickstart/protected/pages/ActiveControls/Home.page @@ -160,6 +160,12 @@ TActiveButton control. See also the later part of the TValueTriggeredCallback monitors (using a timer) an attribute of an HTML element and triggers a callback request when the attribute value changes. + + +
  • + TDropContainer & TDraggable represents drag and drop containers. + The former will make its child controls "draggable" while the latter will raise a callback when a draggable + control is dropped on it.
  • @@ -310,7 +316,21 @@ if Javascript was disabled on the client's browser.

    TValueTriggeredCallback YesNo - + + + + TDropContainer + + YesNo + + + + TDraggable + + NoNo + + +

    Active Control Infrastructure Classes

    diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/Home.page b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/Home.page new file mode 100755 index 00000000..89d64110 --- /dev/null +++ b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/Home.page @@ -0,0 +1,90 @@ + + +

    Drag & Drop demo !

    + +

    Product List :

    + +
    + + + + + Data['ProductImageUrl']%> /> + + + +
    +

    Your shopping cart :

    + + + + Your shopping cart is empty, please add some items ! + + + Data['ProductCount'] > 1)%> + > + Data['ProductImageUrl']%>/> + Data['ProductTitle']%>/> + + + + + +

    Remove Items from cart by dropping them here

    + +
    diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/Home.php new file mode 100755 index 00000000..276ee6a4 --- /dev/null +++ b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/Home.php @@ -0,0 +1,112 @@ +getIsPostBack() && !$this->getIsCallBack()) + { + + $this->populateProductList(); + $this->populateShoppingList(); + } + } + + private function getProductData () + { + return array ( + array ( + 'ProductId' => 'Product1', + 'ProductImageUrl' => $this->publishAsset('assets/product1.png'), + 'ProductTitle' => 'Cup' + ), + array ( + 'ProductId' => 'Product2', + 'ProductImageUrl' => $this->publishAsset('assets/product2.png'), + 'ProductTitle' => 'T-Shirt' + ) + ); + } + + private function getProduct ($key) + { + foreach ($this->getProductData() as $product) + if ($product['ProductId']==$key) return $product; + return null; + } + + protected function populateProductList () + { + $this->ProductList->DataSource=$this->getProductData(); + $this->ProductList->Databind(); + } + + protected function populateShoppingList () + { + $this->ShoppingList->DataSource=$this->getShoppingListData(); + $this->ShoppingList->Databind(); + + } + + + public function getShoppingListData () + { + return $this->getViewState('ShoppingList', array ()); + } + + public function setShoppingListData ($value) + { + $this->setViewState('ShoppingList', TPropertyValue::ensureArray($value), array ()); + } + + public function addItemToCart ($sender, $param) + { + $control=$param->getDroppedControl(); + // Get the Key from the repeater item + $item=$control->getNamingContainer(); + $key=$this->ProductList->getDataKeys()->itemAt($item->getItemIndex()); + $product=$this->getProduct($key); + $shoppingList=$this->getShoppingListData(); + if (isset ($shoppingList[$key])) + { + // Already an item of this type, increment counter + $shoppingList[$key]['ProductCount']++; + } + else + { + // Add an item to the shopping list + $shoppingList[$key]=$product; + $shoppingList[$key]['ProductCount']=1; + } + $this->setShoppingListData($shoppingList); + + } + + public function removeItemFromCart ($sender, $param) + { + $control=$param->getDroppedControl(); + $item=$control->getNamingContainer(); + $key=$this->ShoppingList->getDataKeys()->itemAt($item->getItemIndex()); + $shoppingList=$this->getShoppingListData(); + if (isset($shoppingList[$key])) + { + if ($shoppingList[$key]['ProductCount'] > 1) + $shoppingList[$key]['ProductCount'] --; + else + unset($shoppingList[$key]); + } + $this->setShoppingListData($shoppingList); + + } + + public function redrawCart ($sender, $param) + { + $this->populateShoppingList(); + $this->cart->render($param->NewWriter); + + } +} +?> \ No newline at end of file diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/product1.png b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/product1.png new file mode 100755 index 00000000..ae03d551 Binary files /dev/null and b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/product1.png differ diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/product2.png b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/product2.png new file mode 100755 index 00000000..25e81ad7 Binary files /dev/null and b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/product2.png differ diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/trash.png b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/trash.png new file mode 100755 index 00000000..184f7628 Binary files /dev/null and b/demos/quickstart/protected/pages/ActiveControls/Samples/DragDrop/assets/trash.png differ -- cgit v1.2.3