mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-07-28 22:03:02 -06:00
support PG11
Поддержка PostgreSQL 11 только для Windows
This commit is contained in:
commit
4af765213c
1765 changed files with 407959 additions and 0 deletions
182
debugger/ctlVarWindow.cpp
Normal file
182
debugger/ctlVarWindow.cpp
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// pgAdmin III - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
// ctlVarWindow.cpp - debugger
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "pgAdmin3.h"
|
||||
|
||||
// wxWindows headers
|
||||
#include <wx/wx.h>
|
||||
#include <wx/log.h>
|
||||
|
||||
// App headers
|
||||
#include "debugger/ctlVarWindow.h"
|
||||
|
||||
IMPLEMENT_CLASS(ctlVarWindow, wxGrid)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// ctlVarWindow constructor
|
||||
//
|
||||
// Initialize the grid control and clear it out....
|
||||
//
|
||||
ctlVarWindow::ctlVarWindow(wxWindow *parent, wxWindowID id)
|
||||
: wxGrid(parent, id),
|
||||
m_cells(NULL),
|
||||
m_nameFont(GetDefaultCellFont())
|
||||
{
|
||||
SetFont(settings->GetSystemFont());
|
||||
|
||||
// Create the grid control
|
||||
CreateGrid(0, 0);
|
||||
SetRowLabelSize(0); // Turn off the row labels
|
||||
|
||||
// Set up three columns: name, value, and data type
|
||||
AppendCols(3);
|
||||
SetColLabelValue(COL_NAME, _("Name"));
|
||||
SetColLabelValue(COL_TYPE, _("Type"));
|
||||
SetColLabelValue(COL_VALUE, _("Value"));
|
||||
|
||||
EnableDragGridSize(true);
|
||||
|
||||
// EDB wants to hide certain PL variables. To do that, we
|
||||
// keep a hash of hidden names and a hash of hidden types...
|
||||
m_hiddenNames.insert(wxT("found"));
|
||||
m_hiddenNames.insert(wxT("rowcount"));
|
||||
m_hiddenNames.insert(wxT("sqlcode"));
|
||||
m_hiddenNames.insert(wxT("sqlerrm"));
|
||||
m_hiddenNames.insert(wxT("_found"));
|
||||
m_hiddenNames.insert(wxT("_rowcount"));
|
||||
m_hiddenNames.insert(wxT("sqlstate"));
|
||||
|
||||
m_hiddenTypes.insert(wxT("refcursor"));
|
||||
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// AddVar()
|
||||
//
|
||||
// Adds (or updates) the given variable in the 'local variables' window. If
|
||||
// we find a variabled named 'name' in the window, we simply update the value,
|
||||
// otherwise, we create a new entry in the grid
|
||||
//
|
||||
void ctlVarWindow::AddVar(wxString name, wxString value, wxString type, bool readOnly)
|
||||
{
|
||||
// If this is a 'hidden' variable, just ignore it
|
||||
|
||||
if (m_hiddenNames.find(name) != m_hiddenNames.end())
|
||||
return;
|
||||
|
||||
if (m_hiddenTypes.find(type) != m_hiddenTypes.end())
|
||||
return;
|
||||
|
||||
if (m_cells == NULL)
|
||||
{
|
||||
// This is the first variable we're adding to this grid,
|
||||
// layout the grid and set the column headers.
|
||||
|
||||
m_cells = new wsCellHash;
|
||||
}
|
||||
|
||||
// Try to find an existing grid cell for this variable...
|
||||
wxString key(name);
|
||||
|
||||
wsCellHash::iterator cell = m_cells->find(key);
|
||||
|
||||
if (cell == m_cells->end())
|
||||
{
|
||||
// Can't find this variable in the grid, go ahead and add it
|
||||
|
||||
gridCell newCell;
|
||||
|
||||
newCell.m_row = m_cells->size();
|
||||
newCell.m_type = type;
|
||||
newCell.m_value = value;
|
||||
|
||||
AppendRows(1);
|
||||
|
||||
SetRowLabelValue(newCell.m_row, key);
|
||||
|
||||
SetCellValue(newCell.m_row, COL_NAME, key);
|
||||
SetCellValue(newCell.m_row, COL_TYPE, type);
|
||||
SetCellValue(newCell.m_row, COL_VALUE, value);
|
||||
|
||||
SetCellFont(newCell.m_row, COL_NAME, m_nameFont);
|
||||
|
||||
SetReadOnly(newCell.m_row, COL_NAME, true);
|
||||
SetReadOnly(newCell.m_row, COL_TYPE, true);
|
||||
SetReadOnly(newCell.m_row, COL_VALUE, readOnly);
|
||||
|
||||
(*m_cells)[key] = newCell;
|
||||
}
|
||||
else
|
||||
{
|
||||
// This variable is already in the grid, update the value
|
||||
// and hilite it so the user knows that it has changed.
|
||||
|
||||
cell->second.m_value = value;
|
||||
|
||||
if (GetCellValue(cell->second.m_row, COL_VALUE).IsSameAs(value))
|
||||
SetCellTextColour(cell->second.m_row, COL_VALUE, *wxBLACK);
|
||||
else
|
||||
SetCellTextColour(cell->second.m_row, COL_VALUE, *wxRED);
|
||||
|
||||
SetCellValue(cell->second.m_row, COL_VALUE, value);
|
||||
|
||||
// FIXME: why is this part conditional?
|
||||
// FIXME: why do we need this code? can the type ever change?
|
||||
|
||||
if (GetCellValue(cell->second.m_row, COL_TYPE) == wxT(""))
|
||||
{
|
||||
SetCellValue(cell->second.m_row, COL_TYPE, type);
|
||||
}
|
||||
}
|
||||
|
||||
// AutoSizeColumns(false);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// delVar()
|
||||
//
|
||||
// Removes the given variable from the 'local variables' window.
|
||||
//
|
||||
|
||||
void ctlVarWindow::DelVar(wxString name)
|
||||
{
|
||||
if (name.IsEmpty())
|
||||
{
|
||||
delete m_cells;
|
||||
m_cells = NULL;
|
||||
|
||||
if (GetNumberRows())
|
||||
DeleteRows(0, GetNumberRows());
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int row = 0; row < GetNumberRows(); row++)
|
||||
{
|
||||
if (GetCellValue(row, COL_NAME) == name)
|
||||
{
|
||||
DeleteRows(row, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
wxString ctlVarWindow::GetVarName(int row)
|
||||
{
|
||||
return(GetCellValue(row, COL_NAME));
|
||||
|
||||
}
|
||||
|
||||
wxString ctlVarWindow::GetVarValue(int row)
|
||||
{
|
||||
return(GetCellValue(row, COL_VALUE));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue