1 //////////////////////////////////////////////////////////////////////////
2 //
3 // pgAdmin III - PostgreSQL Tools
4 //
5 // Copyright (C) 2002 - 2016, The pgAdmin Development Team
6 // This software is released under the PostgreSQL Licence
7 //
8 // gqbViewPanels.h - All panels used by GQB
9 //
10 //////////////////////////////////////////////////////////////////////////
11 
12 #ifndef GQBVIEWPANELS_H
13 #define GQBVIEWPANELS_H
14 
15 #include <wx/minifram.h>
16 
17 // App headers
18 #include "gqb/gqbViewController.h"
19 #include "gqb/gqbGridProjTable.h"
20 #include "gqb/gqbGridRestTable.h"
21 #include "gqb/gqbGridOrderTable.h"
22 #include "gqb/gqbGridJoinTable.h"
23 
24 enum gridButtons
25 {
26 	GQB_COLS_UP_BUTTON_ID,
27 	GQB_COLS_UP_TOP_BUTTON_ID,
28 	GQB_COLS_DOWN_BUTTON_ID,
29 	GQB_COLS_DOWN_BOTTOM_BUTTON_ID,
30 	GQB_COLS_ADD_BUTTON_ID,
31 	GQB_COLS_DROP_BUTTON_ID,
32 
33 	GQB_JOIN_COLS_ADD_BUTTON_ID,
34 	GQB_JOIN_COLS_DELETE_BUTTON_ID,
35 
36 	GQB_ORDER_DROP_BUTTON_ID,
37 	GQB_ORDER_DROP_ALL_BUTTON_ID,
38 	GQB_ORDER_ADD_ALL_BUTTON_ID,
39 	GQB_ORDER_ADD_BUTTON_ID,
40 	GQB_ORDER_UP_BUTTON_ID,
41 	GQB_ORDER_UP_TOP_BUTTON_ID,
42 	GQB_ORDER_DOWN_BUTTON_ID,
43 	GQB_ORDER_DOWN_BOTTOM_BUTTON_ID
44 };
45 
46 //
47 //   Projection Panel
48 //
49 
50 class gqbGridPanel: public wxPanel
51 {
52 public:
53 	gqbGridPanel(wxWindow *parent, wxWindowID id, gqbGridProjTable *gridModel);
54 	~gqbGridPanel();
55 	wxBitmapButton *buttonUp, *buttonDown, *buttonUpTop, *buttonDownBottom;
56 	wxBitmap upBitmap, upTopBitmap, downBitmap, downBottomBitmap;
57 	void SetGridColsSize();
58 
59 	// Events for wxGrid
60 	void OnGridSelectCell( wxGridEvent &ev );
61 	void OnGridRangeSelected( wxGridRangeSelectEvent &ev );
62 	void OnButtonUp(wxCommandEvent &);
63 	void OnButtonUpTop(wxCommandEvent &);
64 	void OnButtonDown(wxCommandEvent &);
65 	void OnButtonDownBottom(wxCommandEvent &);
66 
67 private:
68 	bool allowSelCells;
69 	int selTop, selBottom;        // Range Selection of wxGrid, -1 it's value not set.
70 	wxGrid *colsGrid;             // Columns Grid used for order of columns in sentence & single row functions
71 	gqbGridProjTable *gModel;
72 	DECLARE_EVENT_TABLE()
73 };
74 
75 //
76 //   Panels reusable components
77 //
78 
79 class gqbColsTree : public wxTreeCtrl
80 {
81 public:
82 	gqbColsTree(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style);
83 	wxTreeItemId &createRoot(wxString &Name);
getRootNode()84 	wxTreeItemId &getRootNode()
85 	{
86 		return rootNode;
87 	}
88 	void refreshTree(gqbModel *model, gqbQueryObject *doNotInclude = NULL);
89 	virtual void DeleteAllItems();
~gqbColsTree()90 	~gqbColsTree()
91 	{
92 		DeleteAllItems();
93 	}
94 
95 private:
96 	wxTreeItemId rootNode;
97 };
98 
99 enum
100 {
101 	QR_TREE_OK = 9100,
102 	QR_TREE
103 };
104 
105 class gqbColsPopUp: public wxDialog
106 {
107 public:
108 	gqbColsPopUp(wxWindow *parent, wxWindowID id, wxString title, wxPoint pos, const wxSize size);
109 	virtual void refreshTree(gqbModel *_model);
110 	void OnPopUpOKClick(wxCommandEvent &event);
111 	void OnPopUpTreeClick(wxTreeEvent &event);
112 	void OnPopUpTreeDoubleClick(wxTreeEvent &event);
113 	void setEditText(wxString text);
getEditText()114 	wxString getEditText()
115 	{
116 		return editTree->GetValue();
117 	};
setUsedCell(wxGrid * grid,int row,int col)118 	void setUsedCell(wxGrid *grid, int row, int col)
119 	{
120 		usedGrid = grid;
121 		_row = row;
122 		_col = col;
123 	};
124 	void focus();
125 
126 protected:
127 	int _row, _col;
128 	wxGrid *usedGrid;
129 	gqbColsTree *colsTree;
130 	wxTextCtrl *editTree;
131 	wxButton *buttonTree;
132 	gqbModel *model;              // Not owned shouldn't be deleted at this class
133 
134 };
135 
136 class gqbJoinsPanel;
137 
138 class gqbJoinsPopUp: public gqbColsPopUp
139 {
140 public:
141 	gqbJoinsPopUp(
142 	    gqbJoinsPanel *parent, wxWindowID id, wxString title, wxPoint pos,
143 	    const wxSize size, gqbQueryJoin *_join, bool isSource,
144 	    gqbGridJoinTable *_gmodel);
145 	void OnPopUpOKClick(wxCommandEvent &event);
146 	void OnPopUpTreeClick(wxTreeEvent &event);
147 	void OnPopUpTreeDoubleClick(wxTreeEvent &event);
148 
149 	// This should be called through OnPopUpOKClick & OnPopUpTreeDoubleClick
150 	void updateJoin();
151 
152 	virtual void refreshTree(gqbModel *_model);
153 
154 private:
155 	gqbQueryJoin *join; // Not owned, shouldn't be deletedat this class
156 	gqbQueryObject *selectedTbl; //Not owned, shouldn't be deletedat this class
157 	gqbColumn *selectedCol; //Not owned, shouldn't be deletedat this class
158 	bool isSource;
159 	gqbGridJoinTable *gModel; //Not owned, shouldn't be deletedat this class
160 };
161 
162 //
163 //   Criterias Panel
164 //
165 
166 class gqbCustomGrid: public wxGrid
167 {
168 public:
169 	gqbCustomGrid(wxWindow *parent, wxWindowID id);
170 	void ComboBoxEvent(wxGridEvent &event);
171 	void RevertSel();
172 
173 private:
174 	wxGridSelection *m_selTemp;
175 
176 };
177 
178 class gqbCriteriaPanel: public wxPanel
179 {
180 public:
181 	gqbCriteriaPanel(wxWindow *parent, gqbModel *_model, gqbGridRestTable *gridModel);
182 	void OnCellLeftClick(wxGridEvent &ev);
183 	void refreshTree(gqbModel *_model);
184 	void OnButtonAdd(wxCommandEvent &);
185 	void OnButtonDrop(wxCommandEvent &);
186 	void SetGridColsSize();
187 
188 private:
189 	wxBitmapButton *buttonAdd, *buttonDrop;
190 	wxBitmap addBitmap, dropBitmap;
191 	void showColsPopUp(int row, int col, wxPoint pos);
192 	gqbGridRestTable *gModel;
193 	wxGrid *restrictionsGrid;     // Columns Grid used for order of columns in sentence & single row functions
194 	gqbModel *model;              // Not owned shouldn't be deleted at this class
195 	gqbColsPopUp *colsPopUp;
196 	DECLARE_EVENT_TABLE()
197 
198 };
199 
200 class gqbJoinsPanel: public wxPanel
201 {
202 public:
203 	gqbJoinsPanel(wxWindow *parent, gqbModel *_model, gqbGridJoinTable *_gmodel, gqbController *_controller);
204 	void OnCellLeftClick(wxGridEvent &ev);
205 	void refreshTree(gqbModel *_model);
206 	void OnButtonAdd(wxCommandEvent &);
207 	void OnButtonDrop(wxCommandEvent &);
208 	void SetGridColsSize();
209 	void updateView(gqbQueryObject *tbl);
210 	void selectJoin(gqbQueryJoin *join);
211 
212 private:
213 	wxBitmapButton *buttonAdd, *buttonDrop;
214 	wxBitmap addBitmap, dropBitmap;
215 	void showColsPopUp(int row, int col, wxPoint pos);
216 	gqbCustomGrid *joinsGrid;
217 	gqbModel *model;              // Not owned shouldn't be deleted at this class
218 	gqbJoinsPopUp *joinsPopUp;    // It will be automatically deleted
219 	gqbGridJoinTable *gModel;     // Not owned shouldn't be deleted at this class
220 	gqbController *controller;    // Not owned shouldn't be deleted at this class
221 	DECLARE_EVENT_TABLE()
222 
223 };
224 
225 //
226 // Order by Panel
227 //
228 
229 class gqbOrderPanel: public wxPanel
230 {
231 public:
232 	gqbOrderPanel(wxWindow *parent, gqbGridOrderTable *gridTableLeft, gqbGridOrderTable *gridTableRight);
233 	void SetGridColsSize();
234 
235 private:
236 	bool allowSelCells;
237 	void OnButtonUp(wxCommandEvent &);
238 	void OnButtonUpTop(wxCommandEvent &);
239 	void OnButtonDown(wxCommandEvent &);
240 	void OnButtonDownBottom(wxCommandEvent &);
241 	void OnButtonRemove(wxCommandEvent &);
242 	void OnButtonRemoveAll(wxCommandEvent &);
243 	void OnButtonAdd(wxCommandEvent &);
244 	void OnButtonAddAll(wxCommandEvent &);
245 	void OnGridSelectCell( wxGridEvent &ev );
246 	void OnGridRangeSelected( wxGridRangeSelectEvent &ev );
247 	void OnCellLeftClick(wxGridEvent &ev);
248 	int selLeft, selRightTop, selRightBottom;
249 	gqbGridOrderTable *tableLeft, *tableRight;
250 	wxGrid *availableColumns, *usedColumns;
251 	wxBitmapButton *buttonAdd, *buttonAddAll, *buttonRemove, *buttonRemoveAll;
252 	wxBitmap addBitmap, addAllBitmap, removeBitmap, removeAllBitmap;
253 	wxBitmapButton *buttonUp, *buttonDown, *buttonUpTop, *buttonDownBottom;
254 	wxBitmap upBitmap, upTopBitmap, downBitmap, downBottomBitmap;
255 	DECLARE_EVENT_TABLE()
256 };
257 #endif
258 
259