#ifndef CTLSHORTCUT_H #define CTLSHORTCUT_H #include "pgAdmin3.h" #include class ctlShortCut : public wxOwnerDrawnComboBox { public: ctlShortCut(frmMain* main,wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); ~ctlShortCut(); void OnTEXT_ENTER(wxCommandEvent& event); void OnCombo(wxCommandEvent& event); void OnTEXT(wxCommandEvent& event); void OnChar(wxKeyEvent& event); void OnCharT(wxKeyEvent& event); void SetText(wxString& str, bool settext); wxTextCtrl* GetTextControl(); static wxString viewText(wxString& src); wxArrayString BuildList(wxString& find,bool full); wxTextCtrl* txt; wxString fnd; wxVListBoxComboPopup* pop; frmMain* frm; wxImageList* imageList; virtual void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const { if (item == wxNOT_FOUND) return; wxCoord w1, h1; wxString ss = GetString(item); wxString src = viewText(ss); int pp = src.Find(fnd); wxRect r; int idx=0; wxString si = ss.substr(0, 4).Trim(); if (si.ToInt(&idx) && idx>=0) { dc.DrawBitmap(imageList->GetBitmap(idx),wxPoint(rect.x,rect.y)); } ; r.x = rect.x+24; r.y = rect.y + (rect.height / 2) - (dc.GetCharHeight() / 2); if (pp >= 0) { dc.SetBrush(*wxYELLOW_BRUSH); const wxString& line = src; pp = line.Find(fnd); int lineWidth, lineWidthP, lineHeight, start = 0; wxString pref; pref = line.substr(start, pp); dc.GetTextExtent(pref, &lineWidthP, &lineHeight); r.x = r.x + lineWidthP+3; pref = line.substr(pp, fnd.Len()); dc.GetTextExtent(pref, &lineWidth, &lineHeight); r.width = lineWidth; r.height = lineHeight; { wxDCPenChanger npen(dc, *wxThePenList->FindOrCreatePen(*wxBLACK, 1, wxPENSTYLE_SOLID)); dc.DrawRoundedRectangle(r, 3); } } dc.GetTextExtent(src, &w1, &h1); dc.DrawText(src, rect.x + 3+24, (rect.y + 0) + (rect.height / 2) - (dc.GetCharHeight() / 2) ); //dc.SetFont(m_fontList[item]); } virtual void OnDrawBackground(wxDC& dc, const wxRect& rect, int item, int flags) const { // If item is selected or even, or we are painting the // combo control itself, use the default rendering. if ((flags & (wxODCB_PAINTING_CONTROL | wxODCB_PAINTING_SELECTED)) || (item & 1) == 0) { wxOwnerDrawnComboBox::OnDrawBackground(dc, rect, item, flags); return; } // Otherwise, draw every other background with different colour. wxColour bgCol(245, 245, 255); dc.SetBrush(wxBrush(bgCol)); dc.SetPen(wxPen(bgCol)); dc.DrawRectangle(rect); } virtual wxCoord OnMeasureItem(size_t item) const { return 20; } virtual wxCoord OnMeasureItemWidth(size_t item) const { return 400; } }; class dlgShortCut : public wxDialog { public: dlgShortCut(frmMain* parent, wxWindowID id, wxPoint pos, const wxSize size); ~dlgShortCut(); void OnKEY_DOWN(wxKeyEvent& event); void OnCharHook(wxKeyEvent& event); //void OnPopUpOKClick(wxCommandEvent& event); //void focus(); private: ctlShortCut *cb; frmMain* frm; }; #endif