xref: /AOO41X/main/sc/source/ui/view/viewfun6.cxx (revision d3e0dd8eb215533c15e891ee35bd141abe9397ee)
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_sc.hxx"
26 
27 #include <svx/svdundo.hxx>
28 #include <svx/svdocapt.hxx>
29 #include <sfx2/bindings.hxx>
30 #include <sfx2/dispatch.hxx>
31 #include <vcl/msgbox.hxx>
32 #include <vcl/sound.hxx>
33 
34 #include "viewfunc.hxx"
35 #include "detfunc.hxx"
36 #include "detdata.hxx"
37 #include "viewdata.hxx"
38 #include "drwlayer.hxx"
39 #include "docsh.hxx"
40 #include "undocell.hxx"
41 #include "futext.hxx"
42 #include "docfunc.hxx"
43 #include "globstr.hrc"
44 #include "sc.hrc"
45 #include "fusel.hxx"
46 
47 //==================================================================
48 
DetectiveAddPred()49 void ScViewFunc::DetectiveAddPred()
50 {
51     ScDocShell* pDocSh = GetViewData()->GetDocShell();
52     sal_Bool bDone = pDocSh->GetDocFunc().
53                     DetectiveAddPred( GetViewData()->GetCurPos() );
54     if (!bDone)
55         Sound::Beep();
56 
57     RecalcPPT();    //! use broadcast in DocFunc instead?
58 }
59 
DetectiveDelPred()60 void ScViewFunc::DetectiveDelPred()
61 {
62     ScDocShell* pDocSh = GetViewData()->GetDocShell();
63     sal_Bool bDone = pDocSh->GetDocFunc().
64                     DetectiveDelPred( GetViewData()->GetCurPos() );
65     if (!bDone)
66         Sound::Beep();
67 
68     RecalcPPT();
69 }
70 
DetectiveAddSucc()71 void ScViewFunc::DetectiveAddSucc()
72 {
73     ScDocShell* pDocSh = GetViewData()->GetDocShell();
74     sal_Bool bDone = pDocSh->GetDocFunc().
75                     DetectiveAddSucc( GetViewData()->GetCurPos() );
76     if (!bDone)
77         Sound::Beep();
78 
79     RecalcPPT();
80 }
81 
DetectiveDelSucc()82 void ScViewFunc::DetectiveDelSucc()
83 {
84     ScDocShell* pDocSh = GetViewData()->GetDocShell();
85     sal_Bool bDone = pDocSh->GetDocFunc().
86                     DetectiveDelSucc( GetViewData()->GetCurPos() );
87     if (!bDone)
88         Sound::Beep();
89 
90     RecalcPPT();
91 }
92 
DetectiveAddError()93 void ScViewFunc::DetectiveAddError()
94 {
95     ScDocShell* pDocSh = GetViewData()->GetDocShell();
96     sal_Bool bDone = pDocSh->GetDocFunc().
97                     DetectiveAddError( GetViewData()->GetCurPos() );
98     if (!bDone)
99         Sound::Beep();
100 
101     RecalcPPT();
102 }
103 
DetectiveDelAll()104 void ScViewFunc::DetectiveDelAll()
105 {
106     ScDocShell* pDocSh = GetViewData()->GetDocShell();
107     sal_Bool bDone = pDocSh->GetDocFunc().
108                     DetectiveDelAll( GetViewData()->GetTabNo() );
109     if (!bDone)
110         Sound::Beep();
111 
112     RecalcPPT();
113 }
114 
DetectiveMarkInvalid()115 void ScViewFunc::DetectiveMarkInvalid()
116 {
117     ScDocShell* pDocSh = GetViewData()->GetDocShell();
118     sal_Bool bDone = pDocSh->GetDocFunc().
119                     DetectiveMarkInvalid( GetViewData()->GetTabNo() );
120     if (!bDone)
121         Sound::Beep();
122 
123     RecalcPPT();
124 }
125 
DetectiveRefresh()126 void ScViewFunc::DetectiveRefresh()
127 {
128     ScDocShell* pDocSh = GetViewData()->GetDocShell();
129     sal_Bool bDone = pDocSh->GetDocFunc().DetectiveRefresh();
130     if (!bDone)
131         Sound::Beep();
132 
133     RecalcPPT();
134 }
135 
136 //---------------------------------------------------------------------------
137 
ShowNote(bool bShow)138 void ScViewFunc::ShowNote( bool bShow )
139 {
140     if( bShow )
141         HideNoteMarker();
142     const ScViewData& rViewData = *GetViewData();
143     ScAddress aPos( rViewData.GetCurX(), rViewData.GetCurY(), rViewData.GetTabNo() );
144     // show note moved to ScDocFunc, to be able to use it in notesuno.cxx
145     rViewData.GetDocShell()->GetDocFunc().ShowNote( aPos, bShow );
146 }
147 
EditNote()148 void ScViewFunc::EditNote()
149 {
150     //  zum Editieren einblenden und aktivieren
151 
152     ScDocShell* pDocSh = GetViewData()->GetDocShell();
153     ScDocument* pDoc = pDocSh->GetDocument();
154     SCCOL nCol = GetViewData()->GetCurX();
155     SCROW nRow = GetViewData()->GetCurY();
156     SCTAB nTab = GetViewData()->GetTabNo();
157     ScAddress aPos( nCol, nRow, nTab );
158 
159     // start drawing undo to catch undo action for insertion of the caption object
160     pDocSh->MakeDrawLayer();
161     ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer();
162     pDrawLayer->BeginCalcUndo(true);
163     // generated undo action is processed in FuText::StopEditMode
164 
165     // get existing note or create a new note (including caption drawing object)
166     if( ScPostIt* pNote = pDoc->GetOrCreateNote( aPos ) )
167     {
168         // hide temporary note caption
169         HideNoteMarker();
170         // show caption object without changing internal visibility state
171         pNote->ShowCaptionTemp( aPos );
172 
173         /*  Drawing object has been created in ScDocument::GetOrCreateNote() or
174             in ScPostIt::ShowCaptionTemp(), so ScPostIt::GetCaption() should
175             return a caption object. */
176         if( SdrCaptionObj* pCaption = pNote->GetCaption() )
177         {
178             // #i33764# enable the resize handles before starting edit mode
179             if( FuPoor* pDraw = GetDrawFuncPtr() )
180                 static_cast< FuSelection* >( pDraw )->ActivateNoteHandles( pCaption );
181 
182             // activate object (as in FuSelection::TestComment)
183             GetViewData()->GetDispatcher().Execute( SID_DRAW_NOTEEDIT, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD );
184             // jetzt den erzeugten FuText holen und in den EditModus setzen
185             FuPoor* pPoor = GetDrawFuncPtr();
186             if ( pPoor && (pPoor->GetSlotID() == SID_DRAW_NOTEEDIT) )    // hat keine RTTI
187             {
188                 ScrollToObject( pCaption );         // Objekt komplett sichtbar machen
189                 static_cast< FuText* >( pPoor )->SetInEditMode( pCaption );
190             }
191         }
192     }
193 }
194