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