xref: /trunk/main/sd/source/ui/func/fuconuno.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_sd.hxx"
30 
31 #include "fuconuno.hxx"
32 #include <svl/aeitem.hxx>
33 #include <sfx2/dispatch.hxx>
34 #include <sfx2/viewfrm.hxx>
35 #include <sfx2/request.hxx>
36 #include <svl/intitem.hxx>
37 
38 
39 #include <svx/fmglob.hxx>
40 
41 #include <svx/dialogs.hrc>
42 
43 class SbModule;
44 
45 
46 #include "app.hrc"
47 #include "glob.hrc"
48 #include "ViewShell.hxx"
49 #include "View.hxx"
50 #ifndef SD_WINDOW_SHELL_HXX
51 #include "Window.hxx"
52 #endif
53 #include "ViewShellBase.hxx"
54 #include "ToolBarManager.hxx"
55 #include "drawdoc.hxx"
56 #include "sdresid.hxx"
57 #include "res_bmp.hrc"
58 
59 namespace sd {
60 
61 TYPEINIT1( FuConstructUnoControl, FuConstruct );
62 
63 /*************************************************************************
64 |*
65 |* Konstruktor
66 |*
67 \************************************************************************/
68 
69 FuConstructUnoControl::FuConstructUnoControl (
70     ViewShell*  pViewSh,
71     ::sd::Window*       pWin,
72     ::sd::View*         pView,
73     SdDrawDocument* pDoc,
74     SfxRequest&     rReq)
75     : FuConstruct(pViewSh, pWin, pView, pDoc, rReq)
76 {
77 }
78 
79 FunctionReference FuConstructUnoControl::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq, bool bPermanent )
80 {
81     FuConstructUnoControl* pFunc;
82     FunctionReference xFunc( pFunc = new FuConstructUnoControl( pViewSh, pWin, pView, pDoc, rReq ) );
83     xFunc->DoExecute(rReq);
84     pFunc->SetPermanent(bPermanent);
85     return xFunc;
86 }
87 
88 void FuConstructUnoControl::DoExecute( SfxRequest& rReq )
89 {
90     FuConstruct::DoExecute( rReq );
91 
92     SFX_REQUEST_ARG( rReq, pInventorItem, SfxUInt32Item, SID_FM_CONTROL_INVENTOR, sal_False );
93     SFX_REQUEST_ARG( rReq, pIdentifierItem, SfxUInt16Item, SID_FM_CONTROL_IDENTIFIER, sal_False );
94     if( pInventorItem )
95         nInventor = pInventorItem->GetValue();
96     if( pIdentifierItem )
97         nIdentifier = pIdentifierItem->GetValue();
98 
99     mpViewShell->GetViewShellBase().GetToolBarManager()->SetToolBar(
100         ToolBarManager::TBG_FUNCTION,
101         ToolBarManager::msDrawingObjectToolBar);
102 }
103 
104 /*************************************************************************
105 |*
106 |* MouseButtonDown-event
107 |*
108 \************************************************************************/
109 sal_Bool FuConstructUnoControl::MouseButtonDown(const MouseEvent& rMEvt)
110 {
111     sal_Bool bReturn = FuConstruct::MouseButtonDown(rMEvt);
112 
113     if ( rMEvt.IsLeft() && !mpView->IsAction() )
114     {
115         Point aPnt( mpWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
116         mpWindow->CaptureMouse();
117         sal_uInt16 nDrgLog = sal_uInt16 ( mpWindow->PixelToLogic(Size(DRGPIX,0)).Width() );
118         mpView->BegCreateObj(aPnt, (OutputDevice*) NULL, nDrgLog);
119         bReturn = sal_True;
120     }
121     return bReturn;
122 }
123 
124 /*************************************************************************
125 |*
126 |* MouseMove-event
127 |*
128 \************************************************************************/
129 sal_Bool FuConstructUnoControl::MouseMove(const MouseEvent& rMEvt)
130 {
131     return FuConstruct::MouseMove(rMEvt);
132 }
133 
134 /*************************************************************************
135 |*
136 |* MouseButtonUp-event
137 |*
138 \************************************************************************/
139 sal_Bool FuConstructUnoControl::MouseButtonUp(const MouseEvent& rMEvt)
140 {
141     sal_Bool bReturn = sal_False;
142 
143     if ( mpView->IsCreateObj() && rMEvt.IsLeft() )
144     {
145         Point aPnt( mpWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
146         mpView->EndCreateObj(SDRCREATE_FORCEEND);
147         bReturn = sal_True;
148     }
149 
150     bReturn = (FuConstruct::MouseButtonUp(rMEvt) || bReturn);
151 
152     if (!bPermanent)
153         mpViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
154 
155     return (bReturn);
156 }
157 
158 /*************************************************************************
159 |*
160 |* Tastaturereignisse bearbeiten
161 |*
162 |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls
163 |* sal_False.
164 |*
165 \************************************************************************/
166 sal_Bool FuConstructUnoControl::KeyInput(const KeyEvent& rKEvt)
167 {
168     sal_Bool bReturn = FuConstruct::KeyInput(rKEvt);
169     return(bReturn);
170 }
171 
172 /*************************************************************************
173 |*
174 |* Function aktivieren
175 |*
176 \************************************************************************/
177 void FuConstructUnoControl::Activate()
178 {
179     mpView->SetCurrentObj( nIdentifier, nInventor );
180 
181     aNewPointer = Pointer(POINTER_DRAW_RECT);
182     aOldPointer = mpWindow->GetPointer();
183     mpWindow->SetPointer( aNewPointer );
184 
185     aOldLayer = mpView->GetActiveLayer();
186     String aStr(SdResId(STR_LAYER_CONTROLS));
187     mpView->SetActiveLayer( aStr );
188 
189     FuConstruct::Activate();
190 }
191 
192 /*************************************************************************
193 |*
194 |* Function deaktivieren
195 |*
196 \************************************************************************/
197 void FuConstructUnoControl::Deactivate()
198 {
199     FuConstruct::Deactivate();
200     mpView->SetActiveLayer( aOldLayer );
201     mpWindow->SetPointer( aOldPointer );
202 }
203 
204 // #97016#
205 SdrObject* FuConstructUnoControl::CreateDefaultObject(const sal_uInt16, const Rectangle& rRectangle)
206 {
207     // case SID_FM_CREATE_CONTROL:
208 
209     SdrObject* pObj = SdrObjFactory::MakeNewObject(
210         mpView->GetCurrentObjInventor(), mpView->GetCurrentObjIdentifier(),
211         0L, mpDoc);
212 
213     if(pObj)
214     {
215         pObj->SetLogicRect(rRectangle);
216     }
217 
218     return pObj;
219 }
220 
221 } // end of namespace sd
222