1 // 2 // Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 3 // 2011 Free Software Foundation, Inc 4 // 5 // This program is free software; you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation; either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with this program; if not, write to the Free Software 17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 #ifndef GNASH_KDE4GUI_H 20 #define GNASH_KDE4GUI_H 21 22 #ifdef HAVE_CONFIG_H 23 #include "gnashconfig.h" 24 #endif 25 26 #include "gui.h" 27 #include "rc.h" 28 29 #include <vector> 30 #include <QX11EmbedWidget> 31 #include <QDialog> 32 33 #ifdef RENDERER_AGG 34 #include "Qt4GlueAgg.h" 35 #endif 36 37 #ifdef RENDERER_CAIRO 38 #include "Qt4GlueCairo.h" 39 #endif 40 41 #ifdef RENDERER_OPENGL 42 #include "Qt4GlueOgl.h" 43 class QGLWidget; 44 #endif 45 46 47 class QMainWindow; 48 class QMenuBar; 49 class QMenu; 50 class QRect; 51 class QCheckBox; 52 class QSlider; 53 class QLineEdit; 54 class QSpinBox; 55 class QStackedWidget; 56 57 namespace gnash { 58 class Qt4Gui; 59 class DrawingWidget; 60 } 61 62 namespace gnash 63 { 64 65 class EmbedWidget : public QX11EmbedWidget 66 { 67 Q_OBJECT 68 69 public: 70 EmbedWidget(Qt4Gui& gui); ~EmbedWidget()71 ~EmbedWidget() {}; 72 drawingWidget()73 DrawingWidget* drawingWidget() { return _drawingWidget; } 74 75 public slots: 76 void hidePlayButton(); 77 void showPlayButton(); 78 79 private: 80 QPushButton* _playButton; 81 DrawingWidget* _drawingWidget; 82 }; 83 84 85 class DSOEXPORT Qt4Gui : public Gui 86 { 87 public: 88 Qt4Gui(unsigned long xid, float scale, bool loop, RunResources& r); 89 virtual ~Qt4Gui(); 90 virtual bool init(int argc, char **argv[]); 91 virtual bool createWindow(const char* windowtitle, int width, int height, 92 int xPosition = 0, int yPosition = 0); 93 virtual void resizeWindow(int width, int height); 94 virtual bool run(); 95 virtual void renderBuffer(); 96 virtual void setInterval(unsigned int interval); 97 virtual void setTimeout(unsigned int timeout); 98 virtual void handleKeyEvent(QKeyEvent *event, bool down); 99 virtual void setCursor(gnash_cursor_type newcursor); 100 virtual void setFullscreen(); 101 virtual bool showMouse(bool show); 102 virtual void unsetFullscreen(); 103 virtual void setClipboard(const std::string& copy); 104 virtual std::pair<int, int> screenResolution() const; 105 virtual double getScreenDPI() const; 106 virtual bool yesno(const std::string& question); 107 108 void setInvalidatedRegions(const InvalidatedRanges& ranges); 109 void resize(int width, int height); 110 void showProperties(); 111 void showPreferences(); 112 void quitUI(); 113 want_multiple_regions()114 bool want_multiple_regions() { return true; } 115 116 void renderWidget(const QRect& updateRect); 117 118 void popupMenu(const QPoint& point); 119 120 private: 121 typedef std::vector<geometry::Range2d<int> > DrawBounds; 122 typedef std::map<int, gnash::key::code> KeyMap; 123 124 void setupActions(); 125 void setupMenus(); 126 void createMainMenu(); 127 128 /// Set up the map of Qt to Gnash keys. 129 void setupKeyMap(); 130 131 /// Called when the movie is stopped. Also called at startup if 132 /// start stopped is configured. 133 void stopHook(); 134 135 /// Called when the movie is played. 136 void playHook(); 137 138 DrawBounds _drawbounds; 139 140 /// argc provided to QApplication. 141 int _numArgs; 142 143 /// The main application, which should destroy everything 144 /// left on closing. 145 std::unique_ptr<QApplication> _application; 146 147 /// The widget that is used for embedding between processes. 148 EmbedWidget* _embedWidget; 149 150 /// The widget for rendering and handling user events. 151 // 152 /// Ownership is transferred to the main window, which 153 /// takes care of deletion. 154 DrawingWidget* _drawingWidget; 155 156 /// Takes care of painting onto the widget. 157 std::unique_ptr<Qt4Glue> _glue; 158 159 /// The main application window. 160 std::unique_ptr<QMainWindow> _window; 161 162 /// A map for Qt::Key values that don't easily 163 /// map onto Gnash ones. 164 KeyMap _keyMap; 165 166 /// Methods for mapping key press events from qt codes to gnash ones 167 gnash::key::code qtToGnashKey(QKeyEvent *event); 168 int qtToGnashModifier(const Qt::KeyboardModifiers modifiers); 169 170 int _interval; 171 172 int _advanceTimer; 173 174 /// QActions and QMenus should be attached to the 175 /// QMainWindow so that they are destroyed with it. 176 /// Actions may be shared between menus and/or 177 /// other uses. 178 179 // File Menu 180 QMenu* fileMenu; 181 QAction* propertiesAction; 182 QAction* quitAction; 183 184 // Edit Menu 185 QMenu* editMenu; 186 QAction* preferencesAction; 187 188 // Movie Control Menu; 189 QMenu* movieControlMenu; 190 QAction* playAction; 191 QAction* pauseAction; 192 QAction* stopAction; 193 QAction* restartAction; 194 195 // View Menu 196 QMenu* viewMenu; 197 QAction* refreshAction; 198 QAction* fullscreenAction; 199 }; 200 201 namespace Qt4GuiPrefs 202 { 203 204 class PreferencesDialog : public QDialog 205 { 206 Q_OBJECT 207 208 public: 209 PreferencesDialog(QWidget* parent); 210 211 private slots: 212 void savePreferences(); 213 214 private: 215 PreferencesDialog(const PreferencesDialog&); 216 217 // Logging tab widgets 218 QSlider* _verbositySlider; 219 QCheckBox* _logToFileToggle; 220 QLineEdit* _logFileName; 221 QCheckBox* _parserDumpToggle; 222 QCheckBox* _actionDumpToggle; 223 QCheckBox* _malformedSWFToggle; 224 QCheckBox* _ASCodingErrorToggle; 225 226 // Security tab widgets 227 QCheckBox* _localHostToggle; 228 QCheckBox* _localDomainToggle; 229 QCheckBox* _insecureSSLToggle; 230 QLineEdit* _solSandboxDir; 231 QCheckBox* _solReadOnlyToggle; 232 QCheckBox* _solLocalDomainToggle; 233 QCheckBox* _localConnectionToggle; 234 235 // Network tab widgets 236 QSpinBox* _streamsTimeoutScale; 237 238 // Media tab widgets 239 QCheckBox* _soundToggle; 240 QCheckBox* _saveStreamingMediaToggle; 241 QCheckBox* _saveLoadedMediaToggle; 242 QLineEdit* _mediaDir; 243 244 // Player tab widgets 245 QLineEdit* _versionText; 246 QLineEdit* _osText; 247 QLineEdit* _urlOpenerText; 248 QSpinBox* _librarySize; 249 QCheckBox* _startStoppedToggle; 250 251 // The config storage. 252 RcInitFile& _rcfile; 253 }; 254 255 } 256 257 } 258 259 #endif 260