8 #include <Wt/WApplication>
9 #include <Wt/WComboBox>
10 #include <Wt/WContainerWidget>
11 #include <Wt/WDatePicker>
12 #include <Wt/WDateValidator>
14 #include <Wt/WEnvironment>
15 #include <Wt/WIntValidator>
16 #include <Wt/WItemDelegate>
18 #include <Wt/WLineEdit>
19 #include <Wt/WMessageBox>
20 #include <Wt/WPushButton>
21 #include <Wt/WRegExpValidator>
22 #include <Wt/WGridLayout>
23 #include <Wt/WPopupMenu>
24 #include <Wt/WSortFilterProxyModel>
25 #include <Wt/WStandardItem>
26 #include <Wt/WStandardItemModel>
27 #include <Wt/WTableView>
28 #include <Wt/WTreeView>
30 #include <Wt/WVBoxLayout>
32 #include <Wt/Chart/WPieChart>
86 int modelRow = item_.row();
99 typeEdit_->addItem(
"Document");
100 typeEdit_->addItem(
"Spreadsheet");
101 typeEdit_->addItem(
"Presentation");
102 typeEdit_->setCurrentIndex
103 (typeEdit_->findText(
asString(model_->data(modelRow, 2))));
107 sizeEdit_->setValidator
108 (
new WIntValidator(0, std::numeric_limits<int>::max(),
this));
112 createdPicker_->lineEdit()->validator()->setMandatory(
true);
114 createdPicker_->setDate(boost::any_cast<WDate>(model_->data(modelRow, 4)));
118 modifiedPicker_->lineEdit()->validator()->setMandatory(
true);
120 modifiedPicker_->setDate(boost::any_cast<WDate>(model_->data(modelRow, 5)));
146 layout->
addWidget(createdPicker_->lineEdit(), row, 1);
147 layout->
addWidget(createdPicker_, row, 2);
148 l->
setBuddy(createdPicker_->lineEdit());
152 layout->
addWidget(modifiedPicker_->lineEdit(), row, 1);
153 layout->
addWidget(modifiedPicker_, row, 2);
154 l->
setBuddy(modifiedPicker_->lineEdit());
170 typeEdit_->setFocus();
break;
172 sizeEdit_->setFocus();
break;
174 createdPicker_->lineEdit()->setFocus();
break;
176 modifiedPicker_->lineEdit()->setFocus();
break;
178 nameEdit_->setFocus();
break;
184 contents()->setLayout(layout);
213 int modelRow = item_.row();
221 m->
setData(modelRow, 1, boost::any(nameEdit_->text()));
222 m->
setData(modelRow, 2, boost::any(typeEdit_->currentText()));
223 m->
setData(modelRow, 3, boost::any(boost::lexical_cast<int>
224 (sizeEdit_->text().toUTF8())));
225 m->
setData(modelRow, 4, boost::any(createdPicker_->date()));
226 m->
setData(modelRow, 5, boost::any(modifiedPicker_->date()));
247 setCssTheme(
"polished");
268 fileFilterModel_->setSourceModel(fileModel_);
269 fileFilterModel_->setDynamicSortFilter(
true);
270 fileFilterModel_->setFilterKeyColumn(0);
271 fileFilterModel_->setFilterRole(
UserRole);
281 delete popupActionBox_;
319 layout->
addWidget(createTitle(
"Folders"), 0, 0);
320 layout->
addWidget(createTitle(
"Files"), 0, 1);
325 folderView_->select(folderModel_->index(0, 0, folderModel_->index(0, 0)));
334 layout->
addWidget(aboutDisplay(), 2, 0, 1, 2);
342 w->setLayout(layout);
369 "event.cancelBubble = true; event.returnValue = false; return false;");
379 folderView_ = treeView;
391 tableView->
setModel(fileFilterModel_);
415 fileView_ = tableView;
429 using namespace Chart;
431 WPieChart *chart =
new WPieChart();
433 chart->setModel(fileFilterModel_);
434 chart->setTitle(
"File sizes");
436 chart->setLabelsColumn(1);
437 chart->setDataColumn(3);
439 chart->setPerspectiveEnabled(
true, 0.2);
443 chart->resize(500, 200);
467 if (folderView_->selectedIndexes().empty())
470 WModelIndex selected = *folderView_->selectedIndexes().begin();
473 std::string folder = boost::any_cast<std::string>(d);
479 fileFilterModel_->setFilterRegExp(folder);
488 if (!folderView_->isSelected(item))
489 folderView_->select(item);
493 popup_->addItem(
"icons/folder_new.gif",
"Create a New Folder");
494 popup_->addItem(
"Rename this Folder")->setCheckable(
true);
495 popup_->addItem(
"Delete this Folder");
496 popup_->addSeparator();
497 popup_->addItem(
"Folder Details");
498 popup_->addSeparator();
499 popup_->addItem(
"Application Inventory");
500 popup_->addItem(
"Hardware Inventory");
501 popup_->addSeparator();
504 subMenu->
addItem(
"Sub Item 1");
505 subMenu->
addItem(
"Sub Item 2");
506 popup_->addMenu(
"File Deployments", subMenu);
518 if (popup_->isHidden())
519 popup_->popup(event);
528 if (popup_->result()) {
533 WString text = popup_->result()->text();
536 popupActionBox_ =
new WMessageBox(
"Sorry.",
"Action '" + text
537 +
"' is not implemented.",
NoIcon,
Ok);
538 popupActionBox_->buttonClicked()
540 popupActionBox_->show();
549 delete popupActionBox_;
561 fileModel_->invisibleRootItem()->setRowCount(0);
563 std::ifstream f((appRoot() +
"data/files.csv").c_str());
566 throw std::runtime_error(
"Could not read: data/files.csv");
570 for (
int i = 0; i < fileModel_->rowCount(); ++i) {
573 item->
setIcon(
"icons/file.gif");
578 item->
setText(folderNameMap_[folderId]);
580 convertToDate(fileModel_->item(i, 4));
581 convertToDate(fileModel_->item(i, 5));
597 folderModel_->
appendRow(level1 = createFolderItem(
"San Fransisco"));
598 level1->
appendRow(level2 = createFolderItem(
"Investors",
"sf-investors"));
599 level1->
appendRow(level2 = createFolderItem(
"Fellows",
"sf-fellows"));
601 folderModel_->appendRow(level1 = createFolderItem(
"Sophia Antipolis"));
602 level1->
appendRow(level2 = createFolderItem(
"R&D",
"sa-r_d"));
603 level1->
appendRow(level2 = createFolderItem(
"Services",
"sa-services"));
604 level1->
appendRow(level2 = createFolderItem(
"Support",
"sa-support"));
605 level1->
appendRow(level2 = createFolderItem(
"Billing",
"sa-billing"));
607 folderModel_->appendRow(level1 = createFolderItem(
"New York"));
608 level1->
appendRow(level2 = createFolderItem(
"Marketing",
"ny-marketing"));
609 level1->
appendRow(level2 = createFolderItem(
"Sales",
"ny-sales"));
610 level1->
appendRow(level2 = createFolderItem(
"Advisors",
"ny-advisors"));
612 folderModel_->appendRow(level1 = createFolderItem
614 level1->
appendRow(level2 = createFolderItem(
"Sales",
"frank-sales"));
617 boost::any(std::string(
"SandBox")));
625 const std::string& folderId = std::string())
629 if (!folderId.empty()) {
630 result->
setData(boost::any(folderId));
632 folderNameMap_[folderId] = location;
636 result->
setIcon(
"icons/folder.gif");
647 app->
setTitle(
"WTreeView Drag & Drop");
655 int main(
int argc,
char **argv)