1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// ctlTree.h - wxTreeCtrl containing pgObjects
//
//////////////////////////////////////////////////////////////////////////
#ifndef CTLTREE_H
#define CTLTREE_H
// wxWindows headers
#include <wx/wx.h>
#include <wx/treectrl.h>
#include <wx/timer.h>
class pgObject;
class pgCollection;
class pgaFactory;
class ctlTreeFindTimer;
class ctlTree : public wxTreeCtrl
{
public:
ctlTree(wxWindow *parent, wxWindowID id, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxTR_HAS_BUTTONS);
void SetItemImage(const wxTreeItemId &item, int image, wxTreeItemIcon which = wxTreeItemIcon_Normal);
wxTreeItemId AppendItem(const wxTreeItemId &parent, const wxString &text, int image = -1, int selImage = -1, wxTreeItemData *data = NULL);
wxTreeItemId AppendObject(pgObject *parent, pgObject *object);
void RemoveDummyChild(pgObject *obj);
pgCollection *AppendCollection(pgObject *parent, pgaFactory &factory);
pgObject *GetObject(wxTreeItemId id);
pgObject *GetParentObject(wxTreeItemId id)
{
return GetObject(GetItemParent(id));
}
pgCollection *GetParentCollection(wxTreeItemId id);
pgObject *FindObject(pgaFactory &factory, wxTreeItemId parent);
pgCollection *FindCollection(pgaFactory &factory, wxTreeItemId parent);
wxTreeItemId FindItem(const wxTreeItemId &item, const wxString &str);
virtual ~ctlTree();
DECLARE_EVENT_TABLE()
private:
void OnChar(wxKeyEvent &event);
wxString m_findPrefix;
ctlTreeFindTimer *m_findTimer;
friend class ctlTreeFindTimer;
};
// timer used to clear ctlTreeCtrl::m_findPrefix if no key was pressed
// for a sufficiently long time
class ctlTreeFindTimer : public wxTimer
{
public:
// reset the current prefix after half a second of inactivity
enum { CTLTREE_DELAY = 500 };
ctlTreeFindTimer( ctlTree *owner )
{
m_owner = owner;
}
virtual void Notify()
{
m_owner->m_findPrefix.clear();
}
private:
ctlTree *m_owner;
DECLARE_NO_COPY_CLASS(ctlTreeFindTimer)
};
class treeObjectIterator
{
public:
treeObjectIterator(ctlTree *browser, pgObject *obj);
pgObject *GetNextObject();
private:
wxTreeItemId lastItem;
ctlTree *browser;
pgObject *object;
wxCookieType cookie;
};
#endif
|