28 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
40 #include <svx/strings.hrc>
41 #include <svx/svxids.hrc>
47 #include <osl/diagnose.h>
51 #define SELF_TARGET "_self"
52 #define IMAP_CERN_FILTER "MAP - CERN"
53 #define IMAP_NCSA_FILTER "MAP - NCSA"
54 #define IMAP_BINARY_FILTER "SIP - StarView ImageMap"
55 #define IMAP_ALL_TYPE "*.*"
56 #define IMAP_BINARY_TYPE "*.sip"
57 #define IMAP_CERN_TYPE "*.map"
58 #define IMAP_NCSA_TYPE "*.map"
73 if ( ( nSID == SID_IMAP_EXEC ) && pItem )
96 const TargetList* pTargetList,
void* pEditingObj )
100 pDlg->
UpdateLink(rGraphic, pImageMap, pTargetList, pEditingObj);
106 , aIMapItem(*this, *_pBindings)
108 , m_xTbxIMapDlg1(m_xBuilder->weld_toolbar(
"toolbar"))
109 , m_xFtURL(m_xBuilder->weld_label(
"urlft"))
110 , m_xURLBox(new
SvtURLBox(m_xBuilder->weld_combo_box(
"url")))
111 , m_xFtText(m_xBuilder->weld_label(
"textft"))
112 , m_xEdtText(m_xBuilder->weld_entry(
"text"))
113 , m_xFtTarget(m_xBuilder->weld_label(
"targetft"))
114 , m_xCbbTarget(m_xBuilder->weld_combo_box(
"target"))
115 , m_xCancelBtn(m_xBuilder->weld_button(
"cancel"))
116 , m_xStbStatus1(m_xBuilder->weld_label(
"statusurl"))
117 , m_xStbStatus2(m_xBuilder->weld_label(
"statuspos"))
118 , m_xStbStatus3(m_xBuilder->weld_label(
"statussize"))
119 , m_xIMapWndWeld(new
weld::CustomWeld(*m_xBuilder,
"container", *m_xIMapWnd))
131 for (
const OUString & s : aTmpList)
152 OString sSelect(
"TBI_SELECT");
154 TbxClickHdl(sSelect);
157 const int nWidth =
m_xStbStatus1->get_pixel_size(
" 9999,99 cm / 9999,99 cm ").Width();
188 if ( m_xTbxIMapDlg1->get_item_sensitive(
"TBI_APPLY") )
191 std::unique_ptr<weld::MessageDialog> xQBox(xBuilder->weld_message_dialog(
"QueryModifyImageMapChangesDialog"));
197 GetBindings().GetDispatcher()->ExecuteList(SID_IMAP_EXEC,
198 SfxCallMode::SYNCHRON | SfxCallMode::RECORD,
204 else if( m_xIMapWnd->IsChanged() )
207 std::unique_ptr<weld::MessageDialog> xQBox(xBuilder->weld_message_dialog(
"QuerySaveImageMapChangesDialog"));
240 for (
const OUString & s : aNewList)
245 const TargetList* pTargetList,
void* pEditingObj )
247 pOwnData->aUpdateGraphic = rGraphic;
250 pOwnData->aUpdateImageMap = *pImageMap;
252 pOwnData->aUpdateImageMap.ClearImageMap();
254 pOwnData->pUpdateEditingObject = pEditingObj;
258 pOwnData->aUpdateTargetList.clear();
267 for (
const OUString & s : aTargetList)
268 pOwnData->aUpdateTargetList.push_back( s );
279 if (rNewItemId ==
"TBI_APPLY")
281 URLLoseFocusHdl(*m_xCbbTarget);
283 GetBindings().GetDispatcher()->ExecuteList(SID_IMAP_EXEC,
284 SfxCallMode::ASYNCHRON | SfxCallMode::RECORD,
287 else if (rNewItemId ==
"TBI_OPEN")
289 else if (rNewItemId ==
"TBI_SAVEAS")
291 else if (rNewItemId ==
"TBI_CLOSE")
292 CancelHdl(*m_xCancelBtn);
293 else if (rNewItemId ==
"TBI_SELECT")
295 SetActiveTool( rNewItemId );
296 m_xIMapWnd->SetEditMode(
true );
298 else if (rNewItemId ==
"TBI_RECT")
300 SetActiveTool( rNewItemId );
303 else if (rNewItemId ==
"TBI_CIRCLE")
305 SetActiveTool( rNewItemId );
308 else if (rNewItemId ==
"TBI_POLY")
310 SetActiveTool( rNewItemId );
313 else if (rNewItemId ==
"TBI_FREEPOLY")
315 SetActiveTool( rNewItemId );
318 else if (rNewItemId ==
"TBI_ACTIVE")
320 URLLoseFocusHdl(*m_xCbbTarget);
321 bool bNewState = !m_xTbxIMapDlg1->get_item_active(rNewItemId);
322 m_xTbxIMapDlg1->set_item_active(rNewItemId, bNewState);
323 m_xIMapWnd->SetCurrentObjState( !bNewState );
325 else if (rNewItemId ==
"TBI_MACRO")
326 m_xIMapWnd->DoMacroAssign();
327 else if (rNewItemId ==
"TBI_PROPERTY")
328 m_xIMapWnd->DoPropertyDialog();
329 else if (rNewItemId ==
"TBI_POLYEDIT")
331 SetActiveTool( rNewItemId );
332 m_xIMapWnd->SetPolyEditMode( m_xTbxIMapDlg1->get_item_active(rNewItemId) ? SID_BEZIER_MOVE : 0 );
334 else if (rNewItemId ==
"TBI_POLYMOVE")
336 SetActiveTool( rNewItemId );
337 m_xIMapWnd->SetPolyEditMode( SID_BEZIER_MOVE );
339 else if (rNewItemId ==
"TBI_POLYINSERT")
341 SetActiveTool( rNewItemId );
342 m_xIMapWnd->SetPolyEditMode( SID_BEZIER_INSERT );
344 else if (rNewItemId ==
"TBI_POLYDELETE")
346 SetActiveTool( rNewItemId );
347 m_xIMapWnd->GetSdrView()->DeleteMarkedPoints();
349 else if (rNewItemId ==
"TBI_UNDO")
351 URLLoseFocusHdl(*m_xCbbTarget);
352 m_xIMapWnd->GetSdrModel()->Undo();
354 else if (rNewItemId ==
"TBI_REDO")
356 URLLoseFocusHdl(*m_xCbbTarget);
357 m_xIMapWnd->GetSdrModel()->Redo();
364 css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
368 const OUString aFilter(
SvxResId(RID_SVXSTR_IMAP_ALL_FILTER));
375 aDlg.SetCurrentFilter( aFilter );
382 DBG_ASSERT(
aURL.GetProtocol() != INetProtocol::NotValid,
"invalid URL" );
387 aLoadIMap.Read( *pIStm, IMapFormat::Detect );
389 if( pIStm->GetError() )
404 css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE,
411 const bool bChanged = pModel->
IsChanged();
418 aDlg.SetCurrentFilter( aCERNFilter );
423 const OUString aFilter( aDlg.GetCurrentFilter() );
427 if ( aFilter == aBinFilter )
429 nFormat = IMapFormat::Binary;
432 else if ( aFilter == aCERNFilter )
434 nFormat = IMapFormat::CERN;
437 else if ( aFilter == aNCSAFilter )
439 nFormat = IMapFormat::NCSA;
449 if(
aURL.GetProtocol() == INetProtocol::NotValid )
451 OSL_FAIL(
"invalid URL" );
455 if(
aURL.getExtension().isEmpty() )
456 aURL.setExtension( aExt );
461 m_xIMapWnd->GetImageMap().Write( *pOStm, nFormat );
463 if( pOStm->GetError() )
478 m_xTbxIMapDlg1->set_item_active(
"TBI_SELECT", rId ==
"TBI_SELECT");
480 m_xTbxIMapDlg1->set_item_active(
"TBI_CIRCLE", rId ==
"TBI_CIRCLE");
482 m_xTbxIMapDlg1->set_item_active(
"TBI_FREEPOLY", rId ==
"TBI_FREEPOLY");
484 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYINSERT", rId ==
"TBI_POLYINSERT");
487 bool bMove = rId ==
"TBI_POLYMOVE"
488 || ( rId ==
"TBI_POLYEDIT"
494 bool bEditMode = ( rId ==
"TBI_POLYEDIT" )
495 || ( rId ==
"TBI_POLYMOVE")
496 || ( rId ==
"TBI_POLYINSERT")
497 || ( rId ==
"TBI_POLYDELETE" );
508 if (!rInfo.
aMarkURL.isEmpty() && ( m_xURLBox->find_text(rInfo.
aMarkURL) == -1))
509 m_xURLBox->append_text(rInfo.
aMarkURL);
511 m_xURLBox->set_entry_text(rInfo.
aMarkURL);
522 m_xTbxIMapDlg1->set_item_active(
"TBI_ACTIVE",
false);
523 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_ACTIVE",
false);
524 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_MACRO",
false);
525 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_PROPERTY",
false);
526 m_xStbStatus1->set_label(OUString());
528 m_xFtURL->set_sensitive(
false);
529 m_xURLBox->set_sensitive(
false);
530 m_xFtText->set_sensitive(
false);
531 m_xEdtText->set_sensitive(
false);
532 m_xFtTarget->set_sensitive(
false);
533 m_xCbbTarget->set_sensitive(
false);
535 m_xURLBox->set_entry_text(
"" );
536 m_xEdtText->set_text(
"" );
540 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_ACTIVE",
true);
541 m_xTbxIMapDlg1->set_item_active(
"TBI_ACTIVE", !rInfo.
bActivated );
542 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_MACRO",
true);
543 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_PROPERTY",
true);
545 m_xFtURL->set_sensitive(
true);
546 m_xURLBox->set_sensitive(
true);
547 m_xFtText->set_sensitive(
true);
548 m_xEdtText->set_sensitive(
true);
549 m_xFtTarget->set_sensitive(
true);
550 m_xCbbTarget->set_sensitive(
true);
552 m_xStbStatus1->set_label(rInfo.
aMarkURL);
554 if ( m_xURLBox->get_active_text() != rInfo.
aMarkURL )
555 m_xURLBox->set_entry_text( rInfo.
aMarkURL );
569 const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
570 const Point& rMousePos = pWnd->GetMousePos();
577 m_xStbStatus2->set_label(aStr);
582 const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
583 const Size& rSize = pWnd->GetGraphicSize();
590 m_xStbStatus3->set_label(aStr);
601 m_xIMapWnd->ReplaceActualIMapInfo( aNewInfo );
617 const OUString aURLText( m_xURLBox->get_active_text() );
618 const OUString aTargetText( m_xCbbTarget->get_active_text() );
620 if ( !aURLText.isEmpty() )
622 OUString aBase = GetBindings().GetDispatcher()->GetFrame()->GetObjectShell()->GetMedium()->GetBaseURL();
632 if ( aTargetText.isEmpty() )
637 m_xIMapWnd->ReplaceActualIMapInfo( aNewInfo );
642 pOwnData->aIdle.Stop();
644 if ( pOwnData->pUpdateEditingObject != pCheckObj )
646 if (m_xIMapWnd->IsChanged())
649 std::unique_ptr<weld::MessageDialog> xQBox(xBuilder->weld_message_dialog(
"QuerySaveImageMapChangesDialog"));
656 m_xIMapWnd->SetGraphic( pOwnData->aUpdateGraphic );
657 m_xIMapWnd->SetImageMap( pOwnData->aUpdateImageMap );
658 SetTargetList( pOwnData->aUpdateTargetList );
659 pCheckObj = pOwnData->pUpdateEditingObject;
662 m_xTbxIMapDlg1->set_item_active(
"TBI_SELECT",
true);
663 m_xIMapWnd->SetEditMode(
true );
667 pOwnData->aUpdateTargetList.clear();
669 GetBindings().Invalidate( SID_IMAP_EXEC );
670 m_xIMapWnd->QueueIdleUpdate();
675 const SdrObject* pObj = pWnd->GetSelectedSdrObject();
676 const SdrModel* pModel = pWnd->GetSdrModel();
677 const SdrView* pView = pWnd->GetSdrView();
678 const bool bPolyEdit = ( pObj != nullptr ) && dynamic_cast<const SdrPathObj*>( pObj) !=
nullptr;
679 const bool bDrawEnabled = !( bPolyEdit && m_xTbxIMapDlg1->get_item_active(
"TBI_POLYEDIT") );
681 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_APPLY", pOwnData->bExecState && pWnd->IsChanged() );
683 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_SELECT", bDrawEnabled);
684 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_RECT", bDrawEnabled);
685 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_CIRCLE", bDrawEnabled);
686 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_POLY", bDrawEnabled);
687 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_FREEPOLY", bDrawEnabled);
690 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_POLYEDIT", bPolyEdit );
691 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_POLYMOVE", !bDrawEnabled );
692 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_POLYINSERT", !bDrawEnabled );
696 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_UNDO", pModel->
HasUndoActions() );
697 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_REDO", pModel->
HasRedoActions() );
701 switch( pWnd->GetPolyEditMode() )
703 case SID_BEZIER_MOVE:
704 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYMOVE",
true);
705 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYINSERT",
false);
707 case SID_BEZIER_INSERT:
708 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYINSERT",
true);
709 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYMOVE",
false);
717 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYEDIT",
false );
718 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYMOVE",
true);
719 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYINSERT",
false );
720 pWnd->SetPolyEditMode( 0 );
723 m_xIMapWnd->QueueIdleUpdate();
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
std::shared_ptr< SfxDialogController > & GetController()
#define LINK(Instance, Class, Member)
std::unique_ptr< IMapOwnData > pOwnData
SfxChildWindow * GetChildWindow(sal_uInt16)
void Initialize(SfxChildWinInfo const *pInfo)
static void GetDefaultTargetList(TargetList &)
void UpdateLink(const Graphic &rGraphic, const ImageMap *pImageMap, const TargetList *pTargetList, void *pEditingObj)
virtual ~SvxIMapDlg() override
rectangle (round corners optional)
static const AllSettings & GetSettings()
std::unique_ptr< IMapWindow > m_xIMapWnd
static weld::Builder * CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false)
std::unique_ptr< weld::Label > m_xFtText
std::unique_ptr< weld::Label > m_xStbStatus3
constexpr tools::Long Width() const
weld::Window * GetFrameWeld() const
static std::unique_ptr< SvStream > CreateStream(const OUString &rFileName, StreamMode eOpenMode, css::uno::Reference< css::awt::XWindow > xParentWin=nullptr)
OUString SvxResId(const char *pId)
SvxIMapDlg * GetIMapDlg()
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
void SetExecState(bool bEnable)
virtual void SetChanged(bool bFlg=true)
bool IsDeleteMarkedPointsPossible() const override
std::unique_ptr< weld::Label > m_xFtTarget
SvxIMapDlgItem(SvxIMapDlg &rIMapDlg, SfxBindings &rBindings)
std::unique_ptr< weld::ComboBox > m_xCbbTarget
void SetActiveTool(std::string_view rId)
const ImageMap & GetImageMap() const
const OUString & getNumDecimalSep() const
OUString GetUnitString(tools::Long nVal_100, FieldUnit eFieldUnit, sal_Unicode cSep)
std::unique_ptr< weld::Label > m_xStbStatus1
#define ERRCODE_IO_GENERAL
#define DBG_ASSERT(sCon, aError)
SVL_DLLPUBLIC Link< OUString *, bool > const & GetMaybeFileHdl()
static DialogMask HandleError(ErrCode nId, weld::Window *pParent=nullptr, DialogMask nMask=DialogMask::MAX)
static void UpdateIMapDlg(const Graphic &rGraphic, const ImageMap *pImageMap, const TargetList *pTargetList, void *pEditingObj)
SvxIMapDlgChildWindow(vcl::Window *, sal_uInt16, SfxBindings *, SfxChildWinInfo const *)
void SetTargetList(const TargetList &rTargetList)
const LocaleDataWrapper & GetLocaleDataWrapper(LanguageType nLang)
virtual void StateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem *pState) override
std::unique_ptr< SvtURLBox > m_xURLBox
std::unique_ptr< weld::Label > m_xFtURL
SFX_IMPL_MODELESSDIALOGCONTOLLER_WITHID(SvxIMapDlgChildWindow, SID_IMAP)
bool HasRedoActions() const
static SfxViewFrame * Current()
std::unique_ptr< weld::Label > m_xStbStatus2
constexpr tools::Long Height() const
std::unique_ptr< weld::Entry > m_xEdtText
void SetController(std::shared_ptr< SfxDialogController > controller)
#define IMAP_BINARY_FILTER
Reference< XExecutableDialog > m_xDialog
::std::vector< OUString > TargetList
IMPL_LINK(SvxIMapDlg, TbxClickHdl, const OString &, rNewItemId, void)
std::unique_ptr< weld::Button > m_xCancelBtn
bool HasUndoActions() const
IMPL_LINK_NOARG(SvxIMapDlg, CancelHdl, weld::Button &, void)
SvxIMapDlg(SfxBindings *pBindings, SfxChildWindow *pCW, weld::Window *pParent)
std::unique_ptr< weld::Toolbar > m_xTbxIMapDlg1