ea557d0d571f7c732bad804a32605185ba764ed7
[ipdf/code.git] / src / controlpanel.h
1 /**
2  * Declarations for Qt4 based control panel
3  */
4 #ifndef _CONTROLPANEL_H
5 #define _CONTROLPANEL_H
6
7 //#define CONTROLPANEL_DISABLED // To turn off the control panel
8
9 #ifndef CONTROLPANEL_DISABLED
10
11
12 #include <QPushButton>
13 #include <QMainWindow>
14 #include <QWidget>
15 #include <QAction>
16 #include <QMenu>
17 #include <QMenuBar>
18 #include <QApplication>
19 #include <QTextEdit>
20 #include <QInputDialog>
21 #include <QFileDialog>
22
23
24 namespace IPDF
25 {
26         class View;
27         class Document;
28         class Screen;
29
30         /**
31          * Class to manage Qt control panel
32          * Should be a singleton from the point of view of View, Document, Screen
33          *  - Just call "Update"
34          */
35         class ControlPanel : public QMainWindow
36         {       
37                 Q_OBJECT // Having this causes shit about undefined vtables
38                                 // Not having it means things break
39                                 // Apparently you need "qmake" to build qt applications
40                                 // Or some bullshit -_-
41                 public:
42                         struct RunArgs
43                         {
44                                 int argc;
45                                 char ** argv;
46                                 View & view;
47                                 Document & doc;
48                                 Screen & screen;
49                         };
50                         
51                         static int Run(void * args);
52                         static void Update() {if (g_panel != NULL) g_panel->UpdateAll();}                       
53         
54                 private:
55                         typedef enum {
56                                 ABOUT,
57                                 INSERT_TEXT,
58                                 PARSE_SVG
59                         } State;
60                         
61                 private slots:
62                         void SetGPURendering();
63                         void SetCPURendering();
64                         void ToggleShowObjectBounds();
65                         void ToggleScreenDebugFont();
66                         void ToggleEnableShading();
67                         void SetViewBounds();
68                         void LoadSVGIntoDocument();
69                         void SetDocumentFont();
70                         void StateInsertText() {ChangeState(INSERT_TEXT);}
71                         void StateAbout() {ChangeState(ABOUT);}
72                         void StateParseSVG() {ChangeState(PARSE_SVG);}
73                         void PressOK() {if (m_on_ok != NULL) (this->*m_on_ok)();}
74
75                 private:
76                         static ControlPanel * g_panel;
77                         void paintEvent(QPaintEvent * e);
78                         ControlPanel(RunArgs & a, QWidget * p = NULL);
79                         virtual ~ControlPanel() {}
80                         void UpdateAll();
81                         void ChangeState(State next_state);
82                         View & m_view;
83                         Document & m_doc;
84                         Screen & m_screen;
85                         
86                         int m_width;
87                         int m_height;
88                         
89                         
90                         State m_state;
91                         
92                         QMenu * CreateMainMenu();
93                         QMenu * CreateViewMenu();
94                         QMenu * CreateDocumentMenu();
95                         QMenu * CreateScreenMenu();
96                         void CreateLayout();
97                         
98                         void InsertTextIntoDocument();
99                         void InsertSVGIntoDocument();
100                         
101                         QAction * m_screen_gpu_rendering;
102                         QAction * m_screen_cpu_rendering;
103                         QAction * m_screen_show_debug;
104                         
105                         QAction * m_document_set_font;
106                         QAction * m_document_insert_text;
107                         QAction * m_document_parse_svg;
108                         QAction * m_document_load_svg;
109                         QAction * m_view_set_bounds;
110                         QAction * m_view_show_object_bounds;
111                         QAction * m_view_enable_shading;
112                         
113                 
114                         QTextEdit * m_text_edit;
115                         QPushButton * m_ok_button;
116                         
117                         void (ControlPanel::* m_on_ok)();
118
119
120         };
121
122 }
123
124 #endif //CONTROLPANEL_DISABLED
125
126 #endif //_CONTROLPANEL_H

UCC git Repository :: git.ucc.asn.au