Fixing review comments
This commit is contained in:
parent
0c2d7c1382
commit
488a157476
@ -178,9 +178,7 @@ bool DynamicProfileRules::loadRules()
|
|||||||
const Glib::ustring fileName = Glib::build_filename (Options::rtdir, "dynamicprofile.cfg");
|
const Glib::ustring fileName = Glib::build_filename (Options::rtdir, "dynamicprofile.cfg");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (Glib::file_test(fileName, Glib::FILE_TEST_EXISTS)) {
|
if (!(Glib::file_test(fileName, Glib::FILE_TEST_EXISTS) && kf.load_from_file (fileName))) {
|
||||||
kf.load_from_file (fileName);
|
|
||||||
} else {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (Glib::Error &e) {
|
} catch (Glib::Error &e) {
|
||||||
|
@ -25,9 +25,9 @@
|
|||||||
|
|
||||||
bool BatchQueueButtonSet::iconsLoaded = false;
|
bool BatchQueueButtonSet::iconsLoaded = false;
|
||||||
|
|
||||||
std::shared_ptr<RTSurface> BatchQueueButtonSet::cancelIcon = std::shared_ptr<RTSurface>(nullptr);
|
std::shared_ptr<RTSurface> BatchQueueButtonSet::cancelIcon;
|
||||||
std::shared_ptr<RTSurface> BatchQueueButtonSet::headIcon = std::shared_ptr<RTSurface>(nullptr);
|
std::shared_ptr<RTSurface> BatchQueueButtonSet::headIcon;
|
||||||
std::shared_ptr<RTSurface> BatchQueueButtonSet::tailIcon = std::shared_ptr<RTSurface>(nullptr);
|
std::shared_ptr<RTSurface> BatchQueueButtonSet::tailIcon;
|
||||||
|
|
||||||
Glib::ustring BatchQueueButtonSet::moveHeadToolTip;
|
Glib::ustring BatchQueueButtonSet::moveHeadToolTip;
|
||||||
Glib::ustring BatchQueueButtonSet::moveEndToolTip;
|
Glib::ustring BatchQueueButtonSet::moveEndToolTip;
|
||||||
|
@ -228,13 +228,13 @@ void BatchQueuePanel::updateTab (int qsize, int forceOrientation)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!qsize ) {
|
if (!qsize ) {
|
||||||
grid->attach_next_to(*Gtk::manage (new RTImage ("gears")), Gtk::POS_RIGHT, 1, 1);
|
grid->attach_next_to(*Gtk::manage (new RTImage ("gears", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_RIGHT, 1, 1);
|
||||||
grid->attach_next_to(*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_QUEUE") )), Gtk::POS_RIGHT, 1, 1);
|
grid->attach_next_to(*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_QUEUE") )), Gtk::POS_RIGHT, 1, 1);
|
||||||
} else if (qStartStop->get_active()) {
|
} else if (qStartStop->get_active()) {
|
||||||
grid->attach_next_to(*Gtk::manage (new RTImage ("gears-play")), Gtk::POS_RIGHT, 1, 1);
|
grid->attach_next_to(*Gtk::manage (new RTImage ("gears-play", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_RIGHT, 1, 1);
|
||||||
grid->attach_next_to(*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_QUEUE") + " [" + Glib::ustring::format( qsize ) + "]" )), Gtk::POS_RIGHT, 1, 1);
|
grid->attach_next_to(*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_QUEUE") + " [" + Glib::ustring::format( qsize ) + "]" )), Gtk::POS_RIGHT, 1, 1);
|
||||||
} else {
|
} else {
|
||||||
grid->attach_next_to(*Gtk::manage (new RTImage ("gears-pause")), Gtk::POS_RIGHT, 1, 1);
|
grid->attach_next_to(*Gtk::manage (new RTImage ("gears-pause", Gtk::ICON_SIZE_LARGE_TOOLBAR)), Gtk::POS_RIGHT, 1, 1);
|
||||||
grid->attach_next_to(*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_QUEUE") + " [" + Glib::ustring::format( qsize ) + "]" )), Gtk::POS_RIGHT, 1, 1);
|
grid->attach_next_to(*Gtk::manage (new Gtk::Label (M("MAIN_FRAME_QUEUE") + " [" + Glib::ustring::format( qsize ) + "]" )), Gtk::POS_RIGHT, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,12 +43,10 @@ void CursorManager::init (Glib::RefPtr<Gdk::Window> mainWindow)
|
|||||||
// - By default, cursor hotspot is located at middle of surface.
|
// - By default, cursor hotspot is located at middle of surface.
|
||||||
// Use (offX, offY) between -1 and 0.99 to move cursor hotspot
|
// Use (offX, offY) between -1 and 0.99 to move cursor hotspot
|
||||||
auto cursor_surf = RTSurface(name, Gtk::ICON_SIZE_MENU);
|
auto cursor_surf = RTSurface(name, Gtk::ICON_SIZE_MENU);
|
||||||
double offXb = std::min(std::max(-1., offX), 0.99); // offX should belong to (-1; 0.99)
|
|
||||||
double offYb = std::min(std::max(-1., offY), 0.99); // offY should belong to (-1; 0.99)
|
|
||||||
auto cursor = Gdk::Cursor::create(this->display,
|
auto cursor = Gdk::Cursor::create(this->display,
|
||||||
cursor_surf.get(),
|
cursor_surf.get(),
|
||||||
cursor_surf.getWidth() / 2 * (1. + offXb),
|
std::min(std::max(cursor_surf.getWidth() / 2 * (1. + offX), 0.), static_cast<double>(cursor_surf.getWidth())),
|
||||||
cursor_surf.getHeight() / 2 * (1. + offYb));
|
std::min(std::max(cursor_surf.getHeight() / 2 * (1. + offY), 0.), static_cast<double>(cursor_surf.getHeight())));
|
||||||
|
|
||||||
if (!cursor) {
|
if (!cursor) {
|
||||||
cursor = Gdk::Cursor::create(this->display, fb_cursor);
|
cursor = Gdk::Cursor::create(this->display, fb_cursor);
|
||||||
@ -58,7 +56,7 @@ void CursorManager::init (Glib::RefPtr<Gdk::Window> mainWindow)
|
|||||||
};
|
};
|
||||||
|
|
||||||
cAdd = createCursor("crosshair-hicontrast", Gdk::PLUS);
|
cAdd = createCursor("crosshair-hicontrast", Gdk::PLUS);
|
||||||
cAddPicker = createCursor("color-picker-add-hicontrast", Gdk::PLUS, -0.333, 0.75);
|
cAddPicker = createCursor("color-picker-add-hicontrast", Gdk::PLUS, -0.666, 0.75);
|
||||||
cCropDraw = createCursor("crop-point-hicontrast", Gdk::DIAMOND_CROSS);
|
cCropDraw = createCursor("crop-point-hicontrast", Gdk::DIAMOND_CROSS);
|
||||||
cCrosshair = createCursor("crosshair-hicontrast", Gdk::CROSSHAIR);
|
cCrosshair = createCursor("crosshair-hicontrast", Gdk::CROSSHAIR);
|
||||||
cEmpty = createCursor("empty", Gdk::BLANK_CURSOR);
|
cEmpty = createCursor("empty", Gdk::BLANK_CURSOR);
|
||||||
@ -74,7 +72,7 @@ void CursorManager::init (Glib::RefPtr<Gdk::Window> mainWindow)
|
|||||||
cMoveXY = createCursor("node-move-xy-hicontrast", Gdk::FLEUR);
|
cMoveXY = createCursor("node-move-xy-hicontrast", Gdk::FLEUR);
|
||||||
cMoveY = createCursor("node-move-y-hicontrast", Gdk::SB_V_DOUBLE_ARROW);
|
cMoveY = createCursor("node-move-y-hicontrast", Gdk::SB_V_DOUBLE_ARROW);
|
||||||
cRotate = createCursor("rotate-aroundnode-hicontrast", Gdk::EXCHANGE);
|
cRotate = createCursor("rotate-aroundnode-hicontrast", Gdk::EXCHANGE);
|
||||||
cWB = createCursor("color-picker-hicontrast", Gdk::TARGET, -0.333, 0.75);
|
cWB = createCursor("color-picker-hicontrast", Gdk::TARGET, -0.666, 0.75);
|
||||||
cWait = createCursor("gears", Gdk::CLOCK);
|
cWait = createCursor("gears", Gdk::CLOCK);
|
||||||
|
|
||||||
window = mainWindow;
|
window = mainWindow;
|
||||||
|
@ -63,7 +63,7 @@ protected:
|
|||||||
ExifFilterSettings curefs;
|
ExifFilterSettings curefs;
|
||||||
FilterPanelListener* listener;
|
FilterPanelListener* listener;
|
||||||
|
|
||||||
std::shared_ptr<RTSurface> ornamentSurface;
|
std::unique_ptr<RTSurface> ornamentSurface;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FilterPanel ();
|
FilterPanel ();
|
||||||
|
@ -64,7 +64,7 @@ LensProfilePanel::LensProfilePanel() :
|
|||||||
lensfunCameras(Gtk::manage((new MyComboBox()))),
|
lensfunCameras(Gtk::manage((new MyComboBox()))),
|
||||||
lensfunLensesLbl(Gtk::manage((new Gtk::Label(M("EXIFFILTER_LENS"))))),
|
lensfunLensesLbl(Gtk::manage((new Gtk::Label(M("EXIFFILTER_LENS"))))),
|
||||||
lensfunLenses(Gtk::manage((new MyComboBox()))),
|
lensfunLenses(Gtk::manage((new MyComboBox()))),
|
||||||
warning(Gtk::manage(new RTImage("warning"))),
|
warning(Gtk::manage(new RTImage("warning", Gtk::ICON_SIZE_LARGE_TOOLBAR))),
|
||||||
ckbUseDist(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_GEOMETRIC"))))),
|
ckbUseDist(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_GEOMETRIC"))))),
|
||||||
ckbUseVign(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_VIGNETTING"))))),
|
ckbUseVign(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_VIGNETTING"))))),
|
||||||
ckbUseCA(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_CA")))))
|
ckbUseCA(Gtk::manage((new Gtk::CheckButton(M("TP_LENSPROFILE_USE_CA")))))
|
||||||
|
@ -82,20 +82,7 @@ RTImage::RTImage (const Glib::RefPtr<const Gio::Icon>& gIcon, const Gtk::IconSiz
|
|||||||
|
|
||||||
void RTImage::set_from_icon_name(const Glib::ustring& iconName)
|
void RTImage::set_from_icon_name(const Glib::ustring& iconName)
|
||||||
{
|
{
|
||||||
this->icon_name = iconName;
|
set_from_icon_name(iconName, this->size);
|
||||||
|
|
||||||
// Set surface from icon cache
|
|
||||||
surface = RTImageCache::getCachedSurface(this->icon_name, this->size);
|
|
||||||
|
|
||||||
// Add it to the RTImage if surface exists
|
|
||||||
if (surface) {
|
|
||||||
set(surface->get());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unset Gio::Icon if firstly exists
|
|
||||||
if (this->g_icon) {
|
|
||||||
g_icon = Glib::RefPtr<const Gio::Icon>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTImage::set_from_icon_name(const Glib::ustring& iconName, const Gtk::IconSize iconSize)
|
void RTImage::set_from_icon_name(const Glib::ustring& iconName, const Gtk::IconSize iconSize)
|
||||||
@ -119,17 +106,7 @@ void RTImage::set_from_icon_name(const Glib::ustring& iconName, const Gtk::IconS
|
|||||||
|
|
||||||
void RTImage::set_from_gicon(const Glib::RefPtr<const Gio::Icon>& gIcon)
|
void RTImage::set_from_gicon(const Glib::RefPtr<const Gio::Icon>& gIcon)
|
||||||
{
|
{
|
||||||
this->g_icon = gIcon;
|
set_from_gicon(gIcon, this->size);
|
||||||
|
|
||||||
// Set image from Gio::Icon
|
|
||||||
set(this->g_icon, this->size);
|
|
||||||
|
|
||||||
// Unset surface if previously chosen
|
|
||||||
this->icon_name = "";
|
|
||||||
|
|
||||||
if (surface) {
|
|
||||||
surface = std::shared_ptr<RTSurface>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTImage::set_from_gicon(const Glib::RefPtr<const Gio::Icon>& gIcon, const Gtk::IconSize iconSize)
|
void RTImage::set_from_gicon(const Glib::RefPtr<const Gio::Icon>& gIcon, const Gtk::IconSize iconSize)
|
||||||
|
@ -32,7 +32,7 @@ extern Glib::ustring argv0;
|
|||||||
double RTScalable::dpi = 96.;
|
double RTScalable::dpi = 96.;
|
||||||
int RTScalable::scale = 1;
|
int RTScalable::scale = 1;
|
||||||
|
|
||||||
void RTScalable::updateDPInScale(const Gtk::Window* window, double &newDPI, int &newScale)
|
void RTScalable::getDPInScale(const Gtk::Window* window, double &newDPI, int &newScale)
|
||||||
{
|
{
|
||||||
if (window) {
|
if (window) {
|
||||||
const auto screen = window->get_screen();
|
const auto screen = window->get_screen();
|
||||||
@ -169,6 +169,7 @@ Cairo::RefPtr<Cairo::ImageSurface> RTScalable::loadSurfaceFromSVG(const Glib::us
|
|||||||
if (error) {
|
if (error) {
|
||||||
std::cerr << "Failed to load SVG file \"" << fname << "\": " << std::endl
|
std::cerr << "Failed to load SVG file \"" << fname << "\": " << std::endl
|
||||||
<< Glib::ustring(error->message) << std::endl;
|
<< Glib::ustring(error->message) << std::endl;
|
||||||
|
free(error);
|
||||||
return surf;
|
return surf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,6 +216,7 @@ Cairo::RefPtr<Cairo::ImageSurface> RTScalable::loadSurfaceFromSVG(const Glib::us
|
|||||||
if (!success && error) {
|
if (!success && error) {
|
||||||
std::cerr << "Failed to load SVG file \"" << fname << "\": " << std::endl
|
std::cerr << "Failed to load SVG file \"" << fname << "\": " << std::endl
|
||||||
<< Glib::ustring(error->message) << std::endl;
|
<< Glib::ustring(error->message) << std::endl;
|
||||||
|
free(error);
|
||||||
return surf;
|
return surf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,12 +236,12 @@ Cairo::RefPtr<Cairo::ImageSurface> RTScalable::loadSurfaceFromSVG(const Glib::us
|
|||||||
void RTScalable::init(const Gtk::Window* window)
|
void RTScalable::init(const Gtk::Window* window)
|
||||||
{
|
{
|
||||||
// Retrieve DPI and Scale paremeters from OS
|
// Retrieve DPI and Scale paremeters from OS
|
||||||
updateDPInScale(window, dpi, scale);
|
getDPInScale(window, dpi, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTScalable::setDPInScale (const Gtk::Window* window)
|
void RTScalable::setDPInScale (const Gtk::Window* window)
|
||||||
{
|
{
|
||||||
updateDPInScale(window, dpi, scale);
|
getDPInScale(window, dpi, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTScalable::setDPInScale (const double newDPI, const int newScale)
|
void RTScalable::setDPInScale (const double newDPI, const int newScale)
|
||||||
|
@ -54,7 +54,7 @@ class RTScalable
|
|||||||
private:
|
private:
|
||||||
static double dpi;
|
static double dpi;
|
||||||
static int scale;
|
static int scale;
|
||||||
static void updateDPInScale(const Gtk::Window* window, double &newDPI, int &newScale);
|
static void getDPInScale(const Gtk::Window* window, double &newDPI, int &newScale);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static Cairo::RefPtr<Cairo::ImageSurface> loadSurfaceFromIcon(const Glib::ustring &icon_name, const Gtk::IconSize iconSize = Gtk::ICON_SIZE_SMALL_TOOLBAR);
|
static Cairo::RefPtr<Cairo::ImageSurface> loadSurfaceFromIcon(const Glib::ustring &icon_name, const Gtk::IconSize iconSize = Gtk::ICON_SIZE_SMALL_TOOLBAR);
|
||||||
|
@ -32,7 +32,7 @@ RTSurface::RTSurface() :
|
|||||||
scaleBack = RTScalable::getScale();
|
scaleBack = RTScalable::getScale();
|
||||||
|
|
||||||
// Initialize other private parameters
|
// Initialize other private parameters
|
||||||
type = RTSurface::InvalidType;
|
type = RTSurfaceType::InvalidType;
|
||||||
name = "";
|
name = "";
|
||||||
icon_size = Gtk::ICON_SIZE_INVALID;
|
icon_size = Gtk::ICON_SIZE_INVALID;
|
||||||
}
|
}
|
||||||
@ -45,7 +45,7 @@ RTSurface::RTSurface(const Glib::ustring &icon_name, const Gtk::IconSize iconSiz
|
|||||||
|
|
||||||
if (surface) {
|
if (surface) {
|
||||||
// Save private parameters
|
// Save private parameters
|
||||||
type = RTSurface::IconType;
|
type = RTSurfaceType::IconType;
|
||||||
name = icon_name;
|
name = icon_name;
|
||||||
icon_size = iconSize;
|
icon_size = iconSize;
|
||||||
}
|
}
|
||||||
@ -67,7 +67,7 @@ RTSurface::RTSurface(const Glib::ustring &fname) :
|
|||||||
|
|
||||||
if (surface) {
|
if (surface) {
|
||||||
// Save private parameter
|
// Save private parameter
|
||||||
type = RTSurface::PNGType;
|
type = RTSurfaceType::PNGType;
|
||||||
name = fname;
|
name = fname;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ RTSurface::RTSurface(const Glib::ustring &fname) :
|
|||||||
|
|
||||||
if (surface) {
|
if (surface) {
|
||||||
// Save private parameter
|
// Save private parameter
|
||||||
type = RTSurface::SVGType;
|
type = RTSurfaceType::SVGType;
|
||||||
name = fname;
|
name = fname;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,7 +92,7 @@ int RTSurface::getWidth()
|
|||||||
|
|
||||||
if (hasSurface()) {
|
if (hasSurface()) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case RTSurface::IconType:
|
case RTSurfaceType::IconType:
|
||||||
// Get width from Gtk::IconSize
|
// Get width from Gtk::IconSize
|
||||||
if (!Gtk::IconSize::lookup(icon_size, w, h)) { // Size in invalid
|
if (!Gtk::IconSize::lookup(icon_size, w, h)) { // Size in invalid
|
||||||
w = h = -1; // Invalid case
|
w = h = -1; // Invalid case
|
||||||
@ -100,15 +100,15 @@ int RTSurface::getWidth()
|
|||||||
|
|
||||||
return w;
|
return w;
|
||||||
|
|
||||||
case RTSurface::PNGType:
|
case RTSurfaceType::PNGType:
|
||||||
// Directly return surface width
|
// Directly return surface width
|
||||||
return surface->get_width();
|
return surface->get_width();
|
||||||
|
|
||||||
case RTSurface::SVGType:
|
case RTSurfaceType::SVGType:
|
||||||
// Returned size shall consider the scaling
|
// Returned size shall consider the scaling
|
||||||
return (surface->get_width() / RTScalable::getScale());
|
return (surface->get_width() / RTScalable::getScale());
|
||||||
|
|
||||||
case RTSurface::InvalidType:
|
case RTSurfaceType::InvalidType:
|
||||||
default:
|
default:
|
||||||
// Invalid case
|
// Invalid case
|
||||||
return -1;
|
return -1;
|
||||||
@ -125,7 +125,7 @@ int RTSurface::getHeight()
|
|||||||
|
|
||||||
if (hasSurface()) {
|
if (hasSurface()) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case RTSurface::IconType:
|
case RTSurfaceType::IconType:
|
||||||
// Get width from Gtk::IconSize
|
// Get width from Gtk::IconSize
|
||||||
if (!Gtk::IconSize::lookup(icon_size, w, h)) { // Size in invalid
|
if (!Gtk::IconSize::lookup(icon_size, w, h)) { // Size in invalid
|
||||||
w = h = -1; // Invalid case
|
w = h = -1; // Invalid case
|
||||||
@ -133,15 +133,15 @@ int RTSurface::getHeight()
|
|||||||
|
|
||||||
return h;
|
return h;
|
||||||
|
|
||||||
case RTSurface::PNGType:
|
case RTSurfaceType::PNGType:
|
||||||
// Directly return surface width
|
// Directly return surface width
|
||||||
return surface->get_height();
|
return surface->get_height();
|
||||||
|
|
||||||
case RTSurface::SVGType:
|
case RTSurfaceType::SVGType:
|
||||||
// Returned size shall consider the scaling
|
// Returned size shall consider the scaling
|
||||||
return (surface->get_height() / RTScalable::getScale());
|
return (surface->get_height() / RTScalable::getScale());
|
||||||
|
|
||||||
case RTSurface::InvalidType:
|
case RTSurfaceType::InvalidType:
|
||||||
default:
|
default:
|
||||||
// Invalid case
|
// Invalid case
|
||||||
return -1;
|
return -1;
|
||||||
@ -175,13 +175,13 @@ void RTSurface::updateSurface()
|
|||||||
{
|
{
|
||||||
// Update surface based on the scale
|
// Update surface based on the scale
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case RTSurface::IconType :
|
case RTSurfaceType::IconType :
|
||||||
surface = RTScalable::loadSurfaceFromIcon(name, icon_size);
|
surface = RTScalable::loadSurfaceFromIcon(name, icon_size);
|
||||||
break;
|
break;
|
||||||
case RTSurface::PNGType :
|
case RTSurfaceType::PNGType :
|
||||||
surface = RTScalable::loadSurfaceFromPNG(name);
|
surface = RTScalable::loadSurfaceFromPNG(name);
|
||||||
break;
|
break;
|
||||||
case RTSurface::SVGType :
|
case RTSurfaceType::SVGType :
|
||||||
surface = RTScalable::loadSurfaceFromSVG(name);
|
surface = RTScalable::loadSurfaceFromSVG(name);
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
|
@ -27,11 +27,11 @@
|
|||||||
class RTSurface final : public RTScalable
|
class RTSurface final : public RTScalable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum RTSurfaceType {
|
enum class RTSurfaceType {
|
||||||
InvalidType = 1,
|
InvalidType,
|
||||||
IconType = 2,
|
IconType,
|
||||||
PNGType = 3,
|
PNGType,
|
||||||
SVGType = 4
|
SVGType
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user