6996def
From 21c291f571daf25a7ed15f7baf551a6aac08f35f Mon Sep 17 00:00:00 2001
6996def
From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= <tomaz.vajngerl@collabora.com>
6996def
Date: Mon, 25 Aug 2014 18:20:58 +0200
6996def
Subject: [PATCH] fdo#36772 Move the scrollbar and sheet tabs in a separate
6996def
 row.
6996def
MIME-Version: 1.0
6996def
Content-Type: text/plain; charset=UTF-8
6996def
Content-Transfer-Encoding: 8bit
6996def
6996def
Change-Id: I57d891d9f6e89dafb4840a577ba55baa734fdcc2
6996def
(cherry picked from commit 1d1d1c62caf2ee6a96946e96d782e03f3ef80439)
6996def
6996def
Move the scrollbar and layer tabs in a separate row in Draw
6996def
6996def
The reason for this is that the height of the scrollbar is theme-dependent
6996def
and makes the tabs unreadable if it's too small.
6996def
6996def
The same has already been done for Calc (fdo#36772).
6996def
6996def
Reviewed-on: https://gerrit.libreoffice.org/11480
6996def
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
6996def
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
6996def
(cherry picked from commit 20800ebc7ef05637134c3915798e13a272663341)
6996def
6996def
Conflicts:
6996def
	sd/source/ui/view/grviewsh.cxx
6996def
6996def
Change-Id: Ibe22cf5e7d5863ccf276c19bfa969f5b5fc16a5a
6996def
---
6996def
 sc/source/ui/view/tabcont.cxx         |  3 +-
6996def
 sc/source/ui/view/tabview.cxx         | 60 ++++++++++++++++-------------------
6996def
 sd/source/ui/dlg/LayerTabBar.cxx      |  2 +-
6996def
 sd/source/ui/inc/FrameView.hxx        |  4 ---
6996def
 sd/source/ui/inc/GraphicViewShell.hxx |  3 --
6996def
 sd/source/ui/view/drviews5.cxx        |  3 +-
6996def
 sd/source/ui/view/frmview.cxx         |  2 --
6996def
 sd/source/ui/view/grviewsh.cxx        | 55 ++++----------------------------
6996def
 sd/source/ui/view/viewshel.cxx        | 11 +++----
6996def
 9 files changed, 42 insertions(+), 101 deletions(-)
6996def
6996def
diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx
6996def
index e609277..dbecb26 100644
6996def
--- a/sc/source/ui/view/tabcont.cxx
6996def
+++ b/sc/source/ui/view/tabcont.cxx
6996def
@@ -39,8 +39,7 @@
6996def
 
6996def
 ScTabControl::ScTabControl( Window* pParent, ScViewData* pData ) :
6996def
     TabBar( pParent,
6996def
-            WinBits(WB_BORDER | WB_3DLOOK | WB_SCROLL | WB_RANGESELECT |
6996def
-                    WB_MULTISELECT | WB_DRAG | WB_SIZEABLE) ),
6996def
+            WinBits(WB_BORDER | WB_3DLOOK | WB_SCROLL | WB_RANGESELECT | WB_MULTISELECT | WB_DRAG ) ),
6996def
             DropTargetHelper( this ),
6996def
             DragSourceHelper( this ),
6996def
             pViewData( pData ),
6996def
diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx
6996def
index 286f1c1..a1ac0d0 100644
6996def
--- a/sc/source/ui/view/tabview.cxx
6996def
+++ b/sc/source/ui/view/tabview.cxx
6996def
@@ -57,9 +57,6 @@
6996def
 #define SPLIT_HANDLE_SIZE   5
6996def
 #define SC_ICONSIZE     36
6996def
 
6996def
-#define SC_SCROLLBAR_MIN    30
6996def
-#define SC_TABBAR_MIN       6
6996def
-
6996def
 using namespace ::com::sun::star;
6996def
 
6996def
 //  Corner-Button
6996def
@@ -343,7 +340,12 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner )
6996def
     aBorderPos = rOffset;
6996def
     aFrameSize = rSize;
6996def
 
