18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef RenderFileUploadControl_h 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define RenderFileUploadControl_h 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FileChooser.h" 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderBlock.h" 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29692e5dbf12901edacf14812a6fae25462920af42Steve Blockclass Chrome; 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass HTMLInputElement; 312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Each RenderFileUploadControl contains a RenderButton (for opening the file chooser), and 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// sufficient space to draw a file icon and filename. The RenderButton has a shadow node 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// associated with it to receive click/hover events. 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderFileUploadControl : public RenderBlock, private FileChooserClient { 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderFileUploadControl(HTMLInputElement*); 390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual ~RenderFileUploadControl(); 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool isFileUploadControl() const { return true; } 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void click(); 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void receiveDroppedFiles(const Vector<String>&); 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String buttonValue(); 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block String fileTextValue() const; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate: 510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual const char* renderName() const { return "RenderFileUploadControl"; } 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void updateFromElement(); 54bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void computePreferredLogicalWidths(); 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void paintObject(PaintInfo&, int tx, int ty); 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block virtual bool requiresForcedStyleRecalcPropagation() const { return true; } 60e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 61692e5dbf12901edacf14812a6fae25462920af42Steve Block // FileChooserClient methods. 62692e5dbf12901edacf14812a6fae25462920af42Steve Block void valueChanged(); 63692e5dbf12901edacf14812a6fae25462920af42Steve Block void repaint() { RenderBlock::repaint(); } 64692e5dbf12901edacf14812a6fae25462920af42Steve Block bool allowsMultipleFiles(); 65967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if ENABLE(DIRECTORY_UPLOAD) 66967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch bool allowsDirectoryUpload(); 672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void receiveDropForDirectoryUpload(const Vector<String>&); 68967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 69692e5dbf12901edacf14812a6fae25462920af42Steve Block String acceptTypes(); 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void chooseIconForFiles(FileChooser*, const Vector<String>&); 7116e49e63e74d9236b0d8b72846201697a8ebaedcBen Murdoch#if ENABLE(MEDIA_CAPTURE) 7216e49e63e74d9236b0d8b72846201697a8ebaedcBen Murdoch String capture(); 7316e49e63e74d9236b0d8b72846201697a8ebaedcBen Murdoch#endif 74692e5dbf12901edacf14812a6fae25462920af42Steve Block 75692e5dbf12901edacf14812a6fae25462920af42Steve Block Chrome* chrome() const; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int maxFilenameWidth() const; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PassRefPtr<RenderStyle> createButtonStyle(const RenderStyle* parentStyle) const; 782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual VisiblePosition positionForPoint(const IntPoint&); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<HTMLInputElement> m_button; 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<FileChooser> m_fileChooser; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochinline RenderFileUploadControl* toRenderFileUploadControl(RenderObject* object) 860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ASSERT(!object || object->isFileUploadControl()); 880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return static_cast<RenderFileUploadControl*>(object); 890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockinline const RenderFileUploadControl* toRenderFileUploadControl(const RenderObject* object) 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ASSERT(!object || object->isFileUploadControl()); 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return static_cast<const RenderFileUploadControl*>(object); 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// This will catch anyone doing an unnecessary cast. 980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid toRenderFileUploadControl(const RenderFileUploadControl*); 990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // RenderFileUploadControl_h 103