AutoCatGnome/gtkpp/Window.cpp

86 lines
2.1 KiB
C++

//
// Created by selim on 10.05.2022.
//
#include "Window.h"
#include "../App.h"
namespace gtkpp {
bool operator==(const Window& wnd1, const Window& wnd2) {
return wnd1._window == wnd2._window;
}
Window::Window() {
_window = nullptr;
_builder = nullptr;
}
Window::Window(bool isAppWindow): _isAppWindow(isAppWindow) {
if(isAppWindow) {
auto app = GTK_APPLICATION(App::instance().gobj());
_window = GTK_WINDOW(adw_application_window_new(app));
} else {
_window = GTK_WINDOW(adw_window_new());
}
_builder = nullptr;
}
Window::Window(const char* resourceName, const char* id) {
_builder = gtk_builder_new_from_resource(resourceName);
_window = GTK_WINDOW(gtk_builder_get_object(_builder, id));
}
Window::~Window() {
if(_window) {
destroy();
}
}
void Window::show() {
gtk_window_present(GTK_WINDOW(_window));
}
void Window::setTitle(const std::string &title) {
gtk_window_set_title(GTK_WINDOW(_window), title.c_str());
}
GtkWindow *Window::gobj() const {
return _window;
}
void Window::setDefaultSize(int width, int height) {
gtk_window_set_default_size(GTK_WINDOW(_window), width, height);
}
void Window::hide() {
gtk_window_close(GTK_WINDOW(_window));
}
void Window::destroy() {
gtk_window_destroy(GTK_WINDOW(_window));
}
void Window::setTransientFor(const Window* window) {
gtk_window_set_transient_for(_window, window->gobj());
}
void Window::setModal() {
gtk_window_set_modal(_window, true);
}
void Window::setContent(const Widget& widget) {
if(_isAppWindow) {
adw_application_window_set_content(ADW_APPLICATION_WINDOW(_window), widget.gobj());
} else {
adw_window_set_content(ADW_WINDOW(_window), widget.gobj());
}
}
void Window::setResizable(bool resizable) {
gtk_window_set_resizable(_window, resizable);
}
}