bool g_TextureBrowser_fixedSize = true;
bool g_TextureBrowser_filterMissing = false;
bool g_TextureBrowser_filterFallback = true;
-bool g_TextureBrowser_enableAlpha = true;
+bool g_TextureBrowser_enableAlpha = false;
}
CopiedString g_notex;
if ( isNotex( shaderName ) ) {
return;
}
- if ( isNotex( texture ) ) {
- return;
- }
}
if ( texture != shaderName ) {
bool m_rmbSelected;
bool m_searchedTags;
bool m_tags;
+bool m_move_started;
// The uniform size (in pixels) that textures are resized to when m_resizeTextures is true.
int m_uniformTextureSize;
int m_uniformTextureMinSize;
+bool m_hideNonShadersInCommon;
// Return the display width of a texture in the texture browser
-/*void getTextureWH( qtexture_t* tex, int *width, int *height ){
- if ( !g_TextureBrowser_fixedSize ) {
- // Don't use uniform size
- *width = (int)( tex->width * ( (float)m_textureScale / 100 ) );
- *height = (int)( tex->height * ( (float)m_textureScale / 100 ) );
-
- }
- else if ( tex->width >= tex->height ) {
- // Texture is square, or wider than it is tall
- if ( tex->width >= m_uniformTextureSize ){
- *width = m_uniformTextureSize;
- *height = (int)( m_uniformTextureSize * ( (float)tex->height / tex->width ) );
- }
- else if ( tex->width <= m_uniformTextureMinSize ){
- *width = m_uniformTextureMinSize;
- *height = (int)( m_uniformTextureMinSize * ( (float)tex->height / tex->width ) );
- }
- else {
- *width = tex->width;
- *height = tex->height;
- }
- }
- else {
- // Texture taller than it is wide
- if ( tex->height >= m_uniformTextureSize ){
- *height = m_uniformTextureSize;
- *width = (int)( m_uniformTextureSize * ( (float)tex->width / tex->height ) );
- }
- else if ( tex->height <= m_uniformTextureMinSize ){
- *height = m_uniformTextureMinSize;
- *width = (int)( m_uniformTextureMinSize * ( (float)tex->width / tex->height ) );
- }
- else {
- *width = tex->width;
- *height = tex->height;
- }
- }
-}
-
-*/
void getTextureWH( qtexture_t* tex, int &W, int &H ){
// Don't use uniform size
W = (int)( tex->width * ( (float)m_textureScale / 100 ) );
H = (int)( tex->height * ( (float)m_textureScale / 100 ) );
+ if ( W < 1 ) W = 1;
+ if ( H < 1 ) H = 1;
if ( g_TextureBrowser_fixedSize ){
if ( W >= H ) {
m_rmbSelected( false ),
m_searchedTags( false ),
m_tags( false ),
+ m_move_started( false ),
m_uniformTextureSize( 160 ),
- m_uniformTextureMinSize( 48 ){
+ m_uniformTextureMinSize( 48 ),
+ m_hideNonShadersInCommon( true ){
}
};
textureBrowser.getTextureWH( q, nWidth, nHeight );
if ( layout.current_x + nWidth > textureBrowser.width - 8 && layout.current_row ) { // go to the next row unless the texture is the first on the row
layout.current_x = 8;
- layout.current_y -= layout.current_row + TextureBrowser_fontHeight( textureBrowser ) + 4;
+ layout.current_y -= layout.current_row + TextureBrowser_fontHeight( textureBrowser ) + 4;//+4
layout.current_row = 0;
}
}
// if texture_showinuse jump over non in-use textures
-bool Texture_IsShown( IShader* shader, bool show_shaders, bool show_textures, bool hideUnused ){
+bool Texture_IsShown( IShader* shader, bool show_shaders, bool show_textures, bool hideUnused, bool hideNonShadersInCommon ){
// filter missing shaders
// ugly: filter on built-in fallback name after substitution
if ( g_TextureBrowser_filterMissing ) {
if ( isNotex( shader->getName() ) ) {
return false;
}
- if ( isNotex( shader->getTexture()->name ) ) {
- return false;
- }
}
if ( g_TextureBrowser_currentDirectory == "Untagged" ) {
return false;
}
+ if( hideNonShadersInCommon && shader->IsDefault() && !shader->IsInUse() //&& g_TextureBrowser_currentDirectory != ""
+ && shader_equal_prefix( shader_get_textureName( shader->getName() ), TextureBrowser_getCommonShadersDir() ) ){
+ return false;
+ }
+
if ( GlobalTextureBrowser().m_searchedTags ) {
if ( !TextureSearch_IsShown( shader->getName() ) ) {
return false;
{
IShader* shader = QERApp_ActiveShaders_IteratorCurrent();
- if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused ) ) {
+ if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused, textureBrowser.m_hideNonShadersInCommon ) ) {
continue;
}
void realise(){
m_realiseCallbacks();
/* texturebrowser tree update on vfs restart */
- TextureBrowser_constructTreeStore();
+// TextureBrowser_constructTreeStore();
}
void unrealise(){
};
void TextureBrowser_ShowDirectory( TextureBrowser& textureBrowser, const char* directory ){
+ textureBrowser.m_searchedTags = false;
if ( TextureBrowser_showWads() ) {
g_TextureBrowser_currentDirectory = directory;
TextureBrowser_heightChanged( textureBrowser );
typedef FreeCaller<void(const Callback<void(bool)> &), TextureBrowser_enableAlpha> TextureBrowser_enableAlphaExport;
void TextureBrowser_SetHideUnused( TextureBrowser& textureBrowser, bool hideUnused ){
- if ( hideUnused ) {
- textureBrowser.m_hideUnused = true;
- }
- else
- {
- textureBrowser.m_hideUnused = false;
- }
+ textureBrowser.m_hideUnused = hideUnused;
textureBrowser.m_hideunused_item.update();
{
IShader* shader = QERApp_ActiveShaders_IteratorCurrent();
- if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused ) ) {
+ if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused, textureBrowser.m_hideNonShadersInCommon ) ) {
continue;
}
// we have found when texdef->name and the shader name match
// NOTE: as everywhere else for our comparisons, we are not case sensitive
if ( shader_equal( name, shader->getName() ) ) {
- int textureHeight = (int)( q->height * ( (float)textureBrowser.m_textureScale / 100 ) )
- + 2 * TextureBrowser_fontHeight( textureBrowser );
+ //int textureHeight = (int)( q->height * ( (float)textureBrowser.m_textureScale / 100 ) ) + 2 * TextureBrowser_fontHeight( textureBrowser );
+ int textureWidth, textureHeight;
+ textureBrowser.getTextureWH( q, textureWidth, textureHeight );
+ textureHeight += 2 * TextureBrowser_fontHeight( textureBrowser );
+
int originy = TextureBrowser_getOriginY( textureBrowser );
if ( y > originy ) {
- originy = y;
+ originy = y + 4;
}
if ( y - textureHeight < originy - textureBrowser.height ) {
{
IShader* shader = QERApp_ActiveShaders_IteratorCurrent();
- if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused ) ) {
+ if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused, textureBrowser.m_hideNonShadersInCommon ) ) {
continue;
}
By mouse click
==============
*/
-void SelectTexture( TextureBrowser& textureBrowser, int mx, int my, bool bShift ){
- IShader* shader = Texture_At( textureBrowser, mx, my );
- if ( shader != 0 ) {
- if ( bShift ) {
- if ( shader->IsDefault() ) {
- globalOutputStream() << "ERROR: " << shader->getName() << " is not a shader, it's a texture.\n";
- }
- else{
- ViewShader( shader->getShaderFileName(), shader->getName() );
- }
- }
- else
- {
+void SelectTexture( TextureBrowser& textureBrowser, int mx, int my, guint32 flags, bool texturizeSelection ){
+ if ( ( flags & GDK_SHIFT_MASK ) == 0 ) {
+ IShader* shader = Texture_At( textureBrowser, mx, my );
+ if ( shader != 0 ) {
TextureBrowser_SetSelectedShader( textureBrowser, shader->getName() );
TextureBrowser_textureSelected( shader->getName() );
- if ( !FindTextureDialog_isOpen() && !textureBrowser.m_rmbSelected ) {
- UndoableCommand undo( "textureNameSetSelected" );
- Select_SetShader( shader->getName() );
+ if ( !FindTextureDialog_isOpen() && !textureBrowser.m_rmbSelected && !texturizeSelection ) {
+ Select_SetShader_Undo( shader->getName() );
}
}
}
}
}
+void TextureBrowser_Tracking_MouseUp( TextureBrowser& textureBrowser ){
+ textureBrowser.m_move_started = false;
+ /* NetRadiantCustom did this instead:
+ textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_parent, false ); */
+ textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_gl_widget, false );
+}
+
void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){
+ if( textureBrowser.m_move_started ){
+ TextureBrowser_Tracking_MouseUp( textureBrowser );
+ }
+ textureBrowser.m_move_started = true;
+ /* NetRadiantCustom did this instead:
+ textureBrowser.m_freezePointer.freeze_pointer( textureBrowser.m_parent, textureBrowser.m_gl_widget, TextureBrowser_trackingDelta, &textureBrowser ); */
textureBrowser.m_freezePointer.freeze_pointer( textureBrowser.m_gl_widget, TextureBrowser_trackingDelta, &textureBrowser );
}
-void TextureBrowser_Tracking_MouseUp( TextureBrowser& textureBrowser ){
- textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_gl_widget );
+void TextureBrowser_Selection_MouseDown( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy, bool texturizeSelection ){
+ SelectTexture( textureBrowser, pointx, textureBrowser.height - 1 - pointy, flags, texturizeSelection );
}
-void TextureBrowser_Selection_MouseDown( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy ){
- SelectTexture( textureBrowser, pointx, textureBrowser.height - 1 - pointy, ( flags & GDK_SHIFT_MASK ) != 0 );
+void TextureBrowser_Selection_MouseUp( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy ){
+ if ( ( flags & GDK_SHIFT_MASK ) != 0 ) {
+ IShader* shader = Texture_At( textureBrowser, pointx, textureBrowser.height - 1 - pointy );
+ if ( shader != 0 ) {
+ if ( shader->IsDefault() ) {
+ globalOutputStream() << "ERROR: " << shader->getName() << " is not a shader, it's a texture.\n";
+ }
+ else{
+ ViewShader( shader->getShaderFileName(), shader->getName(), ( flags & GDK_CONTROL_MASK ) != 0 );
+ }
+ }
+ }
}
/*
{
IShader* shader = QERApp_ActiveShaders_IteratorCurrent();
- if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused ) ) {
+ if ( !Texture_IsShown( shader, textureBrowser.m_showShaders, textureBrowser.m_showTextures, textureBrowser.m_hideUnused, textureBrowser.m_hideNonShadersInCommon ) ) {
continue;
}
// if !texture_showinuse: (some textures displayed may not be in use)
// draw an additional square around with 0.5 1 0.5 color
glLineWidth( 1 );
- // shader border:
- if ( !shader->IsDefault() ) {
- //real 1px white/black stipple
- glColor3f( 0, 0, 0 );
- glDisable( GL_TEXTURE_2D );
-
- float xf = (float)x;
- float yf = (float)( y - TextureBrowser_fontHeight( textureBrowser ) );
- glBegin( GL_LINE_LOOP );
- glVertex2f( xf - 1.5,yf + 1.5 );
- glVertex2f( xf - 1.5,yf - nHeight - 1.5 );
- glVertex2f( xf + 1.5 + nWidth,yf - nHeight - 1.5 );
- glVertex2f( xf + 1.5 + nWidth,yf + 1.5 );
-
- glEnd();
-
- glEnable( GL_LINE_STIPPLE );
- glLineStipple( 1, 0x0FFF );
-
- glBegin( GL_LINE_LOOP );
- glColor3f( 1, 1, 1 );
-
- glVertex2f( xf - 1.5,yf + 1.5 );
- glVertex2f( xf - 1.5,yf - nHeight - 1.5 );
- glVertex2f( xf + 1.5 + nWidth,yf - nHeight - 1.5 );
- glVertex2f( xf + 1.5 + nWidth,yf + 1.5 );
-
- glEnd();
- glDisable( GL_LINE_STIPPLE );
- glEnable( GL_TEXTURE_2D );
-
- }
+ const float xf = (float)x;
+ const float yf = (float)( y - TextureBrowser_fontHeight( textureBrowser ) );
+ float xfMax = xf + 1.5 + nWidth;
+ float xfMin = xf - 1.5;
+ float yfMax = yf + 1.5;
+ float yfMin = yf - nHeight - 1.5;
+
+ //selected texture
if ( shader_equal( TextureBrowser_GetSelectedShader( textureBrowser ), shader->getName() ) ) {
glLineWidth( 2 );
if ( textureBrowser.m_rmbSelected ) {
else {
glColor3f( 1,0,0 );
}
+ xfMax += .5;
+ xfMin -= .5;
+ yfMax += .5;
+ yfMin -= .5;
glDisable( GL_TEXTURE_2D );
-
glBegin( GL_LINE_LOOP );
- glVertex2i( x - 4,y - TextureBrowser_fontHeight( textureBrowser ) + 4 );
- glVertex2i( x - 4,y - TextureBrowser_fontHeight( textureBrowser ) - nHeight - 4 );
- glVertex2i( x + 4 + nWidth,y - TextureBrowser_fontHeight( textureBrowser ) - nHeight - 4 );
- glVertex2i( x + 4 + nWidth,y - TextureBrowser_fontHeight( textureBrowser ) + 4 );
+ glVertex2f( xfMin ,yfMax );
+ glVertex2f( xfMin ,yfMin );
+ glVertex2f( xfMax ,yfMin );
+ glVertex2f( xfMax ,yfMax );
glEnd();
-
glEnable( GL_TEXTURE_2D );
- glLineWidth( 1 );
}
- // highlight in-use textures
+ // highlight in-use textures
else if ( !textureBrowser.m_hideUnused && shader->IsInUse() ) {
- //1px with float
- float xf = (float)x;
- float yf = (float)( y - TextureBrowser_fontHeight( textureBrowser ) );
- glColor3f( 0.5,1,0.5 );
- glDisable( GL_TEXTURE_2D );
- glBegin( GL_LINE_LOOP );
- glVertex2f( xf - 3.5,yf + 3.5 );
- glVertex2f( xf - 3.5,yf - nHeight - 3.5 );
- glVertex2f( xf + 3.5 + nWidth,yf - nHeight - 3.5 );
- glVertex2f( xf + 3.5 + nWidth,yf + 3.5 );
- glEnd();
- glEnable( GL_TEXTURE_2D );
- }
+ glColor3f( 0.5,1,0.5 );
+ glDisable( GL_TEXTURE_2D );
+ glBegin( GL_LINE_LOOP );
+ glVertex2f( xfMin ,yfMax );
+ glVertex2f( xfMin ,yfMin );
+ glVertex2f( xfMax ,yfMin );
+ glVertex2f( xfMax ,yfMax );
+ glEnd();
+ glEnable( GL_TEXTURE_2D );
+ }
+ // shader white border:
+ else if ( !shader->IsDefault() ) {
+ glColor3f( 1, 1, 1 );
+ glDisable( GL_TEXTURE_2D );
+ glBegin( GL_LINE_LOOP );
+ glVertex2f( xfMin ,yfMax );
+ glVertex2f( xfMin ,yfMin );
+ glVertex2f( xfMax ,yfMin );
+ glVertex2f( xfMax ,yfMax );
+ glEnd();
+ glEnable( GL_TEXTURE_2D );
+ }
+
+ // shader stipple:
+ if ( !shader->IsDefault() ) {
+ glEnable( GL_LINE_STIPPLE );
+ glLineStipple( 1, 0xF000 );
+ glDisable( GL_TEXTURE_2D );
+ glBegin( GL_LINE_LOOP );
+ glColor3f( 0, 0, 0 );
+ glVertex2f( xfMin ,yfMax );
+ glVertex2f( xfMin ,yfMin );
+ glVertex2f( xfMax ,yfMin );
+ glVertex2f( xfMax ,yfMax );
+ glEnd();
+ glDisable( GL_LINE_STIPPLE );
+ glEnable( GL_TEXTURE_2D );
+ }
// draw checkerboard for transparent textures
- if ( g_TextureBrowser_enableAlpha )
+ if ( g_TextureBrowser_enableAlpha )
{
glDisable( GL_TEXTURE_2D );
glBegin( GL_QUADS );
glDisable( GL_TEXTURE_2D );
glColor3f( 1,1,1 );
- glRasterPos2i( x, y - TextureBrowser_fontHeight( textureBrowser ) + 5 );
+ glRasterPos2i( x, y - TextureBrowser_fontHeight( textureBrowser ) + 2 );//+5
// don't draw the directory name
const char* name = shader->getName();
gboolean TextureBrowser_button_press( ui::Widget widget, GdkEventButton* event, TextureBrowser* textureBrowser ){
if ( event->type == GDK_BUTTON_PRESS ) {
+ gtk_widget_grab_focus( widget );
if ( event->button == 3 ) {
if ( textureBrowser->m_tags ) {
textureBrowser->m_rmbSelected = true;
- TextureBrowser_Selection_MouseDown( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ) );
+ TextureBrowser_Selection_MouseDown( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ), false );
BuildStoreAssignedTags( textureBrowser->m_assigned_store, textureBrowser->shader.c_str(), textureBrowser );
BuildStoreAvailableTags( textureBrowser->m_available_store, textureBrowser->m_assigned_store, textureBrowser->m_all_tags, textureBrowser );
TextureBrowser_Tracking_MouseDown( *textureBrowser );
}
}
- else if ( event->button == 1 ) {
- TextureBrowser_Selection_MouseDown( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ) );
+ else if ( event->button == 1 || event->button == 2 ) {
+ TextureBrowser_Selection_MouseDown( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ), event->button == 2 );
if ( textureBrowser->m_tags ) {
textureBrowser->m_rmbSelected = false;
}
}
}
- else if ( event->type == GDK_2BUTTON_PRESS ) {
+ else if ( event->type == GDK_2BUTTON_PRESS && event->button == 1 ) {
#define GARUX_DISABLE_2BUTTON
#ifndef GARUX_DISABLE_2BUTTON
- const char* sh = textureBrowser->shader.c_str();
+ CopiedString texName = textureBrowser->shader;
+ char* sh = const_cast<char*>( texName.c_str() );
char* dir = strrchr( sh, '/' );
if( dir != NULL ){
*(dir + 1) = '\0';
if( *dir != '\0'){
ScopeDisableScreenUpdates disableScreenUpdates( dir, "Loading Textures" );
TextureBrowser_ShowDirectory( *textureBrowser, dir );
+ TextureBrowser_Focus( *textureBrowser, textureBrowser->shader.c_str() );
TextureBrowser_queueDraw( *textureBrowser );
}
}
}
#endif
}
- else if ( event->type == GDK_3BUTTON_PRESS ) {
+ else if ( event->type == GDK_2BUTTON_PRESS && event->button == 3 ) {
ScopeDisableScreenUpdates disableScreenUpdates( TextureBrowser_getCommonShadersDir(), "Loading Textures" );
TextureBrowser_ShowDirectory( *textureBrowser, TextureBrowser_getCommonShadersDir() );
TextureBrowser_queueDraw( *textureBrowser );
TextureBrowser_Tracking_MouseUp( *textureBrowser );
}
}
+ if ( event->button == 1 ) {
+ TextureBrowser_Selection_MouseUp( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ) );
+ }
}
return FALSE;
}
}
gboolean TextureBrowser_scroll( ui::Widget widget, GdkEventScroll* event, TextureBrowser* textureBrowser ){
+ gtk_widget_grab_focus( widget );
+ if( !gtk_window_is_active( textureBrowser->m_parent ) )
+ gtk_window_present( textureBrowser->m_parent );
+
if ( event->direction == GDK_SCROLL_UP ) {
TextureBrowser_MouseWheel( *textureBrowser, true );
}
TextureGroups groups = TextureGroups_constructTreeView();
auto store = ui::TreeStore::from(gtk_tree_store_new( 1, G_TYPE_STRING ));
TextureGroups_constructTreeModel( groups, store );
+ std::set<CopiedString>::iterator iter;
gtk_tree_view_set_model(GlobalTextureBrowser().m_treeViewTree, store);
}
void TextureBrowser_constructTreeStoreTags(){
- TextureGroups groups;
+ //TextureGroups groups;
TextureBrowser &textureBrowser = GlobalTextureBrowser();
auto store = ui::TreeStore::from(gtk_tree_store_new( 1, G_TYPE_STRING ));
auto model = GlobalTextureBrowser().m_all_tags_list;
gdk_event_get_time( (GdkEvent*)event ) );
}
+void TextureBrowser_searchTags();
+
gboolean TreeViewTags_onButtonPressed( ui::TreeView treeview, GdkEventButton *event ){
if ( event->type == GDK_BUTTON_PRESS && event->button == 3 ) {
GtkTreePath *path;
TextureBrowser_createContextMenu( treeview, event );
return TRUE;
}
+ if( event->type == GDK_2BUTTON_PRESS && event->button == 1 ){
+ TextureBrowser_searchTags();
+ return TRUE;
+ }
return FALSE;
}
}
create_check_menu_item_with_mnemonic( menu, "Hide _Unused", "ShowInUse" );
+ create_menu_item_with_mnemonic( menu, "Show All", "ShowAllTextures" );
+
if ( string_empty( g_pGameDescription->getKeyValue( "show_wads" ) ) ) {
create_check_menu_item_with_mnemonic( menu, "Hide Image Missing", "FilterMissing" );
}
return textures_menu_item;
}
+void Popup_View_Menu( GtkWidget *widget, GtkMenu *menu ){
+ gtk_menu_popup( menu, NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time() );
+}
+
ui::MenuItem TextureBrowser_constructToolsMenu( ui::Menu menu ){
ui::MenuItem textures_menu_item = ui::MenuItem(new_sub_menu_item_with_mnemonic( "_Tools" ));
TextureDirectory_loadTexture( path.c_str(), name.c_str() );
}
}
+ TextureBrowser_SetHideUnused( textureBrowser, false );
textureBrowser.m_searchedTags = true;
g_TextureBrowser_currentDirectory = tags_searched;
}
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";
}
}
}
table.attach(vbox, {0, 1, 1, 3}, {GTK_FILL, GTK_FILL});
vbox.show();
- ui::Widget menu_bar{ui::null};
+ // ui::Widget menu_bar{ui::null};
+ auto toolbar = ui::Toolbar::from( gtk_toolbar_new() );
{ // menu bar
- menu_bar = ui::Widget::from(gtk_menu_bar_new());
+ // menu_bar = ui::Widget::from(gtk_menu_bar_new());
auto menu_view = ui::Menu(ui::New);
- auto view_item = TextureBrowser_constructViewMenu( menu_view );
- gtk_menu_item_set_submenu( GTK_MENU_ITEM( view_item ), menu_view );
- gtk_menu_shell_append( GTK_MENU_SHELL( menu_bar ), view_item );
+ // auto view_item = TextureBrowser_constructViewMenu( menu_view );
+ TextureBrowser_constructViewMenu( menu_view );
+ gtk_menu_set_title( menu_view, "View" );
+ // gtk_menu_item_set_submenu( GTK_MENU_ITEM( view_item ), menu_view );
+ // gtk_menu_shell_append( GTK_MENU_SHELL( menu_bar ), view_item );
+
+ //gtk_table_attach( GTK_TABLE( table ), GTK_WIDGET( toolbar ), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0 );
+ gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( toolbar ), FALSE, FALSE, 0 );
+
+ //view menu button
+ {
+ auto button = toolbar_append_button( toolbar, "View", "texbro_view.png" );
+ button.dimensions( 22, 22 );
+ button.connect( "clicked", G_CALLBACK( Popup_View_Menu ), menu_view );
+ //to show detached menu over floating tex bro
+ gtk_menu_attach_to_widget( GTK_MENU( menu_view ), GTK_WIDGET( button ), NULL );
+ }
+ {
+ auto button = toolbar_append_button( toolbar, "Find / Replace...", "texbro_gtk-find-and-replace.png", "FindReplaceTextures" );
+ button.dimensions( 22, 22 );
+ }
+ {
+ auto button = toolbar_append_button( toolbar, "Flush & Reload Shaders", "texbro_refresh.png", "RefreshShaders" );
+ button.dimensions( 22, 22 );
+ }
+ toolbar.show();
+
+/*
auto menu_tools = ui::Menu(ui::New);
auto tools_item = TextureBrowser_constructToolsMenu( menu_tools );
gtk_menu_item_set_submenu( GTK_MENU_ITEM( tools_item ), menu_tools );
gtk_menu_shell_append( GTK_MENU_SHELL( menu_bar ), tools_item );
-
- table.attach(menu_bar, {0, 3, 0, 1}, {GTK_FILL, GTK_SHRINK});
- menu_bar.show();
+*/
+ // table.attach(menu_bar, {0, 3, 0, 1}, {GTK_FILL, GTK_SHRINK});
+ // menu_bar.show();
}
{ // Texture TreeView
textureBrowser.m_scr_win_tree = ui::ScrolledWindow(ui::New);
TextureBrowser_createTreeViewTree();
- gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( textureBrowser.m_scr_win_tree ), textureBrowser.m_treeViewTree );
+ //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( textureBrowser.m_scr_win_tree ), textureBrowser.m_treeViewTree );
+ gtk_container_add( GTK_CONTAINER( textureBrowser.m_scr_win_tree ), GTK_WIDGET( textureBrowser.m_treeViewTree ) );
+
textureBrowser.m_treeViewTree.show();
}
{ // gl_widget scrollbar
}
{ // tag menu bar
auto menu_tags = ui::Menu(ui::New);
- auto tags_item = TextureBrowser_constructTagsMenu( menu_tags );
- gtk_menu_item_set_submenu( GTK_MENU_ITEM( tags_item ), menu_tags );
- gtk_menu_shell_append( GTK_MENU_SHELL( menu_bar ), tags_item );
+ gtk_menu_set_title( GTK_MENU( menu_tags ), "Tags" );
+ // auto tags_item = TextureBrowser_constructTagsMenu( menu_tags );
+ TextureBrowser_constructTagsMenu( menu_tags );
+ // gtk_menu_item_set_submenu( GTK_MENU_ITEM( tags_item ), menu_tags );
+ // gtk_menu_shell_append( GTK_MENU_SHELL( menu_bar ), tags_item );
+
+ auto button = toolbar_append_button( toolbar, "Tags", "texbro_tags.png" );
+ button.dimensions( 22, 22 );
+ button.connect( "clicked", G_CALLBACK( Popup_View_Menu ), menu_tags );
+
+ //to show detached menu over floating tex bro and main wnd...
+ gtk_menu_attach_to_widget( GTK_MENU( menu_tags ), GTK_WIDGET( button ), NULL );
}
{ // Tag TreeView
textureBrowser.m_scr_win_tags = ui::ScrolledWindow(ui::New);
auto selection = gtk_tree_view_get_selection(textureBrowser.m_treeViewTags );
gtk_tree_selection_set_mode( selection, GTK_SELECTION_MULTIPLE );
- gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( textureBrowser.m_scr_win_tags ), textureBrowser.m_treeViewTags );
+ //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( textureBrowser.m_scr_win_tags ), textureBrowser.m_treeViewTags );
+ gtk_container_add( GTK_CONTAINER( textureBrowser.m_scr_win_tags ), GTK_WIDGET( textureBrowser.m_treeViewTags ) );
+
textureBrowser.m_treeViewTags.show();
}
{ // Texture/Tag notebook
textureBrowser.m_assigned_tree.show();
scrolled_win.show();
- gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), textureBrowser.m_assigned_tree );
+
+ //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), textureBrowser.m_assigned_tree );
+ gtk_container_add( GTK_CONTAINER( scrolled_win ), GTK_WIDGET( textureBrowser.m_available_tree ) );
frame_table.attach(scrolled_win, {0, 1, 1, 3}, {GTK_FILL, GTK_FILL});
}
textureBrowser.m_available_tree.show();
scrolled_win.show();
- gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), textureBrowser.m_available_tree );
+
+ //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), textureBrowser.m_available_tree );
+ gtk_container_add( GTK_CONTAINER( scrolled_win ), GTK_WIDGET( textureBrowser.m_available_tree ) );
frame_table.attach(scrolled_win, {2, 3, 1, 3}, {GTK_FILL, GTK_FILL});
}
ScopeDisableScreenUpdates disableScreenUpdates( "Processing...", "Loading Shaders" );
GlobalShaderSystem().refresh();
+ /* texturebrowser tree update on vfs restart */
+ TextureBrowser_constructTreeStore();
UpdateAllWindows();
TextureBrowser_ShowDirectory( GlobalTextureBrowser(), dirName );
else{
ScopeDisableScreenUpdates disableScreenUpdates( "Processing...", "Loading Shaders" );
GlobalShaderSystem().refresh();
+ /* texturebrowser tree update on vfs restart */
+ TextureBrowser_constructTreeStore();
UpdateAllWindows();
}
}
const char* startup_shaders[] = { "None", TextureBrowser_getCommonShadersName() };
page.appendCombo( "Load Shaders at Startup", reinterpret_cast<int&>( GlobalTextureBrowser().m_startupShaders ), STRING_ARRAY_RANGE( startup_shaders ) );
}
+ {
+ StringOutputStream sstream( 256 );
+ sstream << "Hide nonShaders in " << TextureBrowser_getCommonShadersDir() << " folder";
+ page.appendCheckBox(
+ "", sstream.c_str(),
+ GlobalTextureBrowser().m_hideNonShadersInCommon
+ );
+ }
}
void TextureBrowser_constructPage( PreferenceGroup& group ){
GlobalPreferenceSystem().registerPreference( "LoadShaders", make_property_string( reinterpret_cast<int&>( textureBrowser.m_startupShaders ) ) );
GlobalPreferenceSystem().registerPreference( "WheelMouseInc", make_property_string( textureBrowser.m_mouseWheelScrollIncrement ) );
GlobalPreferenceSystem().registerPreference( "SI_Colors0", make_property_string( textureBrowser.color_textureback ) );
+ GlobalPreferenceSystem().registerPreference( "HideNonShadersInCommon", make_property_string( GlobalTextureBrowser().m_hideNonShadersInCommon ) );
textureBrowser.shader = texdef_name_default();