xref: /trunk/main/sw/source/ui/lingu/sdrhhcwrap.cxx (revision 9204bf8294f34a46abdfeceee27c48e7b7b2ef12)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
23 #include "precompiled_sw.hxx"
24 
25 #include <hintids.hxx>
26 #include <svx/svditer.hxx>
27 #include <svx/svdotext.hxx>
28 #include <editeng/editdata.hxx>
29 #include <svx/svdpagv.hxx>
30 #include <svx/svdogrp.hxx>
31 #include <sfx2/printer.hxx>
32 #include <svx/svdmodel.hxx>
33 #include <editeng/langitem.hxx>
34 #include <com/sun/star/beans/XPropertySet.hpp>
35 #include <linguistic/lngprops.hxx>
36 #include <sfx2/sfxuno.hxx>
37 #include <svx/svdview.hxx>
38 #include <editeng/unolingu.hxx>
39 #include <unotools/localedatawrapper.hxx>
40 #include <sdrhhcwrap.hxx>
41 #include <frmfmt.hxx>
42 #include <docsh.hxx>        //     "     "     "
43 #include <wrtsh.hxx>        //  MakeVisible
44 #include <view.hxx>
45 #include <dcontact.hxx>     // Spelling von DrawObj
46 #include <doc.hxx>        //     "     "     "
47 #include <docary.hxx>
48 #include <edtwin.hxx>
49 #include <drawdoc.hxx>
50 
51 using namespace ::com::sun::star;
52 using ::rtl::OUString;
53 
54 //////////////////////////////////////////////////////////////////////
55 
56 SdrHHCWrapper::SdrHHCWrapper( SwView* pVw,
57        LanguageType nSourceLanguage, LanguageType nTargetLanguage,
58        const Font* pTargetFnt,
59        sal_Int32 nConvOptions,
60        sal_Bool bInteractive ) :
61     SdrOutliner(pVw->GetDocShell()->GetDoc()->GetDrawModel()->
62                              GetDrawOutliner().GetEmptyItemSet().GetPool(),
63                 OUTLINERMODE_TEXTOBJECT ),
64     pView( pVw ),
65     pTextObj( NULL ),
66     pOutlView( NULL ),
67     nOptions( nConvOptions ),
68     nDocIndex( 0 ),
69     nSourceLang( nSourceLanguage ),
70     nTargetLang( nTargetLanguage ),
71     pTargetFont( pTargetFnt ),
72     bIsInteractive( bInteractive )
73 {
74     SetRefDevice( pView->GetDocShell()->GetDoc()->getPrinter( false ) );
75 
76     MapMode aMapMode (MAP_TWIP);
77     SetRefMapMode(aMapMode);
78 
79     Size aSize( 1, 1 );
80     SetPaperSize( aSize );
81 
82     pOutlView = new OutlinerView( this, &(pView->GetEditWin()) );
83     pOutlView->GetOutliner()->SetRefDevice(pView->GetWrtShell().getIDocumentDeviceAccess()->getPrinter( false ));
84 
85     // Hack: Es sollten alle SdrTextObj-Attribute an die EditEngine
86     //       uebertragen werden.
87     pOutlView->SetBackgroundColor( Color( COL_WHITE ) );
88 
89 
90     InsertView( pOutlView );
91     Point aPoint( 0, 0 );
92     Rectangle aRect( aPoint, aSize );
93     pOutlView->SetOutputArea( aRect );
94 //  SetText( NULL );
95     ClearModifyFlag();
96 }
97 
98 SdrHHCWrapper::~SdrHHCWrapper()
99 {
100     if (pTextObj)
101     {
102         SdrView *pSdrView = pView->GetWrtShell().GetDrawView();
103         ASSERT( pSdrView, "SdrHHCWrapper without DrawView?" );
104         pSdrView->SdrEndTextEdit( sal_True );
105         SetUpdateMode(sal_False);
106         pOutlView->SetOutputArea( Rectangle( Point(), Size(1, 1) ) );
107 //      SetPaperSize( Size(1, 1) );
108 //      SetText(NULL);
109 //      pTextObj = NULL;
110     }
111     RemoveView( pOutlView );
112     delete pOutlView;
113 }
114 
115 
116 void SdrHHCWrapper::StartTextConversion()
117 {
118     pOutlView->StartTextConversion( nSourceLang, nTargetLang, pTargetFont, nOptions, bIsInteractive, sal_True );
119 }
120 
121 
122 sal_Bool SdrHHCWrapper::ConvertNextDocument()
123 {
124     sal_Bool bNextDoc = sal_False;
125 
126     if ( pTextObj )
127     {
128         SdrView *pSdrView = pView->GetWrtShell().GetDrawView();
129         ASSERT( pSdrView, "SdrHHCWrapper without DrawView?" );
130         pSdrView->SdrEndTextEdit( sal_True );
131         SetUpdateMode(sal_False);
132         pOutlView->SetOutputArea( Rectangle( Point(), Size(1, 1) ) );
133         SetPaperSize( Size(1, 1) );
134         Clear();
135         pTextObj = NULL;
136     }
137 
138     sal_uInt16 n = nDocIndex;
139 
140     std::list<SdrTextObj*> aTextObjs;
141     SwDrawContact::GetTextObjectsFromFmt( aTextObjs, pView->GetDocShell()->GetDoc() );
142     for ( std::list<SdrTextObj*>::iterator aIt = aTextObjs.begin(); aIt != aTextObjs.end(); aIt++ )
143     {
144         pTextObj = (*aIt);
145         if ( pTextObj )
146         {
147             OutlinerParaObject* pParaObj = pTextObj->GetOutlinerParaObject();
148             if ( pParaObj )
149             {
150                 SetPaperSize( pTextObj->GetLogicRect().GetSize() );
151                 SetText( *pParaObj );
152 
153                 ClearModifyFlag();
154 
155                 //!! update mode needs to be set to true otherwise
156                 //!! the call to 'HasConvertibleTextPortion' will not always
157                 //!! work correctly because the document may not be properly
158                 //!! formatted when some information is accessed, and thus
159                 //!! incorrect results get returned.
160                 SetUpdateMode(sal_True);
161                 if (HasConvertibleTextPortion( nSourceLang ))
162                 {
163                     SdrView *pSdrView = pView->GetWrtShell().GetDrawView();
164                     ASSERT( pSdrView, "SdrHHCWrapper without DrawView?" );
165                     SdrPageView* pPV = pSdrView->GetSdrPageView();
166                     nDocIndex = n;
167                     bNextDoc = sal_True;
168                     pOutlView->SetOutputArea( Rectangle( Point(), Size(1,1)));
169                     SetPaperSize( pTextObj->GetLogicRect().GetSize() );
170                     SetUpdateMode(sal_True);
171                     pView->GetWrtShell().MakeVisible(pTextObj->GetLogicRect());
172 
173                     pSdrView->SdrBeginTextEdit(pTextObj, pPV, &pView->GetEditWin(), sal_False, this, pOutlView, sal_True, sal_True);
174                 }
175                 else
176                     SetUpdateMode(sal_False);
177             }
178 
179             if ( !bNextDoc )
180                 pTextObj = NULL;
181             else
182                 break;
183         }
184     }
185 
186     ClearModifyFlag();
187 
188     return bNextDoc;
189 }
190 
191 //////////////////////////////////////////////////////////////////////
192