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