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;
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)));
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();
432 chart->setModel(fileFilterModel_);
433 chart->setTitle(
"File sizes");
435 chart->setLabelsColumn(1);
436 chart->setDataColumn(3);
438 chart->setPerspectiveEnabled(
true, 0.2);
442 chart->resize(500, 200);
466 if (folderView_->selectedIndexes().empty())
469 WModelIndex selected = *folderView_->selectedIndexes().begin();
472 std::string folder = boost::any_cast<std::string>(d);
478 fileFilterModel_->setFilterRegExp(folder);
487 if (!folderView_->isSelected(item))
488 folderView_->select(item);
492 popup_->addItem(
"icons/folder_new.gif",
"Create a New Folder");
493 popup_->addItem(
"Rename this Folder")->setCheckable(
true);
494 popup_->addItem(
"Delete this Folder");
495 popup_->addSeparator();
496 popup_->addItem(
"Folder Details");
497 popup_->addSeparator();
498 popup_->addItem(
"Application Inventory");
499 popup_->addItem(
"Hardware Inventory");
500 popup_->addSeparator();
503 subMenu->
addItem(
"Sub Item 1");
504 subMenu->
addItem(
"Sub Item 2");
505 popup_->addMenu(
"File Deployments", subMenu);
517 if (popup_->isHidden())
518 popup_->popup(event);
527 if (popup_->result()) {
532 WString text = popup_->result()->text();
535 popupActionBox_ =
new WMessageBox(
"Sorry.",
"Action '" + text
536 +
"' is not implemented.",
NoIcon,
Ok);
537 popupActionBox_->buttonClicked()
539 popupActionBox_->show();
548 delete popupActionBox_;
560 fileModel_->invisibleRootItem()->setRowCount(0);
562 std::ifstream f((appRoot() +
"data/files.csv").c_str());
565 throw std::runtime_error(
"Could not read: data/files.csv");
569 for (
int i = 0; i < fileModel_->rowCount(); ++i) {
572 item->
setIcon(
"icons/file.gif");
577 item->
setText(folderNameMap_[folderId]);
579 convertToDate(fileModel_->item(i, 4));
580 convertToDate(fileModel_->item(i, 5));
596 folderModel_->
appendRow(level1 = createFolderItem(
"San Fransisco"));
597 level1->
appendRow(level2 = createFolderItem(
"Investors",
"sf-investors"));
598 level1->
appendRow(level2 = createFolderItem(
"Fellows",
"sf-fellows"));
600 folderModel_->appendRow(level1 = createFolderItem(
"Sophia Antipolis"));
601 level1->
appendRow(level2 = createFolderItem(
"R&D",
"sa-r_d"));
602 level1->
appendRow(level2 = createFolderItem(
"Services",
"sa-services"));
603 level1->
appendRow(level2 = createFolderItem(
"Support",
"sa-support"));
604 level1->
appendRow(level2 = createFolderItem(
"Billing",
"sa-billing"));
606 folderModel_->appendRow(level1 = createFolderItem(
"New York"));
607 level1->
appendRow(level2 = createFolderItem(
"Marketing",
"ny-marketing"));
608 level1->
appendRow(level2 = createFolderItem(
"Sales",
"ny-sales"));
609 level1->
appendRow(level2 = createFolderItem(
"Advisors",
"ny-advisors"));
611 folderModel_->appendRow(level1 = createFolderItem
613 level1->
appendRow(level2 = createFolderItem(
"Sales",
"frank-sales"));
616 boost::any(std::string(
"SandBox")));
624 const std::string& folderId = std::string())
628 if (!folderId.empty()) {
629 result->
setData(boost::any(folderId));
631 folderNameMap_[folderId] = location;
635 result->
setIcon(
"icons/folder.gif");
646 app->
setTitle(
"WTreeView Drag & Drop");
654 int main(
int argc,
char **argv)