-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWDocsPage.h
63 lines (62 loc) · 1.63 KB
/
WDocsPage.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#pragma once
#include <Wt/WSelectionBox>
#include <Wt/WTemplate>
#include <Wt/WStringListModel>
#include <boost/any.hpp>
#include "MyApplication.h"
#include "WPageBase.h"
using namespace Wt;
class WDocsWidget : public WPageBase
{
public:
void onComboChanged(int nItem){
int id = m_ids[nItem];
m_params["did"] = boost::any(boost::lexical_cast<string>(id));
}
public:
WDocsWidget(){
WTemplate *templ = new WTemplate(tr("choose-doc-templ"), this);
m_box = new Wt::WSelectionBox();
m_box->activated().connect(this, &WDocsWidget::onComboChanged);
templ->bindWidget("sel-box", m_box);
m_snextbase = "/4";
}
void update(){
int idx = 0;
int nsid = 0;
m_ids.clear();
if(m_params.find("sid") != m_params.end()){
nsid = boost::lexical_cast<int>(boost::any_cast<string>(m_params["sid"]));
}
list<doctor> docs;
WStringListModel* _model = new WStringListModel();
GetDM().find_spec_doc(nsid, docs);
for (list<doctor>::const_iterator it = docs.begin(); it != docs.end(); ++it){
_model->insertString(idx, it->name());
m_ids.push_back(it->id());
idx++;
}
m_box->setModel(_model);
m_box->setVerticalSize(_model->rowCount());
if(m_params.find("did") != m_params.end()) {
std::vector<int>::iterator it = m_ids.begin();
idx = 0;
for(;it != m_ids.end(); ++it, idx++)
if(*it == boost::any_cast<int>(m_params["did"])){
m_box->setCurrentIndex(idx);
break;
}
}else
m_box->setCurrentIndex(0);
}
bool onleave(){
if(m_box->currentIndex() >= 0){
onComboChanged(m_box->currentIndex());
return true;
} else
return false;
}
private:
WSelectionBox* m_box;
std::vector<int> m_ids;
};