Hello Kohei,

Please find the patch for resizing the ScInputWindow. I've tried doing
it the way you suggested; using proper typecasting I've moved the
bIsMultiLine to the ScInputWindow and able to access the status in
other classes too. Still this patch needs lots of improvement as the
transition is not smooth. On first click the textbox resizes outwards
which used to resize in hidden manner previously.  But when the
textbox is given focus in multiline mode,  the whole toolbar resizes
to the desired state. Similar is the case for reverse process. As of
now I do not know why is it becoming a two state process. Please
review this patch and please

1: Make me figure out where the mistake might be. I guess there are
some more functions in ScInputWindow I'd need to touch into and also
some methods from Window.hxx.
2: Check the order in which various resize are getting called. I guess
there are various do's and undo's happening under the hood.
3: Still I'm not able to figure out what Invalidate() is for and when
it should be used and when not.

Thanks and regards.
-- 
Anurag Jain
Final yr B.Tech CSE
SASTRA University
Thanjavur(T.N.)-613402
From c43c07532edc3f1f1c70f20deebc86e563eadcb5 Mon Sep 17 00:00:00 2001
From: ANURAG JAIN <anuragjain...@gmail.com>
Date: Mon, 25 Jul 2011 00:07:42 +0530
Subject: [PATCH] Made the tool bar to resize. But still the transition is not smooth.

---
 sc/source/ui/app/inputwin.cxx |   76 +++++++++++++++++++++++++++--------------
 sc/source/ui/inc/inputwin.hxx |   11 +++---
 2 files changed, 55 insertions(+), 32 deletions(-)

diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index 943eb82..58d9af8 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -161,7 +161,8 @@ ScInputWindow::ScInputWindow( Window* pParent, SfxBindings* pBind ) :
         aTextCancel		( ScResId( SCSTR_QHELP_BTNCANCEL ) ),
         aTextSum		( ScResId( SCSTR_QHELP_BTNSUM ) ),
         aTextEqual		( ScResId( SCSTR_QHELP_BTNEQUAL ) ),
-        bIsOkCancelMode ( false )
+        bIsOkCancelMode ( false ),
+        bIsMultiLine    ( false )
 {
     ScModule*		 pScMod  = SC_MOD();
     SfxImageManager* pImgMgr = SfxImageManager::GetImageManager( pScMod );
@@ -505,8 +506,20 @@ void ScInputWindow::Resize()
 
     if ( lcl_isExperimentalMode() )
     {
-        //aSize.Height()= TBX_WINDOW_HEIGHT;
+        Size aSize = GetSizePixel();
         //aTextWindow.SetSizePixel( aSize );
+        if( bIsMultiLine )
+        {
+        printf("increased\n");
+        aSize.Height()=77;
+        }
+        else
+        {
+        printf("reduced\n");
+        aSize.Height()=33;
+        }
+        SetSizePixel(aSize);
+        //Invalidate();
         aTextWindow.Resize();
     }
     else
@@ -705,7 +718,7 @@ void ScInputWindow::EnableButtons( sal_Bool bEnable )
 void ScInputWindow::StateChanged( StateChangedType nType )
 {
     ToolBox::StateChanged( nType );
-
+    printf("here\n");
     if ( nType == STATE_CHANGE_INITSHOW ) Resize();
 }
 
@@ -734,6 +747,17 @@ void ScInputWindow::DataChanged( const DataChangedEvent& rDCEvt )
     ToolBox::DataChanged( rDCEvt );
 }
 
+bool ScInputWindow::GetMultiLineStatus()
+{
+    return bIsMultiLine;
+}
+
+void ScInputWindow::SetMultiLineStatus(bool bMode)
+{
+    bIsMultiLine=bMode;
+}
+
+
 //========================================================================
 //                  ScInputBarGroup
 //========================================================================
@@ -741,8 +765,7 @@ void ScInputWindow::DataChanged( const DataChangedEvent& rDCEvt )
 ScInputBarGroup::ScInputBarGroup(Window* pParent)
     :   ScTextWndBase        ( pParent, WinBits(WB_HIDE) ),
         aMultiTextWnd        ( this ),
