~ubuntu-branches/debian/sid/pgadmin3/sid

« back to all changes in this revision

Viewing changes to pgadmin/gqb/gqbGridRestTable.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Gerfried Fuchs
  • Date: 2009-07-30 12:27:16 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20090730122716-fddbh42on721bbs2
Tags: 1.10.0-1
* New upstream release.
* Adjusted watch file to match release candidates.
* Updated to Standards-Version 3.8.2:
  - Moved to Section: database.
  - Add DEB_BUILD_OPTIONS support for parallel building.
  - Move from findstring to filter suggestion for DEB_BUILD_OPTIONS parsing.
* pgagent got split into its own separate source package by upstream.
* Exclude Docs.vcproj from installation.
* Move doc-base.enus from pgadmin3 to pgadmin3-data package, the files are
  in there too.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//////////////////////////////////////////////////////////////////////////
 
2
//
 
3
// pgAdmin III - PostgreSQL Tools
 
4
// RCS-ID:      $Id: gqbGridRestTable.cpp 7758 2009-03-26 20:49:59Z dpage $
 
5
// Copyright (C) 2002 - 2009, The pgAdmin Development Team
 
6
// This software is released under the BSD Licence
 
7
//
 
8
// gqbGridRestTable.cpp - Table implementation for Restrictions Panel Grid
 
9
//
 
10
//////////////////////////////////////////////////////////////////////////
 
11
 
 
12
// App headers
 
13
#include "pgAdmin3.h"
 
14
 
 
15
// wxWindows headers
 
16
#include <wx/wx.h>
 
17
#include <wx/settings.h>
 
18
#include <wx/utils.h>
 
19
#include <wx/notebook.h>
 
20
 
 
21
// App headers
 
22
#include "gqb/gqbGridRestTable.h"
 
23
#include "gqb/gqbColumn.h"
 
24
#include "gqb/gqbQueryObjs.h"
 
25
#include "gqb/gqbViewPanels.h"
 
26
 
 
27
gqbGridRestTable::gqbGridRestTable(gqbRestrictions *_restrictions):
 
28
wxGridTableBase()
 
29
{
 
30
    restrictions=_restrictions;
 
31
}
 
32
 
 
33
 
 
34
gqbGridRestTable::~gqbGridRestTable()
 
35
{
 
36
}
 
37
 
 
38
 
 
39
int gqbGridRestTable::GetNumberRows()
 
40
{
 
41
    return (restrictions->restrictionsCount());
 
42
}
 
43
 
 
44
 
 
45
int gqbGridRestTable::GetNumberCols()
 
46
{
 
47
    return 4;
 
48
}
 
49
 
 
50
 
 
51
bool gqbGridRestTable::IsEmptyCell( int row, int col )
 
52
{
 
53
 
 
54
    int count=restrictions->restrictionsCount();
 
55
    if(row+1 <= count)
 
56
        return false;
 
57
    else
 
58
        return true;
 
59
}
 
60
 
 
61
 
 
62
wxString gqbGridRestTable::GetValue( int row, int col )
 
63
{
 
64
    switch(col)
 
65
    {
 
66
        case 0:
 
67
            return ((gqbQueryRestriction*)restrictions->getRestrictionAt(row))->getLeft();
 
68
            break;
 
69
        case 1:
 
70
            return ((gqbQueryRestriction*)restrictions->getRestrictionAt(row))->getRestriction();
 
71
            break;
 
72
        case 2:
 
73
            return ((gqbQueryRestriction*)restrictions->getRestrictionAt(row))->getValue_s();
 
74
            break;
 
75
        case 3:
 
76
            return ((gqbQueryRestriction*)restrictions->getRestrictionAt(row))->getConnector();
 
77
            break;
 
78
    };
 
79
 
 
80
    return wxT("");
 
81
}
 
82
 
 
83
 
 
84
wxString gqbGridRestTable::GetColLabelValue( int col)
 
85
{
 
86
    switch(col)
 
87
    {
 
88
        case 0:
 
89
            return _("Restricted Value");
 
90
            break;
 
91
        case 1:
 
92
            return _("Operator");
 
93
            break;
 
94
        case 2:
 
95
            return _("Value");
 
96
            break;
 
97
        case 3:
 
98
            return _("Connector");
 
99
            break;
 
100
    };
 
101
    return wxT("");
 
102
}
 
103
 
 
104
 
 
105
void gqbGridRestTable::SetValue( int row, int col, const wxString& value )
 
