/*
-Copyright (C) 2001-2006, William Joseph.
-All Rights Reserved.
+ Copyright (C) 2001-2006, William Joseph.
+ All Rights Reserved.
-This file is part of GtkRadiant.
+ This file is part of GtkRadiant.
-GtkRadiant is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ GtkRadiant is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
-GtkRadiant is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ GtkRadiant is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with GtkRadiant; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
+ You should have received a copy of the GNU General Public License
+ along with GtkRadiant; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
-#if !defined(INCLUDED_GTKUTIL_WINDOW_H)
+#if !defined( INCLUDED_GTKUTIL_WINDOW_H )
#define INCLUDED_GTKUTIL_WINDOW_H
-#include <gtk/gtkwindow.h>
+#include <uilib/uilib.h>
#include "debugging/debugging.h"
#include "generic/callback.h"
#include "widget.h"
-inline gboolean window_focus_in_clear_focus_widget(GtkWidget* widget, GdkEventKey* event, gpointer data)
-{
- gtk_window_set_focus(GTK_WINDOW(widget), NULL);
- return FALSE;
-}
+gboolean window_focus_in_clear_focus_widget(ui::Window widget, GdkEventKey *event, gpointer data);
-inline guint window_connect_focus_in_clear_focus_widget(GtkWindow* window)
-{
- return g_signal_connect(G_OBJECT(window), "focus_in_event", G_CALLBACK(window_focus_in_clear_focus_widget), NULL);
-}
+guint window_connect_focus_in_clear_focus_widget(ui::Window window);
+unsigned int connect_floating(ui::Window main_window, ui::Window floating);
-unsigned int connect_floating(GtkWindow* main_window, GtkWindow* floating);
-GtkWindow* create_floating_window(const char* title, GtkWindow* parent);
-void destroy_floating_window(GtkWindow* window);
+ui::Window create_floating_window(const char *title, ui::Window parent);
-GtkWindow* create_persistent_floating_window(const char* title, GtkWindow* main_window);
-gboolean persistent_floating_window_delete(GtkWindow* floating, GdkEvent *event, GtkWindow* main_window);
+void destroy_floating_window(ui::Window window);
-void window_remove_minmax(GtkWindow* window);
+ui::Window create_persistent_floating_window(const char *title, ui::Window main_window);
-typedef struct _GtkScrolledWindow GtkScrolledWindow;
-GtkScrolledWindow* create_scrolled_window(GtkPolicyType hscrollbar_policy, GtkPolicyType vscrollbar_policy, int border = 0);
+gboolean persistent_floating_window_delete(ui::Window floating, GdkEvent *event, ui::Window main_window);
+void window_remove_minmax(ui::Window window);
-struct WindowPosition
-{
- int x, y, w, h;
+ui::ScrolledWindow create_scrolled_window(ui::Policy hscrollbar_policy, ui::Policy vscrollbar_policy, int border = 0);
- WindowPosition()
- {
- }
- WindowPosition(int _x, int _y, int _w, int _h)
- : x(_x), y(_y), w(_w), h(_h)
- {
- }
+
+struct WindowPosition {
+ int x, y, w, h;
+
+ WindowPosition()
+ {
+ }
+
+ WindowPosition(int _x, int _y, int _w, int _h)
+ : x(_x), y(_y), w(_w), h(_h)
+ {
+ }
};
const WindowPosition c_default_window_pos(50, 25, 400, 300);
-inline void window_get_position(GtkWindow* window, WindowPosition& position)
-{
- ASSERT_MESSAGE(window != 0, "error saving window position");
-
- gtk_window_get_position(window, &position.x, &position.y);
- gtk_window_get_size(window, &position.w, &position.h);
-}
-
-inline void window_set_position(GtkWindow* window, const WindowPosition& position)
-{
- gtk_window_set_gravity(window, GDK_GRAVITY_STATIC);
-
- GdkScreen* screen = gdk_screen_get_default();
- if(position.x < 0
- || position.y < 0
- || position.x > gdk_screen_get_width(screen)
- || position.y > gdk_screen_get_height(screen))
- {
- gtk_window_set_position(window, GTK_WIN_POS_CENTER_ON_PARENT);
- }
- else
- {
- gtk_window_move(window, position.x, position.y);
- }
-
- gtk_window_set_default_size(window, position.w, position.h);
-}
-
-inline void WindowPosition_Parse(WindowPosition& position, const char* value)
-{
- if(sscanf(value, "%d %d %d %d", &position.x, &position.y, &position.w, &position.h) != 4)
- {
- position = WindowPosition(c_default_window_pos); // ensure sane default value for window position
- }
-}
-typedef ReferenceCaller1<WindowPosition, const char*, WindowPosition_Parse> WindowPositionImportStringCaller;
-
-inline void WindowPosition_Write(const WindowPosition& position, const StringImportCallback& importCallback)
-{
- char buffer[64];
- sprintf(buffer, "%d %d %d %d", position.x, position.y, position.w, position.h);
- importCallback(buffer);
-}
-typedef ConstReferenceCaller1<WindowPosition, const StringImportCallback&, WindowPosition_Write> WindowPositionExportStringCaller;
-
-
-
-class WindowPositionTracker
-{
- WindowPosition m_position;
-
- static gboolean configure(GtkWidget* widget, GdkEventConfigure *event, WindowPositionTracker* self)
- {
- self->m_position = WindowPosition(event->x, event->y, event->width, event->height);
- return FALSE;
- }
+void window_get_position(ui::Window window, WindowPosition &position);
+
+void window_set_position(ui::Window window, const WindowPosition &position);
+
+struct WindowPosition_String {
+
+ static void Export(const WindowPosition &self, const Callback<void(const char *)> &returnz);
+
+ static void Import(WindowPosition &self, const char *value);
-public:
- WindowPositionTracker()
- : m_position(c_default_window_pos)
- {
- }
-
- void sync(GtkWindow* window)
- {
- window_set_position(window, m_position);
- }
-
- void connect(GtkWindow* window)
- {
- sync(window);
- g_signal_connect(G_OBJECT(window), "configure_event", G_CALLBACK(configure), this);
- }
-
- const WindowPosition& getPosition() const
- {
- return m_position;
- }
-
- //hack
- void setPosition(const WindowPosition& position)
- {
- m_position = position;
- }
};
+class WindowPositionTracker {
+ WindowPosition m_position;
-inline void WindowPositionTracker_importString(WindowPositionTracker& self, const char* value)
-{
- WindowPosition position;
- WindowPosition_Parse(position, value);
- self.setPosition(position);
-}
-typedef ReferenceCaller1<WindowPositionTracker, const char*, WindowPositionTracker_importString> WindowPositionTrackerImportStringCaller;
+ static gboolean configure(ui::Widget widget, GdkEventConfigure *event, WindowPositionTracker *self);
-inline void WindowPositionTracker_exportString(const WindowPositionTracker& self, const StringImportCallback& importer)
-{
- WindowPosition_Write(self.getPosition(), importer);
-}
-typedef ConstReferenceCaller1<WindowPositionTracker, const StringImportCallback&, WindowPositionTracker_exportString> WindowPositionTrackerExportStringCaller;
+public:
+ WindowPositionTracker()
+ : m_position(c_default_window_pos)
+ {
+ }
+
+ void sync(ui::Window window);
+
+ void connect(ui::Window window);
+
+ const WindowPosition &getPosition() const;
+
+//hack
+ void setPosition(const WindowPosition &position);
+};
+struct WindowPositionTracker_String {
+ static void Export(const WindowPositionTracker &self, const Callback<void(const char *)> &returnz);
+
+ static void Import(WindowPositionTracker &self, const char *value);
+};
#endif