1
2
3 #include "config.h"
4 #include "WebEdit.h"
5
6 #include "CompositeEditCommand.h"
7 #include "Document.h"
8 #include "Frame.h"
9 #include "HTMLNames.h"
10 #include "QualifiedName.h"
11 #include "StringImpl.h"
12
13 #include "WebFrame.h"
14 #include "WebDOMElement.h"
15 #include <wtf/text/AtomicString.h>
16
17 namespace WebCore {
18
19 class WebCoreEditCommand: public CompositeEditCommand
20 {
21 public:
WebCoreEditCommand(WebCore::Document * document)22 WebCoreEditCommand(WebCore::Document* document)
23 : CompositeEditCommand(document)
24 { }
25
setElementAttribute(PassRefPtr<Element> element,const QualifiedName & attribute,const AtomicString & value)26 void setElementAttribute(PassRefPtr<Element> element, const QualifiedName& attribute, const AtomicString& value)
27 {
28 setNodeAttribute(element, attribute, value);
29 }
30 // composite commands are applied as they are added, so we don't
31 // need doApply to do anything.
doApply()32 virtual void doApply() {}
33 };
34
35 }
36
37 class WebCoreEditCommandPrivate {
38 public:
WebCoreEditCommandPrivate()39 WebCoreEditCommandPrivate()
40 : m_ptr(0)
41 { }
42
WebCoreEditCommandPrivate(WebCore::WebCoreEditCommand * ptr)43 WebCoreEditCommandPrivate(WebCore::WebCoreEditCommand* ptr)
44 : m_ptr(adoptRef(ptr))
45 { }
46
~WebCoreEditCommandPrivate()47 ~WebCoreEditCommandPrivate() { }
48
command()49 WebCore::WebCoreEditCommand* command() { return m_ptr.get(); }
50
51 RefPtr<WebCore::WebCoreEditCommand> m_ptr;
52 };
53
wxWebEditCommand(wxWebFrame * webframe)54 wxWebEditCommand::wxWebEditCommand(wxWebFrame* webframe)
55 {
56 if (webframe) {
57 WebCore::Frame* frame = webframe->GetFrame();
58 if (frame && frame->document())
59 m_impl = new WebCoreEditCommandPrivate(new WebCore::WebCoreEditCommand(frame->document()));
60 }
61 }
62
~wxWebEditCommand()63 wxWebEditCommand::~wxWebEditCommand()
64 {
65 // the impl. is ref-counted, so don't delete it as it may be in an undo/redo stack
66 delete m_impl;
67 m_impl = 0;
68 }
69
SetNodeAttribute(WebDOMElement * element,const wxString & name,const wxString & value)70 void wxWebEditCommand::SetNodeAttribute(WebDOMElement* element, const wxString& name, const wxString& value)
71 {
72 if (m_impl && m_impl->command())
73 m_impl->command()->setElementAttribute(element->impl(), WebCore::QualifiedName(WTF::nullAtom, WTF::String(name), WTF::nullAtom), WTF::String(value));
74 }
75
Apply()76 void wxWebEditCommand::Apply()
77 {
78 if (m_impl && m_impl->command())
79 m_impl->command()->apply();
80 }
81