| 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] | 
 1.7.5.1
 1.7.5.1