/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_automation.hxx"

#if OSL_DEBUG_LEVEL > 1
#include <vcl/svapp.hxx>
#include "editwin.hxx"


class ImpWorkWindow : public WorkWindow
{
public:
	MultiLineEdit	m_aInhalt;
	ImpWorkWindow( WorkWindow *pParent, const UniString &rName, WinBits );
	~ImpWorkWindow();
	void Resize();
};

ImpWorkWindow::ImpWorkWindow( WorkWindow *pParent, const String &rName, WinBits iWstyle )
: WorkWindow( pParent , WB_SIZEMOVE )
, m_aInhalt( this, iWstyle )
{
	m_aInhalt.Show();
	SetText(rName);
	SetPosSizePixel( Point( 1,40 ), Size(500,150) );
	Resize();
}

ImpWorkWindow::~ImpWorkWindow()
{
	Hide();
}

void ImpWorkWindow::Resize()
{
	m_aInhalt.SetPosSizePixel( Point(), GetOutputSizePixel() );
}

sal_Bool EditWindow::Close()
{
	if ( pImpWorkWindow )
	{
		delete pImpWorkWindow;
		pImpWorkWindow = NULL;
	}
	return sal_True;
}

void EditWindow::Show()
{
	if ( Check() )
		pImpWorkWindow->Show();
	else
		bShowWin = sal_True;
}

void EditWindow::Hide()
{
	if ( Check() )
		pImpWorkWindow->Hide();
	else
		bShowWin = sal_False;
}

EditWindow::EditWindow( WorkWindow *pParent, const String &rName, WinBits iWstyle )
: pImpWorkWindow(NULL)
, pMemParent(pParent)
, aMemName(rName)
, iMemWstyle(iWstyle)
, nTextLen(0)
, bQuiet(sal_False)
{
}

EditWindow::~EditWindow()
{
	Close();
}

sal_Bool EditWindow::Check()
{
	if ( ! pImpWorkWindow && Application::IsInExecute() )
	{
		pImpWorkWindow = new ImpWorkWindow( pMemParent, aMemName, iMemWstyle  );
		pImpWorkWindow->m_aInhalt.SetText( aMemPreWinText );
		nTextLen = aMemPreWinText.Len();
		aMemPreWinText.Erase();
		if ( bShowWin )
			pImpWorkWindow->Show();
		return sal_True;
	}
	return pImpWorkWindow != NULL;
}

void EditWindow::Clear()
{
	if ( Check() )
	{
		pImpWorkWindow->m_aInhalt.SetText( String() );
		nTextLen = 0;
	}
	aMemPreWinText.Erase();
}

void EditWindow::AddText( const sal_Char* rNew )
{
	AddText( UniString::CreateFromAscii( rNew ) );
}

void EditWindow::AddText( const String &rNew )
{
	if ( bQuiet ) return;

	String aText = rNew;
	aText.ConvertLineEnd();

	if ( Check() )
	{
		if ( nTextLen > 5000 )
		{
			pImpWorkWindow->m_aInhalt.SetText( pImpWorkWindow->m_aInhalt.GetText().Erase(0,1000) );
			nTextLen = pImpWorkWindow->m_aInhalt.GetText().Len();		// Absolut, um Fehler sonstwo auszubügeln
		}


		pImpWorkWindow->m_aInhalt.SetSelection( Selection( SELECTION_MAX, SELECTION_MAX ) );
		pImpWorkWindow->m_aInhalt.ReplaceSelected( aText );
		nTextLen = nTextLen + aText.Len();
		pImpWorkWindow->m_aInhalt.SetSelection( Selection( SELECTION_MAX, SELECTION_MAX ) );
	}
	else
	{
		aMemPreWinText += aText;
	}
}

#endif

