summaryrefslogtreecommitdiff
path: root/reportdesign/source/ui/dlg/Condition.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'reportdesign/source/ui/dlg/Condition.cxx')
-rw-r--r--reportdesign/source/ui/dlg/Condition.cxx174
1 files changed, 144 insertions, 30 deletions
diff --git a/reportdesign/source/ui/dlg/Condition.cxx b/reportdesign/source/ui/dlg/Condition.cxx
index 4632306d7b5e..3a216d81ea84 100644
--- a/reportdesign/source/ui/dlg/Condition.cxx
+++ b/reportdesign/source/ui/dlg/Condition.cxx
@@ -84,34 +84,144 @@ IMPL_LINK( ConditionField, OnFormula, Button*, _pClickedButton, void )
}
}
-ConditionColorWrapper::ConditionColorWrapper(Condition* pControl)
- : mxControl(pControl)
- , mnSlotId(0)
+// TO-DO, this is yet another color selector, can it be replaced with SvxColorWindor/SvxColorToolBoxControl ?
+#ifndef WB_NO_DIRECTSELECT
+#define WB_NO_DIRECTSELECT ((WinBits)0x04000000)
+#endif
+
+#define PALETTE_X 10
+#define PALETTE_Y 10
+#define PALETTE_SIZE (PALETTE_X * PALETTE_Y)
+class OColorPopup : public FloatingWindow
{
+ DECL_LINK( SelectHdl, ValueSet*, void );
+ VclPtr<Condition> m_pCondition;
+ sal_uInt16 m_nSlotId;
+public:
+ OColorPopup(vcl::Window* _pParent,Condition* _pCondition);
+ virtual ~OColorPopup() override;
+ virtual void dispose() override;
+ VclPtr<ValueSet> m_aColorSet;
+
+ virtual void KeyInput( const KeyEvent& rKEvt ) override;
+ virtual void Resize() override;
+
+ void StartSelection();
+ void SetSlotId(sal_uInt16 _nSlotId);
+};
+
+OColorPopup::OColorPopup(vcl::Window* _pParent,Condition* _pCondition)
+:FloatingWindow(_pParent, WinBits( WB_BORDER | WB_STDFLOATWIN | WB_3DLOOK|WB_DIALOGCONTROL ))
+,m_pCondition(_pCondition)
+,m_nSlotId(0)
+,m_aColorSet( VclPtr<ValueSet>::Create(this, WinBits( WB_ITEMBORDER | WB_NAMEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT)) )
+{
+ m_aColorSet->SetHelpId( HID_RPT_POPUP_COLOR_CTRL );
+ SetHelpId( HID_RPT_POPUP_COLOR );
+ const Size aSize12( 13, 13 );
+ short i = 0;
+ XColorListRef pColorList( XColorList::CreateStdColorList() );
+ long nCount = pColorList->Count();
+ Color aColWhite( COL_WHITE );
+ OUString aStrWhite( ModuleRes(STR_COLOR_WHITE) );
+
+ if ( nCount > PALETTE_SIZE )
+ // Show scrollbar if more than PALLETTE_SIZE colors are available
+ m_aColorSet->SetStyle( m_aColorSet->GetStyle() | WB_VSCROLL );
+
+ for ( i = 0; i < nCount; i++ )
+ {
+ const XColorEntry* pEntry = pColorList->GetColor(i);
+ m_aColorSet->InsertItem( i+1, pEntry->GetColor(), pEntry->GetName() );
+ }
+
+ while ( i < PALETTE_SIZE )
+ {
+ // fill empty elements if less then PALLETTE_SIZE colors are available
+ m_aColorSet->InsertItem( i+1, aColWhite, aStrWhite );
+ i++;
+ }
+
+ m_aColorSet->SetSelectHdl( LINK( this, OColorPopup, SelectHdl ) );
+ m_aColorSet->SetColCount( PALETTE_X );
+ m_aColorSet->SetLineCount( PALETTE_Y );
+ Size aSize = m_aColorSet->CalcWindowSizePixel( aSize12 );
+ aSize.Width() += 4;
+ aSize.Height() += 4;
+ SetOutputSizePixel( aSize );
+ m_aColorSet->Show();
+}
+
+OColorPopup::~OColorPopup()
+{
+ disposeOnce();
+}
+
+void OColorPopup::dispose()
+{
+ disposeBuilder();
+ m_aColorSet.disposeAndClear();
+ m_pCondition.clear();
+ FloatingWindow::dispose();
+}
+
+void OColorPopup::KeyInput( const KeyEvent& rKEvt )
+{
+ m_aColorSet->KeyInput(rKEvt);
}
-void ConditionColorWrapper::dispose()
+void OColorPopup::Resize()
{
- mxControl.clear();
+ Size aSize = GetOutputSizePixel();
+ aSize.Width() -= 4;
+ aSize.Height() -= 4;
+ m_aColorSet->SetPosSizePixel( Point(2,2), aSize );
}
-void ConditionColorWrapper::operator()(const OUString& /*rCommand*/, const NamedColor& rNamedColor)
+void OColorPopup::StartSelection()
{
- mxControl->ApplyCommand(mnSlotId, rNamedColor.first);
+ m_aColorSet->StartSelection();
}
+void OColorPopup::SetSlotId(sal_uInt16 _nSlotId)
+{
+ m_nSlotId = _nSlotId;
+ if ( SID_ATTR_CHAR_COLOR_BACKGROUND == _nSlotId || SID_BACKGROUND_COLOR == _nSlotId )
+ {
+ m_aColorSet->SetStyle( m_aColorSet->GetStyle() | WB_NONEFIELD );
+ m_aColorSet->SetText( OUString(ModuleRes( STR_TRANSPARENT )) );
+ }
+}
+
+IMPL_LINK_NOARG(OColorPopup, SelectHdl, ValueSet*, void)
+{
+ sal_uInt16 nItemId = m_aColorSet->GetSelectItemId();
+ Color aColor( nItemId == 0 ? Color( COL_TRANSPARENT ) : m_aColorSet->GetItemColor( nItemId ) );
+
+ /* #i33380# Moved the following line above the Dispatch() calls.
+ This instance may be deleted in the meantime (i.e. when a dialog is opened
+ while in Dispatch()), accessing members will crash in this case. */
+ m_aColorSet->SetNoSelection();
+
+ if ( IsInPopupMode() )
+ EndPopupMode();
+
+ m_pCondition->ApplyCommand( m_nSlotId, aColor );
+}
+
+
// = Condition
Condition::Condition( vcl::Window* _pParent, IConditionalFormatAction& _rAction, ::rptui::OReportController& _rController )
- : VclHBox(_pParent)
- , m_aColorWrapper(this)
- , m_rController(_rController)
- , m_rAction(_rAction)
- , m_pBtnUpdaterFontColor(nullptr)
- , m_pBtnUpdaterBackgroundColor(nullptr)
- , m_nCondIndex(0)
- , m_bInDestruction(false)
+ :VclHBox(_pParent)
+ ,m_rController( _rController )
+ ,m_rAction( _rAction )
+ ,m_pColorFloat(nullptr)
+ ,m_pBtnUpdaterFontColor(nullptr)
+ ,m_pBtnUpdaterBackgroundColor(nullptr)
+ ,m_nCondIndex( 0 )
+ ,m_bInDestruction( false )
{
m_pUIBuilder = new VclBuilder(this, getUIRootDir(), "modules/dbreport/ui/conditionwin.ui");
@@ -218,27 +328,31 @@ void Condition::dispose()
m_pAddCondition.clear();
m_pRemoveCondition.clear();
m_pColorFloat.disposeAndClear();
- m_aColorWrapper.dispose();
disposeBuilder();
VclHBox::dispose();
}
-IMPL_LINK(Condition, DropdownClick, ToolBox*, pToolBox, void)
+IMPL_LINK_NOARG( Condition, DropdownClick, ToolBox*, void )
{
sal_uInt16 nId( m_pActions->GetCurItemId() );
- m_pColorFloat.disposeAndClear();
- sal_uInt16 nSlotId(mapToolbarItemToSlotId(nId));
- m_aColorWrapper.SetSlotId(nSlotId);
- m_pColorFloat = VclPtr<SvxColorWindow>::Create(
- OUString() /*m_aCommandURL*/,
- m_aPaletteManager,
- m_aBorderColorStatus,
- nSlotId,
- nullptr,
- pToolBox,
- m_aColorWrapper);
-
- m_pColorFloat->StartPopupMode(pToolBox, FloatWinPopupFlags::GrabFocus);
+ if ( !m_pColorFloat )
+ m_pColorFloat = VclPtr<OColorPopup>::Create(m_pActions,this);
+
+ sal_uInt16 nTextId = 0;
+ if (nId == m_nFontColorId)
+ {
+ nTextId = STR_CHARCOLOR;
+ }
+ else if (nId == m_nBackgroundColorId)
+ {
+ nTextId = STR_CHARBACKGROUND;
+ }
+ if ( nTextId )
+ m_pColorFloat->SetText(OUString(ModuleRes(nTextId)));
+ m_pColorFloat->SetSlotId(mapToolbarItemToSlotId(nId));
+ m_pColorFloat->SetPosPixel(m_pActions->GetItemPopupPosition(nId,m_pColorFloat->GetSizePixel()));
+ m_pColorFloat->StartPopupMode(m_pActions);
+ m_pColorFloat->StartSelection();
}
IMPL_LINK_NOARG( Condition, OnFormatAction, ToolBox*, void )