summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnurag Jain <anuragjainfzd@gmail.com>2011-07-11 13:36:44 -0400
committerKohei Yoshida <kyoshida@novell.com>2011-07-11 13:36:44 -0400
commitbd6aae93e28483cbe3df290cdf06e3f179df207b (patch)
treebb4aa0ef9a75e0c01fe209ebd8d5a5659519dcf7
parentce0a204f358d384434fd878d107c4f10bb75c66d (diff)
More progress.
-rw-r--r--sc/source/ui/app/inputwin.cxx478
-rw-r--r--sc/source/ui/inc/inputwin.hxx17
2 files changed, 296 insertions, 199 deletions
diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index 2d7a74874..943eb82a4 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -51,6 +51,7 @@
#include <vcl/cursor.hxx>
#include <vcl/help.hxx>
#include <svl/stritem.hxx>
+#include <stdio.h>
#include "inputwin.hxx"
#include "scmod.hxx"
@@ -81,6 +82,7 @@
#define TEXT_MULTI_STARTPOS 5
#define THESIZE 1000000 //!!! langt... :-)
#define TBX_WINDOW_HEIGHT 22 // in Pixeln - fuer alle Systeme gleich?
+#define LEFT_OFFSET 5
enum ScNameInputType
{
@@ -176,7 +178,7 @@ ScInputWindow::ScInputWindow( Window* pParent, SfxBindings* pBind ) :
}
DBG_ASSERT( pViewSh, "no view shell for input window" );
- // Positionsfenster, 3 Buttons, Eingabefenster
+ // Position window, 3 buttons, input window
InsertWindow ( 1, &aWndPos, 0, 0 );
InsertSeparator ( 1 );
InsertItem ( SID_INPUT_FUNCTION, IMAGE( SID_INPUT_FUNCTION ), 0, 2 );
@@ -187,9 +189,12 @@ ScInputWindow::ScInputWindow( Window* pParent, SfxBindings* pBind ) :
aWndPos .SetQuickHelpText( ScResId( SCSTR_QHELP_POSWND ) );
aWndPos .SetHelpId ( HID_INSWIN_POS );
- aTextWindow.SetQuickHelpText( ScResId( SCSTR_QHELP_INPUTWND ) );
- aTextWindow.SetHelpId ( HID_INSWIN_INPUT );
+ if ( !lcl_isExperimentalMode() )
+ {
+ aTextWindow.SetQuickHelpText( ScResId( SCSTR_QHELP_INPUTWND ) );
+ aTextWindow.SetHelpId ( HID_INSWIN_INPUT );
+ }
// kein SetHelpText, die Hilfetexte kommen aus der Hilfe
SetItemText ( SID_INPUT_FUNCTION, ScResId( SCSTR_QHELP_BTNCALC ) );
@@ -477,7 +482,7 @@ void ScInputWindow::Select()
aTextWindow.StartEditEngine();
if ( pScMod->IsEditMode() ) // nicht, wenn z.B. geschuetzt
{
- aTextWindow.GrabFocus();
+ aTextWindow.StartEditEngine();
aTextWindow.SetTextString( '=' );
EditView* pView = aTextWindow.GetEditView();
@@ -498,19 +503,23 @@ void ScInputWindow::Resize()
{
ToolBox::Resize();
- long nWidth = GetSizePixel().Width();
- long nLeft = aTextWindow.GetPosPixel().X();
- Size aSize = aTextWindow.GetSizePixel();
-
- aSize.Width() = Max( ((long)(nWidth - nLeft - 5)), (long)0 );
if ( lcl_isExperimentalMode() )
{
- aSize.Height()= TBX_WINDOW_HEIGHT;
- aTextWindow.SetSizePixel( aSize );
+ //aSize.Height()= TBX_WINDOW_HEIGHT;
+ //aTextWindow.SetSizePixel( aSize );
aTextWindow.Resize();
}
- aTextWindow.SetSizePixel( aSize );
- aTextWindow.Invalidate();
+ else
+ {
+ long nWidth = GetSizePixel().Width();
+ long nLeft = aTextWindow.GetPosPixel().X();
+ Size aSize = aTextWindow.GetSizePixel();
+
+ aSize.Width() = Max( ((long)(nWidth - nLeft - 5)), (long)0 );
+
+ aTextWindow.SetSizePixel( aSize );
+ aTextWindow.Invalidate();
+ }
}
void ScInputWindow::SetFuncString( const String& rString, sal_Bool bDoEdit )
@@ -518,8 +527,10 @@ void ScInputWindow::SetFuncString( const String& rString, sal_Bool bDoEdit )
//! new method at ScModule to query if function autopilot is open
SfxViewFrame* pViewFrm = SfxViewFrame::Current();
EnableButtons( pViewFrm && !pViewFrm->GetChildWindow( SID_OPENDLG_FUNCTION ) );
- aTextWindow.StartEditEngine();
-
+ if ( !lcl_isExperimentalMode() )
+ aTextWindow.StartEditEngine();
+ else
+ aTextWindow.StartEditEngine();
ScModule* pScMod = SC_MOD();
if ( pScMod->IsEditMode() )
{
@@ -729,12 +740,17 @@ void ScInputWindow::DataChanged( const DataChangedEvent& rDCEvt )
ScInputBarGroup::ScInputBarGroup(Window* pParent)
: ScTextWndBase ( pParent, WinBits(WB_HIDE) ),
- aTextWindow ( this ),
- bIsMultiLine ( false )
+ aMultiTextWnd ( this ),
+ aButton ( this),
+ bIsMultiLine ( false )
{
- aTextWindow.Show();
- aTextWindow.SetQuickHelpText( ScResId( SCSTR_QHELP_INPUTWND ) );
- aTextWindow.SetHelpId ( HID_INSWIN_INPUT );
+ aMultiTextWnd.Show();
+ aMultiTextWnd.SetQuickHelpText( ScResId( SCSTR_QHELP_INPUTWND ) );
+ aMultiTextWnd.SetHelpId ( HID_INSWIN_INPUT );
+
+ aButton.SetClickHdl ( LINK( this, ScInputBarGroup, ClickHdl ) );
+ aButton.Show();
+ aButton.Enable();
}
ScInputBarGroup::~ScInputBarGroup()
@@ -745,80 +761,131 @@ ScInputBarGroup::~ScInputBarGroup()
void
ScInputBarGroup::InsertAccessibleTextData( ScAccessibleEditLineTextData& rTextData )
{
- aTextWindow.InsertAccessibleTextData( rTextData );
+ aMultiTextWnd.InsertAccessibleTextData( rTextData );
}
void
ScInputBarGroup::RemoveAccessibleTextData( ScAccessibleEditLineTextData& rTextData )
{
- aTextWindow.RemoveAccessibleTextData( rTextData );
+ aMultiTextWnd.RemoveAccessibleTextData( rTextData );
}
const String&
ScInputBarGroup::GetTextString() const
{
- return aTextWindow.GetTextString();
+ return aMultiTextWnd.GetTextString();
}
void ScInputBarGroup::SetTextString( const String& rString )
{
- aTextWindow.SetTextString(rString);
+ aMultiTextWnd.SetTextString(rString);
}
void ScInputBarGroup::Resize()
{
- long nWidth = GetSizePixel().Width();
- long nLeft = aTextWindow.GetPosPixel().X();
- Size aSize = aTextWindow.GetSizePixel();
+ long nWidth = GetParent()->GetSizePixel().Width();
+ long nLeft = GetPosPixel().X();
+ Size aSize = GetSizePixel();
+ aSize.Width() = Max( ((long)(nWidth - nLeft - 2*LEFT_OFFSET)), (long)0 );
+ if(bIsMultiLine)
+ {
+ aSize.Height()=3*TBX_WINDOW_HEIGHT;
+ }
+ else
+ {
+ aSize.Height()=TBX_WINDOW_HEIGHT;
+ }
+ SetSizePixel(aSize);
+ Invalidate();
- aSize.Width() = Max( ((long)(nWidth - nLeft - 40)), (long)0 );
- aSize.Height()=22;
- aTextWindow.SetSizePixel( aSize );
- aTextWindow.Invalidate();
+ aButton.SetPosSizePixel(Point(aSize.Width()-3*LEFT_OFFSET,0),Size(0.5*TBX_WINDOW_HEIGHT,TBX_WINDOW_HEIGHT));
+
+ aMultiTextWnd.Resize();
}
+
void ScInputBarGroup::GainFocus()
{
- aTextWindow.GrabFocus();
+ aMultiTextWnd.GrabFocus();
}
void ScInputBarGroup::StopEditEngine( sal_Bool bAll )
{
- aTextWindow.StopEditEngine( bAll );
+ aMultiTextWnd.StopEditEngine( bAll );
}
void ScInputBarGroup::StartEditEngine()
{
- aTextWindow.StartEditEngine();
+ aMultiTextWnd.StartEditEngine();
}
+
void ScInputBarGroup::MakeDialogEditView()
{
- aTextWindow.MakeDialogEditView();
+ aMultiTextWnd.MakeDialogEditView();
}
EditView* ScInputBarGroup::GetEditView()
{
- return aTextWindow.GetEditView();
+ return aMultiTextWnd.GetEditView();
}
sal_Bool ScInputBarGroup::IsInputActive()
{
- return aTextWindow.IsInputActive();
+ return aMultiTextWnd.IsInputActive();
}
void ScInputBarGroup::SetFormulaMode(sal_Bool bSet)
{
- aTextWindow.SetFormulaMode(bSet);
+ aMultiTextWnd.SetFormulaMode(bSet);
+}
+
+IMPL_LINK( ScInputBarGroup, ClickHdl, PushButton*, pBtn )
+{
+ if(!bIsMultiLine)
+ {
+ bIsMultiLine=true;
+ }
+ else
+ {
+ bIsMultiLine=false;
+ }
+ aMultiTextWnd.SetMultiLineStatus(bIsMultiLine);
+ Resize();
+ return 0;
}
-ScMultiTextWnd::ScMultiTextWnd( Window* pParen ) : ScTextWnd( pParen )
+//========================================================================
+// ScMultiTextWnd
+//========================================================================
+
+ScMultiTextWnd::ScMultiTextWnd( Window* pParen ) : ScTextWnd( pParen ),
+ bIsMultiLine(false)
{
nTextStartPos = TEXT_MULTI_STARTPOS;
}
+bool ScMultiTextWnd::GetMultiLineStatus()
+{
+ return bIsMultiLine;
+}
+
+void ScMultiTextWnd::SetMultiLineStatus(bool bMode)
+{
+ bIsMultiLine=bMode;
+}
+
+int ScMultiTextWnd::GetLineCount()
+{
+ if(pEditView)
+ {
+ return pEditEngine->GetLineCount(0);
+ }
+ return 1;
+}
+
void ScMultiTextWnd::Paint( const Rectangle& rRec )
{
// We always use edit engine to draw text at all times.
@@ -833,21 +900,193 @@ void ScMultiTextWnd::Paint( const Rectangle& rRec )
void ScMultiTextWnd::Resize()
{
+ long nWidth = GetParent()->GetSizePixel().Width();
+ long nLeft = GetPosPixel().X();
+ Size cSize = GetSizePixel();
+ cSize.Width() = Max( ((long)(nWidth - nLeft - 3*LEFT_OFFSET)), (long)0 );
+
+ if(bIsMultiLine)
+ {
+ cSize.Height()=3*TBX_WINDOW_HEIGHT;
+ }
+ else
+ {
+ cSize.Height()=TBX_WINDOW_HEIGHT;
+ }
+ SetSizePixel(cSize);
+
if (pEditView)
{
Size aSize = GetOutputSizePixel();
-
Size bSize = LogicToPixel(Size(0,pEditEngine->GetLineHeight(0,0)));
int nDiff=(aSize.Height()-bSize.Height())/2;
- Point aPos(nTextStartPos,nDiff*aSize.Height()/aSize.Height());
+ Point aPos(TEXT_STARTPOS,nDiff*aSize.Height()/aSize.Height());
Point aPos2(aSize.Width()-5,(aSize.Height()-nDiff)*aSize.Height()/aSize.Height());
pEditView->SetOutputArea(
PixelToLogic(Rectangle(aPos, aPos2)));
}
}
+
+
+void ScMultiTextWnd::StartEditEngine()
+{
+ // Bei "eigener Modalitaet" (Doc-modale Dialoge) nicht aktivieren
+
+ SfxObjectShell* pObjSh = SfxObjectShell::Current();
+ if ( pObjSh && pObjSh->IsInModalMode() )
+ return;
+
+ if ( !pEditView || !pEditEngine )
+ {
+ InitEditEngine(pObjSh);
+ }
+
+ SC_MOD()->SetInputMode( SC_INPUT_TOP );
+
+ SfxViewFrame* pViewFrm = SfxViewFrame::Current();
+ if (pViewFrm)
+ pViewFrm->GetBindings().Invalidate( SID_ATTR_INSERT );
+}
+
+void lcl_ExtendEditFontAttribs( SfxItemSet& rSet )
+{
+ const SfxPoolItem& rFontItem = rSet.Get( EE_CHAR_FONTINFO );
+ rSet.Put( rFontItem, EE_CHAR_FONTINFO_CJK );
+ rSet.Put( rFontItem, EE_CHAR_FONTINFO_CTL );
+ const SfxPoolItem& rHeightItem = rSet.Get( EE_CHAR_FONTHEIGHT );
+ rSet.Put( rHeightItem, EE_CHAR_FONTHEIGHT_CJK );
+ rSet.Put( rHeightItem, EE_CHAR_FONTHEIGHT_CTL );
+ const SfxPoolItem& rWeightItem = rSet.Get( EE_CHAR_WEIGHT );
+ rSet.Put( rWeightItem, EE_CHAR_WEIGHT_CJK );
+ rSet.Put( rWeightItem, EE_CHAR_WEIGHT_CTL );
+ const SfxPoolItem& rItalicItem = rSet.Get( EE_CHAR_ITALIC );
+ rSet.Put( rItalicItem, EE_CHAR_ITALIC_CJK );
+ rSet.Put( rItalicItem, EE_CHAR_ITALIC_CTL );
+ const SfxPoolItem& rLangItem = rSet.Get( EE_CHAR_LANGUAGE );
+ rSet.Put( rLangItem, EE_CHAR_LANGUAGE_CJK );
+ rSet.Put( rLangItem, EE_CHAR_LANGUAGE_CTL );
+}
+
+void lcl_ModifyRTLDefaults( SfxItemSet& rSet )
+{
+ rSet.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
+
+ // always using rtl writing direction would break formulas
+ //rSet.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
+
+ // PaperSize width is limited to USHRT_MAX in RTL mode (because of EditEngine's
+ // sal_uInt16 values in EditLine), so the text may be wrapped and line spacing must be
+ // increased to not see the beginning of the next line.
+ SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL );
+ aItem.SetPropLineSpace( 200 );
+ rSet.Put( aItem );
+}
+
+void lcl_ModifyRTLVisArea( EditView* pEditView )
+{
+ Rectangle aVisArea = pEditView->GetVisArea();
+ Size aPaper = pEditView->GetEditEngine()->GetPaperSize();
+ long nDiff = aPaper.Width() - aVisArea.Right();
+ aVisArea.Left() += nDiff;
+ aVisArea.Right() += nDiff;
+ pEditView->SetVisArea(aVisArea);
+}
+
+
+void ScMultiTextWnd::InitEditEngine(SfxObjectShell* pObjSh)
+{
+ ScFieldEditEngine* pNew;
+ ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell();
+ if ( pViewSh )
+ {
+ const ScDocument* pDoc = pViewSh->GetViewData()->GetDocument();
+ pNew = new ScFieldEditEngine( pDoc->GetEnginePool(), pDoc->GetEditPool() );
+ }
+ else
+ pNew = new ScFieldEditEngine( EditEngine::CreatePool(), NULL, sal_True );
+ pNew->SetExecuteURL( false );
+ pEditEngine = pNew;
+
+ Size barSize=GetOutputSizePixel();
+
+ long barHeight=barSize.Height();
+ long textHeight=LogicToPixel( Size( 0, GetTextHeight() ) ).Height();
+ long nDiff = barHeight - textHeight;
+
+ barSize.Height()=nDiff+barHeight;
+ barSize.Width() -= 2*nTextStartPos-4;
+ pEditEngine->SetUpdateMode( false );
+ pEditEngine->SetPaperSize( PixelToLogic(Size(barSize.Width(),10000)) );
+ pEditEngine->SetWordDelimiters(
+ ScEditUtil::ModifyDelimiters( pEditEngine->GetWordDelimiters() ) );
+
+ UpdateAutoCorrFlag();
+
+ {
+ SfxItemSet* pSet = new SfxItemSet( pEditEngine->GetEmptyItemSet() );
+ pEditEngine->SetFontInfoInItemSet( *pSet, aTextFont );
+ lcl_ExtendEditFontAttribs( *pSet );
+ // turn off script spacing to match DrawText output
+ pSet->Put( SvxScriptSpaceItem( false, EE_PARA_ASIANCJKSPACING ) );
+ if ( bIsRTL )
+ lcl_ModifyRTLDefaults( *pSet );
+ pEditEngine->SetDefaults( pSet );
+ }
+
+ // Wenn in der Zelle URL-Felder enthalten sind, muessen die auch in
+ // die Eingabezeile uebernommen werden, weil sonst die Positionen nicht stimmen.
+
+ sal_Bool bFilled = false;
+ ScInputHandler* pHdl = SC_MOD()->GetInputHdl();
+ if ( pHdl ) //! Testen, ob's der richtige InputHdl ist?
+ bFilled = pHdl->GetTextAndFields( *pEditEngine );
+
+ pEditEngine->SetUpdateMode( sal_True );
+
+ // aString ist die Wahrheit...
+ if ( bFilled && pEditEngine->GetText() == aString )
+ Invalidate(); // Repaint fuer (hinterlegte) Felder
+ else
+ pEditEngine->SetText(aString); // dann wenigstens den richtigen Text
+
+ pEditView = new EditView( pEditEngine, this );
+ pEditView->SetInsertMode(bIsInsertMode);
+
+ // Text aus Clipboard wird als ASCII einzeilig uebernommen
+ sal_uLong n = pEditView->GetControlWord();
+ pEditView->SetControlWord( n | EV_CNTRL_SINGLELINEPASTE );
+
+ pEditEngine->InsertView( pEditView, EE_APPEND );
+
+ Resize();
+
+ if ( bIsRTL )
+ lcl_ModifyRTLVisArea( pEditView );
+
+ pEditEngine->SetModifyHdl(LINK(this, ScTextWnd, NotifyHdl));
+
+ if (!maAccTextDatas.empty())
+ maAccTextDatas.back()->StartEdit();
+
+ // as long as EditEngine and DrawText sometimes differ for CTL text,
+ // repaint now to have the EditEngine's version visible
+// SfxObjectShell* pObjSh = SfxObjectShell::Current();
+ if ( pObjSh && pObjSh->ISA(ScDocShell) )
+ {
+ ScDocument* pDoc = ((ScDocShell*)pObjSh)->GetDocument(); // any document
+ sal_uInt8 nScript = pDoc->GetStringScriptType( aString );
+ if ( nScript & SCRIPTTYPE_COMPLEX )
+ Invalidate();
+ }
+}
+
+void ScMultiTextWnd::StopEditEngine( sal_Bool /*bAll*/ )
+{
+}
+
//========================================================================
-// Eingabefenster
+// ScTextWnd
//========================================================================
ScTextWnd::ScTextWnd( Window* pParent )
@@ -1114,161 +1353,6 @@ void ScTextWnd::UpdateAutoCorrFlag()
}
}
-void lcl_ExtendEditFontAttribs( SfxItemSet& rSet )
-{
- const SfxPoolItem& rFontItem = rSet.Get( EE_CHAR_FONTINFO );
- rSet.Put( rFontItem, EE_CHAR_FONTINFO_CJK );
- rSet.Put( rFontItem, EE_CHAR_FONTINFO_CTL );
- const SfxPoolItem& rHeightItem = rSet.Get( EE_CHAR_FONTHEIGHT );
- rSet.Put( rHeightItem, EE_CHAR_FONTHEIGHT_CJK );
- rSet.Put( rHeightItem, EE_CHAR_FONTHEIGHT_CTL );
- const SfxPoolItem& rWeightItem = rSet.Get( EE_CHAR_WEIGHT );
- rSet.Put( rWeightItem, EE_CHAR_WEIGHT_CJK );
- rSet.Put( rWeightItem, EE_CHAR_WEIGHT_CTL );
- const SfxPoolItem& rItalicItem = rSet.Get( EE_CHAR_ITALIC );
- rSet.Put( rItalicItem, EE_CHAR_ITALIC_CJK );
- rSet.Put( rItalicItem, EE_CHAR_ITALIC_CTL );
- const SfxPoolItem& rLangItem = rSet.Get( EE_CHAR_LANGUAGE );
- rSet.Put( rLangItem, EE_CHAR_LANGUAGE_CJK );
- rSet.Put( rLangItem, EE_CHAR_LANGUAGE_CTL );
-}
-
-void lcl_ModifyRTLDefaults( SfxItemSet& rSet )
-{
- rSet.Put( SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST ) );
-
- // always using rtl writing direction would break formulas
- //rSet.Put( SvxFrameDirectionItem( FRMDIR_HORI_RIGHT_TOP, EE_PARA_WRITINGDIR ) );
-
- // PaperSize width is limited to USHRT_MAX in RTL mode (because of EditEngine's
- // sal_uInt16 values in EditLine), so the text may be wrapped and line spacing must be
- // increased to not see the beginning of the next line.
- SvxLineSpacingItem aItem( SVX_LINESPACE_TWO_LINES, EE_PARA_SBL );
- aItem.SetPropLineSpace( 200 );
- rSet.Put( aItem );
-}
-
-void lcl_ModifyRTLVisArea( EditView* pEditView )
-{
- Rectangle aVisArea = pEditView->GetVisArea();
- Size aPaper = pEditView->GetEditEngine()->GetPaperSize();
- long nDiff = aPaper.Width() - aVisArea.Right();
- aVisArea.Left() += nDiff;
- aVisArea.Right() += nDiff;
- pEditView->SetVisArea(aVisArea);
-}
-
-void ScMultiTextWnd::StartEditEngine()
-{
- // Bei "eigener Modalitaet" (Doc-modale Dialoge) nicht aktivieren
-
- SfxObjectShell* pObjSh = SfxObjectShell::Current();
- if ( pObjSh && pObjSh->IsInModalMode() )
- return;
-
- if ( !pEditView || !pEditEngine )
- {
- InitEditEngine(pObjSh);
- }
-
- SC_MOD()->SetInputMode( SC_INPUT_TOP );
-
- SfxViewFrame* pViewFrm = SfxViewFrame::Current();
- if (pViewFrm)
- pViewFrm->GetBindings().Invalidate( SID_ATTR_INSERT );
-}
-
-void ScMultiTextWnd::InitEditEngine(SfxObjectShell* pObjSh)
-{
- ScFieldEditEngine* pNew;
- ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell();
- if ( pViewSh )
- {
- const ScDocument* pDoc = pViewSh->GetViewData()->GetDocument();
- pNew = new ScFieldEditEngine( pDoc->GetEnginePool(), pDoc->GetEditPool() );
- }
- else
- pNew = new ScFieldEditEngine( EditEngine::CreatePool(), NULL, sal_True );
- pNew->SetExecuteURL( false );
- pEditEngine = pNew;
-
- Size barSize=GetOutputSizePixel();
-
- long barHeight=barSize.Height();
- long textHeight=LogicToPixel( Size( 0, GetTextHeight() ) ).Height();
- long nDiff = barHeight - textHeight;
-
- barSize.Height()=nDiff+barHeight;
- barSize.Width() -= 2*nTextStartPos-4;
- pEditEngine->SetUpdateMode( false );
- pEditEngine->SetPaperSize( PixelToLogic(Size(barSize.Width(),10000)) );
- pEditEngine->SetWordDelimiters(
- ScEditUtil::ModifyDelimiters( pEditEngine->GetWordDelimiters() ) );
-
- UpdateAutoCorrFlag();
-
- {
- SfxItemSet* pSet = new SfxItemSet( pEditEngine->GetEmptyItemSet() );
- pEditEngine->SetFontInfoInItemSet( *pSet, aTextFont );
- lcl_ExtendEditFontAttribs( *pSet );
- // turn off script spacing to match DrawText output
- pSet->Put( SvxScriptSpaceItem( false, EE_PARA_ASIANCJKSPACING ) );
- if ( bIsRTL )
- lcl_ModifyRTLDefaults( *pSet );
- pEditEngine->SetDefaults( pSet );
- }
-
- // Wenn in der Zelle URL-Felder enthalten sind, muessen die auch in
- // die Eingabezeile uebernommen werden, weil sonst die Positionen nicht stimmen.
-
- sal_Bool bFilled = false;
- ScInputHandler* pHdl = SC_MOD()->GetInputHdl();
- if ( pHdl ) //! Testen, ob's der richtige InputHdl ist?
- bFilled = pHdl->GetTextAndFields( *pEditEngine );
-
- pEditEngine->SetUpdateMode( sal_True );
-
- // aString ist die Wahrheit...
- if ( bFilled && pEditEngine->GetText() == aString )
- Invalidate(); // Repaint fuer (hinterlegte) Felder
- else
- pEditEngine->SetText(aString); // dann wenigstens den richtigen Text
-
- pEditView = new EditView( pEditEngine, this );
- pEditView->SetInsertMode(bIsInsertMode);
-
- // Text aus Clipboard wird als ASCII einzeilig uebernommen
- sal_uLong n = pEditView->GetControlWord();
- pEditView->SetControlWord( n | EV_CNTRL_SINGLELINEPASTE );
-
- pEditEngine->InsertView( pEditView, EE_APPEND );
-
- Resize();
-
- if ( bIsRTL )
- lcl_ModifyRTLVisArea( pEditView );
-
- pEditEngine->SetModifyHdl(LINK(this, ScTextWnd, NotifyHdl));
-
- if (!maAccTextDatas.empty())
- maAccTextDatas.back()->StartEdit();
-
- // as long as EditEngine and DrawText sometimes differ for CTL text,
- // repaint now to have the EditEngine's version visible
-// SfxObjectShell* pObjSh = SfxObjectShell::Current();
- if ( pObjSh && pObjSh->ISA(ScDocShell) )
- {
- ScDocument* pDoc = ((ScDocShell*)pObjSh)->GetDocument(); // any document
- sal_uInt8 nScript = pDoc->GetStringScriptType( aString );
- if ( nScript & SCRIPTTYPE_COMPLEX )
- Invalidate();
- }
-}
-
-void ScMultiTextWnd::StopEditEngine( sal_Bool /*bAll*/ )
-{
-}
-
void ScTextWnd::StartEditEngine()
{
// Bei "eigener Modalitaet" (Doc-modale Dialoge) nicht aktivieren
diff --git a/sc/source/ui/inc/inputwin.hxx b/sc/source/ui/inc/inputwin.hxx
index 627c4be83..6437bf8b2 100644
--- a/sc/source/ui/inc/inputwin.hxx
+++ b/sc/source/ui/inc/inputwin.hxx
@@ -33,6 +33,7 @@
#include <vcl/toolbox.hxx>
#include <sfx2/childwin.hxx>
#include <svl/lstner.hxx>
+#include <vcl/button.hxx>
#include <vcl/combobox.hxx>
#include <vcl/window.hxx>
#include <svtools/transfer.hxx>
@@ -171,13 +172,21 @@ public:
ScMultiTextWnd( Window* pParent );
virtual void StartEditEngine();
virtual void StopEditEngine( sal_Bool bAll );
+ void SetMultiLineStatus(bool bMode);
+ bool GetMultiLineStatus();
+ int GetLineCount();
+ void SetSize(bool bIsMultiLine);
+ virtual void Resize();
protected:
void InitEditEngine(SfxObjectShell* pObjSh);
virtual void Paint( const Rectangle& rRec );
- virtual void Resize();
+private:
+ bool bIsMultiLine;
};
+//================================================================================
+
class ScInputBarGroup : public ScTextWndBase
{
@@ -203,11 +212,15 @@ public:
private:
- ScMultiTextWnd aTextWindow;
+ ScMultiTextWnd aMultiTextWnd;
+ PushButton aButton;
bool bIsMultiLine;
+ DECL_LINK( ClickHdl, PushButton* );
+
};
+//================================================================================
class ScInputWindow : public ToolBox // Parent-Toolbox
{