00001 // $Id: prpslyrs.cpp 1282 2006-06-09 09:46:49Z alex $ 00002 /* @@tag:xara-cn@@ DO NOT MODIFY THIS LINE 00003 ================================XARAHEADERSTART=========================== 00004 00005 Xara LX, a vector drawing and manipulation program. 00006 Copyright (C) 1993-2006 Xara Group Ltd. 00007 Copyright on certain contributions may be held in joint with their 00008 respective authors. See AUTHORS file for details. 00009 00010 LICENSE TO USE AND MODIFY SOFTWARE 00011 ---------------------------------- 00012 00013 This file is part of Xara LX. 00014 00015 Xara LX is free software; you can redistribute it and/or modify it 00016 under the terms of the GNU General Public License version 2 as published 00017 by the Free Software Foundation. 00018 00019 Xara LX and its component source files are distributed in the hope 00020 that it will be useful, but WITHOUT ANY WARRANTY; without even the 00021 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00022 See the GNU General Public License for more details. 00023 00024 You should have received a copy of the GNU General Public License along 00025 with Xara LX (see the file GPL in the root directory of the 00026 distribution); if not, write to the Free Software Foundation, Inc., 51 00027 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00028 00029 00030 ADDITIONAL RIGHTS 00031 ----------------- 00032 00033 Conditional upon your continuing compliance with the GNU General Public 00034 License described above, Xara Group Ltd grants to you certain additional 00035 rights. 00036 00037 The additional rights are to use, modify, and distribute the software 00038 together with the wxWidgets library, the wxXtra library, and the "CDraw" 00039 library and any other such library that any version of Xara LX relased 00040 by Xara Group Ltd requires in order to compile and execute, including 00041 the static linking of that library to XaraLX. In the case of the 00042 "CDraw" library, you may satisfy obligation under the GNU General Public 00043 License to provide source code by providing a binary copy of the library 00044 concerned and a copy of the license accompanying it. 00045 00046 Nothing in this section restricts any of the rights you have under 00047 the GNU General Public License. 00048 00049 00050 SCOPE OF LICENSE 00051 ---------------- 00052 00053 This license applies to this program (XaraLX) and its constituent source 00054 files only, and does not necessarily apply to other Xara products which may 00055 in part share the same code base, and are subject to their own licensing 00056 terms. 00057 00058 This license does not apply to files in the wxXtra directory, which 00059 are built into a separate library, and are subject to the wxWindows 00060 license contained within that directory in the file "WXXTRA-LICENSE". 00061 00062 This license does not apply to the binary libraries (if any) within 00063 the "libs" directory, which are subject to a separate license contained 00064 within that directory in the file "LIBS-LICENSE". 00065 00066 00067 ARRANGEMENTS FOR CONTRIBUTION OF MODIFICATIONS 00068 ---------------------------------------------- 00069 00070 Subject to the terms of the GNU Public License (see above), you are 00071 free to do whatever you like with your modifications. However, you may 00072 (at your option) wish contribute them to Xara's source tree. You can 00073 find details of how to do this at: 00074 http://www.xaraxtreme.org/developers/ 00075 00076 Prior to contributing your modifications, you will need to complete our 00077 contributor agreement. This can be found at: 00078 http://www.xaraxtreme.org/developers/contribute/ 00079 00080 Please note that Xara will not accept modifications which modify any of 00081 the text between the start and end of this header (marked 00082 XARAHEADERSTART and XARAHEADEREND). 00083 00084 00085 MARKS 00086 ----- 00087 00088 Xara, Xara LX, Xara X, Xara X/Xtreme, Xara Xtreme, the Xtreme and Xara 00089 designs are registered or unregistered trademarks, design-marks, and/or 00090 service marks of Xara Group Ltd. All rights in these marks are reserved. 00091 00092 00093 Xara Group Ltd, Gaddesden Place, Hemel Hempstead, HP2 6EX, UK. 00094 http://www.xara.com/ 00095 00096 =================================XARAHEADEREND============================ 00097 */ 00098 00099 // Implementation of the Layer properties tab of the layer properties dialog box 00100 00101 /* 00102 00103 */ 00104 00105 #include "camtypes.h" 00106 00107 // WEBSTER - markn 15/1/97 00108 // Don't need this tab in Webster 00109 //#ifndef WEBSTER 00110 00111 #include "layer.h" 00112 #include "layerprp.h" 00113 //#include "lyrprop.h" // dialog/gadget ids 00114 //#include "nev.h" // error messages 00115 #include "prpslyrs.h" 00116 //#include "document.h" - in camtypes.h [AUTOMATICALLY REMOVED] 00117 #include "sglayer.h" 00118 #include "sprdmsg.h" 00119 //#include "ink.h" - in camtypes.h [AUTOMATICALLY REMOVED] 00120 00121 00122 CC_IMPLEMENT_DYNAMIC(LayerPropertiesTab, LayerPropertyTabs) 00123 00124 // This is not compulsory, but you may as well put it in so that the correct version 00125 // of your file can be registered in the .exe 00126 DECLARE_SOURCE("$Revision: 1282 $"); 00127 00128 /******************************************************************************************** 00129 00130 > LayerPropertiesTab::LayerPropertiesTab() 00131 00132 00133 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> 00134 Created: 28/09/95 00135 Inputs: - 00136 Outputs: - 00137 Returns: - 00138 Purpose: LayerPropertiesTab constructor. Creates a non-undoable operation 00139 Errors: - 00140 SeeAlso: LayerPropertyTabsDlg; LayerPropertiesTab; 00141 00142 ********************************************************************************************/ 00143 00144 LayerPropertiesTab::LayerPropertiesTab() 00145 { 00146 // does nothing at present 00147 } 00148 00149 /******************************************************************************************** 00150 00151 > LayerPropertiesTab::~LayerPropertiesTab() 00152 00153 00154 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> 00155 Created: 28/09/95 00156 Inputs: - 00157 Outputs: - 00158 Returns: - 00159 Purpose: LayerPropertiesTab destructor 00160 Errors: - 00161 SeeAlso: LayerPropertyTabsDlg; LayerPropertyTabs; 00162 00163 ********************************************************************************************/ 00164 00165 LayerPropertiesTab::~LayerPropertiesTab() 00166 { 00167 } 00168 00169 /******************************************************************************************** 00170 00171 > BOOL LayerPropertiesTab::Init() 00172 00173 00174 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> 00175 Created: 28/09/95 00176 Inputs: - 00177 Outputs: - 00178 Returns: True if initialised ok, False if failed. 00179 Purpose: LayerPropertiesTab initialisation routine 00180 Errors: - 00181 SeeAlso: LayerPropertyTabsDlg::Init; LayerPropertyTabs::Init; 00182 00183 ********************************************************************************************/ 00184 00185 BOOL LayerPropertiesTab::Init() 00186 { 00187 return TRUE; 00188 } 00189 00190 /****************************************************************************************** 00191 00192 > CDlgResID LayerPropertiesTab::GetPageID()() 00193 00194 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> 00195 Created: 28/09/95 00196 Inputs: - 00197 Outputs: - 00198 Returns: The dialog ID of this tab section. 00199 Purpose: Allows the options dialog code to determine the dialog ID of this section. 00200 Errors: - 00201 SeeAlso: - 00202 00203 ******************************************************************************************/ 00204 00205 CDlgResID LayerPropertiesTab::GetPageID() 00206 { 00207 return _R(IDD_TAB_LAYER_PROPERTIES); 00208 } 00209 00210 /****************************************************************************************** 00211 00212 > BOOL LayerPropertiesTab::IsPropertyRequired() 00213 00214 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> 00215 Created: 28/09/95 00216 Returns: Returns True if this tab is a program option. 00217 Purpose: Allows the layer propertiesto determine if this tab is required. 00218 00219 ******************************************************************************************/ 00220 00221 BOOL LayerPropertiesTab::IsPropertyRequired() 00222 { 00223 return TRUE; // This tab is required 00224 } 00225 00226 00227 /****************************************************************************************** 00228 00229 > BOOL LayerPropertiesTab::CommitSection() 00230 00231 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> & Markn 00232 Created: 28/09/95 00233 Inputs: - 00234 Outputs: - 00235 Returns: True if values in dialog box ok, False otherwise. 00236 Purpose: Takes the values in this tab of the layer properties dialog box. 00237 Called when ok or apply now is pressed on the main dialog box. 00238 Errors: - 00239 SeeAlso: LayerPropertiesTab::InitSection() 00240 00241 ******************************************************************************************/ 00242 00243 BOOL LayerPropertiesTab::CommitSection() 00244 { 00245 TRACEUSER( "Neville", _T("LayerPropertiesTab::CommitSection\n")); 00246 ERROR2IF(pPropertiesDlg == NULL,FALSE,"LayerPropertiesTab::CommitSection called with no dialog pointer"); 00247 00248 BOOL ok = pPropertiesDlg->TalkToPage(GetPageID()); 00249 if (!ok) 00250 return TRUE; // Talk to page failed to return now 00251 00252 Layer* pLayer = GetActiveLayer(); 00253 00254 // Only do the op if we have a layer with a different set of properties 00255 if (pLayer != NULL && HavePropertiesChanged(pLayer)) 00256 { 00257 // Initialise the param structure 00258 OpLayerGalParam Param(LAYER_CHANGE, pSpread); 00259 Param.pLayer = pLayer; 00260 00261 Param.VisibleState = pPropertiesDlg->GetBoolGadgetSelected(_R(IDC_LAYERTAB_VISIBLE)); 00262 Param.LockedState = !pPropertiesDlg->GetBoolGadgetSelected(_R(IDC_LAYERTAB_EDITABLE)); 00263 Param.NewName = pPropertiesDlg->GetStringGadgetValue(_R(IDC_LAYERTAB_NAME),NULL); 00264 00265 // Invoke the operation 00266 OpDescriptor* pOpDesc = OpDescriptor::FindOpDescriptor(OPTOKEN_LAYERGALCHANGE); 00267 if (pOpDesc != NULL) 00268 pOpDesc->Invoke((OpParam*)&Param); 00269 else 00270 { 00271 ERROR3("Couldn't find OPTOKEN_LAYERGALCHANGE op descriptor"); 00272 } 00273 } 00274 00275 return TRUE; 00276 } 00277 00278 /******************************************************************************************** 00279 00280 > BOOL LayerPropertiesTab::GreySection() 00281 00282 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> & Markn 00283 Created: 28/09/95 00284 Inputs: - 00285 Outputs: - 00286 Returns: - 00287 Purpose: Called when the user has closed all documents 00288 Errors: - 00289 SeeAlso: LayerPropertiesTab::UngreySection; 00290 00291 ********************************************************************************************/ 00292 00293 BOOL LayerPropertiesTab::GreySection() 00294 { 00295 TRACEUSER( "Neville", _T("GreySection in LayerPropertiesTab section\n")); 00296 ERROR2IF(pPropertiesDlg == NULL,FALSE,"LayerPropertiesTab::GreySection called with no dialog pointer"); 00297 00298 BOOL ok = pPropertiesDlg->TalkToPage(GetPageID()); 00299 if (!ok) 00300 return TRUE; // Talk to page failed to return now 00301 00302 // Only update if we are not already grey 00303 if (GreyStatus == TRUE) 00304 return TRUE; 00305 00306 // Call our central greying/ungreying function 00307 ok = ChangeControlStatus(FALSE); 00308 00309 GreyStatus = TRUE; 00310 00311 return ok; 00312 } 00313 00314 /******************************************************************************************** 00315 00316 > BOOL LayerPropertiesTab::UngreySection() 00317 00318 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> & Markn 00319 Created: 28/09/95 00320 Inputs: - 00321 Outputs: - 00322 Returns: - 00323 Purpose: Called when the user has selected a new document 00324 Errors: - 00325 SeeAlso: LayerPropertiesTab::UngreySection; 00326 00327 ********************************************************************************************/ 00328 00329 BOOL LayerPropertiesTab::UngreySection() 00330 { 00331 TRACEUSER( "Neville", _T("UngreySection in LayerPropertiesTab section\n")); 00332 ERROR2IF(pPropertiesDlg == NULL,FALSE,"LayerPropertiesTab::UngreySection called with no dialog pointer"); 00333 00334 BOOL ok = pPropertiesDlg->TalkToPage(GetPageID()); // The LayerPropertiesTab identifier 00335 if (!ok) 00336 return TRUE; // Talk to page failed to return now 00337 00338 // Only update if we are not already ungrey 00339 if (GreyStatus == FALSE) 00340 return TRUE; 00341 00342 // Call our central greying/ungreying function 00343 ok = ChangeControlStatus(TRUE); 00344 00345 GreyStatus = FALSE; 00346 00347 return ok; 00348 } 00349 00350 /******************************************************************************************** 00351 00352 > BOOL LayerPropertiesTab::ChangeControlStatus(const BOOL Status) 00353 00354 Author: Mark_Neves (Xara Group Ltd) <camelotdev@xara.com> 00355 Created: 28/09/95 00356 Inputs: - 00357 Outputs: - 00358 Returns: - 00359 Purpose: Called to grey/ungrey all controls on this tab. 00360 Errors: - 00361 SeeAlso: LayerPropertiesTab::GreySection; LayerPropertiesTab::UngreySection; 00362 00363 ********************************************************************************************/ 00364 00365 BOOL LayerPropertiesTab::ChangeControlStatus(const BOOL Status) 00366 { 00367 BOOL Enable; 00368 00369 Layer* pLayer = GetActiveLayer(); 00370 Enable = (pLayer != NULL) && Status; 00371 00372 BOOL EnableNonFrameItem = Enable; 00373 //It shouldn't be in Webster builds anyway but we will take it out jus tin case 00374 #ifndef WEBSTER 00375 // Check if we are on a frame layer or not 00376 // If we are then we must disable some items 00377 // At present, these are the visible and editable flags as these are not user controlled. 00378 // BOOL FrameLayer = FALSE; 00379 if (pLayer != NULL && pLayer->IsFrame()) 00380 EnableNonFrameItem = FALSE; 00381 #endif 00382 00383 pPropertiesDlg->EnableGadget(_R(IDC_GUIDETAB_GUIDELINELIST),Enable); 00384 pPropertiesDlg->EnableGadget(_R(IDC_LAYERTAB_NAME), Enable); 00385 pPropertiesDlg->EnableGadget(_R(IDC_LAYERTAB_VISIBLE), EnableNonFrameItem); 00386 pPropertiesDlg->EnableGadget(_R(IDC_LAYERTAB_EDITABLE), EnableNonFrameItem); 00387 00388 return TRUE; 00389 } 00390 00391 /******************************************************************************************** 00392 00393 > BOOL LayerPropertiesTab::UpdateSection() 00394 00395 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> & Markn 00396 Created: 28/09/95 00397 Returns: - 00398 Purpose: Called when we have switched to a new document and need to update all the 00399 controls on this tab. Should only init the tab if the page is present. 00400 The document name allows the info field on the tab to be filled in correctly. 00401 Errors: - 00402 SeeAlso: LayerPropertiesTab::GreySection; LayerPropertiesTab::UngreySection; LayerPropertiesTab::InitSection; 00403 00404 ********************************************************************************************/ 00405 00406 BOOL LayerPropertiesTab::UpdateSection() 00407 { 00408 TRACEUSER( "Neville", _T("LayerPropertiesTab::UpdateSection\n")); 00409 ERROR2IF(pPropertiesDlg == NULL,FALSE,"LayerPropertiesTab::UpdateSection called with no dialog pointer"); 00410 00411 BOOL ok = pPropertiesDlg->TalkToPage(GetPageID()); 00412 if (!ok) 00413 return TRUE; // page not present 00414 00415 ShowDetails(); 00416 00417 // We are happy with what happened 00418 return TRUE; 00419 } 00420 00421 /******************************************************************************************** 00422 00423 > BOOL LayerPropertiesTab::ShowDetails() 00424 00425 Author: Mark_Neves (Xara Group Ltd) <camelotdev@xara.com> 00426 Created: 3/10/95 00427 Inputs: - 00428 Outputs: - 00429 Returns: - 00430 Purpose: Shows the details of the associated layer in this tab 00431 Errors: - 00432 SeeAlso: LayerPropertyTabsDlg; LayerPropertiesTab; 00433 00434 ********************************************************************************************/ 00435 00436 BOOL LayerPropertiesTab::ShowDetails() 00437 { 00438 String_256 LayerID; 00439 00440 Layer* pLayer = GetActiveLayer(); 00441 if (pLayer != NULL) 00442 { 00443 LayerID = pLayer->GetLayerID(); 00444 00445 // pPropertiesDlg->SetBoolGadgetSelected(_R(IDC_LAYERTAB_VISIBLE),pLayer->IsVisible()); 00446 // pPropertiesDlg->SetBoolGadgetSelected(_R(IDC_LAYERTAB_EDITABLE),!pLayer->IsLocked()); 00447 pPropertiesDlg->SetBoolGadgetSelected(_R(IDC_LAYERTAB_VISIBLE),pLayer->GetVisibleFlagState()); 00448 pPropertiesDlg->SetBoolGadgetSelected(_R(IDC_LAYERTAB_EDITABLE),!pLayer->GetLockedFlagState()); 00449 } 00450 00451 pPropertiesDlg->SetStringGadgetValue(_R(IDC_LAYERTAB_NAME), LayerID); 00452 00453 ChangeControlStatus(!GreyStatus); 00454 00455 return TRUE; 00456 } 00457 00458 /******************************************************************************************** 00459 00460 > BOOL LayerPropertiesTab::UpdateLayerSection() 00461 00462 Author: Mark_Neves (Xara Group Ltd) <camelotdev@xara.com> 00463 Created: 4/10/95 00464 Inputs: - 00465 Outputs: - 00466 Returns: TRUE if ok, FALSE otherwise 00467 Purpose: Called when the layer-related section of the tab should be updated. 00468 Errors: - 00469 SeeAlso: LayerPropertyTabsDlg; LayerPropertyTabs; 00470 00471 ********************************************************************************************/ 00472 00473 BOOL LayerPropertiesTab::UpdateLayerSection() 00474 { 00475 ERROR2IF(pPropertiesDlg == NULL,FALSE,"LayerPropertiesTab::UpdateLayerSection() called with no dialog pointer"); 00476 return (pPropertiesDlg->TalkToPage(GetPageID()) && ShowDetails()); 00477 } 00478 00479 /******************************************************************************************** 00480 00481 > BOOL LayerPropertiesTab::HandleMsg(DialogMsg* Msg) 00482 00483 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> & Markn 00484 Created: 28/09/95 00485 Inputs: - 00486 Outputs: - 00487 Returns: - 00488 Purpose: Handles all the messages for this layer property tab 00489 Errors: - 00490 SeeAlso: LayerPropertyTabsDlg; LayerPropertiesTab; 00491 00492 ********************************************************************************************/ 00493 00494 BOOL LayerPropertiesTab::HandleMsg(DialogMsg* Msg) 00495 { 00496 TRACEUSER( "Neville", _T("LayerPropertiesTab::HandleMsg\n")); 00497 ERROR2IF(Msg == NULL,FALSE,"LayerPropertiesTab::Message null message received"); 00498 ERROR2IF(pPropertiesDlg == NULL,FALSE,"LayerPropertiesTab::HandleMsg called with no dialog pointer"); 00499 00500 BOOL ok = pPropertiesDlg->TalkToPage(GetPageID()); 00501 if (!ok) 00502 return TRUE; // no page present = handled message 00503 00504 switch(Msg->DlgMsg) 00505 { 00506 case DIM_CREATE: // Initialise controls 00507 GreyStatus = FALSE; // we are ungreyed by default 00508 ok = InitSection(); 00509 if (!ok) 00510 InformError(); 00511 break; 00512 case DIM_LFT_BN_CLICKED: 00513 { 00514 UpdateApplyState(); 00515 //switch (Msg->GadgetID) 00516 //{ 00517 //} 00518 } 00519 break; 00520 00521 case DIM_SELECTION_CHANGED: 00522 case DIM_TEXT_CHANGED: 00523 UpdateApplyState(); 00524 break; 00525 00526 default: 00527 break; 00528 } 00529 return TRUE; 00530 } 00531 00532 /****************************************************************************************** 00533 00534 > BOOL LayerPropertiesTab::UpdateApplyState() 00535 00536 Author: Mark_Neves (Xara Group Ltd) <camelotdev@xara.com> 00537 Created: 9/10/95 00538 Inputs: - 00539 Outputs: - 00540 Returns: TRUE if ok, FALSE otherwise 00541 Purpose: This changes the 'Apply now' state based on the settings of the active layer 00542 and the settings in this tab. 00543 If the settings are the same, the 'Apply state' is FALSE, else it are TRUE 00544 Errors: - 00545 SeeAlso: LayerPropertiesTab::HandleMsg() 00546 00547 ******************************************************************************************/ 00548 00549 BOOL LayerPropertiesTab::UpdateApplyState() 00550 { 00551 BOOL OldApplyNowState = LayerPropertiesTab::GetApplyNowState(); 00552 00553 Layer* pLayer = GetActiveLayer(); 00554 00555 if (pLayer != NULL) 00556 LayerPropertiesTab::SetApplyNowState(HavePropertiesChanged(pLayer)); 00557 00558 BOOL NewApplyNowState = LayerPropertiesTab::GetApplyNowState(); 00559 00560 if (OldApplyNowState != NewApplyNowState) 00561 { 00562 if (NewApplyNowState) 00563 LayerPropertiesTab::UngreyApplyNow(); 00564 else 00565 LayerPropertiesTab::GreyApplyNow(); 00566 } 00567 00568 return TRUE; 00569 } 00570 00571 /****************************************************************************************** 00572 00573 > BOOL LayerPropertiesTab::HavePropertiesChanged(Layer* pLayer) 00574 00575 Author: Mark_Neves (Xara Group Ltd) <camelotdev@xara.com> 00576 Created: 9/10/95 00577 Inputs: pLayer = ptr to a layer 00578 Outputs: - 00579 Returns: TRUE if settings in the dlg are different to the given layer's settings, else FALSE 00580 Purpose: Central place for comparing settings in the dlg against the settings of a layer 00581 Errors: - 00582 SeeAlso: LayerPropertiesTab::CommitSection() 00583 00584 ******************************************************************************************/ 00585 00586 BOOL LayerPropertiesTab::HavePropertiesChanged(Layer* pLayer) 00587 { 00588 BOOL VisibleState= pPropertiesDlg->GetBoolGadgetSelected(_R(IDC_LAYERTAB_VISIBLE)); 00589 BOOL LockedState = !pPropertiesDlg->GetBoolGadgetSelected(_R(IDC_LAYERTAB_EDITABLE)); 00590 String_256 Name = pPropertiesDlg->GetStringGadgetValue(_R(IDC_LAYERTAB_NAME),NULL); 00591 00592 // BOOL CurVisible = pLayer->IsVisible(); 00593 // BOOL CurLocked = pLayer->IsLocked(); 00594 BOOL CurVisible = pLayer->GetVisibleFlagState(); 00595 BOOL CurLocked = pLayer->GetLockedFlagState(); 00596 String_256 CurName = pLayer->GetLayerID(); 00597 00598 return ((VisibleState != CurVisible) || 00599 (LockedState != CurLocked) || 00600 (Name != CurName)); 00601 } 00602 00603 /****************************************************************************************** 00604 00605 > BOOL LayerPropertiesTab::InitSection() 00606 00607 Author: Neville_Humphrys (Xara Group Ltd) <camelotdev@xara.com> & Markn 00608 Created: 28/09/95 00609 Inputs: - 00610 Outputs: - 00611 Returns: TRUE if successful, else FALSE 00612 Purpose: Sets initial values for this tab on the layer properties dialog box. 00613 Errors: - 00614 SeeAlso: LayerPropertyTabsDlg; LayerPropertiesTab; 00615 00616 ******************************************************************************************/ 00617 00618 BOOL LayerPropertiesTab::InitSection() 00619 { 00620 TRACEUSER( "Neville", _T("LayerPropertiesTab::InitSection\n")); 00621 ERROR2IF(pPropertiesDlg == NULL,FALSE,"LayerPropertiesTab::InitSection called with no dialog pointer"); 00622 00623 ShowDetails(); 00624 00625 return TRUE; 00626 } 00627 00628 //#endif // WEBSTER