-        aButton              ( this),
-        bIsMultiLine         ( false )
+        aButton              ( this)
 {
       aMultiTextWnd.Show();
       aMultiTextWnd.SetQuickHelpText( ScResId( SCSTR_QHELP_INPUTWND ) );
@@ -783,11 +806,16 @@ void ScInputBarGroup::SetTextString( const String& rString )
 
 void ScInputBarGroup::Resize()
 {
-    long nWidth = GetParent()->GetSizePixel().Width();
+    Window *w=GetParent();
+    ScInputWindow *sw;
+    sw=dynamic_cast<ScInputWindow*>(w);
+
+    long nWidth = sw->GetSizePixel().Width();
     long nLeft  = GetPosPixel().X();
     Size aSize  = GetSizePixel();
-    aSize.Width() = Max( ((long)(nWidth - nLeft - 2*LEFT_OFFSET)), (long)0 );
-    if(bIsMultiLine)
+    aSize.Width() = Max( ((long)(nWidth - nLeft - LEFT_OFFSET)), (long)0 );
+
+    if(sw->GetMultiLineStatus())
     {
         aSize.Height()=3*TBX_WINDOW_HEIGHT;
     }
@@ -844,16 +872,19 @@ void ScInputBarGroup::SetFormulaMode(sal_Bool bSet)
 
 IMPL_LINK( ScInputBarGroup, ClickHdl, PushButton*, pBtn )
 {
-    if(!bIsMultiLine)
+    Window *w=GetParent();
+    ScInputWindow *sw;
+    sw=dynamic_cast<ScInputWindow*>(w);
+
+    if(!sw->GetMultiLineStatus())
     {
-        bIsMultiLine=true;
+        sw->SetMultiLineStatus(true);
     }
     else
     {
-        bIsMultiLine=false;
+        sw->SetMultiLineStatus(false);
     }
-    aMultiTextWnd.SetMultiLineStatus(bIsMultiLine);
-    Resize();
+    sw->Resize();
     return 0;
 }
 
@@ -861,22 +892,11 @@ IMPL_LINK( ScInputBarGroup, ClickHdl, PushButton*, pBtn )
 //                      ScMultiTextWnd
 //========================================================================
 
-ScMultiTextWnd::ScMultiTextWnd( Window* pParen ) : ScTextWnd( pParen ),
-                                                   bIsMultiLine(false)
+ScMultiTextWnd::ScMultiTextWnd( Window* pParen ) : ScTextWnd( pParen )
 {
     nTextStartPos = TEXT_MULTI_STARTPOS;
 }
 
-bool ScMultiTextWnd::GetMultiLineStatus()
-{
-    return bIsMultiLine;
-}
-
-void ScMultiTextWnd::SetMultiLineStatus(bool bMode)
-{
-    bIsMultiLine=bMode;
-}
-
 int ScMultiTextWnd::GetLineCount()
 {
    if(pEditView)
@@ -900,12 +920,16 @@ void ScMultiTextWnd::Paint( const Rectangle& rRec )
 
 void ScMultiTextWnd::Resize()
 {
+    Window *w=GetParent()->GetParent();
+    ScInputWindow *sw;
+    sw=dynamic_cast<ScInputWindow*>(w);
+
     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)
+    if(sw->GetMultiLineStatus())
     {
         cSize.Height()=3*TBX_WINDOW_HEIGHT;
     }
diff --git a/sc/source/ui/inc/inputwin.hxx b/sc/source/ui/inc/inputwin.hxx
index 6437bf8..dc457f2 100644
--- a/sc/source/ui/inc/inputwin.hxx
+++ b/sc/source/ui/inc/inputwin.hxx
@@ -172,17 +172,14 @@ 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 );
 private:
-    bool bIsMultiLine;
+//    bool bIsMultiLine;
 };
 
 //================================================================================
@@ -214,7 +211,7 @@ private:
 
     ScMultiTextWnd  aMultiTextWnd;
     PushButton      aButton;
-    bool            bIsMultiLine;
+//    bool            bIsMultiLine;
 
     DECL_LINK( ClickHdl,	 PushButton* );
 
@@ -261,7 +258,8 @@ public:
 
     void			StateChanged( StateChangedType nType );
     virtual void	DataChanged( const DataChangedEvent& rDCEvt );
-
+    void SetMultiLineStatus(bool bMode);
+    bool GetMultiLineStatus();
 
 protected:
     virtual void	SetText( const String& rString );
@@ -280,6 +278,7 @@ private:
     String			aTextSum;
     String			aTextEqual;
     sal_Bool			bIsOkCancelMode;
+    bool            bIsMultiLine;
 };
 
 //==================================================================
-- 
1.7.0.4

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to