xref: /trunk/main/dbaccess/source/ui/relationdesign/RTableConnection.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_dbaccess.hxx"
30 #ifndef DBAUI_RTABLECONNECTION_HXX
31 #include "RTableConnection.hxx"
32 #endif
33 #ifndef _TOOLS_DEBUG_HXX
34 #include <tools/debug.hxx>
35 #endif
36 #ifndef DBAUI_RELATION_TABLEVIEW_HXX
37 #include "RelationTableView.hxx"
38 #endif
39 #ifndef _SV_SVAPP_HXX
40 #include <vcl/svapp.hxx>
41 #endif
42 #ifndef DBAUI_CONNECTIONLINE_HXX
43 #include "ConnectionLine.hxx"
44 #endif
45 
46 using namespace dbaui;
47 //========================================================================
48 // class ORelationTableConnection
49 //========================================================================
50 DBG_NAME(ORelationTableConnection)
51 //------------------------------------------------------------------------
52 ORelationTableConnection::ORelationTableConnection( ORelationTableView* pContainer,
53                                                    const TTableConnectionData::value_type& pTabConnData )
54     :OTableConnection( pContainer, pTabConnData )
55 {
56     DBG_CTOR(ORelationTableConnection,NULL);
57 }
58 
59 //------------------------------------------------------------------------
60 ORelationTableConnection::ORelationTableConnection( const ORelationTableConnection& rConn )
61     : OTableConnection( rConn )
62 {
63     DBG_CTOR(ORelationTableConnection,NULL);
64     // keine eigenen Members, also reicht die Basisklassenfunktionalitaet
65 }
66 
67 //------------------------------------------------------------------------
68 ORelationTableConnection::~ORelationTableConnection()
69 {
70     DBG_DTOR(ORelationTableConnection,NULL);
71 }
72 
73 //------------------------------------------------------------------------
74 ORelationTableConnection& ORelationTableConnection::operator=( const ORelationTableConnection& rConn )
75 {
76     DBG_CHKTHIS(ORelationTableConnection,NULL);
77     // nicht dass es was aendern wuerde, da die Basisklasse das auch testet und ich keine eigenen Members zu kopieren habe
78     if (&rConn == this)
79         return *this;
80 
81     OTableConnection::operator=( rConn );
82     return *this;
83 }
84 
85 
86 //------------------------------------------------------------------------
87 void ORelationTableConnection::Draw( const Rectangle& rRect )
88 {
89     DBG_CHKTHIS(ORelationTableConnection,NULL);
90     OTableConnection::Draw( rRect );
91     ORelationTableConnectionData* pData = static_cast< ORelationTableConnectionData* >(GetData().get());
92     if ( pData && (pData->GetCardinality() == CARDINAL_UNDEFINED) )
93         return;
94 
95     //////////////////////////////////////////////////////////////////////
96     // Linien nach oberster Linie durchsuchen
97     Rectangle aBoundingRect;
98     long nTop = GetBoundingRect().Bottom();
99     long nTemp;
100 
101     const OConnectionLine* pTopLine = NULL;
102     const ::std::vector<OConnectionLine*>* pConnLineList = GetConnLineList();
103     ::std::vector<OConnectionLine*>::const_iterator aIter = pConnLineList->begin();
104     ::std::vector<OConnectionLine*>::const_iterator aEnd = pConnLineList->end();
105     for(;aIter != aEnd;++aIter)
106     {
107         if( (*aIter)->IsValid() )
108         {
109             aBoundingRect = (*aIter)->GetBoundingRect();
110             nTemp = aBoundingRect.Top();
111             if( nTemp<nTop )
112             {
113                 nTop = nTemp;
114                 pTopLine = (*aIter);
115             }
116         }
117     }
118 
119     //////////////////////////////////////////////////////////////////////
120     // Kardinalitaet antragen
121     if( !pTopLine )
122         return;
123 
124     Rectangle aSourcePos = pTopLine->GetSourceTextPos();
125     Rectangle aDestPos = pTopLine->GetDestTextPos();
126 
127     String aSourceText;
128     String aDestText;
129 
130     switch( pData->GetCardinality() )
131     {
132     case CARDINAL_ONE_MANY:
133         aSourceText  ='1';
134         aDestText  ='n';
135         break;
136 
137     case CARDINAL_MANY_ONE:
138         aSourceText  ='n';
139         aDestText  ='1';
140         break;
141 
142     case CARDINAL_ONE_ONE:
143         aSourceText  ='1';
144         aDestText  ='1';
145         break;
146     }
147 
148     if (IsSelected())
149         GetParent()->SetTextColor(Application::GetSettings().GetStyleSettings().GetHighlightColor());
150     else
151         GetParent()->SetTextColor(Application::GetSettings().GetStyleSettings().GetWindowTextColor());
152 
153 
154     GetParent()->DrawText( aSourcePos, aSourceText, TEXT_DRAW_CLIP | TEXT_DRAW_CENTER | TEXT_DRAW_BOTTOM);
155     GetParent()->DrawText( aDestPos, aDestText, TEXT_DRAW_CLIP | TEXT_DRAW_CENTER | TEXT_DRAW_BOTTOM);
156 }
157 // -----------------------------------------------------------------------------
158