X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c3952f6524b5827420836f856ef2074f20e72849..54921697ae6cb35c5865620dce494227b0df5e02:/samples/applet/monitorapplet.cpp diff --git a/samples/applet/monitorapplet.cpp b/samples/applet/monitorapplet.cpp new file mode 100644 index 0000000000..266de3a0e8 --- /dev/null +++ b/samples/applet/monitorapplet.cpp @@ -0,0 +1,221 @@ +/**************************************************************************** +* +* wxWindows HTML Applet Package +* +* Copyright (C) 1991-2001 SciTech Software, Inc. +* All rights reserved. +* +* ====================================================================== +* |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW| +* | | +* |This copyrighted computer code is a proprietary trade secret of | +* |SciTech Software, Inc., located at 505 Wall Street, Chico, CA 95928 | +* |USA (www.scitechsoft.com). ANY UNAUTHORIZED POSSESSION, USE, | +* |VIEWING, COPYING, MODIFICATION OR DISSEMINATION OF THIS CODE IS | +* |STRICTLY PROHIBITED BY LAW. Unless you have current, express | +* |written authorization from SciTech to possess or use this code, you | +* |may be subject to civil and/or criminal penalties. | +* | | +* |If you received this code in error or you would like to report | +* |improper use, please immediately contact SciTech Software, Inc. at | +* |530-894-8400. | +* | | +* |REMOVAL OR MODIFICATION OF THIS HEADER IS STRICTLY PROHIBITED BY LAW| +* ====================================================================== +* +* Language: ANSI C++ +* Environment: Any +* +* Description: Main wxApplet class implementation +* +****************************************************************************/ + +// For compilers that support precompilation +#include "wx/wxprec.h" + +// Include private headers +#include "monitorapplet.h" + +/*---------------------------- Global variables ---------------------------*/ + +// Implement the dynamic class so it can be constructed dynamically +IMPLEMENT_DYNAMIC_CLASS(MonitorApplet, wxApplet); + +// Event handler table. +BEGIN_EVENT_TABLE(MonitorApplet, wxApplet) + EVT_LISTBOX(ID_LISTBOX_MFTR, MonitorApplet::OnChange) + EVT_LISTBOX(ID_LISTBOX_MDL, MonitorApplet::OnChange) +END_EVENT_TABLE() + +// Include database of known monitors. Normally this would come from a +// real database on disk, but for this simple example we hard code all +// the values into a table. +#include "monitors.c" + +/*------------------------- Implementation --------------------------------*/ + +/**************************************************************************** +REMARKS: +Constructor called during dynamic creation. Simple initialise all +internal values for the class so that it can be properly created later +via the virtual Create member function. +****************************************************************************/ +MonitorApplet::MonitorApplet() +{ + m_Mfr = NULL; + m_Model = NULL; + m_Data = NULL; +} + +/**************************************************************************** +REMARKS: +Psuedo virtual constructor for the MonitorApplet class. +****************************************************************************/ +bool MonitorApplet::Create( + wxHtmlAppletWindow *parent, + const wxSize& size, + long style) +{ + bool ret = wxApplet::Create(parent, size, style); + if (ret) { + // Read our cookie or create it if it does not exist + if ((m_Data = (MonitorData*)parent->FindCookie(MONITOR_COOKIE_NAME)) == NULL) { + m_Data = new MonitorData; + memset(&m_Data->m_Monitor,0,sizeof(m_Data->m_Monitor)); + parent->RegisterCookie(MONITOR_COOKIE_NAME,m_Data); + } + + // Create all the controls and initialise them + MonitorDialogFunc(this,true,true); + if ((m_Mfr = new ComboBox(this , ID_LISTBOX_MFTR, ID_TEXTCTRL_MFTR)) == NULL) + return false; + if ((m_Model = new ComboBox(this , ID_LISTBOX_MDL, ID_TEXTCTRL_MDL)) == NULL) + return false; + ReadMfrList(); + ReadModelList(true); + } + return ret; +} + +/**************************************************************************** +REMARKS: +Destructor for the MonitorApplet class. +****************************************************************************/ +MonitorApplet::~MonitorApplet() +{ + delete m_Mfr; + delete m_Model; +} + +/**************************************************************************** +REMARKS: +Save the current state for the applet to our cookie +****************************************************************************/ +void MonitorApplet::SaveCurrentState() +{ + // Read currently selected strings into cookie + strcpy(m_Data->m_Monitor.m_Mfr,m_Mfr->GetStringSelection()); + strcpy(m_Data->m_Monitor.m_Model,m_Model->GetStringSelection()); +} + +/**************************************************************************** +REMARKS: +Handles user navigation away from the applet via an HTML link +****************************************************************************/ +void MonitorApplet::OnLinkClicked( + const wxHtmlLinkInfo&) +{ + SaveCurrentState(); +} + +/**************************************************************************** +REMARKS: +Handles user navigation away from the applet via the history forward command +****************************************************************************/ +void MonitorApplet::OnHistoryForward() +{ + SaveCurrentState(); +} + +/**************************************************************************** +REMARKS: +Handles user navigation away from the applet via the history back command +****************************************************************************/ +void MonitorApplet::OnHistoryBack() +{ + SaveCurrentState(); +} + +/**************************************************************************** +REMARKS: +Handles inter applet communication messages +****************************************************************************/ +void MonitorApplet::OnMessage( + wxEvent& msg) +{ + msg.Skip(true); +} + +/**************************************************************************** +REMARKS: +****************************************************************************/ +void MonitorApplet::OnChange( + wxCommandEvent &evt) +{ + if (evt.GetId() == m_Mfr->GetListBoxId()) { + m_Mfr->OnChange(evt); + ReadModelList(true); + } + else if (evt.GetId() == m_Model->GetListBoxId()) { + m_Model->OnChange(evt); + } +} + +/**************************************************************************** +REMARKS: +Updates the manufacturer list for the dialog box from the database. +****************************************************************************/ +void MonitorApplet::ReadMfrList() +{ + char buf[80] = ""; + int i,selected = 0; + MonitorEntry *m; + + m_Mfr->Clear(); + for (m = m_Monitors,i = 0; m->m_Mfr[0] != 0; m++) { + if (stricmp(buf,m->m_Mfr) != 0) { + m_Mfr->Append(m->m_Mfr); + if (stricmp(m_Data->m_Monitor.m_Mfr,m->m_Mfr) == 0) + selected = i; + strcpy(buf,m->m_Mfr); + i++; + } + } + m_Mfr->Select(selected); +} + +/**************************************************************************** +REMARKS: +Updates the model list for the dialog box for the currently selected +manufacturer type. +****************************************************************************/ +void MonitorApplet::ReadModelList( + bool selectCurrent) +{ + int i,selected = 0; + MonitorEntry *m; + wxString mfrStr; + + mfrStr = m_Mfr->GetStringSelection(); + m_Model->Clear(); + for (m = m_Monitors,i = 0; m->m_Mfr[0] != 0; m++) { + if (stricmp(mfrStr,m->m_Mfr) == 0) { + m_Model->Append(m->m_Model); + if (selectCurrent && stricmp(m_Data->m_Monitor.m_Model,m->m_Model) == 0) + selected = i; + i++; + } + } + m_Model->Select(selected); +} +