Hi Patrick,
          Unfortunately this patch makes tab leaders turn into an
underscore when you drag it.

It will have to wait till after 0.7.14.

Cheers

Martin


On Thu, 29 Mar 2001, Patrick Lam wrote:

> This patch fixes the buglet where dragging a tab eradicated the associated
> tab's leader.
> 
> Index: src/wp/ap/xp/ap_TopRuler.cpp
> ===================================================================
> RCS file: /cvsroot/abi/src/wp/ap/xp/ap_TopRuler.cpp,v
> retrieving revision 1.99
> diff -u -r1.99 ap_TopRuler.cpp
> --- src/wp/ap/xp/ap_TopRuler.cpp      2001/03/19 08:39:04     1.99
> +++ src/wp/ap/xp/ap_TopRuler.cpp      2001/03/29 05:59:02
> @@ -583,7 +583,8 @@
>  void AP_TopRuler::_getTabStopXAnchor(AP_TopRulerInfo * pInfo,
>                                                                               
>UT_sint32 k,
>                                                                               
>UT_sint32 * pTab,
> -                                                                             
>eTabType & iType)
> +                                                                             
>eTabType & iType,
> +                                                                             
>eTabLeader & iLeader)
>  {
>       UT_sint32 xAbsLeft = _getFirstPixelInColumn(pInfo,pInfo->m_iCurrentColumn);
>  
> @@ -594,6 +595,7 @@
>               // this is a new tab
>               iPosition = m_dragStart;
>               iType = m_draggingTabType;
> +             iLeader = FL_LEADER_NONE;
>       }
>       else
>       {
> @@ -606,6 +608,7 @@
>               UT_ASSERT(bRes);
>               iPosition = TabInfo.getPosition();
>               iType = TabInfo.getType();
> +             iLeader = TabInfo.getLeader();
>       }
>  
>       if (pTab)
> @@ -635,12 +638,13 @@
>       UT_sint32 anchor;
>       UT_Rect rect;
>       eTabType iType;
> +     eTabLeader iLeader;
>  
>       if (m_draggingWhat == DW_TABSTOP)
>       {
>               // just deal with the tab being moved
>  
> -             _getTabStopXAnchor(pInfo, m_draggingTab, &anchor, iType);
> +             _getTabStopXAnchor(pInfo, m_draggingTab, &anchor, iType, iLeader);
>               _getTabStopRect(pInfo, anchor, &rect);
>  
>               _drawTabStop(rect, m_draggingTabType, false);
> @@ -666,7 +670,7 @@
>                               (m_draggingTab == (UT_sint32) i))
>                               continue;
>  
> -                     _getTabStopXAnchor(pInfo, i, &anchor, iType);
> +                     _getTabStopXAnchor(pInfo, i, &anchor, iType, iLeader);
>                       _getTabStopRect(pInfo, anchor, &rect);
>  
>                       if (left < anchor)
> @@ -704,7 +708,7 @@
>  }
>  
>  UT_sint32 AP_TopRuler::_findTabStop(AP_TopRulerInfo * pInfo, 
> -                                                                     UT_uint32 x, 
>UT_uint32 y, eTabType & iType)
> +                                                                     UT_uint32 x, 
>UT_uint32 y, eTabType & iType, eTabLeader & iLeader)
>  {
>       // hit-test all the existing tabs
>       // return the index of the one found
> @@ -714,7 +718,7 @@
>  
>       for (UT_sint32 i = 0; i < pInfo->m_iTabStops; i++)
>       {
> -             _getTabStopXAnchor(pInfo, i, &anchor, iType);
> +             _getTabStopXAnchor(pInfo, i, &anchor, iType, iLeader);
>               _getTabStopRect(pInfo, anchor, &rect);
>  
>               if (rect.containsPoint(x,y))
> @@ -1099,7 +1103,8 @@
>       // next hit-test against the tabs
>  
>       eTabType iType;
> -     UT_sint32 iTab = _findTabStop(&m_infoCache, x, s_iFixedHeight/2 + 
>s_iFixedHeight/4 - 3, iType);
> +     eTabLeader iLeader;
> +     UT_sint32 iTab = _findTabStop(&m_infoCache, x, s_iFixedHeight/2 + 
>s_iFixedHeight/4 - 3, iType, iLeader);
>       if (iTab >= 0)
>       {
>               UT_DEBUGMSG(("hit tab %ld\n",iTab));
> @@ -1107,6 +1112,7 @@
>               m_draggingWhat = DW_TABSTOP;
>               m_draggingTab = iTab;
>               m_draggingTabType = iType;
> +             m_draggingTabLeader = iLeader;
>               m_dragStart = 0;
>               m_bBeforeFirstMotion = true;
>               return;
> @@ -1193,6 +1199,7 @@
>               m_draggingWhat = DW_TABSTOP;
>               m_draggingTab = tr_TABINDEX_NEW;
>               m_draggingTabType = m_iDefaultTabType;
> +             m_draggingTabLeader = FL_LEADER_NONE;
>               m_bBeforeFirstMotion = true;
>  
>               // this is a new widget, so it needs more work to get started
> @@ -1415,19 +1422,20 @@
>       case DW_TABSTOP:
>               {
>                               eTabType iType;
> +                     eTabLeader iLeader;
>  
> -                     UT_sint32 iTab = _findTabStop(&m_infoCache, xgrid+xAbsLeft, 
>s_iFixedHeight/2 + s_iFixedHeight/4 - 3, iType);
> +                     UT_sint32 iTab = _findTabStop(&m_infoCache, xgrid+xAbsLeft, 
>s_iFixedHeight/2 + s_iFixedHeight/4 - 3, iType, iLeader);
>                       
>                       UT_DEBUGMSG (("iTab: %i, m_draggingTab: %i\n", iTab, 
>m_draggingTab));
>                       
>                       if (iTab >= 0 && iTab != m_draggingTab)
>                       {
>                               UT_DEBUGMSG (("This tab was released over an existing 
>tab. It will be deleted.\n"));
> -                             _setTabStops(tick, m_draggingTab, true); // true for 
>the last arg will cause this to be deleted
> +                             _setTabStops(tick, m_draggingTab, iLeader, true); // 
>true for the last arg will cause this to be deleted
>                       }
>                       else
>                       {
> -                             _setTabStops(tick, iTab, false);
> +                             _setTabStops(tick, iTab, iLeader, false);
>                       }
>                       m_draggingWhat = DW_NOTHING;
>                       return;
> @@ -1439,7 +1447,7 @@
>       }
>  }
>  
> -void AP_TopRuler::_setTabStops(ap_RulerTicks tick, UT_sint32 iTab, bool bDelete)
> +void AP_TopRuler::_setTabStops(ap_RulerTicks tick, UT_sint32 iTab, eTabLeader 
>iLeader, bool bDelete)
>  {
>       UT_sint32 xAbsLeft = 
>_getFirstPixelInColumn(&m_infoCache,m_infoCache.m_iCurrentColumn);
>       double dxrel = _scalePixelDistanceToUnits(m_draggingCenter-xAbsLeft,tick);
> @@ -1450,7 +1458,9 @@
>               
>       if (!bDelete)
>       {
> -             char * sz = NULL;
> +             char * sz = NULL, sz1[2];
> +             sz1[0] = (char)iLeader + '0'; sz1[1] = 0;
> +
>               switch(m_draggingTabType)
>               {
>                       case FL_TAB_LEFT:               sz = "L";       break;
> @@ -1464,6 +1474,7 @@
>               buf += m_pG->invertDimension(tick.dimType,dxrel);
>               buf += "/";
>               buf += sz;
> +             buf += sz1;
>       }
>  
>       // then append all the remaining tabstops, if any
> @@ -2076,7 +2087,7 @@
>                       // delete the tab
>                       m_draggingWhat = dw;
>                       ap_RulerTicks tick(m_pG,m_dim);
> -                     _setTabStops(tick, tr_TABINDEX_NONE, true);
> +                     _setTabStops(tick, tr_TABINDEX_NONE, FL_LEADER_NONE, true);
>               }
>               break;
>  
> Index: src/wp/ap/xp/ap_TopRuler.h
> ===================================================================
> RCS file: /cvsroot/abi/src/wp/ap/xp/ap_TopRuler.h,v
> retrieving revision 1.46
> diff -u -r1.46 ap_TopRuler.h
> --- src/wp/ap/xp/ap_TopRuler.h        2001/02/06 22:54:58     1.46
> +++ src/wp/ap/xp/ap_TopRuler.h        2001/03/29 05:59:02
> @@ -157,16 +157,16 @@
>       void    _getTabToggleRect(UT_Rect * prToggle);
>       void    _drawTabToggle(const UT_Rect * pClipRect, bool bErase);
>  
> -     void    _getTabStopXAnchor(AP_TopRulerInfo * pInfo, UT_sint32 k, UT_sint32 * 
>pTab, eTabType & iType);
> +     void    _getTabStopXAnchor(AP_TopRulerInfo * pInfo, UT_sint32 k, UT_sint32 * 
>pTab, eTabType & iType, eTabLeader & iLeader);
>       void    _getTabStopRect(AP_TopRulerInfo * pInfo, UT_sint32 anchor, UT_Rect * 
>pRect);
>       void    _drawTabProperties(const UT_Rect * pClipRect,
>                                                                  AP_TopRulerInfo * 
>pInfo,
>                                                                  bool bDrawAll = 
>true);
>  
> -     UT_sint32               _findTabStop(AP_TopRulerInfo * pInfo, UT_uint32 x, 
>UT_uint32 y, eTabType & iType);
> +     UT_sint32               _findTabStop(AP_TopRulerInfo * pInfo, UT_uint32 x, 
>UT_uint32 y, eTabType & iType, eTabLeader & iLeader);
>       const char *    _getTabStopString(AP_TopRulerInfo * pInfo, UT_sint32 k);
>       void                    _getTabZoneRect(AP_TopRulerInfo * pInfo, UT_Rect 
>&rZone);
> -     void                    _setTabStops(ap_RulerTicks tick, UT_sint32 iTab, bool 
>bDelete);
> +     void                    _setTabStops(ap_RulerTicks tick, UT_sint32 iTab, 
>eTabLeader iLeader, bool bDelete);
>  
>       UT_sint32       _getColumnMarkerXRightEnd(AP_TopRulerInfo * pInfo, UT_uint32 
>kCol);
>       void            _getColumnMarkerRect(AP_TopRulerInfo * pInfo, UT_uint32 kCol, 
>UT_sint32 xCenter,
> @@ -238,6 +238,7 @@
>       UT_Rect                         m_dragging2Rect; /* rect of drag-along */
>       UT_sint32                       m_draggingTab;  /* index of tab being dragged 
>*/
>       eTabType                        m_draggingTabType;
> +     eTabLeader                      m_draggingTabLeader;
>       UT_sint32                       m_dragStart;
>       bool                            m_bBeforeFirstMotion;
>  
> 
> 
> 


Reply via email to