Wt examples  4.15.0
Loading...
Searching...
No Matches
GitViewApplication Class Reference

A simple application to navigate a git repository. More...

Inheritance diagram for GitViewApplication:
[legend]

Public Member Functions

 GitViewApplication (const WEnvironment &env)
 Constructor.
Public Member Functions inherited from Wt::WApplication
 WApplication (const WEnvironment &environment)
 ~WApplication ()
const WEnvironment & environment () const
WContainerWidget * root () const
WWidget * findWidget (const std::string &name)
WWidget * findById (const std::string &id) const
void setTitle (const WString &title)
const WString & title () const
const WString & closeMessage () const
std::shared_ptr< WLocalizedStrings > localizedStrings ()
void setLocalizedStrings (const std::shared_ptr< WLocalizedStrings > &stringResolver)
WMessageResourceBundle & messageResourceBundle ()
void setLocale (const WLocale &locale, bool doRefresh=true)
const WLocale & locale () const
virtual void refresh ()
void bindWidget (std::unique_ptr< WWidget > widget, const std::string &domId)
std::string docRoot () const
void setConnectionMonitor (const std::string &jsObject)
std::string sessionId () const
SessionConstantId sessionConstantId () const
void changeSessionId ()
void processEvents ()
virtual void waitForEvent ()
virtual void initialize ()
virtual void finalize ()
void setTwoPhaseRenderingThreshold (int size)
void setCookie (const Http::Cookie &cookie)
void setCookie (const std::string &name, const std::string &value, int maxAge, const std::string &domain="", const std::string &path="", bool secure=false)
void removeCookie (const Http::Cookie &cookie)
void removeCookie (const std::string &name, const std::string &domain="", const std::string &path="")
void addMetaLink (const std::string &href, const std::string &rel, const std::string &media, const std::string &hreflang, const std::string &type, const std::string &sizes, bool disabled)
void removeMetaLink (const std::string &href)
void addMetaHeader (const std::string &name, const WString &content, const std::string &lang="")
void addMetaHeader (MetaHeaderType type, const std::string &name, const WString &content, const std::string &lang="")
WString metaHeader (MetaHeaderType type, const std::string &name) const
void removeMetaHeader (MetaHeaderType type, const std::string &name="")
WLogEntry log (const std::string &type) const
void setLoadingIndicator (std::unique_ptr< WLoadingIndicator > indicator)
WLoadingIndicator * loadingIndicator () const
void setFavicon (std::unique_ptr< WFavicon > icon)
WFavicon * favicon () const
void quit ()
void quit (const WString &restartMessage)
bool hasQuit () const
::int64_t maximumRequestSize () const
Signal< ::int64_t > & requestTooLarge ()
VisibilityState visibilityState () const
Signal< VisibilityState > & visibilityChanged ()
std::string focus () const
WWidget * focusedWidget () const
void setTrackFocus (bool enable=true)
bool trackFocus () const
Signal & elementFocused ()
Signal & elementBlurred ()
void setConfirmCloseMessage (const WString &message)
void deferRendering ()
void resumeRendering ()
std::string encodeUntrustedUrl (const std::string &url) const
void pushExposedConstraint (WWidget *w)
void suspend (std::chrono::seconds duration)
Signal & unsuspended ()
ServerSideFontMetrics * serverSideFontMetrics ()
WCssStyleSheet & styleSheet ()
void useStyleSheet (const WLink &link, const std::string &media="all")
void useStyleSheet (const WLink &link, const std::string &condition, const std::string &media)
void useStyleSheet (const WLinkedCssStyleSheet &styleSheet, const std::string &condition="")
void removeStyleSheet (const WLink &link)
void setTheme (const std::shared_ptr< WTheme > &theme)
std::shared_ptr< WTheme > theme () const
void setCssTheme (const std::string &name)
Signal< std::string > & themeColorModeChanged ()
void setLayoutDirection (LayoutDirection direction)
LayoutDirection layoutDirection () const
void setBodyClass (const std::string &styleClass)
std::string bodyClass () const
void setHtmlClass (const std::string &styleClass)
std::string htmlClass () const
void setHtmlAttribute (const std::string &name, const std::string &value)
WString htmlAttribute (const std::string &name) const
void setBodyAttribute (const std::string &name, const std::string &value)
WString bodyAttribute (const std::string &name) const
std::string url (const std::string &internalPath=std::string()) const
virtual std::string makeAbsoluteUrl (const std::string &url) const
std::string resolveRelativeUrl (const std::string &url) const
std::string bookmarkUrl () const
std::string bookmarkUrl (const std::string &internalPath) const
void setInternalPath (const std::string &path, bool emitChange=false)
void setInternalPathDefaultValid (bool valid)
bool internalPathDefaultValid () const
void setInternalPathValid (bool valid)
bool internalPathValid () const
std::string internalPath () const
std::string internalPathNextPart (const std::string &path) const
bool internalPathMatches (const std::string &path) const
Signal< std::string > & internalPathChanged ()
Signal< std::string > & internalPathInvalid ()
void redirect (const std::string &url)
void enableUpdates (bool enabled=true)
bool updatesEnabled () const
void triggerUpdate ()
void attachThread (bool attach=true)
void doJavaScript (const std::string &javascript, bool afterLoaded=true)
void addAutoJavaScript (const std::string &javascript)
void declareJavaScriptFunction (const std::string &name, const std::string &function)
bool require (const std::string &url, const std::string &symbol=std::string())
bool requireJQuery (const std::string &url)
bool customJQuery () const
void setJavaScriptClass (const std::string &className)
std::string javaScriptClass ()
EventSignal< WKeyEvent > & globalKeyWentDown ()
EventSignal< WKeyEvent > & globalKeyPressed ()
EventSignal< WKeyEvent > & globalKeyWentUp ()
EventSignal & globalEnterPressed ()
EventSignal & globalEscapePressed ()
WCssStyleSheet & styleSheet ()
void useStyleSheet (const WLink &link, const std::string &media="all")
void useStyleSheet (const WLink &link, const std::string &condition, const std::string &media)
void useStyleSheet (const WLinkedCssStyleSheet &styleSheet, const std::string &condition="")
void removeStyleSheet (const WLink &link)
void setTheme (const std::shared_ptr< WTheme > &theme)
std::shared_ptr< WTheme > theme () const
void setCssTheme (const std::string &name)
Signal< std::string > & themeColorModeChanged ()
void setLayoutDirection (LayoutDirection direction)
LayoutDirection layoutDirection () const
void setBodyClass (const std::string &styleClass)
std::string bodyClass () const
void setHtmlClass (const std::string &styleClass)
std::string htmlClass () const
void setHtmlAttribute (const std::string &name, const std::string &value)
WString htmlAttribute (const std::string &name) const
void setBodyAttribute (const std::string &name, const std::string &value)
WString bodyAttribute (const std::string &name) const
std::string url (const std::string &internalPath=std::string()) const
virtual std::string makeAbsoluteUrl (const std::string &url) const
std::string resolveRelativeUrl (const std::string &url) const
std::string bookmarkUrl () const
std::string bookmarkUrl (const std::string &internalPath) const
void setInternalPath (const std::string &path, bool emitChange=false)
void setInternalPathDefaultValid (bool valid)
bool internalPathDefaultValid () const
void setInternalPathValid (bool valid)
bool internalPathValid () const
std::string internalPath () const
std::string internalPathNextPart (const std::string &path) const
bool internalPathMatches (const std::string &path) const
Signal< std::string > & internalPathChanged ()
Signal< std::string > & internalPathInvalid ()
void redirect (const std::string &url)
void enableUpdates (bool enabled=true)
bool updatesEnabled () const
void triggerUpdate ()
void attachThread (bool attach=true)
void doJavaScript (const std::string &javascript, bool afterLoaded=true)
void addAutoJavaScript (const std::string &javascript)
void declareJavaScriptFunction (const std::string &name, const std::string &function)
bool require (const std::string &url, const std::string &symbol=std::string())
bool requireJQuery (const std::string &url)
bool customJQuery () const
void setJavaScriptClass (const std::string &className)
std::string javaScriptClass ()
EventSignal< WKeyEvent > & globalKeyWentDown ()
EventSignal< WKeyEvent > & globalKeyPressed ()
EventSignal< WKeyEvent > & globalKeyWentUp ()
EventSignal & globalEnterPressed ()
EventSignal & globalEscapePressed ()
Public Member Functions inherited from Wt::WObject
void addChild (std::unique_ptr< WObject > child)
Child * addChild (std::unique_ptr< Child > child)
std::unique_ptr< WObject > removeChild (WObject *child)
std::unique_ptr< Child > removeChild (Child *child)
virtual const std::string id () const
virtual void setObjectName (const std::string &name)
virtual std::string objectName () const
void resetLearnedSlots ()
void resetLearnedSlot (void(T::*method)())
WStatelessSlot * implementStateless (void(T::*method)())
WStatelessSlot * implementStateless (void(T::*method)(), void(T::*undoMethod)())
void isNotStateless ()
WStatelessSlot * implementJavaScript (void(T::*method)(), const std::string &jsCode)
virtual bool resendFormData ()
Public Member Functions inherited from Wt::Core::observable
 observable () noexcept
