1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_cui.hxx" 26 27 #include "showcols.hxx" 28 #include "fmsearch.hrc" 29 30 #include <tools/shl.hxx> 31 #include <dialmgr.hxx> 32 #include <vcl/msgbox.hxx> 33 #include <com/sun/star/beans/XPropertySet.hpp> 34 #include <comphelper/extract.hxx> 35 #include <comphelper/types.hxx> 36 37 #define CUIFM_PROP_HIDDEN rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Hidden" ) ) 38 #define CUIFM_PROP_LABEL rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Label" ) ) 39 40 //========================================================================== 41 // FmShowColsDialog 42 //========================================================================== 43 DBG_NAME(FmShowColsDialog) 44 //-------------------------------------------------------------------------- 45 FmShowColsDialog::FmShowColsDialog(Window* pParent) 46 :ModalDialog(pParent, CUI_RES(RID_SVX_DLG_SHOWGRIDCOLUMNS)) 47 ,m_aList(this, CUI_RES(1)) 48 ,m_aLabel(this, CUI_RES(1)) 49 ,m_aOK(this, CUI_RES(1)) 50 ,m_aCancel(this, CUI_RES(1)) 51 { 52 DBG_CTOR(FmShowColsDialog,NULL); 53 m_aList.EnableMultiSelection(sal_True); 54 m_aOK.SetClickHdl( LINK( this, FmShowColsDialog, OnClickedOk ) ); 55 56 FreeResource(); 57 } 58 59 //-------------------------------------------------------------------------- 60 FmShowColsDialog::~FmShowColsDialog() 61 { 62 DBG_DTOR(FmShowColsDialog,NULL); 63 } 64 65 //-------------------------------------------------------------------------- 66 IMPL_LINK( FmShowColsDialog, OnClickedOk, Button*, EMPTYARG ) 67 { 68 DBG_ASSERT(m_xColumns.is(), "FmShowColsDialog::OnClickedOk : you should call SetColumns before executing the dialog !"); 69 if (m_xColumns.is()) 70 { 71 ::com::sun::star::uno::Any aCol; 72 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xCol; 73 for (sal_uInt16 i=0; i<m_aList.GetSelectEntryCount(); ++i) 74 { 75 m_xColumns->getByIndex(sal::static_int_cast<sal_Int32>(reinterpret_cast<sal_uIntPtr>(m_aList.GetEntryData(m_aList.GetSelectEntryPos(i))))) >>= xCol; 76 if (xCol.is()) 77 { 78 try 79 { 80 //CHINA001 xCol->setPropertyValue(::svxform::FM_PROP_HIDDEN, ::cppu::bool2any(sal_False)); 81 xCol->setPropertyValue(CUIFM_PROP_HIDDEN, ::cppu::bool2any(sal_False)); 82 } 83 catch(...) 84 { 85 DBG_ERROR("FmShowColsDialog::OnClickedOk Exception occured!"); 86 } 87 } 88 } 89 } 90 91 EndDialog(RET_OK); 92 return 0L; 93 } 94 95 //-------------------------------------------------------------------------- 96 void FmShowColsDialog::SetColumns(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer>& xCols) 97 { 98 DBG_ASSERT(xCols.is(), "FmShowColsDialog::SetColumns : invalid columns !"); 99 if (!xCols.is()) 100 return; 101 m_xColumns = xCols.get(); 102 103 m_aList.Clear(); 104 105 ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> xCurCol; 106 String sCurName; 107 for (sal_uInt16 i=0; i<xCols->getCount(); ++i) 108 { 109 sCurName.Erase(); 110 ::cppu::extractInterface(xCurCol, xCols->getByIndex(i)); 111 sal_Bool bIsHidden = sal_False; 112 try 113 { 114 //CHINA001 ::com::sun::star::uno::Any aHidden = xCurCol->getPropertyValue(::svxform::FM_PROP_HIDDEN); 115 ::com::sun::star::uno::Any aHidden = xCurCol->getPropertyValue(CUIFM_PROP_HIDDEN); 116 bIsHidden = ::comphelper::getBOOL(aHidden); 117 118 ::rtl::OUString sName; 119 //CHINA001 xCurCol->getPropertyValue(::svxform::FM_PROP_LABEL) >>= sName; 120 121 xCurCol->getPropertyValue(CUIFM_PROP_LABEL) >>= sName; 122 sCurName = sName.getStr(); 123 } 124 catch(...) 125 { 126 DBG_ERROR("FmShowColsDialog::SetColumns Exception occured!"); 127 } 128 129 // if the col is hidden, put it into the list 130 if (bIsHidden) 131 m_aList.SetEntryData( m_aList.InsertEntry(sCurName), reinterpret_cast<void*>((sal_Int64)i) ); 132 } 133 } 134 135