blob: 684a823488414b2353665884bbec26c0814ea7af [file] [log] [blame]
/**************************************************************
*
* 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_svtools.hxx"
#ifndef GCC
#endif
//------------------------------------------------------------------
//#include "Svitems.hxx"
#include "property.hxx"
/*
#include "property.hrc"
#include "Scresid.hxx"
*/
#define FRAME_OFFSET 4
SvXPropertyControl::SvXPropertyControl( Window* pParent, WinBits nWinStyle)
: Control(pParent,nWinStyle)
{
}
SvXPropertyControl::SvXPropertyControl( Window* pParent, const ResId& rResId )
: Control(pParent,rResId )
{
}
//------------------------------------------------------------------
SvXPropertyEdit::SvXPropertyEdit( Window* pParent, WinBits nWinStyle)
: SvXPropertyControl(pParent,nWinStyle),
aEdit(this,WB_BORDER | WB_TABSTOP)
{
pListener=NULL;
aEdit.SetModifyHdl(
LINK( this, SvXPropertyEdit, ModifiedHdl ));
aEdit.SetGetFocusHdl(
LINK( this, SvXPropertyEdit, GetFocusHdl));
aEdit.SetLoseFocusHdl(
LINK( this, SvXPropertyEdit, LoseFocusHdl));
aEdit.Show();
}
SvXPropertyEdit::SvXPropertyEdit( Window* pParent, const ResId& rResId)
: SvXPropertyControl(pParent,rResId),
aEdit(this,WB_BORDER | WB_TABSTOP)
{
pListener=NULL;
aEdit.SetModifyHdl(
LINK( this, SvXPropertyEdit, ModifiedHdl ));
aEdit.SetGetFocusHdl(
LINK( this, SvXPropertyEdit, GetFocusHdl));
aEdit.SetLoseFocusHdl(
LINK( this, SvXPropertyEdit, LoseFocusHdl));
Size aSize=GetSizePixel();
SetCtrSize(aSize);
aEdit.Show();
}
void SvXPropertyEdit::SetSvXPropertyCtrListener(SvXPropertyCtrListener* pCtrListener)
{
pListener=pCtrListener;
}
SvXPropertyCtrListener* SvXPropertyEdit::GetSvXPropertyCtrListener()
{
return pListener;
}
void SvXPropertyEdit::SetCtrSize(const Size& rSize)
{
SetSizePixel(rSize);
Size aSize=GetOutputSizePixel();
Point aPos(0,0);
aEdit.SetPosPixel(aPos);
aEdit.SetSizePixel(aSize);
}
void SvXPropertyEdit::SetLocked(sal_Bool bLocked)
{
if(bLocked)
Disable();
else
Enable();
}
void SvXPropertyEdit::SetProperty(const String &rString)
{
aEdit.SetText(rString);
}
String SvXPropertyEdit::GetProperty() const
{
return aEdit.GetText();
}
sal_Bool SvXPropertyEdit::HasList()
{
return sal_False;
};
void SvXPropertyEdit::ClearList()
{
return;
}
void SvXPropertyEdit::InsertEntry( const String&,sal_uInt16 )
{
return;
}
void SvXPropertyEdit::SetMyName(const String &rString)
{
aName=rString;
}
String SvXPropertyEdit::GetMyName()const
{
return aName;
}
void SvXPropertyEdit::SetMyData(void* pDat)
{
pData=pDat;
}
void* SvXPropertyEdit::GetMyData()
{
return pData;
}
IMPL_LINK( SvXPropertyEdit, ModifiedHdl, Edit*, EMPTYARG )
{
if(pListener!=NULL)
pListener->Modified(this);
return 0;
}
IMPL_LINK( SvXPropertyEdit, GetFocusHdl, Edit*, EMPTYARG )
{
if(pListener!=NULL)
pListener->GetFocus(this);
return 0;
}
IMPL_LINK( SvXPropertyEdit, LoseFocusHdl, Edit*, EMPTYARG )
{
if(pListener!=NULL)
pListener->LoseFocus(this);
return 0;
}
//------------------------------------------------------------------
SvXPropertyListBox::SvXPropertyListBox( Window* pParent, WinBits nWinStyle)
: SvXPropertyControl(pParent,nWinStyle),
aListBox(this,WB_BORDER | WB_DROPDOWN | WB_TABSTOP)
{
pListener=NULL;
aListBox.SetSelectHdl(
LINK( this, SvXPropertyListBox, ModifiedHdl ));
aListBox.SetGetFocusHdl(
LINK( this, SvXPropertyListBox, GetFocusHdl));
aListBox.SetLoseFocusHdl(
LINK( this, SvXPropertyListBox, LoseFocusHdl));
aListBox.Show();
}
SvXPropertyListBox::SvXPropertyListBox( Window* pParent, const ResId& rResId)
: SvXPropertyControl(pParent,rResId),
aListBox(this,WB_BORDER | WB_DROPDOWN | WB_TABSTOP)
{
pListener=NULL;
aListBox.SetSelectHdl(
LINK( this, SvXPropertyListBox, ModifiedHdl ));
aListBox.SetGetFocusHdl(
LINK( this, SvXPropertyListBox, GetFocusHdl));
aListBox.SetLoseFocusHdl(
LINK( this, SvXPropertyListBox, LoseFocusHdl));
Size aSize=GetSizePixel();
SetCtrSize(aSize);
aListBox.Show();
}
void SvXPropertyListBox::SetSvXPropertyCtrListener(SvXPropertyCtrListener* pCtrListener)
{
pListener=pCtrListener;
}
SvXPropertyCtrListener* SvXPropertyListBox::GetSvXPropertyCtrListener()
{
return pListener;
}
void SvXPropertyListBox::SetCtrSize(const Size& rSize)
{
SetSizePixel(rSize);
Size aSize=GetOutputSizePixel();
Point aPos(0,0);
aListBox.SetPosPixel(aPos);
aListBox.SetSizePixel(aSize);
}
void SvXPropertyListBox::SetLocked(sal_Bool bLocked)
{
if(bLocked)
Disable();
else
Enable();
}
void SvXPropertyListBox::SetProperty(const String &rString)
{
aListBox.SelectEntry(rString);
}
String SvXPropertyListBox::GetProperty()const
{
return aListBox.GetSelectEntry();
}
sal_Bool SvXPropertyListBox::HasList()
{
return sal_True;
}
void SvXPropertyListBox::ClearList()
{
aListBox.Clear();
}
void SvXPropertyListBox::InsertEntry( const String& rString,sal_uInt16 nPos)
{
aListBox.InsertEntry(rString,nPos);
}
void SvXPropertyListBox::SetMyName(const String &rString)
{
aName=rString;
}
String SvXPropertyListBox::GetMyName()const
{
return aName;
}
void SvXPropertyListBox::SetMyData(void* pDat)
{
pData=pDat;
}
void* SvXPropertyListBox::GetMyData()
{
return pData;
}
IMPL_LINK( SvXPropertyListBox, ModifiedHdl, ListBox*, EMPTYARG )
{
if(pListener!=NULL)
pListener->Modified(this);
return 0;
}
IMPL_LINK( SvXPropertyListBox, GetFocusHdl, ListBox*, EMPTYARG )
{
if(pListener!=NULL)
pListener->GetFocus(this);
return 0;
}
IMPL_LINK( SvXPropertyListBox, LoseFocusHdl, ListBox*, EMPTYARG )
{
if(pListener!=NULL)
pListener->LoseFocus(this);
return 0;
}
//------------------------------------------------------------------
SvXPropertyComboBox::SvXPropertyComboBox( Window* pParent, WinBits nWinStyle)
: SvXPropertyControl(pParent,nWinStyle),
aComboBox(this,WB_BORDER | WB_DROPDOWN | WB_TABSTOP)
{
pListener=NULL;
aComboBox.SetModifyHdl(
LINK( this, SvXPropertyComboBox, ModifiedHdl ));
aComboBox.SetGetFocusHdl(
LINK( this, SvXPropertyComboBox, GetFocusHdl));
aComboBox.SetLoseFocusHdl(
LINK( this, SvXPropertyComboBox, LoseFocusHdl));
aComboBox.Show();
}
SvXPropertyComboBox::SvXPropertyComboBox( Window* pParent, const ResId& rResId)
: SvXPropertyControl(pParent,rResId),
aComboBox(this,WB_BORDER | WB_DROPDOWN | WB_TABSTOP)
{
pListener=NULL;
aComboBox.SetModifyHdl(
LINK( this, SvXPropertyComboBox, ModifiedHdl ));
aComboBox.SetGetFocusHdl(
LINK( this, SvXPropertyComboBox, GetFocusHdl));
aComboBox.SetLoseFocusHdl(
LINK( this, SvXPropertyComboBox, LoseFocusHdl));
Size aSize=GetSizePixel();
SetCtrSize(aSize);
aComboBox.Show();
}
void SvXPropertyComboBox::SetLocked(sal_Bool bLocked)
{
if(bLocked)
Disable();
else
Enable();
}
void SvXPropertyComboBox::SetSvXPropertyCtrListener(SvXPropertyCtrListener* pCtrListener)
{
pListener=pCtrListener;
}
SvXPropertyCtrListener* SvXPropertyComboBox::GetSvXPropertyCtrListener()
{
return pListener;
}
void SvXPropertyComboBox::SetCtrSize(const Size& rSize)
{
SetSizePixel(rSize);
Size aSize=GetOutputSizePixel();
Point aPos(0,0);
aComboBox.SetPosPixel(aPos);
aComboBox.SetSizePixel(aSize);
}
void SvXPropertyComboBox::SetProperty(const String &rString)
{
aComboBox.SetText(rString);
}
String SvXPropertyComboBox::GetProperty() const
{
return aComboBox.GetText();
}
sal_Bool SvXPropertyComboBox::HasList()
{
return sal_True;
}
void SvXPropertyComboBox::ClearList()
{
aComboBox.Clear();
}
void SvXPropertyComboBox::InsertEntry( const String& rString,sal_uInt16 nPos)
{
aComboBox.InsertEntry(rString,nPos);
}
void SvXPropertyComboBox::SetMyName(const String &rString)
{
aName=rString;
}
String SvXPropertyComboBox::GetMyName()const
{
return aName;
}
void SvXPropertyComboBox::SetMyData(void* pDat)
{
pData=pDat;
}
void* SvXPropertyComboBox::GetMyData()
{
return pData;
}
IMPL_LINK( SvXPropertyComboBox, ModifiedHdl, ComboBox*, EMPTYARG )
{
if(pListener!=NULL)
pListener->Modified(this);
return 0;
}
IMPL_LINK( SvXPropertyComboBox, GetFocusHdl, ComboBox*, EMPTYARG )
{
if(pListener!=NULL)
pListener->GetFocus(this);
return 0;
}
IMPL_LINK( SvXPropertyComboBox, LoseFocusHdl, ComboBox*, EMPTYARG )
{
if(pListener!=NULL)
pListener->LoseFocus(this);
return 0;
}
//------------------------------------------------------------------
SvPropertyLine::SvPropertyLine( Window* pParent,WinBits nWinStyle)
: Control(pParent,nWinStyle),
aName(this,WB_BORDER),
pSvXPropertyControl(NULL),
aXButton(this,WB_BORDER),
bIsLocked(sal_False),
bIsHyperlink(sal_False)
{
bNeedsRepaint = sal_True;
bHasXButton = sal_False;
aXButton.SetText( XubString( RTL_CONSTASCII_USTRINGPARAM( "..." ) ) );
aName.Show();
aXButton.Show();
eKindOfCtr = KOC_UNDEFINED;
Wallpaper aWall = GetBackground();
aWall.SetColor( Color( COL_TRANSPARENT ) );
SetBackground( aWall );
}
SvPropertyLine::SvPropertyLine( Window* pParent,const ResId& rResId )
: Control(pParent,rResId),
aName (this,WB_BORDER),
pSvXPropertyControl(NULL),
aXButton (this,WB_BORDER),
bIsLocked(sal_False),
bIsHyperlink(sal_False)
{
bNeedsRepaint = sal_True;
bHasXButton = sal_False;
eKindOfCtr = KOC_UNDEFINED;
aXButton.SetText( XubString( RTL_CONSTASCII_USTRINGPARAM( "..." ) ) );
aName.Show();
aXButton.Show();
Wallpaper aWall = GetBackground();
aWall.SetColor( Color( COL_TRANSPARENT ) );
SetBackground( aWall );
Resize();
}
void SvPropertyLine::SetSvXPropertyControl(SvXPropertyControl* pXControl)
{
pSvXPropertyControl=pXControl;
pSvXPropertyControl->Show();
Resize();
}
SvXPropertyControl* SvPropertyLine::GetSvXPropertyControl()
{
return pSvXPropertyControl;
}
void SvPropertyLine::Resize()
{
Size aSize=GetOutputSizePixel();
Size a2Size=aSize;
aSize.Width()=nNameWidth;
a2Size.Width()-=nNameWidth;
Point aPos(0,0);
aName.SetPosPixel(aPos);
aName.SetSizePixel(aSize);
sal_uInt16 nXButtonWidth=0;
if(bHasXButton)
{
nXButtonWidth=(sal_uInt16)aSize.Height();
}
a2Size.Width()=a2Size.Width()-nXButtonWidth;
aPos.X()+=aSize.Width();
if(pSvXPropertyControl!=NULL)
{
pSvXPropertyControl->SetPosPixel(aPos);
pSvXPropertyControl->SetCtrSize(a2Size);
}
if(bHasXButton)
{
aPos.X()=GetOutputSizePixel().Width()
-nXButtonWidth;
aSize.Width()=nXButtonWidth;
aXButton .SetSizePixel(aSize);
aXButton .SetPosPixel(aPos);
}
}
void SvPropertyLine::SetNeedsRepaint(sal_Bool bFlag)
{
bNeedsRepaint=bFlag;
}
sal_Bool SvPropertyLine::NeedsRepaint()
{
return bNeedsRepaint;
}
void SvPropertyLine::SetName(const String& rString )
{
aName.SetText(rString);
aName.Invalidate();
}
String SvPropertyLine::GetName() const
{
return aName.GetText();
}
void SvPropertyLine::SetKindOfControl(eKindOfControl eKOC)
{
eKindOfCtr=eKOC;
}
eKindOfControl SvPropertyLine::GetKindOfControl()
{
return eKindOfCtr;
}
void SvPropertyLine::ShowXButton()
{
bHasXButton=sal_True;
aXButton.Show();
Resize();
}
void SvPropertyLine::HideXButton()
{
bHasXButton=sal_False;
aXButton.Hide();
Resize();
}
sal_Bool SvPropertyLine::IsVisibleXButton()
{
return bHasXButton;
}
void SvPropertyLine::ShowAsHyperLink(sal_Bool nFlag)
{
bIsHyperlink=nFlag;
if(nFlag)
{
Font aFont=GetFont();
aFont.SetUnderline(UNDERLINE_SINGLE);
aFont.SetColor(Color(COL_BLUE));
aName.SetFont(aFont);
}
else
{
Font aFont=GetFont();
aName.SetFont(aFont);
}
}
sal_Bool SvPropertyLine::IsShownAsHyperlink()
{
return bIsHyperlink;
}
void SvPropertyLine::Locked(sal_Bool nFlag)
{
bIsLocked=nFlag;
if(pSvXPropertyControl!=NULL)
pSvXPropertyControl->SetLocked(nFlag);
}
sal_Bool SvPropertyLine::IsLineLocked()
{
return bIsLocked;
}
void SvPropertyLine::SetNameWidth(sal_uInt16 nWidth)
{
nNameWidth=nWidth;
Resize();
}
void SvPropertyLine::SetClickHdl(const Link& rLink)
{
aXButton.SetClickHdl(rLink );
}
//----------------------------------------------------------
SvXPropEvListener::SvXPropEvListener()
{
pTheActiveControl=NULL;
}
SvXPropEvListener::~SvXPropEvListener()
{
}
void SvXPropEvListener::Modified (SvXPropertyControl *pSvXPCtr)
{
pTheActiveControl=pSvXPCtr;
aModifyLink.Call(this);
}
void SvXPropEvListener::GetFocus (SvXPropertyControl *pSvXPCtr)
{
pTheActiveControl=pSvXPCtr;
aGetFocusLink.Call(this);
}
void SvXPropEvListener::LoseFocus (SvXPropertyControl *pSvXPCtr)
{
pTheActiveControl=pSvXPCtr;
aLoseFocusLink.Call(this);
}
void SvXPropEvListener::KeyInput (SvXPropertyControl *pSvXPCtr,const KeyCode& theKeyCode)
{
pTheActiveControl=pSvXPCtr;
aKeyCode=theKeyCode;
aKeyInputLink.Call(this);
}
SvXPropertyControl * SvXPropEvListener::GetPropertyControl()
{
return pTheActiveControl;
}
KeyCode SvXPropEvListener::GetKeyCode() const
{
return aKeyCode;
}
//------------------------------------------------------------------
SvListBoxForProperties::SvListBoxForProperties( Window* pParent, WinBits nWinStyle)
: Control(pParent,nWinStyle),
aPlayGround(this,WB_DIALOGCONTROL),
aVScroll(this,WB_VSCROLL|WB_REPEAT|WB_DRAG),
pPropDataControl(NULL)
{
aListener.SetModifyHdl (LINK( this, SvListBoxForProperties, ModifyHdl));
aListener.SetGetFocusHdl (LINK( this, SvListBoxForProperties, GetFocusHdl));
aListener.SetLoseFocusHdl(LINK( this, SvListBoxForProperties,LoseFocusHdl));
aListener.SetKeyInputHdl (LINK( this, SvListBoxForProperties, KeyInputHdl));
nYOffset=0;
nTheNameSize=0;
ListBox aListBox(this,WB_DROPDOWN);
aListBox.SetPosSizePixel(Point(0,0),Size(100,100));
nRowHeight=(sal_uInt16)aListBox.GetSizePixel().Height();
Wallpaper aWall = aPlayGround.GetBackground();
aWall.SetColor( Color( COL_TRANSPARENT ) );
aPlayGround.SetBackground( aWall );
aPlayGround.Show();
aVScroll.Hide();
aVScroll.SetScrollHdl(
LINK( this, SvListBoxForProperties, ScrollHdl ));
}
SvListBoxForProperties::SvListBoxForProperties( Window* pParent, const ResId& rResId )
: Control(pParent,rResId),
aPlayGround(this,0),
aVScroll(this,WB_VSCROLL|WB_REPEAT|WB_DRAG),
pPropDataControl(NULL)
{
nTheNameSize=0;
nYOffset=0;
ListBox aListBox(this,WB_DROPDOWN);
aListBox.SetPosSizePixel(Point(0,0),Size(100,100));
nRowHeight=(sal_uInt16)aListBox.GetSizePixel().Height();
Wallpaper aWall = aPlayGround.GetBackground();
aWall.SetColor( Color( COL_TRANSPARENT ) );
aPlayGround.SetBackground( aWall );
aPlayGround.Show();
aVScroll.Hide();
aVScroll.SetScrollHdl( LINK( this, SvListBoxForProperties, ScrollHdl ) );
UpdateVScroll();
Resize();
}
SvListBoxForProperties::~SvListBoxForProperties()
{
Clear();
}
void SvListBoxForProperties::Clear()
{
for(sal_uInt16 i=0;i<PLineArray.Count();i++)
{
SvPropertyLine* pPropLine=PLineArray[i];
switch(pPropLine->GetKindOfControl())
{
case KOC_LISTBOX:
case KOC_COMBOBOX:
case KOC_EDIT: delete pPropLine->GetSvXPropertyControl();
break;
default:
break;
}
delete pPropLine;
}
PLineArray.Remove(0,PLineArray.Count());
}
void SvListBoxForProperties::Resize()
{
Size aSize=GetOutputSizePixel();
Size a2Size=aSize;
Size aVScrollSize;
if(aVScroll.IsVisible())
{
Point aPos(0,0);
aVScrollSize=aVScroll.GetSizePixel();
aVScrollSize.Height()=aSize.Height();
a2Size.Width()-=aVScrollSize.Width();
aPos.X()=a2Size.Width();
aVScroll.SetPosPixel(aPos);
aVScroll.SetSizePixel(aVScrollSize);
}
aPlayGround.SetPosPixel(Point(0,0));
aPlayGround.SetSizePixel(a2Size);
UpdatePosNSize();
}
void SvListBoxForProperties::SetController( SvPropertyDataControl *pPDC)
{
pPropDataControl=pPDC;
}
sal_uInt16 SvListBoxForProperties::CalcVisibleLines()
{
Size aSize=aPlayGround.GetOutputSizePixel();
sal_uInt16 nResult=0;
if(nRowHeight!=0)
nResult=(sal_uInt16) aSize.Height()/nRowHeight;
return nResult;
}
void SvListBoxForProperties::UpdateVScroll()
{
sal_uInt16 nLines=CalcVisibleLines();
aVScroll.SetPageSize(nLines-1);
aVScroll.SetVisibleSize(nLines-1);
aVScroll.SetRange(Range(0,PLineArray.Count()-1));
if(PLineArray.Count()<=nLines)
{
aVScroll.Hide();
}
else
{
sal_Bool bFlag=aVScroll.IsVisible();
aVScroll.Show();
if(!bFlag)Resize();
}
}
void SvListBoxForProperties::UpdatePosNSize()
{
Point aPos(0,nYOffset);
for(sal_uInt16 i=0; i<PLineArray.Count();i++)
{
if((PLineArray[i])->NeedsRepaint())
{
(PLineArray[i])->SetPosPixel(aPos);
Size aSize=aPlayGround.GetOutputSizePixel();
aSize.Height()=nRowHeight;
(PLineArray[i])->SetSizePixel(aSize);
(PLineArray[i])->SetNameWidth(nTheNameSize+2*FRAME_OFFSET);
(PLineArray[i])->Invalidate();
(PLineArray[i])->Update();
(PLineArray[i])->Show();
(PLineArray[i])->SetNeedsRepaint(sal_False);
}
else
{
if((PLineArray[i])->IsVisible())
{
Size aSize=aPlayGround.GetOutputSizePixel();
aSize.Height()=nRowHeight;
(PLineArray[i])->SetSizePixel(aSize);
(PLineArray[i])->SetNameWidth(nTheNameSize+2*FRAME_OFFSET);
(PLineArray[i])->Invalidate();
}
}
aPos.Y()+=nRowHeight;
}
aPlayGround.Invalidate();
aPlayGround.Update();
}
void SvListBoxForProperties::UpdatePlayGround()
{
Point aPos(0,0);
long nThumbPos=aVScroll.GetThumbPos();
long nLines=aVScroll.GetPageSize();
long nDelta=aVScroll.GetDelta();
sal_uInt16 nStart,nEnd;
Size aSize=aPlayGround.GetOutputSizePixel();
Point aPEnd;
aPEnd.X()=aSize.Width();
if(nDelta>0)
{
nStart=(sal_uInt16)(nThumbPos+nLines+1-nDelta);
nEnd=(sal_uInt16)(nThumbPos+nLines);
aPos.Y()=(nLines+1-nDelta)*nRowHeight;
}
else
{
nStart=(sal_uInt16)nThumbPos;
nEnd=(sal_uInt16)(nThumbPos-nDelta);
aPEnd.Y()=(nThumbPos-nDelta)*nRowHeight;;
}
aSize.Height()=nRowHeight;
nDelta=-nDelta*nRowHeight;
aPlayGround.Scroll(0,nDelta,SCROLL_CHILDREN);
for(sal_uInt16 i=nStart; i<=nEnd;i++)
{
(PLineArray[i])->SetPosSizePixel(aPos,aSize);
(PLineArray[i])->SetNameWidth(nTheNameSize+2*FRAME_OFFSET);
(PLineArray[i])->Show();
aPos.Y()+=nRowHeight;
}
aPlayGround.Update();
}
void SvListBoxForProperties::UpdateAll()
{
UpdatePosNSize();
UpdatePlayGround();
//UpdateVScroll();
}
void SvListBoxForProperties::DisableUpdate()
{
bUpdate=sal_False;
}
void SvListBoxForProperties::EnableUpdate()
{
bUpdate=sal_True;
UpdateAll();
}
void SvListBoxForProperties::SetPropertyValue( const String & rEntryName, const String & rValue )
{
sal_uInt16 i, iEnd = PLineArray.Count();
for( i = 0 ; i < iEnd ; i++ )
{
SvPropertyLine* pPropLine = PLineArray[ i ];
SvXPropertyControl* pSvXPCtr=pPropLine->GetSvXPropertyControl();
if( pSvXPCtr && pSvXPCtr->GetMyName() == rEntryName )
{
pSvXPCtr->SetProperty( rValue );
}
}
}
sal_uInt16 SvListBoxForProperties::AppendEntry( const SvPropertyData& aPropData)
{
return InsertEntry(aPropData);
}
sal_uInt16 SvListBoxForProperties::InsertEntry( const SvPropertyData& aPropData, sal_uInt16 nPos)
{
sal_uInt16 nInsPos=nPos;
SvPropertyLine* pPropLine=new SvPropertyLine(&aPlayGround,WB_TABSTOP | WB_DIALOGCONTROL);
if(nPos==LISTBOX_APPEND)
{
nInsPos=PLineArray.Count();
PLineArray.Insert(pPropLine,nInsPos);
}
else
{
PLineArray.Insert(pPropLine,nPos);
}
pPropLine->SetNameWidth(nTheNameSize);
UpdateVScroll();
UpdatePosNSize();
ChangeEntry(aPropData,nInsPos);
return nInsPos;
}
void SvListBoxForProperties::ChangeEntry( const SvPropertyData& aPropData, sal_uInt16 nPos)
{
if(nPos<PLineArray.Count())
{
SvPropertyLine* pPropLine=PLineArray[nPos];
switch(pPropLine->GetKindOfControl())
{
case KOC_LISTBOX:
case KOC_COMBOBOX:
case KOC_EDIT: delete pPropLine->GetSvXPropertyControl();
break;
default:
break;
}
switch(aPropData.eKind)
{
case KOC_LISTBOX:
pPropLine->SetSvXPropertyControl(
new SvXPropertyComboBox(pPropLine,WB_TABSTOP));
pPropLine->SetKindOfControl(aPropData.eKind);
break;
case KOC_COMBOBOX:
pPropLine->SetSvXPropertyControl(
new SvXPropertyComboBox(pPropLine,WB_TABSTOP));
pPropLine->SetKindOfControl(aPropData.eKind);
break;
case KOC_EDIT:
pPropLine->SetSvXPropertyControl(
new SvXPropertyEdit(pPropLine,WB_TABSTOP));
pPropLine->SetKindOfControl(aPropData.eKind);
break;
case KOC_USERDEFINED:
pPropLine->SetSvXPropertyControl(aPropData.pControl);
aPropData.pControl->SetParent(pPropLine);
pPropLine->SetKindOfControl(aPropData.eKind);
break;
default:
pPropLine->SetSvXPropertyControl(NULL);
pPropLine->SetKindOfControl(KOC_UNDEFINED);
break;
}
SvXPropertyControl* pSvXPCtr=pPropLine->GetSvXPropertyControl();
if(pSvXPCtr!=NULL)
{
pSvXPCtr->SetSvXPropertyCtrListener(&aListener);
pSvXPCtr->SetProperty(aPropData.aValue);
pSvXPCtr->SetMyData(aPropData.pDataPtr);
pSvXPCtr->SetMyName(aPropData.aName);
if(pSvXPCtr->HasList())
{
for(sal_uInt16 i=0;i<aPropData.theValues.Count();i++)
{
pSvXPCtr->InsertEntry(*(aPropData.theValues[i]));
}
}
}
pPropLine->SetName(aPropData.aName);
sal_uInt16 nTextWidth=(sal_uInt16)aPlayGround.GetTextWidth(aPropData.aName);
if ( nTheNameSize < nTextWidth )
nTheNameSize = nTextWidth;
if ( aPropData.bHasVisibleXButton )
{
pPropLine->SetClickHdl(LINK( this, SvListBoxForProperties, ClickHdl ) );
pPropLine->ShowXButton();
}
else
pPropLine->HideXButton();
pPropLine->Locked(aPropData.bIsLocked);
pPropLine->ShowAsHyperLink(aPropData.bIsHyperLink);
pPropLine->SetData(aPropData.pDataPtr);
}
}
sal_uInt16 SvListBoxForProperties::GetFirstVisibleEntry()
{
return 0;
}
void SvListBoxForProperties::SetFirstVisibleEntry(sal_uInt16)
{
return;
}
void SvListBoxForProperties::SetSelectedEntry(sal_uInt16)
{
return;
}
sal_uInt16 SvListBoxForProperties::GetSelectedEntry()
{
return 0;
}
IMPL_LINK( SvListBoxForProperties, ScrollHdl, ScrollBar*, pSB )
{
if(pSB!=NULL)
{
long nDelta=aVScroll.GetDelta();
nYOffset=-aVScroll.GetThumbPos()*nRowHeight;
//aPlayGround.SetUpdateMode(sal_False);
long nThumbPos=aVScroll.GetThumbPos();
long nLines=aVScroll.GetPageSize();
UpdatePlayGround();
for(long i=nThumbPos-nDelta; i<nThumbPos+nLines-nDelta;i++)
{
if(i>=nThumbPos && i<=nThumbPos+nLines)
{
(PLineArray[sal::static_int_cast< sal_uInt16 >(i)])->
SetNeedsRepaint(sal_True);
}
else
{
(PLineArray[sal::static_int_cast< sal_uInt16 >(i)])->Hide();
(PLineArray[sal::static_int_cast< sal_uInt16 >(i)])->
SetNeedsRepaint(sal_False);
}
}
}
return 0;
}
IMPL_LINK( SvListBoxForProperties, ClickHdl, PushButton*,pPB)
{
if(pPB!=NULL)
{
SvPropertyLine *pPropLine=(SvPropertyLine *)pPB->GetParent();
SvXPropertyControl* pSvXPCtr=pPropLine->GetSvXPropertyControl();
pPropDataControl->Clicked(pSvXPCtr->GetMyName(),
pSvXPCtr->GetProperty(),pSvXPCtr->GetMyData());
}
return 0;
}
IMPL_LINK( SvListBoxForProperties, ModifyHdl,SvXPropEvListener*, pSvXPEvL)
{
if(pSvXPEvL!=NULL && pPropDataControl!=NULL)
{
SvXPropertyControl* pSvXPCtr=aListener.GetPropertyControl();
pPropDataControl->Modified(pSvXPCtr->GetMyName(),
pSvXPCtr->GetProperty(),pSvXPCtr->GetMyData());
}
return 0;
}
IMPL_LINK( SvListBoxForProperties, GetFocusHdl,SvXPropEvListener*, pSvXPEvL)
{
if(pSvXPEvL!=NULL && pPropDataControl!=NULL)
{
SvXPropertyControl* pSvXPCtr=aListener.GetPropertyControl();
pPropDataControl->Select(pSvXPCtr->GetMyName(),pSvXPCtr->GetMyData());
}
return 0;
}
IMPL_LINK( SvListBoxForProperties, LoseFocusHdl,SvXPropEvListener*, pSvXPEvL)
{
if(pSvXPEvL!=NULL && pPropDataControl!=NULL)
{
SvXPropertyControl* pSvXPCtr=aListener.GetPropertyControl();
pPropDataControl->Commit(pSvXPCtr->GetMyName(),
pSvXPCtr->GetProperty(),pSvXPCtr->GetMyData());
/*
{
pSvXPCtr->SetProperty(
pPropDataControl->GetTheCorrectProperty());
}
*/
}
return 0;
}
IMPL_LINK( SvListBoxForProperties, KeyInputHdl,SvXPropEvListener*, pSvXPEvL)
{
// FIXME - This code does not make a lot of sense.
if(pSvXPEvL!=NULL && pPropDataControl!=NULL)
{
/*SvXPropertyControl* pSvXPCtr=*/aListener.GetPropertyControl();
}
return 0;
}
SvTabPageForProperties::SvTabPageForProperties(Window* pParent,WinBits nWinStyle)
: TabPage(pParent,nWinStyle),
aLbProp(this)
{
aLbProp.Show();
}
void SvTabPageForProperties::Resize()
{
Point aPos(3,3);
Size aSize=GetOutputSizePixel();
aSize.Width()-=6;
aSize.Height()-=6;
aLbProp.SetPosSizePixel(aPos,aSize);
}
SvListBoxForProperties* SvTabPageForProperties::GetTheListBox()
{
return &aLbProp;
}
SvPropertyBox::SvPropertyBox( Window* pParent, WinBits nWinStyle)
: Control(pParent,nWinStyle),
aTabControl(this)
{
aTabControl.Show();
}
SvPropertyBox::SvPropertyBox( Window* pParent, const ResId& rResId )
: Control(pParent,rResId),
aTabControl(this)
{
aTabControl.Show();
Resize();
}
SvPropertyBox::~SvPropertyBox()
{
ClearAll();
}
void SvPropertyBox::ClearAll()
{
sal_uInt16 nCount=aTabControl.GetPageCount();
for(sal_uInt16 i=nCount;i>=1;i--)
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(i);
aTabControl.RemovePage(i);
delete pPage;
}
}
void SvPropertyBox::Resize()
{
Point aPos(3,3);
Size aSize=GetOutputSizePixel();
aSize.Width()-=6;
aSize.Height()-=6;
aTabControl.SetPosSizePixel(aPos,aSize);
sal_uInt16 nCount=aTabControl.GetPageCount();
aSize=aTabControl.GetTabPageSizePixel();
for(sal_uInt16 i=1;i<=nCount;i++)
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(i);
pPage->SetSizePixel(aSize);
}
}
sal_uInt16 SvPropertyBox::AppendPage( const String & rText )
{
sal_uInt16 nId=aTabControl.GetPageCount()+1;
aTabControl.InsertPage( nId,rText);
SvTabPageForProperties* pPage=new SvTabPageForProperties(&aTabControl);
pPage->SetSizePixel(aTabControl.GetTabPageSizePixel());
pPage->GetTheListBox()->SetController(pThePropDataCtr);
aTabControl.SetTabPage( nId, pPage);
aTabControl.SetCurPageId(nId);
return nId;
}
void SvPropertyBox::SetPage( sal_uInt16 nId)
{
aTabControl.SetCurPageId(nId);
}
sal_uInt16 SvPropertyBox::GetCurPage()
{
return aTabControl.GetCurPageId();
}
sal_uInt16 SvPropertyBox::CalcVisibleLines()
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
return pPage->GetTheListBox()->CalcVisibleLines();
}
void SvPropertyBox::EnableUpdate()
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
pPage->GetTheListBox()->EnableUpdate();
}
void SvPropertyBox::DisableUpdate()
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
pPage->GetTheListBox()->DisableUpdate();
}
void SvPropertyBox::SetController(SvPropertyDataControl *pDataCtr)
{
pThePropDataCtr=pDataCtr;
sal_uInt16 nCount=aTabControl.GetPageCount();
for(sal_uInt16 i=1;i<=nCount;i++)
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(i);
pPage->GetTheListBox()->SetController(pThePropDataCtr);
}
}
sal_uInt16 SvPropertyBox::InsertEntry( const SvPropertyData& rData, sal_uInt16 nPos)
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
return pPage->GetTheListBox()->InsertEntry(rData,nPos);
}
void SvPropertyBox::ChangeEntry( const SvPropertyData& rData, sal_uInt16 nPos)
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
pPage->GetTheListBox()->ChangeEntry(rData,nPos);
}
sal_uInt16 SvPropertyBox::AppendEntry( const SvPropertyData& rData)
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
return pPage->GetTheListBox()->AppendEntry(rData);
}
void SvPropertyBox::SetPropertyValue( const String & rEntryName, const String & rValue )
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
pPage->GetTheListBox()->SetPropertyValue( rEntryName, rValue );
}
void SvPropertyBox::SetFirstVisibleEntry(sal_uInt16 nPos)
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
pPage->GetTheListBox()->SetFirstVisibleEntry(nPos);
}
sal_uInt16 SvPropertyBox::GetFirstVisibleEntry()
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
return pPage->GetTheListBox()->GetFirstVisibleEntry();
}
void SvPropertyBox::SetSelectedEntry(sal_uInt16 nPos)
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
pPage->GetTheListBox()->SetSelectedEntry(nPos);
}
sal_uInt16 SvPropertyBox::GetSelectedEntry()
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
return pPage->GetTheListBox()->GetSelectedEntry();
}
void SvPropertyBox::ClearTable()
{
SvTabPageForProperties* pPage=(SvTabPageForProperties*)
aTabControl.GetTabPage(aTabControl.GetCurPageId());
pPage->GetTheListBox()->Clear();
}
SvBasicPropertyDataControl::~SvBasicPropertyDataControl()
{
}
void SvBasicPropertyDataControl::Modified(const String& aName,
const String& aVal,void* pData)
{
aEntryName=aName;
aEntryProperty=aVal;
pTheData=pData;
aModifyLink.Call(this);
}
void SvBasicPropertyDataControl::Clicked( const String& aName,
const String& aVal,
void* pData) //Xtension-Button pressed
{
aEntryName=aName;
aEntryProperty=aVal;
pTheData=pData;
aClickedLink.Call(this);
}
void SvBasicPropertyDataControl::Commit( const String& aName,
const String& aVal,
void* pData) //User accept changes
{
aEntryName=aName;
aEntryProperty=aVal;
pTheData=pData;
aCommitLink.Call(this);
}
void SvBasicPropertyDataControl::Select( const String& aName,
void* pData) //User select new Row
{
aEntryName=aName;
pTheData=pData;
aSelectLink.Call(this);
}
void SvBasicPropertyDataControl::LinkClicked(const String&, void*)
{
}
String SvBasicPropertyDataControl::GetName() const //Tell's the name of the Property
{
return aEntryName;
}
String SvBasicPropertyDataControl::GetProperty() const //Tell's the content of the Property
{
return aEntryProperty;
}
void* SvBasicPropertyDataControl::GetData() //Tell's the storage
{
return pTheData;
}
/*
String SvBasicPropertyDataControl::GetTheCorrectProperty() const
{
return aCorrectProperty;
}
*/
void SvBasicPropertyDataControl::SetTheCorrectProperty(const String& aString)
{
aCorrectProperty=aString;
}
void SvBasicPropertyDataControl::SetIsCorrect(sal_Bool nFlag)
{
bCorrectness=nFlag;
}
//========================================================================
// Property-Dialog:
/* zum TESTEN im CALC*/
//========================================================================
/*
ScPropertyDlg::ScPropertyDlg( Window* pParent) :
ModalDialog ( pParent, ScResId( RID_SCDLG_PROPERTIES) ),
aPropListBox ( this, ResId( CTR_PROPLINE) ),
aKindOfListBox (this,ResId( LB_KIND_OF_PROP)),
aModAnswer (this,ResId(FT_ANSMOD )),
aClickAnswer (this,ResId(FT_ANSCLICK )),
aCommitAnswer (this,ResId(FT_ANSCOMMIT)),
aSelectAnswer (this,ResId(FT_ANSSELECT)),
anOk(this,ResId( BTN_OK)),
aCancel(this,ResId( BTN_CANCEL))
{
FreeResource();
aKindOfListBox.SelectEntryPos(0);
aKindOfListBox.SetSelectHdl(
LINK( this, ScPropertyDlg, ModifiedHdl ));
nCount=0;
nClickCount=0;
String aString("Don't know ");
aBaProDatCtr.SetModifyHdl (LINK( this, ScPropertyDlg, RowModifiedHdl ));
aBaProDatCtr.SetClickedHdl(LINK( this, ScPropertyDlg, ClickHdl ));
aBaProDatCtr.SetCommitHdl (LINK( this, ScPropertyDlg, SelectHdl ));
aBaProDatCtr.SetSelectHdl (LINK( this, ScPropertyDlg, CommitHdl ));
aPropListBox.SetController(&aBaProDatCtr);
sal_uInt16 nPageId=aPropListBox.AppendPage("YabbaDabbaDo");
aPropListBox.SetPage(nPageId);
aProperty.eKind=KOC_EDIT;
aProperty.aName=aString;
aProperty.aName+=String((sal_uInt16)++nCount);
aProperty.aValue=sizeof ComboBox;
aProperty.bHasVisibleXButton=sal_False;
aProperty.bIsHyperLink=sal_False;
aProperty.bIsLocked=sal_False;
aProperty.pDataPtr=NULL;
aProperty.pControl=NULL;
aProperty.theValues.Insert(new String("1"),aProperty.theValues.Count());
aProperty.theValues.Insert(new String("2"),aProperty.theValues.Count());
aProperty.theValues.Insert(new String("3"),aProperty.theValues.Count());
aProperty.theValues.Insert(new String("4"),aProperty.theValues.Count());
aPropListBox.InsertEntry(aProperty);
aProperty.bHasVisibleXButton=sal_True;
aProperty.aName=aString;
aProperty.aName+=String((sal_uInt16)++nCount);
aProperty.aValue="42";
aProperty.eKind=KOC_LISTBOX;
aPropListBox.InsertEntry(aProperty);
aProperty.aName=aString;
aProperty.aName+=String((sal_uInt16)++nCount);
aProperty.eKind=KOC_COMBOBOX;
aProperty.bHasVisibleXButton=sal_False;
aPropListBox.InsertEntry(aProperty);
}
ScPropertyDlg::~ScPropertyDlg()
{
delete aProperty.theValues[0];
delete aProperty.theValues[1];
delete aProperty.theValues[2];
delete aProperty.theValues[3];
}
IMPL_LINK( ScPropertyDlg, ModifiedHdl, ListBox*, pLB )
{
if(pLB!=NULL)
{
String aString("Don't know ");
aProperty.aName=aString;
aProperty.aName+=String((sal_uInt16)++nCount);
if(nCount>20)
{
String aStr("Yabba ");
aStr+=aPropListBox.GetCurPage();
sal_uInt16 nPageId=aPropListBox.AppendPage(aStr);
aPropListBox.SetPage(nPageId);
nCount=0;
}
aProperty.eKind=(eKindOfControl)(aKindOfListBox.GetSelectEntryPos()+1);
aProperty.bHasVisibleXButton=sal_False;
if((nCount % 5)==0) aProperty.bHasVisibleXButton=sal_True;
aPropListBox.InsertEntry(aProperty);
}
return 0;
}
IMPL_LINK( ScPropertyDlg, RowModifiedHdl, SvBasicPropertyDataControl* ,pProCtr)
{
if(pProCtr!=NULL)
{
aModAnswer.SetText(aBaProDatCtr.GetProperty());
aModAnswer.Invalidate();
aBaProDatCtr.SetIsCorrect(sal_True);
}
return 0;
}
IMPL_LINK( ScPropertyDlg, CommitHdl, SvBasicPropertyDataControl*,pProCtr)
{
if(pProCtr!=NULL)
{
aCommitAnswer.SetText(aBaProDatCtr.GetProperty());
aCommitAnswer.Invalidate();
aBaProDatCtr.SetIsCorrect(sal_True);
}
return 0;
}
IMPL_LINK( ScPropertyDlg, ClickHdl, SvBasicPropertyDataControl*,pProCtr)
{
if(pProCtr!=NULL)
{
aClickAnswer.SetText(aBaProDatCtr.GetName());
aClickAnswer.Invalidate();
aBaProDatCtr.SetIsCorrect(sal_True);
}
return 0;
}
IMPL_LINK( ScPropertyDlg, SelectHdl, SvBasicPropertyDataControl*,pProCtr)
{
if(pProCtr!=NULL)
{
aSelectAnswer.SetText(aBaProDatCtr.GetName());
aSelectAnswer.Invalidate();
aBaProDatCtr.SetIsCorrect(sal_True);
}
return 0;
}
*/