1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_dbaccess.hxx" 26 #ifndef DBAUI_RTABLECONNECTION_HXX 27 #include "RTableConnection.hxx" 28 #endif 29 #ifndef _TOOLS_DEBUG_HXX 30 #include <tools/debug.hxx> 31 #endif 32 #ifndef DBAUI_RELATION_TABLEVIEW_HXX 33 #include "RelationTableView.hxx" 34 #endif 35 #ifndef _SV_SVAPP_HXX 36 #include <vcl/svapp.hxx> 37 #endif 38 #ifndef DBAUI_CONNECTIONLINE_HXX 39 #include "ConnectionLine.hxx" 40 #endif 41 42 using namespace dbaui; 43 //======================================================================== 44 // class ORelationTableConnection 45 //======================================================================== 46 DBG_NAME(ORelationTableConnection) 47 //------------------------------------------------------------------------ 48 ORelationTableConnection::ORelationTableConnection( ORelationTableView* pContainer, 49 const TTableConnectionData::value_type& pTabConnData ) 50 :OTableConnection( pContainer, pTabConnData ) 51 { 52 DBG_CTOR(ORelationTableConnection,NULL); 53 } 54 55 //------------------------------------------------------------------------ 56 ORelationTableConnection::ORelationTableConnection( const ORelationTableConnection& rConn ) 57 : OTableConnection( rConn ) 58 { 59 DBG_CTOR(ORelationTableConnection,NULL); 60 // keine eigenen Members, also reicht die Basisklassenfunktionalitaet 61 } 62 63 //------------------------------------------------------------------------ 64 ORelationTableConnection::~ORelationTableConnection() 65 { 66 DBG_DTOR(ORelationTableConnection,NULL); 67 } 68 69 //------------------------------------------------------------------------ 70 ORelationTableConnection& ORelationTableConnection::operator=( const ORelationTableConnection& rConn ) 71 { 72 DBG_CHKTHIS(ORelationTableConnection,NULL); 73 // nicht dass es was aendern wuerde, da die Basisklasse das auch testet und ich keine eigenen Members zu kopieren habe 74 if (&rConn == this) 75 return *this; 76 77 OTableConnection::operator=( rConn ); 78 return *this; 79 } 80 81 82 //------------------------------------------------------------------------ 83 void ORelationTableConnection::Draw( const Rectangle& rRect ) 84 { 85 DBG_CHKTHIS(ORelationTableConnection,NULL); 86 OTableConnection::Draw( rRect ); 87 ORelationTableConnectionData* pData = static_cast< ORelationTableConnectionData* >(GetData().get()); 88 if ( pData && (pData->GetCardinality() == CARDINAL_UNDEFINED) ) 89 return; 90 91 ////////////////////////////////////////////////////////////////////// 92 // Linien nach oberster Linie durchsuchen 93 Rectangle aBoundingRect; 94 long nTop = GetBoundingRect().Bottom(); 95 long nTemp; 96 97 const OConnectionLine* pTopLine = NULL; 98 const ::std::vector<OConnectionLine*>* pConnLineList = GetConnLineList(); 99 ::std::vector<OConnectionLine*>::const_iterator aIter = pConnLineList->begin(); 100 ::std::vector<OConnectionLine*>::const_iterator aEnd = pConnLineList->end(); 101 for(;aIter != aEnd;++aIter) 102 { 103 if( (*aIter)->IsValid() ) 104 { 105 aBoundingRect = (*aIter)->GetBoundingRect(); 106 nTemp = aBoundingRect.Top(); 107 if( nTemp<nTop ) 108 { 109 nTop = nTemp; 110 pTopLine = (*aIter); 111 } 112 } 113 } 114 115 ////////////////////////////////////////////////////////////////////// 116 // Kardinalitaet antragen 117 if( !pTopLine ) 118 return; 119 120 Rectangle aSourcePos = pTopLine->GetSourceTextPos(); 121 Rectangle aDestPos = pTopLine->GetDestTextPos(); 122 123 String aSourceText; 124 String aDestText; 125 126 switch( pData->GetCardinality() ) 127 { 128 case CARDINAL_ONE_MANY: 129 aSourceText ='1'; 130 aDestText ='n'; 131 break; 132 133 case CARDINAL_MANY_ONE: 134 aSourceText ='n'; 135 aDestText ='1'; 136 break; 137 138 case CARDINAL_ONE_ONE: 139 aSourceText ='1'; 140 aDestText ='1'; 141 break; 142 } 143 144 if (IsSelected()) 145 GetParent()->SetTextColor(Application::GetSettings().GetStyleSettings().GetHighlightColor()); 146 else 147 GetParent()->SetTextColor(Application::GetSettings().GetStyleSettings().GetWindowTextColor()); 148 149 150 GetParent()->DrawText( aSourcePos, aSourceText, TEXT_DRAW_CLIP | TEXT_DRAW_CENTER | TEXT_DRAW_BOTTOM); 151 GetParent()->DrawText( aDestPos, aDestText, TEXT_DRAW_CLIP | TEXT_DRAW_CENTER | TEXT_DRAW_BOTTOM); 152 } 153 // ----------------------------------------------------------------------------- 154