mirror of https://github.com/YGGverse/Yoda.git
yggverse
4 months ago
28 changed files with 51 additions and 1414 deletions
@ -1,82 +1,15 @@ |
|||||||
#include "browser.h" |
#include "browser.h" |
||||||
|
|
||||||
namespace app |
using namespace app; |
||||||
{ |
|
||||||
// Construct
|
|
||||||
Browser::Browser( |
|
||||||
GtkApplication *application |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->app = application; |
|
||||||
|
|
||||||
// Init GTK
|
|
||||||
this->gtk = gtk_application_window_new( |
|
||||||
GTK_APPLICATION( |
|
||||||
this->app |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
gtk_window_set_default_size( |
|
||||||
GTK_WINDOW( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
Browser::WIDTH, |
|
||||||
Browser::HEIGHT |
|
||||||
); |
|
||||||
|
|
||||||
// Init header
|
|
||||||
this->header = new browser::Header( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
gtk_window_set_titlebar( |
Browser::Browser() |
||||||
GTK_WINDOW( |
{ |
||||||
this->gtk |
set_title( |
||||||
), |
TITLE |
||||||
GTK_WIDGET( |
|
||||||
this->header->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Init container
|
|
||||||
this->container = new browser::Container( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
gtk_window_set_child( |
|
||||||
GTK_WINDOW( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
GTK_WIDGET( |
|
||||||
this->container->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Render
|
|
||||||
gtk_widget_show( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
) |
|
||||||
); |
); |
||||||
|
|
||||||
// Connect signals
|
set_default_size( |
||||||
g_signal_connect( |
WIDTH, |
||||||
G_APPLICATION( |
HEIGHT |
||||||
this->app |
|
||||||
), |
|
||||||
"shutdown", |
|
||||||
G_CALLBACK( |
|
||||||
_shutdown |
|
||||||
), |
|
||||||
NULL |
|
||||||
); |
); |
||||||
} |
|
||||||
|
|
||||||
// Events
|
|
||||||
void Browser::_shutdown( |
|
||||||
GtkApplication *application |
|
||||||
) { |
|
||||||
// @TODO save session, clean cache, etc
|
|
||||||
g_print("Shutdown..\n"); |
|
||||||
} |
|
||||||
} |
} |
@ -1,53 +1,32 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_H |
#ifndef APP_BROWSER_H |
||||||
#define APP_BROWSER_H |
#define APP_BROWSER_H |
||||||
|
|
||||||
// Dependencies
|
#include <gtkmm/window.h> |
||||||
#include "../main.h" |
#include <gtkmm/headerbar.h> |
||||||
|
#include <gtkmm/notebook.h> |
||||||
// Requirements
|
|
||||||
#include "browser/header.h" |
|
||||||
#include "browser/container.h" |
|
||||||
|
|
||||||
namespace app |
namespace app |
||||||
{ |
{ |
||||||
namespace browser |
class Browser : public Gtk::Window |
||||||
{ |
|
||||||
class Header; |
|
||||||
class Container; |
|
||||||
} |
|
||||||
|
|
||||||
class Browser |
|
||||||
{ |
{ |
||||||
public: |
public: |
||||||
|
|
||||||
// GTK
|
const char* TITLE = "Basic application"; |
||||||
GtkWidget *gtk; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
GtkApplication *app; |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
browser::Header *header; |
|
||||||
browser::Container *container; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const guint WIDTH = 640; |
const guint WIDTH = 640; |
||||||
const guint HEIGHT = 480; |
const guint HEIGHT = 480; |
||||||
|
|
||||||
// Constructor
|
Browser(); |
||||||
Browser( |
|
||||||
GtkApplication *application |
|
||||||
); |
|
||||||
|
|
||||||
private: |
class Header : Gtk::HeaderBar |
||||||
|
{ |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
// Events
|
class Container : Gtk::Notebook |
||||||
static void _shutdown( |
{ |
||||||
GtkApplication *application |
|
||||||
); |
}; |
||||||
}; |
}; |
||||||
}; |
} |
||||||
|
|
||||||
#endif |
#endif // APP_BROWSER_H
|
@ -1,46 +0,0 @@ |
|||||||
#include "container.h" |
|
||||||
|
|
||||||
namespace app |
|
||||||
{ |
|
||||||
namespace browser |
|
||||||
{ |
|
||||||
// Construct
|
|
||||||
Container::Container( |
|
||||||
Browser *browser |
|
||||||
) { |
|
||||||
// Init GTK
|
|
||||||
this->gtk = gtk_box_new( |
|
||||||
GTK_ORIENTATION_VERTICAL, |
|
||||||
Container::SPACING |
|
||||||
); |
|
||||||
|
|
||||||
// Init tabs component
|
|
||||||
this->tab = new container::Tab( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
gtk_box_append( |
|
||||||
GTK_BOX( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
GTK_WIDGET( |
|
||||||
this->tab->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// @TODO append testing tab
|
|
||||||
this->tab->append( |
|
||||||
NULL, |
|
||||||
false, |
|
||||||
true |
|
||||||
); |
|
||||||
|
|
||||||
// Render
|
|
||||||
gtk_widget_show( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,43 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_CONTAINER_H |
|
||||||
#define APP_BROWSER_CONTAINER_H |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
#include "../browser.h" |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
#include "container/tab.h" |
|
||||||
|
|
||||||
namespace app |
|
||||||
{ |
|
||||||
class Browser; |
|
||||||
|
|
||||||
namespace browser |
|
||||||
{ |
|
||||||
namespace container |
|
||||||
{ |
|
||||||
class Tab; |
|
||||||
} |
|
||||||
|
|
||||||
class Container |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GtkWidget *gtk; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const gint SPACING = 0; |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
container::Tab *tab; |
|
||||||
|
|
||||||
Container( |
|
||||||
Browser *browser |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,49 +0,0 @@ |
|||||||
#include "page.h" |
|
||||||
|
|
||||||
namespace app |
|
||||||
{ |
|
||||||
namespace browser |
|
||||||
{ |
|
||||||
namespace container |
|
||||||
{ |
|
||||||
/**
|
|
||||||
* Construct |
|
||||||
*/ |
|
||||||
Page::Page( |
|
||||||
Container *container |
|
||||||
) { |
|
||||||
// Init GTK
|
|
||||||
this->gtk = gtk_box_new( |
|
||||||
GTK_ORIENTATION_VERTICAL, |
|
||||||
Page::SPACING |
|
||||||
); |
|
||||||
|
|
||||||
gtk_widget_show( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
/**
|
|
||||||
* Init empty page |
|
||||||
*/ |
|
||||||
void Page::init( |
|
||||||
char *request, |
|
||||||
bool focus |
|
||||||
) { |
|
||||||
// @TODO
|
|
||||||
} |
|
||||||
|
|
||||||
/**
|
|
||||||
* Open page request |
|
||||||
*/ |
|
||||||
void Page::open( |
|
||||||
char *request, |
|
||||||
bool history |
|
||||||
) { |
|
||||||
// @TODO
|
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,42 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_CONTAINER_PAGE_H |
|
||||||
#define APP_BROWSER_CONTAINER_PAGE_H |
|
||||||
|
|
||||||
#include "../container.h" |
|
||||||
|
|
||||||
namespace app |
|
||||||
{ |
|
||||||
namespace browser |
|
||||||
{ |
|
||||||
class Container; |
|
||||||
|
|
||||||
namespace container |
|
||||||
{ |
|
||||||
class Page |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
GtkWidget *gtk; |
|
||||||
|
|
||||||
const gint SPACING = 0; |
|
||||||
|
|
||||||
Page( |
|
||||||
Container *container |
|
||||||
); |
|
||||||
|
|
||||||
void init( |
|
||||||
char *request, |
|
||||||
bool focus |
|
||||||
); |
|
||||||
|
|
||||||
void open( |
|
||||||
char *request, |
|
||||||
bool history |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,113 +0,0 @@ |
|||||||
#include "tab.h" |
|
||||||
|
|
||||||
namespace app |
|
||||||
{ |
|
||||||
namespace browser |
|
||||||
{ |
|
||||||
namespace container |
|
||||||
{ |
|
||||||
/**
|
|
||||||
* Construct |
|
||||||
*/ |
|
||||||
Tab::Tab( |
|
||||||
Container *container |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->container = container; |
|
||||||
|
|
||||||
// Init GTK
|
|
||||||
this->gtk = gtk_notebook_new(); |
|
||||||
|
|
||||||
gtk_notebook_set_scrollable( |
|
||||||
GTK_NOTEBOOK( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
Tab::SCROLLABLE |
|
||||||
); |
|
||||||
|
|
||||||
gtk_widget_show( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
/**
|
|
||||||
* Append new tab |
|
||||||
*/ |
|
||||||
void Tab::append( |
|
||||||
char *request, |
|
||||||
bool open = true, |
|
||||||
bool focus = true |
|
||||||
) { |
|
||||||
|
|
||||||
// Init new page
|
|
||||||
Page *page = new Page( |
|
||||||
this->container |
|
||||||
); |
|
||||||
|
|
||||||
gtk_notebook_append_page( |
|
||||||
GTK_NOTEBOOK( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
GTK_WIDGET( |
|
||||||
page->gtk |
|
||||||
), |
|
||||||
NULL // @TODO label
|
|
||||||
); |
|
||||||
|
|
||||||
gtk_notebook_set_tab_reorderable( |
|
||||||
GTK_NOTEBOOK( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
GTK_WIDGET( |
|
||||||
page->gtk |
|
||||||
), |
|
||||||
Tab::REORDERABLE |
|
||||||
); |
|
||||||
|
|
||||||
// Page open requested
|
|
||||||
if (open) |
|
||||||
{ |
|
||||||
page->open( |
|
||||||
request, |
|
||||||
false // history
|
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
else |
|
||||||
{ |
|
||||||
page->init( |
|
||||||
request, |
|
||||||
true // focus @TODO boolean empty(request)
|
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
// Focus requested
|
|
||||||
if (focus) |
|
||||||
{ |
|
||||||
gtk_notebook_set_current_page( |
|
||||||
GTK_NOTEBOOK( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
gtk_notebook_page_num( |
|
||||||
GTK_NOTEBOOK( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
GTK_WIDGET( |
|
||||||
page->gtk |
|
||||||
) |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
// Render
|
|
||||||
gtk_widget_show( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,50 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_CONTAINER_TAB_H |
|
||||||
#define APP_BROWSER_CONTAINER_TAB_H |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
#include "../container.h" |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
#include "page.h" |
|
||||||
|
|
||||||
namespace app |
|
||||||
{ |
|
||||||
namespace browser |
|
||||||
{ |
|
||||||
class Container; |
|
||||||
|
|
||||||
namespace container |
|
||||||
{ |
|
||||||
class Page; // @TODO not required here
|
|
||||||
|
|
||||||
class Tab |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GtkWidget *gtk; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const gboolean REORDERABLE = true; |
|
||||||
const gboolean SCROLLABLE = true; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
Container *container; |
|
||||||
|
|
||||||
Tab( |
|
||||||
Container *container |
|
||||||
); |
|
||||||
|
|
||||||
void append( |
|
||||||
char *request, |
|
||||||
bool open, |
|
||||||
bool focus |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,56 +0,0 @@ |
|||||||
#include "header.h" |
|
||||||
|
|
||||||
namespace app |
|
||||||
{ |
|
||||||
namespace browser |
|
||||||
{ |
|
||||||
// Construct
|
|
||||||
Header::Header( |
|
||||||
Browser *browser |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->browser = browser; |
|
||||||
|
|
||||||
// Init GTK
|
|
||||||
this->gtk = gtk_header_bar_new(); |
|
||||||
|
|
||||||
gtk_header_bar_set_show_title_buttons( |
|
||||||
GTK_HEADER_BAR( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
Header::SHOW_TITLE_BUTTONS |
|
||||||
); |
|
||||||
|
|
||||||
// Init menu element
|
|
||||||
this->menu = new header::Menu( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
gtk_header_bar_pack_start( |
|
||||||
GTK_HEADER_BAR( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
this->menu->gtk |
|
||||||
); |
|
||||||
|
|
||||||
// Init new tab element
|
|
||||||
this->tab = new header::Tab( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
gtk_header_bar_pack_start( |
|
||||||
GTK_HEADER_BAR( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
this->tab->gtk |
|
||||||
); |
|
||||||
|
|
||||||
// Render
|
|
||||||
gtk_widget_show( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,49 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_HEADER_H |
|
||||||
#define APP_BROWSER_HEADER_H |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
#include "../browser.h" |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
#include "header/menu.h" |
|
||||||
#include "header/tab.h" |
|
||||||
|
|
||||||
namespace app |
|
||||||
{ |
|
||||||
class Browser; |
|
||||||
|
|
||||||
namespace browser |
|
||||||
{ |
|
||||||
namespace header |
|
||||||
{ |
|
||||||
class Menu; |
|
||||||
class Tab; |
|
||||||
} |
|
||||||
|
|
||||||
class Header |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GtkWidget *gtk; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const gboolean SHOW_TITLE_BUTTONS = true; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
Browser *browser; |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
header::Menu *menu; |
|
||||||
header::Tab *tab; |
|
||||||
|
|
||||||
Header( |
|
||||||
Browser *browser |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,44 +0,0 @@ |
|||||||
#include "menu.h" |
|
||||||
|
|
||||||
namespace app::browser::header |
|
||||||
{ |
|
||||||
// Construct
|
|
||||||
Menu::Menu( |
|
||||||
Header *header |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->header = header; |
|
||||||
|
|
||||||
// Init GTK
|
|
||||||
this->gtk = gtk_menu_button_new(); |
|
||||||
|
|
||||||
gtk_widget_set_tooltip_text( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
Menu::TOOLTIP |
|
||||||
); |
|
||||||
|
|
||||||
// Init requirements
|
|
||||||
this->main = new menu::Main( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
// Init main popover
|
|
||||||
gtk_menu_button_set_popover( |
|
||||||
GTK_MENU_BUTTON( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
GTK_WIDGET( |
|
||||||
this->main->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Render
|
|
||||||
gtk_widget_show( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
@ -1,47 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_HEADER_MENU_H |
|
||||||
#define APP_BROWSER_HEADER_MENU_H |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
#include "../header.h" |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
#include "menu/main.h" |
|
||||||
|
|
||||||
namespace app::browser |
|
||||||
{ |
|
||||||
class Header; |
|
||||||
|
|
||||||
namespace header |
|
||||||
{ |
|
||||||
namespace menu |
|
||||||
{ |
|
||||||
class Main; |
|
||||||
} |
|
||||||
|
|
||||||
class Menu |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GtkWidget *gtk; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
Header *header; |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
menu::Main *main; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const gchar *TOOLTIP = "Menu"; |
|
||||||
|
|
||||||
// Constructor
|
|
||||||
Menu( |
|
||||||
Header *header |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,65 +0,0 @@ |
|||||||
#include "main.h" |
|
||||||
|
|
||||||
namespace app::browser::header::menu |
|
||||||
{ |
|
||||||
// Construct
|
|
||||||
Main::Main( |
|
||||||
Menu *menu |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->menu = menu; |
|
||||||
|
|
||||||
// Init model
|
|
||||||
this->model = g_menu_new(); |
|
||||||
|
|
||||||
// Init tab submenu
|
|
||||||
this->tab = new main::Tab( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
g_menu_append_submenu( |
|
||||||
G_MENU( |
|
||||||
this->model |
|
||||||
), |
|
||||||
this->tab->LABEL, |
|
||||||
G_MENU_MODEL( |
|
||||||
this->tab->model |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Init debug menu
|
|
||||||
this->debug = new main::Debug( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
g_menu_append_item( |
|
||||||
G_MENU( |
|
||||||
this->model |
|
||||||
), |
|
||||||
G_MENU_ITEM( |
|
||||||
this->debug->item |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Init quit menu
|
|
||||||
this->quit = new main::Quit( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
g_menu_append_item( |
|
||||||
G_MENU( |
|
||||||
this->model |
|
||||||
), |
|
||||||
G_MENU_ITEM( |
|
||||||
this->quit->item |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Create a new GtkPopoverMenu from the GMenuModel
|
|
||||||
this->gtk = gtk_popover_menu_new_from_model( |
|
||||||
G_MENU_MODEL( |
|
||||||
this->model |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
@ -1,53 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_HEADER_MENU_MAIN_H |
|
||||||
#define APP_BROWSER_HEADER_MENU_MAIN_H |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
#include "../menu.h" |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
#include "main/tab.h" |
|
||||||
#include "main/debug.h" |
|
||||||
#include "main/quit.h" |
|
||||||
|
|
||||||
namespace app::browser::header |
|
||||||
{ |
|
||||||
class Menu; |
|
||||||
|
|
||||||
namespace menu |
|
||||||
{ |
|
||||||
namespace main |
|
||||||
{ |
|
||||||
class Tab; |
|
||||||
class Debug; |
|
||||||
class Quit; |
|
||||||
}; |
|
||||||
|
|
||||||
class Main |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GtkWidget *gtk; |
|
||||||
|
|
||||||
// Gio
|
|
||||||
GMenu* model; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
Menu *menu; |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
main::Tab *tab; |
|
||||||
main::Debug *debug; |
|
||||||
main::Quit *quit; |
|
||||||
|
|
||||||
// Constructor
|
|
||||||
Main( |
|
||||||
Menu *menu |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,84 +0,0 @@ |
|||||||
#include "debug.h" |
|
||||||
|
|
||||||
namespace app::browser::header::menu::main |
|
||||||
{ |
|
||||||
// Construct
|
|
||||||
Debug::Debug( |
|
||||||
Main *main |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->main = main; |
|
||||||
|
|
||||||
// Init action object
|
|
||||||
this->action = g_simple_action_new( |
|
||||||
Debug::ACTION_ID, |
|
||||||
NULL |
|
||||||
); |
|
||||||
|
|
||||||
g_action_map_add_action( |
|
||||||
G_ACTION_MAP( |
|
||||||
this->main->menu->header->browser->app |
|
||||||
), |
|
||||||
G_ACTION( |
|
||||||
this->action |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Init action NS
|
|
||||||
gchar action[255]; |
|
||||||
|
|
||||||
g_snprintf( |
|
||||||
action, |
|
||||||
sizeof( |
|
||||||
action |
|
||||||
), |
|
||||||
Debug::ACTION_NS, |
|
||||||
Debug::ACTION_ID |
|
||||||
); |
|
||||||
|
|
||||||
// Init keyboard accelerators
|
|
||||||
// https://docs.gtk.org/gtk4/func.accelerator_parse.html
|
|
||||||
const gchar *accels[] = { |
|
||||||
Debug::ACCEL_1, // First accelerator
|
|
||||||
Debug::ACCEL_2, // Second accelerator
|
|
||||||
NULL |
|
||||||
}; |
|
||||||
|
|
||||||
gtk_application_set_accels_for_action( |
|
||||||
GTK_APPLICATION( |
|
||||||
this->main->menu->header->browser->app |
|
||||||
), |
|
||||||
action, |
|
||||||
accels |
|
||||||
); |
|
||||||
|
|
||||||
// Init menu item object
|
|
||||||
this->item = g_menu_item_new( |
|
||||||
Debug::LABEL, |
|
||||||
action |
|
||||||
); |
|
||||||
|
|
||||||
// Connect events
|
|
||||||
g_signal_connect( |
|
||||||
G_SIMPLE_ACTION( |
|
||||||
this->action |
|
||||||
), |
|
||||||
"activate", |
|
||||||
G_CALLBACK( |
|
||||||
Debug::_activate |
|
||||||
), |
|
||||||
NULL |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
// Events
|
|
||||||
void Debug::_activate( |
|
||||||
GSimpleAction* action, |
|
||||||
GVariant* parameter, |
|
||||||
gpointer user_data |
|
||||||
) { |
|
||||||
gtk_window_set_interactive_debugging( |
|
||||||
true |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
@ -1,52 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_HEADER_MENU_MAIN_DEBUG_H |
|
||||||
#define APP_BROWSER_HEADER_MENU_MAIN_DEBUG_H |
|
||||||
|
|
||||||
#include "../main.h" |
|
||||||
|
|
||||||
namespace app::browser::header::menu |
|
||||||
{ |
|
||||||
class Main; |
|
||||||
|
|
||||||
namespace main |
|
||||||
{ |
|
||||||
class Debug |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GMenuItem *item; |
|
||||||
|
|
||||||
GSimpleAction *action; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
Main *main; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const gchar *LABEL = "Debug"; |
|
||||||
|
|
||||||
const gchar *ACCEL_1 = "<Control><Shift>i"; |
|
||||||
const gchar *ACCEL_2 = "<Control><Shift>I"; |
|
||||||
|
|
||||||
const gchar *ACTION_NS = "app.%s"; |
|
||||||
const gchar *ACTION_ID = "browser.header.menu.main.debug.activate"; |
|
||||||
|
|
||||||
// Construct
|
|
||||||
Debug( |
|
||||||
Main *main |
|
||||||
); |
|
||||||
|
|
||||||
private: |
|
||||||
|
|
||||||
// Events
|
|
||||||
static void _activate( |
|
||||||
GSimpleAction* action, |
|
||||||
GVariant* parameter, |
|
||||||
gpointer user_data |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,88 +0,0 @@ |
|||||||
#include "quit.h" |
|
||||||
|
|
||||||
namespace app::browser::header::menu::main |
|
||||||
{ |
|
||||||
// Construct
|
|
||||||
Quit::Quit( |
|
||||||
Main *main |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->main = main; |
|
||||||
|
|
||||||
// Init action object
|
|
||||||
this->action = g_simple_action_new( |
|
||||||
Quit::ACTION_ID, |
|
||||||
NULL |
|
||||||
); |
|
||||||
|
|
||||||
g_action_map_add_action( |
|
||||||
G_ACTION_MAP( |
|
||||||
this->main->menu->header->browser->app |
|
||||||
), |
|
||||||
G_ACTION( |
|
||||||
this->action |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Init action NS
|
|
||||||
gchar action[255]; |
|
||||||
|
|
||||||
g_snprintf( |
|
||||||
action, |
|
||||||
sizeof( |
|
||||||
action |
|
||||||
), |
|
||||||
Quit::ACTION_NS, |
|
||||||
Quit::ACTION_ID |
|
||||||
); |
|
||||||
|
|
||||||
// Init keyboard accelerators
|
|
||||||
// https://docs.gtk.org/gtk4/func.accelerator_parse.html
|
|
||||||
const gchar *accels[] = { |
|
||||||
Quit::ACCEL_1, // First accelerator
|
|
||||||
Quit::ACCEL_2, // Second accelerator
|
|
||||||
NULL |
|
||||||
}; |
|
||||||
|
|
||||||
gtk_application_set_accels_for_action( |
|
||||||
GTK_APPLICATION( |
|
||||||
this->main->menu->header->browser->app |
|
||||||
), |
|
||||||
action, |
|
||||||
accels |
|
||||||
); |
|
||||||
|
|
||||||
// Init menu item object
|
|
||||||
this->item = g_menu_item_new( |
|
||||||
Quit::LABEL, |
|
||||||
action |
|
||||||
); |
|
||||||
|
|
||||||
// Connect events
|
|
||||||
g_signal_connect( |
|
||||||
G_SIMPLE_ACTION( |
|
||||||
this->action |
|
||||||
), |
|
||||||
"activate", |
|
||||||
G_CALLBACK( |
|
||||||
Quit::_activate |
|
||||||
), |
|
||||||
G_APPLICATION( |
|
||||||
this->main->menu->header->browser->app |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
// Events
|
|
||||||
void Quit::_activate( |
|
||||||
GSimpleAction* action, |
|
||||||
GVariant* parameter, |
|
||||||
gpointer user_data |
|
||||||
) { |
|
||||||
g_application_quit( |
|
||||||
G_APPLICATION( |
|
||||||
user_data |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
@ -1,52 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_HEADER_MENU_MAIN_QUIT_H |
|
||||||
#define APP_BROWSER_HEADER_MENU_MAIN_QUIT_H |
|
||||||
|
|
||||||
#include "../main.h" |
|
||||||
|
|
||||||
namespace app::browser::header::menu |
|
||||||
{ |
|
||||||
class Main; |
|
||||||
|
|
||||||
namespace main |
|
||||||
{ |
|
||||||
class Quit |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GMenuItem *item; |
|
||||||
|
|
||||||
GSimpleAction *action; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
Main *main; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const gchar *LABEL = "Quit"; |
|
||||||
|
|
||||||
const gchar *ACCEL_1 = "<Control>q"; |
|
||||||
const gchar *ACCEL_2 = "<Control>Q"; |
|
||||||
|
|
||||||
const gchar *ACTION_NS = "app.%s"; |
|
||||||
const gchar *ACTION_ID = "browser.header.menu.main.quit.activate"; |
|
||||||
|
|
||||||
// Construct
|
|
||||||
Quit( |
|
||||||
Main *main |
|
||||||
); |
|
||||||
|
|
||||||
private: |
|
||||||
|
|
||||||
// Events
|
|
||||||
static void _activate( |
|
||||||
GSimpleAction* action, |
|
||||||
GVariant* parameter, |
|
||||||
gpointer user_data |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,36 +0,0 @@ |
|||||||
#include "tab.h" |
|
||||||
|
|
||||||
namespace app::browser::header::menu::main |
|
||||||
{ |
|
||||||
// Construct
|
|
||||||
Tab::Tab( |
|
||||||
Main *main |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->main = main; |
|
||||||
|
|
||||||
// Init model
|
|
||||||
this->model = g_menu_new(); |
|
||||||
|
|
||||||
// Init new tab menu
|
|
||||||
this->append = new tab::Append( |
|
||||||
this |
|
||||||
); |
|
||||||
|
|
||||||
g_menu_append_item( |
|
||||||
G_MENU( |
|
||||||
this->model |
|
||||||
), |
|
||||||
G_MENU_ITEM( |
|
||||||
this->append->item |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Init menu
|
|
||||||
this->gtk = gtk_popover_menu_new_from_model( |
|
||||||
G_MENU_MODEL( |
|
||||||
this->model |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
@ -1,52 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_HEADER_MENU_MAIN_TAB_H |
|
||||||
#define APP_BROWSER_HEADER_MENU_MAIN_TAB_H |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
#include "../main.h" |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
#include "tab/append.h" |
|
||||||
|
|
||||||
namespace app::browser::header::menu |
|
||||||
{ |
|
||||||
class Main; |
|
||||||
|
|
||||||
namespace main |
|
||||||
{ |
|
||||||
namespace tab |
|
||||||
{ |
|
||||||
class Append; |
|
||||||
} |
|
||||||
|
|
||||||
class Tab |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GtkWidget *gtk; |
|
||||||
|
|
||||||
// Gio
|
|
||||||
GMenu* model; |
|
||||||
|
|
||||||
GMenuItem *item; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
Main *main; |
|
||||||
|
|
||||||
// Requirements
|
|
||||||
tab::Append *append; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const gchar *LABEL = "Tab"; |
|
||||||
|
|
||||||
// Construct
|
|
||||||
Tab( |
|
||||||
Main *main |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,84 +0,0 @@ |
|||||||
#include "append.h" |
|
||||||
|
|
||||||
namespace app::browser::header::menu::main::tab |
|
||||||
{ |
|
||||||
// Construct
|
|
||||||
Append::Append( |
|
||||||
Tab *tab |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->tab = tab; |
|
||||||
|
|
||||||
// Init action object
|
|
||||||
this->action = g_simple_action_new( |
|
||||||
Append::ACTION_ID, |
|
||||||
NULL |
|
||||||
); |
|
||||||
|
|
||||||
g_action_map_add_action( |
|
||||||
G_ACTION_MAP( |
|
||||||
this->tab->main->menu->header->browser->app |
|
||||||
), |
|
||||||
G_ACTION( |
|
||||||
this->action |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Init action NS
|
|
||||||
gchar action[255]; |
|
||||||
|
|
||||||
g_snprintf( |
|
||||||
action, |
|
||||||
sizeof( |
|
||||||
action |
|
||||||
), |
|
||||||
Append::ACTION_NS, |
|
||||||
Append::ACTION_ID |
|
||||||
); |
|
||||||
|
|
||||||
// Init keyboard accelerators
|
|
||||||
// https://docs.gtk.org/gtk4/func.accelerator_parse.html
|
|
||||||
const gchar *accels[] = { |
|
||||||
Append::ACCEL_1, // First accelerator
|
|
||||||
Append::ACCEL_2, // Second accelerator
|
|
||||||
NULL |
|
||||||
}; |
|
||||||
|
|
||||||
gtk_application_set_accels_for_action( |
|
||||||
GTK_APPLICATION( |
|
||||||
this->tab->main->menu->header->browser->app |
|
||||||
), |
|
||||||
action, |
|
||||||
accels |
|
||||||
); |
|
||||||
|
|
||||||
// Init menu item object
|
|
||||||
this->item = g_menu_item_new( |
|
||||||
Append::LABEL, |
|
||||||
action |
|
||||||
); |
|
||||||
|
|
||||||
// Connect events
|
|
||||||
g_signal_connect( |
|
||||||
G_SIMPLE_ACTION( |
|
||||||
this->action |
|
||||||
), |
|
||||||
"activate", |
|
||||||
G_CALLBACK( |
|
||||||
Append::_activate |
|
||||||
), |
|
||||||
G_APPLICATION( |
|
||||||
this->tab->main->menu->header->browser->app |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
// Events
|
|
||||||
void Append::_activate( |
|
||||||
GSimpleAction* action, |
|
||||||
GVariant* parameter, |
|
||||||
gpointer user_data |
|
||||||
) { |
|
||||||
// @TODO
|
|
||||||
} |
|
||||||
} |
|
@ -1,53 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_HEADER_MENU_MAIN_TAB_APPEND_H |
|
||||||
#define APP_BROWSER_HEADER_MENU_MAIN_TAB_APPEND_H |
|
||||||
|
|
||||||
#include "../tab.h" |
|
||||||
|
|
||||||
namespace app::browser::header::menu::main |
|
||||||
{ |
|
||||||
class Tab; |
|
||||||
|
|
||||||
namespace tab |
|
||||||
{ |
|
||||||
class Append |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GMenuItem *item; |
|
||||||
|
|
||||||
// Gio
|
|
||||||
GSimpleAction *action; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
Tab *tab; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const gchar *LABEL = "New tab"; |
|
||||||
|
|
||||||
const gchar *ACCEL_1 = "<Control>t"; |
|
||||||
const gchar *ACCEL_2 = "<Control>T"; |
|
||||||
|
|
||||||
const gchar *ACTION_NS = "app.%s"; |
|
||||||
const gchar *ACTION_ID = "browser.header.menu.main.tab.append.activate"; |
|
||||||
|
|
||||||
// Construct
|
|
||||||
Append( |
|
||||||
Tab *tab |
|
||||||
); |
|
||||||
|
|
||||||
private: |
|
||||||
|
|
||||||
// Events
|
|
||||||
static void _activate( |
|
||||||
GSimpleAction* action, |
|
||||||
GVariant* parameter, |
|
||||||
gpointer user_data |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,36 +0,0 @@ |
|||||||
#include "tab.h" |
|
||||||
|
|
||||||
namespace app::browser::header |
|
||||||
{ |
|
||||||
// Construct
|
|
||||||
Tab::Tab( |
|
||||||
Header *header |
|
||||||
) { |
|
||||||
// Init dependencies
|
|
||||||
this->header = header; |
|
||||||
|
|
||||||
// Init GTK
|
|
||||||
this->gtk = gtk_button_new(); |
|
||||||
|
|
||||||
gtk_button_set_icon_name( |
|
||||||
GTK_BUTTON( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
Tab::ICON |
|
||||||
); |
|
||||||
|
|
||||||
gtk_widget_set_tooltip_text( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
), |
|
||||||
Tab::TOOLTIP |
|
||||||
); |
|
||||||
|
|
||||||
// Render
|
|
||||||
gtk_widget_show( |
|
||||||
GTK_WIDGET( |
|
||||||
this->gtk |
|
||||||
) |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
@ -1,37 +0,0 @@ |
|||||||
#pragma once |
|
||||||
|
|
||||||
#ifndef APP_BROWSER_HEADER_TAB_H |
|
||||||
#define APP_BROWSER_HEADER_TAB_H |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
#include "../header.h" |
|
||||||
|
|
||||||
namespace app::browser |
|
||||||
{ |
|
||||||
class Header; |
|
||||||
|
|
||||||
namespace header |
|
||||||
{ |
|
||||||
class Tab |
|
||||||
{ |
|
||||||
public: |
|
||||||
|
|
||||||
// GTK
|
|
||||||
GtkWidget *gtk; |
|
||||||
|
|
||||||
// Dependencies
|
|
||||||
Header *header; |
|
||||||
|
|
||||||
// Defaults
|
|
||||||
const gchar *ICON = "tab-new-symbolic"; |
|
||||||
const gchar *TOOLTIP = "New tab"; |
|
||||||
|
|
||||||
// Constructor
|
|
||||||
Tab( |
|
||||||
Header *header |
|
||||||
); |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
#endif |
|
@ -1,52 +1,15 @@ |
|||||||
#include "main.h" |
#include "main.h" |
||||||
|
|
||||||
void activate( |
|
||||||
GtkApplication *application |
|
||||||
) { |
|
||||||
// Init default component
|
|
||||||
new app::Browser( |
|
||||||
application |
|
||||||
); |
|
||||||
} |
|
||||||
|
|
||||||
int main( |
int main( |
||||||
int argc, |
int argc, |
||||||
char *argv[] |
char* argv[] |
||||||
) { |
) { |
||||||
// Create a new application
|
auto app = Gtk::Application::create( |
||||||
GtkApplication *application = gtk_application_new( |
"Yoda" |
||||||
NULL, |
|
||||||
G_APPLICATION_DEFAULT_FLAGS |
|
||||||
); |
); |
||||||
|
|
||||||
// Connect events
|
return app->make_window_and_run<app::Browser>( |
||||||
g_signal_connect( |
|
||||||
G_APPLICATION( |
|
||||||
application |
|
||||||
), |
|
||||||
"activate", |
|
||||||
G_CALLBACK( |
|
||||||
activate |
|
||||||
), |
|
||||||
NULL |
|
||||||
); |
|
||||||
|
|
||||||
// Run the application
|
|
||||||
int status = g_application_run( |
|
||||||
G_APPLICATION( |
|
||||||
application |
|
||||||
), |
|
||||||
argc, |
argc, |
||||||
argv |
argv |
||||||
); |
); |
||||||
|
|
||||||
// Clean up
|
|
||||||
g_object_unref( |
|
||||||
G_APPLICATION( |
|
||||||
application |
|
||||||
) |
|
||||||
); |
|
||||||
|
|
||||||
// Result
|
|
||||||
return status; |
|
||||||
} |
} |
@ -1,15 +1,8 @@ |
|||||||
#pragma once |
#include <gtkmm/application.h> |
||||||
|
|
||||||
#include <iostream> |
|
||||||
#include <gtk/gtk.h> |
|
||||||
|
|
||||||
#include "app/browser.h" |
#include "app/browser.h" |
||||||
|
|
||||||
void static activate( |
|
||||||
GtkApplication *application |
|
||||||
); |
|
||||||
|
|
||||||
int main( |
int main( |
||||||
int argc, |
int argc, |
||||||
char *argv[] |
char* argv[] |
||||||
); |
); |
Loading…
Reference in new issue