Browse Source

remake tab session api

CPP-GTK4
yggverse 2 months ago
parent
commit
7e8aaef1c5
  1. 5
      src/app/browser/main.cpp
  2. 63
      src/app/browser/main/tab.cpp
  3. 17
      src/app/browser/main/tab.hpp
  4. 20
      src/app/browser/main/tab/page.cpp
  5. 48
      src/app/browser/main/tab/page.hpp

5
src/app/browser/main.cpp

@ -47,8 +47,9 @@ void Main::refresh()
void Main::tab_append() void Main::tab_append()
{ {
mainTab->set_current_page( mainTab->append(
mainTab->append() _("New tab"),
true
); );
}; };

63
src/app/browser/main/tab.cpp

@ -23,11 +23,11 @@ Tab::Tab(
R"SQL( R"SQL(
CREATE TABLE IF NOT EXISTS `app_browser_main_tab__session` CREATE TABLE IF NOT EXISTS `app_browser_main_tab__session`
( (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`time` INTEGER NOT NULL, `time` INTEGER NOT NULL,
`number` INTEGER NOT NULL, `page_number` INTEGER NOT NULL,
`current` INTEGER NOT NULL, `is_current` INTEGER NOT NULL,
`request` VARCHAR(1024) `label_text` VARCHAR(1024)
) )
)SQL", )SQL",
nullptr, nullptr,
@ -73,7 +73,7 @@ int Tab::restore()
const int PREPARE_STATUS = ::sqlite3_prepare_v3( const int PREPARE_STATUS = ::sqlite3_prepare_v3(
this->db, this->db,
R"SQL( R"SQL(
SELECT * FROM `app_browser_main_tab__session` ORDER BY `number` ASC SELECT * FROM `app_browser_main_tab__session` ORDER BY `page_number` ASC
)SQL", )SQL",
-1, -1,
SQLITE_PREPARE_NORMALIZE, SQLITE_PREPARE_NORMALIZE,
@ -87,25 +87,18 @@ int Tab::restore()
while (::sqlite3_step(statement) == SQLITE_ROW) while (::sqlite3_step(statement) == SQLITE_ROW)
{ {
const int PAGE_NUMBER = append(); const int PAGE_NUMBER = append(
get_tabPage(
PAGE_NUMBER
)->set_navbar_request_text(
reinterpret_cast<const char*>( reinterpret_cast<const char*>(
::sqlite3_column_text( ::sqlite3_column_text(
statement, statement,
DB::APP_BROWSER_MAIN_TAB__SESSION::REQUEST DB::APP_BROWSER_MAIN_TAB__SESSION::LABEL_TEXT
) )
) ),
::sqlite3_column_int(
statement,
DB::APP_BROWSER_MAIN_TAB__SESSION::IS_CURRENT
) == 1
); );
if (::sqlite3_column_int(statement, DB::APP_BROWSER_MAIN_TAB__SESSION::CURRENT) == 1)
{
set_current_page(
PAGE_NUMBER
);
}
} }
} }
@ -136,7 +129,7 @@ int Tab::save()
// Save current tab session // Save current tab session
for (int page_number = 0; page_number < get_n_pages(); page_number++) for (int page_number = 0; page_number < get_n_pages(); page_number++)
{ {
auto tabPage = get_tabPage( auto tabLabel = get_tabLabel(
page_number page_number
); );
@ -146,9 +139,9 @@ int Tab::save()
R"SQL( R"SQL(
INSERT INTO `app_browser_main_tab__session` ( INSERT INTO `app_browser_main_tab__session` (
`time`, `time`,
`number`, `page_number`,
`current`, `is_current`,
`request` `label_text`
) VALUES ( ) VALUES (
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP,
'%d', '%d',
@ -158,7 +151,7 @@ int Tab::save()
)SQL", )SQL",
page_number, page_number,
page_number == get_current_page() ? 1 : 0, page_number == get_current_page() ? 1 : 0,
tabPage->get_navigation_request_text() tabLabel->get_text()
).c_str(), ).c_str(),
nullptr, nullptr,
nullptr, nullptr,
@ -195,16 +188,23 @@ void Tab::refresh(
); );
} }
int Tab::append() int Tab::append(
{ const Glib::ustring & LABEL_TEXT,
const bool & IS_CURRENT
) {
const auto TAB_PAGE = new tab::Page( const auto TAB_PAGE = new tab::Page(
tab::Page::MIME::UNDEFINED,
LABEL_TEXT,
"", // @TODO restore feature
action__refresh, action__refresh,
action__tab_page_navigation_history_back, action__tab_page_navigation_history_back,
action__tab_page_navigation_history_forward, action__tab_page_navigation_history_forward,
action__tab_page_navigation_update action__tab_page_navigation_update
); );
const auto TAB_LABEL = new tab::Label( const auto TAB_LABEL = new tab::Label( // @TODO managed
action__tab_close_active action__tab_close_active
); );
@ -218,6 +218,13 @@ int Tab::append()
REORDERABLE REORDERABLE
); );
if (IS_CURRENT)
{
set_current_page(
PAGE_NUMBER
);
}
refresh( refresh(
PAGE_NUMBER PAGE_NUMBER
); );

