Browse Source

use separated widgets for tab label feature

CPP-GTK4
yggverse 2 months ago
parent
commit
4eb824594e
  1. 4
      Makefile
  2. 2
      po/POTFILES.in
  3. 116
      src/app/browser/main/tab/label.cpp
  4. 33
      src/app/browser/main/tab/label.hpp

4
Makefile

@ -31,7 +31,9 @@ SRCS = src/app.cpp\ @@ -31,7 +31,9 @@ SRCS = src/app.cpp\
src/app/browser/main/tab/page/navigation/history/forward.cpp\
src/app/browser/main/tab/page/navigation/reload.cpp\
src/app/browser/main/tab/page/navigation/request.cpp\
src/app/browser/main/tab/label.cpp
src/app/browser/main/tab/label.cpp\
src/app/browser/main/tab/label/pin.cpp\
src/app/browser/main/tab/label/title.cpp
OBJS = $(SRCS:.cpp=.o)

2
po/POTFILES.in

@ -27,3 +27,5 @@ src/app/browser/main/tab/page/navigation/history/forward.cpp @@ -27,3 +27,5 @@ src/app/browser/main/tab/page/navigation/history/forward.cpp
src/app/browser/main/tab/page/navigation/reload.cpp
src/app/browser/main/tab/page/navigation/request.cpp
src/app/browser/main/tab/label.cpp
src/app/browser/main/tab/label/pin.cpp
src/app/browser/main/tab/label/title.cpp

116
src/app/browser/main/tab/label.cpp

