Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include "basidesh.hrc"
21 : #include "helpid.hrc"
22 :
23 : #include "accessibledialogwindow.hxx"
24 : #include "baside3.hxx"
25 : #include "basidesh.hxx"
26 : #include "bastype2.hxx"
27 : #include "dlged.hxx"
28 : #include "dlgeddef.hxx"
29 : #include "dlgedmod.hxx"
30 : #include "dlgedview.hxx"
31 : #include "iderdll.hxx"
32 : #include "idetemp.hxx"
33 : #include "localizationmgr.hxx"
34 : #include "propbrw.hxx"
35 : #include "objdlg.hxx"
36 : #include "managelang.hxx"
37 :
38 : #include <basic/basmgr.hxx>
39 : #include <com/sun/star/resource/StringResourceWithLocation.hpp>
40 : #include <com/sun/star/ucb/SimpleFileAccess.hpp>
41 : #include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
42 : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
43 : #include <com/sun/star/ui/dialogs/FilePicker.hpp>
44 : #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
45 : #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
46 : #include <comphelper/processfactory.hxx>
47 : #include <sfx2/dinfdlg.hxx>
48 : #include <sfx2/dispatch.hxx>
49 : #include <sfx2/request.hxx>
50 : #include <svl/aeitem.hxx>
51 : #include <svl/visitem.hxx>
52 : #include <svl/whiter.hxx>
53 : #include <tools/diagnose_ex.h>
54 : #include <tools/urlobj.hxx>
55 : #include <vcl/layout.hxx>
56 : #include <vcl/msgbox.hxx>
57 : #include <vcl/settings.hxx>
58 : #include <xmlscript/xmldlg_imexp.hxx>
59 :
60 : namespace basctl
61 : {
62 :
63 : using namespace ::com::sun::star;
64 : using namespace ::com::sun::star::uno;
65 : using namespace ::com::sun::star::ucb;
66 : using namespace ::com::sun::star::io;
67 : using namespace ::com::sun::star::resource;
68 : using namespace ::com::sun::star::ui::dialogs;
69 :
70 : #ifdef WNT
71 : char const FilterMask_All[] = "*.*";
72 : #else
73 : char const FilterMask_All[] = "*";
74 : #endif
75 :
76 0 : TYPEINIT1( DialogWindow, BaseWindow );
77 :
78 0 : DialogWindow::DialogWindow (
79 : DialogWindowLayout* pParent,
80 : ScriptDocument const& rDocument,
81 : const OUString& aLibName, const OUString& aName,
82 : com::sun::star::uno::Reference<com::sun::star::container::XNameContainer> const& xDialogModel
83 : ) :
84 : BaseWindow(pParent, rDocument, aLibName, aName),
85 : rLayout(*pParent),
86 0 : pEditor(new DlgEditor(*this, rLayout, rDocument.isDocument() ? rDocument.getDocument() : Reference<frame::XModel>(), xDialogModel)),
87 0 : pUndoMgr(new SfxUndoManager)
88 : {
89 0 : InitSettings( true, true, true );
90 :
91 0 : aOldNotifyUndoActionHdl = pEditor->GetModel().GetNotifyUndoActionHdl();
92 0 : pEditor->GetModel().SetNotifyUndoActionHdl(
93 : LINK(this, DialogWindow, NotifyUndoActionHdl)
94 0 : );
95 :
96 0 : SetHelpId( HID_BASICIDE_DIALOGWINDOW );
97 :
98 : // set readonly mode for readonly libraries
99 0 : Reference< script::XLibraryContainer2 > xDlgLibContainer( GetDocument().getLibraryContainer( E_DIALOGS ), UNO_QUERY );
100 0 : if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aLibName ) && xDlgLibContainer->isLibraryReadOnly( aLibName ) )
101 0 : SetReadOnly(true);
102 :
103 0 : if ( rDocument.isDocument() && rDocument.isReadOnly() )
104 0 : SetReadOnly(true);
105 0 : }
106 :
107 0 : DialogWindow::~DialogWindow()
108 0 : { }
109 :
110 0 : void DialogWindow::LoseFocus()
111 : {
112 0 : if ( IsModified() )
113 0 : StoreData();
114 :
115 0 : Window::LoseFocus();
116 0 : }
117 :
118 :
119 :
120 0 : void DialogWindow::Paint( const Rectangle& rRect )
121 : {
122 0 : pEditor->Paint( rRect );
123 0 : }
124 :
125 :
126 :
127 0 : void DialogWindow::Resize()
128 : {
129 0 : if ( GetHScrollBar() && GetVScrollBar() ) {
130 0 : pEditor->SetScrollBars( GetHScrollBar(), GetVScrollBar() );
131 : }
132 0 : }
133 :
134 :
135 :
136 0 : void DialogWindow::MouseButtonDown( const MouseEvent& rMEvt )
137 : {
138 0 : pEditor->MouseButtonDown( rMEvt );
139 :
140 0 : if (SfxBindings* pBindings = GetBindingsPtr())
141 0 : pBindings->Invalidate( SID_SHOW_PROPERTYBROWSER );
142 0 : }
143 :
144 :
145 :
146 0 : void DialogWindow::MouseButtonUp( const MouseEvent& rMEvt )
147 : {
148 0 : pEditor->MouseButtonUp( rMEvt );
149 0 : if( (pEditor->GetMode() == DlgEditor::INSERT) && !pEditor->IsCreateOK() )
150 : {
151 0 : pEditor->SetMode( DlgEditor::SELECT );
152 0 : if (SfxBindings* pBindings = GetBindingsPtr())
153 0 : pBindings->Invalidate( SID_CHOOSE_CONTROLS );
154 : }
155 0 : if (SfxBindings* pBindings = GetBindingsPtr())
156 : {
157 0 : pBindings->Invalidate( SID_SHOW_PROPERTYBROWSER );
158 0 : pBindings->Invalidate( SID_DOC_MODIFIED );
159 0 : pBindings->Invalidate( SID_SAVEDOC );
160 0 : pBindings->Invalidate( SID_COPY );
161 0 : pBindings->Invalidate( SID_CUT );
162 : }
163 0 : }
164 :
165 :
166 :
167 0 : void DialogWindow::MouseMove( const MouseEvent& rMEvt )
168 : {
169 0 : pEditor->MouseMove( rMEvt );
170 0 : }
171 :
172 :
173 :
174 0 : void DialogWindow::KeyInput( const KeyEvent& rKEvt )
175 : {
176 0 : SfxBindings* pBindings = GetBindingsPtr();
177 :
178 0 : if( rKEvt.GetKeyCode() == KEY_BACKSPACE )
179 : {
180 0 : if (SfxDispatcher* pDispatcher = GetDispatcher())
181 0 : pDispatcher->Execute( SID_BACKSPACE );
182 : }
183 : else
184 : {
185 0 : if( pBindings && rKEvt.GetKeyCode() == KEY_TAB )
186 0 : pBindings->Invalidate( SID_SHOW_PROPERTYBROWSER );
187 :
188 0 : if( !pEditor->KeyInput( rKEvt ) )
189 : {
190 0 : if( !SfxViewShell::Current()->KeyInput( rKEvt ) )
191 0 : Window::KeyInput( rKEvt );
192 : }
193 : }
194 :
195 : // may be KEY_TAB, KEY_BACKSPACE, KEY_ESCAPE
196 0 : if( pBindings )
197 : {
198 0 : pBindings->Invalidate( SID_COPY );
199 0 : pBindings->Invalidate( SID_CUT );
200 : }
201 0 : }
202 :
203 0 : void DialogWindow::Command( const CommandEvent& rCEvt )
204 : {
205 0 : if ( ( rCEvt.GetCommand() == COMMAND_WHEEL ) ||
206 0 : ( rCEvt.GetCommand() == COMMAND_STARTAUTOSCROLL ) ||
207 0 : ( rCEvt.GetCommand() == COMMAND_AUTOSCROLL ) )
208 : {
209 0 : HandleScrollCommand( rCEvt, GetHScrollBar(), GetVScrollBar() );
210 : }
211 0 : else if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
212 : {
213 0 : if (SfxDispatcher* pDispatcher = GetDispatcher())
214 : {
215 0 : SdrView& rView = GetView();
216 0 : if( !rCEvt.IsMouseEvent() && rView.AreObjectsMarked() )
217 : {
218 0 : Rectangle aMarkedRect( rView.GetMarkedRect() );
219 0 : Point MarkedCenter( aMarkedRect.Center() );
220 0 : Point PosPixel( LogicToPixel( MarkedCenter ) );
221 0 : pDispatcher->ExecutePopup( IDEResId(RID_POPUP_DLGED), this, &PosPixel );
222 : }
223 : else
224 : {
225 0 : pDispatcher->ExecutePopup( IDEResId(RID_POPUP_DLGED) );
226 : }
227 :
228 : }
229 : }
230 : else
231 0 : BaseWindow::Command( rCEvt );
232 0 : }
233 :
234 :
235 :
236 :
237 0 : IMPL_LINK( DialogWindow, NotifyUndoActionHdl, SfxUndoAction *, pUndoAction )
238 : {
239 : // #i120515# pUndoAction needs to be deleted, this hand over is an ownership
240 : // change. As long as it does not get added to the undo manager, it needs at
241 : // least to be deleted.
242 0 : delete pUndoAction;
243 :
244 0 : return 0;
245 : }
246 :
247 :
248 :
249 0 : void DialogWindow::DoInit()
250 : {
251 0 : GetHScrollBar()->Show();
252 0 : GetVScrollBar()->Show();
253 0 : pEditor->SetScrollBars( GetHScrollBar(), GetVScrollBar() );
254 0 : }
255 :
256 :
257 :
258 0 : void DialogWindow::DoScroll( ScrollBar* pCurScrollBar )
259 : {
260 0 : pEditor->DoScroll( pCurScrollBar );
261 0 : }
262 :
263 0 : void DialogWindow::GetState( SfxItemSet& rSet )
264 : {
265 0 : SfxWhichIter aIter(rSet);
266 0 : bool bIsCalc = false;
267 0 : if ( GetDocument().isDocument() )
268 : {
269 0 : Reference< frame::XModel > xModel= GetDocument().getDocument();
270 0 : if ( xModel.is() )
271 : {
272 0 : Reference< lang::XServiceInfo > xServiceInfo ( xModel, UNO_QUERY );
273 0 : if ( xServiceInfo.is() && xServiceInfo->supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) )
274 0 : bIsCalc = true;
275 0 : }
276 : }
277 :
278 0 : for ( sal_uInt16 nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich() )
279 : {
280 0 : switch ( nWh )
281 : {
282 : case SID_PASTE:
283 : {
284 0 : if ( !IsPasteAllowed() )
285 0 : rSet.DisableItem( nWh );
286 :
287 0 : if ( IsReadOnly() )
288 0 : rSet.DisableItem( nWh );
289 : }
290 0 : break;
291 : case SID_COPY:
292 : {
293 : // any object selected?
294 0 : if ( !pEditor->GetView().AreObjectsMarked() )
295 0 : rSet.DisableItem( nWh );
296 : }
297 0 : break;
298 : case SID_CUT:
299 : case SID_DELETE:
300 : case SID_BACKSPACE:
301 : {
302 : // any object selected?
303 0 : if ( !pEditor->GetView().AreObjectsMarked() )
304 0 : rSet.DisableItem( nWh );
305 :
306 0 : if ( IsReadOnly() )
307 0 : rSet.DisableItem( nWh );
308 : }
309 0 : break;
310 : case SID_REDO:
311 : {
312 0 : if ( !pUndoMgr->GetUndoActionCount() )
313 0 : rSet.DisableItem( nWh );
314 : }
315 0 : break;
316 :
317 : case SID_DIALOG_TESTMODE:
318 : {
319 : // is the IDE still active?
320 0 : bool const bBool = GetShell()->GetFrame() &&
321 0 : pEditor->GetMode() == DlgEditor::TEST;
322 0 : rSet.Put(SfxBoolItem(SID_DIALOG_TESTMODE, bBool));
323 : }
324 0 : break;
325 :
326 : case SID_CHOOSE_CONTROLS:
327 : {
328 0 : if ( IsReadOnly() )
329 : {
330 0 : rSet.DisableItem( nWh );
331 : }
332 : else
333 : {
334 0 : SfxAllEnumItem aItem( SID_CHOOSE_CONTROLS );
335 0 : if ( GetEditor().GetMode() == DlgEditor::SELECT )
336 0 : aItem.SetValue( SVX_SNAP_SELECT );
337 : else
338 : {
339 : sal_uInt16 nObj;
340 0 : switch( pEditor->GetInsertObj() )
341 : {
342 0 : case OBJ_DLG_PUSHBUTTON: nObj = SVX_SNAP_PUSHBUTTON; break;
343 0 : case OBJ_DLG_RADIOBUTTON: nObj = SVX_SNAP_RADIOBUTTON; break;
344 0 : case OBJ_DLG_CHECKBOX: nObj = SVX_SNAP_CHECKBOX; break;
345 0 : case OBJ_DLG_LISTBOX: nObj = SVX_SNAP_LISTBOX; break;
346 0 : case OBJ_DLG_COMBOBOX: nObj = SVX_SNAP_COMBOBOX; break;
347 0 : case OBJ_DLG_GROUPBOX: nObj = SVX_SNAP_GROUPBOX; break;
348 0 : case OBJ_DLG_EDIT: nObj = SVX_SNAP_EDIT; break;
349 0 : case OBJ_DLG_FIXEDTEXT: nObj = SVX_SNAP_FIXEDTEXT; break;
350 0 : case OBJ_DLG_IMAGECONTROL: nObj = SVX_SNAP_IMAGECONTROL; break;
351 0 : case OBJ_DLG_PROGRESSBAR: nObj = SVX_SNAP_PROGRESSBAR; break;
352 0 : case OBJ_DLG_HSCROLLBAR: nObj = SVX_SNAP_HSCROLLBAR; break;
353 0 : case OBJ_DLG_VSCROLLBAR: nObj = SVX_SNAP_VSCROLLBAR; break;
354 0 : case OBJ_DLG_HFIXEDLINE: nObj = SVX_SNAP_HFIXEDLINE; break;
355 0 : case OBJ_DLG_VFIXEDLINE: nObj = SVX_SNAP_VFIXEDLINE; break;
356 0 : case OBJ_DLG_DATEFIELD: nObj = SVX_SNAP_DATEFIELD; break;
357 0 : case OBJ_DLG_TIMEFIELD: nObj = SVX_SNAP_TIMEFIELD; break;
358 0 : case OBJ_DLG_NUMERICFIELD: nObj = SVX_SNAP_NUMERICFIELD; break;
359 0 : case OBJ_DLG_CURRENCYFIELD: nObj = SVX_SNAP_CURRENCYFIELD; break;
360 0 : case OBJ_DLG_FORMATTEDFIELD: nObj = SVX_SNAP_FORMATTEDFIELD; break;
361 0 : case OBJ_DLG_PATTERNFIELD: nObj = SVX_SNAP_PATTERNFIELD; break;
362 0 : case OBJ_DLG_FILECONTROL: nObj = SVX_SNAP_FILECONTROL; break;
363 0 : case OBJ_DLG_SPINBUTTON: nObj = SVX_SNAP_SPINBUTTON; break;
364 0 : case OBJ_DLG_TREECONTROL: nObj = SVX_SNAP_TREECONTROL; break;
365 0 : default: nObj = 0;
366 : }
367 : #ifdef DBG_UTIL
368 : if( !nObj )
369 : {
370 : DBG_WARNING( "SID_CHOOSE_CONTROLS: Unbekannt!" );
371 : }
372 : #endif
373 0 : aItem.SetValue( nObj );
374 : }
375 :
376 0 : rSet.Put( aItem );
377 : }
378 : }
379 0 : break;
380 :
381 : case SID_SHOW_PROPERTYBROWSER:
382 : {
383 0 : Shell* pShell = GetShell();
384 0 : SfxViewFrame* pViewFrame = pShell ? pShell->GetViewFrame() : NULL;
385 0 : if ( pViewFrame && !pViewFrame->HasChildWindow( SID_SHOW_PROPERTYBROWSER ) && !pEditor->GetView().AreObjectsMarked() )
386 0 : rSet.DisableItem( nWh );
387 :
388 0 : if ( IsReadOnly() )
389 0 : rSet.DisableItem( nWh );
390 : }
391 0 : break;
392 : case SID_INSERT_FORM_RADIO:
393 : case SID_INSERT_FORM_CHECK:
394 : case SID_INSERT_FORM_LIST:
395 : case SID_INSERT_FORM_COMBO:
396 : case SID_INSERT_FORM_VSCROLL:
397 : case SID_INSERT_FORM_HSCROLL:
398 : case SID_INSERT_FORM_SPIN:
399 : {
400 0 : if ( !bIsCalc || IsReadOnly() )
401 0 : rSet.DisableItem( nWh );
402 : }
403 0 : break;
404 : case SID_SHOWLINES:
405 : {
406 : // if this is not a module window hide the
407 : // setting, doesn't make sense for example if the
408 : // dialog editor is open
409 0 : rSet.DisableItem(nWh);
410 0 : rSet.Put(SfxVisibilityItem(nWh, false));
411 0 : break;
412 : }
413 : case SID_SELECTALL:
414 : {
415 0 : rSet.DisableItem( nWh );
416 : }
417 0 : break;
418 : }
419 0 : }
420 0 : }
421 :
422 0 : void DialogWindow::ExecuteCommand( SfxRequest& rReq )
423 : {
424 0 : switch ( rReq.GetSlot() )
425 : {
426 : case SID_CUT:
427 0 : if ( !IsReadOnly() )
428 : {
429 0 : GetEditor().Cut();
430 0 : if (SfxBindings* pBindings = GetBindingsPtr())
431 0 : pBindings->Invalidate( SID_DOC_MODIFIED );
432 : }
433 0 : break;
434 : case SID_DELETE:
435 0 : if ( !IsReadOnly() )
436 : {
437 0 : GetEditor().Delete();
438 0 : if (SfxBindings* pBindings = GetBindingsPtr())
439 0 : pBindings->Invalidate( SID_DOC_MODIFIED );
440 : }
441 0 : break;
442 : case SID_COPY:
443 0 : GetEditor().Copy();
444 0 : break;
445 : case SID_PASTE:
446 0 : if ( !IsReadOnly() )
447 : {
448 0 : GetEditor().Paste();
449 0 : if (SfxBindings* pBindings = GetBindingsPtr())
450 0 : pBindings->Invalidate( SID_DOC_MODIFIED );
451 : }
452 0 : break;
453 : case SID_INSERT_FORM_RADIO:
454 0 : GetEditor().SetMode( DlgEditor::INSERT );
455 0 : GetEditor().SetInsertObj( OBJ_DLG_FORMRADIO );
456 0 : break;
457 : case SID_INSERT_FORM_CHECK:
458 0 : GetEditor().SetMode( DlgEditor::INSERT );
459 0 : GetEditor().SetInsertObj( OBJ_DLG_FORMCHECK );
460 0 : break;
461 : case SID_INSERT_FORM_LIST:
462 0 : GetEditor().SetMode( DlgEditor::INSERT );
463 0 : GetEditor().SetInsertObj( OBJ_DLG_FORMLIST );
464 0 : break;
465 : case SID_INSERT_FORM_COMBO:
466 0 : GetEditor().SetMode( DlgEditor::INSERT );
467 0 : GetEditor().SetInsertObj( OBJ_DLG_FORMCOMBO );
468 0 : break;
469 : case SID_INSERT_FORM_SPIN:
470 0 : GetEditor().SetMode( DlgEditor::INSERT );
471 0 : GetEditor().SetInsertObj( OBJ_DLG_FORMSPIN );
472 0 : break;
473 : case SID_INSERT_FORM_VSCROLL:
474 0 : GetEditor().SetMode( DlgEditor::INSERT );
475 0 : GetEditor().SetInsertObj( OBJ_DLG_FORMVSCROLL );
476 0 : break;
477 : case SID_INSERT_FORM_HSCROLL:
478 0 : GetEditor().SetMode( DlgEditor::INSERT );
479 0 : GetEditor().SetInsertObj( OBJ_DLG_FORMHSCROLL );
480 0 : break;
481 : case SID_CHOOSE_CONTROLS:
482 : {
483 0 : const SfxItemSet* pArgs = rReq.GetArgs();
484 : DBG_ASSERT( pArgs, "Nix Args" );
485 :
486 0 : const SfxAllEnumItem& rItem = static_cast<const SfxAllEnumItem&>(pArgs->Get( SID_CHOOSE_CONTROLS ));
487 0 : switch( rItem.GetValue() )
488 : {
489 : case SVX_SNAP_PUSHBUTTON:
490 : {
491 0 : GetEditor().SetMode( DlgEditor::INSERT );
492 0 : GetEditor().SetInsertObj( OBJ_DLG_PUSHBUTTON );
493 : }
494 0 : break;
495 : case SVX_SNAP_RADIOBUTTON:
496 : {
497 0 : GetEditor().SetMode( DlgEditor::INSERT );
498 0 : GetEditor().SetInsertObj( OBJ_DLG_RADIOBUTTON );
499 : }
500 0 : break;
501 : case SVX_SNAP_CHECKBOX:
502 : {
503 0 : GetEditor().SetMode( DlgEditor::INSERT );
504 0 : GetEditor().SetInsertObj( OBJ_DLG_CHECKBOX);
505 : }
506 0 : break;
507 : case SVX_SNAP_LISTBOX:
508 : {
509 0 : GetEditor().SetMode( DlgEditor::INSERT );
510 0 : GetEditor().SetInsertObj( OBJ_DLG_LISTBOX );
511 : }
512 0 : break;
513 : case SVX_SNAP_COMBOBOX:
514 : {
515 0 : GetEditor().SetMode( DlgEditor::INSERT );
516 0 : GetEditor().SetInsertObj( OBJ_DLG_COMBOBOX );
517 : }
518 0 : break;
519 : case SVX_SNAP_GROUPBOX:
520 : {
521 0 : GetEditor().SetMode( DlgEditor::INSERT );
522 0 : GetEditor().SetInsertObj( OBJ_DLG_GROUPBOX );
523 : }
524 0 : break;
525 : case SVX_SNAP_EDIT:
526 : {
527 0 : GetEditor().SetMode( DlgEditor::INSERT );
528 0 : GetEditor().SetInsertObj( OBJ_DLG_EDIT );
529 : }
530 0 : break;
531 : case SVX_SNAP_FIXEDTEXT:
532 : {
533 0 : GetEditor().SetMode( DlgEditor::INSERT );
534 0 : GetEditor().SetInsertObj( OBJ_DLG_FIXEDTEXT );
535 : }
536 0 : break;
537 : case SVX_SNAP_IMAGECONTROL:
538 : {
539 0 : GetEditor().SetMode( DlgEditor::INSERT );
540 0 : GetEditor().SetInsertObj( OBJ_DLG_IMAGECONTROL );
541 : }
542 0 : break;
543 : case SVX_SNAP_PROGRESSBAR:
544 : {
545 0 : GetEditor().SetMode( DlgEditor::INSERT );
546 0 : GetEditor().SetInsertObj( OBJ_DLG_PROGRESSBAR );
547 : }
548 0 : break;
549 : case SVX_SNAP_HSCROLLBAR:
550 : {
551 0 : GetEditor().SetMode( DlgEditor::INSERT );
552 0 : GetEditor().SetInsertObj( OBJ_DLG_HSCROLLBAR );
553 : }
554 0 : break;
555 : case SVX_SNAP_VSCROLLBAR:
556 : {
557 0 : GetEditor().SetMode( DlgEditor::INSERT );
558 0 : GetEditor().SetInsertObj( OBJ_DLG_VSCROLLBAR );
559 : }
560 0 : break;
561 : case SVX_SNAP_HFIXEDLINE:
562 : {
563 0 : GetEditor().SetMode( DlgEditor::INSERT );
564 0 : GetEditor().SetInsertObj( OBJ_DLG_HFIXEDLINE );
565 : }
566 0 : break;
567 : case SVX_SNAP_VFIXEDLINE:
568 : {
569 0 : GetEditor().SetMode( DlgEditor::INSERT );
570 0 : GetEditor().SetInsertObj( OBJ_DLG_VFIXEDLINE );
571 : }
572 0 : break;
573 : case SVX_SNAP_DATEFIELD:
574 : {
575 0 : GetEditor().SetMode( DlgEditor::INSERT );
576 0 : GetEditor().SetInsertObj( OBJ_DLG_DATEFIELD );
577 : }
578 0 : break;
579 : case SVX_SNAP_TIMEFIELD:
580 : {
581 0 : GetEditor().SetMode( DlgEditor::INSERT );
582 0 : GetEditor().SetInsertObj( OBJ_DLG_TIMEFIELD );
583 : }
584 0 : break;
585 : case SVX_SNAP_NUMERICFIELD:
586 : {
587 0 : GetEditor().SetMode( DlgEditor::INSERT );
588 0 : GetEditor().SetInsertObj( OBJ_DLG_NUMERICFIELD );
589 : }
590 0 : break;
591 : case SVX_SNAP_CURRENCYFIELD:
592 : {
593 0 : GetEditor().SetMode( DlgEditor::INSERT );
594 0 : GetEditor().SetInsertObj( OBJ_DLG_CURRENCYFIELD );
595 : }
596 0 : break;
597 : case SVX_SNAP_FORMATTEDFIELD:
598 : {
599 0 : GetEditor().SetMode( DlgEditor::INSERT );
600 0 : GetEditor().SetInsertObj( OBJ_DLG_FORMATTEDFIELD );
601 : }
602 0 : break;
603 : case SVX_SNAP_PATTERNFIELD:
604 : {
605 0 : GetEditor().SetMode( DlgEditor::INSERT );
606 0 : GetEditor().SetInsertObj( OBJ_DLG_PATTERNFIELD );
607 : }
608 0 : break;
609 : case SVX_SNAP_FILECONTROL:
610 : {
611 0 : GetEditor().SetMode( DlgEditor::INSERT );
612 0 : GetEditor().SetInsertObj( OBJ_DLG_FILECONTROL );
613 : }
614 0 : break;
615 : case SVX_SNAP_SPINBUTTON:
616 : {
617 0 : GetEditor().SetMode( DlgEditor::INSERT );
618 0 : GetEditor().SetInsertObj( OBJ_DLG_SPINBUTTON );
619 : }
620 0 : break;
621 : case SVX_SNAP_TREECONTROL:
622 : {
623 0 : GetEditor().SetMode( DlgEditor::INSERT );
624 0 : GetEditor().SetInsertObj( OBJ_DLG_TREECONTROL );
625 : }
626 0 : break;
627 :
628 : case SVX_SNAP_SELECT:
629 : {
630 0 : GetEditor().SetMode( DlgEditor::SELECT );
631 : }
632 0 : break;
633 : }
634 :
635 0 : if ( rReq.GetModifier() & KEY_MOD1 )
636 : {
637 0 : if ( GetEditor().GetMode() == DlgEditor::INSERT )
638 0 : GetEditor().CreateDefaultObject();
639 : }
640 :
641 0 : if (SfxBindings* pBindings = GetBindingsPtr())
642 0 : pBindings->Invalidate( SID_DOC_MODIFIED );
643 : }
644 0 : break;
645 :
646 : case SID_DIALOG_TESTMODE:
647 : {
648 0 : DlgEditor::Mode eOldMode = GetEditor().GetMode();
649 0 : GetEditor().SetMode( DlgEditor::TEST );
650 0 : GetEditor().SetMode( eOldMode );
651 0 : rReq.Done();
652 0 : if (SfxBindings* pBindings = GetBindingsPtr())
653 0 : pBindings->Invalidate( SID_DIALOG_TESTMODE );
654 0 : return;
655 : }
656 : case SID_EXPORT_DIALOG:
657 0 : SaveDialog();
658 0 : break;
659 :
660 : case SID_IMPORT_DIALOG:
661 0 : ImportDialog();
662 0 : break;
663 :
664 : case SID_BASICIDE_DELETECURRENT:
665 0 : if (QueryDelDialog(m_aName, this))
666 : {
667 0 : if (RemoveDialog(m_aDocument, m_aLibName, m_aName))
668 : {
669 0 : MarkDocumentModified(m_aDocument);
670 0 : GetShell()->RemoveWindow(this, true);
671 : }
672 : }
673 0 : break;
674 : }
675 :
676 0 : rReq.Done();
677 : }
678 :
679 0 : Reference< container::XNameContainer > DialogWindow::GetDialog() const
680 : {
681 0 : return pEditor->GetDialog();
682 : }
683 :
684 0 : bool DialogWindow::RenameDialog( const OUString& rNewName )
685 : {
686 0 : if ( !basctl::RenameDialog( this, GetDocument(), GetLibName(), GetName(), rNewName ) )
687 0 : return false;
688 :
689 0 : if (SfxBindings* pBindings = GetBindingsPtr())
690 0 : pBindings->Invalidate( SID_DOC_MODIFIED );
691 :
692 0 : return true;
693 : }
694 :
695 0 : void DialogWindow::DisableBrowser()
696 : {
697 0 : rLayout.DisablePropertyBrowser();
698 0 : }
699 :
700 0 : void DialogWindow::UpdateBrowser()
701 : {
702 0 : rLayout.UpdatePropertyBrowser();
703 0 : }
704 :
705 0 : static OUString aResourceResolverPropName( "ResourceResolver" );
706 :
707 0 : bool DialogWindow::SaveDialog()
708 : {
709 0 : bool bDone = false;
710 :
711 0 : Reference< XComponentContext > xContext( comphelper::getProcessComponentContext() );
712 0 : Reference < XFilePicker3 > xFP = FilePicker::createWithMode(xContext, TemplateDescription::FILESAVE_AUTOEXTENSION_PASSWORD);
713 :
714 0 : Reference< XFilePickerControlAccess > xFPControl(xFP, UNO_QUERY);
715 0 : xFPControl->enableControl(ExtendedFilePickerElementIds::CHECKBOX_PASSWORD, false);
716 0 : Any aValue;
717 0 : aValue <<= true;
718 0 : xFPControl->setValue(ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, 0, aValue);
719 :
720 0 : if ( !aCurPath.isEmpty() )
721 0 : xFP->setDisplayDirectory ( aCurPath );
722 :
723 0 : xFP->setDefaultName( OUString( GetName() ) );
724 :
725 0 : OUString aDialogStr(IDE_RESSTR(RID_STR_STDDIALOGNAME));
726 0 : xFP->appendFilter( aDialogStr, OUString( "*.xdl" ) );
727 0 : xFP->appendFilter( IDE_RESSTR(RID_STR_FILTER_ALLFILES), OUString( FilterMask_All ) );
728 0 : xFP->setCurrentFilter( aDialogStr );
729 :
730 0 : if( xFP->execute() == RET_OK )
731 : {
732 0 : Sequence< OUString > aPaths = xFP->getFiles();
733 0 : aCurPath = aPaths[0];
734 :
735 : // export dialog model to xml
736 0 : Reference< container::XNameContainer > xDialogModel = GetDialog();
737 0 : Reference< XInputStreamProvider > xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext, GetDocument().isDocument() ? GetDocument().getDocument() : Reference< frame::XModel >() );
738 0 : Reference< XInputStream > xInput( xISP->createInputStream() );
739 :
740 0 : Reference< XSimpleFileAccess3 > xSFI( SimpleFileAccess::create(xContext) );
741 :
742 0 : Reference< XOutputStream > xOutput;
743 : try
744 : {
745 0 : if( xSFI->exists( aCurPath ) )
746 0 : xSFI->kill( aCurPath );
747 0 : xOutput = xSFI->openFileWrite( aCurPath );
748 : }
749 0 : catch(const Exception& )
750 : {}
751 :
752 0 : if( xOutput.is() )
753 : {
754 0 : Sequence< sal_Int8 > bytes;
755 0 : sal_Int32 nRead = xInput->readBytes( bytes, xInput->available() );
756 : for (;;)
757 : {
758 0 : if( nRead )
759 0 : xOutput->writeBytes( bytes );
760 :
761 0 : nRead = xInput->readBytes( bytes, 1024 );
762 0 : if (! nRead)
763 0 : break;
764 : }
765 0 : bDone = true;
766 :
767 : // With resource?
768 0 : Reference< beans::XPropertySet > xDialogModelPropSet( xDialogModel, UNO_QUERY );
769 0 : Reference< resource::XStringResourceResolver > xStringResourceResolver;
770 0 : if( xDialogModelPropSet.is() )
771 : {
772 : try
773 : {
774 0 : Any aResourceResolver = xDialogModelPropSet->getPropertyValue( aResourceResolverPropName );
775 0 : aResourceResolver >>= xStringResourceResolver;
776 : }
777 0 : catch(const beans::UnknownPropertyException& )
778 : {}
779 : }
780 :
781 0 : bool bResource = false;
782 0 : if( xStringResourceResolver.is() )
783 : {
784 0 : Sequence< lang::Locale > aLocaleSeq = xStringResourceResolver->getLocales();
785 0 : sal_Int32 nLocaleCount = aLocaleSeq.getLength();
786 0 : if( nLocaleCount > 0 )
787 0 : bResource = true;
788 : }
789 :
790 0 : if( bResource )
791 : {
792 0 : INetURLObject aURLObj( aCurPath );
793 0 : aURLObj.removeExtension();
794 0 : OUString aDialogName( aURLObj.getName() );
795 0 : aURLObj.removeSegment();
796 0 : OUString aURL( aURLObj.GetMainURL( INetURLObject::NO_DECODE ) );
797 0 : bool bReadOnly = false;
798 0 : OUString aComment( "# " );
799 0 : aComment += aDialogName;
800 0 : aComment += " strings" ;
801 0 : Reference< task::XInteractionHandler > xDummyHandler;
802 :
803 : // Remove old properties files in case of overwriting Dialog files
804 0 : if( xSFI->isFolder( aURL ) )
805 : {
806 0 : Sequence< OUString > aContentSeq = xSFI->getFolderContents( aURL, false );
807 :
808 0 : OUString aDialogName_( aDialogName );
809 0 : aDialogName_ += "_" ;
810 0 : sal_Int32 nCount = aContentSeq.getLength();
811 0 : const OUString* pFiles = aContentSeq.getConstArray();
812 0 : for( int i = 0 ; i < nCount ; i++ )
813 : {
814 0 : OUString aCompleteName = pFiles[i];
815 0 : OUString aPureName;
816 0 : OUString aExtension;
817 0 : sal_Int32 iDot = aCompleteName.lastIndexOf( '.' );
818 0 : sal_Int32 iSlash = aCompleteName.lastIndexOf( '/' );
819 0 : if( iDot != -1 )
820 : {
821 0 : sal_Int32 iCopyFrom = (iSlash != -1) ? iSlash + 1 : 0;
822 0 : aPureName = aCompleteName.copy( iCopyFrom, iDot-iCopyFrom );
823 0 : aExtension = aCompleteName.copy( iDot + 1 );
824 : }
825 :
826 0 : if( aExtension == "properties" || aExtension == "default" )
827 : {
828 0 : if( aPureName.startsWith( aDialogName_ ) )
829 : {
830 : try
831 : {
832 0 : xSFI->kill( aCompleteName );
833 : }
834 0 : catch(const uno::Exception& )
835 : {}
836 : }
837 : }
838 0 : }
839 : }
840 :
841 : Reference< XStringResourceWithLocation > xStringResourceWithLocation =
842 : StringResourceWithLocation::create( xContext, aURL, bReadOnly,
843 0 : xStringResourceResolver->getDefaultLocale(), aDialogName, aComment, xDummyHandler );
844 :
845 : // Add locales
846 0 : Sequence< lang::Locale > aLocaleSeq = xStringResourceResolver->getLocales();
847 0 : const lang::Locale* pLocales = aLocaleSeq.getConstArray();
848 0 : sal_Int32 nLocaleCount = aLocaleSeq.getLength();
849 0 : for( sal_Int32 iLocale = 0 ; iLocale < nLocaleCount ; iLocale++ )
850 : {
851 0 : const lang::Locale& rLocale = pLocales[ iLocale ];
852 0 : xStringResourceWithLocation->newLocale( rLocale );
853 : }
854 :
855 : LocalizationMgr::copyResourceForDialog( xDialogModel,
856 0 : xStringResourceResolver, xStringResourceWithLocation );
857 :
858 0 : xStringResourceWithLocation->store();
859 0 : }
860 : }
861 : else
862 0 : MessageDialog(this, IDE_RESSTR(RID_STR_COULDNTWRITE)).Execute();
863 : }
864 :
865 0 : return bDone;
866 : }
867 :
868 0 : std::vector< lang::Locale > implGetLanguagesOnlyContainedInFirstSeq
869 : ( const Sequence< lang::Locale >& aFirstSeq, const Sequence< lang::Locale >& aSecondSeq )
870 : {
871 0 : std::vector< lang::Locale > avRet;
872 :
873 0 : const lang::Locale* pFirst = aFirstSeq.getConstArray();
874 0 : const lang::Locale* pSecond = aSecondSeq.getConstArray();
875 0 : sal_Int32 nFirstCount = aFirstSeq.getLength();
876 0 : sal_Int32 nSecondCount = aSecondSeq.getLength();
877 :
878 0 : for( sal_Int32 iFirst = 0 ; iFirst < nFirstCount ; iFirst++ )
879 : {
880 0 : const lang::Locale& rFirstLocale = pFirst[ iFirst ];
881 :
882 0 : bool bAlsoContainedInSecondSeq = false;
883 0 : for( sal_Int32 iSecond = 0 ; iSecond < nSecondCount ; iSecond++ )
884 : {
885 0 : const lang::Locale& rSecondLocale = pSecond[ iSecond ];
886 :
887 0 : bool bMatch = localesAreEqual( rFirstLocale, rSecondLocale );
888 0 : if( bMatch )
889 : {
890 0 : bAlsoContainedInSecondSeq = true;
891 0 : break;
892 : }
893 : }
894 :
895 0 : if( !bAlsoContainedInSecondSeq )
896 0 : avRet.push_back( rFirstLocale );
897 : }
898 :
899 0 : return avRet;
900 : }
901 :
902 :
903 0 : class NameClashQueryBox : public MessBox
904 : {
905 : public:
906 : NameClashQueryBox( vcl::Window* pParent,
907 : const OUString& rTitle, const OUString& rMessage );
908 : };
909 :
910 0 : NameClashQueryBox::NameClashQueryBox( vcl::Window* pParent,
911 : const OUString& rTitle, const OUString& rMessage )
912 0 : : MessBox( pParent, 0, rTitle, rMessage )
913 : {
914 0 : if ( !rTitle.isEmpty() )
915 0 : SetText( rTitle );
916 :
917 0 : maMessText = rMessage;
918 :
919 : AddButton( IDE_RESSTR(RID_STR_DLGIMP_CLASH_RENAME), RET_YES,
920 0 : BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_OKBUTTON | BUTTONDIALOG_FOCUSBUTTON );
921 0 : AddButton( IDE_RESSTR(RID_STR_DLGIMP_CLASH_REPLACE), RET_NO, 0 );
922 0 : AddButton( BUTTON_CANCEL, RET_CANCEL, BUTTONDIALOG_CANCELBUTTON );
923 :
924 0 : SetImage( QueryBox::GetStandardImage() );
925 0 : }
926 :
927 :
928 0 : class LanguageMismatchQueryBox : public MessBox
929 : {
930 : public:
931 : LanguageMismatchQueryBox( vcl::Window* pParent,
932 : const OUString& rTitle, const OUString& rMessage );
933 : };
934 :
935 0 : LanguageMismatchQueryBox::LanguageMismatchQueryBox( vcl::Window* pParent,
936 : const OUString& rTitle, const OUString& rMessage )
937 0 : : MessBox( pParent, 0, rTitle, rMessage )
938 : {
939 0 : if ( !rTitle.isEmpty() )
940 0 : SetText( rTitle );
941 :
942 0 : maMessText = rMessage;
943 : AddButton( IDE_RESSTR(RID_STR_DLGIMP_MISMATCH_ADD), RET_YES,
944 0 : BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_OKBUTTON | BUTTONDIALOG_FOCUSBUTTON );
945 0 : AddButton( IDE_RESSTR(RID_STR_DLGIMP_MISMATCH_OMIT), RET_NO, 0 );
946 0 : AddButton( BUTTON_CANCEL, RET_CANCEL, BUTTONDIALOG_CANCELBUTTON );
947 0 : AddButton( BUTTON_HELP, RET_HELP, BUTTONDIALOG_HELPBUTTON, 4 );
948 :
949 0 : SetImage( QueryBox::GetStandardImage() );
950 0 : }
951 :
952 :
953 0 : bool implImportDialog( vcl::Window* pWin, const OUString& rCurPath, const ScriptDocument& rDocument, const OUString& aLibName )
954 : {
955 0 : bool bDone = false;
956 :
957 0 : Reference< XComponentContext > xContext( comphelper::getProcessComponentContext() );
958 0 : Reference < XFilePicker3 > xFP = FilePicker::createWithMode(xContext, TemplateDescription::FILEOPEN_SIMPLE);
959 :
960 0 : Reference< XFilePickerControlAccess > xFPControl(xFP, UNO_QUERY);
961 0 : xFPControl->enableControl(ExtendedFilePickerElementIds::CHECKBOX_PASSWORD, false);
962 0 : Any aValue;
963 0 : aValue <<= true;
964 0 : xFPControl->setValue(ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, 0, aValue);
965 :
966 0 : OUString aCurPath( rCurPath );
967 0 : if ( !aCurPath.isEmpty() )
968 0 : xFP->setDisplayDirectory ( aCurPath );
969 :
970 0 : OUString aDialogStr(IDE_RESSTR(RID_STR_STDDIALOGNAME));
971 0 : xFP->appendFilter( aDialogStr, OUString( "*.xdl" ) );
972 0 : xFP->appendFilter( IDE_RESSTR(RID_STR_FILTER_ALLFILES), OUString( FilterMask_All ) );
973 0 : xFP->setCurrentFilter( aDialogStr );
974 :
975 0 : if( xFP->execute() == RET_OK )
976 : {
977 0 : Sequence< OUString > aPaths = xFP->getFiles();
978 0 : aCurPath = aPaths[0];
979 :
980 0 : OUString aBasePath;
981 0 : OUString aOUCurPath( aCurPath );
982 0 : sal_Int32 iSlash = aOUCurPath.lastIndexOf( '/' );
983 0 : if( iSlash != -1 )
984 0 : aBasePath = aOUCurPath.copy( 0, iSlash + 1 );
985 :
986 : try
987 : {
988 : // create dialog model
989 : Reference< container::XNameContainer > xDialogModel(
990 0 : xContext->getServiceManager()->createInstanceWithContext("com.sun.star.awt.UnoControlDialogModel", xContext),
991 0 : UNO_QUERY_THROW );
992 :
993 0 : Reference< XSimpleFileAccess3 > xSFI( SimpleFileAccess::create(xContext) );
994 :
995 0 : Reference< XInputStream > xInput;
996 0 : if( xSFI->exists( aCurPath ) )
997 0 : xInput = xSFI->openFileRead( aCurPath );
998 :
999 0 : ::xmlscript::importDialogModel( xInput, xDialogModel, xContext, rDocument.isDocument() ? rDocument.getDocument() : Reference< frame::XModel >() );
1000 :
1001 0 : OUString aXmlDlgName;
1002 0 : Reference< beans::XPropertySet > xDialogModelPropSet( xDialogModel, UNO_QUERY );
1003 0 : if( xDialogModelPropSet.is() )
1004 : {
1005 : try
1006 : {
1007 0 : Any aXmlDialogNameAny = xDialogModelPropSet->getPropertyValue( DLGED_PROP_NAME );
1008 0 : OUString aOUXmlDialogName;
1009 0 : aXmlDialogNameAny >>= aOUXmlDialogName;
1010 0 : aXmlDlgName = aOUXmlDialogName;
1011 : }
1012 0 : catch(const beans::UnknownPropertyException& )
1013 : {}
1014 : }
1015 0 : bool bValidName = !aXmlDlgName.isEmpty();
1016 : OSL_ASSERT( bValidName );
1017 0 : if( !bValidName )
1018 0 : return bDone;
1019 :
1020 0 : bool bDialogAlreadyExists = rDocument.hasDialog( aLibName, aXmlDlgName );
1021 :
1022 0 : OUString aNewDlgName = aXmlDlgName;
1023 : enum NameClashMode
1024 : {
1025 : NO_CLASH,
1026 : CLASH_OVERWRITE_DIALOG,
1027 : CLASH_RENAME_DIALOG,
1028 : };
1029 0 : NameClashMode eNameClashMode = NO_CLASH;
1030 0 : if( bDialogAlreadyExists )
1031 : {
1032 0 : OUString aQueryBoxTitle(IDE_RESSTR(RID_STR_DLGIMP_CLASH_TITLE));
1033 0 : OUString aQueryBoxText(IDE_RESSTR(RID_STR_DLGIMP_CLASH_TEXT));
1034 0 : aQueryBoxText = aQueryBoxText.replaceAll("$(ARG1)", aXmlDlgName);
1035 :
1036 0 : NameClashQueryBox aQueryBox( pWin, aQueryBoxTitle, aQueryBoxText );
1037 0 : sal_uInt16 nRet = aQueryBox.Execute();
1038 0 : if( RET_YES == nRet )
1039 : {
1040 : // RET_YES == Rename, see NameClashQueryBox::NameClashQueryBox
1041 0 : eNameClashMode = CLASH_RENAME_DIALOG;
1042 :
1043 0 : aNewDlgName = rDocument.createObjectName( E_DIALOGS, aLibName );
1044 : }
1045 0 : else if( RET_NO == nRet )
1046 : {
1047 : // RET_NO == Replace, see NameClashQueryBox::NameClashQueryBox
1048 0 : eNameClashMode = CLASH_OVERWRITE_DIALOG;
1049 : }
1050 0 : else if( RET_CANCEL == nRet )
1051 : {
1052 0 : return bDone;
1053 0 : }
1054 : }
1055 :
1056 0 : Shell* pShell = GetShell();
1057 0 : if (!pShell)
1058 : {
1059 : OSL_ASSERT(pShell);
1060 0 : return bDone;
1061 : }
1062 :
1063 : // Resource?
1064 0 : ::com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILanguageTag().getLocale();
1065 0 : Reference< task::XInteractionHandler > xDummyHandler;
1066 0 : bool bReadOnly = true;
1067 : Reference< XStringResourceWithLocation > xImportStringResource =
1068 : StringResourceWithLocation::create( xContext, aBasePath, bReadOnly,
1069 0 : aLocale, aXmlDlgName, OUString(), xDummyHandler );
1070 :
1071 0 : Sequence< lang::Locale > aImportLocaleSeq = xImportStringResource->getLocales();
1072 0 : sal_Int32 nImportLocaleCount = aImportLocaleSeq.getLength();
1073 :
1074 0 : Reference< container::XNameContainer > xDialogLib( rDocument.getLibrary( E_DIALOGS, aLibName, true ) );
1075 0 : Reference< resource::XStringResourceManager > xLibStringResourceManager = LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
1076 0 : sal_Int32 nLibLocaleCount = 0;
1077 0 : Sequence< lang::Locale > aLibLocaleSeq;
1078 0 : if( xLibStringResourceManager.is() )
1079 : {
1080 0 : aLibLocaleSeq = xLibStringResourceManager->getLocales();
1081 0 : nLibLocaleCount = aLibLocaleSeq.getLength();
1082 : }
1083 :
1084 : // Check language matches
1085 : std::vector< lang::Locale > aOnlyInImportLanguages =
1086 0 : implGetLanguagesOnlyContainedInFirstSeq( aImportLocaleSeq, aLibLocaleSeq );
1087 0 : int nOnlyInImportLanguageCount = aOnlyInImportLanguages.size();
1088 :
1089 : // For now: Keep languages from lib
1090 0 : bool bLibLocalized = (nLibLocaleCount > 0);
1091 0 : bool bImportLocalized = (nImportLocaleCount > 0);
1092 :
1093 0 : bool bAddDialogLanguagesToLib = false;
1094 0 : if( nOnlyInImportLanguageCount > 0 )
1095 : {
1096 0 : OUString aQueryBoxTitle(IDE_RESSTR(RID_STR_DLGIMP_MISMATCH_TITLE));
1097 0 : OUString aQueryBoxText(IDE_RESSTR(RID_STR_DLGIMP_MISMATCH_TEXT));
1098 0 : LanguageMismatchQueryBox aQueryBox( pWin, aQueryBoxTitle, aQueryBoxText );
1099 0 : sal_uInt16 nRet = aQueryBox.Execute();
1100 0 : if( RET_YES == nRet )
1101 : {
1102 : // RET_YES == Add, see LanguageMismatchQueryBox::LanguageMismatchQueryBox
1103 0 : bAddDialogLanguagesToLib = true;
1104 : }
1105 : // RET_NO == Omit, see LanguageMismatchQueryBox::LanguageMismatchQueryBox
1106 : // -> nothing to do here
1107 : //else if( RET_NO == nRet )
1108 : //{
1109 : //}
1110 0 : else if( RET_CANCEL == nRet )
1111 : {
1112 0 : return bDone;
1113 0 : }
1114 : }
1115 :
1116 0 : if( bImportLocalized )
1117 : {
1118 0 : bool bCopyResourcesForDialog = true;
1119 0 : if( bAddDialogLanguagesToLib )
1120 : {
1121 0 : boost::shared_ptr<LocalizationMgr> pCurMgr = pShell->GetCurLocalizationMgr();
1122 :
1123 0 : lang::Locale aFirstLocale;
1124 0 : aFirstLocale = aOnlyInImportLanguages[0];
1125 0 : if( nOnlyInImportLanguageCount > 1 )
1126 : {
1127 : // Check if import default belongs to only import languages and use it then
1128 0 : lang::Locale aImportDefaultLocale = xImportStringResource->getDefaultLocale();
1129 0 : lang::Locale aTmpLocale;
1130 0 : for( int i = 0 ; i < nOnlyInImportLanguageCount ; ++i )
1131 : {
1132 0 : aTmpLocale = aOnlyInImportLanguages[i];
1133 0 : if( localesAreEqual( aImportDefaultLocale, aTmpLocale ) )
1134 : {
1135 0 : aFirstLocale = aImportDefaultLocale;
1136 0 : break;
1137 : }
1138 0 : }
1139 : }
1140 :
1141 0 : Sequence< lang::Locale > aFirstLocaleSeq( 1 );
1142 0 : aFirstLocaleSeq[0] = aFirstLocale;
1143 0 : pCurMgr->handleAddLocales( aFirstLocaleSeq );
1144 :
1145 0 : if( nOnlyInImportLanguageCount > 1 )
1146 : {
1147 0 : Sequence< lang::Locale > aRemainingLocaleSeq( nOnlyInImportLanguageCount - 1 );
1148 0 : lang::Locale aTmpLocale;
1149 0 : int iSeq = 0;
1150 0 : for( int i = 0 ; i < nOnlyInImportLanguageCount ; ++i )
1151 : {
1152 0 : aTmpLocale = aOnlyInImportLanguages[i];
1153 0 : if( !localesAreEqual( aFirstLocale, aTmpLocale ) )
1154 0 : aRemainingLocaleSeq[iSeq++] = aTmpLocale;
1155 : }
1156 0 : pCurMgr->handleAddLocales( aRemainingLocaleSeq );
1157 0 : }
1158 : }
1159 0 : else if( !bLibLocalized )
1160 : {
1161 0 : Reference< resource::XStringResourceManager > xImportStringResourceManager( xImportStringResource, UNO_QUERY );
1162 0 : LocalizationMgr::resetResourceForDialog( xDialogModel, xImportStringResourceManager );
1163 0 : bCopyResourcesForDialog = false;
1164 : }
1165 :
1166 0 : if( bCopyResourcesForDialog )
1167 : {
1168 0 : Reference< resource::XStringResourceResolver > xImportStringResourceResolver( xImportStringResource, UNO_QUERY );
1169 : LocalizationMgr::copyResourceForDroppedDialog( xDialogModel, aXmlDlgName,
1170 0 : xLibStringResourceManager, xImportStringResourceResolver );
1171 : }
1172 : }
1173 0 : else if( bLibLocalized )
1174 : {
1175 0 : LocalizationMgr::setResourceIDsForDialog( xDialogModel, xLibStringResourceManager );
1176 : }
1177 :
1178 :
1179 0 : LocalizationMgr::setStringResourceAtDialog( rDocument, aLibName, aNewDlgName, xDialogModel );
1180 :
1181 0 : if( eNameClashMode == CLASH_OVERWRITE_DIALOG )
1182 : {
1183 0 : if (basctl::RemoveDialog( rDocument, aLibName, aNewDlgName ) )
1184 : {
1185 0 : BaseWindow* pDlgWin = pShell->FindDlgWin( rDocument, aLibName, aNewDlgName, false, true );
1186 0 : if( pDlgWin != NULL )
1187 0 : pShell->RemoveWindow( pDlgWin, true );
1188 0 : MarkDocumentModified( rDocument );
1189 : }
1190 : else
1191 : {
1192 : // TODO: Assertion?
1193 0 : return bDone;
1194 : }
1195 : }
1196 :
1197 0 : if( eNameClashMode == CLASH_RENAME_DIALOG )
1198 : {
1199 0 : bool bRenamed = false;
1200 0 : if( xDialogModelPropSet.is() )
1201 : {
1202 : try
1203 : {
1204 0 : Any aXmlDialogNameAny;
1205 0 : aXmlDialogNameAny <<= OUString( aNewDlgName );
1206 0 : xDialogModelPropSet->setPropertyValue( DLGED_PROP_NAME, aXmlDialogNameAny );
1207 0 : bRenamed = true;
1208 : }
1209 0 : catch(const beans::UnknownPropertyException& )
1210 : {}
1211 : }
1212 :
1213 :
1214 0 : if( bRenamed )
1215 : {
1216 0 : LocalizationMgr::renameStringResourceIDs( rDocument, aLibName, aNewDlgName, xDialogModel );
1217 : }
1218 : else
1219 : {
1220 : // TODO: Assertion?
1221 0 : return bDone;
1222 : }
1223 : }
1224 :
1225 0 : Reference< XInputStreamProvider > xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext, rDocument.isDocument() ? rDocument.getDocument() : Reference< frame::XModel >() );
1226 0 : bool bSuccess = rDocument.insertDialog( aLibName, aNewDlgName, xISP );
1227 0 : if( bSuccess )
1228 : {
1229 0 : DialogWindow* pNewDlgWin = pShell->CreateDlgWin( rDocument, aLibName, aNewDlgName );
1230 0 : pShell->SetCurWindow( pNewDlgWin, true );
1231 : }
1232 :
1233 0 : bDone = true;
1234 : }
1235 0 : catch(const Exception& )
1236 0 : {}
1237 : }
1238 :
1239 0 : return bDone;
1240 : }
1241 :
1242 :
1243 0 : bool DialogWindow::ImportDialog()
1244 : {
1245 0 : const ScriptDocument& rDocument = GetDocument();
1246 0 : OUString aLibName = GetLibName();
1247 0 : return implImportDialog( this, aCurPath, rDocument, aLibName );
1248 : }
1249 :
1250 0 : DlgEdModel& DialogWindow::GetModel() const
1251 : {
1252 0 : return pEditor->GetModel();
1253 : }
1254 :
1255 0 : DlgEdPage& DialogWindow::GetPage() const
1256 : {
1257 0 : return pEditor->GetPage();
1258 : }
1259 :
1260 0 : DlgEdView& DialogWindow::GetView() const
1261 : {
1262 0 : return pEditor->GetView();
1263 : }
1264 :
1265 0 : bool DialogWindow::IsModified()
1266 : {
1267 0 : return pEditor->IsModified();
1268 : }
1269 :
1270 0 : ::svl::IUndoManager* DialogWindow::GetUndoManager()
1271 : {
1272 0 : return pUndoMgr.get();
1273 : }
1274 :
1275 0 : OUString DialogWindow::GetTitle()
1276 : {
1277 0 : return GetName();
1278 : }
1279 :
1280 0 : EntryDescriptor DialogWindow::CreateEntryDescriptor()
1281 : {
1282 0 : ScriptDocument aDocument( GetDocument() );
1283 0 : OUString aLibName( GetLibName() );
1284 0 : OUString aLibSubName;
1285 0 : LibraryLocation eLocation = aDocument.getLibraryLocation( aLibName );
1286 0 : return EntryDescriptor( aDocument, eLocation, aLibName, aLibSubName, GetName(), OBJ_TYPE_DIALOG );
1287 : }
1288 :
1289 0 : void DialogWindow::SetReadOnly (bool bReadOnly)
1290 : {
1291 0 : pEditor->SetMode(bReadOnly ? DlgEditor::READONLY : DlgEditor::SELECT);
1292 0 : }
1293 :
1294 0 : bool DialogWindow::IsReadOnly ()
1295 : {
1296 0 : return pEditor->GetMode() == DlgEditor::READONLY;
1297 : }
1298 :
1299 0 : bool DialogWindow::IsPasteAllowed()
1300 : {
1301 0 : return pEditor->IsPasteAllowed();
1302 : }
1303 :
1304 0 : void DialogWindow::StoreData()
1305 : {
1306 0 : if ( IsModified() )
1307 : {
1308 : try
1309 : {
1310 0 : Reference< container::XNameContainer > xLib = GetDocument().getLibrary( E_DIALOGS, GetLibName(), true );
1311 :
1312 0 : if( xLib.is() )
1313 : {
1314 0 : Reference< container::XNameContainer > xDialogModel = pEditor->GetDialog();
1315 :
1316 0 : if( xDialogModel.is() )
1317 : {
1318 : Reference< XComponentContext > xContext(
1319 0 : comphelper::getProcessComponentContext() );
1320 0 : Reference< XInputStreamProvider > xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext, GetDocument().isDocument() ? GetDocument().getDocument() : Reference< frame::XModel >() );
1321 0 : xLib->replaceByName( OUString( GetName() ), makeAny( xISP ) );
1322 0 : }
1323 0 : }
1324 : }
1325 0 : catch (const uno::Exception& )
1326 : {
1327 : DBG_UNHANDLED_EXCEPTION();
1328 : }
1329 0 : MarkDocumentModified( GetDocument() );
1330 0 : pEditor->ClearModifyFlag();
1331 : }
1332 0 : }
1333 :
1334 0 : void DialogWindow::Activating ()
1335 : {
1336 0 : UpdateBrowser();
1337 0 : Show();
1338 0 : }
1339 :
1340 0 : void DialogWindow::Deactivating()
1341 : {
1342 0 : Hide();
1343 0 : if ( IsModified() )
1344 0 : MarkDocumentModified( GetDocument() );
1345 0 : DisableBrowser();
1346 0 : }
1347 :
1348 0 : sal_Int32 DialogWindow::countPages( Printer* pPrinter )
1349 : {
1350 0 : return pEditor->countPages( pPrinter );
1351 : }
1352 :
1353 0 : void DialogWindow::printPage( sal_Int32 nPage, Printer* pPrinter )
1354 : {
1355 0 : pEditor->printPage( nPage, pPrinter, CreateQualifiedName() );
1356 0 : }
1357 :
1358 0 : void DialogWindow::DataChanged( const DataChangedEvent& rDCEvt )
1359 : {
1360 0 : if( (rDCEvt.GetType()==DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
1361 : {
1362 0 : InitSettings( true, true, true );
1363 0 : Invalidate();
1364 : }
1365 : else
1366 0 : BaseWindow::DataChanged( rDCEvt );
1367 0 : }
1368 :
1369 0 : void DialogWindow::InitSettings(bool bFont, bool bForeground, bool bBackground)
1370 : {
1371 0 : const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
1372 0 : if( bFont )
1373 : {
1374 0 : vcl::Font aFont;
1375 0 : aFont = rStyleSettings.GetFieldFont();
1376 0 : SetPointFont( aFont );
1377 : }
1378 :
1379 0 : if( bForeground || bFont )
1380 : {
1381 0 : SetTextColor( rStyleSettings.GetFieldTextColor() );
1382 0 : SetTextFillColor();
1383 : }
1384 :
1385 0 : if( bBackground )
1386 0 : SetBackground( rStyleSettings.GetFieldColor() );
1387 0 : }
1388 :
1389 0 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > DialogWindow::CreateAccessible()
1390 : {
1391 0 : return (::com::sun::star::accessibility::XAccessible*) new AccessibleDialogWindow( this );
1392 : }
1393 :
1394 0 : char const* DialogWindow::GetHid () const
1395 : {
1396 0 : return HID_BASICIDE_DIALOGWINDOW;
1397 : }
1398 0 : ItemType DialogWindow::GetType () const
1399 : {
1400 0 : return TYPE_DIALOG;
1401 : }
1402 :
1403 :
1404 :
1405 : // DialogWindowLayout
1406 :
1407 :
1408 :
1409 0 : DialogWindowLayout::DialogWindowLayout (vcl::Window* pParent, ObjectCatalog& rObjectCatalog_) :
1410 : Layout(pParent),
1411 : pChild(0),
1412 : rObjectCatalog(rObjectCatalog_),
1413 0 : pPropertyBrowser(0)
1414 : {
1415 0 : ShowPropertyBrowser();
1416 0 : }
1417 :
1418 0 : DialogWindowLayout::~DialogWindowLayout()
1419 : {
1420 0 : if (pPropertyBrowser != 0)
1421 : {
1422 0 : Remove(pPropertyBrowser);
1423 0 : delete pPropertyBrowser;
1424 : }
1425 0 : }
1426 :
1427 : // shows the property browser (and creates if necessary)
1428 0 : void DialogWindowLayout::ShowPropertyBrowser ()
1429 : {
1430 : // not exists?
1431 0 : if (!pPropertyBrowser)
1432 : {
1433 : // creating
1434 0 : pPropertyBrowser = new PropBrw(*this);
1435 0 : pPropertyBrowser->Show();
1436 : // after OnFirstSize():
1437 0 : if (HasSize())
1438 0 : AddPropertyBrowser();
1439 : // updating if necessary
1440 0 : UpdatePropertyBrowser();
1441 : }
1442 : else
1443 0 : pPropertyBrowser->Show();
1444 : // refreshing the button state
1445 0 : if (SfxBindings* pBindings = GetBindingsPtr())
1446 0 : pBindings->Invalidate(SID_SHOW_PROPERTYBROWSER);
1447 0 : }
1448 :
1449 : // disables the property browser
1450 0 : void DialogWindowLayout::DisablePropertyBrowser ()
1451 : {
1452 0 : if (pPropertyBrowser)
1453 0 : pPropertyBrowser->Update(0);
1454 0 : }
1455 :
1456 : // updates the property browser
1457 0 : void DialogWindowLayout::UpdatePropertyBrowser ()
1458 : {
1459 0 : if (pPropertyBrowser)
1460 0 : pPropertyBrowser->Update(GetShell());
1461 0 : }
1462 :
1463 0 : void DialogWindowLayout::Activating (BaseWindow& rChild)
1464 : {
1465 : assert(dynamic_cast<DialogWindow*>(&rChild));
1466 0 : pChild = &static_cast<DialogWindow&>(rChild);
1467 0 : rObjectCatalog.SetLayoutWindow(this);
1468 0 : rObjectCatalog.UpdateEntries();
1469 0 : rObjectCatalog.Show();
1470 0 : if (pPropertyBrowser)
1471 0 : pPropertyBrowser->Show();
1472 0 : Layout::Activating(rChild);
1473 0 : }
1474 :
1475 0 : void DialogWindowLayout::Deactivating ()
1476 : {
1477 0 : Layout::Deactivating();
1478 0 : rObjectCatalog.Hide();
1479 0 : if (pPropertyBrowser)
1480 0 : pPropertyBrowser->Hide();
1481 0 : pChild = 0;
1482 0 : }
1483 :
1484 0 : void DialogWindowLayout::ExecuteGlobal (SfxRequest& rReq)
1485 : {
1486 0 : switch (rReq.GetSlot())
1487 : {
1488 : case SID_SHOW_PROPERTYBROWSER:
1489 : // toggling property browser
1490 0 : if (pPropertyBrowser && pPropertyBrowser->IsVisible())
1491 0 : pPropertyBrowser->Hide();
1492 : else
1493 0 : ShowPropertyBrowser();
1494 0 : ArrangeWindows();
1495 : // refreshing the button state
1496 0 : if (SfxBindings* pBindings = GetBindingsPtr())
1497 0 : pBindings->Invalidate(SID_SHOW_PROPERTYBROWSER);
1498 0 : break;
1499 : }
1500 0 : }
1501 :
1502 0 : void DialogWindowLayout::GetState (SfxItemSet& rSet, unsigned nWhich)
1503 : {
1504 0 : switch (nWhich)
1505 : {
1506 : case SID_SHOW_PROPERTYBROWSER:
1507 0 : rSet.Put(SfxBoolItem(nWhich, pPropertyBrowser && pPropertyBrowser->IsVisible()));
1508 0 : break;
1509 :
1510 : case SID_BASICIDE_CHOOSEMACRO:
1511 0 : rSet.Put(SfxVisibilityItem(nWhich, false));
1512 0 : break;
1513 : }
1514 0 : }
1515 :
1516 0 : void DialogWindowLayout::OnFirstSize (long const nWidth, long const nHeight)
1517 : {
1518 0 : AddToLeft(&rObjectCatalog, Size(nWidth * 0.25, nHeight * 0.35));
1519 0 : if (pPropertyBrowser)
1520 0 : AddPropertyBrowser();
1521 0 : }
1522 :
1523 0 : void DialogWindowLayout::AddPropertyBrowser () {
1524 0 : Size const aSize = GetOutputSizePixel();
1525 0 : AddToLeft(pPropertyBrowser, Size(aSize.Width() * 0.25, aSize.Height() * 0.65));
1526 0 : }
1527 :
1528 :
1529 0 : } // namespace basctl
1530 :
1531 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|