diff --git a/CMakeLists.txt b/CMakeLists.txt index aa30260..822208f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ qt_standard_project_setup() add_executable(CrabCrawler src/main.cpp + src/ui/navbar.cpp ) target_link_libraries(CrabCrawler diff --git a/src/main.cpp b/src/main.cpp index 78a9c4b..ca286c5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,8 +1,29 @@ #include +#include +#include +#include + +#include "ui/navbar.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); + QWidget window; + window.resize(800, 500); + + auto *layout = new QVBoxLayout(&window); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + + auto *navBar = new NavBar(&window); + layout->addWidget(navBar); + layout->addStretch(); + + QObject::connect(navBar, &NavBar::addressEntered, [](const QString &text) { + qDebug() << "navigate to:" << text; + }); + + window.show(); return app.exec(); } diff --git a/src/ui/navbar.cpp b/src/ui/navbar.cpp new file mode 100644 index 0000000..9e2869d --- /dev/null +++ b/src/ui/navbar.cpp @@ -0,0 +1,48 @@ +#include "navbar.h" + +#include +#include +#include +#include + +NavBar::NavBar(QWidget *parent) + : QWidget(parent) +{ + auto *layout = new QHBoxLayout(this); + layout->setContentsMargins(6, 6, 6, 6); + layout->setSpacing(6); + + m_back = new QToolButton(this); + m_back->setIcon(style()->standardIcon(QStyle::SP_ArrowBack)); + m_back->setAutoRaise(true); + + m_forward = new QToolButton(this); + m_forward->setIcon(style()->standardIcon(QStyle::SP_ArrowForward)); + m_forward->setAutoRaise(true); + + m_refresh = new QToolButton(this); + m_refresh->setIcon(style()->standardIcon(QStyle::SP_BrowserReload)); + m_refresh->setAutoRaise(true); + + m_address = new QLineEdit(this); + m_address->setPlaceholderText("Enter a URL"); + m_address->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + + layout->addWidget(m_back); + layout->addWidget(m_forward); + layout->addWidget(m_refresh); + layout->addWidget(m_address); + + connect(m_back, &QToolButton::clicked, this, &NavBar::backClicked); + connect(m_forward, &QToolButton::clicked, this, &NavBar::forwardClicked); + connect(m_refresh, &QToolButton::clicked, this, &NavBar::refreshClicked); + + connect(m_address, &QLineEdit::returnPressed, this, [this] { + emit addressEntered(m_address->text()); + }); +} + +QLineEdit *NavBar::addressBar() const +{ + return m_address; +} diff --git a/src/ui/navbar.h b/src/ui/navbar.h new file mode 100644 index 0000000..e85bcb1 --- /dev/null +++ b/src/ui/navbar.h @@ -0,0 +1,28 @@ +#pragma once + +#include + +class QToolButton; +class QLineEdit; + +class NavBar : public QWidget +{ + Q_OBJECT + +public: + explicit NavBar(QWidget *parent = nullptr); + + QLineEdit *addressBar() const; + +signals: + void backClicked(); + void forwardClicked(); + void refreshClicked(); + void addressEntered(const QString &text); + +private: + QToolButton *m_back; + QToolButton *m_forward; + QToolButton *m_refresh; + QLineEdit *m_address; +};