misc...
* made shaderplug msg to look not like error (but barely noticeable)
* removed Texdef_FitTexture copypasted code
* ctrl+shift+mouse strafe mode: moving mouse forward moves camera forward, back - back
* add map to recent ones on SaveMap (instead of doing that in 'open by cmd line': spoils the list)
* fix: spin buttons alignment in patch inspector
* fix: patch inspector window pos save/restore during run time
* removed console, texbro buttons in regular layout
* ent inspector: saving window splits pos in non regular layouts
* ent inspector: saving lower split pos aswell
* ent inspector: fix of: minimizing part behind middle to 0
* saving find/replace wnd pos; bringing ontop, if is (present + called)
* moved 'find unique name for' output to _DEBUG
* fix of 'GLib-CRITICAL **: Source ID was not found when attempting to remove it' in buid monitor timer
* fix: build menu customizing: command field is reachable right after creating new entry
char buf[80];
name_t r( "","" );
name_write( buf, name );
+ #ifdef _DEBUG
globalErrorStream() << "find unique name for " << buf << "\n";
globalErrorStream() << "> currently registered names:\n";
+ #endif
for ( names_t::const_iterator i = m_names.begin(); i != m_names.end(); ++i )
{
+ #ifdef _DEBUG
globalErrorStream() << ">> " << i->first.c_str() << ": ";
+ #endif
for ( PostFixes::postfixes_t::const_iterator j = i->second.m_postfixes.begin(); j != i->second.m_postfixes.end(); ++j )
{
j->first.write( buf );
+ #ifdef _DEBUG
globalErrorStream() << " '" << buf << "'";
+ #endif
}
+ #ifdef _DEBUG
globalErrorStream() << "\n";
+ #endif
}
names_t::const_iterator i = m_names.find( name.first );
if ( i == m_names.end() ) {
r = name_t( name.first, ( *i ).second.make_unique( name.second ) );
}
name_write( buf, r );
+ #ifdef _DEBUG
globalErrorStream() << "> unique name is " << buf << "\n";
+ #endif
return r;
}
Texdef_FitTexture( m_projection, m_shader.width(), m_shader.height(), normal, winding, s_repeat, t_repeat );
}
-void fitW( const Vector3& normal, const Winding& winding, float s_repeat, float t_repeat ){
- Texdef_FitTextureW( m_projection, m_shader.width(), m_shader.height(), normal, winding, s_repeat, t_repeat );
-}
-
-void fitH( const Vector3& normal, const Winding& winding, float s_repeat, float t_repeat ){
- Texdef_FitTextureH( m_projection, m_shader.width(), m_shader.height(), normal, winding, s_repeat, t_repeat );
-}
-
void emitTextureCoordinates( Winding& winding, const Vector3& normal, const Matrix4& localToWorld ){
Texdef_EmitTextureCoordinates( m_projection, m_shader.width(), m_shader.height(), winding, normal, localToWorld );
}
texdefChanged();
}
-void FitTextureW( float s_repeat, float t_repeat ){
- undoSave();
- m_texdef.fitW( m_plane.plane3().normal(), m_winding, s_repeat, t_repeat );
- texdefChanged();
-}
-
-void FitTextureH( float s_repeat, float t_repeat ){
- undoSave();
- m_texdef.fitH( m_plane.plane3().normal(), m_winding, s_repeat, t_repeat );
- texdefChanged();
-}
-
void EmitTextureCoordinates(){
Texdef_EmitTextureCoordinates( m_texdefTransformed, m_shader.width(), m_shader.height(), m_winding, plane3().normal(), g_matrix4_identity );
}
bounds.extents.z() = 1;
// the bounds of a perfectly fitted texture transform
- AABB perfect( Vector3( s_repeat * 0.5, t_repeat * 0.5, 0 ), Vector3( s_repeat * 0.5, t_repeat * 0.5, 1 ) );
-
- // the difference between the current texture transform and the perfectly fitted transform
- Matrix4 matrix( matrix4_translation_for_vec3( bounds.origin - perfect.origin ) );
- matrix4_pivoted_scale_by_vec3( matrix, bounds.extents / perfect.extents, perfect.origin );
- matrix4_affine_invert( matrix );
-
- // apply the difference to the current texture transform
- matrix4_premultiply_by_matrix4( st2tex, matrix );
-
- Texdef_fromTransform( projection, (float)width, (float)height, st2tex );
- Texdef_normalise( projection, (float)width, (float)height );
-}
-
-void Texdef_FitTextureW( TextureProjection& projection, std::size_t width, std::size_t height, const Vector3& normal, const Winding& w, float s_repeat, float t_repeat ){
- if ( w.numpoints < 3 ) {
- return;
+ AABB perfect;
+ if( t_repeat == 0 && s_repeat == 0 ){
+ //bad user's input
+ t_repeat = s_repeat = 1;
+ perfect.origin = Vector3( s_repeat * 0.5, t_repeat * 0.5, 0 );
+ perfect.extents = Vector3( s_repeat * 0.5, t_repeat * 0.5, 1 );
+ }
+ if( t_repeat == 0 ){
+ //fit width
+ perfect.origin = Vector3( s_repeat * 0.5, s_repeat * 0.5 * bounds.extents.y() / bounds.extents.x(), 0 );
+ perfect.extents = Vector3( s_repeat * 0.5, s_repeat * 0.5 * bounds.extents.y() / bounds.extents.x(), 1 );
+ }
+ else if( s_repeat == 0 ){
+ //fit height
+ perfect.origin = Vector3( t_repeat * 0.5 * bounds.extents.x() / bounds.extents.y(), t_repeat * 0.5, 0 );
+ perfect.extents = Vector3( t_repeat * 0.5 * bounds.extents.x() / bounds.extents.y(), t_repeat * 0.5, 1 );
+ }
+ else{
+ perfect.origin = Vector3( s_repeat * 0.5, t_repeat * 0.5, 0 );
+ perfect.extents = Vector3( s_repeat * 0.5, t_repeat * 0.5, 1 );
}
- Matrix4 st2tex;
- Texdef_toTransform( projection, (float)width, (float)height, st2tex );
-
- // the current texture transform
- Matrix4 local2tex = st2tex;
- {
- Matrix4 xyz2st;
- Texdef_basisForNormal( projection, normal, xyz2st );
- matrix4_multiply_by_matrix4( local2tex, xyz2st );
- }
-
- // the bounds of the current texture transform
- AABB bounds;
- for ( Winding::const_iterator i = w.begin(); i != w.end(); ++i )
- {
- Vector3 texcoord = matrix4_transformed_point( local2tex, ( *i ).vertex );
- aabb_extend_by_point_safe( bounds, texcoord );
- }
- bounds.origin.z() = 0;
- bounds.extents.z() = 1;
-
- // the bounds of a perfectly fitted texture transform
- AABB perfect( Vector3( s_repeat * 0.5, s_repeat * 0.5 * bounds.extents.y() / bounds.extents.x(), 0 ), Vector3( s_repeat * 0.5, s_repeat * 0.5 * bounds.extents.y() / bounds.extents.x(), 1 ) );
-
- // the difference between the current texture transform and the perfectly fitted transform
- Matrix4 matrix( matrix4_translation_for_vec3( bounds.origin - perfect.origin ) );
- matrix4_pivoted_scale_by_vec3( matrix, bounds.extents / perfect.extents, perfect.origin );
- matrix4_affine_invert( matrix );
-
- // apply the difference to the current texture transform
- matrix4_premultiply_by_matrix4( st2tex, matrix );
-
- Texdef_fromTransform( projection, (float)width, (float)height, st2tex );
- Texdef_normalise( projection, (float)width, (float)height );
-}
-
-void Texdef_FitTextureH( TextureProjection& projection, std::size_t width, std::size_t height, const Vector3& normal, const Winding& w, float s_repeat, float t_repeat ){
- if ( w.numpoints < 3 ) {
- return;
- }
-
- Matrix4 st2tex;
- Texdef_toTransform( projection, (float)width, (float)height, st2tex );
-
- // the current texture transform
- Matrix4 local2tex = st2tex;
- {
- Matrix4 xyz2st;
- Texdef_basisForNormal( projection, normal, xyz2st );
- matrix4_multiply_by_matrix4( local2tex, xyz2st );
- }
-
- // the bounds of the current texture transform
- AABB bounds;
- for ( Winding::const_iterator i = w.begin(); i != w.end(); ++i )
- {
- Vector3 texcoord = matrix4_transformed_point( local2tex, ( *i ).vertex );
- aabb_extend_by_point_safe( bounds, texcoord );
- }
- bounds.origin.z() = 0;
- bounds.extents.z() = 1;
-
- // the bounds of a perfectly fitted texture transform
- AABB perfect( Vector3( t_repeat * 0.5 * bounds.extents.x() / bounds.extents.y(), t_repeat * 0.5, 0 ), Vector3( t_repeat * 0.5 * bounds.extents.x() / bounds.extents.y(), t_repeat * 0.5, 1 ) );
-
// the difference between the current texture transform and the perfectly fitted transform
Matrix4 matrix( matrix4_translation_for_vec3( bounds.origin - perfect.origin ) );
matrix4_pivoted_scale_by_vec3( matrix, bounds.extents / perfect.extents, perfect.origin );
void Texdef_Scale( TextureProjection& projection, float s, float t );
void Texdef_Rotate( TextureProjection& projection, float angle );
void Texdef_FitTexture( TextureProjection& projection, std::size_t width, std::size_t height, const Vector3& normal, const Winding& w, float s_repeat, float t_repeat );
-void Texdef_FitTextureW( TextureProjection& projection, std::size_t width, std::size_t height, const Vector3& normal, const Winding& w, float s_repeat, float t_repeat );
-void Texdef_FitTextureH( TextureProjection& projection, std::size_t width, std::size_t height, const Vector3& normal, const Winding& w, float s_repeat, float t_repeat );
void Texdef_EmitTextureCoordinates( const TextureProjection& projection, std::size_t width, std::size_t height, Winding& w, const Vector3& normal, const Matrix4& localToWorld );
void ShiftScaleRotate_fromFace( texdef_t& shiftScaleRotate, const TextureProjection& projection );
}
};
-class FaceFitTextureW
-{
-float m_s_repeat, m_t_repeat;
-public:
-FaceFitTextureW( float s_repeat, float t_repeat ) : m_s_repeat( s_repeat ), m_t_repeat( t_repeat ){
-}
-void operator()( Face& face ) const {
- face.FitTextureW( m_s_repeat, m_t_repeat );
-}
-};
-
-class FaceFitTextureH
-{
-float m_s_repeat, m_t_repeat;
-public:
-FaceFitTextureH( float s_repeat, float t_repeat ) : m_s_repeat( s_repeat ), m_t_repeat( t_repeat ){
-}
-void operator()( Face& face ) const {
- face.FitTextureH( m_s_repeat, m_t_repeat );
-}
-};
-
void Scene_BrushFitTexture_Selected( scene::Graph& graph, float s_repeat, float t_repeat ){
Scene_ForEachSelectedBrush_ForEachFace( graph, FaceFitTexture( s_repeat, t_repeat ) );
SceneChangeNotify();
SceneChangeNotify();
}
-void Scene_BrushFitTexture_SelectedW( scene::Graph& graph, float s_repeat, float t_repeat ){
- Scene_ForEachSelectedBrush_ForEachFace( graph, FaceFitTextureW( s_repeat, t_repeat ) );
- SceneChangeNotify();
-}
-
-void Scene_BrushFitTexture_Component_SelectedW( scene::Graph& graph, float s_repeat, float t_repeat ){
- Scene_ForEachSelectedBrushFace( graph, FaceFitTextureW( s_repeat, t_repeat ) );
- SceneChangeNotify();
-}
-
-void Scene_BrushFitTexture_SelectedH( scene::Graph& graph, float s_repeat, float t_repeat ){
- Scene_ForEachSelectedBrush_ForEachFace( graph, FaceFitTextureH( s_repeat, t_repeat ) );
- SceneChangeNotify();
-}
-
-void Scene_BrushFitTexture_Component_SelectedH( scene::Graph& graph, float s_repeat, float t_repeat ){
- Scene_ForEachSelectedBrushFace( graph, FaceFitTextureH( s_repeat, t_repeat ) );
- SceneChangeNotify();
-}
-
TextureProjection g_defaultTextureProjection;
const TextureProjection& TextureTransform_getDefault(){
TexDef_Construct_Default( g_defaultTextureProjection );
void Scene_BrushSelectByShader_Component( scene::Graph& graph, const char* name );
void Scene_BrushFitTexture_Selected( scene::Graph& graph, float s_repeat, float t_repeat );
void Scene_BrushFitTexture_Component_Selected( scene::Graph& graph, float s_repeat, float t_repeat );
-void Scene_BrushFitTexture_SelectedW( scene::Graph& graph, float s_repeat, float t_repeat );
-void Scene_BrushFitTexture_Component_SelectedW( scene::Graph& graph, float s_repeat, float t_repeat );
-void Scene_BrushFitTexture_SelectedH( scene::Graph& graph, float s_repeat, float t_repeat );
-void Scene_BrushFitTexture_Component_SelectedH( scene::Graph& graph, float s_repeat, float t_repeat );
typedef struct _GtkMenu GtkMenu;
void Brush_constructMenu( GtkMenu* menu );
public:
Project& m_project;
GtkListStore* m_store;
+GtkWidget* m_buildView;
bool m_changed;
ProjectList( Project& project ) : m_project( project ), m_changed( false ){
}
gtk_list_store_set( projectList->m_store, &iter, 0, new_text, -1 );
GtkTreeIter lastIter;
gtk_list_store_append( projectList->m_store, &lastIter );
+ //make command field activatable
+ g_signal_emit_by_name( G_OBJECT( gtk_tree_view_get_selection( GTK_TREE_VIEW( projectList->m_buildView ) ) ), "changed" );
}
gtk_tree_path_free( path );
gtk_widget_show( view );
buildView = view;
+ projectList.m_buildView = buildView;
projectList.m_store = store;
gtk_container_add( GTK_CONTAINER( scr ), view );
camera.origin -= camera.vright * strafespeed * dx;
if ( camera.m_strafe_forward ) {
- camera.origin += camera.vpn * strafespeed * dy;
+ camera.origin -= camera.vpn * strafespeed * dy;
}
else{
camera.origin += camera.vup * strafespeed * dy;
namespace
{
+GtkWidget* g_entity_split0 = 0;
GtkWidget* g_entity_split1 = 0;
GtkWidget* g_entity_split2 = 0;
+int g_entitysplit0_position;
int g_entitysplit1_position;
int g_entitysplit2_position;
}
void EntityInspector_destroyWindow( GtkWidget* 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_destroyWindowKB( GtkWidget* widget, GdkEventKey* event, gpointer data ){
+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 ) {
- //globalErrorStream() << "Doom3Light_getBounds: failed to parse default light radius\n";
- GroupDialog_showPage( g_page_entity );
+ //GroupDialog_showPage( g_page_entity );
+ gtk_widget_hide( GTK_WIDGET( GroupDialog_getWindow() ) );
return TRUE;
}
if ( event->keyval == GDK_Tab ) {
gtk_widget_show( vbox );
gtk_container_set_border_width( GTK_CONTAINER( vbox ), 2 );
- g_signal_connect( G_OBJECT( toplevel ), "key_press_event", G_CALLBACK( EntityInspector_destroyWindowKB ), 0 );
+ g_signal_connect( G_OBJECT( toplevel ), "key_press_event", G_CALLBACK( EntityInspector_hideWindowKB ), 0 );
g_signal_connect( G_OBJECT( vbox ), "destroy", G_CALLBACK( EntityInspector_destroyWindow ), 0 );
{
{
GtkWidget* split2 = gtk_vpaned_new();
- gtk_paned_add1( GTK_PANED( split1 ), split2 );
+ //gtk_paned_add1( GTK_PANED( split1 ), split2 );
+ gtk_paned_pack1( GTK_PANED( split1 ), split2, FALSE, FALSE );
gtk_widget_show( split2 );
g_entity_split2 = split2;
// class list
GtkWidget* scr = gtk_scrolled_window_new( 0, 0 );
gtk_widget_show( scr );
- 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 );
{
GtkWidget* scr = gtk_scrolled_window_new( 0, 0 );
gtk_widget_show( scr );
- 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 );
}
{
- GtkWidget* split2 = gtk_vpaned_new();
- gtk_paned_add2( GTK_PANED( split1 ), split2 );
- gtk_widget_show( split2 );
+ GtkWidget* split0 = gtk_vpaned_new();
+ //gtk_paned_add2( GTK_PANED( split1 ), split0 );
+ gtk_paned_pack2( GTK_PANED( split1 ), split0, FALSE, FALSE );
+ gtk_widget_show( split0 );
+ g_entity_split0 = split0;
{
GtkWidget* vbox2 = gtk_vbox_new( FALSE, 2 );
gtk_widget_show( vbox2 );
- 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.)
gtk_container_add( GTK_CONTAINER( viewport ), GTK_WIDGET( g_attributeBox ) );
gtk_container_add( GTK_CONTAINER( scr ), 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", IntImportStringCaller( g_entitysplit0_position ), IntExportStringCaller( g_entitysplit0_position ) );
GlobalPreferenceSystem().registerPreference( "EntitySplit1", IntImportStringCaller( g_entitysplit1_position ), IntExportStringCaller( g_entitysplit1_position ) );
GlobalPreferenceSystem().registerPreference( "EntitySplit2", IntImportStringCaller( g_entitysplit2_position ), IntExportStringCaller( g_entitysplit2_position ) );
class FindTextureDialog : public Dialog
{
public:
+WindowPositionTracker m_position_tracker;
static void setReplaceStr( const char* name );
static void setFindStr( const char* name );
static bool isOpen();
FindTextureDialog::FindTextureDialog(){
m_bSelectedOnly = FALSE;
+ //m_position_tracker.setPosition( c_default_window_pos );
}
FindTextureDialog::~FindTextureDialog(){
GtkWindow* dlg = create_floating_window( "Find / Replace Texture(s)", m_parent );
+ m_position_tracker.connect( dlg );
+
hbox = gtk_hbox_new( FALSE, 5 );
gtk_widget_show( hbox );
gtk_container_add( GTK_CONTAINER( dlg ), GTK_WIDGET( hbox ) );
}
void FindTextureDialog::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
+ g_FindTextureDialog.m_position_tracker.sync( g_FindTextureDialog.GetWidget() );
g_FindTextureDialog.ShowDlg();
+ gtk_window_present( g_FindTextureDialog.GetWidget() );
}
g_FindTextureDialog.updateTextures( name );
}
+#include "preferencesystem.h"
+
void FindTextureDialog_Construct(){
GlobalCommands_insert( "FindReplaceTextures", FindTextureDialog::ShowCaller() );
+ GlobalPreferenceSystem().registerPreference( "FindReplacehWnd", WindowPositionTrackerImportStringCaller( g_FindTextureDialog.m_position_tracker ), WindowPositionTrackerExportStringCaller( g_FindTextureDialog.m_position_tracker ) );
}
void FindTextureDialog_Destroy(){
{
GtkButton* button = create_dialog_button( "Credits", G_CALLBACK( about_button_credits ), 0 );
gtk_box_pack_start( GTK_BOX( vbox2 ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
+ gtk_widget_set_sensitive( GTK_WIDGET( button ), FALSE);
}
{
GtkButton* button = create_dialog_button( "Changelog", G_CALLBACK( about_button_changelog ), 0 );
gtk_box_pack_start( GTK_BOX( vbox2 ), GTK_WIDGET( button ), FALSE, FALSE, 0 );
+ gtk_widget_set_sensitive( GTK_WIDGET( button ), FALSE);
}
}
}
}
void XYWnd_constructToolbar( GtkToolbar* toolbar ){
- toolbar_append_button( toolbar, "Change views", "view_change.png", "NextView" );
+ toolbar_append_button( toolbar, "Change views (CTRL + TAB)", "view_change.png", "NextView" );
}
void Manipulators_constructToolbar( GtkToolbar* toolbar ){
ComponentModes_constructToolbar( toolbar );
- if ( style == MainFrame::eRegular || style == MainFrame::eRegularLeft || style == MainFrame::eFloating ) {
+ if ( style == MainFrame::eRegular || style == MainFrame::eRegularLeft ) {
gtk_toolbar_append_space( GTK_TOOLBAR( toolbar ) );
XYWnd_constructToolbar( toolbar );
gtk_toolbar_append_space( GTK_TOOLBAR( toolbar ) );
GtkButton* g_view_entities_button = toolbar_append_button( toolbar, "Entities (N)", "entities.png", "ToggleEntityInspector" );
- GtkButton* g_view_console_button = toolbar_append_button( toolbar, "Console (O)", "console.png", "ToggleConsole" );
- GtkButton* g_view_textures_button = toolbar_append_button( toolbar, "Texture Browser (T)", "texture_browser.png", "ToggleTextures" );
+ // disable the console and texture button in the regular layouts
+ if ( style != MainFrame::eRegular && style != MainFrame::eRegularLeft ) {
+ GtkButton* g_view_console_button = toolbar_append_button( toolbar, "Console (O)", "console.png", "ToggleConsole" );
+ GtkButton* g_view_textures_button = toolbar_append_button( toolbar, "Texture Browser (T)", "texture_browser.png", "ToggleTextures" );
+ }
+
// TODO: call light inspector
//GtkButton* g_view_lightinspector_button = toolbar_append_button(toolbar, "Light Inspector", "lightinspector.png", "ToggleLightInspector");
gtk_toolbar_append_space( GTK_TOOLBAR( toolbar ) );
GtkButton* g_refresh_models_button = toolbar_append_button( toolbar, "Refresh Models", "refresh_models.png", "RefreshReferences" );
-
- // disable the console and texture button in the regular layouts
- if ( style == MainFrame::eRegular || style == MainFrame::eRegularLeft ) {
- gtk_widget_set_sensitive( GTK_WIDGET( g_view_console_button ), FALSE );
- gtk_widget_set_sensitive( GTK_WIDGET( g_view_textures_button ), FALSE );
- }
-
return toolbar;
}
gtk_box_pack_end( GTK_BOX( vbox ), main_statusbar, FALSE, TRUE, 2 );
GroupDialog_constructWindow( window );
+
+ /* want to realize it immediately; otherwise gtk paned splits positions wont be set correctly for floating group dlg */
+ gtk_widget_realize ( GTK_WIDGET( GroupDialog_getWindow() ) );
+
g_page_entity = GroupDialog_addPage( "Entities", EntityInspector_constructWindow( GroupDialog_getWindow() ), RawStringExportCaller( "Entities" ) );
if ( FloatingGroupDialog() ) {
}
else if ( Map_Modified( g_map ) ) {
Map_Save();
+#ifdef WIN32
+ MRU_AddFile( g_map.m_name.c_str() ); //add on saving, but not opening via cmd line: spoils the list
+#endif
}
}
void DoPatchInspector(){
g_PatchInspector.GetPatchInfo();
if ( !g_PatchInspector.visible() ) {
+ // 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
+ g_PatchInspector.m_position_tracker.sync( g_PatchInspector.GetWidget() );
g_PatchInspector.ShowDlg();
}
}
gtk_table_attach( table, GTK_WIDGET( spin ), 1, 2, 0, 1,
(GtkAttachOptions)( 0 ),
(GtkAttachOptions)( 0 ), 0, 0 );
- gtk_widget_set_usize( GTK_WIDGET( spin ), 10, -2 );
+ gtk_widget_set_usize( GTK_WIDGET( spin ), 16, -2 );
GTK_WIDGET_UNSET_FLAGS( spin, GTK_CAN_FOCUS );
}
{
gtk_table_attach( table, GTK_WIDGET( spin ), 1, 2, 1, 2,
(GtkAttachOptions)( 0 ),
(GtkAttachOptions)( 0 ), 0, 0 );
- gtk_widget_set_usize( GTK_WIDGET( spin ), 10, -2 );
+ gtk_widget_set_usize( GTK_WIDGET( spin ), 16, -2 );
GTK_WIDGET_UNSET_FLAGS( spin, GTK_CAN_FOCUS );
}
{
gtk_table_attach( table, GTK_WIDGET( spin ), 1, 2, 2, 3,
(GtkAttachOptions)( 0 ),
(GtkAttachOptions)( 0 ), 0, 0 );
- gtk_widget_set_usize( GTK_WIDGET( spin ), 10, -2 );
+ gtk_widget_set_usize( GTK_WIDGET( spin ), 16, -2 );
GTK_WIDGET_UNSET_FLAGS( spin, GTK_CAN_FOCUS );
}
{
gtk_table_attach( table, GTK_WIDGET( spin ), 1, 2, 3, 4,
(GtkAttachOptions)( 0 ),
(GtkAttachOptions)( 0 ), 0, 0 );
- gtk_widget_set_usize( GTK_WIDGET( spin ), 10, -2 );
+ gtk_widget_set_usize( GTK_WIDGET( spin ), 16, -2 );
GTK_WIDGET_UNSET_FLAGS( spin, GTK_CAN_FOCUS );
}
{
gtk_table_attach( table, GTK_WIDGET( spin ), 1, 2, 4, 5,
(GtkAttachOptions)( 0 ),
(GtkAttachOptions)( 0 ), 0, 0 );
- gtk_widget_set_usize( GTK_WIDGET( spin ), 10, -2 );
+ gtk_widget_set_usize( GTK_WIDGET( spin ), 16, -2 );
GTK_WIDGET_UNSET_FLAGS( spin, GTK_CAN_FOCUS );
}
}
SceneChangeNotify();
}
-void Select_FitTextureW( float horizontal, float vertical ){
- if ( GlobalSelectionSystem().Mode() != SelectionSystem::eComponent ) {
- Scene_BrushFitTexture_SelectedW( GlobalSceneGraph(), horizontal, vertical );
- }
- Scene_BrushFitTexture_Component_SelectedW( GlobalSceneGraph(), horizontal, vertical );
-
- SceneChangeNotify();
-}
-
-void Select_FitTextureH( float horizontal, float vertical ){
- if ( GlobalSelectionSystem().Mode() != SelectionSystem::eComponent ) {
- Scene_BrushFitTexture_SelectedH( GlobalSceneGraph(), horizontal, vertical );
- }
- Scene_BrushFitTexture_Component_SelectedH( GlobalSceneGraph(), horizontal, vertical );
-
- SceneChangeNotify();
-}
-
inline void hide_node( scene::Node& node, bool hide ){
hide
? node.enable( scene::Node::eHidden )
void Select_ScaleTexture( float x, float y );
void Select_ShiftTexture( float x, float y );
void Select_FitTexture( float horizontal = 1, float vertical = 1 );
-void Select_FitTextureW( float horizontal = 1, float vertical = 1 );
-void Select_FitTextureH( float horizontal = 1, float vertical = 1 );
void FindReplaceTextures( const char* pFind, const char* pReplace, bool bSelected );
void HideSelected();
}
getSurfaceInspector().Update();
- getSurfaceInspector().importData();
+ //getSurfaceInspector().importData(); //happens in .ShowDlg() anyway
getSurfaceInspector().ShowDlg();
}
void SurfaceInspector_FitTextureW(){
UndoableCommand undo( "textureAutoFitW" );
- Select_FitTextureW( getSurfaceInspector().m_fitHorizontal, getSurfaceInspector().m_fitVertical );
+ Select_FitTexture( getSurfaceInspector().m_fitHorizontal, 0 );
}
void SurfaceInspector_FitTextureH(){
UndoableCommand undo( "textureAutoFitH" );
- Select_FitTextureH( getSurfaceInspector().m_fitHorizontal, getSurfaceInspector().m_fitVertical );
+ Select_FitTexture( 0, getSurfaceInspector().m_fitVertical );
}
static void OnBtnPatchdetails( GtkWidget *widget, gpointer data ){
}
else
{
- globalErrorStream() << "Unable to find default tag file " << default_filename.c_str() << ". No tag support.\n";
+ globalOutputStream() << "Unable to find default tag file " << default_filename.c_str() << ". No tag support. Plugins -> ShaderPlug -> Create tag file: to start using tags\n";
}
}
}
// ------------------------------------------------------------------------------------------------
-guint s_routine_id;
+guint s_routine_id = 0;
static gint watchbsp_routine( gpointer data ){
reinterpret_cast<CWatchBSP*>( data )->RoutineProcessing();
return TRUE;
m_xmlInputBuffer = NULL;
}
m_eState = EIdle;
- if ( s_routine_id ) {
+ if ( s_routine_id != 0 ) {
gtk_timeout_remove( s_routine_id );
+ s_routine_id = 0;
}
}