1 /*
2  *  SPDX-FileCopyrightText: 2012 Sebastian Gottfried <sebastiangottfried@web.de>
3  *
4  *  SPDX-License-Identifier: GPL-2.0-or-later
5  */
6 
7 #include "resourceeditorwidget.h"
8 
9 #include <QAction>
10 
11 #include <KCategoryDrawer>
12 #include <KLocalizedString>
13 #include <KStandardAction>
14 
15 #include "core/dataindex.h"
16 
ResourceEditorWidget(QWidget * parent)17 ResourceEditorWidget::ResourceEditorWidget(QWidget* parent) :
18     QWidget(parent),
19     Ui::ResourceEditorWidget(),
20     m_undeleteAction(new QAction(QIcon::fromTheme(QStringLiteral("edit-undo")), i18n("Restore"), this)),
21     m_clearMsgAction(new QAction(QIcon::fromTheme(QStringLiteral("window-close")), i18n("Dismiss"), this))
22 {
23     setupUi(this);
24 
25     m_messageWidget->hide();
26     m_messageWidget->setCloseButtonVisible(false);
27 
28     m_resourceView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
29     m_resourceView->setCategoryDrawer(new KCategoryDrawer(m_resourceView));
30     m_resourceView->setMouseTracking(true);
31     m_resourceView->setVerticalScrollMode(QListView::ScrollPerPixel);
32     m_resourceView->setMinimumWidth(200);
33 
34     m_splitter->setStretchFactor(1, 1);
35 
36     connect(m_clearMsgAction, &QAction::triggered, this, &ResourceEditorWidget::clearMessage);
37     connect(m_undeleteAction, &QAction::triggered, this, &ResourceEditorWidget::requestResourceRestoration);
38 }
39 
setResourceModel(ResourceModel * model)40 void ResourceEditorWidget::setResourceModel(ResourceModel* model)
41 {
42     m_courseEditor->setResourceModel(model);
43 }
44 
setUndoGroup(QUndoGroup * undoGroup)45 void ResourceEditorWidget::setUndoGroup(QUndoGroup* undoGroup)
46 {
47     m_courseEditor->setUndoGroup(undoGroup);
48     m_keyboardLayoutEditor->setUndoGroup(undoGroup);
49 }
50 
showMessage(ResourceEditorWidget::MessageType type,const QString & msg)51 void ResourceEditorWidget::showMessage(ResourceEditorWidget::MessageType type, const QString& msg)
52 {
53     m_messageWidget->removeAction(m_undeleteAction);
54     m_messageWidget->removeAction(m_clearMsgAction);
55 
56     switch (type)
57     {
58     case ResourceEditorWidget::ResourceDeletedMsg:
59         m_messageWidget->setMessageType(KMessageWidget::Positive);
60         m_messageWidget->addAction(m_undeleteAction);
61         m_messageWidget->addAction(m_clearMsgAction);
62         break;
63     }
64 
65     m_currentMessageType = type;
66 
67     m_messageWidget->setText(msg);
68     m_messageWidget->animatedShow();
69 }
70 
resourceView() const71 QAbstractItemView* ResourceEditorWidget::resourceView() const
72 {
73     return m_resourceView;
74 }
75 
openResource(Resource * dataIndexResource)76 void ResourceEditorWidget::openResource(Resource* dataIndexResource)
77 {
78     if (DataIndexCourse* course = qobject_cast<DataIndexCourse*>(dataIndexResource))
79     {
80         m_editorStack->setCurrentWidget(m_courseEditor);
81         m_courseEditor->openCourse(course);
82     }
83     else if (DataIndexKeyboardLayout* keyboardLayout = qobject_cast<DataIndexKeyboardLayout*>(dataIndexResource))
84     {
85         m_editorStack->setCurrentWidget(m_keyboardLayoutEditor);
86         m_keyboardLayoutEditor->openKeyboardLayout(keyboardLayout);
87     }
88 }
89 
clearUndoStackForResource(Resource * dataIndexResource)90 void ResourceEditorWidget::clearUndoStackForResource(Resource* dataIndexResource)
91 {
92     if (DataIndexCourse* course = qobject_cast<DataIndexCourse*>(dataIndexResource))
93     {
94         m_courseEditor->clearUndoStackForCourse(course);
95     }
96     else if (DataIndexKeyboardLayout* keyboardLayout = qobject_cast<DataIndexKeyboardLayout*>(dataIndexResource))
97     {
98         m_keyboardLayoutEditor->clearUndoStackForKeyboardLayout(keyboardLayout);
99     }
100 }
101 
save()102 void ResourceEditorWidget::save()
103 {
104     if (m_editorStack->currentWidget() == m_courseEditor)
105     {
106         m_courseEditor->save();
107     }
108     else if (m_editorStack->currentWidget() == m_keyboardLayoutEditor)
109     {
110         m_keyboardLayoutEditor->save();
111     }
112 }
113 
requestResourceRestoration()114 void ResourceEditorWidget::requestResourceRestoration()
115 {
116     emit(resourceRestorationRequested());
117     m_messageWidget->animatedHide();
118 }
119 
clearMessage()120 void ResourceEditorWidget::clearMessage()
121 {
122     if (m_currentMessageType == ResourceEditorWidget::ResourceDeletedMsg)
123     {
124         emit(resourceRestorationDismissed());
125     }
126 
127     m_messageWidget->animatedHide();
128 }
129