BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
WelcomeView Class Reference
Inheritance diagram for WelcomeView:
[legend]
Collaboration diagram for WelcomeView:
[legend]

Public Slots

void onNewUser ()
 
void onWebLinkClicked (const QUrl &url)
 
void updateRecentProjectPanel ()
 

Public Member Functions

 WelcomeView (MainWindow *parent)
 

Protected Member Functions

void showEvent (QShowEvent *)
 

Private Member Functions

QBoxLayout * createButtonLayout ()
 
QBoxLayout * createCurrentProjectLayout ()
 
QLabel * createNotificationLabel ()
 
QBoxLayout * createProjectLayout ()
 
QWidget * createProjectWidget ()
 
QBoxLayout * createRecentProjectLayout ()
 
QFrame * createSeparationFrame ()
 
QString currentProjectFancyName ()
 returns current project name suited for displaying on current project layout More...
 
void generateRecentProjectList ()
 
ProjectManagerprojectManager ()
 
void setCurrentProjectName (const QString &name)
 updates label with current project name in picturesque manner More...
 

Private Attributes

FancyLabelm_currentProjectLabel
 
MainWindowm_mainWindow
 
QPushButton * m_newProjectButton
 
QPushButton * m_newUsertButton
 
UpdateNotifierWidgetm_notifierWidget
 
QPushButton * m_openProjectButton
 
QVBoxLayout * m_recentProjectLayout
 

Detailed Description

Definition at line 30 of file WelcomeView.h.

Constructor & Destructor Documentation

◆ WelcomeView()

WelcomeView::WelcomeView ( MainWindow parent)

Definition at line 41 of file WelcomeView.cpp.

