xref: /AOO41X/main/sd/source/ui/table/tableobjectbar.cxx (revision ff0525f24f03981d56b7579b645949f111420994)
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_sd.hxx"
26 
27 #include <sfx2/msg.hxx>
28 #include <sfx2/app.hxx>
29 #include <sfx2/sfxsids.hrc>
30 #include <sfx2/request.hxx>
31 #include <sfx2/objface.hxx>
32 #include <sfx2/viewfrm.hxx>
33 #include <sfx2/dispatch.hxx>
34 #include <sfx2/msgpool.hxx>
35 #include <svl/whiter.hxx>
36 #include <svl/itempool.hxx>
37 #include <svx/svdomedia.hxx>
38 #include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx>
39 #include <svx/svxdlg.hxx>
40 #include <svx/dialogs.hrc>
41 #include <svx/svxids.hrc>
42 
43 #include "app.hrc"
44 #include "res_bmp.hrc"
45 #include "glob.hrc"
46 #include "strings.hrc"
47 #include "DrawDocShell.hxx"
48 #include "ViewShell.hxx"
49 #include "Window.hxx"
50 #include "drawview.hxx"
51 #include "sdresid.hxx"
52 #include "drawdoc.hxx"
53 #include "DrawViewShell.hxx"
54 
55 #include "tableobjectbar.hxx"
56 
57 using namespace sd;
58 using namespace sd::ui::table;
59 
60 #define TableObjectBar
61 #include "sdslots.hxx"
62 
63 
64 namespace sd { namespace ui { namespace table {
65 
66 /** creates a table object bar for the given ViewShell */
67 SfxShell* CreateTableObjectBar( ViewShell& rShell, ::sd::View* pView )
68 {
69     return new TableObjectBar( &rShell, pView );
70 }
71 
72 
73 /** registers the interfaces from the table ui */
74 void RegisterInterfaces(SfxModule* pMod)
75 {
76     TableObjectBar::RegisterInterface(pMod);
77 }
78 
79 // ------------------
80 // - TableObjectBar -
81 // ------------------
82 
83 TYPEINIT1( TableObjectBar, SfxShell );
84 
85 // -----------------------------------------------------------------------------
86 
87 SFX_IMPL_INTERFACE( TableObjectBar, SfxShell, SdResId( STR_TABLEOBJECTBARSHELL ) )
88 {
89 }
90 
91 // -----------------------------------------------------------------------------
92 
93 TableObjectBar::TableObjectBar( ViewShell* pSdViewShell, ::sd::View* pSdView )
94 :   SfxShell( pSdViewShell->GetViewShell() )
95 ,   mpView( pSdView )
96 ,   mpViewSh( pSdViewShell )
97 {
98     DrawDocShell* pDocShell = mpViewSh->GetDocSh();
99     if( pDocShell )
100     {
101         SetPool( &pDocShell->GetPool() );
102         SetUndoManager( pDocShell->GetUndoManager() );
103     }
104     SetRepeatTarget( mpView );
105     SetHelpId( SD_IF_SDDRAWTABLEOBJECTBAR );
106     SetName( String( SdResId( RID_DRAW_TABLE_TOOLBOX ) ) );
107 }
108 
109 // -----------------------------------------------------------------------------
110 
111 TableObjectBar::~TableObjectBar()
112 {
113     SetRepeatTarget( NULL );
114 }
115 
116 // -----------------------------------------------------------------------------
117 
118 void TableObjectBar::GetState( SfxItemSet& rSet )
119 {
120     bool bReadOnly = false;
121 
122     if( bReadOnly )
123     {
124         rSet.DisableItem (SID_INSERT_TABLE );
125     }
126 
127     if( mpView )
128     {
129         rtl::Reference< sdr::SelectionController > xController( mpView->getSelectionController() );
130         if( xController.is() )
131         {
132             xController->GetState( rSet );
133         }
134     }
135 }
136 
137 // -----------------------------------------------------------------------------
138 
139 void TableObjectBar::GetAttrState( SfxItemSet& rSet )
140 {
141     DrawViewShell* pDrawViewShell = dynamic_cast< DrawViewShell* >( mpViewSh );
142     if( pDrawViewShell )
143         pDrawViewShell->GetAttrState( rSet );
144 }
145 
146 // -----------------------------------------------------------------------------
147 
148 void TableObjectBar::Execute( SfxRequest& rReq )
149 {
150     if( mpView )
151     {
152         SdrView* pView = mpView;
153         SfxBindings* pBindings = &mpViewSh->GetViewFrame()->GetBindings();
154 
155         rtl::Reference< sdr::SelectionController > xController( mpView->getSelectionController() );
156         sal_uLong nSlotId = rReq.GetSlot();
157         if( xController.is() )
158         {
159             switch( nSlotId )
160             {
161             case SID_TABLE_INSERT_ROW_DLG:
162             case SID_TABLE_INSERT_COL_DLG:
163             {
164                 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
165                 ::std::auto_ptr<SvxAbstractInsRowColDlg> pDlg( pFact ? pFact->CreateSvxInsRowColDlg( mpView->GetViewShell()->GetParentWindow(), nSlotId == SID_TABLE_INSERT_COL_DLG, SD_MOD()->GetSlotPool()->GetSlot(nSlotId)->GetCommand()) : 0);
166 
167                 if( pDlg.get() && (pDlg->Execute() == 1) )
168                 {
169                     if( nSlotId == SID_TABLE_INSERT_ROW_DLG )
170                         nSlotId = SID_TABLE_INSERT_ROW;
171                     else
172                         nSlotId = SID_TABLE_INSERT_COL;
173 
174                     rReq.AppendItem( SfxInt16Item( (sal_uInt16)nSlotId, (sal_uInt16)pDlg->getInsertCount() ) );
175                     rReq.AppendItem( SfxBoolItem( SID_TABLE_PARAM_INSERT_AFTER, !pDlg->isInsertBefore() ) );
176 
177                      rReq.SetSlot( (sal_uInt16)nSlotId );
178                 }
179             }
180             }
181 
182             xController->Execute( rReq );
183         }
184 
185         // note: we may be deleted at this point, no more member access possible
186 
187         switch( rReq.GetSlot() )
188         {
189         case SID_ATTR_BORDER:
190         case SID_TABLE_MERGE_CELLS:
191         case SID_TABLE_SPLIT_CELLS:
192         case SID_OPTIMIZE_TABLE:
193         case SID_TABLE_DELETE_ROW:
194         case SID_TABLE_DELETE_COL:
195         case SID_FORMAT_TABLE_DLG:
196         case SID_TABLE_INSERT_ROW:
197         case SID_TABLE_INSERT_COL:
198         {
199             pView->AdjustMarkHdl();
200             pBindings->Invalidate( SID_TABLE_DELETE_ROW );
201             pBindings->Invalidate( SID_TABLE_DELETE_COL );
202             pBindings->Invalidate( SID_FRAME_LINESTYLE );
203             pBindings->Invalidate( SID_FRAME_LINECOLOR );
204             pBindings->Invalidate( SID_ATTR_BORDER );
205             pBindings->Invalidate( SID_ATTR_FILL_STYLE );
206             pBindings->Invalidate( SID_ATTR_FILL_TRANSPARENCE );
207             pBindings->Invalidate( SID_ATTR_FILL_FLOATTRANSPARENCE );
208             pBindings->Invalidate( SID_TABLE_MERGE_CELLS );
209             pBindings->Invalidate( SID_TABLE_SPLIT_CELLS );
210             pBindings->Invalidate( SID_OPTIMIZE_TABLE );
211             pBindings->Invalidate( SID_TABLE_VERT_BOTTOM );
212             pBindings->Invalidate( SID_TABLE_VERT_CENTER );
213             pBindings->Invalidate( SID_TABLE_VERT_NONE );
214             break;
215         }
216         case SID_TABLE_VERT_BOTTOM:
217         case SID_TABLE_VERT_CENTER:
218         case SID_TABLE_VERT_NONE:
219         {
220             pBindings->Invalidate( SID_TABLE_VERT_BOTTOM );
221             pBindings->Invalidate( SID_TABLE_VERT_CENTER );
222             pBindings->Invalidate( SID_TABLE_VERT_NONE );
223             break;
224         }
225         }
226 
227         pBindings->Invalidate( SID_UNDO );
228         pBindings->Invalidate( SID_REDO );
229     }
230 }
231 
232 } } }
233