--- /dev/null
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
+
+find_package(OpenGL REQUIRED)
+
+string(SUBSTRING ${CMAKE_SHARED_MODULE_SUFFIX} 1 -1 _clibext)
+add_definitions(-DCMAKE_SHARED_MODULE_SUFFIX="${_clibext}")
+unset(_clibext)
+
+set(RADIANTLIST
+ autosave.cpp autosave.h
+ brush.cpp brush.h
+ brush_primit.cpp brush_primit.h
+ brushmanip.cpp brushmanip.h
+ brushmodule.cpp brushmodule.h
+ brushnode.cpp brushnode.h
+ brushtokens.cpp brushtokens.h
+ brushxml.cpp brushxml.h
+ build.cpp build.h
+ camwindow.cpp camwindow.h
+ clippertool.cpp clippertool.h
+ commands.cpp commands.h
+ console.cpp console.h
+ csg.cpp csg.h
+ dialog.cpp dialog.h
+ eclass.cpp eclass.h
+ eclass_def.cpp eclass_def.h
+ eclass_doom3.cpp eclass_doom3.h
+ eclass_fgd.cpp eclass_fgd.h
+ eclass_xml.cpp eclass_xml.h
+ entity.cpp entity.h
+ entityinspector.cpp entityinspector.h
+ entitylist.cpp entitylist.h
+ environment.cpp environment.h
+ error.cpp error.h
+ feedback.cpp feedback.h
+ filetypes.cpp filetypes.h
++ filterbar.cpp filterbar.h
+ filters.cpp filters.h
+ findtexturedialog.cpp findtexturedialog.h
+ glwidget.cpp glwidget.h
+ grid.cpp grid.h
+ groupdialog.cpp groupdialog.h
+ gtkdlgs.cpp gtkdlgs.h
+ gtkmisc.cpp gtkmisc.h
+ help.cpp help.h
+ image.cpp image.h
+ main.cpp main.h
+ mainframe.cpp mainframe.h
+ map.cpp map.h
+ mru.cpp mru.h
+ nullmodel.cpp nullmodel.h
+ parse.cpp parse.h
+ patch.cpp patch.h
+ patchdialog.cpp patchdialog.h
+ patchmanip.cpp patchmanip.h
+ patchmodule.cpp patchmodule.h
+ plugin.cpp plugin.h
+ pluginapi.cpp pluginapi.h
+ pluginmanager.cpp pluginmanager.h
+ pluginmenu.cpp pluginmenu.h
+ plugintoolbar.cpp plugintoolbar.h
+ points.cpp points.h
+ preferencedictionary.cpp preferencedictionary.h
+ preferences.cpp preferences.h
+ qe3.cpp qe3.h
+ qgl.cpp qgl.h
+ referencecache.cpp referencecache.h
+ renderer.cpp renderer.h
+ renderstate.cpp renderstate.h
+ resource.h
+ scenegraph.cpp scenegraph.h
+ select.cpp select.h
+ selection.cpp selection.h
+ server.cpp server.h
+ shaders.cpp shaders.h
+ sockets.cpp sockets.h
+ stacktrace.cpp stacktrace.h
+ surfacedialog.cpp surfacedialog.h
+ texmanip.cpp texmanip.h
+ textureentry.cpp textureentry.h
+ textures.cpp textures.h
+ texwindow.cpp texwindow.h
+ timer.cpp timer.h
+ treemodel.cpp treemodel.h
+ undo.cpp undo.h
+ url.cpp url.h
+ view.cpp view.h
+ watchbsp.cpp watchbsp.h
+ winding.cpp winding.h
+ windowobservers.cpp windowobservers.h
+ xmlstuff.cpp xmlstuff.h
+ xywindow.cpp xywindow.h
+)
+if (WIN32)
+ list(APPEND RADIANTLIST multimon.cpp multimon.h)
+endif()
+
+radiant_tool(radiant WIN32 radiant.rc ${RADIANTLIST})
+add_dependencies(radiant modules)
+target_link_libraries(radiant
+ ${CMAKE_DL_LIBS}
+ ${LIBXML2_LIBRARIES}
+ ${OPENGL_gl_LIBRARY}
+ ${GTK${GTK_TARGET}_LIBRARIES}
+ ${GTKGL_LIBRARIES}
+ includes
+ cmdlib
+ container
+ ddslib
+ debugging
+ etclib
+ filematch
+ generic
+ l_net
+ math
+ mathlib
+ memory
+ modulesystem
+ os
+ picomodel
+ profile
+ script
+ signal
+ splines
+ stream
+ string
+ uilib
+ xmllib
+)
+if (X11_LIBRARIES)
+ target_link_libraries(radiant ${X11_LIBRARIES})
+endif ()
+
+copy_dlls(radiant)
--- /dev/null
-#include <gtk/gtktoolbar.h>
+ #include "filterbar.h"
-
-
++
++#include "gtk/gtk.h"
++
+ #include "gtkmisc.h"
+ #include "gtkutil/widget.h"
+ #include "stream/stringstream.h"
+ #include "select.h"
+ #include "iundo.h"
+ #include "preferences.h"
+
+ #include "commands.h"
+ #include "gtkutil/accelerator.h"
+ #include "generic/callback.h"
+
+
-gboolean ToggleActions0( GtkWidget *widget, GdkEvent *event, gpointer user_data ){
+ int ToggleActions = 0;
+ int ButtonNum = 0;
+
-gboolean Areaportals_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){
++
++gboolean ToggleActions0( ui::Widget widget, GdkEvent *event, gpointer user_data ){
+ ToggleActions = 0;
+ return FALSE;
+ //globalOutputStream() << "ToggleActions\n";
+ }
+
++
+ void SetCommonShader( const char* key, const char* shader ){
+ const char* gotShader = g_pGameDescription->getKeyValue( key );
+ UndoableCommand undo( "textureNameSetSelected" );
+ if ( gotShader && *gotShader ){
+ Select_SetShader( gotShader );
+ }
+ else{
+ Select_SetShader( shader );
+ }
+ }
+
+
-gboolean Caulk_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){
++gboolean Areaportals_button_press( ui::Widget widget, GdkEventButton *event, gpointer data ){
+ if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) {
+ if ( ButtonNum == 1 ){
+ ToggleActions %= 2;
+ }
+ else{
+ ToggleActions = 0;
+ ButtonNum = 1;
+ }
+ if( ToggleActions == 0 ){
+ SetCommonShader( "shader_nodraw", "textures/common/nodraw" );
+ }
+ else if( ToggleActions == 1 ){
+ SetCommonShader( "shader_nodrawnonsolid", "textures/common/nodrawnonsolid" );
+ }
+ //SetCommonShader( "shader_caulk", "textures/common/caulk" );
+ //globalOutputStream() << "Found '" << "fullname" << "'\n";
+ ToggleActions++;
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+
-gboolean Clip_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){
++gboolean Caulk_button_press( ui::Widget widget, GdkEventButton *event, gpointer data ){
+ if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) {
+ SetCommonShader( "shader_caulk", "textures/common/caulk" );
+ ToggleActions = 0;
+ return TRUE;
+ }
+ return FALSE;
+ }
+
-gboolean Liquids_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){
++
++gboolean Clip_button_press( ui::Widget widget, GdkEventButton *event, gpointer data ){
+ if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) {
+ if ( ButtonNum == 3 ){
+ ToggleActions %= 2;
+ }
+ else{
+ ToggleActions = 0;
+ ButtonNum = 3;
+ }
+ if( ToggleActions == 0 ){
+ SetCommonShader( "shader_clip", "textures/common/clip" );
+ }
+ else if( ToggleActions == 1 ){
+ SetCommonShader( "shader_weapclip", "textures/common/weapclip" );
+ }
+ ToggleActions++;
+ return TRUE;
+ }
+ return FALSE;
+ }
+
-gboolean Hint_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){
++
++gboolean Liquids_button_press( ui::Widget widget, GdkEventButton *event, gpointer data ){
+ if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) {
+ if ( ButtonNum == 4 ){
+ ToggleActions %= 3;
+ }
+ else{
+ ToggleActions = 0;
+ ButtonNum = 4;
+ }
+ if( ToggleActions == 0 ){
+ SetCommonShader( "shader_watercaulk", "textures/common/watercaulk" );
+ }
+ else if( ToggleActions == 1 ){
+ SetCommonShader( "shader_lavacaulk", "textures/common/lavacaulk" );
+ }
+ else if( ToggleActions == 2 ){
+ SetCommonShader( "shader_slimecaulk", "textures/common/slimecaulk" );
+ }
+ ToggleActions++;
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+
-gboolean Trigger_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){
++gboolean Hint_button_press( ui::Widget widget, GdkEventButton *event, gpointer data ){
+ if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) {
+ if ( ButtonNum == 5 ){
+ ToggleActions %= 3;
+ }
+ else{
+ ToggleActions = 0;
+ ButtonNum = 5;
+ }
+ if( ToggleActions == 0 ){
+ SetCommonShader( "shader_hint", "textures/common/hint" );
+ }
+ else if( ToggleActions == 1 ){
+ SetCommonShader( "shader_hintlocal", "textures/common/hintlocal" );
+ }
+ else if( ToggleActions == 2 ){
+ SetCommonShader( "shader_hintskip", "textures/common/hintskip" );
+ }
+ ToggleActions++;
+ return TRUE;
+ }
+ return FALSE;
+ }
+
-gboolean Detail_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){
++
++gboolean Trigger_button_press( ui::Widget widget, GdkEventButton *event, gpointer data ){
+ if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) {
+ SetCommonShader( "shader_trigger", "textures/common/trigger" );
+ ToggleActions = 0;
+ return TRUE;
+ }
+ return FALSE;
+ }
+
-gboolean Structural_button_press( GtkWidget *widget, GdkEventButton *event, gpointer data ){
++
++gboolean Detail_button_press( ui::Widget widget, GdkEventButton *event, gpointer data ){
+ if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) {
+ GlobalCommands_find( "MakeDetail" ).m_callback();
+ ToggleActions = 0;
+ return TRUE;
+ }
+ return FALSE;
+ }
+
-GtkToolbar* create_filter_toolbar(){
- GtkToolbar* filter_toolbar = GTK_TOOLBAR( gtk_toolbar_new() );
- gtk_widget_show( GTK_WIDGET( filter_toolbar ) );
- g_signal_connect( G_OBJECT( filter_toolbar ), "enter_notify_event", G_CALLBACK( ToggleActions0 ), 0 );
++
++gboolean Structural_button_press( ui::Widget widget, GdkEventButton *event, gpointer data ){
+ if ( event->button == 3 && event->type == GDK_BUTTON_PRESS ) {
+ GlobalCommands_find( "MakeStructural" ).m_callback();
+ ToggleActions = 0;
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+
- GtkToggleButton* button;
++ui::Toolbar create_filter_toolbar(){
++ auto filter_toolbar = ui::Toolbar::from( gtk_toolbar_new() );
++ gtk_orientable_set_orientation( GTK_ORIENTABLE(filter_toolbar), GTK_ORIENTATION_HORIZONTAL );
++ gtk_toolbar_set_style( filter_toolbar, GTK_TOOLBAR_ICONS );
++ filter_toolbar.show();
+
- toolbar_append_toggle_button( filter_toolbar, "World (ALT + 1)", "f-world.png", "FilterWorldBrushes" );
+
- button = toolbar_append_toggle_button( filter_toolbar, "Details (CTRL + D)\nRightClick: MakeDetail", "f-details.png", "FilterDetails" );
- g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Detail_button_press ), 0 );
++ auto space = [&]() {
++ auto btn = ui::ToolItem::from(gtk_separator_tool_item_new());
++ btn.show();
++ filter_toolbar.add(btn);
++ };
+
- button = toolbar_append_toggle_button( filter_toolbar, "Structural (CTRL + SHIFT + D)\nRightClick: MakeStructural", "f-structural.png", "FilterStructural" );
- g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Structural_button_press ), 0 );
++ g_signal_connect( G_OBJECT( filter_toolbar ), "enter_notify_event", G_CALLBACK( ToggleActions0 ), 0 );
++
++ toolbar_append_toggle_button( filter_toolbar, "World (ALT + 1)", "f-world.png", "FilterWorldBrushes" );
+
- gtk_toolbar_append_space( GTK_TOOLBAR( filter_toolbar ) );
-
- button = toolbar_append_toggle_button( filter_toolbar, "Areaportals (ALT + 3)\nRightClick: toggle tex\n\tnoDraw\n\tnoDrawNonSolid", "f-areaportal.png", "FilterAreaportals" );
- g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Areaportals_button_press ), 0 );
++ {
++ auto button = toolbar_append_toggle_button( filter_toolbar, "Details (CTRL + D)\nRightClick: MakeDetail", "f-details.png", "FilterDetails" );
++ g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Detail_button_press ), 0 );
++ }
+
++ {
++ auto button = toolbar_append_toggle_button( filter_toolbar, "Structural (CTRL + SHIFT + D)\nRightClick: MakeStructural", "f-structural.png", "FilterStructural" );
++ g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Structural_button_press ), 0 );
++ }
+
+ toolbar_append_toggle_button( filter_toolbar, "Patches (CTRL + P)", "patch_wireframe.png", "FilterPatches" );
- button = toolbar_append_toggle_button( filter_toolbar, "Liquids (ALT + 5)\nRightClick: toggle tex\n\twaterCaulk\n\tlavaCaulk\n\tslimeCaulk", "f-liquids.png", "FilterLiquids" );
- g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Liquids_button_press ), 0 );
++ space();
+
++ {
++ auto button = toolbar_append_toggle_button( filter_toolbar, "Areaportals (ALT + 3)\nRightClick: toggle tex\n\tnoDraw\n\tnoDrawNonSolid", "f-areaportal.png", "FilterAreaportals" );
++ g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Areaportals_button_press ), 0 );
++ }
+
+
+ toolbar_append_toggle_button( filter_toolbar, "Translucent (ALT + 4)", "f-translucent.png", "FilterTranslucent" );
+
- button = toolbar_append_toggle_button( filter_toolbar, "Caulk (ALT + 6)\nRightClick: tex Caulk", "f-caulk.png", "FilterCaulk" );
- g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Caulk_button_press ), 0 );
++ {
++ auto button = toolbar_append_toggle_button( filter_toolbar, "Liquids (ALT + 5)\nRightClick: toggle tex\n\twaterCaulk\n\tlavaCaulk\n\tslimeCaulk", "f-liquids.png", "FilterLiquids" );
++ g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Liquids_button_press ), 0 );
++ }
+
- button = toolbar_append_toggle_button( filter_toolbar, "Clips (ALT + 7)\nRightClick: toggle tex\n\tplayerClip\n\tweapClip", "f-clip.png", "FilterClips" );
- g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Clip_button_press ), 0 );
++ {
++ auto button = toolbar_append_toggle_button( filter_toolbar, "Caulk (ALT + 6)\nRightClick: tex Caulk", "f-caulk.png", "FilterCaulk" );
++ g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Caulk_button_press ), 0 );
++ }
+
- button = toolbar_append_toggle_button( filter_toolbar, "HintsSkips (CTRL + H)\nRightClick: toggle tex\n\thint\n\thintLocal\n\thintSkip", "f-hint.png", "FilterHintsSkips" );
- g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Hint_button_press ), 0 );
++ {
++ auto button = toolbar_append_toggle_button( filter_toolbar, "Clips (ALT + 7)\nRightClick: toggle tex\n\tplayerClip\n\tweapClip", "f-clip.png", "FilterClips" );
++ g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Clip_button_press ), 0 );
++ }
+
- gtk_toolbar_append_space( GTK_TOOLBAR( filter_toolbar ) );
++ {
++ auto button = toolbar_append_toggle_button( filter_toolbar, "HintsSkips (CTRL + H)\nRightClick: toggle tex\n\thint\n\thintLocal\n\thintSkip", "f-hint.png", "FilterHintsSkips" );
++ g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Hint_button_press ), 0 );
++ }
+
+ //toolbar_append_toggle_button( filter_toolbar, "Paths (ALT + 8)", "texture_lock.png", "FilterPaths" );
- button = toolbar_append_toggle_button( filter_toolbar, "Triggers (CTRL + SHIFT + T)\nRightClick: tex Trigger", "f-triggers.png", "FilterTriggers" );
- g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Trigger_button_press ), 0 );
++ space();
+ toolbar_append_toggle_button( filter_toolbar, "Entities (ALT + 2)", "f-entities.png", "FilterEntities" );
+ toolbar_append_toggle_button( filter_toolbar, "Lights (ALT + 0)", "lightinspector.png", "FilterLights" );
+ toolbar_append_toggle_button( filter_toolbar, "Models (SHIFT + M)", "f-models.png", "FilterModels" );
+
- gtk_toolbar_append_space( GTK_TOOLBAR( filter_toolbar ) );
++ {
++ auto button = toolbar_append_toggle_button( filter_toolbar, "Triggers (CTRL + SHIFT + T)\nRightClick: tex Trigger", "f-triggers.png", "FilterTriggers" );
++ g_signal_connect( G_OBJECT( button ), "button_press_event", G_CALLBACK( Trigger_button_press ), 0 );
++ }
+
+ //toolbar_append_toggle_button( filter_toolbar, "Decals (SHIFT + D)", "f-decals.png", "FilterDecals" );
++ space();
+ toolbar_append_button( filter_toolbar, "InvertFilters", "f-invert.png", "InvertFilters" );
+ toolbar_append_button( filter_toolbar, "ResetFilters", "f-reset.png", "ResetFilters" );
+ return filter_toolbar;
+ }
#include "renderstate.h"
#include "feedback.h"
#include "referencecache.h"
-
+#include "texwindow.h"
+ #include "filterbar.h"
struct layout_globals_t
}
}
if ( g_Layout_enableFilterToolbar.m_value ){
- auto filter_toolbar = create_filter_toolbar();
- filter_toolbar.show();
-
- auto space = [&]() {
- auto btn = gtk_separator_tool_item_new();
- gtk_widget_show(GTK_WIDGET(btn));
- gtk_container_add(GTK_CONTAINER(filter_toolbar), GTK_WIDGET(btn));
- };
-
- toolbar_append_toggle_button( filter_toolbar, "World (ALT + 1)", "f-world.bmp", "FilterWorldBrushes" );
- toolbar_append_toggle_button( filter_toolbar, "Details (CTRL + D)", "f-details.bmp", "FilterDetails" );
- toolbar_append_toggle_button( filter_toolbar, "Structural (CTRL + SHIFT + D)", "f-structural.bmp", "FilterStructural" );
- toolbar_append_toggle_button( filter_toolbar, "Patches (CTRL + P)", "patch_wireframe.png", "FilterPatches" );
- space();
- toolbar_append_toggle_button( filter_toolbar, "Areaportals (ALT + 3)", "f-areaportal.bmp", "FilterAreaportals" );
- toolbar_append_toggle_button( filter_toolbar, "Translucent (ALT + 4)", "f-translucent.bmp", "FilterTranslucent" );
- toolbar_append_toggle_button( filter_toolbar, "Liquids (ALT + 5)", "f-liquids.bmp", "FilterLiquids" );
- toolbar_append_toggle_button( filter_toolbar, "Caulk (ALT + 6)", "f-caulk.bmp", "FilterCaulk" );
- toolbar_append_toggle_button( filter_toolbar, "Clips (ALT + 7)", "f-clip.bmp", "FilterClips" );
- toolbar_append_toggle_button( filter_toolbar, "HintsSkips (CTRL + H)", "f-hint.bmp", "FilterHintsSkips" );
- //toolbar_append_toggle_button( filter_toolbar, "Paths (ALT + 8)", "texture_lock.bmp", "FilterPaths" );
- space();
- toolbar_append_toggle_button( filter_toolbar, "Entities (ALT + 2)", "f-entities.bmp", "FilterEntities" );
- toolbar_append_toggle_button( filter_toolbar, "Lights (ALT + 0)", "lightinspector.png", "FilterLights" );
- toolbar_append_toggle_button( filter_toolbar, "Models (SHIFT + M)", "f-models.bmp", "FilterModels" );
- toolbar_append_toggle_button( filter_toolbar, "Triggers (CTRL + SHIFT + T)", "f-triggers.bmp", "FilterTriggers" );
- //toolbar_append_toggle_button( filter_toolbar, "Decals (SHIFT + D)", "f-decals.bmp", "FilterDecals" );
- space();
- toolbar_append_button( filter_toolbar, "InvertFilters", "f-invert.bmp", "InvertFilters" );
- toolbar_append_button( filter_toolbar, "ResetFilters", "f-reset.bmp", "ResetFilters" );
-
- PFbox.pack_start( filter_toolbar, FALSE, FALSE, 0 );
- GtkToolbar* filter_toolbar = create_filter_toolbar();
- gtk_box_pack_start( GTK_BOX( PFbox ), GTK_WIDGET( filter_toolbar ), TRUE, TRUE, 0 );
++ ui::Toolbar filter_toolbar = create_filter_toolbar();
++ PFbox.pack_start( filter_toolbar, TRUE, TRUE, 0 );
}
}