Wt examples
3.3.0
|
#include <Home.h>
Public Member Functions | |
Home (const WEnvironment &env, const std::string &title, const std::string &resourceBundle, const std::string &cssPath) | |
virtual | ~Home () |
void | googleAnalyticsLogger () |
Protected Member Functions | |
virtual WWidget * | examples ()=0 |
virtual WWidget * | createQuoteForm ()=0 |
virtual WWidget * | sourceViewer (const std::string &deployPath)=0 |
virtual std::string | filePrefix () const =0 |
void | init () |
void | addLanguage (const Lang &l) |
WWidget * | linkSourceBrowser (const std::string &examplePath) |
WString | tr (const char *key) |
std::string | href (const std::string &url, const std::string &description) |
void | readReleases (WTable *releaseTable) |
Protected Attributes | |
WTabWidget * | examplesMenu_ |
WTable * | releases_ |
Private Member Functions | |
void | createHome () |
WWidget * | introduction () |
WWidget * | blog () |
WWidget * | status () |
WWidget * | features () |
WWidget * | documentation () |
WWidget * | community () |
WWidget * | otherLanguage () |
WWidget * | download () |
WWidget * | quoteForm () |
void | readNews (WTable *newsTable, const std::string &newsfile) |
WWidget * | wrapView (WWidget *(Home::*createFunction)()) |
void | updateTitle () |
void | setLanguage (int language) |
void | setLanguageFromPath () |
void | setup () |
void | logInternalPath (const std::string &path) |
void | chatSetUser (const WString &name) |
Private Attributes | |
WWidget * | homePage_ |
WWidget * | sourceViewer_ |
WStackedWidget * | contents_ |
WMenu * | mainMenu_ |
int | language_ |
WContainerWidget * | sideBarContent_ |
std::vector< Lang > | languages |
Home::Home | ( | const WEnvironment & | env, |
const std::string & | title, | ||
const std::string & | resourceBundle, | ||
const std::string & | cssPath | ||
) |
Definition at line 38 of file Home.C.
: WApplication(env), releases_(0), homePage_(0), sourceViewer_(0) { messageResourceBundle().use(appRoot() + resourceBundle, false); useStyleSheet(cssPath + "/wt.css"); useStyleSheet(cssPath + "/wt_ie.css", "lt IE 7"); useStyleSheet("css/home.css"); useStyleSheet("css/sourceview.css"); useStyleSheet("css/chatwidget.css"); useStyleSheet("css/chatwidget_ie6.css", "lt IE 7"); setTitle(title); setLocale(""); language_ = 0; }
void Home::addLanguage | ( | const Lang & | l | ) | [inline, protected] |
WWidget * Home::blog | ( | ) | [private] |
Definition at line 255 of file Home.C.
{ const Lang& l = languages[language_]; std::string langPath = l.path_; BlogView *blog = new BlogView(langPath + "blog/", appRoot() + "blog.db", "/wt/blog/feed/"); blog->setObjectName("blog"); if (!blog->user().empty()) chatSetUser(blog->user()); blog->userChanged().connect(this, &Home::chatSetUser); return blog; }
void Home::chatSetUser | ( | const WString & | name | ) | [private] |
Definition at line 271 of file Home.C.
{ WApplication::instance()->doJavaScript ("if (window.chat && window.chat.emit) {" """try {" "" "window.chat.emit(window.chat, 'login', " "" "" + userName.jsStringLiteral() + "); " """} catch (e) {" "" "window.chatUser=" + userName.jsStringLiteral() + ";" """}" "} else " """window.chatUser=" + userName.jsStringLiteral() + ";"); }
WWidget * Home::community | ( | ) | [private] |
void Home::createHome | ( | ) | [private] |
Definition at line 110 of file Home.C.
{ WTemplate *result = new WTemplate(tr("template"), root()); homePage_ = result; WContainerWidget *languagesDiv = new WContainerWidget(); languagesDiv->setId("top_languages"); for (unsigned i = 0; i < languages.size(); ++i) { if (i != 0) new WText("- ", languagesDiv); const Lang& l = languages[i]; new WAnchor(WLink(WLink::InternalPath, l.path_), WString::fromUTF8(l.longDescription_), languagesDiv); } WStackedWidget *contents = new WStackedWidget(); WAnimation fade(WAnimation::Fade, WAnimation::Linear, 250); contents->setTransitionAnimation(fade); contents->setId("main_page"); mainMenu_ = new WMenu(contents, Vertical); mainMenu_->addItem (tr("introduction"), introduction())->setPathComponent(""); mainMenu_->addItem (tr("blog"), deferCreate(boost::bind(&Home::blog, this))); mainMenu_->addItem (tr("features"), wrapView(&Home::features), WMenuItem::PreLoading); mainMenu_->addItem (tr("documentation"), wrapView(&Home::documentation), WMenuItem::PreLoading); mainMenu_->addItem (tr("examples"), examples(), WMenuItem::PreLoading)->setPathComponent("examples/"); mainMenu_->addItem (tr("download"), deferCreate(boost::bind(&Home::download, this)), WMenuItem::PreLoading); mainMenu_->addItem (tr("community"), wrapView(&Home::community), WMenuItem::PreLoading); mainMenu_->addItem (tr("other-language"), wrapView(&Home::otherLanguage), WMenuItem::PreLoading); mainMenu_->itemSelectRendered().connect(this, &Home::updateTitle); mainMenu_->itemSelected().connect(this, &Home::googleAnalyticsLogger); // Make the menu be internal-path aware. mainMenu_->setInternalPathEnabled("/"); sideBarContent_ = new WContainerWidget(); result->bindWidget("languages", languagesDiv); result->bindWidget("menu", mainMenu_); result->bindWidget("contents", contents); result->bindWidget("sidebar", sideBarContent_); }
virtual WWidget* Home::createQuoteForm | ( | ) | [protected, pure virtual] |
WWidget * Home::documentation | ( | ) | [private] |
WWidget * Home::download | ( | ) | [private] |
Definition at line 389 of file Home.C.
{ WContainerWidget *result = new WContainerWidget(); result->addWidget(new WText(tr("home.download"))); result->addWidget(new WText(tr("home.download.license"))); #ifdef WT_EMWEB_BUILD result->addWidget(quoteForm()); #endif // WT_EMWEB_BUILD result->addWidget(new WText(tr("home.download.packages"))); releases_ = new WTable(); readReleases(releases_); result->addWidget(releases_); result->addWidget(new WText(tr("home.download.other"))); return result; }
WWidget * Home::features | ( | ) | [private] |
virtual std::string Home::filePrefix | ( | ) | const [protected, pure virtual] |
void Home::googleAnalyticsLogger | ( | ) |
Definition at line 417 of file Home.C.
{ std::string googleCmd = "if (window.pageTracker) {" """try {" "" "setTimeout(function() {" "" "window.pageTracker._trackPageview(\"" + environment().deploymentPath() + internalPath() + "\");" "" "}, 1000);" """} catch (e) { }" "}"; doJavaScript(googleCmd); }
std::string Home::href | ( | const std::string & | url, |
const std::string & | description | ||
) | [protected] |
void Home::init | ( | ) | [protected] |
Definition at line 59 of file Home.C.
{ internalPathChanged().connect(this, &Home::setup); internalPathChanged().connect(this, &Home::setLanguageFromPath); internalPathChanged().connect(this, &Home::logInternalPath); setup(); setLanguageFromPath(); }
WWidget * Home::introduction | ( | ) | [private] |
WWidget * Home::linkSourceBrowser | ( | const std::string & | examplePath | ) | [protected] |
Definition at line 197 of file Home.C.
{ /* * Instead of using a WAnchor, which will not progress properly because * it is wrapped with wrapView() (-- should we not fix that?), we use * a WText which contains an anchor, and enable internal path encoding. */ std::string path = "#/" + SRC_INTERNAL_PATH + "/" + example; WText *a = new WText(tr("source-browser-link").arg(path)); a->setInternalPathEncoding(true); return a; }
void Home::logInternalPath | ( | const std::string & | path | ) | [private] |
Definition at line 239 of file Home.C.
{ // simulate an access log for the interal paths log("path") << path; // If this goes to /src, we need to invoke google analytics method too if (path.size() >= 4 && path.substr(0, 4) == "/src") { googleAnalyticsLogger(); } }
WWidget * Home::otherLanguage | ( | ) | [private] |
WWidget* Home::quoteForm | ( | ) | [private] |
void Home::readNews | ( | WTable * | newsTable, |
const std::string & | newsfile | ||
) | [private] |
void Home::readReleases | ( | WTable * | releaseTable | ) | [protected] |
Definition at line 322 of file Home.C.
{ std::ifstream f((filePrefix() + "releases.txt").c_str()); releaseTable->clear(); releaseTable->elementAt(0, 0) ->addWidget(new WText(tr("home.download.version"))); releaseTable->elementAt(0, 1) ->addWidget(new WText(tr("home.download.date"))); releaseTable->elementAt(0, 2) ->addWidget(new WText(tr("home.download.description"))); releaseTable->elementAt(0, 0)->resize(WLength(15, WLength::FontEx), WLength::Auto); releaseTable->elementAt(0, 1)->resize(WLength(15, WLength::FontEx), WLength::Auto); int row = 1; while (f) { std::string line; getline(f, line); if (f) { typedef boost::tokenizer<boost::escaped_list_separator<char> > CsvTokenizer; CsvTokenizer tok(line); CsvTokenizer::iterator i=tok.begin(); std::string fileName = *i; std::string description = *(++i); releaseTable->elementAt(row, 0)->addWidget (new WText(href("http://prdownloads.sourceforge.net/witty/" + fileName + "?download", description))); releaseTable->elementAt(row, 1)->addWidget(new WText(*(++i))); releaseTable->elementAt(row, 2)->addWidget(new WText(*(++i))); ++row; } } }
void Home::setLanguage | ( | int | language | ) | [private] |
Definition at line 178 of file Home.C.
{ if (homePage_) { const Lang& l = languages[index]; setLocale(l.code_); std::string langPath = l.path_; mainMenu_->setInternalBasePath(langPath); examplesMenu_->setInternalBasePath(langPath + "examples"); BlogView *blog = dynamic_cast<BlogView *>(findWidget("blog")); if (blog) blog->setInternalBasePath(langPath + "blog/"); updateTitle(); language_ = index; } }
void Home::setLanguageFromPath | ( | ) | [private] |
Definition at line 210 of file Home.C.
{ std::string langPath = internalPathNextPart("/"); if (langPath.empty()) langPath = '/'; else langPath = '/' + langPath + '/'; int newLanguage = 0; for (unsigned i = 0; i < languages.size(); ++i) { if (languages[i].path_ == langPath) { newLanguage = i; break; } } if (newLanguage != language_) setLanguage(newLanguage); }
void Home::setup | ( | ) | [private] |
Definition at line 70 of file Home.C.
{ /* * This function switches between the two major components of the homepage, * depending on the internal path: * /src -> source viewer * /... -> homepage * * FIXME: we should take into account language /cn/src ... */ std::string base = internalPathNextPart("/"); if (base == SRC_INTERNAL_PATH) { if (!sourceViewer_) { delete homePage_; homePage_ = 0; root()->clear(); sourceViewer_ = sourceViewer("/" + SRC_INTERNAL_PATH + "/"); WVBoxLayout *layout = new WVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(sourceViewer_); root()->setLayout(layout); } } else { if (!homePage_) { delete sourceViewer_; sourceViewer_ = 0; root()->clear(); createHome(); root()->addWidget(homePage_); setLanguageFromPath(); } } }
virtual WWidget* Home::sourceViewer | ( | const std::string & | deployPath | ) | [protected, pure virtual] |
WWidget * Home::status | ( | ) | [private] |
WString Home::tr | ( | const char * | key | ) | [protected] |
Definition at line 412 of file Home.C.
{ return WString::tr(key); }
void Home::updateTitle | ( | ) | [private] |
Definition at line 232 of file Home.C.
{ if (mainMenu_->currentItem()) { setTitle(tr("wt") + " - " + mainMenu_->currentItem()->text()); } }
Definition at line 307 of file Home.C.
{ return makeStaticModel(boost::bind(createWidget, this)); }
WStackedWidget* Home::contents_ [private] |
WTabWidget* Home::examplesMenu_ [protected] |
WWidget* Home::homePage_ [private] |
int Home::language_ [private] |
std::vector<Lang> Home::languages [private] |
WMenu* Home::mainMenu_ [private] |
WTable* Home::releases_ [protected] |
WContainerWidget* Home::sideBarContent_ [private] |
WWidget* Home::sourceViewer_ [private] |