summaryrefslogtreecommitdiff
path: root/dbaccess/source/ui/querydesign/ConnectionLine.cxx
diff options
context:
space:
mode:
authorOcke Janssen <oj@openoffice.org>2002-02-06 07:15:30 +0000
committerOcke Janssen <oj@openoffice.org>2002-02-06 07:15:30 +0000
commit78029666b972020ced2c3c31fcb401d9159c707d (patch)
treec181d1ff00ebc9b31ab097cea43baa509261b0bf /dbaccess/source/ui/querydesign/ConnectionLine.cxx
parente31dcc276b3f0851338593c0dc9d42f022d736df (diff)
#96957# new handling inserted for context menu and accessibility
Diffstat (limited to 'dbaccess/source/ui/querydesign/ConnectionLine.cxx')
-rw-r--r--dbaccess/source/ui/querydesign/ConnectionLine.cxx317
1 files changed, 156 insertions, 161 deletions
diff --git a/dbaccess/source/ui/querydesign/ConnectionLine.cxx b/dbaccess/source/ui/querydesign/ConnectionLine.cxx
index 6ff0c7a895f9..b2236767aead 100644
--- a/dbaccess/source/ui/querydesign/ConnectionLine.cxx
+++ b/dbaccess/source/ui/querydesign/ConnectionLine.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: ConnectionLine.cxx,v $
*
- * $Revision: 1.5 $
+ * $Revision: 1.6 $
*
- * last change: $Author: oj $ $Date: 2001-10-08 07:26:32 $
+ * last change: $Author: oj $ $Date: 2002-02-06 08:15:30 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -87,6 +87,81 @@
using namespace dbaui;
const long DESCRIPT_LINE_WIDTH = 15;
const long HIT_SENSITIVE_RADIUS = 5;
+
+namespace
+{
+ /** calcRect creates a new rectangle with the given points
+ @param _rBase the base point
+ @param _aVector the vector which will be added
+ */
+ inline Rectangle calcRect(const Point& _rBase,const Point& _aVector)
+ {
+ return Rectangle( _rBase - _aVector, _rBase + _aVector );
+ }
+ // -----------------------------------------------------------------------------
+ /** GetTextPos calculate the rectangle for the connection to be drawn
+ @param _pWin the table window where to draw it
+ @param _aConnPos the connection point
+ @param _aDescrLinePos the description line pos
+ */
+ Rectangle GetTextPos(const OTableWindow* _pWin, const Point& _aConnPos,const Point& _aDescrLinePos)
+ {
+ OTableWindowListBox* pListBox = _pWin ? _pWin->GetListBox() : NULL;
+ DBG_ASSERT(_pWin && pListBox, "OConnectionLine::GetSourceTextPos : invalid call !");
+
+ long nRowHeight = pListBox->GetEntryHeight();
+
+ Rectangle aReturn;
+ aReturn.Top() = _aConnPos.Y() - nRowHeight;
+ aReturn.Bottom() = aReturn.Top() + nRowHeight;
+ if (_aDescrLinePos.X() < _aConnPos.X())
+ {
+ aReturn.Left() = _aDescrLinePos.X();
+ aReturn.Right() = aReturn.Left() + _aConnPos.X() - _aDescrLinePos.X();
+ }
+ else
+ {
+ aReturn.Left() = _aConnPos.X();
+ aReturn.Right() = aReturn.Left() + _aDescrLinePos.X() - _aConnPos.X();
+ }
+
+ return aReturn;
+ }
+ // -----------------------------------------------------------------------------
+ /** calcPointsYValue calculate the points Y value in relation to the listbox entry
+ @param _pWin the corresponding window
+ @param _pEntry the source or dest entry
+ @param _rNewConPos (in/out) the connection pos
+ @param _rNewDescrPos (in/out) the description pos
+ */
+ void calcPointsYValue(const OTableWindow* _pWin,SvLBoxEntry* _pEntry,Point& _rNewConPos,Point& _rNewDescrPos)
+ {
+ const OTableWindowListBox* pListBox = _pWin->GetListBox();
+ long nRowHeight = pListBox->GetEntryHeight();
+
+ _rNewConPos.Y() = _pWin->GetPosPixel().Y();
+ _rNewConPos.Y() += pListBox->GetPosPixel().Y();
+ long nEntryPos = pListBox->GetEntryPos( _pEntry ).Y();
+
+ if( nEntryPos >= 0 )
+ {
+ _rNewConPos.Y() += nEntryPos;
+ _rNewConPos.Y() += (long)( 0.5 * nRowHeight );
+ }
+ else
+ _rNewConPos.Y() -= (long)( 0.5 * nRowHeight );
+
+ long nListBoxBottom = _pWin->GetPosPixel().Y()
+ + pListBox->GetPosPixel().Y()
+ + pListBox->GetSizePixel().Height();
+ if( _rNewConPos.Y() > nListBoxBottom )
+ _rNewConPos.Y() = nListBoxBottom + 2;
+
+ _rNewDescrPos.Y() = _rNewConPos.Y();
+ }
+ // -----------------------------------------------------------------------------
+}
+
//========================================================================
// class OConnectionLine
//========================================================================
@@ -111,8 +186,6 @@ OConnectionLine::OConnectionLine( OTableConnection* _pConn, const String& _rSour
{
DBG_CTOR(OConnectionLine,NULL);
m_pData = new OConnectionLineData( _rSourceFieldName,_rDestFieldName);
-// m_pData->SetSourceFieldName( _rSourceFieldName );
-// m_pData->SetDestFieldName( _rDestFieldName );
}
//------------------------------------------------------------------------
@@ -133,33 +206,31 @@ OConnectionLine::~OConnectionLine()
void OConnectionLine::SetSourceFieldName( const String& rSourceFieldName )
{
m_pData->SetSourceFieldName( rSourceFieldName );
-// m_pSourceEntry = m_pTabConn->GetSourceWin()->GetListBox()->GetEntryFromText( rSourceFieldName );
}
//------------------------------------------------------------------------
void OConnectionLine::SetDestFieldName( const String& rDestFieldName )
{
m_pData->SetDestFieldName( rDestFieldName );
-// m_pDestEntry = m_pTabConn->GetDestWin()->GetListBox()->GetEntryFromText( rDestFieldName );
}
//------------------------------------------------------------------------
OConnectionLine& OConnectionLine::operator=( const OConnectionLine& rLine )
{
- if( &rLine == this )
- return *this;
-
- // da mir die Daten nicht gehoeren, loesche ich die alten nicht
- m_pData->CopyFrom(*rLine.GetData());
- // CopyFrom ist virtuell, damit ist es kein Problem, wenn m_pData von einem von OTableConnectionData abgeleiteten Typ ist
-
- m_pTabConn = rLine.m_pTabConn;
- m_pSourceEntry = rLine.m_pSourceEntry;
- m_pDestEntry = rLine.m_pDestEntry;
- m_aSourceConnPos = rLine.m_aSourceConnPos;
- m_aDestConnPos = rLine.m_aDestConnPos;
- m_aSourceDescrLinePos = rLine.m_aSourceDescrLinePos;
- m_aDestDescrLinePos = rLine.m_aDestDescrLinePos;
+ if( &rLine != this )
+ {
+ // da mir die Daten nicht gehoeren, loesche ich die alten nicht
+ m_pData->CopyFrom(*rLine.GetData());
+ // CopyFrom ist virtuell, damit ist es kein Problem, wenn m_pData von einem von OTableConnectionData abgeleiteten Typ ist
+
+ m_pTabConn = rLine.m_pTabConn;
+ m_pSourceEntry = rLine.m_pSourceEntry;
+ m_pDestEntry = rLine.m_pDestEntry;
+ m_aSourceConnPos = rLine.m_aSourceConnPos;
+ m_aDestConnPos = rLine.m_aDestConnPos;
+ m_aSourceDescrLinePos = rLine.m_aSourceDescrLinePos;
+ m_aDestDescrLinePos = rLine.m_aDestDescrLinePos;
+ }
return *this;
}
@@ -177,16 +248,6 @@ BOOL OConnectionLine::Connect( const String& rSourceFieldName, const String& rDe
m_pData->SetSourceFieldName( rSourceFieldName );
m_pData->SetDestFieldName( rDestFieldName );
- //////////////////////////////////////////////////////////////////////
- // Entries setzen
-/* m_pSourceEntry = m_pTabConn->GetSourceWin()->GetListBox()->GetEntryFromText( rSourceFieldName );
- if( !m_pSourceEntry )
- return FALSE;
- m_pDestEntry = m_pTabConn->GetDestWin()->GetListBox()->GetEntryFromText( rDestFieldName );
- if( !m_pDestEntry )
- return FALSE;
-*/
-
return TRUE;
}
@@ -237,7 +298,20 @@ Rectangle OConnectionLine::GetBoundingRect()
return aBoundingRect;
}
-
+// -----------------------------------------------------------------------------
+void calcPointX1(const OTableWindow* _pWin,Point& _rNewConPos,Point& _rNewDescrPos)
+{
+ _rNewConPos.X() = _pWin->GetPosPixel().X() + _pWin->GetSizePixel().Width();
+ _rNewDescrPos.X() = _rNewConPos.X();
+ _rNewConPos.X() += DESCRIPT_LINE_WIDTH;
+}
+// -----------------------------------------------------------------------------
+void calcPointX2(const OTableWindow* _pWin,Point& _rNewConPos,Point& _rNewDescrPos)
+{
+ _rNewConPos.X() = _pWin->GetPosPixel().X();
+ _rNewDescrPos.X() = _rNewConPos.X();
+ _rNewConPos.X() -= DESCRIPT_LINE_WIDTH;
+}
//------------------------------------------------------------------------
BOOL OConnectionLine::RecalcLine()
{
@@ -262,133 +336,37 @@ BOOL OConnectionLine::RecalcLine()
aSourceCenter.X() = pSourceWin->GetPosPixel().X() + (long)( 0.5*pSourceWin->GetSizePixel().Width() );
aDestCenter.X() = pDestWin->GetPosPixel().X() + (long)( 0.5*pDestWin->GetSizePixel().Width() );
- if( aDestCenter.X()>aSourceCenter.X() )
- {
- //////////////////////////////////////////////////////////////////////
- // DestWin liegt rechts vom SourceWin
- m_aSourceConnPos.X() = pSourceWin->GetPosPixel().X()+pSourceWin->GetSizePixel().Width();
- m_aSourceDescrLinePos.X() = m_aSourceConnPos.X();
- m_aSourceConnPos.X() += DESCRIPT_LINE_WIDTH;
-
- m_aDestConnPos.X() = pDestWin->GetPosPixel().X();
- m_aDestDescrLinePos.X() = m_aDestConnPos.X();
- m_aDestConnPos.X() -= DESCRIPT_LINE_WIDTH;
- }
- else
- {
- //////////////////////////////////////////////////////////////////////
- // DestWin liegt links vom SourceWin
- m_aSourceConnPos.X() = pSourceWin->GetPosPixel().X();
- m_aSourceDescrLinePos.X() = m_aSourceConnPos.X();
- m_aSourceConnPos.X() -= DESCRIPT_LINE_WIDTH;
-
- m_aDestConnPos.X() = pDestWin->GetPosPixel().X()+pDestWin->GetSizePixel().Width();
- m_aDestDescrLinePos.X() = m_aDestConnPos.X();
- m_aDestConnPos.X() += DESCRIPT_LINE_WIDTH;
- }
- //////////////////////////////////////////////////////////////////////
- // aSourceConnPosY bestimmen
- OTableWindowListBox* pListBox = pSourceWin->GetListBox();
- long nRowHeight = pListBox->GetEntryHeight();
-
- m_aSourceConnPos.Y() = pSourceWin->GetPosPixel().Y();
- m_aSourceConnPos.Y() += pListBox->GetPosPixel().Y();
- long nEntryPos = pListBox->GetEntryPos( m_pSourceEntry ).Y();
-
- if( nEntryPos >= 0 )
+ const OTableWindow* pFirstWin = pDestWin;
+ const OTableWindow* pSecondWin = pSourceWin;
+ Point* pFirstConPos = &m_aDestConnPos;
+ Point* pFirstDescrPos = &m_aDestDescrLinePos;
+ Point* pSecondConPos = &m_aSourceConnPos;
+ Point* pSecondDescrPos = &m_aSourceDescrLinePos;
+ if( aDestCenter.X() > aSourceCenter.X() )
{
- m_aSourceConnPos.Y() += nEntryPos;
- m_aSourceConnPos.Y() += (long)( 0.5 * nRowHeight );
+ pFirstWin = pSourceWin;
+ pSecondWin = pDestWin;
+ pFirstConPos = &m_aSourceConnPos;
+ pFirstDescrPos = &m_aSourceDescrLinePos;
+ pSecondConPos = &m_aDestConnPos;
+ pSecondDescrPos = &m_aDestDescrLinePos;
}
- else
- m_aSourceConnPos.Y() -= (long)( 0.5 * nRowHeight );
- long nListBoxBottom = pSourceWin->GetPosPixel().Y()
- +pListBox->GetPosPixel().Y()
- +pListBox->GetSizePixel().Height();
- if( m_aSourceConnPos.Y() > nListBoxBottom )
- m_aSourceConnPos.Y() = nListBoxBottom + 2;
+ calcPointX1(pFirstWin,*pFirstConPos,*pFirstDescrPos);
+ calcPointX2(pSecondWin,*pSecondConPos,*pSecondDescrPos);
- m_aSourceDescrLinePos.Y() = m_aSourceConnPos.Y();
+ //////////////////////////////////////////////////////////////////////
+ // aSourceConnPosY bestimmen
+ calcPointsYValue(pSourceWin,m_pSourceEntry,m_aSourceConnPos,m_aSourceDescrLinePos);
//////////////////////////////////////////////////////////////////////
// aDestConnPosY bestimmen
- pListBox = pDestWin->GetListBox();
-
- m_aDestConnPos.Y() = pDestWin->GetPosPixel().Y();
- m_aDestConnPos.Y() += pListBox->GetPosPixel().Y();
- nEntryPos = pListBox->GetEntryPos( m_pDestEntry ).Y();
- if( nEntryPos >= 0 )
- {
- m_aDestConnPos.Y() += nEntryPos;
- m_aDestConnPos.Y() += (long)( 0.5 * nRowHeight );
- }
- else
- m_aDestConnPos.Y() -= (long)( 0.5 * nRowHeight );
-
- nListBoxBottom = pDestWin->GetPosPixel().Y()
- +pListBox->GetPosPixel().Y()
- +pListBox->GetSizePixel().Height();
- if( m_aDestConnPos.Y() > nListBoxBottom )
- m_aDestConnPos.Y() = nListBoxBottom + 2;
-
- m_aDestDescrLinePos.Y() = m_aDestConnPos.Y();
+ calcPointsYValue(pDestWin,m_pDestEntry,m_aDestConnPos,m_aDestDescrLinePos);
return TRUE;
}
-
-//------------------------------------------------------------------------
-Rectangle OConnectionLine::GetSourceTextPos() const
-{
- const OTableWindow* pDestWin = m_pTabConn->GetDestWin();
- OTableWindowListBox* pListBox = pDestWin ? pDestWin->GetListBox() : NULL;
- DBG_ASSERT(pDestWin && pListBox, "OConnectionLine::GetSourceTextPos : invalid call !");
-
- long nRowHeight = pListBox->GetEntryHeight();
-
- Rectangle aReturn;
- aReturn.Top() = m_aSourceConnPos.Y() - nRowHeight;
- aReturn.Bottom() = aReturn.Top() + nRowHeight;
- if (m_aSourceDescrLinePos.X() < m_aSourceConnPos.X())
- {
- aReturn.Left() = m_aSourceDescrLinePos.X();
- aReturn.Right() = aReturn.Left() + m_aSourceConnPos.X() - m_aSourceDescrLinePos.X();
- }
- else
- {
- aReturn.Left() = m_aSourceConnPos.X();
- aReturn.Right() = aReturn.Left() + m_aSourceDescrLinePos.X() - m_aSourceConnPos.X();
- }
-
- return aReturn;
-}
-
-//------------------------------------------------------------------------
-Rectangle OConnectionLine::GetDestTextPos() const
-{
- const OTableWindow* pSourceWin = m_pTabConn->GetSourceWin();
- OTableWindowListBox* pListBox = pSourceWin ? pSourceWin->GetListBox() : NULL;
- DBG_ASSERT(pSourceWin && pListBox, "OConnectionLine::GetSourceTextPos : invalid call !");
-
- long nRowHeight = pListBox->GetEntryHeight();
-
- Rectangle aReturn;
- aReturn.Top() = m_aDestConnPos.Y() - nRowHeight;
- aReturn.Bottom() = aReturn.Top() + nRowHeight;
- if (m_aDestDescrLinePos.X() < m_aDestConnPos.X())
- {
- aReturn.Left() = m_aDestDescrLinePos.X();
- aReturn.Right() = aReturn.Left() + m_aDestConnPos.X() - m_aDestDescrLinePos.X();
- }
- else
- {
- aReturn.Left() = m_aDestConnPos.X();
- aReturn.Right() = aReturn.Left() + m_aDestDescrLinePos.X() - m_aDestConnPos.X();
- }
-
- return aReturn;
-}
+// -----------------------------------------------------------------------------
//------------------------------------------------------------------------
void OConnectionLine::Draw( OutputDevice* pOutDev )
@@ -425,26 +403,24 @@ void OConnectionLine::Draw( OutputDevice* pOutDev )
xOffset = 0;
yOffset = 1;
}
- pOutDev->DrawLine(m_aSourceConnPos + Point(-xOffset, -yOffset), m_aDestConnPos + Point(-xOffset, -yOffset));
- pOutDev->DrawLine(m_aSourceConnPos + Point(xOffset, yOffset), m_aDestConnPos + Point(xOffset, yOffset));
+
+ Point aPos1(-xOffset, -yOffset);
+ Point aPos2(xOffset, yOffset);
+ pOutDev->DrawLine(m_aSourceConnPos + aPos1, m_aDestConnPos + aPos1);
+ pOutDev->DrawLine(m_aSourceConnPos + aPos2, m_aDestConnPos + aPos2);
}
//////////////////////////////////////////////////////////////////////
- // Zeichnen der Verbindungs-Rechtecke
-// pOutDev->SetLineColor(Application::GetSettings().GetStyleSettings().GetWindowTextColor());
- Rectangle aSourceRect( m_aSourceDescrLinePos-Point(nRectSize,nRectSize),
- m_aSourceDescrLinePos+Point(nRectSize,nRectSize) );
-
- Rectangle aDestRect( m_aDestDescrLinePos-Point(nRectSize,nRectSize),
- m_aDestDescrLinePos+Point(nRectSize,nRectSize) );
+ // draw the connection rectangles
pOutDev->SetFillColor(Application::GetSettings().GetStyleSettings().GetWindowColor());
- pOutDev->DrawRect( aSourceRect );
- pOutDev->DrawRect( aDestRect );
-}
-//------------------------------------------------------------------------
-BOOL OConnectionLine::IsValid()
+ Point aVector(nRectSize,nRectSize);
+ pOutDev->DrawRect( calcRect(m_aSourceDescrLinePos,aVector) );
+ pOutDev->DrawRect( calcRect( m_aDestDescrLinePos,aVector) );
+}
+// -----------------------------------------------------------------------------
+BOOL OConnectionLine::IsValid() const
{
return m_pData.isValid() && m_pData->IsValid();
}
@@ -483,5 +459,24 @@ bool OConnectionLine::CheckHit( const Point& rMousePos ) const
return false;
}
// -----------------------------------------------------------------------------
+Rectangle OConnectionLine::GetSourceTextPos() const
+{
+ return GetTextPos(m_pTabConn->GetSourceWin(),m_aSourceConnPos,m_aSourceDescrLinePos);
+}
+// -----------------------------------------------------------------------------
+Rectangle OConnectionLine::GetDestTextPos() const
+{
+ return GetTextPos(m_pTabConn->GetDestWin(),m_aDestConnPos,m_aDestDescrLinePos);
+}
+// -----------------------------------------------------------------------------
+Point OConnectionLine::getMidPoint() const
+{
+ Point aDest = m_aDestConnPos - m_aSourceConnPos;
+ aDest.X() *= 0.5;
+ aDest.Y() *= 0.5;
+
+ return m_aSourceConnPos + aDest;
+}
+// -----------------------------------------------------------------------------