1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_extensions.hxx"
26*b1cdbd2cSJim Jagielski #include "selectlabeldialog.hxx"
27*b1cdbd2cSJim Jagielski #ifndef _EXTENSIONS_PROPCTRLR_FORMRESID_HRC_
28*b1cdbd2cSJim Jagielski #include "formresid.hrc"
29*b1cdbd2cSJim Jagielski #endif
30*b1cdbd2cSJim Jagielski #include "formbrowsertools.hxx"
31*b1cdbd2cSJim Jagielski #include "formstrings.hxx"
32*b1cdbd2cSJim Jagielski #include <com/sun/star/form/FormComponentType.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XChild.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexAccess.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XResultSet.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
38*b1cdbd2cSJim Jagielski #include <comphelper/property.hxx>
39*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx>
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski //............................................................................
42*b1cdbd2cSJim Jagielski namespace pcr
43*b1cdbd2cSJim Jagielski {
44*b1cdbd2cSJim Jagielski //............................................................................
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::uno;
47*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::container;
48*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::beans;
49*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::form;
50*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::sdbc;
51*b1cdbd2cSJim Jagielski 	using namespace ::com::sun::star::lang;
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski 	//========================================================================
54*b1cdbd2cSJim Jagielski 	// OSelectLabelDialog
55*b1cdbd2cSJim Jagielski 	//========================================================================
DBG_NAME(OSelectLabelDialog)56*b1cdbd2cSJim Jagielski 	DBG_NAME(OSelectLabelDialog)
57*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
58*b1cdbd2cSJim Jagielski 	OSelectLabelDialog::OSelectLabelDialog( Window* pParent, Reference< XPropertySet >  _xControlModel )
59*b1cdbd2cSJim Jagielski 		:ModalDialog(pParent, PcrRes(RID_DLG_SELECTLABELCONTROL))
60*b1cdbd2cSJim Jagielski 		,m_aMainDesc(this, PcrRes(1))
61*b1cdbd2cSJim Jagielski 		,m_aControlTree(this, PcrRes(1))
62*b1cdbd2cSJim Jagielski 		,m_aNoAssignment(this, PcrRes(1))
63*b1cdbd2cSJim Jagielski 		,m_aSeparator(this, PcrRes(1))
64*b1cdbd2cSJim Jagielski 		,m_aOk(this, PcrRes(1))
65*b1cdbd2cSJim Jagielski 		,m_aCancel(this, PcrRes(1))
66*b1cdbd2cSJim Jagielski 		,m_aModelImages(PcrRes(RID_IL_FORMEXPLORER))
67*b1cdbd2cSJim Jagielski 		,m_xControlModel(_xControlModel)
68*b1cdbd2cSJim Jagielski 		,m_pInitialSelection(NULL)
69*b1cdbd2cSJim Jagielski 		,m_pLastSelected(NULL)
70*b1cdbd2cSJim Jagielski 		,m_bHaveAssignableControl(sal_False)
71*b1cdbd2cSJim Jagielski 	{
72*b1cdbd2cSJim Jagielski 		DBG_CTOR(OSelectLabelDialog,NULL);
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski 		// initialize the TreeListBox
75*b1cdbd2cSJim Jagielski 		m_aControlTree.SetSelectionMode( SINGLE_SELECTION );
76*b1cdbd2cSJim Jagielski 		m_aControlTree.SetDragDropMode( 0 );
77*b1cdbd2cSJim Jagielski 		m_aControlTree.EnableInplaceEditing( sal_False );
78*b1cdbd2cSJim Jagielski 		m_aControlTree.SetStyle(m_aControlTree.GetStyle() | WB_BORDER | WB_HASLINES | WB_HASLINESATROOT | WB_HASBUTTONS | WB_HASBUTTONSATROOT | WB_HSCROLL);
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski 		m_aControlTree.SetNodeBitmaps( m_aModelImages.GetImage( RID_SVXIMG_COLLAPSEDNODE ), m_aModelImages.GetImage( RID_SVXIMG_EXPANDEDNODE ) );
81*b1cdbd2cSJim Jagielski 		m_aControlTree.SetSelectHdl(LINK(this, OSelectLabelDialog, OnEntrySelected));
82*b1cdbd2cSJim Jagielski 		m_aControlTree.SetDeselectHdl(LINK(this, OSelectLabelDialog, OnEntrySelected));
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 		// fill the description
85*b1cdbd2cSJim Jagielski 		UniString sDescription = m_aMainDesc.GetText();
86*b1cdbd2cSJim Jagielski 		sal_Int16 nClassID = FormComponentType::CONTROL;
87*b1cdbd2cSJim Jagielski 		if (::comphelper::hasProperty(PROPERTY_CLASSID, m_xControlModel))
88*b1cdbd2cSJim Jagielski 			nClassID = ::comphelper::getINT16(m_xControlModel->getPropertyValue(PROPERTY_CLASSID));
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 		sDescription.SearchAndReplace(String::CreateFromAscii("$control_class$"), GetUIHeadlineName(nClassID, makeAny(m_xControlModel)));
91*b1cdbd2cSJim Jagielski 		UniString sName = ::comphelper::getString(m_xControlModel->getPropertyValue(PROPERTY_NAME)).getStr();
92*b1cdbd2cSJim Jagielski 		sDescription.SearchAndReplace(String::CreateFromAscii("$control_name$"), sName);
93*b1cdbd2cSJim Jagielski 		m_aMainDesc.SetText(sDescription);
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski 		// search for the root of the form hierarchy
96*b1cdbd2cSJim Jagielski 		Reference< XChild >  xCont(m_xControlModel, UNO_QUERY);
97*b1cdbd2cSJim Jagielski 		Reference< XInterface >  xSearch( xCont.is() ? xCont->getParent() : Reference< XInterface > ());
98*b1cdbd2cSJim Jagielski 		Reference< XResultSet >  xParentAsResultSet(xSearch, UNO_QUERY);
99*b1cdbd2cSJim Jagielski 		while (xParentAsResultSet.is())
100*b1cdbd2cSJim Jagielski 		{
101*b1cdbd2cSJim Jagielski 			xCont = Reference< XChild > (xSearch, UNO_QUERY);
102*b1cdbd2cSJim Jagielski 			xSearch = xCont.is() ? xCont->getParent() : Reference< XInterface > ();
103*b1cdbd2cSJim Jagielski 			xParentAsResultSet = Reference< XResultSet > (xSearch, UNO_QUERY);
104*b1cdbd2cSJim Jagielski 		}
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski 		// and insert all entries below this root into the listbox
107*b1cdbd2cSJim Jagielski 		if (xSearch.is())
108*b1cdbd2cSJim Jagielski 		{
109*b1cdbd2cSJim Jagielski 			// check wich service the allowed components must suppport
110*b1cdbd2cSJim Jagielski 			sal_Int16 nClassId = 0;
111*b1cdbd2cSJim Jagielski 			try { nClassId = ::comphelper::getINT16(m_xControlModel->getPropertyValue(PROPERTY_CLASSID)); } catch(...) { }
112*b1cdbd2cSJim Jagielski 			m_sRequiredService = (FormComponentType::RADIOBUTTON == nClassId) ? SERVICE_COMPONENT_GROUPBOX : SERVICE_COMPONENT_FIXEDTEXT;
113*b1cdbd2cSJim Jagielski 			m_aRequiredControlImage = m_aModelImages.GetImage((FormComponentType::RADIOBUTTON == nClassId) ? RID_SVXIMG_GROUPBOX : RID_SVXIMG_FIXEDTEXT);
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 			// calc the currently set label control (so InsertEntries can calc m_pInitialSelection)
116*b1cdbd2cSJim Jagielski 			Any aCurrentLabelControl( m_xControlModel->getPropertyValue(PROPERTY_CONTROLLABEL) );
117*b1cdbd2cSJim Jagielski 			DBG_ASSERT((aCurrentLabelControl.getValueTypeClass() == TypeClass_INTERFACE) || !aCurrentLabelControl.hasValue(),
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 				"OSelectLabelDialog::OSelectLabelDialog : invalid ControlLabel property !");
120*b1cdbd2cSJim Jagielski 			if (aCurrentLabelControl.hasValue())
121*b1cdbd2cSJim Jagielski 				aCurrentLabelControl >>= m_xInitialLabelControl;
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski 			// insert the root
124*b1cdbd2cSJim Jagielski 			Image aRootImage = m_aModelImages.GetImage(RID_SVXIMG_FORMS);
125*b1cdbd2cSJim Jagielski 			SvLBoxEntry* pRoot = m_aControlTree.InsertEntry(PcrRes(RID_STR_FORMS), aRootImage, aRootImage);
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 			// build the tree
128*b1cdbd2cSJim Jagielski 			m_pInitialSelection = NULL;
129*b1cdbd2cSJim Jagielski 			m_bHaveAssignableControl = sal_False;
130*b1cdbd2cSJim Jagielski 			InsertEntries(xSearch, pRoot);
131*b1cdbd2cSJim Jagielski 			m_aControlTree.Expand(pRoot);
132*b1cdbd2cSJim Jagielski 		}
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 		if (m_pInitialSelection)
135*b1cdbd2cSJim Jagielski 		{
136*b1cdbd2cSJim Jagielski 			m_aControlTree.MakeVisible(m_pInitialSelection, sal_True);
137*b1cdbd2cSJim Jagielski 			m_aControlTree.Select(m_pInitialSelection, sal_True);
138*b1cdbd2cSJim Jagielski 		}
139*b1cdbd2cSJim Jagielski 		else
140*b1cdbd2cSJim Jagielski 		{
141*b1cdbd2cSJim Jagielski 			m_aControlTree.MakeVisible(m_aControlTree.First(), sal_True);
142*b1cdbd2cSJim Jagielski 			if (m_aControlTree.FirstSelected())
143*b1cdbd2cSJim Jagielski 				m_aControlTree.Select(m_aControlTree.FirstSelected(), sal_False);
144*b1cdbd2cSJim Jagielski 			m_aNoAssignment.Check(sal_True);
145*b1cdbd2cSJim Jagielski 		}
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 		if (!m_bHaveAssignableControl)
148*b1cdbd2cSJim Jagielski 		{	// no controls which can be assigned
149*b1cdbd2cSJim Jagielski 			m_aNoAssignment.Check(sal_True);
150*b1cdbd2cSJim Jagielski 			m_aNoAssignment.Enable(sal_False);
151*b1cdbd2cSJim Jagielski 		}
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 		m_aNoAssignment.SetClickHdl(LINK(this, OSelectLabelDialog, OnNoAssignmentClicked));
154*b1cdbd2cSJim Jagielski 		m_aNoAssignment.GetClickHdl().Call(&m_aNoAssignment);
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski 		FreeResource();
157*b1cdbd2cSJim Jagielski 	}
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
~OSelectLabelDialog()160*b1cdbd2cSJim Jagielski 	OSelectLabelDialog::~OSelectLabelDialog()
161*b1cdbd2cSJim Jagielski 	{
162*b1cdbd2cSJim Jagielski 		// delete the entry datas of the listbox entries
163*b1cdbd2cSJim Jagielski 		SvLBoxEntry* pLoop = m_aControlTree.First();
164*b1cdbd2cSJim Jagielski 		while (pLoop)
165*b1cdbd2cSJim Jagielski 		{
166*b1cdbd2cSJim Jagielski 			void* pData = pLoop->GetUserData();
167*b1cdbd2cSJim Jagielski 			if (pData)
168*b1cdbd2cSJim Jagielski 				delete (Reference< XPropertySet > *)pData;
169*b1cdbd2cSJim Jagielski 			pLoop = m_aControlTree.Next(pLoop);
170*b1cdbd2cSJim Jagielski 		}
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 		DBG_DTOR(OSelectLabelDialog,NULL);
173*b1cdbd2cSJim Jagielski 	}
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
InsertEntries(const Reference<XInterface> & _xContainer,SvLBoxEntry * pContainerEntry)176*b1cdbd2cSJim Jagielski 	sal_Int32 OSelectLabelDialog::InsertEntries(const Reference< XInterface > & _xContainer, SvLBoxEntry* pContainerEntry)
177*b1cdbd2cSJim Jagielski 	{
178*b1cdbd2cSJim Jagielski 		Reference< XIndexAccess >  xContainer(_xContainer, UNO_QUERY);
179*b1cdbd2cSJim Jagielski 		if (!xContainer.is())
180*b1cdbd2cSJim Jagielski 			return 0;
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 		sal_Int32 nChildren = 0;
183*b1cdbd2cSJim Jagielski 		UniString sName,sDisplayName;
184*b1cdbd2cSJim Jagielski 		Reference< XPropertySet >  xAsSet;
185*b1cdbd2cSJim Jagielski 		for (sal_Int32 i=0; i<xContainer->getCount(); ++i)
186*b1cdbd2cSJim Jagielski 		{
187*b1cdbd2cSJim Jagielski 			xContainer->getByIndex(i) >>= xAsSet;
188*b1cdbd2cSJim Jagielski 			if (!xAsSet.is())
189*b1cdbd2cSJim Jagielski 			{
190*b1cdbd2cSJim Jagielski 				DBG_WARNING("OSelectLabelDialog::InsertEntries : strange : a form component which isn't a property set !");
191*b1cdbd2cSJim Jagielski 				continue;
192*b1cdbd2cSJim Jagielski 			}
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 			if (!::comphelper::hasProperty(PROPERTY_NAME, xAsSet))
195*b1cdbd2cSJim Jagielski 				// we need at least a name for displaying ...
196*b1cdbd2cSJim Jagielski 				continue;
197*b1cdbd2cSJim Jagielski 			sName = ::comphelper::getString(xAsSet->getPropertyValue(PROPERTY_NAME)).getStr();
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 			// we need to check if the control model supports the required service
200*b1cdbd2cSJim Jagielski 			Reference< XServiceInfo >  xInfo(xAsSet, UNO_QUERY);
201*b1cdbd2cSJim Jagielski 			if (!xInfo.is())
202*b1cdbd2cSJim Jagielski 				continue;
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski 			if (!xInfo->supportsService(m_sRequiredService))
205*b1cdbd2cSJim Jagielski 			{	// perhaps it is a container
206*b1cdbd2cSJim Jagielski 				Reference< XIndexAccess >  xCont(xAsSet, UNO_QUERY);
207*b1cdbd2cSJim Jagielski 				if (xCont.is() && xCont->getCount())
208*b1cdbd2cSJim Jagielski 				{	// yes -> step down
209*b1cdbd2cSJim Jagielski 					Image aFormImage = m_aModelImages.GetImage( RID_SVXIMG_FORM );
210*b1cdbd2cSJim Jagielski 					SvLBoxEntry* pCont = m_aControlTree.InsertEntry(sName, aFormImage, aFormImage, pContainerEntry);
211*b1cdbd2cSJim Jagielski 					sal_Int32 nContChildren = InsertEntries(xCont, pCont);
212*b1cdbd2cSJim Jagielski 					if (nContChildren)
213*b1cdbd2cSJim Jagielski 					{
214*b1cdbd2cSJim Jagielski 						m_aControlTree.Expand(pCont);
215*b1cdbd2cSJim Jagielski 						++nChildren;
216*b1cdbd2cSJim Jagielski 					}
217*b1cdbd2cSJim Jagielski 					else
218*b1cdbd2cSJim Jagielski 					{	// oops, no valid childs -> remove the entry
219*b1cdbd2cSJim Jagielski 						m_aControlTree.ModelIsRemoving(pCont);
220*b1cdbd2cSJim Jagielski 						m_aControlTree.GetModel()->Remove(pCont);
221*b1cdbd2cSJim Jagielski 						m_aControlTree.ModelHasRemoved(pCont);
222*b1cdbd2cSJim Jagielski 					}
223*b1cdbd2cSJim Jagielski 				}
224*b1cdbd2cSJim Jagielski 				continue;
225*b1cdbd2cSJim Jagielski 			}
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 			// get the label
228*b1cdbd2cSJim Jagielski 			if (!::comphelper::hasProperty(PROPERTY_LABEL, xAsSet))
229*b1cdbd2cSJim Jagielski 				continue;
230*b1cdbd2cSJim Jagielski 			sDisplayName = ::comphelper::getString(xAsSet->getPropertyValue(PROPERTY_LABEL)).getStr();
231*b1cdbd2cSJim Jagielski 			sDisplayName += String::CreateFromAscii(" (");
232*b1cdbd2cSJim Jagielski 			sDisplayName += sName;
233*b1cdbd2cSJim Jagielski 			sDisplayName += ')';
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 			// all requirements met -> insert
236*b1cdbd2cSJim Jagielski 			SvLBoxEntry* pCurrent = m_aControlTree.InsertEntry(sDisplayName, m_aRequiredControlImage, m_aRequiredControlImage, pContainerEntry);
237*b1cdbd2cSJim Jagielski 			pCurrent->SetUserData(new Reference< XPropertySet > (xAsSet));
238*b1cdbd2cSJim Jagielski 			++nChildren;
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 			if (m_xInitialLabelControl == xAsSet)
241*b1cdbd2cSJim Jagielski 				m_pInitialSelection = pCurrent;
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski 			m_bHaveAssignableControl = sal_True;
244*b1cdbd2cSJim Jagielski 		}
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 		return nChildren;
247*b1cdbd2cSJim Jagielski 	}
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
IMPL_LINK(OSelectLabelDialog,OnEntrySelected,SvTreeListBox *,pLB)250*b1cdbd2cSJim Jagielski 	IMPL_LINK(OSelectLabelDialog, OnEntrySelected, SvTreeListBox*, pLB)
251*b1cdbd2cSJim Jagielski 	{
252*b1cdbd2cSJim Jagielski 		DBG_ASSERT(pLB == &m_aControlTree, "OSelectLabelDialog::OnEntrySelected : where did this come from ?");
253*b1cdbd2cSJim Jagielski         (void)pLB;
254*b1cdbd2cSJim Jagielski 		SvLBoxEntry* pSelected = m_aControlTree.FirstSelected();
255*b1cdbd2cSJim Jagielski 		void* pData = pSelected ? pSelected->GetUserData() : NULL;
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski 		if (pData)
258*b1cdbd2cSJim Jagielski 			m_xSelectedControl = Reference< XPropertySet > (*(Reference< XPropertySet > *)pData);
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski 		m_aNoAssignment.SetClickHdl(Link());
261*b1cdbd2cSJim Jagielski 		m_aNoAssignment.Check(pData == NULL);
262*b1cdbd2cSJim Jagielski 		m_aNoAssignment.SetClickHdl(LINK(this, OSelectLabelDialog, OnNoAssignmentClicked));
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski 		return 0L;
265*b1cdbd2cSJim Jagielski 	}
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski 	//------------------------------------------------------------------------
IMPL_LINK(OSelectLabelDialog,OnNoAssignmentClicked,Button *,pButton)268*b1cdbd2cSJim Jagielski 	IMPL_LINK(OSelectLabelDialog, OnNoAssignmentClicked, Button*, pButton)
269*b1cdbd2cSJim Jagielski 	{
270*b1cdbd2cSJim Jagielski 		DBG_ASSERT(pButton == &m_aNoAssignment, "OSelectLabelDialog::OnNoAssignmentClicked : where did this come from ?");
271*b1cdbd2cSJim Jagielski         (void)pButton;
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski 		if (m_aNoAssignment.IsChecked())
274*b1cdbd2cSJim Jagielski 			m_pLastSelected = m_aControlTree.FirstSelected();
275*b1cdbd2cSJim Jagielski 		else
276*b1cdbd2cSJim Jagielski 		{
277*b1cdbd2cSJim Jagielski 			DBG_ASSERT(m_bHaveAssignableControl, "OSelectLabelDialog::OnNoAssignmentClicked");
278*b1cdbd2cSJim Jagielski 			// search the first assignable entry
279*b1cdbd2cSJim Jagielski 			SvLBoxEntry* pSearch = m_aControlTree.First();
280*b1cdbd2cSJim Jagielski 			while (pSearch)
281*b1cdbd2cSJim Jagielski 			{
282*b1cdbd2cSJim Jagielski 				if (pSearch->GetUserData())
283*b1cdbd2cSJim Jagielski 					break;
284*b1cdbd2cSJim Jagielski 				pSearch = m_aControlTree.Next(pSearch);
285*b1cdbd2cSJim Jagielski 			}
286*b1cdbd2cSJim Jagielski 			// and select it
287*b1cdbd2cSJim Jagielski 			if (pSearch)
288*b1cdbd2cSJim Jagielski 			{
289*b1cdbd2cSJim Jagielski 				m_aControlTree.Select(pSearch);
290*b1cdbd2cSJim Jagielski 				m_pLastSelected = pSearch;
291*b1cdbd2cSJim Jagielski 			}
292*b1cdbd2cSJim Jagielski 		}
293*b1cdbd2cSJim Jagielski 
294*b1cdbd2cSJim Jagielski 		if (m_pLastSelected)
295*b1cdbd2cSJim Jagielski 		{
296*b1cdbd2cSJim Jagielski 			m_aControlTree.SetSelectHdl(Link());
297*b1cdbd2cSJim Jagielski 			m_aControlTree.SetDeselectHdl(Link());
298*b1cdbd2cSJim Jagielski 			m_aControlTree.Select(m_pLastSelected, !m_aNoAssignment.IsChecked());
299*b1cdbd2cSJim Jagielski 			m_aControlTree.SetSelectHdl(LINK(this, OSelectLabelDialog, OnEntrySelected));
300*b1cdbd2cSJim Jagielski 			m_aControlTree.SetDeselectHdl(LINK(this, OSelectLabelDialog, OnEntrySelected));
301*b1cdbd2cSJim Jagielski 		}
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski 		return 0L;
304*b1cdbd2cSJim Jagielski 	}
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski //............................................................................
307*b1cdbd2cSJim Jagielski }	// namespace pcr
308*b1cdbd2cSJim Jagielski //............................................................................
309*b1cdbd2cSJim Jagielski 
310