6996def
+    const StyleSettings& rStyleSettings = pFrameWin->GetSettings().GetStyleSettings();
6996def
+
6996def
+    sal_Int32 nTabWidth = pFrameWin->GetFont().GetHeight() + 4;
6996def
+
6996def
     if ( aViewData.GetHSplitMode() != SC_SPLIT_NONE )
6996def
+    {
6996def
         if ( aViewData.GetHSplitPos() > nSizeX - SPLIT_MARGIN )
6996def
         {
6996def
             aViewData.SetHSplitMode( SC_SPLIT_NONE );
6996def
@@ -351,7 +353,9 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner )
6996def
                 ActivatePart( SC_SPLIT_BOTTOMLEFT );
6996def
             InvalidateSplit();
6996def
         }
6996def
+    }
6996def
     if ( aViewData.GetVSplitMode() != SC_SPLIT_NONE )
6996def
+    {
6996def
         if ( aViewData.GetVSplitPos() > nSizeY - SPLIT_MARGIN )
6996def
         {
6996def
             aViewData.SetVSplitMode( SC_SPLIT_NONE );
6996def
@@ -359,12 +363,13 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner )
6996def
                 ActivatePart( SC_SPLIT_BOTTOMLEFT );
6996def
             InvalidateSplit();
6996def
         }
6996def
+    }
6996def
 
6996def
     UpdateShow();
6996def
 
6996def
     if (bHScroll || bVScroll)       // Scrollbars horizontal oder vertikal
6996def
     {
6996def
-        long nScrollBarSize = pFrameWin->GetSettings().GetStyleSettings().GetScrollBarSize();
6996def
+        long nScrollBarSize = rStyleSettings.GetScrollBarSize();
6996def
         if (bVScroll)
6996def
         {
6996def
             nBarX = nScrollBarSize;
6996def
@@ -372,7 +377,7 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner )
6996def
         }
6996def
         if (bHScroll)
6996def
         {
6996def
-            nBarY = nScrollBarSize;
6996def
+            nBarY = nScrollBarSize + nTabWidth;
6996def
             nSizeY -= nBarY - nOverlap;
6996def
         }
6996def
 
6996def
@@ -403,7 +408,6 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner )
6996def
             }
6996def
             nSizeRt = nSizeX - nSizeLt - nSizeSp;
6996def
 
6996def
-            long nTabSize = 0;
6996def
             if (bTabControl)
6996def
             {
6996def
                 // pending relative tab bar width from extended document options
6996def
@@ -412,39 +416,30 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner )
6996def
                     SetRelTabBarWidth( mfPendingTabBarWidth );
6996def
                     mfPendingTabBarWidth = -1.0;
6996def
                 }
6996def
-
6996def
-                nTabSize = pTabControl->GetSizePixel().Width()-nOverlap;
6996def
-
6996def
-                if ( aViewData.GetHSplitMode() != SC_SPLIT_FIX )    // bei linkem Scrollbar
6996def
-                {
6996def
-                    if (nTabSize > nSizeLt-SC_SCROLLBAR_MIN) nTabSize = nSizeLt-SC_SCROLLBAR_MIN;
6996def
-                    if (nTabSize < SC_TABBAR_MIN) nTabSize = SC_TABBAR_MIN;
6996def
-                    nSizeLt -= nTabSize;
6996def
-                }
6996def
-                else                                                // bei rechtem Scrollbar
6996def
-                {
6996def
-                    if (nTabSize > nSizeRt-SC_SCROLLBAR_MIN) nTabSize = nSizeRt-SC_SCROLLBAR_MIN;
6996def
-                    if (nTabSize < SC_TABBAR_MIN) nTabSize = SC_TABBAR_MIN;
6996def
-                    nSizeRt -= nTabSize;
6996def
-                }
6996def
             }
6996def
 
6996def
-            lcl_SetPosSize( *pTabControl, Point(nPosX-nOverlap, nPosY+nSizeY),
6996def
-                                                Size(nTabSize+nOverlap, nBarY), nTotalWidth, bLayoutRTL );
6996def
+            Point aTabPoint(nPosX - nOverlap, nPosY + nSizeY + nScrollBarSize);
6996def
+            Size aTabSize(nSizeX, nBarY - nScrollBarSize);
6996def
+            lcl_SetPosSize( *pTabControl, aTabPoint, aTabSize, nTotalWidth, bLayoutRTL );
6996def
             pTabControl->SetSheetLayoutRTL( bLayoutRTL );
