summaryrefslogtreecommitdiffstats
path: root/svx/source/dialog/ThemeDialog.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/dialog/ThemeDialog.cxx')
-rw-r--r--svx/source/dialog/ThemeDialog.cxx132
1 files changed, 132 insertions, 0 deletions
diff --git a/svx/source/dialog/ThemeDialog.cxx b/svx/source/dialog/ThemeDialog.cxx
new file mode 100644
index 0000000000..e3a206be6c
--- /dev/null
+++ b/svx/source/dialog/ThemeDialog.cxx
@@ -0,0 +1,132 @@
+/* -*- 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/.
+ */
+
+#include <svx/dialog/ThemeDialog.hxx>
+#include <docmodel/theme/ColorSet.hxx>
+#include <docmodel/theme/Theme.hxx>
+#include <svx/ColorSets.hxx>
+#include <vcl/svapp.hxx>
+#include <svx/colorbox.hxx>
+#include <comphelper/lok.hxx>
+
+namespace svx
+{
+ThemeDialog::ThemeDialog(weld::Window* pParent, model::Theme* pTheme)
+ : GenericDialogController(pParent, "svx/ui/themedialog.ui", "ThemeDialog")
+ , mpWindow(pParent)
+ , mpTheme(pTheme)
+ , mxValueSetThemeColors(new svx::ThemeColorValueSet)
+ , mxValueSetThemeColorsWindow(
+ new weld::CustomWeld(*m_xBuilder, "valueset_theme_colors", *mxValueSetThemeColors))
+ , mxAdd(m_xBuilder->weld_button("button_add"))
+{
+ mxValueSetThemeColors->SetColCount(3);
+ mxValueSetThemeColors->SetLineCount(4);
+ mxValueSetThemeColors->SetColor(Application::GetSettings().GetStyleSettings().GetFaceColor());
+ mxValueSetThemeColors->SetDoubleClickHdl(LINK(this, ThemeDialog, DoubleClickValueSetHdl));
+ mxValueSetThemeColors->SetSelectHdl(LINK(this, ThemeDialog, SelectItem));
+
+ mxAdd->connect_clicked(LINK(this, ThemeDialog, ButtonClicked));
+
+ initColorSets();
+
+ if (!maColorSets.empty())
+ {
+ mxValueSetThemeColors->SelectItem(1); // ItemId 1, position 0
+ mpCurrentColorSet = std::make_shared<model::ColorSet>(maColorSets[0]);
+ }
+}
+
+ThemeDialog::~ThemeDialog()
+{
+ if (mxSubDialog)
+ mxSubDialog->response(RET_CANCEL);
+}
+
+void ThemeDialog::initColorSets()
+{
+ if (mpTheme)
+ maColorSets.push_back(*mpTheme->getColorSet());
+
+ auto const& rColorSetVector = ColorSets::get().getColorSetVector();
+ maColorSets.insert(maColorSets.end(), rColorSetVector.begin(), rColorSetVector.end());
+
+ for (auto const& rColorSet : maColorSets)
+ {
+ mxValueSetThemeColors->insert(rColorSet);
+ }
+
+ mxValueSetThemeColors->SetOptimalSize();
+}
+
+IMPL_LINK_NOARG(ThemeDialog, DoubleClickValueSetHdl, ValueSet*, void)
+{
+ SelectItem(nullptr);
+ if (!comphelper::LibreOfficeKit::isActive())
+ m_xDialog->response(RET_OK);
+}
+
+IMPL_LINK_NOARG(ThemeDialog, SelectItem, ValueSet*, void)
+{
+ sal_uInt32 nItemId = mxValueSetThemeColors->GetSelectedItemId();
+ if (!nItemId)
+ return;
+
+ sal_uInt32 nIndex = nItemId - 1;
+
+ if (nIndex >= maColorSets.size())
+ return;
+
+ mpCurrentColorSet = std::make_shared<model::ColorSet>(maColorSets[nIndex]);
+}
+
+void ThemeDialog::runThemeColorEditDialog()
+{
+ if (mxSubDialog)
+ return;
+
+ mxSubDialog = std::make_shared<svx::ThemeColorEditDialog>(mpWindow, *mpCurrentColorSet);
+
+ weld::DialogController::runAsync(mxSubDialog, [this](sal_uInt32 nResult) {
+ if (nResult != RET_OK)
+ {
+ mxAdd->set_sensitive(true);
+ mxSubDialog = nullptr;
+ return;
+ }
+ auto aColorSet = mxSubDialog->getColorSet();
+ if (!aColorSet.getName().isEmpty())
+ {
+ ColorSets::get().insert(aColorSet, ColorSets::IdenticalNameAction::AutoRename);
+ maColorSets.clear();
+ mxValueSetThemeColors->Clear();
+
+ initColorSets();
+
+ mxValueSetThemeColors->SelectItem(maColorSets.size() - 1);
+ mpCurrentColorSet
+ = std::make_shared<model::ColorSet>(maColorSets[maColorSets.size() - 1]);
+ }
+ mxAdd->set_sensitive(true);
+ mxSubDialog = nullptr;
+ });
+}
+
+IMPL_LINK(ThemeDialog, ButtonClicked, weld::Button&, rButton, void)
+{
+ mxAdd->set_sensitive(false);
+ if (mpCurrentColorSet && mxAdd.get() == &rButton)
+ {
+ runThemeColorEditDialog();
+ }
+}
+
+} // end svx namespace
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */