summaryrefslogtreecommitdiffstats
path: root/sfx2/source/dialog/tplcitem.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2/source/dialog/tplcitem.cxx')
-rw-r--r--sfx2/source/dialog/tplcitem.cxx169
1 files changed, 169 insertions, 0 deletions
diff --git a/sfx2/source/dialog/tplcitem.cxx b/sfx2/source/dialog/tplcitem.cxx
new file mode 100644
index 000000000..c86aabcd7
--- /dev/null
+++ b/sfx2/source/dialog/tplcitem.cxx
@@ -0,0 +1,169 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <svl/intitem.hxx>
+#include <vcl/svapp.hxx>
+#include <osl/diagnose.h>
+
+#include <sfx2/bindings.hxx>
+#include <sfx2/tplpitem.hxx>
+#include <sfx2/sfxsids.hrc>
+#include <tplcitem.hxx>
+#include <templdgi.hxx>
+
+// Constructor
+
+SfxTemplateControllerItem::SfxTemplateControllerItem(
+ sal_uInt16 nSlotId, // ID
+ SfxCommonTemplateDialog_Impl &rDlg, // Controller-Instance,
+ // which is assigned to this item.
+ SfxBindings &rBindings):
+ SfxControllerItem(nSlotId, rBindings),
+ rTemplateDlg(rDlg),
+ nWaterCanState(0xff),
+ nUserEventId(nullptr)
+{
+}
+
+SfxTemplateControllerItem::~SfxTemplateControllerItem()
+{
+ if(nUserEventId)
+ Application::RemoveUserEvent(nUserEventId);
+}
+
+
+// Notice about change of status, is propagated through the Controller
+// passed on by the constructor
+
+void SfxTemplateControllerItem::StateChangedAtToolBoxControl( sal_uInt16 nSID, SfxItemState eState,
+ const SfxPoolItem* pItem )
+{
+ switch(nSID)
+ {
+ case SID_STYLE_FAMILY1:
+ case SID_STYLE_FAMILY2:
+ case SID_STYLE_FAMILY3:
+ case SID_STYLE_FAMILY4:
+ case SID_STYLE_FAMILY5:
+ case SID_STYLE_FAMILY6:
+ {
+ bool bAvailable = SfxItemState::DEFAULT == eState;
+ if ( !bAvailable )
+ rTemplateDlg.SetFamilyState(GetId(), nullptr);
+ else {
+ const SfxTemplateItem *pStateItem = dynamic_cast< const SfxTemplateItem* >(pItem);
+ DBG_ASSERT(pStateItem != nullptr, "SfxTemplateItem expected");
+ rTemplateDlg.SetFamilyState( GetId(), pStateItem );
+ }
+ bool bDisable = eState == SfxItemState::DISABLED;
+ // Disable Family
+ sal_uInt16 nFamily = 0;
+ switch( GetId())
+ {
+ case SID_STYLE_FAMILY1:
+ nFamily = 1; break;
+ case SID_STYLE_FAMILY2:
+ nFamily = 2; break;
+ case SID_STYLE_FAMILY3:
+ nFamily = 3; break;
+ case SID_STYLE_FAMILY4:
+ nFamily = 4; break;
+ case SID_STYLE_FAMILY5:
+ nFamily = 5; break;
+ case SID_STYLE_FAMILY6:
+ nFamily = 6; break;
+
+ default: OSL_FAIL("unknown StyleFamily"); break;
+ }
+ rTemplateDlg.EnableFamilyItem( nFamily, !bDisable );
+ break;
+ }
+ case SID_STYLE_WATERCAN:
+ {
+ if ( eState == SfxItemState::DISABLED )
+ nWaterCanState = 0xff;
+ else if( eState == SfxItemState::DEFAULT )
+ {
+ const SfxBoolItem& rStateItem = dynamic_cast<const SfxBoolItem&>(*pItem);
+ nWaterCanState = rStateItem.GetValue() ? 1 : 0;
+ }
+ //not necessary if the last event is still on the way
+ if(!nUserEventId)
+ nUserEventId = Application::PostUserEvent( LINK(
+ this, SfxTemplateControllerItem, SetWaterCanStateHdl_Impl ) );
+ break;
+ }
+ case SID_STYLE_EDIT:
+ rTemplateDlg.EnableEdit( SfxItemState::DISABLED != eState, nullptr );
+ break;
+ case SID_STYLE_DELETE:
+ rTemplateDlg.EnableDel( SfxItemState::DISABLED != eState, nullptr );
+ break;
+ case SID_STYLE_HIDE:
+ rTemplateDlg.EnableHide( SfxItemState::DISABLED != eState, nullptr );
+ break;
+ case SID_STYLE_SHOW:
+ rTemplateDlg.EnableShow( SfxItemState::DISABLED != eState, nullptr );
+ break;
+ case SID_STYLE_NEW_BY_EXAMPLE:
+
+ rTemplateDlg.EnableExample_Impl(nSID, SfxItemState::DISABLED != eState);
+ break;
+ case SID_STYLE_UPDATE_BY_EXAMPLE:
+ {
+ rTemplateDlg.EnableExample_Impl(nSID, eState != SfxItemState::DISABLED);
+ break;
+ }
+ case SID_STYLE_NEW:
+ {
+ rTemplateDlg.EnableNew( SfxItemState::DISABLED != eState, nullptr );
+ break;
+ }
+ case SID_STYLE_DRAGHIERARCHIE:
+ {
+ rTemplateDlg.EnableTreeDrag( SfxItemState::DISABLED != eState );
+ break;
+ }
+ case SID_STYLE_FAMILY :
+ {
+ const SfxUInt16Item *pStateItem = dynamic_cast< const SfxUInt16Item* >(pItem);
+ if (pStateItem)
+ {
+ rTemplateDlg.SetFamily(static_cast<SfxStyleFamily>(pStateItem->GetValue()));
+ }
+ break;
+ }
+ }
+}
+
+IMPL_LINK_NOARG(SfxTemplateControllerItem, SetWaterCanStateHdl_Impl, void*, void)
+{
+ nUserEventId = nullptr;
+ std::unique_ptr<SfxBoolItem> pState;
+ switch(nWaterCanState)
+ {
+ case 0 :
+ case 1 :
+ pState.reset(new SfxBoolItem(SID_STYLE_WATERCAN, nWaterCanState != 0));
+ break;
+ }
+ rTemplateDlg.SetWaterCanState(pState.get());
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */