delete this;
}
void apply(){
- Scene_EntitySetKeyValue_Selected_Undoable( m_key.c_str(), m_check.active() ? "1" : "0" );
+ Scene_EntitySetKeyValue_Selected_Undoable( m_key.c_str(), m_check.active() ? "1" : "" );
}
typedef MemberCaller<BooleanAttribute, void(), &BooleanAttribute::apply> ApplyCaller;
namespace
{
+GtkWidget* g_entity_split0 = 0;
ui::Widget g_entity_split1{ui::null};
ui::Widget g_entity_split2{ui::null};
+int g_entitysplit0_position;
int g_entitysplit1_position;
int g_entitysplit2_position;
GtkTreeModel* model;
GtkTreeIter iter;
if ( gtk_tree_selection_get_selected( gtk_tree_view_get_selection( g_entityClassList ), &model, &iter ) == FALSE ) {
- view.window().alert( "You must have a selected class to create an entity", "info" );
+ ui::alert( view.window(), "You must have a selected class to create an entity", "info" );
return;
}
// TTimo: if you change the classname to worldspawn you won't merge back in the structural brushes but create a parasite entity
if ( !strcmp( key.c_str(), "classname" ) && !strcmp( value.c_str(), "worldspawn" ) ) {
- g_entityKeyEntry.window().alert( "Cannot change \"classname\" key back to worldspawn.", 0, ui::alert_type::OK );
+ ui::alert( g_entityKeyEntry.window(), "Cannot change \"classname\" key back to worldspawn.", 0, ui::alert_type::OK );
return;
}
// RR2DO2: we don't want spaces in entity keys
if ( strstr( key.c_str(), " " ) ) {
- g_entityKeyEntry.window().alert( "No spaces are allowed in entity keys.", 0, ui::alert_type::OK );
+ ui::alert( g_entityKeyEntry.window(), "No spaces are allowed in entity keys.", 0, ui::alert_type::OK );
return;
}
}
}
+static gint EntityInspector_clearKeyValueKB( GtkEntry* widget, GdkEventKey* event, gpointer data ){
+ if ( event->keyval == GDK_Delete ) {
+ EntityInspector_clearKeyValue();
+ return TRUE;
+ }
+ return FALSE;
+}
+
void EntityInspector_clearAllKeyValues(){
UndoableCommand undo( "entityClear" );
}
static gint EntityClassList_keypress( ui::Widget widget, GdkEventKey* event, gpointer data ){
- unsigned int code = gdk_keyval_to_upper( event->keyval );
-
if ( event->keyval == GDK_KEY_Return ) {
EntityClassList_createEntity();
return TRUE;
}
// select the entity that starts with the key pressed
- if ( code <= 'Z' && code >= 'A' ) {
+/*
+ unsigned int code = gdk_keyval_to_upper( event->keyval );
+ if ( code <= 'Z' && code >= 'A' && event->state == 0 ) {
auto view = ui::TreeView(g_entityClassList);
GtkTreeModel* model;
GtkTreeIter iter;
return TRUE;
}
+*/
return FALSE;
}
static gint EntityEntry_keypress( ui::Entry widget, GdkEventKey* event, gpointer data ){
if ( event->keyval == GDK_KEY_Return ) {
if ( widget._handle == g_entityKeyEntry._handle ) {
- g_entityValueEntry.text( "" );
+ // g_entityValueEntry.text( "" );
gtk_window_set_focus( widget.window(), g_entityValueEntry );
}
else
}
return TRUE;
}
- if ( event->keyval == GDK_KEY_Escape ) {
- gtk_window_set_focus( widget.window(), NULL );
+ if ( event->keyval == GDK_Tab ) {
+ if ( widget._handle == g_entityKeyEntry._handle ) {
+ gtk_window_set_focus( widget.window(), g_entityValueEntry );
+ }
+ else
+ {
+ gtk_window_set_focus( widget.window(), g_entityKeyEntry );
+ }
+ return TRUE;
+ }
+ if ( event->keyval == GDK_Escape ) {
+ // gtk_window_set_focus( widget.window(), NULL );
return TRUE;
}
}
void EntityInspector_destroyWindow( ui::Widget widget, gpointer data ){
+ g_entitysplit0_position = gtk_paned_get_position( GTK_PANED( g_entity_split0 ) );
g_entitysplit1_position = gtk_paned_get_position( GTK_PANED( g_entity_split1 ) );
g_entitysplit2_position = gtk_paned_get_position( GTK_PANED( g_entity_split2 ) );
-
g_entityInspector_windowConstructed = false;
GlobalEntityAttributes_clear();
}
+static gint EntityInspector_hideWindowKB( GtkWidget* widget, GdkEventKey* event, gpointer data ){
+ //if ( event->keyval == GDK_Escape && GTK_WIDGET_VISIBLE( GTK_WIDGET( widget ) ) ) {
+ if ( event->keyval == GDK_Escape ) {
+ //GroupDialog_showPage( g_page_entity );
+ gtk_widget_hide( GTK_WIDGET( GroupDialog_getWindow() ) );
+ return TRUE;
+ }
+ /* this doesn't work, if tab is bound (func is not called then) */
+ if ( event->keyval == GDK_Tab ) {
+ gtk_window_set_focus( GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET( widget ) ) ), GTK_WIDGET( g_entityKeyEntry ) );
+ return TRUE;
+ }
+ return FALSE;
+}
+
ui::Widget EntityInspector_constructWindow( ui::Window toplevel ){
auto vbox = ui::VBox( FALSE, 2 );
vbox.show();
gtk_container_set_border_width( GTK_CONTAINER( vbox ), 2 );
+ g_signal_connect( G_OBJECT( toplevel ), "key_press_event", G_CALLBACK( EntityInspector_hideWindowKB ), 0 );
vbox.connect( "destroy", G_CALLBACK( EntityInspector_destroyWindow ), 0 );
{
{
ui::Widget split2 = ui::VPaned(ui::New);
- gtk_paned_add1( GTK_PANED( split1 ), split2 );
+ //gtk_paned_add1( GTK_PANED( split1 ), split2 );
+ gtk_paned_pack1( GTK_PANED( split1 ), split2, FALSE, FALSE );
split2.show();
g_entity_split2 = split2;
// class list
auto scr = ui::ScrolledWindow(ui::New);
scr.show();
- gtk_paned_add1( GTK_PANED( split2 ), scr );
+ //gtk_paned_add1( GTK_PANED( split2 ), scr );
+ gtk_paned_pack1( GTK_PANED( split2 ), scr, FALSE, FALSE );
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scr ), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS );
gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( scr ), GTK_SHADOW_IN );
ui::ListStore store = ui::ListStore::from(gtk_list_store_new( 2, G_TYPE_STRING, G_TYPE_POINTER ));
auto view = ui::TreeView( ui::TreeModel::from( store._handle ));
- gtk_tree_view_set_enable_search(view, FALSE );
+ // gtk_tree_view_set_enable_search(view, FALSE );
gtk_tree_view_set_headers_visible( view, FALSE );
view.connect( "button_press_event", G_CALLBACK( EntityClassList_button_press ), 0 );
view.connect( "key_press_event", G_CALLBACK( EntityClassList_keypress ), 0 );
{
auto scr = ui::ScrolledWindow(ui::New);
scr.show();
- gtk_paned_add2( GTK_PANED( split2 ), scr );
+ //gtk_paned_add2( GTK_PANED( split2 ), scr );
+ gtk_paned_pack2( GTK_PANED( split2 ), scr, FALSE, FALSE );
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scr ), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS );
gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( scr ), GTK_SHADOW_IN );
}
{
- ui::Widget split2 = ui::VPaned(ui::New);
- gtk_paned_add2( GTK_PANED( split1 ), split2 );
- split2.show();
+ ui::Widget split0 = ui::VPaned(ui::New);
+ //gtk_paned_add2( GTK_PANED( split1 ), split0 );
+ gtk_paned_pack2( GTK_PANED( split1 ), split0, FALSE, FALSE );
+ split0.show();
+ g_entity_split0 = split0;
{
auto vbox2 = ui::VBox( FALSE, 2 );
vbox2.show();
- gtk_paned_pack1( GTK_PANED( split2 ), vbox2, FALSE, FALSE );
+ gtk_paned_pack1( GTK_PANED( split0 ), vbox2, FALSE, FALSE );
{
// Spawnflags (4 colums wide max, or window gets too wide.)
auto view = ui::TreeView(ui::TreeModel::from(store._handle));
gtk_tree_view_set_enable_search(view, FALSE );
gtk_tree_view_set_headers_visible(view, FALSE );
+ g_signal_connect( G_OBJECT( view ), "key_press_event", G_CALLBACK( EntityInspector_clearKeyValueKB ), 0 );
{
auto renderer = ui::CellRendererText(ui::New);
viewport.add(g_attributeBox);
scr.add(viewport);
- gtk_paned_pack2( GTK_PANED( split2 ), scr, FALSE, FALSE );
+ gtk_paned_pack2( GTK_PANED( split0 ), scr, FALSE, FALSE );
}
}
}
{
- // show the sliders in any case
- if ( g_entitysplit2_position > 22 ) {
- gtk_paned_set_position( GTK_PANED( g_entity_split2 ), g_entitysplit2_position );
- }
- else {
+ // show the sliders in any case //no need, gtk can care
+ /*if ( g_entitysplit2_position < 22 ) {
g_entitysplit2_position = 22;
- gtk_paned_set_position( GTK_PANED( g_entity_split2 ), 22 );
- }
- if ( ( g_entitysplit1_position - g_entitysplit2_position ) > 27 ) {
- gtk_paned_set_position( GTK_PANED( g_entity_split1 ), g_entitysplit1_position );
- }
- else {
- gtk_paned_set_position( GTK_PANED( g_entity_split1 ), g_entitysplit2_position + 27 );
- }
+ }*/
+ gtk_paned_set_position( GTK_PANED( g_entity_split2 ), g_entitysplit2_position );
+ /*if ( ( g_entitysplit1_position - g_entitysplit2_position ) < 27 ) {
+ g_entitysplit1_position = g_entitysplit2_position + 27;
+ }*/
+ gtk_paned_set_position( GTK_PANED( g_entity_split1 ), g_entitysplit1_position );
+ gtk_paned_set_position( GTK_PANED( g_entity_split0 ), g_entitysplit0_position );
}
g_entityInspector_windowConstructed = true;
void EntityInspector_construct(){
GlobalEntityClassManager().attach( g_EntityInspector );
+ GlobalPreferenceSystem().registerPreference( "EntitySplit0", make_property_string( g_entitysplit0_position ) );
GlobalPreferenceSystem().registerPreference( "EntitySplit1", make_property_string( g_entitysplit1_position ) );
GlobalPreferenceSystem().registerPreference( "EntitySplit2", make_property_string( g_entitysplit2_position ) );