]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/samples/applet/monitorapplet.cpp
Moved wxApplet files to the correct locations.
[wxWidgets.git] / contrib / samples / applet / monitorapplet.cpp
diff --git a/contrib/samples/applet/monitorapplet.cpp b/contrib/samples/applet/monitorapplet.cpp
new file mode 100644 (file)
index 0000000..f26502c
--- /dev/null
@@ -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);
+}
+