/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/



#ifndef _BRKDLG_HXX
#define _BRKDLG_HXX

#include <svheader.hxx>
#include <bastypes.hxx>
#include <vcl/dialog.hxx>

#ifndef _SV_BUTTON_HXX //autogen
#include <vcl/button.hxx>
#endif
#include <vcl/field.hxx>
#include <vcl/fixed.hxx>

class BreakPointDialog : public ModalDialog
{
private:
	ComboBox		aComboBox;
	OKButton		aOKButton;
	CancelButton	aCancelButton;
	PushButton		aNewButton;
	PushButton 		aDelButton;
//	PushButton 		aShowButton;
	CheckBox 		aCheckBox;
	FixedText 		aBrkText;
	FixedText 		aPassText;
	NumericField 	aNumericField;

    BreakPointList & m_rOriginalBreakPointList;
    BreakPointList m_aModifiedBreakPointList;

protected:
	void 			CheckButtons();
	DECL_LINK( CheckBoxHdl, CheckBox * );
	DECL_LINK( ComboBoxHighlightHdl, ComboBox * );
	DECL_LINK( EditModifyHdl, Edit * );
	DECL_LINK( ButtonHdl, Button * );
	void			UpdateFields( BreakPoint* pBrk );
	BreakPoint*		GetSelectedBreakPoint();


public:
			BreakPointDialog( Window* pParent, BreakPointList& rBrkList );

	void	SetCurrentBreakPoint( BreakPoint* pBrk );
};

#endif	// _BRKDLG_HXX