6996def
 
6996def
-            lcl_SetPosSize( aHScrollLeft, Point(nPosX+nTabSize-nOverlap, nPosY+nSizeY),
6996def
-                                                Size(nSizeLt+2*nOverlap, nBarY), nTotalWidth, bLayoutRTL );
6996def
-            lcl_SetPosSize( *pHSplitter, Point( nPosX+nTabSize+nSizeLt, nPosY+nSizeY ),
6996def
-                                            Size( nSizeSp, nBarY ), nTotalWidth, bLayoutRTL );
6996def
-            lcl_SetPosSize( aHScrollRight, Point(nPosX+nTabSize+nSizeLt+nSizeSp-nOverlap,
6996def
-                                                    nPosY+nSizeY),
6996def
-                                            Size(nSizeRt+2*nOverlap, nBarY), nTotalWidth, bLayoutRTL );
6996def
+            Point aHScrollLeftPoint(nPosX - nOverlap, nPosY + nSizeY);
6996def
+            Size aHScrollLeftSize(nSizeLt + 2 * nOverlap, nScrollBarSize);
6996def
+            lcl_SetPosSize( aHScrollLeft, aHScrollLeftPoint, aHScrollLeftSize, nTotalWidth, bLayoutRTL );
6996def
+
6996def
+            Point aHSplitterPoint(nPosX + nSizeLt, nPosY + nSizeY);
6996def
+            Size aHSplitterSize(nSizeSp, nScrollBarSize);
6996def
+            lcl_SetPosSize( *pHSplitter, aHSplitterPoint, aHSplitterSize, nTotalWidth, bLayoutRTL );
6996def
+
6996def
+            Point aHScrollRightPoint(nPosX + nSizeLt + nSizeSp - nOverlap, nPosY + nSizeY);
6996def
+            Size aHScrollRightSize(nSizeRt + 2 * nOverlap, nScrollBarSize);
6996def
+
6996def
+            lcl_SetPosSize( aHScrollRight, aHScrollRightPoint, aHScrollRightSize, nTotalWidth, bLayoutRTL );
6996def
 
6996def
             //  SetDragRectPixel is done below
6996def
         }
6996def
 
6996def
-        if (bVScroll)                               // Scrollbars vertikal
6996def
+        if (bVScroll)
6996def
         {
6996def
             long nSizeUp = 0;       // upper scroll bar
6996def
             long nSizeSp = 0;       // splitter
6996def
@@ -564,7 +559,8 @@ void ScTabView::DoResize( const Point& rOffset, const Size& rSize, bool bInner )
6996def
         }
6996def
         nSplitPosX = aViewData.GetHSplitPos();
6996def
         lcl_SetPosSize( *pHSplitter,
6996def
-            Point( nSplitPosX, nOutPosY ), Size( nSplitSizeX, nSplitHeight ), nTotalWidth, bLayoutRTL );
6996def
+                        Point(nSplitPosX, nOutPosY),
6996def
+                        Size( nSplitSizeX, nSplitHeight - nTabWidth ), nTotalWidth, bLayoutRTL );
6996def
         nLeftSize = nSplitPosX - nPosX;
6996def
         nSplitPosX += nSplitSizeX;
6996def
         nRightSize = nSizeX - nLeftSize - nSplitSizeX;