virtual ~observable ()
auto bindSafe (void(C::*method)(Args...)) noexcept
auto bindSafe (void(C::*method)(Args...) const) const noexcept
auto bindSafe (const Function &function) noexcept

Private Member Functions

void loadGitModel ()
 Change repository and/or revision.
void showFile ()
 Displayed the currently selected file.

Private Attributes

WLineEdit * repositoryEdit_
WLineEdit * revisionEdit_
WText * repositoryError_
WText * revisionError_
std::shared_ptr< GitModel > gitModel_
WTreeView * gitView_
SourceView * sourceView_

Additional Inherited Members

Public Types inherited from Wt::WApplication
typedef Wt::ApplicationCreator ApplicationCreator
typedef std::function< std::unique_ptr< WApplication >(const WEnvironment &)> ApplicationCreator
Public Types inherited from Wt::WObject
typedef void(WObject::* Method) ()
Static Public Member Functions inherited from Wt::WApplication
static WApplication * instance ()
static std::string resourcesUrl ()
static std::string relativeResourcesUrl ()
static std::string appRoot ()
static bool readConfigurationProperty (const std::string &name, std::string &value)
Protected Member Functions inherited from Wt::WApplication
virtual void notify (const WEvent &e)
virtual bool isExposed (WWidget *w) const
virtual void enableAjax ()
virtual void unload ()
virtual void idleTimeout ()
virtual void handleJavaScriptError (const std::string &errorText)
Protected Member Functions inherited from Wt::WObject
virtual WStatelessSlot * getStateless (Method method)

