]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/groupdialog.cpp
default texture is notex, not textures/ dir
[xonotic/netradiant.git] / radiant / groupdialog.cpp
index 2e717d121d631d44e8cabdb96b665e749f278f14..0da79fb397343bf3ae04b2347078620b4049ba05 100644 (file)
 //
 
 #include "groupdialog.h"
+#include "globaldefs.h"
 
 #include "debugging/debugging.h"
 
 #include <vector>
-
-#include <gtk/gtknotebook.h>
-#include <gtk/gtktextview.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtk.h>
 
 #include "gtkutil/widget.h"
 #include "gtkutil/accelerator.h"
 #include "commands.h"
 
 
-#include <gtk/gtkwidget.h>
 #include "gtkutil/window.h"
 
-class GroupDlg
-{
+class GroupDlg {
 public:
-GtkWidget* m_pNotebook;
-GtkWindow* m_window;
+    ui::Widget m_pNotebook{ui::null};
+    ui::Window m_window{ui::null};
 
-GroupDlg();
-void Create( GtkWindow* parent );
+    GroupDlg();
 
-void Show(){
-       // workaround for strange gtk behaviour - modifying the contents of a window while it is not visible causes the window position to change without sending a configure_event
-       m_position_tracker.sync( m_window );
-       gtk_widget_show( GTK_WIDGET( m_window ) );
-}
-void Hide(){
-       gtk_widget_hide( GTK_WIDGET( m_window ) );
-}
+    void Create(ui::Window parent);
 
-WindowPositionTracker m_position_tracker;
+    void Show()
+    {
+        // workaround for strange gtk behaviour - modifying the contents of a window while it is not visible causes the window position to change without sending a configure_event
+        m_position_tracker.sync(m_window);
+        m_window.show();
+    }
+
+    void Hide()
+    {
+        m_window.hide();
+    }
+
+    WindowPositionTracker m_position_tracker;
 };
 
-namespace
-{
-GroupDlg g_GroupDlg;
+namespace {
+    GroupDlg g_GroupDlg;
 
-std::size_t g_current_page;
-std::vector<StringExportCallback> g_pages;
+    std::size_t g_current_page;
+    std::vector<Callback<void(const Callback<void(const char *)> &)>> g_pages;
 }
 
-void GroupDialog_updatePageTitle( GtkWindow* window, std::size_t pageIndex ){
-       if ( pageIndex < g_pages.size() ) {
-               g_pages[pageIndex]( PointerCaller1<GtkWindow, const char*, gtk_window_set_title>( window ) );
-       }
+void GroupDialog_updatePageTitle(ui::Window window, std::size_t pageIndex)
+{
+    if (pageIndex < g_pages.size()) {
+        g_pages[pageIndex](PointerCaller<GtkWindow, void(const char *), gtk_window_set_title>(window));
+    }
 }
 
-static gboolean switch_page( GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data ){
-       GroupDialog_updatePageTitle( GTK_WINDOW( data ), page_num );
-       g_current_page = page_num;
+static gboolean switch_page(GtkNotebook *notebook, gpointer page, guint page_num, gpointer data)
+{
+    GroupDialog_updatePageTitle(ui::Window::from(data), page_num);
+    g_current_page = page_num;
 
-       return FALSE;
+    return FALSE;
 }
 
-GroupDlg::GroupDlg() : m_window( 0 ){
-       m_position_tracker.setPosition( c_default_window_pos );
+GroupDlg::GroupDlg() : m_window(ui::null)
+{
+    m_position_tracker.setPosition(c_default_window_pos);
 }
 
-void GroupDlg::Create( GtkWindow* parent ){
-       ASSERT_MESSAGE( m_window == 0, "dialog already created" );
+void GroupDlg::Create(ui::Window parent)
+{
+    ASSERT_MESSAGE(!m_window, "dialog already created");
 
-       GtkWindow* window = create_persistent_floating_window( "Entities", parent );
+    auto window = ui::Window(create_persistent_floating_window("Entities", parent));
 
-       global_accel_connect_window( window );
+    global_accel_connect_window(window);
 
-       window_connect_focus_in_clear_focus_widget( window );
+    window_connect_focus_in_clear_focus_widget(window);
 
-       m_window = window;
+    m_window = window;
 
-#ifdef WIN32
-       if ( g_multimon_globals.m_bStartOnPrimMon ) {
-               WindowPosition pos( m_position_tracker.getPosition() );
-               PositionWindowOnPrimaryScreen( pos );
-               m_position_tracker.setPosition( pos );
-       }
+#if GDEF_OS_WINDOWS
+    if ( g_multimon_globals.m_bStartOnPrimMon ) {
+        WindowPosition pos( m_position_tracker.getPosition() );
+        PositionWindowOnPrimaryScreen( pos );
+        m_position_tracker.setPosition( pos );
+    }
 #endif
-       m_position_tracker.connect( window );
+    m_position_tracker.connect(window);
 
-       {
-               GtkWidget* notebook = gtk_notebook_new();
-               gtk_widget_show( notebook );
-               gtk_container_add( GTK_CONTAINER( window ), notebook );
-               gtk_notebook_set_tab_pos( GTK_NOTEBOOK( notebook ), GTK_POS_BOTTOM );
-               m_pNotebook = notebook;
+    {
+        ui::Widget notebook = ui::Widget::from(gtk_notebook_new());
+        notebook.show();
+        window.add(notebook);
+        gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_BOTTOM);
+        m_pNotebook = notebook;
 
-               g_signal_connect( G_OBJECT( notebook ), "switch_page", G_CALLBACK( switch_page ), window );
-       }
+        notebook.connect("switch_page", G_CALLBACK(switch_page), (gpointer) window);
+    }
 }
 
 
-GtkWidget* GroupDialog_addPage( const char* tabLabel, GtkWidget* widget, const StringExportCallback& title ){
-       GtkWidget* w = gtk_label_new( tabLabel );
-       gtk_widget_show( w );
-       GtkWidget* page = gtk_notebook_get_nth_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gtk_notebook_insert_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), widget, w, -1 ) );
-       g_pages.push_back( title );
+ui::Widget GroupDialog_addPage(const char *tabLabel, ui::Widget widget,
+                               const Callback<void(const Callback<void(const char *)> &)> &title)
+{
+    ui::Widget w = ui::Label(tabLabel);
+    w.show();
+    auto page = ui::Widget::from(gtk_notebook_get_nth_page(GTK_NOTEBOOK(g_GroupDlg.m_pNotebook),
+                                                           gtk_notebook_insert_page(
+                                                                   GTK_NOTEBOOK(g_GroupDlg.m_pNotebook), widget, w,
+                                                                   -1)));
+    g_pages.push_back(title);
 
-       return page;
+    return page;
 }
 
 
-bool GroupDialog_isShown(){
-       return widget_is_visible( GTK_WIDGET( g_GroupDlg.m_window ) );
+bool GroupDialog_isShown()
+{
+    return g_GroupDlg.m_window.visible();
 }
-void GroupDialog_setShown( bool shown ){
-       shown ? g_GroupDlg.Show() : g_GroupDlg.Hide();
+
+void GroupDialog_setShown(bool shown)
+{
+    shown ? g_GroupDlg.Show() : g_GroupDlg.Hide();
 }
-void GroupDialog_ToggleShow(){
-       GroupDialog_setShown( !GroupDialog_isShown() );
+
+void GroupDialog_ToggleShow()
+{
+    GroupDialog_setShown(!GroupDialog_isShown());
 }
 
-void GroupDialog_constructWindow( GtkWindow* main_window ){
-       g_GroupDlg.Create( main_window );
+void GroupDialog_constructWindow(ui::Window main_window)
+{
+    g_GroupDlg.Create(main_window);
 }
-void GroupDialog_destroyWindow(){
-       ASSERT_NOTNULL( g_GroupDlg.m_window );
-       destroy_floating_window( g_GroupDlg.m_window );
-       g_GroupDlg.m_window = 0;
+
+void GroupDialog_destroyWindow()
+{
+    ASSERT_TRUE(g_GroupDlg.m_window);
+    destroy_floating_window(g_GroupDlg.m_window);
+    g_GroupDlg.m_window = ui::Window{ui::null};
 }
 
 
-GtkWindow* GroupDialog_getWindow(){
-       return g_GroupDlg.m_window;
+ui::Window GroupDialog_getWindow()
+{
+    return ui::Window(g_GroupDlg.m_window);
 }
-void GroupDialog_show(){
-       g_GroupDlg.Show();
+
+void GroupDialog_show()
+{
+    g_GroupDlg.Show();
 }
 
-GtkWidget* GroupDialog_getPage(){
-       return gtk_notebook_get_nth_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gint( g_current_page ) );
+ui::Widget GroupDialog_getPage()
+{
+    return ui::Widget::from(gtk_notebook_get_nth_page(GTK_NOTEBOOK(g_GroupDlg.m_pNotebook), gint(g_current_page)));
 }
 
-void GroupDialog_setPage( GtkWidget* page ){
-       g_current_page = gtk_notebook_page_num( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), page );
-       gtk_notebook_set_current_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gint( g_current_page ) );
+void GroupDialog_setPage(ui::Widget page)
+{
+    g_current_page = gtk_notebook_page_num(GTK_NOTEBOOK(g_GroupDlg.m_pNotebook), page);
+    gtk_notebook_set_current_page(GTK_NOTEBOOK(g_GroupDlg.m_pNotebook), gint(g_current_page));
 }
 
-void GroupDialog_showPage( GtkWidget* page ){
-       if ( GroupDialog_getPage() == page ) {
-               GroupDialog_ToggleShow();
-       }
-       else
-       {
-               gtk_widget_show( GTK_WIDGET( g_GroupDlg.m_window ) );
-               GroupDialog_setPage( page );
-       }
+void GroupDialog_showPage(ui::Widget page)
+{
+    if (GroupDialog_getPage() == page) {
+        GroupDialog_ToggleShow();
+    } else {
+        g_GroupDlg.m_window.show();
+        GroupDialog_setPage(page);
+    }
 }
 
-void GroupDialog_cycle(){
-       g_current_page = ( g_current_page + 1 ) % g_pages.size();
-       gtk_notebook_set_current_page( GTK_NOTEBOOK( g_GroupDlg.m_pNotebook ), gint( g_current_page ) );
+void GroupDialog_cycle()
+{
+    g_current_page = (g_current_page + 1) % g_pages.size();
+    gtk_notebook_set_current_page(GTK_NOTEBOOK(g_GroupDlg.m_pNotebook), gint(g_current_page));
 }
 
-void GroupDialog_updatePageTitle( GtkWidget* page ){
-       if ( GroupDialog_getPage() == page ) {
-               GroupDialog_updatePageTitle( g_GroupDlg.m_window, g_current_page );
-       }
+void GroupDialog_updatePageTitle(ui::Widget page)
+{
+    if (GroupDialog_getPage() == page) {
+        GroupDialog_updatePageTitle(g_GroupDlg.m_window, g_current_page);
+    }
 }
 
 
 #include "preferencesystem.h"
 
-void GroupDialog_Construct(){
-       GlobalPreferenceSystem().registerPreference( "EntityWnd", WindowPositionTrackerImportStringCaller( g_GroupDlg.m_position_tracker ), WindowPositionTrackerExportStringCaller( g_GroupDlg.m_position_tracker ) );
+void GroupDialog_Construct()
+{
+    GlobalPreferenceSystem().registerPreference("EntityWnd", make_property<WindowPositionTracker_String>(
+            g_GroupDlg.m_position_tracker));
 
-       GlobalCommands_insert( "ViewEntityInfo", FreeCaller<GroupDialog_ToggleShow>(), Accelerator( 'N' ) );
+    GlobalCommands_insert("ViewEntityInfo", makeCallbackF(GroupDialog_ToggleShow), Accelerator('N'));
 }
-void GroupDialog_Destroy(){
+
+void GroupDialog_Destroy()
+{
 }