xref: /trunk/main/cui/source/dialogs/showcols.cxx (revision 2ee96f1c)
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 = (const sal_Unicode*)sName;
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