Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/src/editimasel.c')
-rw-r--r--source/blender/src/editimasel.c383
1 files changed, 383 insertions, 0 deletions
diff --git a/source/blender/src/editimasel.c b/source/blender/src/editimasel.c
new file mode 100644
index 00000000000..f96491b1a6f
--- /dev/null
+++ b/source/blender/src/editimasel.c
@@ -0,0 +1,383 @@
+/**
+ * $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,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * 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>
+#include <stdio.h>
+#include <math.h>
+
+#ifdef WIN32
+#include "BLI_winstuff.h"
+#else
+#include <sys/times.h>
+#endif
+
+#include "PIL_time.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
+#include "BLI_editVert.h"
+
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
+
+#include "BKE_global.h"
+
+#include "BIF_fsmenu.h"
+#include "BIF_screen.h"
+#include "BIF_interface.h"
+#include "BIF_imasel.h"
+
+#include "BSE_filesel.h"
+#include "BSE_drawimasel.h"
+
+#include "BDR_editcurve.h"
+
+#include "blendef.h"
+#include "mydevice.h"
+#include "interface.h"
+
+/* locals */
+void draw_icon_imasel(void);
+void winqreadimasel(unsigned short event, short val, char ascii);
+
+#define XIC 20
+#define YIC 21
+
+/* GLOBALS */
+extern char *fsmenu;
+
+
+void draw_icon_imasel(void)
+{
+ scrarea_queue_winredraw(curarea);
+}
+
+void winqreadimasel(unsigned short event, short val, char ascii)
+{
+ SpaceImaSel *simasel;
+
+ short mval[2];
+ short area_event;
+ short queredraw = 0;
+ char name[256];
+ char *selname;
+ static double prevtime=0;
+
+
+ if(val==0) return;
+ simasel= curarea->spacedata.first;
+
+ area_event = 0;
+ getmouseco_areawin(mval);
+ simasel->mx= mval[0];
+ simasel->my= mval[1];
+
+ if (simasel->desx > 0){
+ if ( (mval[0] > simasel->dssx) && (mval[0] < simasel->dsex) && (mval[1] > simasel->dssy) && (mval[1] < simasel->dsey) ) area_event = IMS_INDIRSLI;
+ if ( (mval[0] > simasel->desx) && (mval[0] < simasel->deex) && (mval[1] > simasel->desy) && (mval[1] < simasel->deey) ) area_event = IMS_INDIR;
+ }
+ if (simasel->fesx > 0){
+ if ( (mval[0] > simasel->fssx) && (mval[0] < simasel->fsex) && (mval[1] > simasel->fssy) && (mval[1] < simasel->fsey) ) area_event = IMS_INFILESLI;
+ if ( (mval[0] > simasel->fesx) && (mval[0] < simasel->feex) && (mval[1] > simasel->fesy) && (mval[1] < simasel->feey) ) area_event = IMS_INFILE;
+ }
+
+ if( event!=RETKEY && event!=PADENTER)
+ if( uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
+
+ switch(event) {
+ case AFTERPIBREAD:
+ get_pib_file(simasel);
+ queredraw = 1;
+ break;
+
+ case AFTERIMASELIMA:
+ if (bitset(simasel->fase, IMS_DOTHE_INF)){
+ get_file_info(simasel);
+
+ if (!bitset(simasel->fase, IMS_KNOW_INF)){
+ addafterqueue(curarea->win, AFTERIMASELIMA, 1);
+
+ }else{
+ simasel->subfase = 0;
+ simasel->imafase = 0;
+ simasel->fase |= IMS_DOTHE_IMA;
+ addafterqueue(curarea->win, AFTERIMASELGET, 1);
+ }
+ }
+ break;
+ case AFTERIMASELGET:
+ if (bitset(simasel->fase, IMS_DOTHE_IMA)){
+ get_next_image(simasel);
+ if (simasel->ima_redraw > 0){
+ double newtime = PIL_check_seconds_timer();
+ if ((newtime - prevtime) > 0.03) {
+ simasel->ima_redraw = 0;
+ queredraw = 1;
+ prevtime = newtime;
+ }
+
+ }
+ if (!bitset(simasel->fase, IMS_KNOW_IMA)){
+ addafterqueue(curarea->win, AFTERIMASELGET, 1);
+ }else{
+ simasel->ima_redraw = 0;
+ simasel->subfase = 0;
+ simasel->imafase = 0;
+ addqueue(curarea->win, AFTERIMAWRITE, 1);
+ queredraw = 1;
+ }
+ }
+ break;
+ case AFTERIMAWRITE:
+ if (bitset(simasel->fase, IMS_KNOW_IMA)){
+ write_new_pib(simasel);
+ queredraw = 1;
+ }
+ break;
+
+ case RIGHTMOUSE:
+ if ((area_event == IMS_INFILE) && (simasel->hilite_ima)){
+ select_ima_files(simasel);
+ queredraw = 1;
+ }
+ break;
+ case UI_BUT_EVENT:
+
+ /* bug: blender's interface kit also returns a '4'... what is it! */
+
+ switch(val) {
+ case 13: /* 'P' */
+ imadir_parent(simasel);
+ queredraw = 1;
+
+ case 1: /* dir entry */
+ checkdir(simasel->dir);
+ clear_ima_dir(simasel);
+ queredraw = 1;
+ break;
+
+ case 3: /* fsmenu */
+ selname= fsmenu_get_entry(simasel->fileselmenuitem-1);
+ if (selname) {
+ strcpy(simasel->dir, selname);
+ checkdir(simasel->dir);
+ clear_ima_dir(simasel);
+ queredraw = 1;
+ }
+ break;
+
+ case 5:
+ if (simasel->returnfunc) {
+ char name[256];
+ strcpy(name, simasel->dir);
+ strcat(name, simasel->file);
+ simasel->returnfunc(name);
+ filesel_prevspace();
+ }
+ break;
+ case 6:
+ filesel_prevspace();
+ break;
+
+ }
+ break;
+
+ case LEFTMOUSE:
+ case MIDDLEMOUSE:
+
+ /* No button pressed */
+ switch (area_event){
+ case IMS_INDIRSLI:
+ move_imadir_sli(simasel);
+ queredraw = 1;
+ break;
+ case IMS_INFILESLI:
+ move_imafile_sli(simasel);
+ queredraw = 1;
+ break;
+ case IMS_INDIR:
+ if (simasel->hilite > -1){
+ change_imadir(simasel);
+ queredraw = 1;
+ }
+ break;
+ case IMS_INFILE:
+ if (simasel->hilite_ima){
+ strcpy(simasel->fole, simasel->hilite_ima->file_name);
+ strcpy(simasel->file, simasel->hilite_ima->file_name);
+
+ if (event == LEFTMOUSE) addqueue(curarea->win, IMALEFTMOUSE, 1);
+
+ if ((event == MIDDLEMOUSE)&&(simasel->returnfunc)){
+ strcpy(name, simasel->dir);
+ strcat(name, simasel->file);
+
+ if(simasel->mode & IMS_STRINGCODE) BLI_makestringcode(G.sce, name);
+
+ simasel->returnfunc(name);
+ filesel_prevspace();
+ }
+ queredraw = 1;
+ }
+ break;
+ }
+ break;
+
+ case MOUSEX:
+ case MOUSEY:
+ getmouseco_areawin(mval); /* lokaal screen */
+ calc_hilite(simasel);
+ if (simasel->mouse_move_redraw ){
+ simasel->mouse_move_redraw = 0;
+ queredraw = 1;
+ }
+ break;
+
+ case PAGEUPKEY:
+ case PAGEDOWNKEY:
+ switch(area_event){
+ case IMS_INDIRSLI:
+ case IMS_INDIR:
+ if (simasel->dirsli){
+ if (event == PAGEUPKEY) simasel->topdir -= (simasel->dirsli_lines - 1);
+ if (event == PAGEDOWNKEY) simasel->topdir += (simasel->dirsli_lines - 1);
+ queredraw = 1;
+ }
+ break;
+ case IMS_INFILESLI:
+ case IMS_INFILE:
+ if(simasel->imasli){
+ if (event == PAGEUPKEY) simasel->image_slider -= simasel->slider_height;
+ if (event == PAGEDOWNKEY) simasel->image_slider += simasel->slider_height;
+
+ if(simasel->image_slider < 0.0) simasel->image_slider = 0.0;
+ if(simasel->image_slider > 1.0) simasel->image_slider = 1.0;
+ queredraw = 1;
+ }
+ break;
+ }
+ break;
+
+ case HOMEKEY:
+ simasel->image_slider = 0.0;
+ queredraw = 1;
+ break;
+
+ case ENDKEY:
+ simasel->image_slider = 1.0;
+ queredraw = 1;
+ break;
+
+ case AKEY:
+ if (G.qual == 0){
+ ima_select_all(simasel);
+ queredraw = 1;
+ }
+ break;
+
+ case PKEY:
+ if(G.qual & LR_SHIFTKEY) {
+ extern char bprogname[]; /* usiblender.c */
+
+ sprintf(name, "%s -a \"%s%s\"", bprogname, simasel->dir, simasel->file);
+ system(name);
+ }
+ if(G.qual & LR_CTRLKEY) {
+ if(bitset(simasel->fase, IMS_KNOW_IMA)) pibplay(simasel);
+ }
+ if (G.qual == 0){
+ imadir_parent(simasel);
+ checkdir(simasel->dir);
+ clear_ima_dir(simasel);
+ queredraw = 1;
+ }
+ break;
+
+ case IKEY:
+ if ((G.qual == 0)&&(simasel->file)){
+ sprintf(name, "$IMAGEEDITOR %s%s", simasel->dir, simasel->file);
+ system(name);
+ queredraw = 1;
+ }
+
+ break;
+
+ case PADPLUSKEY:
+ case EQUALKEY:
+ BLI_newname(simasel->file, +1);
+ queredraw = 1;
+ break;
+
+ case PADMINUS:
+ case MINUSKEY:
+ BLI_newname(simasel->file, -1);
+ queredraw = 1;
+ break;
+
+ case BACKSLASHKEY:
+ case SLASHKEY:
+#ifdef WIN32
+ strcpy(simasel->dir, "\\");
+#else
+ strcpy(simasel->dir, "/");
+#endif
+ clear_ima_dir(simasel);
+ simasel->image_slider = 0.0;
+ queredraw = 1;
+ break;
+
+ case PERIODKEY:
+ clear_ima_dir(simasel);
+ queredraw = 1;
+ break;
+
+ case ESCKEY:
+ filesel_prevspace();
+ break;
+
+ case PADENTER:
+ case RETKEY:
+ if (simasel->returnfunc){
+ strcpy(name, simasel->dir);
+ strcat(name, simasel->file);
+ simasel->returnfunc(name);
+ filesel_prevspace();
+ }
+ break;
+ }
+
+
+ if (queredraw) scrarea_queue_winredraw(curarea);
+}
+
+