File indexing completed on 2024-04-28 16:44:49

0001 /*
0002    SPDX-FileCopyrightText: 2008 Michael Jansen <kde@michael-jansen.biz>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "window_trigger_widget.h"
0008 #include "helper_widgets/window_definition_list_widget.h"
0009 #include "windows_helper/window_selection_list.h"
0010 #include "windows_helper/window_selection_rules.h"
0011 
0012 #include "windows_handler.h"
0013 
0014 #include "kdebug.h"
0015 
0016 WindowTriggerWidget::WindowTriggerWidget(KHotKeys::WindowTrigger *trigger, QWidget *parent)
0017     : TriggerWidgetBase(trigger, parent)
0018     , _windowdef_widget(nullptr)
0019 {
0020     window_trigger_ui.setupUi(this);
0021 
0022     if (trigger->windows()->count() == 0) {
0023         trigger->windows()->insert(0, new KHotKeys::Windowdef_simple("", ""));
0024     }
0025 
0026     QHBoxLayout *layout = new QHBoxLayout();
0027     _windowdef_widget = new WindowDefinitionListWidget(trigger->windows(), window_trigger_ui.window_group);
0028     layout->addWidget(_windowdef_widget);
0029     window_trigger_ui.window_group->setLayout(layout);
0030 
0031     connect(window_trigger_ui.window_appears, SIGNAL(toggled(bool)), _changedSignals, SLOT(map()));
0032     _changedSignals->setMapping(window_trigger_ui.window_appears, "appears");
0033     connect(window_trigger_ui.window_disappears, SIGNAL(toggled(bool)), _changedSignals, SLOT(map()));
0034     _changedSignals->setMapping(window_trigger_ui.window_disappears, "disappears");
0035     connect(window_trigger_ui.window_gets_focus, SIGNAL(toggled(bool)), _changedSignals, SLOT(map()));
0036     _changedSignals->setMapping(window_trigger_ui.window_gets_focus, "gets focus");
0037     connect(window_trigger_ui.window_lost_focus, SIGNAL(toggled(bool)), _changedSignals, SLOT(map()));
0038     _changedSignals->setMapping(window_trigger_ui.window_lost_focus, "lost focus");
0039 
0040     connect(_windowdef_widget, SIGNAL(changed(bool)), SLOT(slotWindowSelectionChanged(bool)));
0041 }
0042 
0043 WindowTriggerWidget::~WindowTriggerWidget()
0044 {
0045 }
0046 
0047 KHotKeys::WindowTrigger *WindowTriggerWidget::trigger()
0048 {
0049     return static_cast<KHotKeys::WindowTrigger *>(_trigger);
0050 }
0051 
0052 const KHotKeys::WindowTrigger *WindowTriggerWidget::trigger() const
0053 {
0054     return static_cast<const KHotKeys::WindowTrigger *>(_trigger);
0055 }
0056 
0057 void WindowTriggerWidget::doCopyFromObject()
0058 {
0059     Q_ASSERT(trigger());
0060     _windowdef_widget->copyFromObject();
0061 
0062     window_trigger_ui.window_appears->setChecked(trigger()->triggers_on(KHotKeys::WindowTrigger::WINDOW_APPEARS));
0063     window_trigger_ui.window_disappears->setChecked(trigger()->triggers_on(KHotKeys::WindowTrigger::WINDOW_DISAPPEARS));
0064     window_trigger_ui.window_gets_focus->setChecked(trigger()->triggers_on(KHotKeys::WindowTrigger::WINDOW_ACTIVATES));
0065     window_trigger_ui.window_lost_focus->setChecked(trigger()->triggers_on(KHotKeys::WindowTrigger::WINDOW_DEACTIVATES));
0066 }
0067 
0068 void WindowTriggerWidget::doCopyToObject()
0069 {
0070     Q_ASSERT(trigger());
0071     _windowdef_widget->copyToObject();
0072 
0073     KHotKeys::WindowTrigger::WindowEvents events;
0074     if (window_trigger_ui.window_appears->isChecked())
0075         events |= KHotKeys::WindowTrigger::WINDOW_APPEARS;
0076     if (window_trigger_ui.window_disappears->isChecked())
0077         events |= KHotKeys::WindowTrigger::WINDOW_DISAPPEARS;
0078     if (window_trigger_ui.window_gets_focus->isChecked())
0079         events |= KHotKeys::WindowTrigger::WINDOW_ACTIVATES;
0080     if (window_trigger_ui.window_lost_focus->isChecked())
0081         events |= KHotKeys::WindowTrigger::WINDOW_DEACTIVATES;
0082 
0083     trigger()->setOnWindowEvents(events);
0084 }
0085 
0086 bool WindowTriggerWidget::isChanged() const
0087 {
0088     Q_ASSERT(trigger());
0089 
0090     if (window_trigger_ui.window_appears->isChecked() != trigger()->triggers_on(KHotKeys::WindowTrigger::WINDOW_APPEARS)
0091         || window_trigger_ui.window_disappears->isChecked() != trigger()->triggers_on(KHotKeys::WindowTrigger::WINDOW_DISAPPEARS)
0092         || window_trigger_ui.window_gets_focus->isChecked() != trigger()->triggers_on(KHotKeys::WindowTrigger::WINDOW_ACTIVATES)
0093         || window_trigger_ui.window_lost_focus->isChecked() != trigger()->triggers_on(KHotKeys::WindowTrigger::WINDOW_DEACTIVATES))
0094         return true;
0095 
0096     return _windowdef_widget->isChanged();
0097 }
0098 
0099 void WindowTriggerWidget::slotWindowSelectionChanged(bool isChanged) const
0100 {
0101     emit changed(isChanged);
0102 }
0103 
0104 #include "moc_window_trigger_widget.cpp"