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)
TreeViewDragDrop(const WEnvironment &env)
Constructor.
void setTextFormat(const WString &format)
static WString dateDisplayFormat
Date display format.
WStandardItemModel * folderModel_
The folder model (used by folderView_)
void addLayout(WLayout *layout, int row, int column, WFlags< AlignmentFlag > alignment=0)
static WString dateEditFormat
Date edit format.
WMessageBox * popupActionBox_
Message box to confirm the poup menu action.
void handleFinish(DialogCode result)
WString asString(const boost::any &v, const WString &formatString=WString())
virtual void resize(const WLength &width, const WLength &height)
WTableView * fileView()
Creates the file table view (a WTableView)
void convertToDate(WStandardItem *item)
Convert a string to a date.
void populateFiles()
Populate the files model.
WApplication * createApplication(const WEnvironment &env)
void setColumnStretch(int column, int stretch)
static WString fromUTF8(const std::string &value, bool checkValid=false)
static WDate fromString(const WString &s)
virtual void setColumnWidth(int column, const WLength &width)
WMessageResourceBundle & messageResourceBundle()
void setTitle(const WString &title)
WWidget * pieChart()
Creates the chart.
static const char * FileSelectionMimeType
Constant that indicates the mime type for a selection of files.
void setTwoPhaseRenderingThreshold(int size)
WTreeView * folderView_
The folder view.
void setSelectionMode(SelectionMode mode)
A specialized standard item model which report a specific drag and drop mime type.
WWidget * aboutDisplay()
Creates the hints text.
void dialogDone()
Process the result of the message box.
A specialized treeview that supports a custom drop event.
void setBuddy(WFormWidget *buddy)
std::string toUTF8() const
WDatePicker * modifiedPicker_
WAbstractItemModel * sourceModel() const
WSortFilterProxyModel * fileFilterModel_
The sort filter proxy model that adapts fileModel_.
std::map< std::string, WString > folderNameMap_
Maps folder id's to folder descriptions.
Signal & selectionChanged()
static WString tr(const char *key)
void setDragEnabled(bool enable)
void editFile(const WModelIndex &item)
Edit a particular row.
void use(const std::string &path, bool loadInMemory=true)
Signal< WModelIndex, WMouseEvent > & doubleClicked()
void createUI()
Setup the user interface.
void setIcon(const std::string &uri)
void setText(const WString &text)
A dialog for editing a 'file'.
virtual std::string mimeType() const
Return the mime type.
static WApplication * instance()
void setColumnResizable(int column, bool enabled=true, const WLength &initialSize=WLength::Auto)
WStandardItem * createFolderItem(const WString &location, const std::string &folderId=std::string())
Create a folder item.
void showPopup(const WModelIndex &item, const WMouseEvent &event)
Show a popup for a folder item.
WPopupMenu * popup_
Popup menu on the folder view.
void setResizable(int index, bool enabled=true, const WLength &initialSize=WLength::Auto)
void expandToDepth(int depth)
WAbstractItemModel * model_
void populateFolders()
Populate the folders model.
void sortByColumn(int column, SortOrder order)
virtual void setModel(WAbstractItemModel *model)
static std::string appRoot()
WTreeView * folderView()
Creates the folder WTreeView.
virtual void setData(const boost::any &data, int role=UserRole)
void setRowStretch(int row, int stretch)
void addWidget(WWidget *widget, int row, int column, WFlags< AlignmentFlag > alignment=0)
void useStyleSheet(const WLink &link, const std::string &media="all")
void addWidget(WWidget *widget, int stretch=0, WFlags< AlignmentFlag > alignment=0)
FileModel(WObject *parent)
Constructor.
void appendRow(const std::vector< WStandardItem * > &items)
virtual void setAlternatingRowColors(bool enable)
void popupAction()
Process the result of the popup menu.
void setItemDelegateForColumn(int column, WAbstractItemDelegate *delegate)
WTableView * fileView_
The file view.
void setFlags(WFlags< ItemFlag > flags)
int main(int argc, char **argv)
Signal< WModelIndex, WMouseEvent > & mouseWentUp()
virtual Wt::Signals::connection connect(WObject *target, WObject::Method method)
void folderChanged()
Change the filter on the file view when the selected folder changes.
void readFromCsv(std::istream &f, Wt::WAbstractItemModel *model, int numRows, bool firstLineIsHeaders)
Utility function that reads a model from a CSV file.
virtual bool setData(const WModelIndex &index, const boost::any &value, int role=EditRole)
boost::any data(int role=DisplayRole) const
virtual WModelIndex mapToSource(const WModelIndex &proxyIndex) const =0
FileEditDialog(WAbstractItemModel *model, const WModelIndex &item)
virtual void setModel(WAbstractItemModel *model)
WStandardItemModel * fileModel_
The file model (used by fileView_)
virtual ~TreeViewDragDrop()
WText * createTitle(const WString &title)
Creates a title widget.
virtual void setColumnAlignment(int column, AlignmentFlag alignment)
WFlags< ItemFlag > flags() const