6996def
diff --git a/sd/source/ui/dlg/LayerTabBar.cxx b/sd/source/ui/dlg/LayerTabBar.cxx
6996def
index fa14066..db9a764 100644
6996def
--- a/sd/source/ui/dlg/LayerTabBar.cxx
6996def
+++ b/sd/source/ui/dlg/LayerTabBar.cxx
6996def
@@ -48,7 +48,7 @@ namespace sd {
6996def
  * default constructor
6996def
  */
6996def
 LayerTabBar::LayerTabBar(DrawViewShell* pViewSh, Window* pParent)
6996def
-    : TabBar( pParent, WinBits( WB_BORDER | WB_3DLOOK | WB_SCROLL | WB_SIZEABLE ) ),
6996def
+    : TabBar( pParent, WinBits( WB_BORDER | WB_3DLOOK | WB_SCROLL ) ),
6996def
     DropTargetHelper( this ),
6996def
     pDrViewSh(pViewSh)
6996def
 {
6996def
diff --git a/sd/source/ui/inc/FrameView.hxx b/sd/source/ui/inc/FrameView.hxx
6996def
index 40bdffe..120570f 100644
6996def
--- a/sd/source/ui/inc/FrameView.hxx
6996def
+++ b/sd/source/ui/inc/FrameView.hxx
6996def
@@ -163,9 +163,6 @@ public:
6996def
     void SetDrawMode(sal_uLong nNewDrawMode) { mnDrawMode = nNewDrawMode; };
6996def
     sal_uLong GetDrawMode() const { return mnDrawMode; };
6996def
 
6996def
-    void SetTabCtrlPercent( double nPercent ) { mnTabCtrlPercent = nPercent; }
6996def
-    double GetTabCtrlPercent() const { return mnTabCtrlPercent; }
6996def
-
6996def
     void SetIsNavigatorShowingAllShapes (const bool bIsNavigatorShowingAllShapes);
6996def
     bool IsNavigatorShowingAllShapes (void) const;
6996def
 
6996def
@@ -200,7 +197,6 @@ private:
6996def
     sal_uInt16          mnSlotId;           ///< SlotId, which was initial mentioned
6996def
     sal_uInt16          mnSlidesPerRow;     ///< slides per row on the slide-desk
6996def
     sal_uLong           mnDrawMode;         ///< draw mode for the normal window
6996def
-    double              mnTabCtrlPercent;
6996def
     /** Remember whether the navigator shows all shapes (<TRUE/>) or only
6996def
         the names ones (<FALSE/>).  Not persistent.
6996def
     */
6996def
diff --git a/sd/source/ui/inc/GraphicViewShell.hxx b/sd/source/ui/inc/GraphicViewShell.hxx
6996def
index 632a31e..3f35b78 100644
6996def
--- a/sd/source/ui/inc/GraphicViewShell.hxx
6996def
+++ b/sd/source/ui/inc/GraphicViewShell.hxx
6996def
@@ -72,9 +72,6 @@ public:
6996def
 protected:
6996def
     void ConstructGraphicViewShell (void);
6996def
     virtual void ArrangeGUIElements (void) SAL_OVERRIDE;
6996def
-
6996def
-private:
6996def
-    DECL_LINK(TabBarSplitHandler, TabBar*);
6996def
 };
6996def
 
6996def
 } // end of namespace sd
6996def
diff --git a/sd/source/ui/view/drviews5.cxx b/sd/source/ui/view/drviews5.cxx
6996def
index 2e98ec5..fbe01c1 100644
6996def
--- a/sd/source/ui/view/drviews5.cxx
6996def
+++ b/sd/source/ui/view/drviews5.cxx
6996def
@@ -113,8 +113,7 @@ void DrawViewShell::ArrangeGUIElements (void)
6996def
     // Retrieve the current size (thickness) of the scroll bars.  That is
6996def
     // the width of the vertical and the height of the horizontal scroll
6996def
     // bar.
6996def
-    int nScrollBarSize =
6996def
-        GetParentWindow()->GetSettings().GetStyleSettings().GetScrollBarSize();
6996def
+    int nScrollBarSize = GetParentWindow()->GetSettings().GetStyleSettings().GetScrollBarSize();
6996def
     maScrBarWH = Size (nScrollBarSize, nScrollBarSize);
6996def
 
6996def
     Point aHPos = maViewPos;