@ -1,4 +1,6 @@ @@ -1,4 +1,6 @@
#include "label.hpp"
#include "label/pin.hpp"
#include "label/title.hpp"
using namespace app::browser::main::tab;
@ -15,25 +17,34 @@ Label::Label( @@ -15,25 +17,34 @@ Label::Label(
action__tab_close = ACTION__TAB_CLOSE;
// Init extras
text = _("New page");
is_pinned = false;
// Init widget
set_ellipsize(
Pango::EllipsizeMode::END
set_orientation(
Gtk::Orientation::HORIZONTAL
);
set_has_tooltip(
true
set_halign(
Gtk::Align::CENTER
);
set_single_line_mode(
true
// Init components
labelPin = Gtk::make_managed<label::Pin>();
labelPin->hide();
append(
* labelPin
);
set_width_chars(
WIDTH_CHARS
labelTitle = Gtk::make_managed<label::Title>();
set_tooltip_text(
labelTitle->get_text()
);
append(
* labelTitle
);
// Init primary button controller
@ -53,7 +64,7 @@ Label::Label( @@ -53,7 +64,7 @@ Label::Label(
{
if (n == 2) // double click
{
pin(
update(
!is_pinned // toggle
);
}
@ -112,12 +123,6 @@ int Label::session_restore( @@ -112,12 +123,6 @@ int Label::session_restore(
{
// Restore widget data
update(
reinterpret_cast<const char*>(
sqlite3_column_text(
statement,
Database::Session::TEXT
)
),
sqlite3_column_int(
statement,
Database::Session::IS_PINNED
@ -125,6 +130,7 @@ int Label::session_restore( @@ -125,6 +130,7 @@ int Label::session_restore(
);
// Restore children components here (on available)
// @TODO
}
}
@ -142,76 +148,57 @@ int Label::session_save( @@ -142,76 +148,57 @@ int Label::session_save(
return Database::Session::add(
database,
APP_BROWSER_MAIN_TAB__SESSION__ID,
is_pinned,
text
is_pinned
);
}
void Label::pin(
void Label::pin()
{
update(
!is_pinned
);
}
void Label::update(
const bool & IS_PINNED
) {
// Toggle status
is_pinned = IS_PINNED;
// Update widget
if (is_pinned)
{
set_width_chars(
1
);
set_text(
"" // @TODO GTK icon
);
labelPin->show();
labelTitle->hide();
}
else
{
set_width_chars(
WIDTH_CHARS
);
set_text(
text
);
}
labelPin->hide();
labelTitle->show();
}
void Label::pin()
{
pin(
!is_pinned
);
}
void Label::update(
const Glib::ustring & TEXT
const Glib::ustring & TITLE
) {
// Keep new value in memory (used for pin actions)
text = TEXT;
// Update widget
set_tooltip_text(
TEXT // same value for tooltip (ellipsize mode)
TITLE
);
if (!is_pinned)
{
set_text(
TEXT
labelTitle->set_text(
TITLE
);
}
}
void Label::update(
const Glib::ustring & TEXT,
const Glib::ustring & TITLE,
const int & IS_PINNED
) {
update(
TEXT
TITLE
);
pin(
update(
IS_PINNED
);
}
@ -229,8 +216,7 @@ int Label::Database::Session::init( @@ -229,8 +216,7 @@ int Label::Database::Session::init(
(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `app_browser_main_tab__session__id` INTEGER NOT NULL,
`time` INTEGER NOT NULL DEFAULT CURRENT_TIMESTAMP,
`is_pinned` INTEGER NOT NULL,
`text` VARCHAR (1024) NOT NULL
`is_pinned` INTEGER NOT NULL
)
)SQL",
nullptr,
@ -298,8 +284,7 @@ int Label::Database::Session::clean( @@ -298,8 +284,7 @@ int Label::Database::Session::clean(
sqlite3_int64 Label::Database::Session::add(
sqlite3 * database,
const sqlite3_int64 & APP_BROWSER_MAIN_TAB__SESSION__ID,
const bool & IS_PINNED,
const Glib::ustring & TEXT
const bool & IS_PINNED
) {
char * error; // @TODO
@ -309,17 +294,14 @@ sqlite3_int64 Label::Database::Session::add( @@ -309,17 +294,14 @@ sqlite3_int64 Label::Database::Session::add(
R"SQL(
INSERT INTO `app_browser_main_tab_label__session` (
`app_browser_main_tab__session__id`,
`is_pinned`,
`text`
`is_pinned`
) VALUES (
'%d',
'%d',
'%s'
%d,
%d
)
)SQL",
APP_BROWSER_MAIN_TAB__SESSION__ID,
IS_PINNED,
TEXT
IS_PINNED
).c_str(),
nullptr,
nullptr,

33
src/app/browser/main/tab/label.hpp

@ -5,15 +5,20 @@ @@ -5,15 +5,20 @@
#include <glibmm/i18n.h>
#include <glibmm/refptr.h>
#include <glibmm/ustring.h>
#include <gtkmm/box.h>
#include <gtkmm/enums.h>
#include <gtkmm/gestureclick.h>
#include <gtkmm/label.h>
#include <pangomm/layout.h>
#include <sqlite3.h>
namespace app::browser::main::tab
{
class Label : public Gtk::Label
namespace label
{
class Pin;
class Title;
}
class Label : public Gtk::Box
{
public:
@ -32,8 +37,7 @@ namespace app::browser::main::tab @@ -32,8 +37,7 @@ namespace app::browser::main::tab
ID,
APP_BROWSER_MAIN_TAB__SESSION__ID,
TIME,
IS_PINNED,
TEXT
IS_PINNED
}; // table fields index
static int init(
@ -48,8 +52,7 @@ namespace app::browser::main::tab @@ -48,8 +52,7 @@ namespace app::browser::main::tab
static sqlite3_int64 add(
sqlite3 * database,
const sqlite3_int64 & APP_BROWSER_MAIN_TAB__SESSION__ID,
const bool & IS_PINNED,
const Glib::ustring & TEXT
const bool & IS_PINNED
); // return sqlite3_last_insert_rowid
};
};
@ -67,10 +70,10 @@ namespace app::browser::main::tab @@ -67,10 +70,10 @@ namespace app::browser::main::tab
// Extras
bool is_pinned;
Glib::ustring text;
// Defaults
static const int WIDTH_CHARS = 16;
// Components
label::Pin * labelPin;
label::Title * labelTitle;
/*
* Class API
@ -91,18 +94,18 @@ namespace app::browser::main::tab @@ -91,18 +94,18 @@ namespace app::browser::main::tab
const sqlite3_int64 & APP_BROWSER_MAIN_TAB__SESSION__ID
); // return sqlite3_finalize status code
void pin(
void pin();
void update(
const bool & IS_PINNED
);
void pin();
void update(
const Glib::ustring & TEXT
const Glib::ustring & TITLE
);
void update(
const Glib::ustring & TEXT,
const Glib::ustring & TITLE,
const int & IS_PINNED
);
};

Loading…
Cancel
Save