42  : m_mainWindow(parent)
43  , m_newProjectButton(nullptr)
44  , m_openProjectButton(nullptr)
45  , m_newUsertButton(nullptr)
46  , m_currentProjectLabel(nullptr)
47  , m_recentProjectLayout(nullptr)
49 {
50  QPalette palette;
51  palette.setColor(QPalette::Window, QColor(240, 240, 240, 255));
52  setAutoFillBackground(true);
53  setPalette(palette);
54 
55  auto centralWidgetLayout = new QVBoxLayout;
56  centralWidgetLayout->setMargin(0);
57  centralWidgetLayout->addWidget(createProjectWidget());
58  centralWidgetLayout->addWidget(m_notifierWidget);
59  centralWidgetLayout->addStretch(1);
60 
61  auto centralWidget = new QWidget;
62  centralWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
63  centralWidget->setObjectName("containerWidget");
64  centralWidget->setMaximumWidth(1200);
65  centralWidget->setContentsMargins(0, 30, 0, 0);
66  centralWidget->setStyleSheet(centralWidgetStyle);
67  centralWidget->setLayout(centralWidgetLayout);
68 
69  auto mainLayout = new QHBoxLayout;
70  mainLayout->setContentsMargins(0, 0, 0, 0);
71  mainLayout->addWidget(new QWidget);
72  mainLayout->addWidget(centralWidget);
73  mainLayout->addWidget(new QWidget);
74  setLayout(mainLayout);
75 
76  connect(m_newProjectButton, &QPushButton::clicked, projectManager(),
78  connect(m_openProjectButton, &QPushButton::clicked, [=]() { projectManager()->openProject(); });
79  connect(m_newUsertButton, &QPushButton::clicked, this, &WelcomeView::onNewUser);
80  connect(projectManager(), &ProjectManager::modified, this,
82 
84 }
UpdateNotifier * updateNotifier()
Definition: mainwindow.cpp:184
void openProject(QString fileName="")
Opens existing project. If fileName is empty, will popup file selection dialog.
void newProject()
Processes new project request (close old project, rise dialog for project name, create project).
Small on WelcomeView for notofications about updates.
QWidget * createProjectWidget()
QPushButton * m_openProjectButton
Definition: WelcomeView.h:59
void updateRecentProjectPanel()
ProjectManager * projectManager()
QPushButton * m_newProjectButton
Definition: WelcomeView.h:58
UpdateNotifierWidget * m_notifierWidget
Definition: WelcomeView.h:63
FancyLabel * m_currentProjectLabel
Definition: WelcomeView.h:61
MainWindow * m_mainWindow
Definition: WelcomeView.h:57
void onNewUser()
QVBoxLayout * m_recentProjectLayout
Definition: WelcomeView.h:62
QPushButton * m_newUsertButton
Definition: WelcomeView.h:60

References createProjectWidget(), m_newProjectButton, m_newUsertButton, m_notifierWidget, m_openProjectButton, ProjectManager::modified(), ProjectManager::newProject(), onNewUser(), ProjectManager::openProject(), projectManager(), and updateRecentProjectPanel().

Here is the call graph for this function:

Member Function Documentation

◆ createButtonLayout()

QBoxLayout * WelcomeView::createButtonLayout ( )
private

Definition at line 171 of file WelcomeView.cpp.

172 {
173  m_newProjectButton = new QPushButton("New Project");
174  m_newProjectButton->setMinimumWidth(buttonWidth);
175  m_newProjectButton->setMinimumHeight(buttonHeight);
176  m_newProjectButton->setToolTip("Create new project");
177  m_newProjectButton->setAttribute(Qt::WA_MacShowFocusRect, false);
178 
179  m_openProjectButton = new QPushButton("Open Project");
180  m_openProjectButton->setMinimumWidth(buttonWidth);
181  m_openProjectButton->setMinimumHeight(buttonHeight);
182  m_openProjectButton->setToolTip("Open existing project");
183 
184  m_newUsertButton = new QPushButton("Website");
185  m_newUsertButton->setMinimumWidth(buttonWidth);
186  m_newUsertButton->setMinimumHeight(buttonHeight);
187  m_newUsertButton->setToolTip("Open BornAgain web site");
188 
189  auto buttonLayout = new QVBoxLayout;
190  buttonLayout->addWidget(m_newProjectButton);
191  buttonLayout->addWidget(m_openProjectButton);
192  buttonLayout->addStretch(1);
193  buttonLayout->addWidget(m_newUsertButton);
194 
195  auto result = new QHBoxLayout;
196  result->setContentsMargins(30, 0, 30, 0);
197  result->addLayout(buttonLayout);
198 
199  return result;
200 }

References m_newProjectButton, m_newUsertButton, and m_openProjectButton.

Referenced by createProjectWidget().

◆ createCurrentProjectLayout()

QBoxLayout * WelcomeView::createCurrentProjectLayout ( )
private

Definition at line 202 of file WelcomeView.cpp.

203 {
204  auto result = new QVBoxLayout;
205  result->setContentsMargins(30, 0, 0, 0);
206 
207  auto label = new QLabel("Current Project:");
208  label->setFont(StyleUtils::sectionFont());
209 
210  m_currentProjectLabel = new FancyLabel("Untitled");
211  result->addWidget(label);
212  result->addWidget(m_currentProjectLabel);
213 
214  return result;
215 }
The FancyLabel class is a QLabel-like class with trivial animation when text slowly appears on the sc...
Definition: FancyLabel.h:23
QFont sectionFont(bool bold=false)
Returns font for sections.
Definition: StyleUtils.cpp:69

References m_currentProjectLabel, and StyleUtils::sectionFont().

Referenced by createProjectLayout().

Here is the call graph for this function:

◆ createNotificationLabel()

QLabel* WelcomeView::createNotificationLabel ( )
private

◆ createProjectLayout()

QBoxLayout * WelcomeView::createProjectLayout ( )
private

Definition at line 224 of file WelcomeView.cpp.

225 {
226  auto result = new QVBoxLayout;
227  result->addLayout(createCurrentProjectLayout());
228  result->addSpacing(15);
229  result->addLayout(createRecentProjectLayout());
230  return result;
231 }
QBoxLayout * createRecentProjectLayout()
QBoxLayout * createCurrentProjectLayout()

References createCurrentProjectLayout(), and createRecentProjectLayout().

Referenced by createProjectWidget().

Here is the call graph for this function:

◆ createProjectWidget()

QWidget * WelcomeView::createProjectWidget ( )
private

Definition at line 156 of file WelcomeView.cpp.

157 {
158  auto layout = new QHBoxLayout;
159  layout->addLayout(createButtonLayout());
160  layout->addWidget(createSeparationFrame());
161  layout->addLayout(createProjectLayout());
162  layout->addStretch(1);
163 
164  auto result = new QWidget;
165  result->setLayout(layout);
166  result->setFixedHeight(430);
167 
168  return result;
169 }
QBoxLayout * createProjectLayout()
QBoxLayout * createButtonLayout()
QFrame * createSeparationFrame()

References createButtonLayout(), createProjectLayout(), and createSeparationFrame().

Referenced by WelcomeView().

Here is the call graph for this function:

◆ createRecentProjectLayout()

QBoxLayout * WelcomeView::createRecentProjectLayout ( )
private

Definition at line 217 of file WelcomeView.cpp.

218 {
219  m_recentProjectLayout = new QVBoxLayout;
220  m_recentProjectLayout->setContentsMargins(30, 0, 0, 0);
221  return m_recentProjectLayout;
222 }

References m_recentProjectLayout.

Referenced by createProjectLayout().

◆ createSeparationFrame()

QFrame * WelcomeView::createSeparationFrame ( )
private

Definition at line 233 of file WelcomeView.cpp.

234 {
235  auto result = new QFrame;
236  result->setFrameShape(QFrame::VLine);
237  result->setFrameShadow(QFrame::Sunken);
238  return result;
239 }

Referenced by createProjectWidget().

◆ currentProjectFancyName()

QString WelcomeView::currentProjectFancyName ( )
private

returns current project name suited for displaying on current project layout

Definition at line 110 of file WelcomeView.cpp.

111 {
112  QString result("Untitled");
113  if (auto projectDocument = projectManager()->document()) {
114  if (projectDocument->hasValidNameAndPath())
116  QDir::toNativeSeparators(projectDocument->projectFileName()));
117  else
118  result = projectDocument->projectName();
119  }
120  return result;
121 }
QString withTildeHomePath(const QString &path)

References projectManager(), and GUI_StringUtils::withTildeHomePath().

Referenced by generateRecentProjectList().

Here is the call graph for this function:

◆ generateRecentProjectList()

void WelcomeView::generateRecentProjectList ( )
private

Definition at line 86 of file WelcomeView.cpp.

87 {
88  auto recentProLabel = new QLabel("Recent Projects:");
89  recentProLabel->setFont(StyleUtils::sectionFont());
90 
92  m_recentProjectLayout->addWidget(recentProLabel);
93 
94  for (const auto& file : projectManager()->recentProjects()) {
95  QPalette palette;
96  palette.setColor(QPalette::ButtonText, QColor(41, 73, 150));
97 
98  auto button = new QCommandLinkButton;
99  button->setText(GUI_StringUtils::withTildeHomePath(QDir::toNativeSeparators(file)));
100  button->setFont(StyleUtils::labelFont());
101  button->setPalette(palette);
102  button->setFixedHeight(30);
103  connect(button, &QCommandLinkButton::clicked, [=] { projectManager()->openProject(file); });
104  m_recentProjectLayout->addWidget(button);
105  }
106  m_recentProjectLayout->addStretch();
107 }
QString currentProjectFancyName()
returns current project name suited for displaying on current project layout
void setCurrentProjectName(const QString &name)
updates label with current project name in picturesque manner
QFont labelFont(bool bold=false)
Returns font for labels.
Definition: StyleUtils.cpp:78

References currentProjectFancyName(), StyleUtils::labelFont(), m_recentProjectLayout, ProjectManager::openProject(), projectManager(), StyleUtils::sectionFont(), setCurrentProjectName(), and GUI_StringUtils::withTildeHomePath().

Referenced by updateRecentProjectPanel().

Here is the call graph for this function:

◆ onNewUser

void WelcomeView::onNewUser ( )
slot

Definition at line 139 of file WelcomeView.cpp.

140 {
141  QDesktopServices::openUrl(QUrl("http://www.bornagainproject.org"));
142 }

Referenced by WelcomeView().

◆ onWebLinkClicked

void WelcomeView::onWebLinkClicked ( const QUrl &  url)
slot

Definition at line 134 of file WelcomeView.cpp.

135 {
136  QDesktopServices::openUrl(url);
137 }

◆ projectManager()

ProjectManager * WelcomeView::projectManager ( )
private

Definition at line 129 of file WelcomeView.cpp.

130 {
131  return m_mainWindow->projectManager();
132 }
ProjectManager * projectManager()
Definition: mainwindow.cpp:179

References m_mainWindow, and MainWindow::projectManager().

Referenced by WelcomeView(), currentProjectFancyName(), and generateRecentProjectList().

Here is the call graph for this function:

◆ setCurrentProjectName()

void WelcomeView::setCurrentProjectName ( const QString &  name)
private

updates label with current project name in picturesque manner

Definition at line 124 of file WelcomeView.cpp.

125 {
127 }
void setTextAnimated(const QString &animated_text)
Definition: FancyLabel.cpp:28
QString const & name(EShape k)
Definition: particles.cpp:21

References m_currentProjectLabel, RealSpace::Particles::name(), and FancyLabel::setTextAnimated().

Referenced by generateRecentProjectList().

Here is the call graph for this function:

◆ showEvent()

void WelcomeView::showEvent ( QShowEvent *  )
protected

Definition at line 151 of file WelcomeView.cpp.

152 {
154 }

References updateRecentProjectPanel().

Here is the call graph for this function:

◆ updateRecentProjectPanel

void WelcomeView::updateRecentProjectPanel ( )
slot

Definition at line 144 of file WelcomeView.cpp.

145 {
148  update();
149 }
void generateRecentProjectList()
Definition: WelcomeView.cpp:86
void clearLayout(QLayout *layout, bool deleteWidgets=true)
Removes content from box layout.
Definition: LayoutUtils.cpp:21

References LayoutUtils::clearLayout(), generateRecentProjectList(), and m_recentProjectLayout.

Referenced by WelcomeView(), and showEvent().

Here is the call graph for this function:

Member Data Documentation

◆ m_currentProjectLabel

FancyLabel* WelcomeView::m_currentProjectLabel
private

Definition at line 61 of file WelcomeView.h.

Referenced by createCurrentProjectLayout(), and setCurrentProjectName().

◆ m_mainWindow

MainWindow* WelcomeView::m_mainWindow
private

Definition at line 57 of file WelcomeView.h.

Referenced by projectManager().

◆ m_newProjectButton

QPushButton* WelcomeView::m_newProjectButton
private

Definition at line 58 of file WelcomeView.h.

Referenced by WelcomeView(), and createButtonLayout().

◆ m_newUsertButton

QPushButton* WelcomeView::m_newUsertButton
private

Definition at line 60 of file WelcomeView.h.

Referenced by WelcomeView(), and createButtonLayout().

◆ m_notifierWidget

UpdateNotifierWidget* WelcomeView::m_notifierWidget
private

Definition at line 63 of file WelcomeView.h.

Referenced by WelcomeView().

◆ m_openProjectButton

QPushButton* WelcomeView::m_openProjectButton
private

Definition at line 59 of file WelcomeView.h.

Referenced by WelcomeView(), and createButtonLayout().

◆ m_recentProjectLayout

QVBoxLayout* WelcomeView::m_recentProjectLayout
private

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