6996def
diff --git a/sd/source/ui/view/frmview.cxx b/sd/source/ui/view/frmview.cxx
6996def
index 3121d64..c114d81 100644
6996def
--- a/sd/source/ui/view/frmview.cxx
6996def
+++ b/sd/source/ui/view/frmview.cxx
6996def
@@ -194,7 +194,6 @@ FrameView::FrameView(SdDrawDocument* pDrawDoc, FrameView* pFrameView /* = NULK *
6996def
         mbClickChangeRotation = pFrameView->IsClickChangeRotation();
6996def
         mnSlidesPerRow = pFrameView->GetSlidesPerRow();
6996def
         mnDrawMode = pFrameView->GetDrawMode();
6996def
-        mnTabCtrlPercent = pFrameView->GetTabCtrlPercent();
6996def
         mbIsNavigatorShowingAllShapes = pFrameView->IsNavigatorShowingAllShapes();
6996def
         SetPreviousViewShellType (pFrameView->GetPreviousViewShellType());
6996def
         SetViewShellTypeOnLoad (pFrameView->GetViewShellTypeOnLoad());
6996def
@@ -228,7 +227,6 @@ FrameView::FrameView(SdDrawDocument* pDrawDoc, FrameView* pFrameView /* = NULK *
6996def
             bool bUseContrast = Application::GetSettings().GetStyleSettings().GetHighContrastMode();
6996def
             mnDrawMode = bUseContrast ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR;
6996def
         }
6996def
-        mnTabCtrlPercent = 0.0;
6996def
         mbIsNavigatorShowingAllShapes = false;
6996def
         SetPreviousViewShellType (ViewShell::ST_NONE);
6996def
         SetViewShellTypeOnLoad (ViewShell::ST_IMPRESS);
6996def
diff --git a/sd/source/ui/view/grviewsh.cxx b/sd/source/ui/view/grviewsh.cxx
6996def
index 253a6e7..01af5d6 100644
6996def
--- a/sd/source/ui/view/grviewsh.cxx
6996def
+++ b/sd/source/ui/view/grviewsh.cxx
6996def
@@ -30,9 +30,6 @@
6996def
 
6996def
 namespace sd {
6996def
 
6996def
-static const int TABCONTROL_INITIAL_SIZE = 350;
6996def
-
6996def
-
6996def
 GraphicViewShell::GraphicViewShell (
6996def
     SfxViewFrame* pFrame,
6996def
     ViewShellBase& rViewShellBase,
6996def
@@ -59,10 +56,9 @@ void GraphicViewShell::ConstructGraphicViewShell(void)
6996def
 {
6996def
     meShellType = ST_DRAW;
6996def
 
6996def
-    mpLayerTabBar.reset (new LayerTabBar(this,GetParentWindow()));
6996def
-    mpLayerTabBar->SetSplitHdl(LINK(this,GraphicViewShell,TabBarSplitHandler));
6996def
+    mpLayerTabBar.reset (new LayerTabBar(this, GetParentWindow()));
6996def
 
6996def
-    // pb: #i67363# no layer tabbar on preview mode
6996def
+    // #i67363# no layer tabbar in preview mode
6996def
     if ( !GetObjectShell()->IsPreview() )
6996def
         mpLayerTabBar->Show();
6996def
 }
6996def
@@ -88,58 +84,19 @@ void GraphicViewShell::ArrangeGUIElements (void)
6996def
     if (mpLayerTabBar.get()!=NULL && mpLayerTabBar->IsVisible())
6996def
     {
6996def
         Size aSize = mpLayerTabBar->GetSizePixel();
6996def
-        const Size aFrameSize (
6996def
-            GetViewFrame()->GetWindow().GetOutputSizePixel());
6996def
-
6996def
-        if (aSize.Width() == 0)
6996def
-        {
6996def
-            if (mpFrameView->GetTabCtrlPercent() == 0.0)
6996def
-                aSize.Width() = TABCONTROL_INITIAL_SIZE;
6996def
-            else
6996def
-                aSize.Width() = FRound(aFrameSize.Width()
6996def
-                    * mpFrameView->GetTabCtrlPercent());
6996def
-        }
6996def
-        aSize.Height() = GetParentWindow()->GetSettings().GetStyleSettings()
6996def
-            .GetScrollBarSize();
6996def
+        const Size aFrameSize (GetViewFrame()->GetWindow().GetOutputSizePixel());
6996def
+
6996def
+        aSize.Height() = GetParentWindow()->GetFont().GetHeight() + 4;
6996def
+        aSize.Width() = aFrameSize.Width();
6996def
 
6996def
         Point aPos (0, maViewSize.Height() - aSize.Height());
6996def
 
6996def
         mpLayerTabBar->SetPosSizePixel (aPos, aSize);
6996def
-
6996def
-        if (aFrameSize.Width() > 0)
6996def
-            mpFrameView->SetTabCtrlPercent (
6996def
-                (double) maTabControl.GetSizePixel().Width()
6996def
-                / aFrameSize.Width());
6996def
-        else
6996def
-            mpFrameView->SetTabCtrlPercent( 0.0 );
6996def
     }
6996def
 
6996def
     DrawViewShell::ArrangeGUIElements();
6996def
 }
6996def
 
6996def
-
6996def
-
6996def
-
6996def
-IMPL_LINK(GraphicViewShell, TabBarSplitHandler, TabBar*, pTabBar)
6996def
-{
6996def
-    const long int nMax = maViewSize.Width()
6996def
-        - maScrBarWH.Width()
6996def
-        - pTabBar->GetPosPixel().X();
6996def
-
6996def
-    Size aTabSize = pTabBar->GetSizePixel();
6996def
-    aTabSize.Width() = std::min(pTabBar->GetSplitSize(), (long)(nMax-1));
6996def
-
6996def
-    pTabBar->SetSizePixel (aTabSize);
6996def
-
6996def
-    Point aPos = pTabBar->GetPosPixel();
6996def
-    aPos.X() += aTabSize.Width();
6996def
-
6996def
-    Size aScrSize (nMax - aTabSize.Width(), maScrBarWH.Height());
6996def
-    mpHorizontalScrollBar->SetPosSizePixel(aPos, aScrSize);
6996def
-
6996def
-    return 0;
6996def
-}
6996def
-
6996def
 } // end of namespace sd
6996def
 
6996def
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
6996def
diff --git a/sd/source/ui/view/viewshel.cxx b/sd/source/ui/view/viewshel.cxx
6996def
index 28e272e..4d6804d 100644
6996def
--- a/sd/source/ui/view/viewshel.cxx
6996def
+++ b/sd/source/ui/view/viewshel.cxx
6996def
@@ -914,13 +914,12 @@ void ViewShell::ArrangeGUIElements (void)
6996def
     if (mpHorizontalScrollBar.get()!=NULL
6996def
         && mpHorizontalScrollBar->IsVisible())
6996def
     {
6996def
-        int nLocalLeft = nLeft;
6996def
-        if (mpLayerTabBar.get()!=NULL && mpLayerTabBar->IsVisible())
6996def
-            nLocalLeft += mpLayerTabBar->GetSizePixel().Width();
6996def
         nBottom -= maScrBarWH.Height();
6996def
+        if (mpLayerTabBar.get()!=NULL && mpLayerTabBar->IsVisible())
6996def
+            nBottom -= mpLayerTabBar->GetSizePixel().Height();
6996def
         mpHorizontalScrollBar->SetPosSizePixel (
6996def
-            Point(nLocalLeft,nBottom),
6996def
-            Size(nRight-nLocalLeft-maScrBarWH.Width(),maScrBarWH.Height()));
6996def
+            Point(nLeft, nBottom),
6996def
+            Size(nRight - nLeft - maScrBarWH.Width(), maScrBarWH.Height()));
6996def
     }
6996def
 
6996def
     // Vertical scrollbar.
6996def
@@ -930,7 +929,7 @@ void ViewShell::ArrangeGUIElements (void)
6996def
         nRight -= maScrBarWH.Width();
6996def
         mpVerticalScrollBar->SetPosSizePixel (
6996def
             Point(nRight,nTop),
6996def
-            Size (maScrBarWH.Width(),nBottom-nTop));
6996def
+            Size (maScrBarWH.Width(), nBottom-nTop));
6996def
     }
6996def
 
6996def
     // Filler in the lower right corner.
6996def
-- 
6996def
1.9.3
6996def