[EFL] WebInspector: Move to new webinspector
[WebKit-https.git] / Source / WebKit / efl / WebCoreSupport / InspectorClientEfl.cpp
1 /*
2  *  Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
3  *  Copyright (C) 2009-2010 ProFUSION embedded systems
4  *  Copyright (C) 2009-2010 Samsung Electronics
5  *
6  *  This library is free software; you can redistribute it and/or
7  *  modify it under the terms of the GNU Lesser General Public
8  *  License as published by the Free Software Foundation; either
9  *  version 2 of the License, or (at your option) any later version.
10  *
11  *  This library is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  *  Lesser General Public License for more details.
15  *
16  *  You should have received a copy of the GNU Lesser General Public
17  *  License along with this library; if not, write to the Free Software
18  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20
21 #include "config.h"
22 #include "InspectorClientEfl.h"
23
24 #if ENABLE(INSPECTOR)
25 #include "EflInspectorUtilities.h"
26 #include "InspectorController.h"
27 #include "NotImplemented.h"
28 #include "ewk_view_private.h"
29 #include <wtf/text/CString.h>
30 #include <wtf/text/WTFString.h>
31
32 namespace WebCore {
33
34 static void notifyInspectorDestroy(void* userData, Evas_Object* /*webview*/, void* /*eventInfo*/)
35 {
36     InspectorFrontendClientEfl* inspectorFrontendClient = static_cast<InspectorFrontendClientEfl*>(userData);
37     if (inspectorFrontendClient)
38         inspectorFrontendClient->destroyInspectorWindow(true);
39 }
40
41 static void invalidateView(Evas_Object* webView)
42 {
43     Evas_Coord width, height;
44     Evas_Object* mainFrame = ewk_view_frame_main_get(webView);
45     if (mainFrame && ewk_frame_contents_size_get(mainFrame, &width, &height)) {
46         WebCore::Page* page = EWKPrivate::corePage(webView);
47         if (page)
48             page->mainFrame().view()->invalidateRect(WebCore::IntRect(0, 0, width, height));
49     }
50 }
51
52 class InspectorFrontendSettingsEfl : public InspectorFrontendClientLocal::Settings {
53 public:
54     virtual String getProperty(const String& /*name*/)
55     {
56         notImplemented();
57         return String();
58     }
59
60     virtual void setProperty(const String& /*name*/, const String& /*value*/)
61     {
62         notImplemented();
63     }
64 };
65
66 InspectorClientEfl::InspectorClientEfl(Evas_Object* webView)
67     : m_inspectedView(webView)
68     , m_inspectorView(0)
69     , m_frontendClient(0)
70 {
71 }
72
73 InspectorClientEfl::~InspectorClientEfl()
74 {
75     if (m_frontendClient) {
76         m_frontendClient->disconnectInspectorClient();
77         m_frontendClient = 0;
78     }
79 }
80
81 void InspectorClientEfl::inspectorDestroyed()
82 {
83     closeInspectorFrontend();
84     delete this;
85 }
86
87 InspectorFrontendChannel* InspectorClientEfl::openInspectorFrontend(InspectorController*)
88 {
89     evas_object_smart_callback_call(m_inspectedView, "inspector,view,create", 0);
90
91     Evas_Object* inspectorView = ewk_view_inspector_view_get(m_inspectedView);
92     if (!inspectorView)
93         return 0;
94
95     m_inspectorView = inspectorView;
96
97     String inspectorUri = inspectorFilesPath() + "/Main.html";
98     ewk_view_uri_set(m_inspectorView, inspectorUri.utf8().data());
99
100     OwnPtr<InspectorFrontendClientEfl> frontendClient = adoptPtr(new InspectorFrontendClientEfl(m_inspectedView, m_inspectorView, this));
101     m_frontendClient = frontendClient.get();
102
103     InspectorController* controller = EWKPrivate::corePage(m_inspectorView)->inspectorController();
104     controller->setInspectorFrontendClient(frontendClient.release());
105     
106     return this;
107 }
108
109 void InspectorClientEfl::closeInspectorFrontend()
110 {
111     if (m_frontendClient)
112         m_frontendClient->destroyInspectorWindow(false);
113 }
114
115 void InspectorClientEfl::bringFrontendToFront()
116 {
117     m_frontendClient->bringToFront();
118 }
119
120 void InspectorClientEfl::highlight()
121 {
122     invalidateView(m_inspectedView);
123 }
124
125 void InspectorClientEfl::hideHighlight()
126 {
127     invalidateView(m_inspectedView);
128 }
129
130 bool InspectorClientEfl::sendMessageToFrontend(const String& message)
131 {
132     Page* frontendPage = EWKPrivate::corePage(m_inspectorView);
133     return doDispatchMessageOnFrontendPage(frontendPage, message);
134 }
135
136 void InspectorClientEfl::releaseFrontendPage()
137 {
138     m_inspectorView = 0;
139     m_frontendClient = 0;
140 }
141
142 String InspectorClientEfl::inspectorFilesPath()
143 {
144     return "file://" + inspectorResourcePath();
145 }
146
147 InspectorFrontendClientEfl::InspectorFrontendClientEfl(Evas_Object* inspectedView, Evas_Object* inspectorView, InspectorClientEfl* inspectorClient)
148     : InspectorFrontendClientLocal(EWKPrivate::corePage(inspectedView)->inspectorController(), EWKPrivate::corePage(inspectorView), adoptPtr(new InspectorFrontendSettingsEfl()))
149     , m_inspectedView(inspectedView)
150     , m_inspectorView(inspectorView)
151     , m_inspectorClient(inspectorClient)
152 {
153     evas_object_smart_callback_add(m_inspectorView, "inspector,view,destroy", notifyInspectorDestroy, this);
154 }
155
156 InspectorFrontendClientEfl::~InspectorFrontendClientEfl()
157 {
158     evas_object_smart_callback_del(m_inspectorView, "inspector,view,destroy", notifyInspectorDestroy);
159
160     if (m_inspectorClient) {
161         m_inspectorClient->releaseFrontendPage();
162         m_inspectorClient = 0;
163     }
164 }
165
166 String InspectorFrontendClientEfl::localizedStringsURL()
167 {
168     return m_inspectorClient->inspectorFilesPath() + "/localizedStrings.js";
169 }
170
171 void InspectorFrontendClientEfl::bringToFront()
172 {
173     evas_object_focus_set(m_inspectorView, true);
174 }
175
176 void InspectorFrontendClientEfl::closeWindow()
177 {
178     destroyInspectorWindow(true);
179 }
180
181 void InspectorFrontendClientEfl::inspectedURLChanged(const String&)
182 {
183     notImplemented();
184 }
185
186 void InspectorFrontendClientEfl::attachWindow(DockSide)
187 {
188     notImplemented();
189 }
190
191 void InspectorFrontendClientEfl::detachWindow()
192 {
193     notImplemented();
194 }
195
196 void InspectorFrontendClientEfl::setAttachedWindowHeight(unsigned)
197 {
198     notImplemented();
199 }
200
201 void InspectorFrontendClientEfl::setAttachedWindowWidth(unsigned)
202 {
203     notImplemented();
204 }
205
206 void InspectorFrontendClientEfl::setToolbarHeight(unsigned)
207 {
208     notImplemented();
209 }
210
211 void InspectorFrontendClientEfl::destroyInspectorWindow(bool notifyInspectorController)
212 {
213     if (notifyInspectorController)
214         EWKPrivate::corePage(m_inspectedView)->inspectorController()->disconnectFrontend();
215
216     if (m_inspectorClient)
217         m_inspectorClient->releaseFrontendPage();
218
219     evas_object_smart_callback_call(m_inspectedView, "inspector,view,close", m_inspectorView);
220 }
221
222 }
223 #endif