Hi,

This will hopefully ZAP the POW from January 21.

Index: src/text/fmt/xp/fl_BlockLayout.cpp
===================================================================
RCS file: /cvsroot/abi/src/text/fmt/xp/fl_BlockLayout.cpp,v
retrieving revision 1.276
diff -u -r1.276 fl_BlockLayout.cpp
--- src/text/fmt/xp/fl_BlockLayout.cpp  2001/03/27 04:59:08     1.276
+++ src/text/fmt/xp/fl_BlockLayout.cpp  2001/03/28 06:11:53
@@ -336,7 +336,7 @@
                        UT_ASSERT(iPosLen < sizeof pszPosition);
 
                        memcpy(pszPosition, pStart, iPosLen);
-            pszPosition[iPosLen] = 0;
+                       pszPosition[iPosLen] = 0;
 
                        iPosition = pG->convertDimension(pszPosition);
 
@@ -4357,6 +4357,7 @@
                {
                        iPosition = pTab->getPosition();
                        iType = pTab->getType();
+                       iLeader = pTab->getLeader();
 
                        return true;
                }
@@ -4415,8 +4416,6 @@
        UT_uint32 iCountTabs = m_vecTabs.getItemCount();
        UT_uint32 i;
 
-       UT_UNUSED(iLeader); // TODO FIXME
-       
        for (i=0; i<iCountTabs; i++)
        {
                fl_TabStop* pTab = (fl_TabStop*) m_vecTabs.getNthItem(i);
@@ -4430,6 +4429,7 @@
                {
                        iPosition = pTab->getPositionLayoutUnits();
                        iType = pTab->getType();
+                       iLeader = pTab->getLeader();
 
                        return true;
                }
Index: src/text/fmt/xp/fp_Line.cpp
===================================================================
RCS file: /cvsroot/abi/src/text/fmt/xp/fp_Line.cpp,v
retrieving revision 1.93
diff -u -r1.93 fp_Line.cpp
--- src/text/fmt/xp/fp_Line.cpp 2001/03/25 08:04:31     1.93
+++ src/text/fmt/xp/fp_Line.cpp 2001/03/28 06:11:56
@@ -783,6 +783,8 @@
                        int iScanWidth = 0;
                        int iScanWidthLayoutUnits = 0;
 
+                       pTabRun->setLeader(iTabLeader);
+
                        // for everybody except the left tab, we need to know how much 
text is to follow
                        switch ( iTabType )
                        {
Index: src/text/fmt/xp/fp_Run.cpp
===================================================================
RCS file: /cvsroot/abi/src/text/fmt/xp/fp_Run.cpp,v
retrieving revision 1.152
diff -u -r1.152 fp_Run.cpp
--- src/text/fmt/xp/fp_Run.cpp  2001/03/27 05:38:24     1.152
+++ src/text/fmt/xp/fp_Run.cpp  2001/03/28 06:12:01
@@ -665,6 +665,18 @@
        m_iWidth = iWidth;
 }
 
+void fp_TabRun::setLeader(eTabLeader iLeader)
+{
+       clearScreen();
+       m_leader = iLeader;
+}
+
+eTabLeader fp_TabRun::getLeader(void)
+{
+       return m_leader;
+}
+
+
 void fp_TabRun::_clearScreen(bool /* bFullLineHeightRect */)
 {
        UT_ASSERT(!m_bDirty);
@@ -741,6 +753,52 @@
        UT_uint32 iRunBase = m_pBL->getPosition() + m_iOffsetFirst;
 #endif
 
+       if (m_leader != FL_LEADER_NONE || 1)
+       {
+               UT_UCSChar tmp[151];
+               unsigned short wid[151];
+               int i, cumWidth;
+
+               tmp[0] = 150;
+               switch (m_leader)
+               {
+               case FL_LEADER_DOT:
+                       tmp[1] = '.';
+                       break;
+               case FL_LEADER_HYPHEN:
+                       tmp[1] = '-';
+                       break;
+               case FL_LEADER_UNDERLINE:
+                       tmp[1] = '_';
+                       break;
+               default:
+                       tmp[1] = 'q';
+                       break;
+               }
+
+               for (i = 2; i < 151; i++)
+                       tmp[i] = tmp[1];
+
+               m_pG->setFont(m_pScreenFont);
+               m_pG->measureString(tmp, 1, 150, wid);
+               // one would think that one could measure
+               // one character and divide the needed
+               // width by that; would one be so wrong?
+               // we're not dealing with different letters
+               // here, after all.
+
+               i = 1; 
+               cumWidth = 0;
+               while (cumWidth < m_iWidth && i < 151)
+                       cumWidth += wid[i++];
+
+               i = (i>=3) ? i - 2 : 1;
+
+               UT_RGBColor clrBlack = UT_RGBColor(0,0,0);
+               m_pG->setColor(clrBlack);
+               m_pG->drawChars(tmp, 1, i, pDA->xoff, iFillTop);
+       }
+       else
        if (
                pView->getFocus()!=AV_FOCUS_NONE &&
                (iSel1 <= iRunBase)
Index: src/text/fmt/xp/fp_Run.h
===================================================================
RCS file: /cvsroot/abi/src/text/fmt/xp/fp_Run.h,v
retrieving revision 1.77
diff -u -r1.77 fp_Run.h
--- src/text/fmt/xp/fp_Run.h    2001/03/25 19:19:18     1.77
+++ src/text/fmt/xp/fp_Run.h    2001/03/28 06:12:03
@@ -31,8 +31,8 @@
 #include "pt_Types.h"
 #include "ut_assert.h"
 #include "ap_Strings.h"
+#include "fl_BlockLayout.h"
 
-
 class UT_GrowBuf;
 class fl_BlockLayout;
 class fp_Line;
@@ -260,10 +260,13 @@
        virtual bool                    canBreakAfter(void) const;
        virtual bool                    canBreakBefore(void) const;
        virtual bool                    letPointPass(void) const;
-       void                                    setWidth(UT_sint32);
-       
+       void                            setWidth(UT_sint32);
+       void                            setLeader(eTabLeader);
+       eTabLeader                      getLeader(void);
+
 protected:
        UT_RGBColor                     m_colorFG;
+       eTabLeader                      m_leader;
 
        virtual void                    _drawArrow(UT_uint32 iLeft,UT_uint32 
iTop,UT_uint32 iWidth, UT_uint32 iHeight);
        virtual void                    _draw(dg_DrawArgs*);
Index: src/wp/ap/beos/ap_BeOSDialog_Tab.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/beos/ap_BeOSDialog_Tab.cpp,v
retrieving revision 1.4
diff -u -r1.4 ap_BeOSDialog_Tab.cpp
--- src/wp/ap/beos/ap_BeOSDialog_Tab.cpp        2001/02/06 22:54:42     1.4
+++ src/wp/ap/beos/ap_BeOSDialog_Tab.cpp        2001/03/28 06:12:06
@@ -320,7 +320,7 @@
 
 eTabLeader AP_BeOSDialog_Tab::_gatherLeader()
 {
-       return FL_LEADER_NONE;
+       return m_current_leader;
 }
 
 void AP_BeOSDialog_Tab::_setLeader( eTabLeader a )
@@ -348,6 +348,8 @@
        
        if(pButton)
                pButton->SetValue(1);
+
+       m_current_leader = a;
 }
 
 const XML_Char * AP_BeOSDialog_Tab::_gatherDefaultTabStop()
Index: src/wp/ap/unix/ap_UnixDialog_Tab.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/unix/ap_UnixDialog_Tab.cpp,v
retrieving revision 1.12
diff -u -r1.12 ap_UnixDialog_Tab.cpp
--- src/wp/ap/unix/ap_UnixDialog_Tab.cpp        2001/02/28 04:40:32     1.12
+++ src/wp/ap/unix/ap_UnixDialog_Tab.cpp        2001/03/28 06:12:08
@@ -970,7 +970,7 @@
 
 eTabLeader AP_UnixDialog_Tab::_gatherLeader()
 {
-       return FL_LEADER_NONE;
+       return m_current_leader;
 }
 
 void AP_UnixDialog_Tab::_setLeader( eTabLeader a )
@@ -991,6 +991,8 @@
        m_bInSetCall = true;
        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(w), TRUE );
        m_bInSetCall = false;
+
+       m_current_leader = a;
 }
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
Index: src/wp/ap/xp/ap_Dialog_Tab.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_Dialog_Tab.cpp,v
retrieving revision 1.12
diff -u -r1.12 ap_Dialog_Tab.cpp
--- src/wp/ap/xp/ap_Dialog_Tab.cpp      2001/02/06 22:54:58     1.12
+++ src/wp/ap/xp/ap_Dialog_Tab.cpp      2001/03/28 06:12:11
@@ -158,12 +158,6 @@
        // alignment
        _controlEnable( id_ALIGN_BAR,                   false );
 
