mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-01-14 00:38:06 +00:00
implement label title object storage
This commit is contained in:
parent
a9d7e59534
commit
d66692a42a
@ -37,7 +37,9 @@ Label::Label(
|
|||||||
* labelPin
|
* labelPin
|
||||||
);
|
);
|
||||||
|
|
||||||
labelTitle = Gtk::make_managed<label::Title>();
|
labelTitle = Gtk::make_managed<label::Title>(
|
||||||
|
database
|
||||||
|
);
|
||||||
|
|
||||||
set_tooltip_text(
|
set_tooltip_text(
|
||||||
labelTitle->get_text()
|
labelTitle->get_text()
|
||||||
@ -129,8 +131,13 @@ int Label::session_restore(
|
|||||||
) == 1
|
) == 1
|
||||||
);
|
);
|
||||||
|
|
||||||
// Restore children components here (on available)
|
// Restore children components
|
||||||
// @TODO
|
labelTitle->session_restore(
|
||||||
|
sqlite3_column_int64(
|
||||||
|
statement,
|
||||||
|
Database::Session::ID
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,17 +146,23 @@ int Label::session_restore(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Label::session_save(
|
sqlite3_int64 Label::session_save(
|
||||||
const sqlite3_int64 & APP_BROWSER_MAIN_TAB__SESSION__ID
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB__SESSION__ID
|
||||||
) {
|
) {
|
||||||
// Delegate save action to child components (on available)
|
// Create new session
|
||||||
|
const sqlite3_int64 APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID = Database::Session::add(
|
||||||
// Save label session
|
|
||||||
return Database::Session::add(
|
|
||||||
database,
|
database,
|
||||||
APP_BROWSER_MAIN_TAB__SESSION__ID,
|
APP_BROWSER_MAIN_TAB__SESSION__ID,
|
||||||
is_pinned
|
is_pinned
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Delegate save action to child components
|
||||||
|
labelTitle->session_save(
|
||||||
|
APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
);
|
||||||
|
|
||||||
|
// Return ID
|
||||||
|
return APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Label::pin()
|
void Label::pin()
|
||||||
@ -185,7 +198,7 @@ void Label::update(
|
|||||||
TITLE
|
TITLE
|
||||||
);
|
);
|
||||||
|
|
||||||
labelTitle->set_text(
|
labelTitle->update(
|
||||||
TITLE
|
TITLE
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -251,6 +264,11 @@ int Label::Database::Session::clean(
|
|||||||
{
|
{
|
||||||
while (sqlite3_step(statement) == SQLITE_ROW)
|
while (sqlite3_step(statement) == SQLITE_ROW)
|
||||||
{
|
{
|
||||||
|
const sqlite3_int64 APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID = sqlite3_column_int64(
|
||||||
|
statement,
|
||||||
|
Database::Session::ID
|
||||||
|
);
|
||||||
|
|
||||||
// Delete record
|
// Delete record
|
||||||
const int EXEC_STATUS = sqlite3_exec(
|
const int EXEC_STATUS = sqlite3_exec(
|
||||||
database,
|
database,
|
||||||
@ -258,10 +276,7 @@ int Label::Database::Session::clean(
|
|||||||
R"SQL(
|
R"SQL(
|
||||||
DELETE FROM `app_browser_main_tab_label__session` WHERE `id` = %d
|
DELETE FROM `app_browser_main_tab_label__session` WHERE `id` = %d
|
||||||
)SQL",
|
)SQL",
|
||||||
sqlite3_column_int64(
|
APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
statement,
|
|
||||||
Database::Session::ID
|
|
||||||
)
|
|
||||||
).c_str(),
|
).c_str(),
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
@ -271,7 +286,10 @@ int Label::Database::Session::clean(
|
|||||||
// Delegate children dependencies cleanup
|
// Delegate children dependencies cleanup
|
||||||
if (EXEC_STATUS == SQLITE_OK)
|
if (EXEC_STATUS == SQLITE_OK)
|
||||||
{
|
{
|
||||||
// nothing here.
|
label::Title::Database::Session::clean(
|
||||||
|
database,
|
||||||
|
APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,9 +90,9 @@ namespace app::browser::main::tab
|
|||||||
const sqlite3_int64 & APP_BROWSER_MAIN_TAB__SESSION__ID
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB__SESSION__ID
|
||||||
); // return sqlite3_finalize status code
|
); // return sqlite3_finalize status code
|
||||||
|
|
||||||
int session_save(
|
sqlite3_int64 session_save(
|
||||||
const sqlite3_int64 & APP_BROWSER_MAIN_TAB__SESSION__ID
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB__SESSION__ID
|
||||||
); // return sqlite3_finalize status code
|
); // return sqlite3_last_insert_rowid
|
||||||
|
|
||||||
void pin();
|
void pin();
|
||||||
|
|
||||||
|
@ -2,10 +2,20 @@
|
|||||||
|
|
||||||
using namespace app::browser::main::tab::label;
|
using namespace app::browser::main::tab::label;
|
||||||
|
|
||||||
Title::Title()
|
Title::Title(
|
||||||
{
|
sqlite3 * database
|
||||||
|
) {
|
||||||
|
// Init database
|
||||||
|
Database::Session::init(
|
||||||
|
this->database = database
|
||||||
|
);
|
||||||
|
|
||||||
|
// Init extras
|
||||||
|
text = _("New page");
|
||||||
|
|
||||||
|
// Init widget
|
||||||
set_text(
|
set_text(
|
||||||
_("New page")
|
text
|
||||||
);
|
);
|
||||||
|
|
||||||
set_ellipsize(
|
set_ellipsize(
|
||||||
@ -19,4 +29,184 @@ Title::Title()
|
|||||||
set_single_line_mode(
|
set_single_line_mode(
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
int Title::session_restore(
|
||||||
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
) {
|
||||||
|
sqlite3_stmt * statement;
|
||||||
|
|
||||||
|
const int PREPARE_STATUS = sqlite3_prepare_v3(
|
||||||
|
database,
|
||||||
|
Glib::ustring::sprintf(
|
||||||
|
R"SQL(
|
||||||
|
SELECT * FROM `app_browser_main_tab_label_title__session`
|
||||||
|
WHERE `app_browser_main_tab_label__session__id` = %d
|
||||||
|
ORDER BY `id` DESC LIMIT 1
|
||||||
|
)SQL",
|
||||||
|
APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
).c_str(),
|
||||||
|
-1,
|
||||||
|
SQLITE_PREPARE_NORMALIZE,
|
||||||
|
&statement,
|
||||||
|
nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
if (PREPARE_STATUS == SQLITE_OK)
|
||||||
|
{
|
||||||
|
// Restore label text from latest database record
|
||||||
|
while (sqlite3_step(statement) == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
// Restore widget data
|
||||||
|
update(
|
||||||
|
reinterpret_cast<const char*>(
|
||||||
|
sqlite3_column_text(
|
||||||
|
statement,
|
||||||
|
Database::Session::TEXT
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Restore children components here (on available)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sqlite3_finalize(
|
||||||
|
statement
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3_int64 Title::session_save(
|
||||||
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
) {
|
||||||
|
// Create new session record
|
||||||
|
const sqlite3_int64 APP_BROWSER_MAIN_TAB_LABEL_TITLE__SESSION__ID = Database::Session::add(
|
||||||
|
database,
|
||||||
|
APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID,
|
||||||
|
text
|
||||||
|
);
|
||||||
|
|
||||||
|
// Delegate save action to child components (on available)
|
||||||
|
|
||||||
|
// Return ID
|
||||||
|
return APP_BROWSER_MAIN_TAB_LABEL_TITLE__SESSION__ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Title::update(
|
||||||
|
const Glib::ustring & TEXT
|
||||||
|
) {
|
||||||
|
set_text(
|
||||||
|
text = TEXT
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Database model
|
||||||
|
int Title::Database::Session::init(
|
||||||
|
sqlite3 * database
|
||||||
|
) {
|
||||||
|
char * error;
|
||||||
|
|
||||||
|
return sqlite3_exec(
|
||||||
|
database,
|
||||||
|
R"SQL(
|
||||||
|
CREATE TABLE IF NOT EXISTS `app_browser_main_tab_label_title__session`
|
||||||
|
(
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `app_browser_main_tab_label__session__id` INTEGER NOT NULL,
|
||||||
|
`time` INTEGER NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`text` VARCHAR(1024) NOT NULL
|
||||||
|
)
|
||||||
|
)SQL",
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
&error
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Title::Database::Session::clean(
|
||||||
|
sqlite3 * database,
|
||||||
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
) {
|
||||||
|
char * error; // @TODO
|
||||||
|
sqlite3_stmt * statement;
|
||||||
|
|
||||||
|
const int PREPARE_STATUS = sqlite3_prepare_v3(
|
||||||
|
database,
|
||||||
|
Glib::ustring::sprintf(
|
||||||
|
R"SQL(
|
||||||
|
SELECT * FROM `app_browser_main_tab_label_title__session`
|
||||||
|
WHERE `app_browser_main_tab_label__session__id` = %d
|
||||||
|
)SQL",
|
||||||
|
APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
).c_str(),
|
||||||
|
-1,
|
||||||
|
SQLITE_PREPARE_NORMALIZE,
|
||||||
|
&statement,
|
||||||
|
nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
if (PREPARE_STATUS == SQLITE_OK)
|
||||||
|
{
|
||||||
|
while (sqlite3_step(statement) == SQLITE_ROW)
|
||||||
|
{
|
||||||
|
// Delete record
|
||||||
|
const int EXEC_STATUS = sqlite3_exec(
|
||||||
|
database,
|
||||||
|
Glib::ustring::sprintf(
|
||||||
|
R"SQL(
|
||||||
|
DELETE FROM `app_browser_main_tab_label_title__session` WHERE `id` = %d
|
||||||
|
)SQL",
|
||||||
|
sqlite3_column_int64(
|
||||||
|
statement,
|
||||||
|
Database::Session::ID
|
||||||
|
)
|
||||||
|
).c_str(),
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
&error
|
||||||
|
);
|
||||||
|
|
||||||
|
// Delegate children dependencies cleanup
|
||||||
|
if (EXEC_STATUS == SQLITE_OK)
|
||||||
|
{
|
||||||
|
// nothing here.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sqlite3_finalize(
|
||||||
|
statement
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3_int64 Title::Database::Session::add(
|
||||||
|
sqlite3 * database,
|
||||||
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID,
|
||||||
|
Glib::ustring & TEXT
|
||||||
|
) {
|
||||||
|
char * error; // @TODO
|
||||||
|
|
||||||
|
sqlite3_exec(
|
||||||
|
database,
|
||||||
|
Glib::ustring::sprintf(
|
||||||
|
R"SQL(
|
||||||
|
INSERT INTO `app_browser_main_tab_label_title__session` (
|
||||||
|
`app_browser_main_tab_label__session__id`,
|
||||||
|
`text`
|
||||||
|
) VALUES (
|
||||||
|
'%d',
|
||||||
|
'%s'
|
||||||
|
)
|
||||||
|
)SQL",
|
||||||
|
APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID,
|
||||||
|
TEXT
|
||||||
|
).c_str(),
|
||||||
|
nullptr,
|
||||||
|
nullptr,
|
||||||
|
&error
|
||||||
|
);
|
||||||
|
|
||||||
|
return sqlite3_last_insert_rowid(
|
||||||
|
database
|
||||||
|
);
|
||||||
}
|
}
|
@ -5,16 +5,60 @@
|
|||||||
#include <glibmm/ustring.h>
|
#include <glibmm/ustring.h>
|
||||||
#include <gtkmm/label.h>
|
#include <gtkmm/label.h>
|
||||||
#include <pangomm/layout.h>
|
#include <pangomm/layout.h>
|
||||||
|
#include <sqlite3.h>
|
||||||
|
|
||||||
namespace app::browser::main::tab::label
|
namespace app::browser::main::tab::label
|
||||||
{
|
{
|
||||||
class Title : public Gtk::Label
|
class Title : public Gtk::Label
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class database
|
||||||
|
*
|
||||||
|
* Allowed parental access to enums and relationship methods
|
||||||
|
*/
|
||||||
|
struct Database
|
||||||
|
{
|
||||||
|
// app_browser_main_tab_label_title__*
|
||||||
|
struct Session
|
||||||
|
{
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
ID,
|
||||||
|
APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID,
|
||||||
|
TIME,
|
||||||
|
TEXT
|
||||||
|
}; // table fields index
|
||||||
|
|
||||||
|
static int init(
|
||||||
|
sqlite3 * database
|
||||||
|
); // return sqlite3_exec status code
|
||||||
|
|
||||||
|
static int clean(
|
||||||
|
sqlite3 * database,
|
||||||
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
); // return sqlite3_finalize status code
|
||||||
|
|
||||||
|
static sqlite3_int64 add(
|
||||||
|
sqlite3 * database,
|
||||||
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID,
|
||||||
|
Glib::ustring & TEXT
|
||||||
|
); // return sqlite3_last_insert_rowid
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Internal members
|
* Internal members
|
||||||
*/
|
*/
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
// Database
|
||||||
|
sqlite3 * database;
|
||||||
|
|
||||||
|
// Extras
|
||||||
|
Glib::ustring text;
|
||||||
|
|
||||||
// Defaults
|
// Defaults
|
||||||
static const int WIDTH_CHARS = 16;
|
static const int WIDTH_CHARS = 16;
|
||||||
|
|
||||||
@ -23,7 +67,22 @@ namespace app::browser::main::tab::label
|
|||||||
*/
|
*/
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Title();
|
Title(
|
||||||
|
sqlite3 * database
|
||||||
|
);
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
int session_restore(
|
||||||
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
); // return sqlite3_finalize status code
|
||||||
|
|
||||||
|
sqlite3_int64 session_save(
|
||||||
|
const sqlite3_int64 & APP_BROWSER_MAIN_TAB_LABEL__SESSION__ID
|
||||||
|
); // return sqlite3_last_insert_rowid
|
||||||
|
|
||||||
|
void update(
|
||||||
|
const Glib::ustring & TEXT
|
||||||
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user