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