CComponentsForm: fix position of replaced item

If cc-item is bound on a parent form, it's not enough
to replace the item object only, also properties like
parent and index must be moved to new item to ensure that positions are calculated correctly.
But it's matter for unbound cc-items.


Origin commit data
------------------
Commit: c66c778326
Author: Thilo Graf <dbt@novatux.de>
Date: 2013-06-23 (Sun, 23 Jun 2013)
This commit is contained in:
2013-06-23 20:34:19 +02:00
parent 649d7083fa
commit 05a6f46dbe
2 changed files with 10 additions and 3 deletions

View File

@@ -242,6 +242,8 @@ class CComponentsItem : public CComponents
///sets pointer to the form object in which this item is embedded.
virtual void setParent(CComponentsItem *parent){cc_parent = parent;};
///returns pointer to the form object in which this item is embedded.
virtual CComponentsItem * getParent(){return cc_parent;};
///abstract: paint item, arg: do_save_bg see paintInit() above
virtual void paint(bool do_save_bg = CC_SAVE_SCREEN_YES) = 0;

View File

@@ -188,9 +188,14 @@ CComponentsItem* CComponentsForm::getCCItem(const uint& cc_item_id)
void CComponentsForm::replaceCCItem(const uint& cc_item_id, CComponentsItem* new_cc_Item)
{
if (!v_cc_items.empty()){
if (v_cc_items[cc_item_id]){
delete v_cc_items[cc_item_id];
v_cc_items[cc_item_id] = NULL;
CComponentsItem* old_Item = v_cc_items[cc_item_id];
if (old_Item){
if (old_Item->getParent()){
new_cc_Item->setParent(old_Item);
new_cc_Item->setIndex(old_Item->getIndex());
}
delete old_Item;
old_Item = NULL;
v_cc_items[cc_item_id] = new_cc_Item;
}
}