106
{
 
107
    switch(col)
 
108
    {
 
109
        case 0:
 
110
            ((gqbQueryRestriction*)restrictions->getRestrictionAt(row))->setLeft(value);
 
111
            break;
 
112
        case 1:
 
113
            ((gqbQueryRestriction*)restrictions->getRestrictionAt(row))->setRestriction(value);
 
114
            break;
 
115
        case 2:
 
116
            ((gqbQueryRestriction*)restrictions->getRestrictionAt(row))->setValue_s(value);
 
117
            break;
 
118
        case 3:
 
119
            ((gqbQueryRestriction*)restrictions->getRestrictionAt(row))->setConnector(value);
 
120
            break;
 
121
    }
 
122
}
 
123
 
 
124
 
 
125
void gqbGridRestTable::AppendItem(gqbQueryRestriction *item)
 
126
{
 
127
    bool notify=true;
 
128
 
 
129
    restrictions->addRestriction(item);
 
130
 
 
131
    if (notify && GetView() )
 
132
    {
 
133
        wxGridTableMessage msg( this,
 
134
            wxGRIDTABLE_NOTIFY_ROWS_INSERTED,
 
135
            (restrictions->restrictionsCount()-1),
 
136
            1 );
 
137
        GetView()->ProcessTableMessage( msg );
 
138
    }
 
139
 
 
140
}
 
141
 
 
142
 
 
143
bool gqbGridRestTable::DeleteRows(size_t pos = 0, size_t numRows = 1)
 
144
{
 
145
    if(pos>=0 && numRows==1)
 
146
    {
 
147
        gqbQueryRestriction *r=restrictions->getRestrictionAt(pos);
 
148
        restrictions->removeRestriction(r);
 
149
        
 
150
                // Notify Grid about the change
 
151
                if ( GetView() )
 
152
        {
 
153
            wxGridTableMessage msg( this,
 
154
                wxGRIDTABLE_NOTIFY_ROWS_DELETED,
 
155
                pos,
 
156
                1 );
 
157
            GetView()->ProcessTableMessage( msg );
 
158
        }
 
159
 
 
160
        delete r;
 
161
        return true;
 
162
    }
 
163
    else
 
164
        return false;
 
165
}
 
166
 
 
167
 
 
168
// Removes all items from gqbGridTable
 
169
void gqbGridRestTable::emptyTableData()
 
170
{
 
171
 
 
172
    int count=restrictions->restrictionsCount();
 
173
    restrictions->deleteAllRestrictions();
 
174
 
 
175
    if ( GetView() )                              //Notify Grid about the change
 
176
    {
 
177
        wxGridTableMessage msg( this,
 
178
            wxGRIDTABLE_NOTIFY_ROWS_DELETED,
 
179
            1,
 
180
            count);
 
181
        GetView()->ProcessTableMessage( msg );
 
182
    }
 
183
}
 
184
 
 
185
 
 
186
//
 
187
// Cell rendering utilities classes
 
188
//
 
189
 
 
190
void wxGridCellComboBoxRenderer::Draw(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc,
 
191
const wxRect& rectCell, int row, int col, bool isSelected)
 
192
{
 
193
    wxGridCellRenderer::Draw(grid, attr, dc, rectCell, row, col, isSelected);
 
194
 
 
195
    // first calculate button size
 
196
    // don't draw outside the cell
 
197
    int nButtonWidth = 17;
 
198
    if (rectCell.height < 2) return;
 
199
    wxRect rectButton;
 
200
    rectButton.x = rectCell.x + rectCell.width - nButtonWidth;
 
201
    rectButton.y = rectCell.y + 1;
 
202
    int cell_rows, cell_cols;
 
203
    attr.GetSize(&cell_rows, &cell_cols);
 
204
    rectButton.width = nButtonWidth;
 
205
    if (cell_rows == 1)
 
206
        rectButton.height = rectCell.height-2;
 
207
    else
 
208
        rectButton.height = nButtonWidth;
 
209
 
 
210
    SetTextColoursAndFont(grid, attr, dc, isSelected);
 
211
    int hAlign, vAlign;
 
212
    attr.GetAlignment(&hAlign, &vAlign);
 
213
 
 
214
        // Leave room for button
 
215
    wxRect rect = rectCell;
 
216
    rect.SetWidth(rectCell.GetWidth() - rectButton.GetWidth()-2);
 
217
    rect.Inflate(-1);
 
218
    grid.DrawTextRectangle(dc, grid.GetCellValue(row, col), rect, hAlign, vAlign);
 
219
 
 
220
        // Don't bother drawing if the cell is too small
 
221
    if (rectButton.height < 4 || rectButton.width < 4) 
 
222
                return;
 
223
 
 
224
        // Draw 3-d button
 
225
    wxColour colourBackGround = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE);
 
