[wxCL-cvs] wxc/include ejfl.h,NONE,1.1 eljcommand.h,NONE,1.1 eljfont.h,NONE,1.1 eljgizmos.h,NONE,1.1
Status: Alpha
Brought to you by:
efuzzyone
From: Surendra S. <efu...@us...> - 2006-02-15 19:09:12
|
Update of /cvsroot/wxcl/wxc/include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32515 Added Files: ejfl.h eljcommand.h eljfont.h eljgizmos.h eljlog.h eljplot.h extra.h treectrl.h Log Message: Initial revision. --- NEW FILE: eljplot.h --- #if wxVERSION_NUMBER >= 2400 #include "wx/plot/plot.h" #else #include "wx/plot.h" #endif typedef int (*TGetPlotInt)(void* _obj); typedef double (*TGetPlotDouble)(void* _obj, int _x); class ELJPlotCurve : public wxPlotCurve { private: void* EiffelObject; TGetPlotInt EGetStartX; TGetPlotInt EGetEndX; TGetPlotDouble EGetY; public: ELJPlotCurve(void* _obj, void* _str, void* _end, void* _y, int offsetY, double startY, double endY) : wxPlotCurve(offsetY, startY, endY) { EiffelObject = _obj; EGetStartX = (TGetPlotInt)_str; EGetEndX = (TGetPlotInt)_end; EGetY = (TGetPlotDouble)_y; } virtual wxInt32 GetStartX() { return (wxInt32)EGetStartX(EiffelObject); } virtual wxInt32 GetEndX() { return (wxInt32)EGetEndX(EiffelObject); } virtual double GetY(wxInt32 x) { return EGetY(EiffelObject, (int)x); } }; --- NEW FILE: ejfl.h --- #include "wx/fl/toolwnd.h" #include "wx/fl/antiflickpl.h" #include "wx/fl/bardragpl.h" #include "wx/fl/barhintspl.h" #include "wx/fl/cbcustom.h" #include "wx/fl/dyntbar.h" #include "wx/fl/dyntbarhnd.h" #include "wx/fl/gcupdatesmgr.h" #include "wx/fl/hintanimpl.h" #include "wx/fl/newbmpbtn.h" #include "wx/fl/panedrawpl.h" #include "wx/fl/rowdragpl.h" #include "wx/fl/rowlayoutpl.h" typedef void (*TButtonClick)(void* _obj, int _btn); typedef int (*TTitleClick)(void* _obj, void* _evt); typedef void (*TMiniDraw)(void* _obj, void* _dct); class ELJToolWindow : public wxToolWindow { private: void* EifObj; TButtonClick BtnCb; TTitleClick TtlCb; public: ELJToolWindow(void* _obj, void* _btn, void* _ttl) : wxToolWindow() { EifObj = _obj; BtnCb = (TButtonClick)_btn; TtlCb = (TTitleClick)_ttl; } virtual void OnMiniButtonClicked( int btnIdx ) {BtnCb (EifObj, btnIdx);} virtual bool HandleTitleClick( wxMouseEvent& event ) { return TtlCb (EifObj, (void*)&event) != 0; } }; class ELJMiniButton : public cbMiniButton { private: void* EifObj; TMiniDraw DrwCb; public: ELJMiniButton(void* _obj, void* _drw) : cbMiniButton() { EifObj = _obj; DrwCb = (TMiniDraw)_drw; } virtual void Draw(wxDC& dc) {DrwCb(EifObj, (void*)&dc);} }; --- NEW FILE: eljlog.h --- #include "wx/log.h" typedef void (*TLogFunc) (void*, int, void*, int); class ELJLog : public wxLog { private: TLogFunc func; void* EiffelObject; protected: virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t) { func (EiffelObject, (int)level, (void*)szString, (int)t); } public: ELJLog (void* _obj, void* _fnc) : wxLog() { func = (TLogFunc)_fnc; EiffelObject = _obj; } }; --- NEW FILE: eljgizmos.h --- #include "wx/gizmos/dynamicsash.h" #include "wx/gizmos/editlbox.h" #include "wx/gizmos/ledctrl.h" #include "wx/gizmos/multicell.h" #include "wx/gizmos/splittree.h" class ELJSCTreeControl : public wxRemotelyScrolledTreeCtrl { private: TreeCompareFunc compare_func; void* EiffelObject; public: ELJSCTreeControl(void* _obj, void* _cmp, wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT) : wxRemotelyScrolledTreeCtrl (parent, id, pos, size, style) { EiffelObject = _obj; compare_func = (TreeCompareFunc)_cmp; }; virtual int OnCompareItems(const wxTreeItemId& item1, const wxTreeItemId& item2) { return EiffelObject ? compare_func (EiffelObject, (void*)&item1, (void*)&item2) : wxRemotelyScrolledTreeCtrl::OnCompareItems(item1, item2); } }; --- NEW FILE: extra.h --- #include "wx/process.h" #include "wx/textctrl.h" #include "wx/listctrl.h" #include "wx/grid.h" #include "wx/fileconf.h" #include "wx/spinctrl.h" /*----------------------------------------------------------------------------- new events -----------------------------------------------------------------------------*/ BEGIN_DECLARE_EVENT_TYPES() DECLARE_LOCAL_EVENT_TYPE(wxEVT_DELETE, 1000) DECLARE_LOCAL_EVENT_TYPE(wxEVT_HTML_CELL_CLICKED, 1001 ) DECLARE_LOCAL_EVENT_TYPE(wxEVT_HTML_CELL_MOUSE_HOVER, 1002 ) DECLARE_LOCAL_EVENT_TYPE(wxEVT_HTML_LINK_CLICKED, 1003 ) DECLARE_LOCAL_EVENT_TYPE(wxEVT_HTML_SET_TITLE, 1004 ) DECLARE_LOCAL_EVENT_TYPE(wxEVT_INPUT_SINK, 1005 ) DECLARE_LOCAL_EVENT_TYPE(wxEVT_SORT, 1006 ) END_DECLARE_EVENT_TYPES() DEFINE_LOCAL_EVENT_TYPE( wxEVT_DELETE ) DEFINE_LOCAL_EVENT_TYPE( wxEVT_HTML_CELL_CLICKED ) DEFINE_LOCAL_EVENT_TYPE( wxEVT_HTML_CELL_MOUSE_HOVER ) DEFINE_LOCAL_EVENT_TYPE( wxEVT_HTML_LINK_CLICKED ) DEFINE_LOCAL_EVENT_TYPE( wxEVT_HTML_SET_TITLE ) DEFINE_LOCAL_EVENT_TYPE( wxEVT_INPUT_SINK ) DEFINE_LOCAL_EVENT_TYPE( wxEVT_SORT ) /*----------------------------------------------------------------------------- Timers -----------------------------------------------------------------------------*/ class wxTimerEx : public wxTimer { private: wxClosure* m_closure; public: wxTimerEx(); ~wxTimerEx(); void Connect( wxClosure* closure ); wxClosure* GetClosure(); void Notify(); }; wxTimerEx::wxTimerEx() { m_closure = NULL; } wxTimerEx::~wxTimerEx() { if (m_closure) { m_closure->DecRef(); m_closure=NULL; } } void wxTimerEx::Connect( wxClosure* closure ) { if (m_closure) m_closure->DecRef(); m_closure = closure; if (m_closure) m_closure->IncRef(); } wxClosure* wxTimerEx::GetClosure() { return m_closure; } void wxTimerEx::Notify() { wxTimerEvent timerEvent(0,this->GetInterval()); if (m_closure) m_closure->Invoke(&timerEvent); } /*----------------------------------------------------------------------------- wxInputSink wrapper: adds non-blocking event driven input channel -----------------------------------------------------------------------------*/ class wxInputSink; class wxInputSinkEvent : public wxEvent { private: char* m_buffer; size_t m_bufferLen; size_t m_lastRead; wxStreamError m_lastError; void Read( wxInputStream* input ); friend class wxInputSink; public: wxInputSinkEvent( int id, size_t bufferLen ); wxInputSinkEvent( const wxInputSinkEvent& event ); /* copy constructor */ ~wxInputSinkEvent(); wxEvent* Clone() const { return new wxInputSinkEvent(*this); } wxStreamError LastError() const { return m_lastError; } int LastRead() const { return m_lastRead; } char* LastInput() const { return m_buffer; } }; class wxInputSink : public wxThread { private: wxEvtHandler* m_evtHandler; wxInputStream* m_input; wxInputSinkEvent m_event; protected: ExitCode Entry(); public: wxInputSink( wxInputStream* input, wxEvtHandler* evtHandler, int bufferLen ); ~wxInputSink(); int GetId(); void Start(); }; wxInputSink::wxInputSink( wxInputStream* input, wxEvtHandler* evtHandler, int bufferLen ) : wxThread(wxTHREAD_DETACHED), m_event( 0, bufferLen ) { m_input = input; m_evtHandler = evtHandler; } wxInputSink::~wxInputSink() { /* fprintf(stderr, "InputSink is deleted\n"); */ } void wxInputSink::Start() { wxThreadError result = Create(); switch(result) { case wxTHREAD_NO_ERROR: Run(); break; case wxTHREAD_RUNNING : break; default : Delete(); break; } } int wxInputSink::GetId() { return (int)m_input; } wxThread::ExitCode wxInputSink::Entry() { if (m_input == NULL || m_evtHandler == NULL || m_event.m_buffer == NULL ) return 0; m_event.SetId(GetId()); /* while input && not external destroy */ while (!TestDestroy() && m_event.LastError() == wxSTREAM_NO_ERROR) { /* (blocking) read */ m_event.Read( m_input ); /* post the event to the main gui thread (note: event is cloned and thus the input buffer copied)*/ m_evtHandler->AddPendingEvent(m_event); } /* Process pending events */ wxWakeUpIdle(); /* return */ if (m_event.LastError() == wxSTREAM_NO_ERROR || m_event.LastError() == wxSTREAM_EOF) return (ExitCode)0; else return (ExitCode)1; } wxInputSinkEvent::wxInputSinkEvent( int id, size_t bufferLen ) : wxEvent( id, wxEVT_INPUT_SINK ) { m_lastError = wxSTREAM_NO_ERROR; m_lastRead = 0; if (bufferLen <= 0) bufferLen = 128; m_buffer = (char*)malloc( bufferLen + 1 ); m_bufferLen = (m_buffer ? bufferLen : 0); } wxInputSinkEvent::wxInputSinkEvent( const wxInputSinkEvent& event ) : wxEvent( event ) { /* we copy only the exact input buffer, as 'Read' will never be called */ m_lastError = event.m_lastError; m_bufferLen = 0; m_lastRead = 0; m_buffer = (char*)malloc( event.m_lastRead + 1 ); if (m_buffer) { m_bufferLen = event.m_lastRead; m_lastRead = event.m_lastRead; memcpy( m_buffer, event.m_buffer, m_lastRead ); m_buffer[m_lastRead] = 0; } } wxInputSinkEvent::~wxInputSinkEvent() { if (m_buffer) free(m_buffer); } void wxInputSinkEvent::Read( wxInputStream* input ) { /* check */ if (input == NULL || m_buffer == NULL || m_bufferLen == 0) { m_lastError = wxSTREAM_READ_ERROR; m_lastRead = 0; return; } /* read */ input->Read( m_buffer, m_bufferLen ); #if wxCHECK_VERSION(2,5,0) m_lastError = input->GetLastError(); #else m_lastError = input->LastError(); #endif if (m_lastError == wxSTREAM_NO_ERROR) m_lastRead = input->LastRead(); else m_lastRead = 0; /* maintain invariants */ if (m_lastRead < 0) m_lastRead = 0; if (m_lastRead > m_bufferLen) m_lastRead = m_bufferLen; /* add zero terminator */ m_buffer[m_lastRead] = 0; } /*----------------------------------------------------------------------------- wxHtmlWindow wrapper: adds normal events instead of using inheritance -----------------------------------------------------------------------------*/ class wxcHtmlWindow : public wxHtmlWindow { private: DECLARE_DYNAMIC_CLASS(wxcHtmlWindow) public: wxcHtmlWindow() : wxHtmlWindow() {}; wxcHtmlWindow(wxWindow *, wxWindowID id, const wxPoint&, const wxSize& size, long style, const wxString& ); void OnCellClicked(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& event); void OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y); void OnLinkClicked(const wxHtmlLinkInfo& link); wxHtmlOpeningStatus OnOpeningURL(wxHtmlURLType type,const wxString& url, wxString *redirect); void OnSetTitle(const wxString& title); }; IMPLEMENT_DYNAMIC_CLASS(wxcHtmlWindow, wxHtmlWindow) class wxcHtmlEvent : public wxCommandEvent { private: DECLARE_DYNAMIC_CLASS(wxcHtmlEvent) private: const wxMouseEvent* m_mouseEvent; const wxHtmlCell* m_htmlCell; const wxHtmlLinkInfo* m_linkInfo; wxPoint m_logicalPosition; public: wxcHtmlEvent() : wxCommandEvent() {}; wxcHtmlEvent( wxEventType commandType, int id, const wxMouseEvent* mouseEvent, const wxHtmlCell* htmlCell, const wxHtmlLinkInfo* linkInfo, wxPoint logicalPoint ); const wxMouseEvent* GetMouseEvent(); const wxHtmlCell * GetHtmlCell(); wxString* GetHtmlCellId(); wxString* GetHref(); wxString* GetTarget(); wxPoint GetLogicalPosition(); }; IMPLEMENT_DYNAMIC_CLASS(wxcHtmlEvent, wxCommandEvent) wxcHtmlWindow::wxcHtmlWindow(wxWindow * prt, wxWindowID id, const wxPoint& pt, const wxSize& size, long style, const wxString& title ) : wxHtmlWindow( prt, id, pt, size, style, title ) {} void wxcHtmlWindow::OnCellClicked(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& event) { wxHtmlLinkInfo* linkPtr; if (cell==NULL) return; linkPtr = cell->GetLink(x, y); if (linkPtr != NULL) { wxHtmlLinkInfo link(*linkPtr); link.SetEvent(&event); link.SetHtmlCell(cell); { wxcHtmlEvent htmlEvent( wxEVT_HTML_LINK_CLICKED, this->GetId(), &event, cell, &link, wxPoint(x,y) ); this->ProcessEvent( htmlEvent ); } } else { wxcHtmlEvent htmlEvent( wxEVT_HTML_CELL_CLICKED, this->GetId(), &event, cell, NULL, wxPoint(x,y) ); this->ProcessEvent( htmlEvent ); } } void wxcHtmlWindow::OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y) { wxcHtmlEvent htmlEvent( wxEVT_HTML_CELL_MOUSE_HOVER, this->GetId(), NULL, cell, NULL, wxPoint(x,y) ); this->ProcessEvent( htmlEvent ); } void wxcHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) { wxcHtmlEvent htmlEvent( wxEVT_HTML_LINK_CLICKED, this->GetId(), link.GetEvent(), link.GetHtmlCell(), &link, wxPoint(-1,-1) ); this->ProcessEvent( htmlEvent ); } void wxcHtmlWindow::OnSetTitle(const wxString& title) { wxcHtmlEvent htmlEvent( wxEVT_HTML_SET_TITLE, this->GetId(), NULL, NULL, NULL, wxPoint(-1,-1) ); htmlEvent.SetString( title ); this->ProcessEvent( htmlEvent ); } wxcHtmlEvent::wxcHtmlEvent( wxEventType commandType, int id, const wxMouseEvent* mouseEvent, const wxHtmlCell* htmlCell, const wxHtmlLinkInfo* linkInfo, wxPoint logicalPoint ) : wxCommandEvent( commandType, id ) { m_mouseEvent = mouseEvent; m_htmlCell = htmlCell; m_linkInfo = linkInfo; m_logicalPosition = logicalPoint; } const wxMouseEvent* wxcHtmlEvent::GetMouseEvent() { return m_mouseEvent; } const wxHtmlCell * wxcHtmlEvent::GetHtmlCell() { return m_htmlCell; } wxString* wxcHtmlEvent::GetHtmlCellId() { if (m_htmlCell) return new wxString(m_htmlCell->GetId()); else return new wxString(""); } wxString* wxcHtmlEvent::GetHref() { if (m_linkInfo) return new wxString(m_linkInfo->GetHref()); else return new wxString(""); } wxString* wxcHtmlEvent::GetTarget() { if (m_linkInfo) return new wxString (m_linkInfo->GetTarget()); else return new wxString(""); } wxPoint wxcHtmlEvent::GetLogicalPosition() { return m_logicalPosition; } /*----------------------------------------------------------------------------- wxGridCellTextEnterEditor -----------------------------------------------------------------------------*/ class wxGridCellTextEnterEditor : public wxGridCellTextEditor { public: wxGridCellTextEnterEditor() : wxGridCellTextEditor() {} void Create(wxWindow* parent, wxWindowID id, wxEvtHandler* evtHandler); }; void wxGridCellTextEnterEditor::Create(wxWindow* parent, wxWindowID id, wxEvtHandler* evtHandler) { wxGridCellTextEditor::Create(parent, id, evtHandler); { long style = m_control->GetWindowStyle(); m_control->SetWindowStyle( style | wxTE_PROCESS_ENTER ); } } --- NEW FILE: treectrl.h --- class wxcTreeItemData : public wxTreeItemData { private: wxClosure* m_closure; public: wxcTreeItemData( wxClosure* closure ) { m_closure = closure; } ~wxcTreeItemData() { if (m_closure) delete m_closure; } wxClosure* GetClientClosure() { return m_closure; } void SetClientClosure( wxClosure* closure ) { if (m_closure) delete m_closure; m_closure = closure; } }; --- NEW FILE: eljcommand.h --- #include "wx/cmdproc.h" typedef int _cdecl (*TGetResp) (void* _obj, int _und); class ELJCommand : public wxCommand { private: TGetResp func; void* EiffelObject; public: ELJCommand (bool _und, const wxString& _nme, void* _obj, void* _clb) : wxCommand(_und, _nme) { func = (TGetResp)_clb; EiffelObject = _obj; } bool Do() {return func (EiffelObject, 0) != 0;} bool Undo() {return func (EiffelObject, 1) != 0;} }; --- NEW FILE: eljfont.h --- #include "wx/fontenum.h" #include "wx/fontmap.h" #include "wx/encconv.h" typedef int _cdecl (*TTextEnum) (void* _obj, void* _txt); class ELJFontEnumerator : public wxFontEnumerator { private: TTextEnum func; void* EiffelObject; public: ELJFontEnumerator (void* _obj, void* _fnc) : wxFontEnumerator() { func = (TTextEnum)_fnc; EiffelObject = _obj; } virtual bool OnFacename(const wxString& facename) { return func(EiffelObject, (void*)facename.c_str()) != 0; } virtual bool OnFontEncoding(const wxString& WXUNUSED(facename), const wxString& encoding) { return func(EiffelObject, (void*)encoding.c_str()) != 0; } }; |