1 /*
2     SPDX-FileCopyrightText: 2010 Friedrich W. H. Kossebau <kossebau@kde.org>
3 
4     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5 */
6 
7 #include "oktetawidget.h"
8 
9 // plugin
10 #include "oktetadocument.h"
11 #include "oktetaplugin.h"
12 #include <config-kdevokteta.h>
13 // Okteta Kasten
14 #include <Kasten/Okteta/ByteArrayView>
15 
16 #if USE_KASTEN_CONTROLLER_FACTORIES
17 // Okteta Kasten controllers
18 #include <Kasten/Okteta/OverwriteModeControllerFactory>
19 #include <Kasten/Okteta/GotoOffsetControllerFactory>
20 #include <Kasten/Okteta/SelectRangeControllerFactory>
21 #include <Kasten/Okteta/SearchControllerFactory>
22 #include <Kasten/Okteta/ReplaceControllerFactory>
23 #include <Kasten/Okteta/BookmarksControllerFactory>
24 #include <Kasten/Okteta/PrintControllerFactory>
25 #include <Kasten/Okteta/ViewConfigControllerFactory>
26 #include <Kasten/Okteta/ViewModeControllerFactory>
27 #include <Kasten/Okteta/ViewStatusControllerFactory>
28 #include <Kasten/Okteta/ViewProfileControllerFactory>
29 #include <Kasten/Okteta/ViewProfilesManageControllerFactory>
30 // Kasten controllers
31 #include <Kasten/ReadOnlyControllerFactory>
32 #include <Kasten/ClipboardControllerFactory>
33 #include <Kasten/InsertControllerFactory>
34 #include <Kasten/CopyAsControllerFactory>
35 #include <Kasten/ExportControllerFactory>
36 #include <Kasten/VersionControllerFactory>
37 #include <Kasten/ZoomControllerFactory>
38 #include <Kasten/ZoomBarControllerFactory>
39 #include <Kasten/SelectControllerFactory>
40 // Kasten
41 #include <Kasten/AbstractXmlGuiController>
42 #else
43 // Okteta Kasten controllers
44 #include <Kasten/Okteta/OverwriteModeController>
45 #include <Kasten/Okteta/GotoOffsetController>
46 #include <Kasten/Okteta/SelectRangeController>
47 #include <Kasten/Okteta/SearchController>
48 #include <Kasten/Okteta/ReplaceController>
49 #include <Kasten/Okteta/BookmarksController>
50 #include <Kasten/Okteta/PrintController>
51 #include <Kasten/Okteta/ViewConfigController>
52 #include <Kasten/Okteta/ViewModeController>
53 #include <Kasten/Okteta/ViewStatusController>
54 #include <Kasten/Okteta/ViewProfileController>
55 #include <Kasten/Okteta/ViewProfilesManageController>
56 // Kasten controllers
57 #include <Kasten/ReadOnlyController>
58 #include <Kasten/ClipboardController>
59 #include <Kasten/InsertController>
60 #include <Kasten/CopyAsController>
61 #include <Kasten/ExportController>
62 #include <Kasten/VersionController>
63 #include <Kasten/ZoomController>
64 #include <Kasten/ZoomBarController>
65 #include <Kasten/SelectController>
66 #endif
67 
68 // KDevelop
69 #include <sublime/view.h>
70 // KF
71 #include <KLocalizedString>
72 #include <KStandardAction>
73 #include <KActionCollection>
74 // Qt
75 #include <QVBoxLayout>
76 #include <QAction>
77 
78 
79 namespace KDevelop
80 {
81 
OktetaWidget(QWidget * parent,Kasten::ByteArrayView * byteArrayView,OktetaPlugin * plugin)82 OktetaWidget::OktetaWidget( QWidget* parent, Kasten::ByteArrayView* byteArrayView, OktetaPlugin* plugin )
83   : QWidget( parent ),
84     KXMLGUIClient(),
85     mByteArrayView( byteArrayView )
86 {
87     setComponentName( QStringLiteral("kdevokteta") , QStringLiteral("KDevelop Okteta"));
88     setXMLFile( QStringLiteral("kdevokteta.rc") );
89 
90     setupActions(plugin);
91 
92     auto* layout = new QVBoxLayout( this );
93     layout->setContentsMargins(0, 0, 0, 0);
94     QWidget* widget = mByteArrayView->widget();
95     layout->addWidget( widget );
96     setFocusProxy( widget );
97 }
98 
setupActions(OktetaPlugin * plugin)99 void OktetaWidget::setupActions(OktetaPlugin* plugin)
100 {
101     Kasten::ByteArrayViewProfileManager* viewProfileManager = plugin->viewProfileManager();
102     mControllers = {
103 #if USE_KASTEN_CONTROLLER_FACTORIES
104         Kasten::VersionControllerFactory().create(this),
105         Kasten::ReadOnlyControllerFactory().create(this),
106         Kasten::ZoomControllerFactory().create(this),
107         Kasten::SelectControllerFactory().create(this),
108         Kasten::ClipboardControllerFactory().create(this),
109         Kasten::OverwriteModeControllerFactory().create(this),
110         Kasten::SearchControllerFactory(this).create(this),
111         Kasten::ReplaceControllerFactory(this).create(this),
112         Kasten::BookmarksControllerFactory().create(this),
113         Kasten::PrintControllerFactory().create(this),
114         Kasten::ViewConfigControllerFactory().create(this),
115         Kasten::ViewModeControllerFactory().create(this),
116         Kasten::ViewProfileControllerFactory(viewProfileManager, mByteArrayView->widget()).create(this),
117         Kasten::ViewProfilesManageControllerFactory(viewProfileManager, mByteArrayView->widget()).create(this),
118 #else
119         new Kasten::VersionController(this),
120         new Kasten::ReadOnlyController(this),
121         new Kasten::ZoomController(this),
122         new Kasten::SelectController(this),
123         new Kasten::ClipboardController(this),
124         new Kasten::OverwriteModeController(this),
125         new Kasten::SearchController(this,this),
126         new Kasten::ReplaceController(this,this),
127         new Kasten::BookmarksController(this),
128         new Kasten::PrintController(this),
129         new Kasten::ViewConfigController(this),
130         new Kasten::ViewModeController(this),
131         new Kasten::ViewProfileController(viewProfileManager, mByteArrayView->widget(), this),
132         new Kasten::ViewProfilesManageController(this, viewProfileManager, mByteArrayView->widget()),
133 #endif
134     };
135     // update the text of the viewprofiles_manage action, to make clear this is just for byte arrays
136     QAction* viewprofilesManageAction = actionCollection()->action(QStringLiteral("settings_viewprofiles_manage"));
137     viewprofilesManageAction->setText( i18nc("@action:inmenu",
138                                              "Manage Byte Array View Profiles...") );
139 
140     for (Kasten::AbstractXmlGuiController* controller : qAsConst(mControllers)) {
141         controller->setTargetModel( mByteArrayView );
142     }
143 }
144 
~OktetaWidget()145 OktetaWidget::~OktetaWidget()
146 {
147     qDeleteAll( mControllers );
148 }
149 
150 }
151