waybar/include/bar.hpp

82 lines
2.8 KiB
C++
Raw Normal View History

2018-08-08 23:54:58 +02:00
#pragma once
#include <glibmm/refptr.h>
#include <gtkmm/cssprovider.h>
#include <gtkmm/main.h>
#include <gtkmm/window.h>
#include <json/json.h>
#include "IModule.hpp"
#include "idle-inhibit-unstable-v1-client-protocol.h"
2018-08-08 23:54:58 +02:00
#include "wlr-layer-shell-unstable-v1-client-protocol.h"
#include "xdg-output-unstable-v1-client-protocol.h"
2018-08-08 23:54:58 +02:00
namespace waybar {
2018-08-19 13:39:57 +02:00
class Factory;
struct waybar_output {
2019-04-18 17:52:00 +02:00
struct wl_output * output;
std::string name;
uint32_t wl_name;
struct zxdg_output_v1 *xdg_output;
};
2018-08-08 23:54:58 +02:00
2018-08-16 14:29:41 +02:00
class Bar {
public:
2019-05-09 15:10:13 +02:00
Bar(struct waybar_output *w_output, const Json::Value &);
Bar(const Bar &) = delete;
~Bar() = default;
auto toggle() -> void;
void handleSignal(int);
2019-04-18 17:52:00 +02:00
struct waybar_output * output;
2019-04-25 13:25:06 +02:00
Json::Value config;
2019-04-18 17:52:00 +02:00
Gtk::Window window;
struct wl_surface * surface;
struct zwlr_layer_surface_v1 *layer_surface;
2019-04-18 17:52:00 +02:00
bool visible = true;
bool vertical = false;
private:
2019-05-25 17:50:45 +02:00
static constexpr const char *MIN_HEIGHT_MSG =
"Requested height: {} exceeds the minimum height: {} required by the modules";
2019-05-25 17:50:45 +02:00
static constexpr const char *MIN_WIDTH_MSG =
"Requested width: {} exceeds the minimum width: {} required by the modules";
2019-05-25 17:50:45 +02:00
static constexpr const char *BAR_SIZE_MSG =
"Bar configured (width: {}, height: {}) for output: {}";
2019-05-25 17:50:45 +02:00
static constexpr const char *SIZE_DEFINED =
2019-04-24 12:42:16 +02:00
"{} size is defined in the config file so it will stay like that";
static void layerSurfaceHandleConfigure(void *, struct zwlr_layer_surface_v1 *, uint32_t,
uint32_t, uint32_t);
static void layerSurfaceHandleClosed(void *, struct zwlr_layer_surface_v1 *);
void destroyOutput();
2019-05-09 15:10:13 +02:00
void onConfigure(GdkEventConfigure *ev);
2019-05-25 17:50:45 +02:00
void onRealize();
void onMap(GdkEventAny *ev);
2019-05-09 15:10:13 +02:00
void setMarginsAndZone(uint32_t height, uint32_t width);
auto setupWidgets() -> void;
void getModules(const Factory &, const std::string &);
void setupAltFormatKeyForModule(const std::string &module_name);
void setupAltFormatKeyForModuleList(const char *module_list_name);
2019-05-09 15:10:13 +02:00
struct margins {
int top = 0;
int right = 0;
int bottom = 0;
int left = 0;
} margins_;
2019-04-18 17:52:00 +02:00
uint32_t width_ = 0;
2019-04-24 12:37:24 +02:00
uint32_t height_ = 1;
2019-05-25 17:50:45 +02:00
uint8_t anchor_;
2019-04-18 17:52:00 +02:00
Gtk::Box left_;
Gtk::Box center_;
Gtk::Box right_;
Gtk::Box box_;
std::vector<std::unique_ptr<waybar::IModule>> modules_left_;
std::vector<std::unique_ptr<waybar::IModule>> modules_center_;
std::vector<std::unique_ptr<waybar::IModule>> modules_right_;
2018-08-16 14:29:41 +02:00
};
2018-08-08 23:54:58 +02:00
} // namespace waybar