⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remhelp.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        remhelp.cpp// Purpose:     Remote help controller class// Author:      Eric Dowty// Modified by:// Created:     2002-11-18// RCS-ID:      $Id: remhelp.cpp,v 1.4 2005/09/23 12:56:29 MR Exp $// Copyright:   (c) Julian Smart// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__    #pragma hdrstop#endif#ifndef WX_PRECOMP    #include "wx/wx.h"#endif#include <math.h>#include "wx/process.h"#include "wx/confbase.h"// Settings common to both executables: determines whether// we're using TCP/IP or real DDE.//#include "ddesetup.h"//#define wxUSE_DDE_FOR_IPC 0#if defined(__WXGTK__) || defined(__WXMOTIF__)#include "mondrian.xpm"#endif#include "remhelp.h"#include "client.h"#if !defined(USE_REMOTE)#include <wx/html/helpctrl.h>#endif////////////////////////////////////// helper classesrhhcClient::rhhcClient( bool *isconn_a ){    isconn_2 = isconn_a;}wxConnectionBase *rhhcClient::OnMakeConnection(){    return new rhhcConnection( isconn_2 ); }rhhcConnection::rhhcConnection( bool *isconn_a ) : wxConnection(){    isconn_3 = isconn_a;    *isconn_3 = true;}rhhcConnection::~rhhcConnection(){    *isconn_3 = false;}bool rhhcConnection::OnAdvise(const wxString& topic, const wxString& item, char *data, int size, wxIPCFormat format){    return true;}bool rhhcConnection::OnDisconnect(){    *isconn_3 = false;    return wxConnection::OnDisconnect();}///////////////////////////////////////////////////////////////////////////////////// wxRemoteHtmlHelpController classIMPLEMENT_CLASS(wxRemoteHtmlHelpController, wxHelpControllerBase)wxRemoteHtmlHelpController::wxRemoteHtmlHelpController(int style ){    m_style = style;      m_connection = NULL;     m_client  = NULL;    m_pid = 0;    isconn_1 = false;    m_process = NULL;    // defaults    //    // server app is assumed to be local    //    // for MSW (DDE classes), a_service is 'service name', apparently an arbitrary string    // for Unix, should be a valid file name (for a nonexistent file)    // for nonMSW, nonUnix, must be port number, for example "4242" (TCP/IP based classes)    // should be unique to the client app    wxString thename = wxGetApp().GetAppName();#if defined(__WXMSW__)    m_appname = wxT("helpview.exe");    m_service = thename + wxString(wxT("_helpservice"));#elif defined(__UNIX__)    m_appname = wxT("./helpview");    m_service = wxT("/tmp/") + thename + wxString(wxT("_helpservice"));#else    m_appname = wxT("./helpview");       m_service = wxT("4242");#endif    m_book = thename + wxT(".hhp");  // or .htb or .zip    m_windowname = thename + wxT(" Help: %s");    //underscores for spaces    m_windowname.Replace( wxT(" "), wxT("_") );}void wxRemoteHtmlHelpController::SetService(wxString& a_service){    m_service = a_service;}void wxRemoteHtmlHelpController::SetServer(wxString& a_appname){    m_appname = a_appname;}void wxRemoteHtmlHelpController::OnQuit(){    //kill the Server here?    //this function is not called ?}wxRemoteHtmlHelpController::~wxRemoteHtmlHelpController(){    if ( isconn_1 )    {        // if (!m_connection->Poke( wxT("--YouAreDead"), wxT("") ) )        // wxLogError(wxT("wxRemoteHtmlHelpController - YouAreDead Failed"));        // Kill the server.  This could be an option.        Quit();        m_connection->Disconnect();        delete m_connection;        delete m_process;        m_process = NULL;    }    if( m_client )         delete m_client; //should be automatic?}bool wxRemoteHtmlHelpController::DoConnection(){    wxString cmd, blank;    int nsleep;    blank = wxT("  ");    // ignored under DDE, host name in TCP/IP based classes    wxString hostName = wxT("localhost");    // Create a new client    if( !m_client ) m_client = new rhhcClient(&isconn_1);    nsleep = 0;    // suppress the log messages from MakeConnection()    {        wxLogNull nolog;        //first try to connect assuming server is running        if( !isconn_1 )             m_connection = (rhhcConnection *)m_client->MakeConnection(hostName, m_service, wxT("HELP") );        //if not, start server        if( !isconn_1 ) {            wxString stylestr;            stylestr.Printf( wxT("--Style%d"), m_style );            cmd = m_appname + blank + m_service + blank + m_windowname + blank + m_book + blank + stylestr;            m_process = new wxProcess(NULL);            m_pid = wxExecute( cmd, false, m_process );            // leaks - wxExecute itself (if not deleted) and in wxExecute at            // wxExecuteData *data = new wxExecuteData;            if( m_pid <= 0 ) {                wxLogError( wxT("wxRemoteHtmlHelpController - Failed to start Help server") );                return false;            }        }        while ( !isconn_1 )        {             //try every second for a while, then leave it to user            wxSleep(1);            if( nsleep > 4 ) {                if ( wxMessageBox( wxT("Failed to make connection to Help server.\nRetry?") ,                                   wxT("wxRemoteHtmlHelpController Error"),                                   wxICON_ERROR | wxYES_NO | wxCANCEL ) != wxYES )                {                               // no server                    return false;                }            }            nsleep++;                        m_connection = (rhhcConnection *)m_client->MakeConnection(hostName, m_service, wxT("HELP") );        }    }    if (!m_connection->StartAdvise(wxT("Item"))) {        wxLogError(wxT("wxRemoteHtmlHelpController - StartAdvise failed") );        return false;    }    return true;}bool wxRemoteHtmlHelpController::LoadFile(const wxString& WXUNUSED(file)){    return true;}bool wxRemoteHtmlHelpController::DisplaySection(int sectionNo){    Display(sectionNo);    return true;}bool wxRemoteHtmlHelpController::DisplayBlock(long blockNo){    return DisplaySection((int)blockNo);}bool wxRemoteHtmlHelpController::Quit(){    //this code from exec sample - branches left in for testing    // sig = 3, 6, 9 or 12 all kill server with no apparent problem    // but give error message on MSW - timout?    int sig = 15;   //3 = quit; 6 = abort; 9 = kill;  15 = terminate/*                    switch ( sig )                    {                    default:                    wxFAIL_MSG( _T("unexpected return value") );                    // fall through                                          case -1:                      // cancelled                      return false;                                              case wxSIGNONE:                        case wxSIGHUP:                        case wxSIGINT:                        case wxSIGQUIT:                        case wxSIGILL:                        case wxSIGTRAP:                        case wxSIGABRT:                        case wxSIGEMT:                        case wxSIGFPE:                        case wxSIGKILL:                        case wxSIGBUS:                        case wxSIGSEGV:                        case wxSIGSYS:                        case wxSIGPIPE:                        case wxSIGALRM:                        case wxSIGTERM:                        break;                        }*/    if ( sig == 0 )    {        if ( wxProcess::Exists(m_pid) )            wxLogStatus(_T("Process %ld is running."), m_pid);        else            wxLogStatus(_T("No process with pid = %ld."), m_pid);    }    else // not SIGNONE    {        wxKillError rc = wxProcess::Kill(m_pid, (wxSignal)sig);        if ( rc == wxKILL_OK )        {            wxLogStatus(_T("Process %ld killed with signal %d."), m_pid, sig);        }        else        {            static const wxChar *errorText[] =            {                _T(""), // no error                    _T("signal not supported"),                    _T("permission denied"),                    _T("no such process"),                    _T("unspecified error"),            };                        // sig = 3, 6, 9 or 12 all kill server with no apparent problem            // but give error message on MSW - timout?            //            //wxLogError(_T("Failed to kill process %ld with signal %d: %s"),            //            m_pid, sig, errorText[rc]);        }    }    return true;}void wxRemoteHtmlHelpController::Display(const wxString& helpfile){    if( !isconn_1 ) {        if( !DoConnection() ) return;    }        if (!m_connection->Execute( helpfile, -1 ) )         wxLogError(wxT("wxRemoteHtmlHelpController - Display Failed"));}void wxRemoteHtmlHelpController::Display(const int id){    if( !isconn_1 ) {        if( !DoConnection() ) return;    }    wxString intstring;    intstring.Printf( "--intstring%d", id );        if (!m_connection->Execute( intstring, -1 ) )         wxLogError(wxT("wxRemoteHtmlHelpController - Display Failed"));}bool wxRemoteHtmlHelpController::AddBook(const wxString& book, bool show_wait_msg){    //ignore show_wait_msg - there shouldn't be a delay in this step    //show_wait_msg = true could be transmitted with ++AddBook    m_book = book;    if( isconn_1 ) {        if (!m_connection->Poke( wxT("--AddBook"), (char*)book.c_str() ) )            wxLogError(wxT("wxRemoteHtmlHelpController - AddBook Failed"));        return false;    }    return true;}bool wxRemoteHtmlHelpController::DisplayContents(){    if( isconn_1 ) {        if (!m_connection->Poke( wxT("--DisplayContents"), wxT("") ) ) {            wxLogError(wxT("wxRemoteHtmlHelpController - DisplayContents Failed"));            return false;        }    }    return true;}void wxRemoteHtmlHelpController::DisplayIndex(){    if( isconn_1 ) {        if (!m_connection->Poke( wxT("--DisplayIndex"), wxT("") ) )            wxLogError(wxT("wxRemoteHtmlHelpController - DisplayIndex Failed"));    }}bool wxRemoteHtmlHelpController::KeywordSearch(const wxString& keyword){    if( isconn_1 ) {        if (!m_connection->Poke( wxT("--KeywordSearch"), (char*)keyword.c_str() ) ) {            wxLogError(wxT("wxRemoteHtmlHelpController - KeywordSearch Failed"));            return false;        }    }    return true;}void wxRemoteHtmlHelpController::SetTitleFormat(const wxString& format){    m_windowname = format;    m_windowname.Replace( wxT(" "), wxT("_") );    if( isconn_1 ) {        if (!m_connection->Poke( wxT("--SetTitleFormat"), (char*)format.c_str() ) )            wxLogError(wxT("wxRemoteHtmlHelpController - SetTitleFormat Failed"));    }}void wxRemoteHtmlHelpController::SetTempDir(const wxString& path){    if( isconn_1 ) {        if (!m_connection->Poke( wxT("--SetTempDir"), (char*)path.c_str() ) )            wxLogError(wxT("wxRemoteHtmlHelpController - SetTempDir Failed"));    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -