Resolves: #ii122111# Corrected LinePropertyPanel::NotifyItemUpdate
to use pState with more care
(cherry picked from commit 12df8f6dd3ed9ea37d9d0dd61bc56ada3bc062b1)
Conflicts:
svx/source/sidebar/line/LinePropertyPanel.cxx
Change-Id: I380a4f9f8e43340ee03a1cd10546367b6818f74e
diff --git a/svx/source/sidebar/line/LinePropertyPanel.cxx b/svx/source/sidebar/line/LinePropertyPanel.cxx
index c6da700..61f07b0 100644
--- a/svx/source/sidebar/line/LinePropertyPanel.cxx
+++ b/svx/source/sidebar/line/LinePropertyPanel.cxx
@@ -224,12 +224,7 @@ LinePropertyPanel::LinePropertyPanel(
mxFrame(rxFrame),
mpBindings(pBindings),
mbColorAvailable(true),
mbStyleAvailable(false),
mbDashAvailable(false),
mbTransAvailable(true),
mbWidthValuable(true),
mbStartAvailable(true),
mbEndAvailable(true)
mbWidthValuable(true)
{
Initialize();
FreeResource();
@@ -387,42 +382,43 @@ void LinePropertyPanel::NotifyItemUpdate(
const bool bIsEnabled)
{
(void)bIsEnabled;
const bool bDisabled(SFX_ITEM_DISABLED == eState);
switch(nSID)
{
case SID_ATTR_LINE_COLOR:
{
if( eState == SFX_ITEM_DISABLED)
if(bDisabled)
{
mpFTColor->Disable();
mpTBColor->Disable();
mbColorAvailable = false;
mpColorUpdater->Update(COL_WHITE);
}
else
{
mpFTColor->Enable();
mpTBColor->Enable();
const XLineColorItem* pItem = dynamic_cast< const XLineColorItem* >(pState);
}
if(eState >= SFX_ITEM_DEFAULT && pItem)
if(eState >= SFX_ITEM_DEFAULT)
{
const XLineColorItem* pItem = dynamic_cast< const XLineColorItem* >(pState);
if(pItem)
{
maColor = pItem->GetColorValue();
mbColorAvailable = true;
mpColorUpdater->Update(maColor);
}
else
{
mbColorAvailable = false;
mpColorUpdater->Update(COL_WHITE);
break;
}
}
mbColorAvailable = false;
mpColorUpdater->Update(COL_WHITE);
break;
}
case SID_ATTR_LINE_DASH:
case SID_ATTR_LINE_STYLE:
{
if( eState == SFX_ITEM_DISABLED)
if(bDisabled)
{
mpFTStyle->Disable();
mpLBStyle->Disable();
@@ -431,140 +427,159 @@ void LinePropertyPanel::NotifyItemUpdate(
{
mpFTStyle->Enable();
mpLBStyle->Enable();
if( eState >= SFX_ITEM_DEFAULT )
}
if(eState >= SFX_ITEM_DEFAULT)
{
if(nSID == SID_ATTR_LINE_STYLE)
{
if(nSID == SID_ATTR_LINE_STYLE)
{
const XLineStyleItem* pItem = dynamic_cast< const XLineStyleItem* >(pState);
const XLineStyleItem* pItem = dynamic_cast< const XLineStyleItem* >(pState);
if(pItem)
{
mbStyleAvailable =true;
mpStyleItem.reset(pState ? (XLineStyleItem*)pItem->Clone() : 0);
}
}
else if(nSID == SID_ATTR_LINE_DASH)
if(pItem)
{
const XLineDashItem* pItem = dynamic_cast< const XLineDashItem* >(pState);
if(pItem)
{
mbDashAvailable = true;
mpDashItem.reset(pState ? (XLineDashItem*)pItem->Clone() : 0);
}
mpStyleItem.reset(pState ? (XLineStyleItem*)pItem->Clone() : 0);
}
}
else // if(nSID == SID_ATTR_LINE_DASH)
{
const XLineDashItem* pItem = dynamic_cast< const XLineDashItem* >(pState);
if(pItem)
{
mpDashItem.reset(pState ? (XLineDashItem*)pItem->Clone() : 0);
}
}
}
else
{
if(nSID == SID_ATTR_LINE_STYLE)
{
mpStyleItem.reset(0);
}
else
{
if(nSID == SID_ATTR_LINE_STYLE)
mbStyleAvailable = false;
else
mbDashAvailable = false;
mpDashItem.reset(0);
}
SelectLineStyle();
}
SelectLineStyle();
break;
}
case SID_ATTR_LINE_TRANSPARENCE:
{
if( eState == SFX_ITEM_DISABLED )
if(bDisabled)
{
mpFTTrancparency->Disable();
mpMFTransparent->Disable();
mpMFTransparent->SetValue(0);//add
mpMFTransparent->SetText(String());
mbTransAvailable = false;
}
else
{
mpFTTrancparency->Enable();
mpMFTransparent->Enable();
mbTransAvailable = true;
}
if(eState >= SFX_ITEM_DEFAULT)
{
const XLineTransparenceItem* pItem = dynamic_cast< const XLineTransparenceItem* >(pState);
if(eState != SFX_ITEM_DONTCARE && pItem)
if(pItem)
{
mnTrans = pItem->GetValue();
mpMFTransparent->SetValue(mnTrans);
}
else
{
mpMFTransparent->SetValue(0);//add
mpMFTransparent->SetText(String());
break;
}
}
mpMFTransparent->SetValue(0);//add
mpMFTransparent->SetText(String());
break;
}
case SID_ATTR_LINE_WIDTH:
{
if(eState == SFX_ITEM_DISABLED)
if(bDisabled)
{
mpTBWidth->Disable();
mpFTWidth->Disable();
}
else
{
//enable
mpTBWidth->Enable();
mpFTWidth->Enable();
}
if(eState >= SFX_ITEM_DEFAULT)
{
const XLineWidthItem* pItem = dynamic_cast< const XLineWidthItem* >(pState);
if(eState >= SFX_ITEM_AVAILABLE && pItem)
if(pItem)
{
mnWidthCoreValue = pItem->GetValue();
mbWidthValuable = true;
}
else
{
mbWidthValuable = false;
SetWidthIcon();
break;
}
}
mbWidthValuable = false;
SetWidthIcon();
break;
}
case SID_ATTR_LINE_START:
{
mpFTArrow->Enable();
mpLBStart->Enable();
if(bDisabled)
{
mpFTArrow->Disable();
mpLBStart->Disable();
}
else
{
mpFTArrow->Enable();
mpLBStart->Enable();
}
if(eState != SFX_ITEM_DONTCARE)
if(eState >= SFX_ITEM_DEFAULT)
{
const XLineStartItem* pItem = dynamic_cast< const XLineStartItem* >(pState);
if(pItem)
{
mbStartAvailable = true; //add
mpStartItem.reset(pItem ? (XLineStartItem*)pItem->Clone() : 0);
SelectEndStyle(true);
break;
}
}
mpLBStart->SetNoSelection();
mbStartAvailable = false; //add
mpStartItem.reset(0);
SelectEndStyle(true);
break;
}
case SID_ATTR_LINE_END:
{
mpFTArrow->Enable();
mpLBEnd->Enable();
if(bDisabled)
{
mpFTArrow->Disable();
mpLBEnd->Disable();
}
else
{
mpFTArrow->Enable();
mpLBEnd->Enable();
}
if(eState != SFX_ITEM_DONTCARE)
if(eState >= SFX_ITEM_DEFAULT)
{
const XLineEndItem* pItem = dynamic_cast< const XLineEndItem* >(pState);
if(pItem)
{
mbEndAvailable = true; //add
mpEndItem.reset(pItem ? (XLineEndItem*)pItem->Clone() : 0);
SelectEndStyle(false);
break;
}
}
mpLBEnd->SetNoSelection();
mbEndAvailable = false; //add
mpEndItem.reset(0);
SelectEndStyle(false);
break;
}
case SID_LINEEND_LIST:
@@ -582,18 +597,23 @@ void LinePropertyPanel::NotifyItemUpdate(
}
case SID_ATTR_LINE_JOINT:
{
if(eState == SFX_ITEM_DISABLED)
if(bDisabled)
{
mpLBEdgeStyle->Disable();
}
else
{
mpLBEdgeStyle->Enable();
const XLineJointItem* pItem = dynamic_cast< const XLineJointItem* >(pState);
sal_uInt16 nEntryPos(0);
}
if(eState >= SFX_ITEM_AVAILABLE && pItem)
if(eState >= SFX_ITEM_DEFAULT)
{
const XLineJointItem* pItem = dynamic_cast< const XLineJointItem* >(pState);
if(pItem)
{
sal_uInt16 nEntryPos(0);
switch(pItem->GetValue())
{
case com::sun::star::drawing::LineJoint_MIDDLE:
@@ -621,33 +641,37 @@ void LinePropertyPanel::NotifyItemUpdate(
default:
break;
}
}
if(nEntryPos)
{
mpLBEdgeStyle->SelectEntryPos(nEntryPos - 1);
}
else
{
mpLBEdgeStyle->SetNoSelection();
if(nEntryPos)
{
mpLBEdgeStyle->SelectEntryPos(nEntryPos - 1);
break;
}
}
}
mpLBEdgeStyle->SetNoSelection();
break;
}
case SID_ATTR_LINE_CAP:
{
if(eState == SFX_ITEM_DISABLED)
if(bDisabled)
{
mpLBCapStyle->Disable();
}
else
{
mpLBCapStyle->Enable();
const XLineCapItem* pItem = dynamic_cast< const XLineCapItem* >(pState);
sal_uInt16 nEntryPos(0);
}
if(eState >= SFX_ITEM_AVAILABLE && pItem)
if(eState >= SFX_ITEM_DEFAULT)
{
const XLineCapItem* pItem = dynamic_cast< const XLineCapItem* >(pState);
if(pItem)
{
sal_uInt16 nEntryPos(0);
switch(pItem->GetValue())
{
case com::sun::star::drawing::LineCap_BUTT:
@@ -669,16 +693,15 @@ void LinePropertyPanel::NotifyItemUpdate(
default:
break;
}
if(nEntryPos)
{
mpLBCapStyle->SelectEntryPos(nEntryPos - 1);
break;
}
}
if(nEntryPos)
{
mpLBCapStyle->SelectEntryPos(nEntryPos - 1);
}
else
{
mpLBCapStyle->SetNoSelection();
}
mpLBCapStyle->SetNoSelection();
}
break;
}
@@ -1049,7 +1072,7 @@ void LinePropertyPanel::FillLineStyleList()
void LinePropertyPanel::SelectLineStyle()
{
if( !mbStyleAvailable || !mbDashAvailable )
if( !mpStyleItem.get() || !mpDashItem.get() )
{
mpLBStyle->SetNoSelection();
return;
@@ -1094,13 +1117,12 @@ void LinePropertyPanel::SelectEndStyle(bool bStart)
if(bStart)
{
//<<add
if( !mbStartAvailable )
if( !mpStartItem.get() )
{
mpLBStart->SetNoSelection();
return;
}
//add end>>
if (mpStartItem && mxLineEndList.is())
{
const basegfx::B2DPolyPolygon& rItemPolygon = mpStartItem->GetLineStartValue();
@@ -1115,18 +1137,20 @@ void LinePropertyPanel::SelectEndStyle(bool bStart)
}
}
}
if(!bSelected)
{
mpLBStart->SelectEntryPos( 0 );
}
}
else
{
//<<add
if( !mbEndAvailable )
if( !mpEndItem.get() )
{
mpLBEnd->SetNoSelection();
return;
}
//add end>>
if (mpEndItem && mxLineEndList.is())
{
const basegfx::B2DPolyPolygon& rItemPolygon = mpEndItem->GetLineEndValue();
@@ -1141,8 +1165,11 @@ void LinePropertyPanel::SelectEndStyle(bool bStart)
}
}
}
if(!bSelected)
{
mpLBEnd->SelectEntryPos( 0 );
}
}
}
diff --git a/svx/source/sidebar/line/LinePropertyPanel.hxx b/svx/source/sidebar/line/LinePropertyPanel.hxx
index ba77e5a..b2f97bd1 100644
--- a/svx/source/sidebar/line/LinePropertyPanel.hxx
+++ b/svx/source/sidebar/line/LinePropertyPanel.hxx
@@ -148,12 +148,7 @@ private:
/// bitfield
bool mbColorAvailable : 1;
bool mbStyleAvailable : 1;
bool mbDashAvailable : 1;
bool mbTransAvailable : 1;
bool mbWidthValuable : 1;
bool mbStartAvailable : 1;
bool mbEndAvailable : 1;
void SetupIcons(void);
void Initialize();