Detailed Description

A simple application to navigate a git repository.

This examples demonstrates how to use the custom model use GitModel with a WTreeView.

Definition at line 39 of file GitView.C.

Constructor & Destructor Documentation

◆ GitViewApplication()

GitViewApplication::GitViewApplication ( const WEnvironment & env)
inline

Constructor.

Definition at line 44 of file GitView.C.

45 : WApplication(env)
46 {
47 useStyleSheet("gitview.css");
48 setTitle("Git model example");
49
50 const char *gitRepo = getenv("GITVIEW_REPOSITORY_PATH");
51
52 auto grid
53 = std::make_unique<WGridLayout>();
54 grid->addWidget(std::make_unique<WText>("Git repository path:"), 0, 0);
55
56 repositoryEdit_ = grid->addWidget(std::make_unique<WLineEdit>(gitRepo ? gitRepo : ""),
57 0, 1, AlignmentFlag::Left);
58 repositoryError_ = grid->addWidget(std::make_unique<WText>(), 0, 2);
59
60 grid->addWidget(std::make_unique<WText>("Revision:"), 1, 0);
61
62 revisionEdit_ = grid->addWidget(std::make_unique<WLineEdit>("master"),
63 1, 1, AlignmentFlag::Left);
64 revisionError_ = grid->addWidget(std::make_unique<WText>(), 1, 2);
65
66 repositoryEdit_->setTextSize(30);
67 revisionEdit_->setTextSize(20);
68 repositoryError_->setStyleClass("error-msg");
69 revisionError_->setStyleClass("error-msg");
70
71 repositoryEdit_->enterPressed()
72 .connect(this, &GitViewApplication::loadGitModel);
73 revisionEdit_->enterPressed()
74 .connect(this, &GitViewApplication::loadGitModel);
75
76 auto button = grid->addWidget(std::make_unique<WPushButton>("Load"),
77 2, 0, AlignmentFlag::Left);
78 button->clicked().connect(this, &GitViewApplication::loadGitModel);
79
80 auto gitView = std::make_unique<WTreeView>();
81 gitView_ = gitView.get();
82 gitView_->resize(300, WLength::Auto);
83 gitView_->setSortingEnabled(false);
84
86 = std::make_shared<GitModel>();
87 gitView_->setModel(gitModel_);
88 gitView_->setSelectionMode(SelectionMode::Single);
89 gitView_->selectionChanged().connect(this, &GitViewApplication::showFile);
90
91 auto sourceView
92 = std::make_unique<SourceView>(ItemDataRole::Display,
94 sourceView_ = sourceView.get();
95 sourceView_->setStyleClass("source-view");
96
97 /* FIXME: adding a gridlayout to a box layout */
98 if (environment().javaScript()) {
99 /*
100 * We have JavaScript: We can use layout managers so everything will
101 * always fit nicely in the window.
102 */
103 auto topLayout = root()->setLayout(std::make_unique<WVBoxLayout>());
104 root()->setStyleClass("maindiv");
105 topLayout->addLayout(std::move(grid),0);
106
107 auto gitLayout = std::make_unique<WHBoxLayout>();
108 gitLayout->addWidget(std::move(gitView),0);
109 gitLayout->addWidget(std::move(sourceView),1);
110 topLayout->addLayout(std::move(gitLayout),1);
111 } else {
112 /*
113 * No JavaScript: let's make the best of the situation using regular
114 * CSS-based layout
115 */
116 root()->setStyleClass("maindiv");
117 auto top
118 = std::make_unique<WContainerWidget>();
119 top->setLayout(std::move(grid));
120 root()->addWidget(std::move(top));
121 root()->addWidget(std::move(gitView));
122 gitView_->setFloatSide(Side::Left);
123 gitView_->setMargin(6);
124 root()->addWidget(std::move(sourceView));
125 sourceView_->setMargin(6);
126 }
127 }
static const ItemDataRole ContentsRole
The role which may be used on a file to retrieve its contents.
Definition GitModel.h:43
static const ItemDataRole FilePathRole
Definition GitModel.h:44
void loadGitModel()
Change repository and/or revision.
Definition GitView.C:138
WText * repositoryError_
Definition GitView.C:131
WLineEdit * repositoryEdit_
Definition GitView.C:130
WText * revisionError_
Definition GitView.C:131
SourceView * sourceView_
Definition GitView.C:134
std::shared_ptr< GitModel > gitModel_
Definition GitView.C:132
WLineEdit * revisionEdit_
Definition GitView.C:130
WTreeView * gitView_
Definition GitView.C:133
void showFile()
Displayed the currently selected file.
Definition GitView.C:156
static constexpr const int Display
WContainerWidget * root() const
void setTitle(const WString &title)
void useStyleSheet(const WLink &link, const std::string &media="all")
const WEnvironment & environment() const
WApplication(const WEnvironment &environment)
void setLayout(std::unique_ptr< WLayout > layout)
virtual void addWidget(std::unique_ptr< WWidget > widget)
static WLength Auto
virtual void setStyleClass(const WString &styleClass) override

Member Function Documentation

◆ loadGitModel()

void GitViewApplication::loadGitModel ( )
inlineprivate

Change repository and/or revision.

Definition at line 138 of file GitView.C.

138 {
139 sourceView_->setIndex(WModelIndex());
140 repositoryError_->setText("");
141 revisionError_->setText("");
142 try {
143 gitModel_->setRepositoryPath(repositoryEdit_->text().toUTF8());
144 try {
145 gitModel_->loadRevision(revisionEdit_->text().toUTF8());
146 } catch (const Git::Exception& e) {
147 revisionError_->setText(e.what());
148 }
149 } catch (const Git::Exception& e) {
150 repositoryError_->setText(e.what());
151 }
152 }

◆ showFile()

void GitViewApplication::showFile ( )
inlineprivate

Displayed the currently selected file.

Definition at line 156 of file GitView.C.

156 {
157 if (gitView_->selectedIndexes().empty())
158 return;
159
160 WModelIndex selected = *gitView_->selectedIndexes().begin();
161 sourceView_->setIndex(selected);
162 }

Member Data Documentation

◆ gitModel_

std::shared_ptr<GitModel> GitViewApplication::gitModel_
private

Definition at line 132 of file GitView.C.

◆ gitView_

WTreeView* GitViewApplication::gitView_
private

Definition at line 133 of file GitView.C.

◆ repositoryEdit_

WLineEdit* GitViewApplication::repositoryEdit_
private

Definition at line 130 of file GitView.C.

◆ repositoryError_

WText* GitViewApplication::repositoryError_
private

Definition at line 131 of file GitView.C.

◆ revisionEdit_

WLineEdit * GitViewApplication::revisionEdit_
private

Definition at line 130 of file GitView.C.

◆ revisionError_

WText * GitViewApplication::revisionError_
private

Definition at line 131 of file GitView.C.

◆ sourceView_

SourceView* GitViewApplication::sourceView_
private

Definition at line 134 of file GitView.C.


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