17
src/app/browser/main/tab.hpp

@ -27,9 +27,9 @@ namespace app::browser::main
{ {
ID, ID,
TIME, TIME,
NUMBER, PAGE_NUMBER,
CURRENT, IS_CURRENT,
REQUEST LABEL_TEXT
}; };
}; };
@ -67,12 +67,11 @@ namespace app::browser::main
); );
// Actions // Actions
void refresh( int append(
const int & PAGE_NUMBER const Glib::ustring & LABEL_TEXT,
const bool & IS_CURRENT
); );
int append();
void close( void close(
const int & PAGE_NUMBER const int & PAGE_NUMBER
); );
@ -94,6 +93,10 @@ namespace app::browser::main
const int & PAGE_NUMBER const int & PAGE_NUMBER
); );
void refresh(
const int & PAGE_NUMBER
);
int restore(); int restore();
int save(); int save();

20
src/app/browser/main/tab/page.cpp

@ -5,11 +5,20 @@
using namespace app::browser::main::tab; using namespace app::browser::main::tab;
Page::Page( Page::Page(
const MIME & MIME,
const Glib::ustring & TITLE,
const Glib::ustring & DESCRIPTION,
const Glib::RefPtr<Gio::SimpleAction> & ACTION__REFRESH, const Glib::RefPtr<Gio::SimpleAction> & ACTION__REFRESH,
const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_HISTORY_BACK, const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_HISTORY_BACK,
const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_HISTORY_FORWARD, const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_HISTORY_FORWARD,
const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_UPDATE const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_UPDATE
) { ) {
// Init meta
mime = MIME;
title = TITLE;
description = DESCRIPTION;
progress_fraction = 0;
// Init actions // Init actions
action__refresh = ACTION__REFRESH; action__refresh = ACTION__REFRESH;
@ -40,13 +49,8 @@ Page::Page(
signal_realize().connect( signal_realize().connect(
[this] [this]
{ {
// Make initial data setup // Refresh parent window
update( action__refresh->activate();
MIME::UNDEFINED,
_("New page"),
"",
0
);
} }
); );
} }
@ -60,7 +64,7 @@ void Page::refresh()
} }
void Page::update( void Page::update(
const MIME & MIME, const enum MIME & MIME,
const Glib::ustring & TITLE, const Glib::ustring & TITLE,
const Glib::ustring & DESCRIPTION, const Glib::ustring & DESCRIPTION,
const double & PROGRESS_FRACTION const double & PROGRESS_FRACTION

48
src/app/browser/main/tab/page.hpp

@ -25,36 +25,42 @@ namespace app::browser::main::tab
class Page : public Gtk::Box class Page : public Gtk::Box
{ {
// Extras public:
enum class MIME
{ enum class MIME
TEXT_PLAIN, {
TEXT_GEMINI, TEXT_PLAIN,
UNDEFINED TEXT_GEMINI,
}; UNDEFINED
};
// Data private:
MIME mime;
Glib::ustring title;
Glib::ustring description;
double progress_fraction;
// Actions // Meta
Glib::RefPtr<Gio::SimpleAction> action__refresh; MIME mime;
Glib::ustring title;
Glib::ustring description;
double progress_fraction;
// Actions
Glib::RefPtr<Gio::SimpleAction> action__refresh;
// Socket // Socket
char buffer[0xfffff]; // 1Mb char buffer[0xfffff]; // 1Mb
Glib::RefPtr<Gio::SocketClient> GioSocketClient; Glib::RefPtr<Gio::SocketClient> GioSocketClient;
Glib::RefPtr<Gio::SocketConnection> GioSocketConnection; Glib::RefPtr<Gio::SocketConnection> GioSocketConnection;
// Components // Components
page::Content * pageContent; page::Content * pageContent;
page::Navigation * pageNavigation; page::Navigation * pageNavigation;
public: public:
Page( Page(
const MIME & MIME,
const Glib::ustring & TITLE,
const Glib::ustring & DESCRIPTION,
const Glib::RefPtr<Gio::SimpleAction> & ACTION__REFRESH, const Glib::RefPtr<Gio::SimpleAction> & ACTION__REFRESH,
const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_HISTORY_BACK, const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_HISTORY_BACK,
const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_HISTORY_FORWARD, const Glib::RefPtr<Gio::SimpleAction> & ACTION__PAGE_NAVIGATION_HISTORY_FORWARD,

Loading…
Cancel
Save