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