28 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
40 #include <svx/strings.hrc>
41 #include <svx/svxids.hrc>
50 #define SELF_TARGET "_self"
51 #define IMAP_CERN_FILTER "MAP - CERN"
52 #define IMAP_NCSA_FILTER "MAP - NCSA"
53 #define IMAP_BINARY_FILTER "SIP - StarView ImageMap"
54 #define IMAP_ALL_TYPE "*.*"
55 #define IMAP_BINARY_TYPE "*.sip"
56 #define IMAP_CERN_TYPE "*.map"
57 #define IMAP_NCSA_TYPE "*.map"
72 if ( ( nSID == SID_IMAP_EXEC ) && pItem )
95 const TargetList* pTargetList,
void* pEditingObj )
99 pDlg->
UpdateLink(rGraphic, pImageMap, pTargetList, pEditingObj);
105 , aIMapItem(*this, *_pBindings)
107 , m_xTbxIMapDlg1(m_xBuilder->weld_toolbar(
"toolbar"))
108 , m_xFtURL(m_xBuilder->weld_label(
"urlft"))
109 , m_xURLBox(new
SvtURLBox(m_xBuilder->weld_combo_box(
"url")))
110 , m_xFtText(m_xBuilder->weld_label(
"textft"))
111 , m_xEdtText(m_xBuilder->weld_entry(
"text"))
112 , m_xFtTarget(m_xBuilder->weld_label(
"targetft"))
113 , m_xCbbTarget(m_xBuilder->weld_combo_box(
"target"))
114 , m_xCancelBtn(m_xBuilder->weld_button(
"cancel"))
115 , m_xStbStatus1(m_xBuilder->weld_label(
"statusurl"))
116 , m_xStbStatus2(m_xBuilder->weld_label(
"statuspos"))
117 , m_xStbStatus3(m_xBuilder->weld_label(
"statussize"))
118 , m_xIMapWndWeld(new
weld::CustomWeld(*m_xBuilder,
"container", *m_xIMapWnd))
130 for (
const OUString & s : aTmpList)
151 OString sSelect(
"TBI_SELECT");
153 TbxClickHdl(sSelect);
156 const int nWidth =
m_xStbStatus1->get_pixel_size(
" 9999,99 cm / 9999,99 cm ").Width();
187 if ( m_xTbxIMapDlg1->get_item_sensitive(
"TBI_APPLY") )
190 std::unique_ptr<weld::MessageDialog> xQBox(xBuilder->weld_message_dialog(
"QueryModifyImageMapChangesDialog"));
196 GetBindings().GetDispatcher()->ExecuteList(SID_IMAP_EXEC,
197 SfxCallMode::SYNCHRON | SfxCallMode::RECORD,
203 else if( m_xIMapWnd->IsChanged() )
206 std::unique_ptr<weld::MessageDialog> xQBox(xBuilder->weld_message_dialog(
"QuerySaveImageMapChangesDialog"));
239 for (
const OUString & s : aNewList)
244 const TargetList* pTargetList,
void* pEditingObj )
246 pOwnData->aUpdateGraphic = rGraphic;
249 pOwnData->aUpdateImageMap = *pImageMap;
251 pOwnData->aUpdateImageMap.ClearImageMap();
253 pOwnData->pUpdateEditingObject = pEditingObj;
257 pOwnData->aUpdateTargetList.clear();
266 for (
const OUString & s : aTargetList)
267 pOwnData->aUpdateTargetList.push_back( s );
278 if (rNewItemId ==
"TBI_APPLY")
280 URLLoseFocusHdl(*m_xCbbTarget);
282 GetBindings().GetDispatcher()->ExecuteList(SID_IMAP_EXEC,
283 SfxCallMode::ASYNCHRON | SfxCallMode::RECORD,
286 else if (rNewItemId ==
"TBI_OPEN")
288 else if (rNewItemId ==
"TBI_SAVEAS")
290 else if (rNewItemId ==
"TBI_CLOSE")
291 CancelHdl(*m_xCancelBtn);
292 else if (rNewItemId ==
"TBI_SELECT")
294 SetActiveTool( rNewItemId );
295 m_xIMapWnd->SetEditMode(
true );
297 else if (rNewItemId ==
"TBI_RECT")
299 SetActiveTool( rNewItemId );
302 else if (rNewItemId ==
"TBI_CIRCLE")
304 SetActiveTool( rNewItemId );
307 else if (rNewItemId ==
"TBI_POLY")
309 SetActiveTool( rNewItemId );
312 else if (rNewItemId ==
"TBI_FREEPOLY")
314 SetActiveTool( rNewItemId );
317 else if (rNewItemId ==
"TBI_ACTIVE")
319 URLLoseFocusHdl(*m_xCbbTarget);
320 bool bNewState = !m_xTbxIMapDlg1->get_item_active(rNewItemId);
321 m_xTbxIMapDlg1->set_item_active(rNewItemId, bNewState);
322 m_xIMapWnd->SetCurrentObjState( !bNewState );
324 else if (rNewItemId ==
"TBI_MACRO")
325 m_xIMapWnd->DoMacroAssign();
326 else if (rNewItemId ==
"TBI_PROPERTY")
327 m_xIMapWnd->DoPropertyDialog();
328 else if (rNewItemId ==
"TBI_POLYEDIT")
330 SetActiveTool( rNewItemId );
331 m_xIMapWnd->SetPolyEditMode( m_xTbxIMapDlg1->get_item_active(rNewItemId) ? SID_BEZIER_MOVE : 0 );
333 else if (rNewItemId ==
"TBI_POLYMOVE")
335 SetActiveTool( rNewItemId );
336 m_xIMapWnd->SetPolyEditMode( SID_BEZIER_MOVE );
338 else if (rNewItemId ==
"TBI_POLYINSERT")
340 SetActiveTool( rNewItemId );
341 m_xIMapWnd->SetPolyEditMode( SID_BEZIER_INSERT );
343 else if (rNewItemId ==
"TBI_POLYDELETE")
345 SetActiveTool( rNewItemId );
346 m_xIMapWnd->GetSdrView()->DeleteMarkedPoints();
348 else if (rNewItemId ==
"TBI_UNDO")
350 URLLoseFocusHdl(*m_xCbbTarget);
351 m_xIMapWnd->GetSdrModel()->Undo();
353 else if (rNewItemId ==
"TBI_REDO")
355 URLLoseFocusHdl(*m_xCbbTarget);
356 m_xIMapWnd->GetSdrModel()->Redo();
363 css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
367 const OUString aFilter(
SvxResId(RID_SVXSTR_IMAP_ALL_FILTER));
374 aDlg.SetCurrentFilter( aFilter );
381 DBG_ASSERT(
aURL.GetProtocol() != INetProtocol::NotValid,
"invalid URL" );
386 aLoadIMap.Read( *pIStm, IMapFormat::Detect );
388 if( pIStm->GetError() )
403 css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE,
410 const bool bChanged = pModel->
IsChanged();
417 aDlg.SetCurrentFilter( aCERNFilter );
422 const OUString aFilter( aDlg.GetCurrentFilter() );
426 if ( aFilter == aBinFilter )
428 nFormat = IMapFormat::Binary;
431 else if ( aFilter == aCERNFilter )
433 nFormat = IMapFormat::CERN;
436 else if ( aFilter == aNCSAFilter )
438 nFormat = IMapFormat::NCSA;
448 if(
aURL.GetProtocol() == INetProtocol::NotValid )
450 OSL_FAIL(
"invalid URL" );
454 if(
aURL.getExtension().isEmpty() )
455 aURL.setExtension( aExt );
460 m_xIMapWnd->GetImageMap().Write( *pOStm, nFormat );
462 if( pOStm->GetError() )
477 m_xTbxIMapDlg1->set_item_active(
"TBI_SELECT", rId ==
"TBI_SELECT");
479 m_xTbxIMapDlg1->set_item_active(
"TBI_CIRCLE", rId ==
"TBI_CIRCLE");
481 m_xTbxIMapDlg1->set_item_active(
"TBI_FREEPOLY", rId ==
"TBI_FREEPOLY");
483 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYINSERT", rId ==
"TBI_POLYINSERT");
486 bool bMove = rId ==
"TBI_POLYMOVE"
487 || ( rId ==
"TBI_POLYEDIT"
493 bool bEditMode = ( rId ==
"TBI_POLYEDIT" )
494 || ( rId ==
"TBI_POLYMOVE")
495 || ( rId ==
"TBI_POLYINSERT")
496 || ( rId ==
"TBI_POLYDELETE" );
507 if (!rInfo.
aMarkURL.isEmpty() && ( m_xURLBox->find_text(rInfo.
aMarkURL) == -1))
508 m_xURLBox->append_text(rInfo.
aMarkURL);
510 m_xURLBox->set_entry_text(rInfo.
aMarkURL);
521 m_xTbxIMapDlg1->set_item_active(
"TBI_ACTIVE",
false);
522 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_ACTIVE",
false);
523 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_MACRO",
false);
524 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_PROPERTY",
false);
525 m_xStbStatus1->set_label(OUString());
527 m_xFtURL->set_sensitive(
false);
528 m_xURLBox->set_sensitive(
false);
529 m_xFtText->set_sensitive(
false);
530 m_xEdtText->set_sensitive(
false);
531 m_xFtTarget->set_sensitive(
false);
532 m_xCbbTarget->set_sensitive(
false);
534 m_xURLBox->set_entry_text(
"" );
535 m_xEdtText->set_text(
"" );
539 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_ACTIVE",
true);
540 m_xTbxIMapDlg1->set_item_active(
"TBI_ACTIVE", !rInfo.
bActivated );
541 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_MACRO",
true);
542 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_PROPERTY",
true);
544 m_xFtURL->set_sensitive(
true);
545 m_xURLBox->set_sensitive(
true);
546 m_xFtText->set_sensitive(
true);
547 m_xEdtText->set_sensitive(
true);
548 m_xFtTarget->set_sensitive(
true);
549 m_xCbbTarget->set_sensitive(
true);
551 m_xStbStatus1->set_label(rInfo.
aMarkURL);
553 if ( m_xURLBox->get_active_text() != rInfo.
aMarkURL )
554 m_xURLBox->set_entry_text( rInfo.
aMarkURL );
568 const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
569 const Point& rMousePos = pWnd->GetMousePos();
576 m_xStbStatus2->set_label(aStr);
581 const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
582 const Size& rSize = pWnd->GetGraphicSize();
589 m_xStbStatus3->set_label(aStr);
600 m_xIMapWnd->ReplaceActualIMapInfo( aNewInfo );
616 const OUString aURLText( m_xURLBox->get_active_text() );
617 const OUString aTargetText( m_xCbbTarget->get_active_text() );
619 if ( !aURLText.isEmpty() )
621 OUString aBase = GetBindings().GetDispatcher()->GetFrame()->GetObjectShell()->GetMedium()->GetBaseURL();
631 if ( aTargetText.isEmpty() )
636 m_xIMapWnd->ReplaceActualIMapInfo( aNewInfo );
641 pOwnData->aIdle.Stop();
643 if ( pOwnData->pUpdateEditingObject != pCheckObj )
645 if (m_xIMapWnd->IsChanged())
648 std::unique_ptr<weld::MessageDialog> xQBox(xBuilder->weld_message_dialog(
"QuerySaveImageMapChangesDialog"));
655 m_xIMapWnd->SetGraphic( pOwnData->aUpdateGraphic );
656 m_xIMapWnd->SetImageMap( pOwnData->aUpdateImageMap );
657 SetTargetList( pOwnData->aUpdateTargetList );
658 pCheckObj = pOwnData->pUpdateEditingObject;
661 m_xTbxIMapDlg1->set_item_active(
"TBI_SELECT",
true);
662 m_xIMapWnd->SetEditMode(
true );
666 pOwnData->aUpdateTargetList.clear();
668 GetBindings().Invalidate( SID_IMAP_EXEC );
669 m_xIMapWnd->QueueIdleUpdate();
674 const SdrObject* pObj = pWnd->GetSelectedSdrObject();
675 const SdrModel* pModel = pWnd->GetSdrModel();
676 const SdrView* pView = pWnd->GetSdrView();
677 const bool bPolyEdit = ( pObj != nullptr ) && dynamic_cast<const SdrPathObj*>( pObj) !=
nullptr;
678 const bool bDrawEnabled = !( bPolyEdit && m_xTbxIMapDlg1->get_item_active(
"TBI_POLYEDIT") );
680 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_APPLY", pOwnData->bExecState && pWnd->IsChanged() );
682 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_SELECT", bDrawEnabled);
683 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_RECT", bDrawEnabled);
684 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_CIRCLE", bDrawEnabled);
685 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_POLY", bDrawEnabled);
686 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_FREEPOLY", bDrawEnabled);
689 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_POLYEDIT", bPolyEdit );
690 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_POLYMOVE", !bDrawEnabled );
691 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_POLYINSERT", !bDrawEnabled );
695 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_UNDO", pModel->
HasUndoActions() );
696 m_xTbxIMapDlg1->set_item_sensitive(
"TBI_REDO", pModel->
HasRedoActions() );
700 switch( pWnd->GetPolyEditMode() )
702 case SID_BEZIER_MOVE:
703 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYMOVE",
true);
704 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYINSERT",
false);
706 case SID_BEZIER_INSERT:
707 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYINSERT",
true);
708 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYMOVE",
false);
716 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYEDIT",
false );
717 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYMOVE",
true);
718 m_xTbxIMapDlg1->set_item_active(
"TBI_POLYINSERT",
false );
719 pWnd->SetPolyEditMode( 0 );
722 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
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)
tools::Long Width() const
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
std::unique_ptr< weld::Entry > m_xEdtText
void SetController(std::shared_ptr< SfxDialogController > controller)
#define IMAP_BINARY_FILTER
Reference< XExecutableDialog > m_xDialog
tools::Long Height() const
::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