Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include <iostream>
00008 #include <stdlib.h>
00009
00010 #include <Wt/WApplication>
00011 #include <Wt/WContainerWidget>
00012 #include <Wt/WEnvironment>
00013 #include <Wt/WLineEdit>
00014 #include <Wt/WGridLayout>
00015 #include <Wt/WHBoxLayout>
00016 #include <Wt/WPushButton>
00017 #include <Wt/WTable>
00018 #include <Wt/WText>
00019 #include <Wt/WTreeView>
00020 #include <Wt/WVBoxLayout>
00021 #include <Wt/WViewWidget>
00022
00023 #include "GitModel.h"
00024 #include "../wt-homepage/SourceView.h"
00025
00026 using namespace Wt;
00027
00032
00039 class GitViewApplication : public WApplication
00040 {
00041 public:
00044 GitViewApplication(const WEnvironment& env)
00045 : WApplication(env)
00046 {
00047 useStyleSheet("gitview.css");
00048 setTitle("Git model example");
00049
00050 const char *gitRepo = getenv("GITVIEW_REPOSITORY_PATH");
00051
00052 WGridLayout *grid = new WGridLayout();
00053 grid->addWidget(new WText("Git repository path:"), 0, 0);
00054 grid->addWidget(repositoryEdit_ = new WLineEdit(gitRepo ? gitRepo : "")
00055 , 0, 1, AlignLeft);
00056 grid->addWidget(repositoryError_ = new WText(), 0, 2);
00057 grid->addWidget(new WText("Revision:"), 1, 0);
00058 grid->addWidget(revisionEdit_ = new WLineEdit("master"), 1, 1, AlignLeft);
00059 grid->addWidget(revisionError_ = new WText(), 1, 2);
00060
00061 repositoryEdit_->setTextSize(30);
00062 revisionEdit_->setTextSize(20);
00063 repositoryError_->setStyleClass("error-msg");
00064 revisionError_->setStyleClass("error-msg");
00065
00066 repositoryEdit_->enterPressed()
00067 .connect(this, &GitViewApplication::loadGitModel);
00068 revisionEdit_->enterPressed()
00069 .connect(this, &GitViewApplication::loadGitModel);
00070
00071 WPushButton *b = new WPushButton("Load");
00072 b->clicked().connect(this, &GitViewApplication::loadGitModel);
00073 grid->addWidget(b, 2, 0, AlignLeft);
00074
00075 gitView_ = new WTreeView();
00076 gitView_->resize(300, WLength::Auto);
00077 gitView_->setSortingEnabled(false);
00078 gitView_->setModel(gitModel_ = new GitModel(this));
00079 gitView_->setSelectionMode(SingleSelection);
00080 gitView_->selectionChanged().connect(this, &GitViewApplication::showFile);
00081
00082 sourceView_ = new SourceView(DisplayRole,
00083 GitModel::ContentsRole,
00084 GitModel::FilePathRole);
00085 sourceView_->setStyleClass("source-view");
00086
00087 if (environment().javaScript()) {
00088
00089
00090
00091
00092 WVBoxLayout *topLayout = new WVBoxLayout();
00093 topLayout->addLayout(grid, 0, AlignTop | AlignLeft);
00094
00095 WHBoxLayout *gitLayout = new WHBoxLayout();
00096 gitLayout->setLayoutHint("table-layout", "fixed");
00097 gitLayout->addWidget(gitView_, 0);
00098 gitLayout->addWidget(sourceView_, 1);
00099 topLayout->addLayout(gitLayout, 1);
00100
00101 root()->setLayout(topLayout);
00102 root()->setStyleClass("maindiv");
00103 } else {
00104
00105
00106
00107
00108 root()->setStyleClass("maindiv");
00109 WContainerWidget *top = new WContainerWidget();
00110 top->setLayout(grid, AlignTop | AlignLeft);
00111 root()->addWidget(top);
00112 root()->addWidget(gitView_);
00113 gitView_->setFloatSide(Left);
00114 gitView_->setMargin(6);
00115 root()->addWidget(sourceView_);
00116 sourceView_->setMargin(6);
00117 }
00118 }
00119
00120 private:
00121 WLineEdit *repositoryEdit_, *revisionEdit_;
00122 WText *repositoryError_, *revisionError_;
00123 GitModel *gitModel_;
00124 WTreeView *gitView_;
00125 SourceView *sourceView_;
00126
00129 void loadGitModel() {
00130 sourceView_->setIndex(WModelIndex());
00131 repositoryError_->setText("");
00132 revisionError_->setText("");
00133 try {
00134 gitModel_->setRepositoryPath(repositoryEdit_->text().toUTF8());
00135 try {
00136 gitModel_->loadRevision(revisionEdit_->text().toUTF8());
00137 } catch (const Git::Exception& e) {
00138 revisionError_->setText(e.what());
00139 }
00140 } catch (const Git::Exception& e) {
00141 repositoryError_->setText(e.what());
00142 }
00143 }
00144
00147 void showFile() {
00148 if (gitView_->selectedIndexes().empty())
00149 return;
00150
00151 WModelIndex selected = *gitView_->selectedIndexes().begin();
00152 sourceView_->setIndex(selected);
00153 }
00154 };
00155
00156 WApplication *createApplication(const WEnvironment& env)
00157 {
00158 return new GitViewApplication(env);
00159 }
00160
00161 int main(int argc, char **argv)
00162 {
00163 return WRun(argc, argv, &createApplication);
00164 }
00165