2003-10-10 03:16:32 +00:00
/**
* header_imasel . c oct - 2003
*
* Functions to draw the " Image Browser " window header
* and handle user events sent to it .
*
* $ Id $
*
* * * * * * BEGIN GPL / BL DUAL LICENSE BLOCK * * * * *
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version . The Blender
* Foundation also sells licenses for use in proprietary software under
* the Blender License . See http : //www.blender.org/BL/ for information
* about this .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software Foundation ,
2003-10-11 20:56:26 +00:00
* Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
2003-10-10 03:16:32 +00:00
*
* The Original Code is Copyright ( C ) 2001 - 2002 by NaN Holding BV .
* All rights reserved .
*
* The Original Code is : all of this file .
*
* Contributor ( s ) : none yet .
*
* * * * * * END GPL / BL DUAL LICENSE BLOCK * * * * *
*/
# include <stdlib.h>
# include <string.h>
2004-03-26 01:12:45 +00:00
# include <stdio.h>
2003-10-10 03:16:32 +00:00
# ifdef HAVE_CONFIG_H
# include <config.h>
# endif
# include "BMF_Api.h"
# include "BIF_language.h"
# include "DNA_ID.h"
# include "DNA_screen_types.h"
# include "DNA_space_types.h"
2007-09-02 17:25:03 +00:00
# include "DNA_userdef_types.h"
2003-10-10 03:16:32 +00:00
2007-09-02 17:25:03 +00:00
# include "BIF_filelist.h"
2003-10-10 23:20:01 +00:00
# include "BIF_gl.h"
2003-10-10 03:16:32 +00:00
# include "BIF_imasel.h"
# include "BIF_interface.h"
# include "BIF_resources.h"
# include "BIF_screen.h"
# include "BKE_global.h"
# include "BKE_main.h"
# include "BSE_headerbuttons.h"
# include "blendef.h"
2003-10-10 23:20:01 +00:00
2003-10-10 03:16:32 +00:00
void do_imasel_buttons ( short event )
{
2003-10-11 20:56:26 +00:00
SpaceImaSel * simasel ;
2007-09-02 17:25:03 +00:00
2003-10-11 20:56:26 +00:00
simasel = curarea - > spacedata . first ;
if ( curarea - > win = = 0 ) return ;
2003-10-10 03:16:32 +00:00
2003-10-11 20:56:26 +00:00
switch ( event ) {
2007-09-02 17:25:03 +00:00
case B_SORTIMASELLIST :
BIF_filelist_sort ( simasel - > files , simasel - > sort ) ;
scrarea_queue_winredraw ( curarea ) ;
2003-10-11 20:56:26 +00:00
break ;
2007-09-02 17:25:03 +00:00
case B_RELOADIMASELDIR :
BIF_filelist_free ( simasel - > files ) ;
scrarea_queue_winredraw ( curarea ) ;
break ;
case B_FILTERIMASELDIR :
if ( simasel - > flag & FILE_FILTER ) {
BIF_filelist_setfilter ( simasel - > files , simasel - > filter ) ;
BIF_filelist_filter ( simasel - > files ) ;
scrarea_queue_winredraw ( curarea ) ;
} else {
BIF_filelist_setfilter ( simasel - > files , 0 ) ;
BIF_filelist_filter ( simasel - > files ) ;
scrarea_queue_winredraw ( curarea ) ;
2003-10-11 20:56:26 +00:00
}
break ;
}
2003-10-10 03:16:32 +00:00
}
void imasel_buttons ( void )
{
SpaceImaSel * simasel ;
uiBlock * block ;
2007-09-02 17:25:03 +00:00
short xco , xcotitle ;
2003-10-10 03:16:32 +00:00
char naam [ 256 ] ;
2007-09-02 17:25:03 +00:00
2003-10-10 03:16:32 +00:00
simasel = curarea - > spacedata . first ;
sprintf ( naam , " header %d " , curarea - > headwin ) ;
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
block = uiNewBlock ( & curarea - > uiblocks , naam , UI_EMBOSS , UI_HELV , curarea - > headwin ) ;
if ( area_is_active_area ( curarea ) ) uiBlockSetCol ( block , TH_HEADER ) ;
else uiBlockSetCol ( block , TH_HEADERDESEL ) ;
2003-10-10 03:16:32 +00:00
curarea - > butspacetype = SPACE_IMASEL ;
2003-10-15 13:47:15 +00:00
xco = 8 ;
2003-10-10 03:16:32 +00:00
2003-10-15 13:47:15 +00:00
uiDefIconTextButC ( block , ICONTEXTROW , B_NEWSPACE , ICON_VIEW3D , windowtype_pup ( ) , xco , 0 , XIC + 10 , YIC , & ( curarea - > butspacetype ) , 1.0 , SPACEICONMAX , 0 , 0 , " Displays Current Window Type. Click for menu of available types. " ) ;
xco + = XIC + 22 ;
2003-10-10 03:16:32 +00:00
/* FULL WINDOW */
2003-10-15 13:47:15 +00:00
if ( curarea - > full ) uiDefIconBut ( block , BUT , B_FULL , ICON_SPLITSCREEN , xco , 0 , XIC , YIC , 0 , 0 , 0 , 0 , 0 , " " ) ;
else uiDefIconBut ( block , BUT , B_FULL , ICON_FULLSCREEN , xco , 0 , XIC , YIC , 0 , 0 , 0 , 0 , 0 , " " ) ;
2003-10-10 03:16:32 +00:00
2007-09-02 17:25:03 +00:00
/* SORT TYPE */
2003-10-10 03:16:32 +00:00
xco + = XIC ;
2006-01-15 13:30:56 +00:00
uiBlockBeginAlign ( block ) ;
2007-09-02 17:25:03 +00:00
uiDefIconButS ( block , ROW , B_SORTIMASELLIST , ICON_SORTALPHA , xco + = XIC , 0 , XIC , YIC , & simasel - > sort , 1.0 , 0.0 , 0 , 0 , " Sorts files alphabetically " ) ;
uiDefIconButS ( block , ROW , B_SORTIMASELLIST , ICON_SORTBYEXT , xco + = XIC , 0 , XIC , YIC , & simasel - > sort , 1.0 , 3.0 , 0 , 0 , " Sorts files by extension " ) ;
uiDefIconButS ( block , ROW , B_SORTIMASELLIST , ICON_SORTTIME , xco + = XIC , 0 , XIC , YIC , & simasel - > sort , 1.0 , 1.0 , 0 , 0 , " Sorts files by time " ) ;
uiDefIconButS ( block , ROW , B_SORTIMASELLIST , ICON_SORTSIZE , xco + = XIC , 0 , XIC , YIC , & simasel - > sort , 1.0 , 2.0 , 0 , 0 , " Sorts files by size " ) ;
uiBlockEndAlign ( block ) ;
cpack ( 0x0 ) ;
xco + = XIC + 10 ;
uiDefIconButBitS ( block , TOG , FILE_BOOKMARKS , B_RELOADIMASELDIR , ICON_BOOKMARKS , xco + = XIC , 0 , XIC , YIC , & simasel - > flag , 0 , 0 , 0 , 0 , " Toggles Bookmarks on/off " ) ;
xco + = XIC + 10 ;
xcotitle = xco ;
xco + = BIF_GetStringWidth ( G . font , simasel - > title , ( U . transopts & USER_TR_BUTTONS ) ) ;
2003-10-10 03:16:32 +00:00
2007-09-02 17:25:03 +00:00
if ( simasel - > pupmenu & & simasel - > menup ) {
uiDefButS ( block , MENU , B_NOP , simasel - > pupmenu , xco + 10 , 0 , 90 , 20 , simasel - > menup , 0 , 0 , 0 , 0 , " " ) ;
xco + = 100 ;
}
uiBlockBeginAlign ( block ) ;
uiDefIconButBitS ( block , TOG , FILE_HIDE_DOT , B_RELOADIMASELDIR , ICON_GHOST , xco + = XIC , 0 , XIC , YIC , & simasel - > flag , 0 , 0 , 0 , 0 , " Hides dot files " ) ;
2006-01-15 13:30:56 +00:00
uiBlockEndAlign ( block ) ;
2007-09-02 17:25:03 +00:00
xco + = 20 ;
uiDefIconButBitS ( block , TOG , FILE_FILTER , B_FILTERIMASELDIR , ICON_SORTBYEXT , xco + = XIC , 0 , XIC , YIC , & simasel - > flag , 0 , 0 , 0 , 0 , " Filter files " ) ;
if ( simasel - > flag & FILE_FILTER ) {
xco + = 4 ;
uiBlockBeginAlign ( block ) ;
uiDefIconButBitS ( block , TOG , IMAGEFILE , B_FILTERIMASELDIR , ICON_IMAGE_COL , xco + = XIC , 0 , XIC , YIC , & simasel - > filter , 0 , 0 , 0 , 0 , " Show images " ) ;
uiDefIconButBitS ( block , TOG , BLENDERFILE , B_FILTERIMASELDIR , ICON_BLENDER , xco + = XIC , 0 , XIC , YIC , & simasel - > filter , 0 , 0 , 0 , 0 , " Show .blend files " ) ;
uiDefIconButBitS ( block , TOG , MOVIEFILE , B_FILTERIMASELDIR , ICON_SEQUENCE , xco + = XIC , 0 , XIC , YIC , & simasel - > filter , 0 , 0 , 0 , 0 , " Show movies " ) ;
uiDefIconButBitS ( block , TOG , PYSCRIPTFILE , B_FILTERIMASELDIR , ICON_PYTHON , xco + = XIC , 0 , XIC , YIC , & simasel - > filter , 0 , 0 , 0 , 0 , " Show python scripts " ) ;
uiDefIconButBitS ( block , TOG , FTFONTFILE , B_FILTERIMASELDIR , ICON_SYNTAX , xco + = XIC , 0 , XIC , YIC , & simasel - > filter , 0 , 0 , 0 , 0 , " Show fonts " ) ;
uiDefIconButBitS ( block , TOG , SOUNDFILE , B_FILTERIMASELDIR , ICON_SOUND , xco + = XIC , 0 , XIC , YIC , & simasel - > filter , 0 , 0 , 0 , 0 , " Show sound files " ) ;
uiDefIconButBitS ( block , TOG , TEXTFILE , B_FILTERIMASELDIR , ICON_TEXT , xco + = XIC , 0 , XIC , YIC , & simasel - > filter , 0 , 0 , 0 , 0 , " Show text files " ) ;
uiDefIconButBitS ( block , TOG , FOLDERFILE , B_FILTERIMASELDIR , ICON_FILESEL , xco + = XIC , 0 , XIC , YIC , & simasel - > filter , 0 , 0 , 0 , 0 , " Show folders " ) ;
uiBlockEndAlign ( block ) ;
}
uiDefButBitS ( block , TOG , FILE_STRINGCODE , 0 , " Relative Paths " , xco + = XIC + 20 , 0 , 100 , YIC , & simasel - > flag , 0 , 0 , 0 , 0 , " Makes sure returned paths are relative to the current .blend file " ) ;
xco + = 90 ;
if ( simasel - > type = = FILE_LOADLIB ) {
uiBlockBeginAlign ( block ) ;
uiDefButBitS ( block , TOGN , FILE_LINK , B_REDR , " Append " , xco + = XIC , 0 , 100 , YIC , & simasel - > flag , 0 , 0 , 0 , 0 , " Copies selected data into current project " ) ;
uiDefButBitS ( block , TOG , FILE_LINK , B_REDR , " Link " , xco + = 100 , 0 , 100 , YIC , & simasel - > flag , 0 , 0 , 0 , 0 , " Creates a link to selected data from current project " ) ;
uiBlockEndAlign ( block ) ;
uiBlockBeginAlign ( block ) ;
uiDefButBitS ( block , TOG , FILE_AUTOSELECT , B_REDR , " Autosel " , xco + = 125 , 0 , 65 , YIC , & simasel - > flag , 0 , 0 , 0 , 0 , " Autoselect imported objects " ) ;
uiDefButBitS ( block , TOG , FILE_ACTIVELAY , B_REDR , " Active Layer " , xco + = 65 , 0 , 80 , YIC , & simasel - > flag , 0 , 0 , 0 , 0 , " Append object(s) in active layer " ) ;
uiDefButBitS ( block , TOG , FILE_ATCURSOR , B_REDR , " At Cursor " , xco + = 80 , 0 , 65 , YIC , & simasel - > flag , 0 , 0 , 0 , 0 , " Append object(s) at cursor, use centroid if more than one object is selected " ) ;
uiBlockEndAlign ( block ) ;
xco + = 100 ; // scroll
} else if ( simasel - > type = = FILE_BLENDER ) {
uiDefButBitI ( block , TOGN , G_FILE_NO_UI , B_REDR , " Load UI " , xco + = XIC , 0 , 80 , YIC , & G . fileflags , 0 , 0 , 0 , 0 , " Load the UI setup as well as the scene data " ) ;
2003-10-10 03:16:32 +00:00
2007-09-02 17:25:03 +00:00
xco + = 100 ; // scroll
}
glRasterPos2f ( ( float ) xcotitle , 5.0 ) ;
BIF_RasterPos ( ( float ) xcotitle , 5.0 ) ; // stupid texture fonts
BIF_ThemeColor ( TH_TEXT ) ;
BIF_DrawString ( uiBlockGetCurFont ( block ) , simasel - > title , ( U . transopts & USER_TR_BUTTONS ) ) ;
2003-10-10 03:16:32 +00:00
/* always do as last */
curarea - > headbutlen = xco + 2 * XIC ;
uiDrawBlock ( block ) ;
2007-09-02 17:25:03 +00:00
}