wxWidgets/contrib/samples/applet/monitorapplet.cpp
Kendall Bennett 716cd4107b Commited latest SciTech changes into CVS. This includes updates to the
applet code (with changes copyright headers) as well as updates to the
wxImage and dib.cpp modules to use virtual file systems so that we can
load these objects from ZIP files correctly. The dib.cpp module was
also extensively cleaned up (although the DIB writing code does not
presently use file streams as we couldn't figure out if it was possible
to write to a ZIP file stream). The code has been tested and functions
correctly for both regular files and ZIP files.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10551 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2001-06-12 18:52:03 +00:00

219 lines
7.2 KiB
C++

/****************************************************************************
*
* wxWindows HTML Applet Package
*
* Copyright (C) 1991-2001 SciTech Software, Inc.
* All rights reserved.
*
* ========================================================================
*
* The contents of this file are subject to the wxWindows License
* Version 3.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.wxwindows.org/licence3.txt
*
* Software distributed under the License is distributed on an
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* ========================================================================
*
* Language: ANSI C++
* Environment: Any
*
* Description: Main wxApplet class implementation
*
****************************************************************************/
// For compilers that support precompilation
#include "wx/wxprec.h"
// Include private headers
#include "wx/wx.h"
#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 (wxStricmp(buf,m->m_Mfr) != 0) {
m_Mfr->Append(m->m_Mfr);
if (wxStricmp(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 (wxStricmp(mfrStr,m->m_Mfr) == 0) {
m_Model->Append(m->m_Model);
if (selectCurrent && wxStricmp(m_Data->m_Monitor.m_Model,m->m_Model) == 0)
selected = i;
i++;
}
}
m_Model->Select(selected);
}