/mainwindow.cpp

https://github.com/solenskiner/qwebapp · C++ · 88 lines · 65 code · 10 blank · 13 comment · 5 complexity · 40d6a97f14a73d58304cc3b56e089907 MD5 · raw file

  1. #include "mainwindow.hpp"
  2. #include <QAction>
  3. #include <QDesktopServices>
  4. /*
  5. some class to store... umm.. current web-app data:
  6. favicon, domain, name, cache, form data, cookies, passwords, html5 and database etc etc
  7. which is a view of the filesystem data for it
  8. ability to enumerate instantiations (on disk)
  9. model for QListView
  10. or something like that
  11. QSettings cfg(QSettings::IniFormat, QSettings::UserScope, "organization", "application");
  12. QString config_dir = QFileInfo(cfg.fileName()).absolutePath() + "/";
  13. might be interesting
  14. */
  15. #define VIEW_MAIN 0
  16. #define VIEW_HIDDEN 1
  17. MainWindow::MainWindow(QUrl url) {
  18. site = new QUrl(url);
  19. for (int i = 0; i < 2; i++) {
  20. view [i]= new QWebView(this);
  21. set_data_paths(view[i]);
  22. }
  23. setCentralWidget(view[0]);
  24. view[VIEW_HIDDEN]->setVisible (0);
  25. view[VIEW_MAIN]->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
  26. connect(view[VIEW_MAIN], SIGNAL(linkClicked(const QUrl&)), this, SLOT(handle_link(const QUrl&)));
  27. connect(view[VIEW_HIDDEN], SIGNAL(urlChanged(const QUrl&)), this, SLOT(handle_redirect(const QUrl&)));
  28. connect(view[VIEW_HIDDEN], SIGNAL(loadFinished(bool)), this, SLOT(handle_loaded(bool)));
  29. view[VIEW_MAIN]->load(url);
  30. view[VIEW_MAIN]->show();
  31. }
  32. void MainWindow::handle_redirect(const QUrl &url) {
  33. if (site->host() != url.host()) {
  34. view[VIEW_HIDDEN]->stop();
  35. QDesktopServices::openUrl(url);
  36. }
  37. }
  38. void MainWindow::handle_link(const QUrl &url) {
  39. if (site->host() == url.host())
  40. view[VIEW_MAIN]->load(url);
  41. else
  42. QDesktopServices::openUrl(url);
  43. //
  44. }
  45. void MainWindow::handle_loaded(bool loaded) {
  46. view[VIEW_MAIN]->setPage(view[VIEW_HIDDEN]->page());
  47. }
  48. void MainWindow::set_data_paths(QWebView* view) {
  49. view->settings()->setIconDatabasePath(QDesktopServices::DataLocation + QDir::separator() +
  50. QCoreApplication::applicationName() + QDir::separator() +
  51. site->toString() + QDir::separator() +
  52. "IconDatabase"
  53. );
  54. view->settings()->setLocalStoragePath(QDesktopServices::DataLocation + QDir::separator() +
  55. QCoreApplication::applicationName() + QDir::separator() +
  56. site->toString() + QDir::separator() +
  57. "LocalStorage"
  58. );
  59. view->settings()->setOfflineStoragePath(QDesktopServices::DataLocation + QDir::separator() +
  60. QCoreApplication::applicationName() + QDir::separator() +
  61. site->toString() + QDir::separator() +
  62. "OfflineStorage"
  63. );
  64. view->settings()->setOfflineWebApplicationCachePath(QDesktopServices::DataLocation + QDir::separator() +
  65. QCoreApplication::applicationName() + QDir::separator() +
  66. site->toString() + QDir::separator() +
  67. "OfflineWebApplicationCache"
  68. );
  69. }
  70. MainWindow::~MainWindow() {
  71. disconnect(view[VIEW_MAIN], SIGNAL(linkClicked(const QUrl&)), this, SLOT(handle_link(const QUrl&)));
  72. disconnect(view[VIEW_HIDDEN], SIGNAL(urlChanged(const QUrl&)), this, SLOT(handle_redirect(const QUrl&)));
  73. disconnect(view[VIEW_HIDDEN], SIGNAL(loadFinished(bool)), this, SLOT(handle_loaded(bool)));
  74. delete site;
  75. delete view[VIEW_MAIN];
  76. delete view[VIEW_HIDDEN];
  77. }