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: 22 WebCoreEditCommand(WebCore::Document* document) 23 : CompositeEditCommand(document) 24 { } 25 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. 32 virtual void doApply() {} 33 }; 34 35 } 36 37 class WebCoreEditCommandPrivate { 38 public: 39 WebCoreEditCommandPrivate() 40 : m_ptr(0) 41 { } 42 43 WebCoreEditCommandPrivate(WebCore::WebCoreEditCommand* ptr) 44 : m_ptr(adoptRef(ptr)) 45 { } 46 47 ~WebCoreEditCommandPrivate() { } 48 49 WebCore::WebCoreEditCommand* command() { return m_ptr.get(); } 50 51 RefPtr<WebCore::WebCoreEditCommand> m_ptr; 52 }; 53 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 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 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 76 void wxWebEditCommand::Apply() 77 { 78 if (m_impl && m_impl->command()) 79 m_impl->command()->apply(); 80 } 81