Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes

Home Class Reference

#include <Home.h>

Inheritance diagram for Home:
Inheritance graph
[legend]

List of all members.

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 WWidgetexamples ()=0
virtual WWidgetdownload ()=0
virtual WWidgetsourceViewer (const std::string &deployPath)=0
virtual std::string filePrefix () const =0
void init ()
void addLanguage (const Lang &l)
WWidgetlinkSourceBrowser (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

WTabWidgetexamplesMenu_
WTablereleases_

Private Member Functions

WWidgetinitHome ()
WWidgetintroduction ()
WWidgetblog ()
WWidgetstatus ()
WWidgetfeatures ()
WWidgetdocumentation ()
WWidgetcommunity ()
WWidgetotherLanguage ()
void readNews (WTable *newsTable, const std::string &newsfile)
WWidgetwrapView (WWidget *(Home::*createFunction)())
void updateTitle ()
void setLanguage (int language)
void setLanguageFromPath ()
void setup ()
void logInternalPath (const std::string &path)

Private Attributes

WWidgethomePage_
WWidgetsourceViewer_
WStackedWidgetcontents_
WMenumainMenu_
int language_
WContainerWidgetsideBarContent_
std::vector< Langlanguages

Detailed Description

Definition at line 67 of file Home.h.


Constructor & Destructor Documentation

Home::Home ( const WEnvironment env,
const std::string &  title,
const std::string &  resourceBundle,
const std::string &  cssPath 
)

Definition at line 47 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");
  setTitle(title);

  setLocale("");
  language_ = 0;
}
Home::~Home (  ) [virtual]

Definition at line 43 of file Home.C.

{
}

Member Function Documentation

void Home::addLanguage ( const Lang l ) [inline, protected]

Definition at line 86 of file Home.h.

{ languages.push_back(l); }
WWidget * Home::blog (  ) [private]

Definition at line 263 of file Home.C.

{
  return new BlogView("/blog/", appRoot() + "blog.db", "/wt/blog/feed/");
}
WWidget * Home::community (  ) [private]

Definition at line 298 of file Home.C.

{
  return new WText(tr("home.community"));
}
WWidget * Home::documentation (  ) [private]

Definition at line 278 of file Home.C.

{
  return new WText(tr("home.documentation"));
}
virtual WWidget* Home::download (  ) [protected, pure virtual]

Implemented in JWtHome, and WtHome.

virtual WWidget* Home::examples (  ) [protected, pure virtual]

Implemented in JWtHome, and WtHome.

WWidget * Home::features (  ) [private]

Definition at line 273 of file Home.C.

{
  return new WText(tr("home.features"));
}
virtual std::string Home::filePrefix (  ) const [protected, pure virtual]

Implemented in JWtHome, and WtHome.

void Home::googleAnalyticsLogger (  )

Definition at line 352 of file Home.C.

{
  std::string googleCmd = 
    "if (window.pageTracker) {"
    """try {"
    ""  "window.pageTracker._trackPageview(\""
    + environment().deploymentPath() + internalPath() + "\");"
    """} catch (e) { }"
    "}";

  doJavaScript(googleCmd);
}
std::string Home::href ( const std::string &  url,
const std::string &  description 
) [protected]

Definition at line 293 of file Home.C.

{
  return "<a href=\"" + url + "\" target=\"_blank\">" + description + "</a>";
}
void Home::init (  ) [protected]

Definition at line 65 of file Home.C.

WWidget * Home::initHome (  ) [private]

Definition at line 112 of file Home.C.