226
    dc.SetBrush(wxBrush(colourBackGround, wxSOLID));
 
227
    dc.SetPen(wxPen(colourBackGround, 1, wxSOLID));
 
228
    dc.DrawRectangle(rectButton);
 
229
    dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT), 1, wxSOLID));
 
230
    dc.DrawLine(rectButton.GetLeft(), rectButton.GetBottom(),
 
231
        rectButton.GetRight(), rectButton.GetBottom());
 
232
    dc.DrawLine(rectButton.GetRight(), rectButton.GetBottom(),
 
233
        rectButton.GetRight(), rectButton.GetTop()-1);
 
234
    dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW),
 
235
        1, wxSOLID));
 
236
    dc.DrawLine(rectButton.GetLeft()+1, rectButton.GetBottom()-1,
 
237
        rectButton.GetRight()-1, rectButton.GetBottom()-1);
 
238
    dc.DrawLine(rectButton.GetRight()-1, rectButton.GetBottom()-1,
 
239
        rectButton.GetRight()-1, rectButton.GetTop());
 
240
    dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT),
 
241
        1, wxSOLID));
 
242
    dc.DrawLine(rectButton.GetRight()-2, rectButton.GetTop()+1,
 
243
        rectButton.GetLeft()+1, rectButton.GetTop()+1);
 
244
    dc.DrawLine(rectButton.GetLeft()+1, rectButton.GetTop()+1,
 
245
        rectButton.GetLeft()+1, rectButton.GetBottom()-1);
 
246
 
 
247
        // Draw little triangle
 
248
    int nTriWidth = 7;
 
249
    int nTriHeight = 4;
 
250
    wxPoint point[3];
 
251
    point[0] = wxPoint(rectButton.GetLeft() + (rectButton.GetWidth()-nTriWidth)/2,
 
252
        rectButton.GetTop()+(rectButton.GetHeight()-nTriHeight)/2);
 
253
    point[1] = wxPoint(point[0].x+nTriWidth-1, point[0].y);
 
254
    point[2] = wxPoint(point[0].x+3, point[0].y+nTriHeight-1);
 
255
    dc.SetBrush(wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT), wxSOLID));
 
256
    dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT), 1, wxSOLID));
 
257
    dc.DrawPolygon(3, point);
 
258
    if (m_border == wxLAYOUT_TOP)
 
259
    {
 
260
        dc.SetPen(wxPen(*wxBLACK, 1, wxDOT));
 
261
        dc.DrawLine(rectCell.GetRight(), rectCell.GetTop(),
 
262
            rectCell.GetLeft(), rectCell.GetTop());
 
263
    }
 
264
}
 
265
 
 
266
 
 
267
void wxGridCellButtonRenderer::Draw(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc,
 
268
const wxRect& rectCell, int row, int col, bool isSelected)
 
269
{
 
270
    wxGridCellRenderer::Draw(grid, attr, dc, rectCell, row, col, isSelected);
 
271
 
 
272
        // First calculate button size
 
273
        // don't draw outside the cell
 
274
    int nButtonWidth = 17;
 
275
    if (rectCell.height < 2) return;
 
276
    wxRect rectButton;
 
277
    rectButton.x = rectCell.x + rectCell.width - nButtonWidth;
 
278
    rectButton.y = rectCell.y + 1;
 
279
    int cell_rows, cell_cols;
 
280
    attr.GetSize(&cell_rows, &cell_cols);
 
281
    rectButton.width = nButtonWidth;
 
282
    if (cell_rows == 1)
 
283
        rectButton.height = rectCell.height-2;
 
284
    else
 
285
        rectButton.height = nButtonWidth;
 
286
 
 
287
    SetTextColoursAndFont(grid, attr, dc, isSelected);
 
288
    int hAlign, vAlign;
 
289
    attr.GetAlignment(&hAlign, &vAlign);
 
290
 
 
291
        // Leave room for button
 
292
    wxRect rect = rectCell;
 
293
    rect.SetWidth(rectCell.GetWidth() - rectButton.GetWidth()-2);
 
294
    rect.Inflate(-1);
 
295
    grid.DrawTextRectangle(dc, grid.GetCellValue(row, col), rect, hAlign, vAlign);
 
296
 
 
297
 
 
298
        // Don't bother drawing if the cell is too small draw 3-d button
 
299
    if (rectButton.height < 4 || rectButton.width < 4) 
 
300
                return;
 
301
 
 
302
    wxColour colourBackGround = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE);
 
