• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/amule/wxWidgets-2.8.12/contrib/samples/applet/
1/****************************************************************************
2*
3*                       wxWindows HTML Applet Package
4*
5*               Copyright (C) 1991-2001 SciTech Software, Inc.
6*                            All rights reserved.
7*
8*  ========================================================================
9*
10*    The contents of this file are subject to the wxWindows License
11*    Version 3.0 (the "License"); you may not use this file except in
12*    compliance with the License. You may obtain a copy of the License at
13*    http://www.wxwindows.org/licence3.txt
14*
15*    Software distributed under the License is distributed on an
16*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
17*    implied. See the License for the specific language governing
18*    rights and limitations under the License.
19*
20*  ========================================================================
21*
22* Language:     ANSI C++
23* Environment:  Any
24*
25* Description:  Main wxApplet class implementation
26*
27****************************************************************************/
28
29// For compilers that support precompilation
30#include "wx/wxprec.h"
31
32// Include private headers
33#include "wx/wx.h"
34#include "monitorapplet.h"
35
36/*---------------------------- Global variables ---------------------------*/
37
38// Implement the dynamic class so it can be constructed dynamically
39IMPLEMENT_DYNAMIC_CLASS(MonitorApplet, wxApplet)
40
41// Event handler table.
42BEGIN_EVENT_TABLE(MonitorApplet, wxApplet)
43    EVT_LISTBOX(ID_LISTBOX_MFTR,        MonitorApplet::OnChange)
44    EVT_LISTBOX(ID_LISTBOX_MDL,         MonitorApplet::OnChange)
45END_EVENT_TABLE()
46
47// Include database of known monitors. Normally this would come from a
48// real database on disk, but for this simple example we hard code all
49// the values into a table.
50#include "monitors.c"
51
52/*------------------------- Implementation --------------------------------*/
53
54/****************************************************************************
55REMARKS:
56Constructor called during dynamic creation. Simple initialise all
57internal values for the class so that it can be properly created later
58via the virtual Create member function.
59****************************************************************************/
60MonitorApplet::MonitorApplet()
61{
62    m_Mfr = NULL;
63    m_Model = NULL;
64    m_Data = NULL;
65}
66
67/****************************************************************************
68REMARKS:
69Psuedo virtual constructor for the MonitorApplet class.
70****************************************************************************/
71bool MonitorApplet::Create(
72    wxHtmlAppletWindow *parent,
73    const wxSize& size,
74    long style)
75{
76    bool ret = wxApplet::Create(parent, size, style);
77    if (ret) {
78        // Read our cookie or create it if it does not exist
79        if ((m_Data = (MonitorData*)parent->FindCookie(MONITOR_COOKIE_NAME)) == NULL) {
80            m_Data = new MonitorData;
81            memset(&m_Data->m_Monitor,0,sizeof(m_Data->m_Monitor));
82            parent->RegisterCookie(MONITOR_COOKIE_NAME,m_Data);
83            }
84
85        // Create all the controls and initialise them
86        MonitorDialogFunc(this,true,true);
87        if ((m_Mfr = new ComboBox(this , ID_LISTBOX_MFTR, ID_TEXTCTRL_MFTR)) == NULL)
88            return false;
89        if ((m_Model = new ComboBox(this , ID_LISTBOX_MDL, ID_TEXTCTRL_MDL)) == NULL)
90            return false;
91        ReadMfrList();
92        ReadModelList(true);
93        }
94    return ret;
95}
96
97/****************************************************************************
98REMARKS:
99Destructor for the MonitorApplet class.
100****************************************************************************/
101MonitorApplet::~MonitorApplet()
102{
103    delete m_Mfr;
104    delete m_Model;
105}
106
107/****************************************************************************
108REMARKS:
109Save the current state for the applet to our cookie
110****************************************************************************/
111void MonitorApplet::SaveCurrentState()
112{
113    // Read currently selected strings into cookie
114    strcpy(m_Data->m_Monitor.m_Mfr,m_Mfr->GetStringSelection());
115    strcpy(m_Data->m_Monitor.m_Model,m_Model->GetStringSelection());
116}
117
118/****************************************************************************
119REMARKS:
120Handles user navigation away from the applet via an HTML link
121****************************************************************************/
122void MonitorApplet::OnLinkClicked(
123    const wxHtmlLinkInfo&)
124{
125    SaveCurrentState();
126}
127
128/****************************************************************************
129REMARKS:
130Handles user navigation away from the applet via the history forward command
131****************************************************************************/
132void MonitorApplet::OnHistoryForward()
133{
134    SaveCurrentState();
135}
136
137/****************************************************************************
138REMARKS:
139Handles user navigation away from the applet via the history back command
140****************************************************************************/
141void MonitorApplet::OnHistoryBack()
142{
143    SaveCurrentState();
144}
145
146/****************************************************************************
147REMARKS:
148Handles inter applet communication messages
149****************************************************************************/
150void MonitorApplet::OnMessage(
151    wxEvent& msg)
152{
153    msg.Skip(true);
154}
155
156/****************************************************************************
157REMARKS:
158****************************************************************************/
159void MonitorApplet::OnChange(
160    wxCommandEvent &evt)
161{
162    if (evt.GetId() == m_Mfr->GetListBoxId()) {
163        m_Mfr->OnChange(evt);
164        ReadModelList(true);
165        }
166    else if (evt.GetId() == m_Model->GetListBoxId()) {
167        m_Model->OnChange(evt);
168        }
169}
170
171/****************************************************************************
172REMARKS:
173Updates the manufacturer list for the dialog box from the database.
174****************************************************************************/
175void MonitorApplet::ReadMfrList()
176{
177    char            buf[80] = "";
178    int             i,selected = 0;
179    MonitorEntry    *m;
180
181    m_Mfr->Clear();
182    for (m = m_Monitors,i = 0; m->m_Mfr[0] != 0; m++) {
183        if (wxStricmp(buf,m->m_Mfr) != 0) {
184            m_Mfr->Append(m->m_Mfr);
185            if (wxStricmp(m_Data->m_Monitor.m_Mfr,m->m_Mfr) == 0)
186                selected = i;
187            strcpy(buf,m->m_Mfr);
188            i++;
189            }
190        }
191    m_Mfr->Select(selected);
192}
193
194/****************************************************************************
195REMARKS:
196Updates the model list for the dialog box for the currently selected
197manufacturer type.
198****************************************************************************/
199void MonitorApplet::ReadModelList(
200    bool selectCurrent)
201{
202    int             i,selected = 0;
203    MonitorEntry    *m;
204    wxString        mfrStr;
205
206    mfrStr = m_Mfr->GetStringSelection();
207    m_Model->Clear();
208    for (m = m_Monitors,i = 0; m->m_Mfr[0] != 0; m++) {
209        if (wxStricmp(mfrStr,m->m_Mfr) == 0) {
210            m_Model->Append(m->m_Model);
211            if (selectCurrent && wxStricmp(m_Data->m_Monitor.m_Model,m->m_Model) == 0)
212                selected = i;
213            i++;
214            }
215        }
216    m_Model->Select(selected);
217}
218
219