{
  WContainerWidget *result = new WContainerWidget(root());
  Div *topWrapper = new Div(result, "top_wrapper");
  Div *topContent = new Div(topWrapper, "top_content");

  Div *languagesDiv = new Div(topContent, "top_languages");

  for (unsigned i = 0; i < languages.size(); ++i) {
    if (i != 0)
      new WText("- ", languagesDiv);

    const Lang& l = languages[i];

    WAnchor *a = new WAnchor("", WString::fromUTF8(l.longDescription_),
                             languagesDiv);
    a->setRefInternalPath(l.path_);
  }

  WText *topWt = new WText(tr("top_wt"), topContent);
  topWt->setInline(false);
  topWt->setId("top_wt");

  WText *bannerWt = new WText(tr("banner_wrapper"), result);
  bannerWt->setId("banner_wrapper");

  Div *mainWrapper = new Div(result, "main_wrapper");
  Div *mainContent = new Div(mainWrapper, "main_content");
  Div *mainMenu = new Div(mainContent, "main_menu");

  WStackedWidget *contents = new WStackedWidget();
  contents->setId("main_page");

  mainMenu_ = new WMenu(contents, Vertical, mainMenu);
  mainMenu_->setRenderAsList(true);

  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(mainMenu);

  mainContent->addWidget(contents);
  WContainerWidget *clearAll = new WContainerWidget(mainContent);
  clearAll->setStyleClass("clearall");

  WText *footerWrapper = new WText(tr("footer_wrapper"), result);
  footerWrapper->setId("footer_wrapper");

  return result;
}
WWidget * Home::introduction (  ) [private]

Definition at line 258 of file Home.C.

{
  return new WText(tr("home.intro"));
}
WWidget * Home::linkSourceBrowser ( const std::string &  examplePath ) [protected]

Definition at line 211 of file Home.C.

{
  WAnchor *a = new WAnchor("", tr("source-browser"));
  a->setRefInternalPath("/" + SRC_INTERNAL_PATH + "/" + example);
  return a;
}
void Home::logInternalPath ( const std::string &  path ) [private]

Definition at line 247 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]

Definition at line 283 of file Home.C.

{
  return new WText(tr("home.other-language"));
}
void Home::readNews ( WTable newsTable,
const std::string &  newsfile 
) [private]
void Home::readReleases ( WTable releaseTable ) [protected]

Definition at line 303 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 195 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");
    updateTitle();

    language_ = index;
  }
}
void Home::setLanguageFromPath (  ) [private]

Definition at line 218 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 76 of file Home.C.

{
  /*
   * This function switches between the two major components of the homepage,
   * depending on the internal path:
   * /src -> source viewer
   * /... -> homepage
   */
  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();

      homePage_ = initHome();
      root()->addWidget(homePage_);
    }
  }
}
virtual WWidget* Home::sourceViewer ( const std::string &  deployPath ) [protected, pure virtual]

Implemented in JWtHome, and WtHome.

WWidget * Home::status (  ) [private]

Definition at line 268 of file Home.C.

{
  return new WText(tr("home.status"));
}
WString Home::tr ( const char *  key ) [protected]

Definition at line 347 of file Home.C.

{
  return WString::tr(key);
}
void Home::updateTitle (  ) [private]

Definition at line 240 of file Home.C.

{
  if (mainMenu_->currentItem()) {
    setTitle(tr("wt") + " - " + mainMenu_->currentItem()->text());
  }
}
WWidget * Home::wrapView ( WWidget *(Home::*)()  createFunction ) [private]

Definition at line 288 of file Home.C.

{
  return makeStaticModel(boost::bind(createWidget, this));
}

Member Data Documentation

Definition at line 101 of file Home.h.

Definition at line 89 of file Home.h.

Definition at line 98 of file Home.h.

int Home::language_ [private]

Definition at line 115 of file Home.h.

std::vector<Lang> Home::languages [private]

Definition at line 129 of file Home.h.

WMenu* Home::mainMenu_ [private]

Definition at line 113 of file Home.h.

WTable* Home::releases_ [protected]

Definition at line 94 of file Home.h.

Definition at line 127 of file Home.h.

Definition at line 99 of file Home.h.


The documentation for this class was generated from the following files:

Generated on Fri Oct 29 2010 for the C++ Web Toolkit (Wt) by doxygen 1.7.2