303
    dc.SetBrush(wxBrush(colourBackGround, wxSOLID));
 
304
    dc.SetPen(wxPen(colourBackGround, 1, wxSOLID));
 
305
    dc.DrawRectangle(rectButton);
 
306
    dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT), 1, wxSOLID));
 
307
    dc.DrawLine(rectButton.GetLeft(), rectButton.GetBottom(),
 
308
        rectButton.GetRight(), rectButton.GetBottom());
 
309
    dc.DrawLine(rectButton.GetRight(), rectButton.GetBottom(),
 
310
        rectButton.GetRight(), rectButton.GetTop()-1);
 
311
    dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW),
 
312
        1, wxSOLID));
 
313
    dc.DrawLine(rectButton.GetLeft()+1, rectButton.GetBottom()-1,
 
314
        rectButton.GetRight()-1, rectButton.GetBottom()-1);
 
315
    dc.DrawLine(rectButton.GetRight()-1, rectButton.GetBottom()-1,
 
316
        rectButton.GetRight()-1, rectButton.GetTop());
 
317
    dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT),
 
318
        1, wxSOLID));
 
319
    dc.DrawLine(rectButton.GetRight()-2, rectButton.GetTop()+1,
 
320
        rectButton.GetLeft()+1, rectButton.GetTop()+1);
 
321
    dc.DrawLine(rectButton.GetLeft()+1, rectButton.GetTop()+1,
 
322
        rectButton.GetLeft()+1, rectButton.GetBottom()-1);
 
323
 
 
324
        // Draw little plus symbol
 
325
    dc.SetBrush(wxBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT), wxSOLID));
 
326
    dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT), 1, wxSOLID));
 
327
    int nPlusWidth = 7;
 
328
    int nPlusHeight = 7;
 
329
    wxPoint point[4];
 
330
    point[0] = wxPoint(rectButton.GetLeft() + (rectButton.GetWidth()-nPlusWidth)/2, rectButton.GetTop()+(rectButton.GetHeight()/2)-1);
 
331
    point[1] = wxPoint(point[0].x+nPlusWidth, point[0].y);
 
332
    point[2] = wxPoint(rectButton.GetLeft() + (rectButton.GetWidth())/2, rectButton.GetTop()+(rectButton.GetHeight()-nPlusHeight)/2);
 
333
    point[3] = wxPoint(point[2].x,point[2].y+nPlusHeight);
 
334
    dc.DrawLine(point[0],point[1]);
 
335
    dc.DrawLine(point[2],point[3]);
 
336
 
 
337
    if (m_border == wxLAYOUT_TOP)
 
338
    {
 
339
        dc.SetPen(wxPen(*wxBLACK, 1, wxDOT));
 
340
        dc.DrawLine(rectCell.GetRight(), rectCell.GetTop(),
 
341
            rectCell.GetLeft(), rectCell.GetTop());
 
342
    }
 
343
}
 
344
 
 
345
 
 
346
//
 
347
// Cell editing utilities classes
 
348
//
 
349
dxGridCellSizedChoiceEditor::dxGridCellSizedChoiceEditor(const wxArrayString& choices, bool allowOthers)
 
350
:wxGridCellChoiceEditor(choices,allowOthers)
 
351
{
 
352
}
 
353
 
 
354
 
 
355
dxGridCellSizedChoiceEditor::dxGridCellSizedChoiceEditor(size_t count, const wxString choices[], bool allowOthers)
 
356
:wxGridCellChoiceEditor(count,choices, allowOthers)
 
357
{
 
358
}
 
359
 
 
360
 
 
361
wxGridCellEditor *dxGridCellSizedChoiceEditor::Clone() const
 
362
{
 
363
    dxGridCellSizedChoiceEditor *editor = new
 
364
        dxGridCellSizedChoiceEditor();
 
365
    return editor;
 
366
}
 
367
 
 
368
 
 
369
void dxGridCellSizedChoiceEditor::Show(bool show, wxGridCellAttr *attr)
 
370
{
 
371
    wxGridCellEditor::Show(show, attr);
 
372
}