-       // leaders
-       _controlEnable( id_LEADER_NONE,                 false );
-       _controlEnable( id_LEADER_DOT,                  false );
-       _controlEnable( id_LEADER_DASH,                 false );
-       _controlEnable( id_LEADER_UNDERLINE,    false );
-
        // buttons
        _controlEnable( id_BUTTON_SET,                  false );
        _controlEnable( id_BUTTON_CLEAR,                false );
@@ -198,6 +192,7 @@
                // again.  Here, since enum is rel 0, i'm subtracting one and doing an
                // ugly type cast
                _setAlignment( pTabInfo->getType() );
+               _setLeader( pTabInfo->getLeader() );
 
                _setTabEdit( _getTabDimensionString(index) );
                
@@ -254,7 +249,7 @@
        }
        strcat(p_temp, buffer);
        delete m_pszTabStops;
-       m_pszTabStops = p_temp;;
+       m_pszTabStops = p_temp;
 
        UT_ASSERT(m_pFrame); // needs to be set from runModal for some of the event_'s 
to work
 
@@ -412,15 +407,14 @@
 }
 
 
-void AP_Dialog_Tab::buildTab( char *buffer, UT_uint32 /*bufflen*/ )
+void AP_Dialog_Tab::buildTab( char *buffer, UT_uint32 bufflen )
 {
        // get current value from member
        const XML_Char* szOld = _gatherTabEdit();
        const XML_Char* szNew = UT_reformatDimensionString(m_dim, szOld); 
-
-       // TODO - use snprintf
 
-       sprintf( buffer, "%s/%c", szNew, AlignmentToChar(_gatherAlignment()));
+       snprintf( buffer, bufflen, "%s/%c%c", szNew, 
+AlignmentToChar(_gatherAlignment()),
+                                               ((char)_gatherLeader())+'0');
 }
 
 void AP_Dialog_Tab::_event_somethingChanged()
@@ -436,10 +430,13 @@
        bool bEnableSet   = true;               // only disabled if current selection 
exactly matches current ones
                                                                                // or 
there are no items in the list.
 
+// this just looks broken for the initial tab thingie.
+#if 0
        if(m_tabInfo.getItemCount() == 0)
        {
                bEnableSet = false;
        }
+#endif
 
        for ( UT_uint32 i = 0; i < m_tabInfo.getItemCount(); i++ )
        {


Reply via email to