1 /*********************************************************************
2 ----------------------------------------------------------------------
8 - overwrite requester! -> save list, save preset
10 - viewheight <= 0 abfangen!
11 - newpichandler(): pichandler zurücksetzen, nicht dauernd
16 - auf arrows klicken -> scroll
24 - das neuronale netz über eine public semaphore allen
25 instanzen gleichzeitig zur verfügung stellen
26 - "private" screen: scrollvport refresh usw. !
27 - picture info konfigurierbar
28 - database features (double, similar)
30 - directory browse mode
31 - shellkommando auf tasten
34 ------------------------------------------------------ tabsize = 4 ---
35 *********************************************************************/
44 #include <dos/rdargs.h>
45 #include <exec/memory.h>
46 #include <workbench/startup.h>
47 #include <workbench/workbench.h>
48 #include <utility/hooks.h>
49 #include <utility/tagitem.h>
50 #include <guigfx/guigfx.h>
51 #include <clib/macros.h>
52 #include <libraries/gadtools.h>
53 #ifndef NO_SCREENNOTIFY
54 #include <libraries/screennotify.h>
56 #include <libraries/commodities.h>
57 #include <libraries/mysticview.h>
59 #include <proto/intuition.h>
60 #include <proto/exec.h>
61 #include <proto/dos.h>
62 #include <proto/utility.h>
63 #include <proto/guigfx.h>
64 #include <proto/render.h>
65 #include <proto/icon.h>
66 #include <proto/gadtools.h>
68 #include <proto/newicon.h>
70 #include <proto/commodities.h>
72 #include <proto/mysticview.h>
73 #include <proto/graphics.h>
77 #include <proto/layers.h>
80 #include <libraries/pm.h>
84 #include <public/proto/libamiga/amiga_protos.h>
86 #include <clib/alib_protos.h>
89 #include "Mystic_Global.h"
90 #include "Mystic_InitExit.h"
91 #include "Mystic_Subtask.h"
92 #include "Mystic_Tools.h"
93 #include "Mystic_Timing.h"
94 #include "Mystic_Window.h"
95 #include "Mystic_Screen.h"
96 #include "Mystic_Settings.h"
97 #include "Mystic_FileHandling.h"
99 #include "Mystic_HandlerWrapper.h"
101 #include "Mystic_Keyfile.h"
102 #include "Mystic_Icons.h"
103 #include "Mystic_Functions.h"
105 #include "Mystic_Texts.h"
106 #include "Mystic_Neuromancer.h"
107 #include "Mystic_Gadgets.h"
109 #include "MysticView.h"
111 #include "Mystic_Debug.h"
113 long __stack
= MAINSTACK
;
117 /*******************************************************************
118 --------------------------------------------------------------------
120 various helper functions
122 --------------------------------------------------------------------
123 *******************************************************************/
126 /*------------------------------------------------------------------
128 success = FormatInfoText(deststring, formatstring, args)
130 formatstring: args[0] string %p pathname
131 args[1] string %f filename
133 args[3] int %h height
135 args[5] string %n formatname
137 ------------------------------------------------------------------*/
139 BOOL
FormatInfoText(char *deststring
, char *formatstring
, APTR
*args
)
145 if ((fstring
= _StrDup(formatstring
)))
147 char *p
= fstring
, c
, d
;
154 if (c
== '%' && (d
= p
[1]))
159 error
= args
[0] == NULL
;
160 argarray
[argcount
++] = args
[0];
164 error
= args
[1] == NULL
;
165 argarray
[argcount
++] = args
[1];
169 error
= args
[2] == 0;
170 argarray
[argcount
++] = args
[2];
174 error
= args
[3] == 0;
175 argarray
[argcount
++] = args
[3];
179 error
= args
[4] == 0;
180 argarray
[argcount
++] = args
[4];
184 error
= args
[5] == NULL
;
185 argarray
[argcount
++] = args
[5];
195 if (deststring
&& !error
)
199 sprintf(deststring
, fstring
,
200 argarray
[0], argarray
[1], argarray
[2], argarray
[3], argarray
[4],
201 argarray
[5], argarray
[6], argarray
[7], argarray
[8], argarray
[9]);
212 return (BOOL
)(!error
);
221 /*------------------------------------------------------------------
223 changes = FilterFilePatternList(&fplist, &settings)
225 parse a filepattern-list for listfiles and presetfiles.
227 - the first listfile encountered determines a new list
228 (if it can be loaded successfully).
229 return value will be |= 1
231 - the first preset-file encountered determines a new
233 return value will be |= 2
235 ------------------------------------------------------------------*/
237 ULONG
FilterFilePatternList(char ***array
, struct mainsettings
**settings
)
245 if ((list
= CreateListFromArray(*array
)))
247 struct Node
*node
= list
->lh_Head
, *nextnode
;
248 BOOL checksettings
= (settings
!= NULL
);
249 BOOL checklistfile
= TRUE
;
250 char **newfilepatternlist
= NULL
;
252 while ((nextnode
= node
->ln_Succ
) && (checklistfile
|| checksettings
))
255 if ((tt
= GetToolTypes(node
->ln_Name
)))
259 if (GetBooleanSetting(tt
, "MYSTICVIEW_PRESET", FALSE
))
261 struct mainsettings
*newsettings
;
262 if ((newsettings
= LoadPreset(node
->ln_Name
, *settings
)))
264 DeleteMainSettings(*settings
);
265 *settings
= newsettings
;
269 checksettings
= FALSE
;
275 if (GetBooleanSetting(tt
, "MYSTICVIEW_LISTFILE", FALSE
))
277 if ((newfilepatternlist
= LoadStringList(node
->ln_Name
)))
281 checklistfile
= FALSE
;
285 DeleteStringList(tt
);
290 if (newfilepatternlist
)
292 DeleteStringList(*array
);
293 *array
= newfilepatternlist
;
298 if (CountListEntries(list
) > 0)
301 if ((newarray
= CreateArrayFromList(list
)))
303 DeleteStringList(*array
);
309 DeleteStringList(*array
);
323 /*------------------------------------------------------------------
325 success = SaveListFile(mview, list, filename, defaulttool)
327 ------------------------------------------------------------------*/
329 BOOL
SaveListFile(struct mview
*mv
, char **list
, char *filename
, char *deftool
)
331 BOOL success
= FALSE
;
334 if (filename
&& list
)
339 if ((fp
= fopen(filename
, "wb")))
343 while (*t
&& success
)
345 success
= (fprintf(fp
, "%s%c", *t
, 10) >= 0);
362 if ((tt
= CreateStringList(1)))
368 tt
[0] = _StrDup("MYSTICVIEW_LISTFILE=YES");
370 backdeftool
= mv
->diskobject
->do_DefaultTool
;
371 backtt
= (char **)mv
->diskobject
->do_ToolTypes
;
372 backtype
= mv
->diskobject
->do_Type
;
374 mv
->diskobject
->do_Type
= WBPROJECT
;
375 mv
->diskobject
->do_ToolTypes
= (STRPTR
*)tt
;
376 mv
->diskobject
->do_DefaultTool
= deftool
;
378 PutDiskObject(filename
, mv
->diskobject
);
380 mv
->diskobject
->do_Type
= backtype
;
381 mv
->diskobject
->do_ToolTypes
= (STRPTR
*)backtt
;
382 mv
->diskobject
->do_DefaultTool
= backdeftool
;
384 DeleteStringList(tt
);
395 /*--------------------------------------------------------------------
397 GetErrorText(errorcode)
399 --------------------------------------------------------------------*/
401 char *GetErrorText(LONG error
)
403 char *errortext
= NULL
;
410 case ERROR_NO_FREE_STORE
:
411 errortext
= "Not enough memory";
414 case ERROR_OBJECT_TOO_LARGE
:
415 errortext
= "Object too large";
418 case ERROR_OBJECT_NOT_FOUND
:
419 errortext
= "Object not found";
422 case ERROR_DELETE_PROTECTED
:
423 errortext
= "Object is delete protected";
426 case ERROR_WRITE_PROTECTED
:
427 errortext
= "Object is write protected";
430 case ERROR_READ_PROTECTED
:
431 errortext
= "Object is read protected";
434 case ERROR_NOT_A_DOS_DISK
:
435 errortext
= "Not a DOS disk";
439 errortext
= "No disk";
442 case ERROR_OBJECT_IN_USE
:
443 errortext
= "Object in use";
446 case ERROR_DISK_NOT_VALIDATED
:
447 errortext
= "Disk not validated";
450 case ERROR_DISK_WRITE_PROTECTED
:
451 errortext
= "Disk write protected";
454 case ERROR_OBJECT_WRONG_TYPE
:
455 errortext
= "Object is not recognized";
459 errortext
= "Unknown error";
468 /*--------------------------------------------------------------------
470 Train(mv, settings, viewdata)
471 teach the neural net the current displaymode
473 displaymode = Recall(mv, settings, viewdata)
474 let the neural net choose a displaymode
476 --------------------------------------------------------------------*/
478 void Train(struct mview
*mv
, struct mainsettings
*settings
, struct viewdata
*viewdata
)
480 if (settings
&& viewdata
)
482 if (settings
->autodisplaymode
)
484 MVNeuro_Train(mv
->screen
, mv
->window
, settings
,
485 viewdata
, viewdata
->showpic
);
490 int Recall(struct mview
*mv
, struct mainsettings
*settings
, struct viewdata
*viewdata
)
492 int displaymode
= settings
->displaymode
;
494 if (settings
&& viewdata
)
496 if (settings
->autodisplaymode
)
499 if (MVNeuro_RecallDisplayMode(&dispmode
, mv
->screen
, mv
->window
, settings
,
500 viewdata
, viewdata
->showpic
))
502 displaymode
= dispmode
;
513 /*******************************************************************
514 --------------------------------------------------------------------
518 --------------------------------------------------------------------
519 *******************************************************************/
522 /*--------------------------------------------------------------------
524 ReleaseButtons(buttons)
526 --------------------------------------------------------------------*/
528 void ReleaseButtons(struct MVButtons
*buttons
)
532 FreeBitMap(buttons
->animbitmap
);
533 buttons
->animbitmap
= NULL
;
534 FreeBitMap(buttons
->bitmap
);
535 buttons
->bitmap
= NULL
;
536 ReleaseDrawHandle(buttons
->drawhandle
);
537 buttons
->drawhandle
= NULL
;
542 /*--------------------------------------------------------------------
544 AnimateButtons(viewdata, buttons, reset)
546 --------------------------------------------------------------------*/
548 void AnimateButtons(struct viewdata
*viewdata
, struct MVButtons
*buttons
, BOOL reset
)
560 newanimframe
= (buttons
->animframe
+ 1) % ANIMFRAMES
;
563 if (newanimframe
!= buttons
->animframe
)
565 buttons
->animframe
= newanimframe
;
567 if (buttons
->bitmap
&& buttons
->animbitmap
)
569 BltBitMap(buttons
->animbitmap
, 0, ANIMHEIGHT
* buttons
->animframe
,
571 (buttons
->gadgetwidth
- ANIMWIDTH
) / 2,
572 (buttons
->gadgetheight
- ANIMHEIGHT
) / 2,
573 ANIMWIDTH
, ANIMHEIGHT
, 0xc0, 0xff, NULL
);
575 BltBitMap(buttons
->animbitmap
, 0, ANIMHEIGHT
* buttons
->animframe
,
577 (buttons
->gadgetwidth
- ANIMWIDTH
) / 2 + 1,
578 buttons
->gadgetheight
+ (buttons
->gadgetheight
- ANIMHEIGHT
) / 2 + 1,
579 ANIMWIDTH
, ANIMHEIGHT
, 0xc0, 0xff, NULL
);
583 ObtainSemaphore(&viewdata
->rastlock
);
585 DrawFakeGadget(buttons
->gadgetlist
->window
, buttons
->gadgets
[GAD_OPEN
],
586 buttons
->gadgetlist
->x
, buttons
->gadgetlist
->y
, buttons
->bitmap
);
588 ReleaseSemaphore(&viewdata
->rastlock
);
593 /*--------------------------------------------------------------------
595 success = ObtainButtons(viewdata, buttons, window)
597 --------------------------------------------------------------------*/
599 BOOL
ObtainButtons(struct viewdata
*viewdata
, struct MVButtons
*buttons
, struct Window
*win
)
601 BOOL success
= FALSE
;
605 ReleaseButtons(buttons
);
607 ObtainSemaphore(&viewdata
->rastlock
);
609 buttons
->drawhandle
= ObtainDrawHandle(buttons
->psm
,
610 win
->RPort
, win
->WScreen
->ViewPort
.ColorMap
,
611 GGFX_AutoDither
, FALSE
,
612 GGFX_DitherMode
, DITHERMODE_NONE
,
613 OBP_Precision
, PRECISION_GUI
, TAG_DONE
);
615 ReleaseSemaphore(&viewdata
->rastlock
);
617 if (buttons
->drawhandle
)
619 buttons
->animbitmap
= CreatePictureBitMap(buttons
->drawhandle
,
620 buttons
->animpic
, NULL
);
622 buttons
->animframe
= -1;
624 buttons
->bitmap
= CreatePictureBitMap(buttons
->drawhandle
,
627 if (buttons
->bitmap
&& buttons
->animbitmap
)
629 AnimateButtons(viewdata
, buttons
, TRUE
);
637 ReleaseButtons(buttons
);
644 /*--------------------------------------------------------------------
646 DeleteButtons(buttons)
648 --------------------------------------------------------------------*/
650 void DeleteButtons(struct MVButtons
*buttons
)
654 DeleteFakeGadgetList(buttons
->gadgetlist
);
655 buttons
->gadgetlist
= NULL
;
656 ReleaseButtons(buttons
);
657 DeletePenShareMap(buttons
->psm
);
663 /*--------------------------------------------------------------------
665 buttons = CreateButtons(buttonpic, animpic, mvwindow)
667 --------------------------------------------------------------------*/
669 struct MVButtons
*CreateButtons(PICTURE
*pic
, PICTURE
*animpic
, struct mvwindow
*win
)
671 struct MVButtons
*buttons
;
672 BOOL success
= FALSE
;
674 if ((buttons
= Malloclear(sizeof(struct MVButtons
))))
676 if ((buttons
->pic
= pic
))
678 buttons
->animpic
= animpic
;
680 GetPictureAttrs(buttons
->pic
, PICATTR_Width
, (IPTR
)&buttons
->width
,
681 PICATTR_Height
, (IPTR
)&buttons
->height
, TAG_DONE
);
683 buttons
->gadgetwidth
= buttons
->width
/ 8;
684 buttons
->gadgetheight
= buttons
->height
/ 4;
686 if ((buttons
->psm
= CreatePenShareMap(GGFX_HSType
, HSTYPE_15BIT_TURBO
, TAG_DONE
)))
688 AddPicture(buttons
->psm
, buttons
->pic
, NULL
);
689 AddPicture(buttons
->psm
, buttons
->animpic
, NULL
);
692 if ((buttons
->gadgetlist
= CreateFakeGadgetList(win
->window
, TAG_END
)))
698 if ((buttons
->gadgets
[GAD_OPEN
] = CreateFakeGadget(
699 GAD_OPEN
, FGADTYPE_PUSH
,
700 FGDT_WIDTH
, buttons
->gadgetwidth
,
701 FGDT_HEIGHT
, buttons
->gadgetheight
,
702 FGDT_BITMAP
, (IPTR
)buttons
->bitmap
,
703 FGDT_PICX_INACTIVE
, buttons
->gadgetwidth
* 0,
704 FGDT_PICY_INACTIVE
, buttons
->gadgetheight
* 0,
705 FGDT_PICX_PRESSED
, buttons
->gadgetwidth
* 0,
706 FGDT_PICY_PRESSED
, buttons
->gadgetheight
* 1,
707 FGDT_PICX_ROLLOVER
, buttons
->gadgetwidth
* 0,
708 FGDT_PICY_ROLLOVER
, buttons
->gadgetheight
* 0,
711 AddFakeGadget(buttons
->gadgetlist
, buttons
->gadgets
[GAD_OPEN
]);
717 if ((buttons
->gadgets
[GAD_RESTART
] = CreateFakeGadget(
718 GAD_RESTART
, FGADTYPE_PUSH
,
719 FGDT_WIDTH
, buttons
->gadgetwidth
,
720 FGDT_HEIGHT
, buttons
->gadgetheight
,
721 FGDT_BITMAP
, (IPTR
)buttons
->bitmap
,
722 FGDT_PICX_INACTIVE
, buttons
->gadgetwidth
* 1,
723 FGDT_PICY_INACTIVE
, buttons
->gadgetheight
* 0,
724 FGDT_PICX_PRESSED
, buttons
->gadgetwidth
* 1,
725 FGDT_PICY_PRESSED
, buttons
->gadgetheight
* 1,
726 FGDT_PICX_ROLLOVER
, buttons
->gadgetwidth
* 1,
727 FGDT_PICY_ROLLOVER
, buttons
->gadgetheight
* 0,
730 AddFakeGadget(buttons
->gadgetlist
, buttons
->gadgets
[GAD_RESTART
]);
736 if ((buttons
->gadgets
[GAD_PREV
] = CreateFakeGadget(
737 GAD_PREV
, FGADTYPE_PUSH
,
738 FGDT_WIDTH
, buttons
->gadgetwidth
,
739 FGDT_HEIGHT
, buttons
->gadgetheight
,
740 FGDT_BITMAP
, (IPTR
)buttons
->bitmap
,
741 FGDT_PICX_INACTIVE
, buttons
->gadgetwidth
* 2,
742 FGDT_PICY_INACTIVE
, buttons
->gadgetheight
* 0,
743 FGDT_PICX_PRESSED
, buttons
->gadgetwidth
* 2,
744 FGDT_PICY_PRESSED
, buttons
->gadgetheight
* 1,
745 FGDT_PICX_ROLLOVER
, buttons
->gadgetwidth
* 2,
746 FGDT_PICY_ROLLOVER
, buttons
->gadgetheight
* 0,
749 AddFakeGadget(buttons
->gadgetlist
, buttons
->gadgets
[GAD_PREV
]);
755 if ((buttons
->gadgets
[GAD_NEXT
] = CreateFakeGadget(
756 GAD_NEXT
, FGADTYPE_PUSH
,
757 FGDT_WIDTH
, buttons
->gadgetwidth
,
758 FGDT_HEIGHT
, buttons
->gadgetheight
,
759 FGDT_BITMAP
, (IPTR
)buttons
->bitmap
,
760 FGDT_PICX_INACTIVE
, buttons
->gadgetwidth
* 3,
761 FGDT_PICY_INACTIVE
, buttons
->gadgetheight
* 0,
762 FGDT_PICX_PRESSED
, buttons
->gadgetwidth
* 3,
763 FGDT_PICY_PRESSED
, buttons
->gadgetheight
* 1,
764 FGDT_PICX_ROLLOVER
, buttons
->gadgetwidth
* 3,
765 FGDT_PICY_ROLLOVER
, buttons
->gadgetheight
* 0,
768 AddFakeGadget(buttons
->gadgetlist
, buttons
->gadgets
[GAD_NEXT
]);
774 if ((buttons
->gadgets
[GAD_SLIDE
] = CreateFakeGadget(
775 GAD_SLIDE
, FGADTYPE_TOGGLE
,
776 FGDT_WIDTH
, buttons
->gadgetwidth
,
777 FGDT_HEIGHT
, buttons
->gadgetheight
,
778 FGDT_BITMAP
, (IPTR
)buttons
->bitmap
,
779 FGDT_PICX_INACTIVE
, buttons
->gadgetwidth
* 4,
780 FGDT_PICY_INACTIVE
, buttons
->gadgetheight
* 0,
781 FGDT_PICX_PRESSED
, buttons
->gadgetwidth
* 4,
782 FGDT_PICY_PRESSED
, buttons
->gadgetheight
* 1,
783 FGDT_PICX_ROLLOVER
, buttons
->gadgetwidth
* 4,
784 FGDT_PICY_ROLLOVER
, buttons
->gadgetheight
* 0,
785 FGDT_PICX_ACTIVE
, buttons
->gadgetwidth
* 4,
786 FGDT_PICY_ACTIVE
, buttons
->gadgetheight
* 2,
787 FGDT_PICX_ACTIVEPRESSED
, buttons
->gadgetwidth
* 4,
788 FGDT_PICY_ACTIVEPRESSED
, buttons
->gadgetheight
* 3,
789 FGDT_PICX_ACTIVEROLLOVER
, buttons
->gadgetwidth
* 4,
790 FGDT_PICY_ACTIVEROLLOVER
, buttons
->gadgetheight
* 2,
793 AddFakeGadget(buttons
->gadgetlist
, buttons
->gadgets
[GAD_SLIDE
]);
799 if ((buttons
->gadgets
[GAD_LOOP
] = CreateFakeGadget(
800 GAD_LOOP
, FGADTYPE_TOGGLE
,
801 FGDT_WIDTH
, buttons
->gadgetwidth
,
802 FGDT_HEIGHT
, buttons
->gadgetheight
,
803 FGDT_BITMAP
, (IPTR
)buttons
->bitmap
,
804 FGDT_PICX_INACTIVE
, buttons
->gadgetwidth
* 5,
805 FGDT_PICY_INACTIVE
, buttons
->gadgetheight
* 0,
806 FGDT_PICX_PRESSED
, buttons
->gadgetwidth
* 5,
807 FGDT_PICY_PRESSED
, buttons
->gadgetheight
* 1,
808 FGDT_PICX_ROLLOVER
, buttons
->gadgetwidth
* 5,
809 FGDT_PICY_ROLLOVER
, buttons
->gadgetheight
* 0,
810 FGDT_PICX_ACTIVE
, buttons
->gadgetwidth
* 5,
811 FGDT_PICY_ACTIVE
, buttons
->gadgetheight
* 2,
812 FGDT_PICX_ACTIVEPRESSED
, buttons
->gadgetwidth
* 5,
813 FGDT_PICY_ACTIVEPRESSED
, buttons
->gadgetheight
* 3,
814 FGDT_PICX_ACTIVEROLLOVER
, buttons
->gadgetwidth
* 5,
815 FGDT_PICY_ACTIVEROLLOVER
, buttons
->gadgetheight
* 2,
818 AddFakeGadget(buttons
->gadgetlist
, buttons
->gadgets
[GAD_LOOP
]);
824 if ((buttons
->gadgets
[GAD_DISPLAYMODE
] = CreateFakeGadget(
825 GAD_DISPLAYMODE
, FGADTYPE_TOGGLE
,
826 FGDT_WIDTH
, buttons
->gadgetwidth
,
827 FGDT_HEIGHT
, buttons
->gadgetheight
,
828 FGDT_BITMAP
, (IPTR
)buttons
->bitmap
,
829 FGDT_PICX_INACTIVE
, buttons
->gadgetwidth
* 6,
830 FGDT_PICY_INACTIVE
, buttons
->gadgetheight
* 0,
831 FGDT_PICX_PRESSED
, buttons
->gadgetwidth
* 6,
832 FGDT_PICY_PRESSED
, buttons
->gadgetheight
* 1,
833 FGDT_PICX_ROLLOVER
, buttons
->gadgetwidth
* 6,
834 FGDT_PICY_ROLLOVER
, buttons
->gadgetheight
* 0,
835 FGDT_PICX_ACTIVE
, buttons
->gadgetwidth
* 6,
836 FGDT_PICY_ACTIVE
, buttons
->gadgetheight
* 2,
837 FGDT_PICX_ACTIVEPRESSED
, buttons
->gadgetwidth
* 6,
838 FGDT_PICY_ACTIVEPRESSED
, buttons
->gadgetheight
* 3,
839 FGDT_PICX_ACTIVEROLLOVER
, buttons
->gadgetwidth
* 6,
840 FGDT_PICY_ACTIVEROLLOVER
, buttons
->gadgetheight
* 2,
843 AddFakeGadget(buttons
->gadgetlist
, buttons
->gadgets
[GAD_DISPLAYMODE
]);
849 if ((buttons
->gadgets
[GAD_RESET
] = CreateFakeGadget(
850 GAD_RESET
, FGADTYPE_PUSH
,
851 FGDT_WIDTH
, buttons
->gadgetwidth
,
852 FGDT_HEIGHT
, buttons
->gadgetheight
,
853 FGDT_BITMAP
, (IPTR
)buttons
->bitmap
,
854 FGDT_PICX_INACTIVE
, buttons
->gadgetwidth
* 7,
855 FGDT_PICY_INACTIVE
, buttons
->gadgetheight
* 0,
856 FGDT_PICX_PRESSED
, buttons
->gadgetwidth
* 7,
857 FGDT_PICY_PRESSED
, buttons
->gadgetheight
* 1,
858 FGDT_PICX_ROLLOVER
, buttons
->gadgetwidth
* 7,
859 FGDT_PICY_ROLLOVER
, buttons
->gadgetheight
* 0,
862 AddFakeGadget(buttons
->gadgetlist
, buttons
->gadgets
[GAD_RESET
]);
872 DeleteButtons(buttons
);
880 /*--------------------------------------------------------------------
882 DrawButtons(viewdata, win, buttons)
884 --------------------------------------------------------------------*/
886 void DrawButtons(struct viewdata
*viewdata
, struct mvwindow
*win
, struct MVButtons
*buttons
)
892 if (!buttons
->bitmap
)
894 ObtainButtons(viewdata
, buttons
, win
->window
);
897 ObtainSemaphore(&viewdata
->rastlock
);
899 UpdateWindowParameters(win
);
901 height
= MAX(buttons
->gadgetheight
+ BUTTON_VSPACE
* 2, ANIMHEIGHT
);
903 SetAPen(win
->window
->RPort
, win
->backpen
);
904 RectFill(win
->window
->RPort
, win
->innerleft
, win
->innertop
,
905 win
->innerleft
+ win
->innerwidth
- 1,
906 win
->innertop
+ height
- 1);
913 width
= buttons
->gadgetwidth
* GAD_NUM
;
914 width
= MAX((float) win
->innerwidth
* 0.45, width
);
915 width
= MIN(width
, win
->innerwidth
- BUTTON_HSPACE
* 2);
917 x
= (win
->innerwidth
- (int)width
) / 2;
919 LayoutFakeGadgetList(buttons
->gadgetlist
, ORIENTATION_RIGHT
,
920 (int) width
, height
- 2 * BUTTON_VSPACE
,
922 win
->innertop
+ (height
- buttons
->gadgetheight
) / 2);
924 // AnimateButtons(viewdata, buttons, TRUE);
926 DrawFakeGadgetList(buttons
->gadgetlist
, buttons
->bitmap
);
929 ReleaseSemaphore(&viewdata
->rastlock
);
934 /*--------------------------------------------------------------------
936 SetButtonSettings(viewdata, window, buttons, settings, always)
938 --------------------------------------------------------------------*/
940 void SetButtonSettings(struct viewdata
*viewdata
, struct mvwindow
*win
, struct MVButtons
*buttons
, struct mainsettings
*settings
, BOOL always
)
946 if (settings
->slideshow
!= buttons
->gadgets
[GAD_SLIDE
]->togglestatus
)
948 buttons
->gadgets
[GAD_SLIDE
]->togglestatus
= settings
->slideshow
;
952 if (settings
->loop
!= buttons
->gadgets
[GAD_LOOP
]->togglestatus
)
954 buttons
->gadgets
[GAD_LOOP
]->togglestatus
= settings
->loop
;
958 if (settings
->displaymode
!=
959 (buttons
->gadgets
[GAD_DISPLAYMODE
]->togglestatus
?
960 MVDISPMODE_KEEPASPECT_MIN
: MVDISPMODE_IGNOREASPECT
))
962 buttons
->gadgets
[GAD_DISPLAYMODE
]->togglestatus
=
963 settings
->displaymode
== MVDISPMODE_KEEPASPECT_MIN
? TRUE
: FALSE
;
967 if ((change
|| always
) && settings
->showbuttons
)
969 DrawButtons(viewdata
, win
, buttons
);
975 /*******************************************************************
976 --------------------------------------------------------------------
980 --------------------------------------------------------------------
981 *******************************************************************/
983 /*--------------------------------------------------------------------
985 DeleteViewData(viewdata)
987 --------------------------------------------------------------------*/
989 void DeleteViewData(struct viewdata
*viewdata
)
993 CloseTrigger(viewdata
->trigger
);
994 FreeSignal(viewdata
->picturevisiblesignal
);
995 DeletePicHandler(viewdata
->pichandler
);
996 Free(viewdata
->pathname
);
997 Free(viewdata
->filename
);
998 Free(viewdata
->formatname
);
1004 /*--------------------------------------------------------------------
1006 viewdata = CreateViewData(startfilepatternlist)
1008 --------------------------------------------------------------------*/
1010 struct viewdata
*CreateViewData(char **startfilepatternlist
)
1012 struct viewdata
*viewdata
;
1014 if ((viewdata
= Malloclear(sizeof(struct viewdata
))))
1017 viewdata
->destzoom
= 1;
1018 viewdata
->xpos
= .5;
1019 viewdata
->destxpos
= .5;
1020 viewdata
->ypos
= .5;
1021 viewdata
->destypos
= .5;
1022 viewdata
->angle
= 0;
1023 viewdata
->oldzoom
= viewdata
->zoom
;
1024 viewdata
->oldxpos
= viewdata
->xpos
;
1025 viewdata
->oldypos
= viewdata
->ypos
;
1026 viewdata
->startfilepatternlist
= startfilepatternlist
;
1028 viewdata
->trigger
= CreateTrigger();
1029 viewdata
->picturevisiblesignal
= AllocSignal(-1);
1031 InitSemaphore(&viewdata
->rastlock
);
1033 if (!viewdata
->trigger
|| viewdata
->picturevisiblesignal
== (UBYTE
)-1)
1035 DeleteViewData(viewdata
);
1044 #define SMOOTHCUTOFF (0.0005)
1046 /*--------------------------------------------------------------------
1048 ApplyViewData(struct viewdata *viewdata, settings, BOOL check)
1050 --------------------------------------------------------------------*/
1052 void ApplyViewData(struct viewdata
*viewdata
, struct mainsettings
*settings
, BOOL check
)
1054 BOOL delay_smooth
= FALSE
;
1055 float deltazoom
, deltaxpos
, deltaypos
;
1056 float xpos
, ypos
, zoom
;
1058 ULONG
*tagptr
= viewdata
->tagbuffer
;
1059 int changecount
= 0;
1062 assert(viewdata
->view
);
1064 viewdata
->destzoom
= RNG(0.1f
, viewdata
->destzoom
, 10.0f
);
1065 viewdata
->destxpos
= RNG(0.0f
, viewdata
->destxpos
, 1.0f
);
1066 viewdata
->destypos
= RNG(0.0f
, viewdata
->destypos
, 1.0f
);
1068 if (settings
->smoothdisplay
)
1070 deltazoom
= viewdata
->destzoom
- viewdata
->zoom
;
1071 if (ABS(deltazoom
) > SMOOTHCUTOFF
)
1074 viewdata
->zoom
+= deltazoom
;
1075 delay_smooth
= TRUE
;
1079 viewdata
->zoom
= viewdata
->destzoom
;
1082 deltaxpos
= viewdata
->destxpos
- viewdata
->xpos
;
1083 if (ABS(deltaxpos
) > SMOOTHCUTOFF
)
1086 viewdata
->xpos
+= deltaxpos
;
1087 delay_smooth
= TRUE
;
1091 viewdata
->xpos
= viewdata
->destxpos
;
1094 deltaypos
= viewdata
->destypos
- viewdata
->ypos
;
1095 if (ABS(deltaypos
) > SMOOTHCUTOFF
)
1098 viewdata
->ypos
+= deltaypos
;
1099 delay_smooth
= TRUE
;
1103 viewdata
->ypos
= viewdata
->destypos
;
1108 viewdata
->zoom
= viewdata
->destzoom
;
1109 viewdata
->xpos
= viewdata
->destxpos
;
1110 viewdata
->ypos
= viewdata
->destypos
;
1113 xpos
= RNG(0.0, viewdata
->xpos
, 1.0);
1114 ypos
= RNG(0.0, viewdata
->ypos
, 1.0);
1115 zoom
= RNG(0.1, viewdata
->zoom
, 10);
1116 angle
= viewdata
->angle
;
1118 if (!check
|| ABS(xpos
- viewdata
->oldxpos
) > SMOOTHCUTOFF
)
1120 *tagptr
++ = MVIEW_XPos
;
1121 *tagptr
++ = (ULONG
) (xpos
* 65536);
1124 viewdata
->oldxpos
= xpos
;
1126 if (!check
|| ABS(ypos
- viewdata
->oldypos
) > SMOOTHCUTOFF
)
1128 *tagptr
++ = MVIEW_YPos
;
1129 *tagptr
++ = (ULONG
) (ypos
* 65536);
1132 viewdata
->oldypos
= ypos
;
1134 if (!check
|| ABS(zoom
- viewdata
->oldzoom
) > SMOOTHCUTOFF
)
1136 *tagptr
++ = MVIEW_Zoom
;
1137 *tagptr
++ = (ULONG
) (zoom
* 65536);
1140 viewdata
->oldzoom
= zoom
;
1142 if (!check
|| (angle
- viewdata
->oldangle
))
1144 *tagptr
++ = MVIEW_Rotation
;
1146 viewdata
->oldangle
= angle
;
1154 MV_SetAttrsA(viewdata
->view
, (struct TagItem
*) viewdata
->tagbuffer
);
1164 /*--------------------------------------------------------------------
1166 char *SetPicInfoText(viewdata, pic, settings)
1168 --------------------------------------------------------------------*/
1170 char *SetPicInfoText(struct viewdata
*viewdata
, PICTURE
*pic
, struct mainsettings
*settings
)
1172 char *pitext
= NULL
;
1174 if (viewdata
&& settings
)
1176 if (settings
->picinfo
&& viewdata
->pichandler
)
1178 int maxpic
, currentpic
, status
;
1179 BOOL infotext
= FALSE
;
1181 viewdata
->statustext
[0] = 0;
1182 viewdata
->picturetext
[0] = 0;
1187 ULONG w
= 0, h
= 0, d
= 0;
1189 GetPictureAttrs(pic
,
1190 PICATTR_Width
, (IPTR
)&w
, PICATTR_Height
, (IPTR
)&h
, PICATTR_PixelFormat
, (IPTR
)&p
,
1192 d
= p
== PIXFMT_CHUNKY_CLUT
? 8 : 24;
1194 args
[0] = viewdata
->pathname
;
1195 args
[1] = viewdata
->filename
;
1196 args
[2] = (APTR
) (IPTR
) w
;
1197 args
[3] = (APTR
) (IPTR
) h
;
1198 args
[4] = (APTR
) (IPTR
) d
;
1199 args
[5] = viewdata
->formatname
;
1201 infotext
= FormatInfoText(viewdata
->picturetext
, settings
->picformat
, args
);
1205 maxpic
= GetTotalPicNumber(viewdata
->pichandler
);
1206 currentpic
= GetCurrentPicNumber(viewdata
->pichandler
);
1207 status
= GetPicHandlerStatus(viewdata
->pichandler
);
1212 sprintf(viewdata
->statustext
, MVTEXT_STAT_NOPIX
);
1214 else if (viewdata
->pichandler
->errortext
)
1216 char *errortext
= GetErrorText(viewdata
->pichandler
->error
);
1220 sprintf(viewdata
->statustext
, "%s - %s", viewdata
->pichandler
->errortext
, errortext
);
1224 sprintf(viewdata
->statustext
, "%s", viewdata
->pichandler
->errortext
);
1231 if (settings
->slideshow
)
1233 if (status
& PICHSTATUS_LOADING
)
1235 char *text
= viewdata
->isdirectory
?
1236 MVTEXT_STAT_SLIDESHOWLOADING_DIR
:
1237 MVTEXT_STAT_SLIDESHOWLOADING
;
1239 sprintf(viewdata
->statustext
, text
, currentpic
+ 1, maxpic
, viewdata
->picturetext
);
1243 char *text
= viewdata
->isdirectory
?
1244 MVTEXT_STAT_SLIDESHOW_DIR
:
1245 MVTEXT_STAT_SLIDESHOW
;
1247 sprintf(viewdata
->statustext
, text
, currentpic
+ 1, maxpic
, viewdata
->picturetext
);
1252 if (status
& PICHSTATUS_LOADING
)
1254 char *text
= viewdata
->isdirectory
?
1255 MVTEXT_STAT_MULTILOADING_DIR
:
1256 MVTEXT_STAT_MULTILOADING
;
1258 sprintf(viewdata
->statustext
, text
, currentpic
+ 1, maxpic
, viewdata
->picturetext
);
1262 char *text
= viewdata
->isdirectory
?
1263 MVTEXT_STAT_MULTI_DIR
:
1266 sprintf(viewdata
->statustext
, text
, currentpic
+ 1, maxpic
, viewdata
->picturetext
);
1272 if (status
& PICHSTATUS_LOADING
)
1274 char *text
= viewdata
->isdirectory
?
1275 MVTEXT_STAT_NORMALLOADING_DIR
:
1276 MVTEXT_STAT_NORMALLOADING
;
1278 sprintf(viewdata
->statustext
, text
, viewdata
->picturetext
);
1282 char *text
= viewdata
->isdirectory
?
1283 MVTEXT_STAT_NORMAL_DIR
:
1286 sprintf(viewdata
->statustext
, text
, viewdata
->picturetext
);
1294 if (status
& PICHSTATUS_LOADING
)
1296 sprintf(viewdata
->statustext
, MVTEXT_STAT_SCANNINGLOADING
, (long)maxpic
);
1300 sprintf(viewdata
->statustext
, MVTEXT_STAT_SCANNING
, (long)maxpic
);
1305 if (status
& PICHSTATUS_LOADING
)
1307 sprintf(viewdata
->statustext
, MVTEXT_STAT_LOADING_ONE
);
1313 if (strlen(viewdata
->statustext
))
1315 pitext
= viewdata
->statustext
;
1320 pitext
= NULL
; //"text disabled / no pichandler";
1328 /*--------------------------------------------------------------------
1330 DeleteViewPic(viewdata, defaultpic, settings)
1332 --------------------------------------------------------------------*/
1334 void DeleteViewPic(struct viewdata
*viewdata
, PICTURE
*defaultpic
, struct mainsettings
*settings
)
1338 MV_SetAttrs(viewdata
->view
,
1339 MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, defaultpic
, settings
),
1340 MVIEW_Picture
, (IPTR
)defaultpic
, TAG_DONE
);
1342 viewdata
->showpic
= NULL
;
1343 ReleasePic(viewdata
->pichandler
);
1349 /*--------------------------------------------------------------------
1351 newpicsignal = NewPicHandler(viewdata, filepatternlist, settings)
1353 --------------------------------------------------------------------*/
1355 ULONG
NewPicHandler(struct viewdata
*viewdata
, char **filepatternlist
, struct mainsettings
*settings
, PICTURE
*defaultpic
)
1359 DeletePicHandler(viewdata
->pichandler
);
1360 viewdata
->pichandler
= NULL
;
1362 if (filepatternlist
)
1364 DeleteViewPic(viewdata
, NULL
, settings
);
1368 DeleteViewPic(viewdata
, defaultpic
, settings
);
1371 viewdata
->pichandler
= CreatePicHandler(filepatternlist
,
1372 settings
->asyncscanning
,
1373 PICH_SimpleScanning
, settings
->simplescanning
,
1374 PICH_Reject
, (IPTR
)settings
->rejectpattern
,
1375 PICH_SortMode
, settings
->sortmode
,
1376 PICH_SortReverse
, settings
->reverse
,
1377 PICH_BufferPercent
, settings
->bufferpercent
,
1378 PICH_AutoCrop
, settings
->autocrop
,
1379 PICH_IncludeDirs
, settings
->browsemode
,
1380 PICH_Recursive
, settings
->browsemode
? FALSE
: settings
->recursive
,
1383 return NewPicSignal(viewdata
->pichandler
);
1393 /*--------------------------------------------------------------------
1395 SetViewText(viewdata, text)
1397 --------------------------------------------------------------------*/
1399 void SetViewText(struct viewdata
*viewdata
, char *text
)
1401 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)text
, TAG_DONE
);
1406 /*--------------------------------------------------------------------
1408 ResetDisplaySettings(viewdata, yesorno)
1410 --------------------------------------------------------------------*/
1412 void ResetDisplaySettings(struct viewdata
*viewdata
, BOOL reset
)
1416 viewdata
->destzoom
= 1;
1417 viewdata
->destxpos
= .5;
1418 viewdata
->destypos
= .5;
1419 viewdata
->angle
= 0;
1426 /*******************************************************************
1427 --------------------------------------------------------------------
1431 --------------------------------------------------------------------
1432 *******************************************************************/
1434 /*--------------------------------------------------------------------
1436 newmenu = CreateNewMenuItems(num, commandkeys, strings, emptystring, idlist)
1438 DeleteNewMenuItems(newmenuitems)
1440 --------------------------------------------------------------------*/
1442 void DeleteNewMenuItems(struct NewMenu
*newmenu
)
1450 if (newmenu
->nm_Label
!= NM_BARLABEL
)
1452 Free((APTR
)newmenu
->nm_Label
);
1454 Free((APTR
)newmenu
->nm_CommKey
);
1456 } while (newmenu
++->nm_Type
!= NM_END
);
1463 struct NewMenu
*CreateNewMenuItems(int num
, char **commkeys
,
1464 char **strings
, char *nostring
, APTR
*idlist
)
1467 struct NewMenu
*newitems
, *nm
;
1470 if ((newitems
= Malloclear(sizeof(struct NewMenu
) * (num
+ 2))))
1475 for (i
= 0; i
< (num
+ 1) && !error
; ++i
)
1477 if (i
== num
) /* last entry */
1479 nm
->nm_Type
= NM_END
;
1485 nm
->nm_Type
= NM_SUB
;
1486 nm
->nm_MutualExclude
= 0;
1487 nm
->nm_UserData
= *idlist
++;
1491 nm
->nm_Label
= _StrDup(nostring
);
1493 else if ((STRPTR
)(*strings
) == NM_BARLABEL
)
1495 nm
->nm_Label
= NM_BARLABEL
;
1499 nm
->nm_Label
= _StrDup(*strings
);
1504 nm
->nm_Flags
= NM_COMMANDSTRING
;
1507 char *c
= *commkeys
;
1513 nm
->nm_CommKey
= _StrDup(c
);
1518 nm
->nm_CommKey
= _StrDup("");
1521 if (nm
->nm_Label
&& nm
->nm_CommKey
)
1536 DeleteNewMenuItems(newitems
);
1542 /*--------------------------------------------------------------------
1544 SetupPathMenus(mv, settings);
1549 --------------------------------------------------------------------*/
1551 void FreePathMenus(struct mview
*mv
)
1555 struct MenuItem
*it
;
1557 if ((it
= FindMenuItem(mv
->window
->menu
, MITEM_COPYTOPATH
))) it
->SubItem
= NULL
;
1558 if ((it
= FindMenuItem(mv
->window
->menu
, MITEM_MOVETOPATH
))) it
->SubItem
= NULL
;
1560 if (mv
->copypathmenuitems
)
1561 FreeMenus((struct Menu
*) mv
->copypathmenuitems
);
1562 mv
->copypathmenuitems
= NULL
;
1564 if (mv
->movepathmenuitems
)
1565 FreeMenus((struct Menu
*) mv
->movepathmenuitems
);
1566 mv
->movepathmenuitems
= NULL
;
1568 DeleteNewMenuItems(mv
->copynewmenuarray
); mv
->copynewmenuarray
= NULL
;
1569 DeleteNewMenuItems(mv
->movenewmenuarray
); mv
->movenewmenuarray
= NULL
;
1573 void SetupPathMenus(struct mview
*mv
, struct pathsettings
*settings
)
1575 BOOL success
= FALSE
;
1581 if (mv
->window
->menu
)
1583 char *menuarray
[12];
1584 menuarray
[0] = settings
->copypath
;
1585 menuarray
[1] = NM_BARLABEL
;
1586 menuarray
[2] = settings
->destpath
[0];
1587 menuarray
[3] = settings
->destpath
[1];
1588 menuarray
[4] = settings
->destpath
[2];
1589 menuarray
[5] = settings
->destpath
[3];
1590 menuarray
[6] = settings
->destpath
[4];
1591 menuarray
[7] = settings
->destpath
[5];
1592 menuarray
[8] = settings
->destpath
[6];
1593 menuarray
[9] = settings
->destpath
[7];
1594 menuarray
[10] = settings
->destpath
[8];
1595 menuarray
[11] = settings
->destpath
[9];
1598 ClearMenuStrip(mv
->window
->window
);
1603 ULONG ids
[12] = {MITEM_COPYTO
, MITEM_DUMMY
, MITEM_COPY1
, MITEM_COPY1
+ 1, MITEM_COPY1
+ 2, MITEM_COPY1
+ 3, MITEM_COPY1
+ 4,
1604 MITEM_COPY1
+ 5, MITEM_COPY1
+ 6, MITEM_COPY1
+ 7, MITEM_COPY1
+ 8, MITEM_COPY1
+ 9};
1605 char *commkeys
[12] = {"_C", "", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10"};
1606 if ((mv
->copynewmenuarray
= CreateNewMenuItems(12, commkeys
, menuarray
, "(...)", (APTR
*) ids
)))
1608 if ((mv
->copypathmenuitems
= (struct MenuItem
*) CreateMenus(mv
->copynewmenuarray
, NULL
)))
1610 if (LayoutMenuItems(mv
->copypathmenuitems
, mv
->screen
->visualinfo
,
1611 GTMN_NewLookMenus
, TRUE
, TAG_DONE
))
1621 ULONG ids
[12] = {MITEM_MOVETO
, MITEM_DUMMY
, MITEM_MOVE1
, MITEM_MOVE1
+ 1, MITEM_MOVE1
+ 2, MITEM_MOVE1
+ 3, MITEM_MOVE1
+ 4,
1622 MITEM_MOVE1
+ 5, MITEM_MOVE1
+ 6, MITEM_MOVE1
+ 7, MITEM_MOVE1
+ 8, MITEM_MOVE1
+ 9};
1623 char *commkeys
[12] = {"_M", "", "SHIFT F1", "SHIFT F2", "SHIFT F3", "SHIFT F4", "SHIFT F5", "SHIFT F6", "SHIFT F7", "SHIFT F8", "SHIFT F9", "SHIFT F10"};
1625 if ((mv
->movenewmenuarray
= CreateNewMenuItems(12, commkeys
, menuarray
, "(...)", (APTR
*) ids
)))
1627 if ((mv
->movepathmenuitems
= (struct MenuItem
*) CreateMenus(mv
->movenewmenuarray
, NULL
)))
1629 if (LayoutMenuItems(mv
->movepathmenuitems
, mv
->screen
->visualinfo
,
1630 GTMN_NewLookMenus
, TRUE
, TAG_DONE
))
1640 struct MenuItem
*it
;
1643 if ((it
= FindMenuItem(mv
->window
->menu
, MITEM_COPYTOPATH
)))
1645 it
->SubItem
= mv
->copypathmenuitems
;
1652 if ((it
= FindMenuItem(mv
->window
->menu
, MITEM_MOVETOPATH
)))
1654 it
->SubItem
= mv
->movepathmenuitems
;
1661 success
= LayoutMenus(mv
->window
->menu
, mv
->screen
->visualinfo
,
1662 GTMN_NewLookMenus
, TRUE
, TAG_DONE
);
1671 SetMenuStrip(mv
->window
->window
, mv
->window
->menu
);
1678 /*--------------------------------------------------------------------
1680 SetupPresetMenu(mv, settings);
1685 --------------------------------------------------------------------*/
1687 void FreePresetMenu(struct mview
*mv
)
1691 struct MenuItem
*it
;
1693 if ((it
= FindMenuItem(mv
->window
->menu
, MITEM_USEPRESET
)))
1698 if (mv
->presetmenuitems
)
1700 FreeMenus((struct Menu
*) mv
->presetmenuitems
);
1703 mv
->presetmenuitems
= NULL
;
1705 DeleteNewMenuItems(mv
->presetmenuarray
);
1706 mv
->presetmenuarray
= NULL
;
1710 void SetupPresetMenu(struct mview
*mv
, struct pathsettings
*settings
)
1712 BOOL success
= FALSE
;
1718 if (mv
->window
->menu
)
1721 char *filenames
[10];
1722 char *commkeys
[10] = {"CTRL F1", "CTRL F2", "CTRL F3", "CTRL F4", "CTRL F5", "CTRL F6", "CTRL F7", "CTRL F8", "CTRL F9", "CTRL F10"};
1724 {MITEM_PRESET1
, MITEM_PRESET1
+ 1, MITEM_PRESET1
+ 2, MITEM_PRESET1
+ 3, MITEM_PRESET1
+ 4,
1725 MITEM_PRESET1
+ 5, MITEM_PRESET1
+ 6, MITEM_PRESET1
+ 7, MITEM_PRESET1
+ 8, MITEM_PRESET1
+ 9};
1727 for (i
= 0; i
< 10; ++i
)
1729 filenames
[i
] = settings
->preset
[i
] ? _StrDup(FilePart(settings
->preset
[i
])) : NULL
;
1732 ClearMenuStrip(mv
->window
->window
);
1736 if ((mv
->presetmenuarray
= CreateNewMenuItems(10, commkeys
, filenames
, "(...)", (APTR
*) ids
)))
1738 if ((mv
->presetmenuitems
= (struct MenuItem
*) CreateMenus(mv
->presetmenuarray
, NULL
)))
1740 if (LayoutMenuItems(mv
->presetmenuitems
, mv
->screen
->visualinfo
,
1741 GTMN_NewLookMenus
, TRUE
, TAG_DONE
))
1748 for (i
= 0; i
< 10; ++i
)
1755 struct MenuItem
*it
;
1758 if ((it
= FindMenuItem(mv
->window
->menu
, MITEM_USEPRESET
)))
1760 it
->SubItem
= mv
->presetmenuitems
;
1766 success
= LayoutMenus(mv
->window
->menu
, mv
->screen
->visualinfo
,
1767 GTMN_NewLookMenus
, TRUE
, TAG_DONE
);
1776 SetMenuStrip(mv
->window
->window
, mv
->window
->menu
);
1783 /*--------------------------------------------------------------------
1785 SetupPubscrenMenu(mv, settings);
1786 FreePubscreenMenu(mv);
1788 create pubscreen menu
1790 --------------------------------------------------------------------*/
1792 void FreePubscreenMenu(struct mview
*mv
)
1796 struct MenuItem
*it
;
1798 if ((it
= FindMenuItem(mv
->window
->menu
, MITEM_SELECTPUBSCREEN
)))
1803 if (mv
->pubscreenmenuitems
)
1805 FreeMenus((struct Menu
*) mv
->pubscreenmenuitems
);
1808 mv
->pubscreenmenuitems
= NULL
;
1810 DeleteNewMenuItems(mv
->pubscreenmenuarray
);
1811 mv
->pubscreenmenuarray
= NULL
;
1815 void SetupPubscreenMenu(struct mview
*mv
, struct mainsettings
*settings
)
1817 BOOL success
= FALSE
;
1823 if (mv
->window
->menu
)
1826 struct List
*pubscreenlist
;
1828 if ((pubscreenlist
= LockPubScreenList()))
1831 struct Node
*nextnode
;
1833 node
= pubscreenlist
->lh_Head
;
1834 while ((nextnode
= node
->ln_Succ
))
1844 char **p
= mv
->pubscreenlist
;
1849 if ((STRPTR
) *p
!= NM_BARLABEL
)
1855 Free(mv
->pubscreenlist
);
1858 if ((mv
->pubscreenlist
= CreateStringList(numscreens
+ 3)))
1862 node
= pubscreenlist
->lh_Head
;
1863 while ((nextnode
= node
->ln_Succ
))
1867 name
= ((struct PubScreenNode
*) node
)->psn_Node
.ln_Name
;
1871 if ((mv
->pubscreenlist
[count
+ 3] = _StrDup(name
)))
1882 UnlockPubScreenList();
1884 if (numscreens
&& mv
->pubscreenlist
)
1888 if ((idlist
= Malloc(sizeof(APTR
) * (numscreens
+ 3))))
1892 mv
->pubscreenlist
[0] = _StrDup("Select Mode...");
1893 mv
->pubscreenlist
[1] = NM_BARLABEL
;
1894 mv
->pubscreenlist
[2] = _StrDup("Default Screen");
1896 idlist
[0] = MITEM_CUSTOMSCREEN
;
1897 idlist
[1] = MITEM_DUMMY
;
1898 idlist
[2] = MITEM_DEFAULTSCREEN
;
1899 for (i
= 0; i
< numscreens
; ++i
)
1901 idlist
[i
+ 3] = MITEM_PUBSCREEN1
+ i
;
1904 ClearMenuStrip(mv
->window
->window
);
1906 FreePubscreenMenu(mv
);
1908 if ((mv
->pubscreenmenuarray
= CreateNewMenuItems(numscreens
+ 3, NULL
, mv
->pubscreenlist
, "", (APTR
*) idlist
)))
1910 if ((mv
->pubscreenmenuitems
= (struct MenuItem
*) CreateMenus(mv
->pubscreenmenuarray
, NULL
)))
1912 if (LayoutMenuItems(mv
->pubscreenmenuitems
, mv
->screen
->visualinfo
,
1913 GTMN_NewLookMenus
, TRUE
, TAG_DONE
))
1922 struct MenuItem
*it
;
1925 if ((it
= FindMenuItem(mv
->window
->menu
, MITEM_SELECTPUBSCREEN
)))
1927 it
->SubItem
= mv
->pubscreenmenuitems
;
1933 success
= LayoutMenus(mv
->window
->menu
, mv
->screen
->visualinfo
,
1934 GTMN_NewLookMenus
, TRUE
, TAG_DONE
);
1939 FreePubscreenMenu(mv
);
1943 SetMenuStrip(mv
->window
->window
, mv
->window
->menu
);
1954 /*--------------------------------------------------------------------
1956 SetMenuSettings (mview, settings, viewdata)
1957 put the current settings into the menus.
1959 --------------------------------------------------------------------*/
1961 void SetMenuSettings(struct mview
*mv
, struct mainsettings
*settings
)
1967 struct Menu
*menu
= mv
->window
->menu
;
1969 ClearMenuStrip(mv
->window
->window
);
1971 CLEARMENUITEM(menu
, MITEM_DITHERON
);
1972 CLEARMENUITEM(menu
, MITEM_DITHERAUTO
);
1973 switch (settings
->dither
)
1975 case MVDITHERMODE_ON
:
1976 SETMENUITEM(menu
, MITEM_DITHERON
);
1978 case MVDITHERMODE_AUTO
:
1979 SETMENUITEM(menu
, MITEM_DITHERAUTO
);
1983 CLEARMENUITEM(menu
, MITEM_KEEPASPECT1
);
1984 CLEARMENUITEM(menu
, MITEM_IGNOREASPECT
);
1985 switch (settings
->displaymode
)
1987 case MVDISPMODE_KEEPASPECT_MIN
:
1988 SETMENUITEM(menu
, MITEM_KEEPASPECT1
);
1990 case MVDISPMODE_IGNOREASPECT
:
1991 SETMENUITEM(menu
, MITEM_IGNOREASPECT
);
1995 CLEARMENUITEM(menu
, MITEM_STATIC
);
1996 if (settings
->staticpalette
) SETMENUITEM(menu
, MITEM_STATIC
);
1998 CLEARMENUITEM(menu
, MITEM_BACKDROP
);
1999 if (settings
->borderless
) SETMENUITEM(menu
, MITEM_BACKDROP
);
2001 CLEARMENUITEM(menu
, MITEM_SMALLWINDOW
);
2002 CLEARMENUITEM(menu
, MITEM_HALFWINDOW
);
2003 CLEARMENUITEM(menu
, MITEM_LARGEWINDOW
);
2004 CLEARMENUITEM(menu
, MITEM_VISIBLEWINDOW
);
2005 CLEARMENUITEM(menu
, MITEM_FULLWINDOW
);
2006 CLEARMENUITEM(menu
, MITEM_FIXEDWINDOWSIZE
);
2007 switch (settings
->winsizemode
)
2009 case WSIZEMODE_33PERCENT
:
2010 SETMENUITEM(menu
, MITEM_SMALLWINDOW
);
2012 case WSIZEMODE_HALF
:
2013 SETMENUITEM(menu
, MITEM_HALFWINDOW
);
2015 case WSIZEMODE_66PERCENT
:
2016 SETMENUITEM(menu
, MITEM_LARGEWINDOW
);
2018 case WSIZEMODE_VISIBLE
:
2019 SETMENUITEM(menu
, MITEM_VISIBLEWINDOW
);
2021 case WSIZEMODE_FULL
:
2022 SETMENUITEM(menu
, MITEM_FULLWINDOW
);
2024 case WSIZEMODE_NONE
:
2025 SETMENUITEM(menu
, MITEM_FIXEDWINDOWSIZE
);
2029 CLEARMENUITEM(menu
, MITEM_CENTERWINDOW
);
2030 CLEARMENUITEM(menu
, MITEM_MOUSEWINDOW
);
2031 CLEARMENUITEM(menu
, MITEM_FIXEDWINDOWPOS
);
2032 switch (settings
->winopenmode
)
2034 case WOPENMODE_CENTER
:
2035 SETMENUITEM(menu
, MITEM_CENTERWINDOW
);
2037 case WOPENMODE_MOUSE
:
2038 SETMENUITEM(menu
, MITEM_MOUSEWINDOW
);
2040 case WOPENMODE_NONE
:
2041 SETMENUITEM(menu
, MITEM_FIXEDWINDOWPOS
);
2045 CLEARMENUITEM(menu
, MITEM_REQUESTFILE
);
2046 if (settings
->requestfile
) SETMENUITEM(menu
, MITEM_REQUESTFILE
);
2048 CLEARMENUITEM(menu
, MITEM_OPAQUE
);
2049 CLEARMENUITEM(menu
, MITEM_GRID
);
2050 switch (settings
->previewmode
)
2052 case MVPREVMODE_OPAQUE
:
2053 SETMENUITEM(menu
, MITEM_OPAQUE
);
2055 case MVPREVMODE_GRID
:
2056 SETMENUITEM(menu
, MITEM_GRID
);
2060 CLEARMENUITEM(menu
, MITEM_SLIDE
);
2061 if (settings
->slideshow
) SETMENUITEM(menu
, MITEM_SLIDE
);
2063 CLEARMENUITEM(menu
, MITEM_PICINFO
);
2064 if (settings
->picinfo
) SETMENUITEM(menu
, MITEM_PICINFO
);
2066 CLEARMENUITEM(menu
, MITEM_CACHE_OFF
);
2067 CLEARMENUITEM(menu
, MITEM_CACHE_SMALL
);
2068 CLEARMENUITEM(menu
, MITEM_CACHE_MEDIUM
);
2069 CLEARMENUITEM(menu
, MITEM_CACHE_LARGE
);
2070 CLEARMENUITEM(menu
, MITEM_CACHE_HUGE
);
2071 switch (settings
->bufferpercent
)
2074 SETMENUITEM(menu
, MITEM_CACHE_OFF
);
2077 SETMENUITEM(menu
, MITEM_CACHE_SMALL
);
2080 SETMENUITEM(menu
, MITEM_CACHE_MEDIUM
);
2083 SETMENUITEM(menu
, MITEM_CACHE_LARGE
);
2086 SETMENUITEM(menu
, MITEM_CACHE_HUGE
);
2092 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_0
);
2093 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_04
);
2094 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_1
);
2095 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_2
);
2096 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_5
);
2097 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_10
);
2098 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_30
);
2099 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_60
);
2100 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_120
);
2101 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_300
);
2102 CLEARMENUITEM(menu
, MITEM_SLIDEDELAY_600
);
2103 switch (settings
->slidedelay
)
2106 SETMENUITEM(menu
, MITEM_SLIDEDELAY_0
);
2109 SETMENUITEM(menu
, MITEM_SLIDEDELAY_04
);
2112 SETMENUITEM(menu
, MITEM_SLIDEDELAY_1
);
2115 SETMENUITEM(menu
, MITEM_SLIDEDELAY_2
);
2118 SETMENUITEM(menu
, MITEM_SLIDEDELAY_5
);
2121 SETMENUITEM(menu
, MITEM_SLIDEDELAY_10
);
2124 SETMENUITEM(menu
, MITEM_SLIDEDELAY_30
);
2127 SETMENUITEM(menu
, MITEM_SLIDEDELAY_60
);
2130 SETMENUITEM(menu
, MITEM_SLIDEDELAY_120
);
2133 SETMENUITEM(menu
, MITEM_SLIDEDELAY_300
);
2136 SETMENUITEM(menu
, MITEM_SLIDEDELAY_600
);
2142 CLEARMENUITEM(menu
, MITEM_AUTOQUIT
);
2143 if (settings
->autoquit
) SETMENUITEM(menu
, MITEM_AUTOQUIT
);
2145 CLEARMENUITEM(menu
, MITEM_AUTOSTOP
);
2146 if (settings
->autostop
) SETMENUITEM(menu
, MITEM_AUTOSTOP
);
2148 CLEARMENUITEM(menu
, MITEM_AUTOCLEAR
);
2149 if (settings
->autoclear
) SETMENUITEM(menu
, MITEM_AUTOCLEAR
);
2151 CLEARMENUITEM(menu
, MITEM_AUTOHIDE
);
2152 if (settings
->autohide
) SETMENUITEM(menu
, MITEM_AUTOHIDE
);
2154 CLEARMENUITEM(menu
, MITEM_LOOP
);
2155 if (settings
->loop
) SETMENUITEM(menu
, MITEM_LOOP
);
2157 CLEARMENUITEM(menu
, MITEM_SORT_NONE
);
2158 CLEARMENUITEM(menu
, MITEM_SORT_ALPHA_FILE
);
2159 CLEARMENUITEM(menu
, MITEM_SORT_ALPHA_FULL
);
2160 CLEARMENUITEM(menu
, MITEM_SORT_RANDOM
);
2161 CLEARMENUITEM(menu
, MITEM_SORT_FILESIZE
);
2162 CLEARMENUITEM(menu
, MITEM_SORT_DATE
);
2163 switch (settings
->sortmode
)
2166 SETMENUITEM(menu
, MITEM_SORT_NONE
);
2168 case SORTMODE_ALPHA_FILE
:
2169 SETMENUITEM(menu
, MITEM_SORT_ALPHA_FILE
);
2171 case SORTMODE_RANDOM
:
2172 SETMENUITEM(menu
, MITEM_SORT_RANDOM
);
2174 case SORTMODE_FILESIZE
:
2175 SETMENUITEM(menu
, MITEM_SORT_FILESIZE
);
2177 case SORTMODE_ALPHA_FULL
:
2178 SETMENUITEM(menu
, MITEM_SORT_ALPHA_FULL
);
2181 SETMENUITEM(menu
, MITEM_SORT_DATE
);
2185 CLEARMENUITEM(menu
, MITEM_SORT_REVERSE
);
2186 if (settings
->reverse
) SETMENUITEM(menu
, MITEM_SORT_REVERSE
);
2188 CLEARMENUITEM(menu
, MITEM_MARKCENTER
);
2189 if (settings
->markcenter
) SETMENUITEM(menu
, MITEM_MARKCENTER
);
2191 CLEARMENUITEM(menu
, MITEM_SHOWARROWS
);
2192 if (settings
->showarrows
) SETMENUITEM(menu
, MITEM_SHOWARROWS
);
2194 CLEARMENUITEM(menu
, MITEM_SHOWPIP
);
2195 if (settings
->showpip
) SETMENUITEM(menu
, MITEM_SHOWPIP
);
2197 CLEARMENUITEM(menu
, MITEM_SHOWBUTTONS
);
2198 if (settings
->showbuttons
) SETMENUITEM(menu
, MITEM_SHOWBUTTONS
);
2200 CLEARMENUITEM(menu
, MITEM_RESETDISPLAYSETTINGS
);
2201 if (settings
->resetdisplaysettings
) SETMENUITEM(menu
, MITEM_RESETDISPLAYSETTINGS
);
2203 CLEARMENUITEM(menu
, MITEM_CREATETHUMBNAILS
);
2204 if (settings
->createthumbnails
) SETMENUITEM(menu
, MITEM_CREATETHUMBNAILS
);
2206 CLEARMENUITEM(menu
, MITEM_ASYNCSCANNING
);
2207 if (settings
->asyncscanning
) SETMENUITEM(menu
, MITEM_ASYNCSCANNING
);
2209 CLEARMENUITEM(menu
, MITEM_FILTERPICTURES
);
2210 if (settings
->filterpictures
) SETMENUITEM(menu
, MITEM_FILTERPICTURES
);
2212 CLEARMENUITEM(menu
, MITEM_APPENDICONS
);
2213 if (settings
->appendicons
) SETMENUITEM(menu
, MITEM_APPENDICONS
);
2215 CLEARMENUITEM(menu
, MITEM_LMB_DRAG
);
2216 if (settings
->leftmouseaction
== MOUSEACTION_DRAG
) SETMENUITEM(menu
, MITEM_LMB_DRAG
);
2218 CLEARMENUITEM(menu
, MITEM_AUTODISPLAYMODE
);
2219 if (settings
->autodisplaymode
) SETMENUITEM(menu
, MITEM_AUTODISPLAYMODE
);
2221 CLEARMENUITEM(menu
, MITEM_AUTOCROP
);
2222 if (settings
->autocrop
) SETMENUITEM(menu
, MITEM_AUTOCROP
);
2224 ResetMenuStrip(mv
->window
->window
, mv
->window
->menu
);
2231 void SetMenuPathSettings(struct mview
*mv
, struct pathsettings
*settings
)
2237 struct Menu
*menu
= mv
->window
->menu
;
2239 ClearMenuStrip(mv
->window
->window
);
2241 CLEARMENUITEM(menu
, MITEM_AUTOSAVESETTINGS
);
2242 if (settings
->autosavesettings
) SETMENUITEM(menu
, MITEM_AUTOSAVESETTINGS
);
2244 ResetMenuStrip(mv
->window
->window
, mv
->window
->menu
);
2250 //////////////////////////////////////////////////////////////////////
2251 //////////////////////////////////////////////////////////////////////
2252 //////////////////////////////////////////////////////////////////////
2257 //////////////////////////////////////////////////////////////////////
2258 //////////////////////////////////////////////////////////////////////
2259 //////////////////////////////////////////////////////////////////////
2261 /*********************************************************************
2262 ----------------------------------------------------------------------
2264 waslastpic = GetNextPicture(mview, buttons, viewdata, settings, no-more-pic)
2266 ----------------------------------------------------------------------
2267 *********************************************************************/
2269 BOOL
GetNextPicture(struct mview
*mv
, struct MVButtons
*buttons
, struct viewdata
*viewdata
,
2270 struct mainsettings
*settings
, PICTURE
*defaultpic
, ULONG
*newpicsignal
)
2272 BOOL lastpic
= FALSE
;
2274 if (viewdata
->pichandler
)
2278 if (GetNextPicNumber(viewdata
->pichandler
) == 0)
2280 if (GetCurrentPicNumber(viewdata
->pichandler
) != -1)
2282 if (GetTotalPicNumber(viewdata
->pichandler
) == 1)
2289 if (!settings
->loop
)
2294 DeleteViewPic(viewdata
, defaultpic
, settings
);
2295 // Free(viewdata->picinfotext);
2296 // viewdata->picinfotext = NULL;
2297 SetViewText(viewdata
, MVTEXT_SELECTNEXTPICTORESUME
);
2298 ResetPicHandler(viewdata
->pichandler
);
2306 NextPic(viewdata
->pichandler
); // request next picture
2307 // SetViewText(viewdata, SetPicInfoText(viewdata, defaultpic, settings));
2310 SetTrigger(viewdata
->trigger
, 0); // suspend trigger
2315 ResetDisplaySettings(viewdata
, settings
->resetdisplaysettings
);
2316 if (settings
->autostop
) settings
->slideshow
= FALSE
;
2317 SetMenuSettings(mv
, settings
);
2318 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
2320 if (settings
->autoclear
)
2322 //signals &= ~newpicsignal;
2323 *newpicsignal
= NewPicHandler(viewdata
, NULL
, settings
, mv
->logopic
);
2332 /*********************************************************************
2333 ----------------------------------------------------------------------
2335 GetCurrentPicture(mview, buttons, viewdata, settings, no-more-pic)
2337 ----------------------------------------------------------------------
2338 *********************************************************************/
2340 void GetCurrentPicture(struct mview
*mv
, struct MVButtons
*buttons
, struct viewdata
*viewdata
,
2341 struct mainsettings
*settings
, PICTURE
*defaultpic
)
2343 if (viewdata
->pichandler
)
2347 if (GetTotalPicNumber(viewdata
->pichandler
) == 0)
2349 DeleteViewPic(viewdata
, defaultpic
, settings
);
2354 if (GetNextPicNumber(viewdata
->pichandler
) == 0)
2362 CurrentPic(viewdata
->pichandler
); // request
2365 //!!!!!!!!! SetViewText(viewdata, SetPicInfoText(viewdata, defaultpic, settings));
2367 SetTrigger(viewdata
->trigger
, 0); // suspend trigger
2372 /*********************************************************************
2373 ----------------------------------------------------------------------
2375 status = HandleMView (mview, **settings, **pathsettings, oldsettings, viewdata, reopen, char **filepatternlist)
2377 ----------------------------------------------------------------------
2378 *********************************************************************/
2380 int HandleMView (struct mview
*mv
,
2381 struct mainsettings
**initsettings
,
2382 struct pathsettings
**initpathsettings
,
2383 struct mainsettings
*oldsettings
, struct viewdata
*viewdata
, BOOL reopen
)
2385 #define REQUEST_NONE 0
2386 #define REQUEST_OPENFILES 1
2387 #define REQUEST_APPENDFILES 2
2389 int status
= STATUS_WORKING
;
2390 int requestfiles
= REQUEST_NONE
;
2392 BOOL mousebutton
= FALSE
;
2393 BOOL checkinvisiblegadgets
= FALSE
;
2395 BOOL slidesuspended
= FALSE
;
2399 struct IntuiMessage
*imsg
;
2400 struct AppMessage
*appmsg
;
2403 ULONG loadsignal
= 0;
2406 ULONG triggersignal
;
2407 ULONG newpicsignal
= 0;
2409 struct MVButtons
*buttons
;
2411 ULONG cxsignal
= 1 << (mv
->brokermsgport
->mp_SigBit
);
2414 struct mainsettings
*settings
= *initsettings
;
2415 struct pathsettings
*pathsettings
= *initpathsettings
;
2417 BOOL setviewrelative
= FALSE
;
2419 ULONG currentidcmp
= mv
->window
->idcmpmask
;
2426 SetupPathMenus(mv
, pathsettings
);
2427 SetupPresetMenu(mv
, pathsettings
);
2428 SetupPubscreenMenu(mv
, settings
);
2429 SetMenuSettings(mv
, settings
);
2430 SetMenuPathSettings(mv
, pathsettings
);
2435 ** misc initializations
2438 if (pathsettings
->startpath
&& !viewdata
->pathname
)
2440 viewdata
->pathname
= _StrDup(pathsettings
->startpath
);
2443 triggersignal
= SetTrigger(viewdata
->trigger
, 0); // trigger suspended
2451 buttons
= CreateButtons(mv
->buttonpic
, mv
->animpic
, mv
->window
);
2454 EasyRequest(mv
->window
->window
, &nobuttonsreq
, NULL
, NULL
);
2457 if (settings
->showbuttons
)
2459 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, TRUE
);
2467 viewdata
->view
= MV_Create(mv
->screen
->screen
, mv
->window
->window
->RPort
,
2468 MVIEW_BackColor
, settings
->bgcolor
,
2469 MVIEW_TextColor
, settings
->textcolor
,
2470 MVIEW_MarkColor
, settings
->markcolor
,
2471 MVIEW_DisplayMode
, settings
->displaymode
,
2472 MVIEW_DestWidth
, mv
->window
->innerwidth
,
2473 MVIEW_DestHeight
, mv
->window
->innerheight
- (settings
->showbuttons
&& buttons
? buttons
->gadgetheight
+ BUTTON_VSPACE
* 2 : 0),
2474 MVIEW_DestX
, mv
->window
->innerleft
,
2475 MVIEW_DestY
, mv
->window
->innertop
+ (settings
->showbuttons
&& buttons
? buttons
->gadgetheight
+ BUTTON_VSPACE
* 2 : 0),
2476 MVIEW_Precision
, settings
->precision
,
2477 MVIEW_PreviewMode
, settings
->previewmode
,
2478 MVIEW_StaticPalette
, settings
->staticpalette
,
2479 MVIEW_Dither
, settings
->dither
,
2480 MVIEW_DitherMode
, settings
->dithermode
,
2481 MVIEW_HSType
, settings
->hstype
,
2482 MVIEW_ScreenAspectX
, settings
->screenaspectx
,
2483 MVIEW_ScreenAspectY
, settings
->screenaspecty
,
2484 MVIEW_ShowCursor
, settings
->markcenter
,
2485 MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
),
2486 MVIEW_Picture
, viewdata
->showpic
? (IPTR
)viewdata
->showpic
: (IPTR
)mv
->logopic
,
2487 MVIEW_ReadySignal
, viewdata
->picturevisiblesignal
,
2488 MVIEW_DrawArrows
, settings
->showarrows
,
2489 MVIEW_ShowPip
, settings
->showpip
,
2490 MVIEW_RPSemaphore
, (IPTR
)&viewdata
->rastlock
,
2493 if (!viewdata
->view
)
2495 EasyRequest(mv
->window
->window
, &noviewreq
, NULL
, NULL
);
2498 ApplyViewData(viewdata
, settings
, FALSE
);
2500 MV_DrawOn(viewdata
->view
);
2505 ** create picture handler
2508 if (!viewdata
->pichandler
)
2510 NewPicHandler(viewdata
, viewdata
->startfilepatternlist
, settings
, mv
->logopic
);
2512 if (!viewdata
->pichandler
)
2514 EasyRequest(mv
->window
->window
, &nopichandlerreq
, NULL
, NULL
);
2518 newpicsignal
= NewPicSignal(viewdata
->pichandler
);
2519 SetSortMode(viewdata
->pichandler
, settings
->sortmode
, settings
->reverse
);
2524 ** open filerequester?
2527 if (!reopen
&& !viewdata
->startfilepatternlist
)
2529 requestfiles
= settings
->requestfile
? REQUEST_OPENFILES
: REQUEST_NONE
;
2536 ** continue slideshow / reload / display resume message
2539 if (GetTotalPicNumber(viewdata
->pichandler
) > 0)
2541 if (GetCurrentPicNumber(viewdata
->pichandler
) == -1)
2543 SetViewText(viewdata
, MVTEXT_SELECTNEXTPICTORESUME
);
2544 ResetPicHandler(viewdata
->pichandler
);
2548 if (settings
->slideshow
)
2550 if (GetTotalPicNumber(viewdata
->pichandler
) > 1)
2552 SetTrigger(viewdata
->trigger
, settings
->slidedelay
? settings
->slidedelay
* 5 : MINDELAY
);
2568 (ABS(viewdata
->destzoom
- viewdata
->zoom
) > SMOOTHCUTOFF
) |
2569 (ABS(viewdata
->destxpos
- viewdata
->xpos
) > SMOOTHCUTOFF
) |
2570 (ABS(viewdata
->destypos
- viewdata
->ypos
) > SMOOTHCUTOFF
);
2574 win
= mv
->window
->window
;
2575 menu
= mv
->window
->menu
;
2576 idcmpsignal
= mv
->window
->idcmpSignal
;
2577 appsignal
= mv
->appSignal
;
2588 if (settings
->showbuttons
&& !do_smoothing
)
2591 while ((status
= GetPicHandlerStatus(viewdata
->pichandler
))
2592 & (PICHSTATUS_LOADING
| PICHSTATUS_SCANNING
))
2594 AnimateButtons(viewdata
, buttons
, FALSE
);
2595 if ((signals
= SetSignal(0, 0)) & (idcmpsignal
| appsignal
| triggersignal
|
2596 newpicsignal
| (1 << viewdata
->picturevisiblesignal
) |
2597 loadsignal
| cxsignal
| SIGBREAKF_CTRL_C
))
2604 if (status
== PICHSTATUS_IDLE
) AnimateButtons(viewdata
, buttons
, TRUE
);
2607 if (requestfiles
== REQUEST_NONE
&& !do_smoothing
)
2609 signals
= Wait(idcmpsignal
| appsignal
| triggersignal
|
2610 newpicsignal
| (1 << viewdata
->picturevisiblesignal
) |
2611 loadsignal
| cxsignal
| SIGBREAKF_CTRL_C
);
2615 signals
= SetSignal(0, idcmpsignal
| appsignal
| triggersignal
|
2616 newpicsignal
| (1 << viewdata
->picturevisiblesignal
) |
2617 loadsignal
| cxsignal
| SIGBREAKF_CTRL_C
);
2624 BOOL hardrefresh
= FALSE
;
2626 if (signals
& idcmpsignal
)
2628 struct IntuiMessage myImsg
;
2629 // BOOL setviewrelative = FALSE;
2630 BOOL relayoutmenus
= FALSE
;
2631 BOOL softrefresh
= FALSE
;
2632 BOOL setmenusettings
= FALSE
;
2634 while ((imsg
= GT_GetIMsg(win
->UserPort
)))
2636 memcpy(&myImsg
, imsg
, sizeof(struct IntuiMessage
));
2640 myImsg
.MouseX
-= win
->BorderLeft
;
2641 myImsg
.MouseY
-= win
->BorderTop
;
2643 if (buttons
&& settings
->showbuttons
&& myImsg
.Class
== IDCMP_MOUSEBUTTONS
)
2647 ObtainSemaphore(&viewdata
->rastlock
);
2648 id
= HandleGadgetListEvent(buttons
->gadgetlist
, &myImsg
, buttons
->bitmap
);
2649 ReleaseSemaphore(&viewdata
->rastlock
);
2651 if (id
!=INVALID_FAKEGADGET
)
2656 requestfiles
= REQUEST_OPENFILES
;
2660 if (viewdata
->pichandler
)
2662 ResetPicHandler(viewdata
->pichandler
);
2663 GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
);
2665 SetTrigger(viewdata
->trigger
, 0);
2666 settings
->slideshow
= FALSE
;
2667 // SetMenuSettings(mv, settings);
2668 setmenusettings
= TRUE
;
2669 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
2670 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
), TAG_DONE
);
2675 if (GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
))
2677 if (settings
->autoquit
) status
= STATUS_QUIT
;
2678 else if (settings
->autohide
) status
= STATUS_SLEEP
;
2679 else if (settings
->requestfile
) requestfiles
= REQUEST_OPENFILES
;
2684 if (PrevPic(viewdata
->pichandler
))
2686 SetTrigger(viewdata
->trigger
, 0);
2687 settings
->slideshow
= FALSE
;
2688 // SetMenuSettings(mv, settings);
2689 setmenusettings
= TRUE
;
2690 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
2691 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
), TAG_DONE
);
2696 if ((settings
->slideshow
= buttons
->gadgets
[GAD_SLIDE
]->togglestatus
))
2698 SetTrigger(viewdata
->trigger
, settings
->slidedelay
? settings
->slidedelay
* 5 : MINDELAY
);
2702 SetTrigger(viewdata
->trigger
, 0);
2704 // SetMenuSettings(mv, settings);
2705 setmenusettings
= TRUE
;
2706 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
), TAG_DONE
);
2710 if ((settings
->loop
= buttons
->gadgets
[GAD_LOOP
]->togglestatus
))
2712 settings
->autoquit
= FALSE
;
2713 settings
->autohide
= FALSE
;
2714 // SetMenuSettings(mv, settings);
2715 // setmenusettings = TRUE;
2717 //SetMenuSettings(mv, settings);
2718 setmenusettings
= TRUE
;
2721 case GAD_DISPLAYMODE
:
2723 int newdisplaymode
=
2724 buttons
->gadgets
[GAD_DISPLAYMODE
]->togglestatus
?
2725 MVDISPMODE_KEEPASPECT_MIN
: MVDISPMODE_IGNOREASPECT
;
2727 if (newdisplaymode
!= settings
->displaymode
)
2729 settings
->displaymode
= newdisplaymode
;
2730 // SetMenuSettings(mv, settings);
2731 setmenusettings
= TRUE
;
2732 Train(mv
, settings
, viewdata
);
2733 MV_SetAttrs(viewdata
->view
, MVIEW_DisplayMode
, settings
->displaymode
, TAG_DONE
);
2740 ResetDisplaySettings(viewdata
, TRUE
);
2751 switch (myImsg
.Class
)
2753 case IDCMP_ACTIVEWINDOW
:
2754 SetupPubscreenMenu(mv
, settings
);
2755 mousebutton
= FALSE
;
2758 case IDCMP_INACTIVEWINDOW
:
2759 mousebutton
= FALSE
;
2762 case IDCMP_MOUSEMOVE
:
2765 if (!setviewrelative
)
2767 setviewrelative
= TRUE
;
2772 case IDCMP_MOUSEBUTTONS
:
2774 ULONG newidcmp
= currentidcmp
;
2777 MV_GetAttrs(viewdata
->view
,
2778 MVIEW_PictureX
, (IPTR
)&x
, MVIEW_PictureY
, (IPTR
)&y
,
2779 MVIEW_PictureWidth
, (IPTR
)&w
, MVIEW_PictureHeight
, (IPTR
)&h
, TAG_DONE
);
2781 switch (myImsg
.Code
)
2785 if (checkinvisiblegadgets
)
2787 if (myImsg
.MouseY
== 0)
2789 if (myImsg
.MouseX
== 0)
2791 status
= settings
->hideonclose
? STATUS_SLEEP
: STATUS_QUIT
;
2793 else if (myImsg
.MouseX
== mv
->screen
->screen
->Width
- 1)
2795 ScreenToBack(mv
->screen
->screen
);
2800 checkinvisiblegadgets
= FALSE
;
2801 setviewrelative
= FALSE
;
2802 mousebutton
= FALSE
;
2803 newidcmp
&= ~(IDCMP_MOUSEMOVE
| IDCMP_INTUITICKS
);
2805 if (settings
->leftmouseaction
== MOUSEACTION_NEXT
)
2807 if (myImsg
.MouseX
>= x
&& myImsg
.MouseX
< x
+w
&& myImsg
.MouseY
>= y
&& myImsg
.MouseY
< y
+h
)
2809 if (GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
))
2811 if (settings
->autoquit
) status
= STATUS_QUIT
;
2812 else if (settings
->autohide
) status
= STATUS_SLEEP
;
2813 else if (settings
->requestfile
) requestfiles
= REQUEST_OPENFILES
;
2826 if (myImsg
.MouseY
== 0 && win
->TopEdge
== 0)
2828 if (myImsg
.MouseX
== 0 && win
->LeftEdge
== 0)
2830 checkinvisiblegadgets
= TRUE
;
2832 else if (myImsg
.MouseX
== win
->Width
- 1 && myImsg
.MouseX
== mv
->screen
->screen
->Width
- 1)
2834 checkinvisiblegadgets
= TRUE
;
2838 if (!checkinvisiblegadgets
)
2840 if (myImsg
.MouseX
>= x
&& myImsg
.MouseX
< x
+w
&& myImsg
.MouseY
>= y
&& myImsg
.MouseY
< y
+h
)
2842 newidcmp
|= IDCMP_INTUITICKS
;
2843 if (settings
->leftmouseaction
== MOUSEACTION_DRAG
)
2845 newidcmp
|= IDCMP_MOUSEMOVE
;
2846 MV_SetViewStart(viewdata
->view
, myImsg
.MouseX
, myImsg
.MouseY
);
2854 if (newidcmp
!= currentidcmp
)
2856 ModifyIDCMP(win
, newidcmp
);
2857 currentidcmp
= newidcmp
;
2866 switch (settings
->leftmouseaction
)
2868 case MOUSEACTION_DRAG
:
2869 switch (myImsg
.Code
)
2872 if (checkinvisiblegadgets
)
2874 if (myImsg
.MouseY
== 0)
2876 if (myImsg
.MouseX
== 0)
2878 status
= STATUS_QUIT
;
2880 else if (myImsg
.MouseX
== mv
->screen
->screen
->Width
- 1)
2882 ScreenToBack(mv
->screen
->screen
);
2888 ModifyIDCMP(win
, mv
->window
->idcmpmask
);
2889 mousebutton
= FALSE
;
2891 checkinvisiblegadgets
= FALSE
;
2893 if (setviewrelative
)
2895 setviewrelative
= FALSE
;
2902 MV_GetAttrs(viewdata
->view
,
2903 MVIEW_PictureX
, &x
, MVIEW_PictureY
, &y
,
2904 MVIEW_PictureWidth
, &w
, MVIEW_PictureHeight
, &h
, TAG_DONE
);
2906 if (myImsg
.MouseY
== 0 && win
->TopEdge
== 0)
2908 if (myImsg
.MouseX
== 0 && win
->LeftEdge
== 0)
2910 checkinvisiblegadgets
= TRUE
;
2912 else if (myImsg
.MouseX
== win
->Width
- 1 && myImsg
.MouseX
== mv
->screen
->screen
->Width
- 1)
2914 checkinvisiblegadgets
= TRUE
;
2918 if (myImsg
.MouseX
>= x
&& myImsg
.MouseX
< x
+w
&& myImsg
.MouseY
>= y
&& myImsg
.MouseY
< y
+h
)
2920 // ModifyIDCMP(win, mv->window->idcmpmask | IDCMP_MOUSEMOVE);
2921 MV_SetViewStart(viewdata
->view
, myImsg
.MouseX
, myImsg
.MouseY
);
2922 // mousebutton = TRUE;
2926 ModifyIDCMP(win
, mv
->window
->idcmpmask
| IDCMP_MOUSEMOVE
| IDCMP_INTUITICKS
);
2935 case MOUSEACTION_NEXT
:
2936 if (myImsg
.Code
== SELECTDOWN
)
2939 MV_GetAttrs(viewdata
->view
,
2940 MVIEW_PictureX
, &x
, MVIEW_PictureY
, &y
,
2941 MVIEW_PictureWidth
, &w
, MVIEW_PictureHeight
, &h
, TAG_DONE
);
2943 if (myImsg
.MouseX
>= x
&& myImsg
.MouseX
< x
+w
&& myImsg
.MouseY
>= y
&& myImsg
.MouseY
< y
+h
)
2945 if (GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
))
2947 if (settings
->autoquit
) status
= STATUS_QUIT
;
2948 else if (settings
->autohide
) status
= STATUS_SLEEP
;
2949 else if (settings
->requestfile
) requestfiles
= REQUEST_OPENFILES
;
2958 case IDCMP_CLOSEWINDOW
:
2959 status
= settings
->hideonclose
? STATUS_SLEEP
: STATUS_QUIT
;
2966 case IDCMP_REFRESHWINDOW
:
2968 EndRefresh(win
, TRUE
);
2974 double inkrement
= .01;
2976 if (myImsg
.Qualifier
& IEQUALIFIER_CONTROL
)
2979 if (myImsg
.Qualifier
& (IEQUALIFIER_LSHIFT
| IEQUALIFIER_RSHIFT
))
2982 if (myImsg
.Code
>= 80 && myImsg
.Code
<= 89)
2984 int slot
= myImsg
.Code
- 80;
2985 if (myImsg
.Qualifier
& IEQUALIFIER_CONTROL
)
2987 if (MVFunction_UsePreset(mv
, &settings
, pathsettings
, viewdata
, slot
, TRUE
))
2989 status
= STATUS_REOPENALL
;
2992 else //if (myImsg.Qualifier & (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT) || myImsg.Qualifier == 0)
2994 int action
= (myImsg
.Qualifier
& (IEQUALIFIER_LSHIFT
| IEQUALIFIER_RSHIFT
)) ? FILEACTION_MOVE
: FILEACTION_COPY
;
2995 MVFunction_CopyMoveToPath(mv
, settings
, pathsettings
, viewdata
, slot
, action
, TRUE
, buttons
);
2996 SetupPathMenus(mv
, pathsettings
);
3001 switch (myImsg
.Code
)
3004 viewdata
->destypos
-= inkrement
;
3007 viewdata
->destypos
+= inkrement
;
3010 viewdata
->destxpos
+= inkrement
;
3013 viewdata
->destxpos
-= inkrement
;
3018 ResetDisplaySettings(viewdata
, TRUE
);
3027 case IDCMP_VANILLAKEY
:
3029 double inkrement
= .01;
3031 if (myImsg
.Qualifier
& (IEQUALIFIER_LSHIFT
| IEQUALIFIER_RSHIFT
))
3034 if (myImsg
.Qualifier
& (IEQUALIFIER_LALT
| IEQUALIFIER_RALT
))
3037 switch (myImsg
.Code
)
3040 if (RemovePicture(viewdata
->pichandler
))
3042 DeleteViewPic(viewdata
, NULL
, settings
);
3043 GetCurrentPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
);
3047 EasyRequest(mv
->window
->window
, &nopicreq
, NULL
, NULL
);
3052 viewdata
->destypos
-= inkrement
;
3055 viewdata
->destypos
+= inkrement
;
3058 viewdata
->destxpos
+= inkrement
;
3061 viewdata
->destxpos
-= inkrement
;
3065 if (viewdata
->pichandler
)
3067 ResetPicHandler(viewdata
->pichandler
);
3068 GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
);
3070 SetTrigger(viewdata
->trigger
, 0);
3071 settings
->slideshow
= FALSE
;
3072 // SetMenuSettings(mv, settings);
3073 setmenusettings
= TRUE
;
3074 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3075 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
), TAG_DONE
);
3079 if (settings
->displaymode
!= MVDISPMODE_KEEPASPECT_MIN
)
3081 settings
->displaymode
= MVDISPMODE_KEEPASPECT_MIN
;
3082 // SetMenuSettings(mv, settings);
3083 setmenusettings
= TRUE
;
3084 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3085 Train(mv
, settings
, viewdata
);
3086 MV_SetAttrs(viewdata
->view
, MVIEW_DisplayMode
, settings
->displaymode
, TAG_DONE
);
3091 if (settings
->displaymode
!= MVDISPMODE_IGNOREASPECT
)
3093 settings
->displaymode
= MVDISPMODE_IGNOREASPECT
;
3094 // SetMenuSettings(mv, settings);
3095 setmenusettings
= TRUE
;
3096 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3097 Train(mv
, settings
, viewdata
);
3098 MV_SetAttrs(viewdata
->view
, MVIEW_DisplayMode
, settings
->displaymode
, TAG_DONE
);
3102 case 'i': case 'I': case '0':
3103 settings
->picinfo
= !settings
->picinfo
;
3104 SetViewText(viewdata
, SetPicInfoText(viewdata
, viewdata
->showpic
, settings
));
3105 // SetMenuSettings(mv, settings);
3106 setmenusettings
= TRUE
;
3109 case 'o': case 'O': case '7':
3110 requestfiles
= REQUEST_OPENFILES
;
3114 viewdata
->destzoom
+= settings
->zoomstep
;
3118 viewdata
->destzoom
-= settings
->zoomstep
;
3121 case '[': case '(': case '{':
3123 viewdata
->angle
-= 65536 * settings
->rotatestep
/ 360;
3127 case ']': case ')': case '}':
3128 viewdata
->angle
+= 65536 * settings
->rotatestep
/ 360;
3132 viewdata
->angle
= 0;
3137 PICTURE
*pic
= viewdata
->showpic
? viewdata
->showpic
: mv
->logopic
;
3138 if (DoPictureMethod(pic
, PICMTHD_FLIPX
, NULL
))
3147 // PICTURE *pic = viewdata->showpic ? viewdata->showpic : mv->logopic;
3148 // if (DoPictureMethod(pic, PICMTHD_CONVOLVE, NULL))
3150 // hardrefresh = TRUE;
3157 PICTURE
*pic
= viewdata
->showpic
? viewdata
->showpic
: mv
->logopic
;
3158 if (DoPictureMethod(pic
, PICMTHD_FLIPY
, NULL
))
3167 PICTURE
*pic
= viewdata
->showpic
? viewdata
->showpic
: mv
->logopic
;
3168 if (DoPictureMethod(pic
, PICMTHD_NEGATIVE
, NULL
))
3176 settings
->showarrows
= !settings
->showarrows
;
3177 MV_SetAttrs(viewdata
->view
, MVIEW_DrawArrows
, settings
->showarrows
, TAG_DONE
);
3178 // SetMenuSettings(mv, settings);
3179 setmenusettings
= TRUE
;
3183 settings
->showbuttons
= !settings
->showbuttons
;
3184 // SetMenuSettings(mv, settings);
3185 setmenusettings
= TRUE
;
3190 settings
->showpip
= !settings
->showpip
;
3191 MV_SetAttrs(viewdata
->view
, MVIEW_ShowPip
, settings
->showpip
, TAG_DONE
);
3192 // SetMenuSettings(mv, settings);
3193 setmenusettings
= TRUE
;
3197 settings
->markcenter
= !settings
->markcenter
;
3198 MV_SetAttrs(viewdata
->view
, MVIEW_ShowCursor
, settings
->markcenter
, TAG_DONE
);
3199 // SetMenuSettings(mv, settings);
3200 setmenusettings
= TRUE
;
3204 if (settings
->slideshow
)
3206 settings
->slideshow
= FALSE
;
3207 SetTrigger(viewdata
->trigger
, 0);
3208 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3209 // SetMenuSettings(mv, settings);
3210 setmenusettings
= TRUE
;
3214 settings
->slideshow
= TRUE
;
3215 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3216 // SetMenuSettings(mv, settings);
3217 setmenusettings
= TRUE
;
3218 SetTrigger(viewdata
->trigger
, settings
->slidedelay
? settings
->slidedelay
* 5 : MINDELAY
);
3219 if (GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
))
3221 if (settings
->autoquit
) status
= STATUS_QUIT
;
3222 else if (settings
->autohide
) status
= STATUS_SLEEP
;
3223 else if (settings
->requestfile
) requestfiles
= REQUEST_OPENFILES
;
3231 ** dive into directory
3234 if (settings
->browsemode
)
3236 if (viewdata
->isdirectory
)
3238 char *newpath
= FullName(viewdata
->pathname
, viewdata
->filename
);
3241 char *newpath2
= _StrDupCat(newpath
, "/#?");
3244 char *filepatternlist
[2];
3245 filepatternlist
[0] = newpath2
;
3246 filepatternlist
[1] = NULL
;
3247 newpicsignal
= NewPicHandler(viewdata
, filepatternlist
, settings
, mv
->logopic
);
3256 if (GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
))
3258 if (settings
->autoquit
) status
= STATUS_QUIT
;
3259 else if (settings
->autohide
) status
= STATUS_SLEEP
;
3260 else if (settings
->requestfile
) requestfiles
= REQUEST_OPENFILES
;
3265 if (PrevPic(viewdata
->pichandler
))
3267 SetTrigger(viewdata
->trigger
, 0);
3268 settings
->slideshow
= FALSE
;
3269 // SetMenuSettings(mv, settings);
3270 setmenusettings
= TRUE
;
3271 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3272 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
), TAG_DONE
);
3280 status
= settings
->hideonescape
? STATUS_SLEEP
: STATUS_QUIT
;
3285 viewdata
->destxpos
= .5;
3286 viewdata
->destypos
= .5;
3290 viewdata
->destzoom
= 1;
3293 case 's': case 'S': case '9':
3294 if ((settings
->slideshow
= !settings
->slideshow
))
3296 SetTrigger(viewdata
->trigger
, settings
->slidedelay
? settings
->slidedelay
* 5 : MINDELAY
);
3300 SetTrigger(viewdata
->trigger
, 0);
3302 // SetMenuSettings(mv, settings);
3303 setmenusettings
= TRUE
;
3304 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3305 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
), TAG_DONE
);
3315 case IDCMP_MENUPICK
:
3317 while((myImsg
.Code
!= MENUNULL
) && (status
== STATUS_WORKING
))
3319 struct MenuItem
*item
= ItemAddress(menu
, myImsg
.Code
);
3320 IPTR code
= (IPTR
)GTMENUITEM_USERDATA(item
);
3324 case MITEM_RESETALL
:
3326 ResetDisplaySettings(viewdata
, TRUE
);
3330 signals
&= ~newpicsignal
;
3331 newpicsignal
= NewPicHandler(viewdata
, NULL
, settings
, mv
->logopic
);
3332 ResetDisplaySettings(viewdata
, settings
->resetdisplaysettings
);
3335 case MITEM_AUTOCROP
:
3336 settings
->autocrop
= GetItemFlag(item
, TRUE
, FALSE
);
3337 SetPicHandlerAutoCrop(viewdata
->pichandler
, settings
->autocrop
);
3340 case MITEM_AUTODISPLAYMODE
:
3341 if ((settings
->autodisplaymode
= GetItemFlag(item
, TRUE
, FALSE
)))
3345 EasyRequest(win
, &noneuralreq
, NULL
, NULL
);
3346 settings
->autodisplaymode
= FALSE
;
3347 // SetMenuSettings(mv, settings);
3348 setmenusettings
= TRUE
;
3353 if ((newdispmode
= Recall(mv
, settings
, viewdata
)) != settings
->displaymode
)
3355 settings
->displaymode
= newdispmode
;
3356 MV_SetAttrs(viewdata
->view
, MVIEW_DisplayMode
, settings
->displaymode
, TAG_DONE
);
3357 // SetMenuSettings(mv, settings);
3358 setmenusettings
= TRUE
;
3359 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3365 case MITEM_LMB_DRAG
:
3366 settings
->leftmouseaction
=
3367 GetItemFlag(item
, MOUSEACTION_DRAG
, MOUSEACTION_NEXT
);
3370 case MITEM_ASYNCSCANNING
:
3371 settings
->asyncscanning
= GetItemFlag(item
, TRUE
, FALSE
);
3374 case MITEM_FILTERPICTURES
:
3375 settings
->filterpictures
= GetItemFlag(item
, TRUE
, FALSE
);
3378 case MITEM_APPENDICONS
:
3379 settings
->appendicons
= GetItemFlag(item
, TRUE
, FALSE
);
3382 case MITEM_CREATETHUMBNAILS
:
3383 settings
->createthumbnails
= GetItemFlag(item
, TRUE
, FALSE
);
3384 if (settings
->createthumbnails
&& !NewIconBase
)
3386 EasyRequest(win
, &nonewiconreq
, NULL
, NULL
);
3391 if (viewdata
->pichandler
)
3393 ResetPicHandler(viewdata
->pichandler
);
3394 GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
);
3396 SetTrigger(viewdata
->trigger
, 0);
3397 settings
->slideshow
= FALSE
;
3398 // SetMenuSettings(mv, settings);
3399 setmenusettings
= TRUE
;
3400 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3401 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
), TAG_DONE
);
3405 case MITEM_SAVELIST
:
3407 if (viewdata
->pichandler
)
3411 if ((list
= PicHandlerCreateFileList(viewdata
->pichandler
)))
3413 char *pathname
, *filename
, *fullname
;
3414 if (SaveRequest(mv
->listfreq
, win
, MVTEXT_SAVELISTAS
, pathsettings
->listpath
, NULL
, &pathname
, &filename
))
3418 Free(pathsettings
->listpath
);
3419 pathsettings
->listpath
= _StrDup(pathname
);
3422 if ((fullname
= FullName(pathname
, filename
)))
3424 WindowBusy(mv
->window
);
3425 if (!SaveListFile(mv
, list
, fullname
, settings
->defaulttool
))
3427 EasyRequest(mv
->window
->window
, &errorsavinglistreq
, NULL
, NULL
);
3429 WindowFree(mv
->window
);
3436 DeleteStringList(list
);
3441 EasyRequest(mv
->window
->window
, &nopicreq
, NULL
, NULL
);
3447 case MITEM_OPENLIST
:
3449 char *pathname
, *filename
, *fullname
;
3450 if (FileRequest(mv
->listfreq
, win
, MVTEXT_OPENLISTFILE
, pathsettings
->listpath
, NULL
, &pathname
, &filename
))
3454 Free(pathsettings
->listpath
);
3455 pathsettings
->listpath
= _StrDup(pathname
);
3458 if ((fullname
= FullName(pathname
, filename
)))
3461 if ((piclist
= LoadStringList(fullname
)))
3463 newpicsignal
= NewPicHandler(viewdata
, piclist
, settings
, mv
->logopic
);
3464 DeleteFilePatternList(piclist
);
3474 case MITEM_APPENDLIST
:
3476 char *pathname
, *filename
, *fullname
;
3477 if (FileRequest(mv
->listfreq
, win
, MVTEXT_APPENDLISTFILE
, pathsettings
->listpath
, NULL
, &pathname
, &filename
))
3481 Free(pathsettings
->listpath
);
3482 pathsettings
->listpath
= _StrDup(pathname
);
3485 if ((fullname
= FullName(pathname
, filename
)))
3488 if ((piclist
= LoadStringList(fullname
)))
3490 AppendPicHandler(viewdata
->pichandler
, piclist
);
3491 DeleteFilePatternList(piclist
);
3502 settings
->picinfo
= GetItemFlag(item
, TRUE
, FALSE
);
3503 SetViewText(viewdata
, SetPicInfoText(viewdata
, viewdata
->showpic
, settings
));
3506 case MITEM_SHOWARROWS
:
3507 settings
->showarrows
= GetItemFlag(item
, TRUE
, FALSE
);
3508 MV_SetAttrs(viewdata
->view
, MVIEW_DrawArrows
, settings
->showarrows
, TAG_DONE
);
3512 settings
->showpip
= GetItemFlag(item
, TRUE
, FALSE
);
3513 MV_SetAttrs(viewdata
->view
, MVIEW_ShowPip
, settings
->showpip
, TAG_DONE
);
3516 case MITEM_SHOWBUTTONS
:
3519 newshowbuttons
= GetItemFlag(item
, TRUE
, FALSE
);
3520 if (newshowbuttons
!= settings
->showbuttons
)
3522 settings
->showbuttons
= newshowbuttons
;
3528 case MITEM_MARKCENTER
:
3529 settings
->markcenter
= GetItemFlag(item
, TRUE
, FALSE
);
3530 MV_SetAttrs(viewdata
->view
, MVIEW_ShowCursor
, settings
->markcenter
, TAG_DONE
);
3534 requestfiles
= REQUEST_OPENFILES
;
3538 requestfiles
= REQUEST_APPENDFILES
;
3542 if (GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
))
3544 if (settings
->autoquit
) status
= STATUS_QUIT
;
3545 else if (settings
->autohide
) status
= STATUS_SLEEP
;
3546 else if (settings
->requestfile
) requestfiles
= REQUEST_OPENFILES
;
3551 if (PrevPic(viewdata
->pichandler
))
3553 SetTrigger(viewdata
->trigger
, 0);
3554 settings
->slideshow
= FALSE
;
3555 // SetMenuSettings(mv, settings);
3556 setmenusettings
= TRUE
;
3557 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3558 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
), TAG_DONE
);
3563 MVFunction_About(mv
);
3567 if ((settings
->slideshow
= GetItemFlag(item
, TRUE
, FALSE
)))
3569 SetTrigger(viewdata
->trigger
, settings
->slidedelay
? settings
->slidedelay
* 5 : MINDELAY
);
3573 SetTrigger(viewdata
->trigger
, 0);
3575 MV_SetAttrs(viewdata
->view
, MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, viewdata
->showpic
, settings
), TAG_DONE
);
3576 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3580 status
= STATUS_QUIT
;
3584 status
= STATUS_SLEEP
;
3587 case MITEM_ZIPWINDOW
:
3592 viewdata
->destzoom
+= settings
->zoomstep
;
3596 viewdata
->destzoom
-= settings
->zoomstep
;
3599 case MITEM_RESETZOOM
:
3600 viewdata
->destzoom
= 1;
3603 case MITEM_ROTATELEFT
:
3604 viewdata
->angle
-= 65536 * settings
->rotatestep
/ 360;
3607 case MITEM_ROTATERIGHT
:
3608 viewdata
->angle
+= 65536 * settings
->rotatestep
/ 360;
3611 case MITEM_RESETROT
:
3612 viewdata
->angle
= 0;
3615 case MITEM_RESETPOS
:
3616 viewdata
->destxpos
= .5;
3617 viewdata
->destypos
= .5;
3620 case MITEM_DITHERON
:
3621 case MITEM_DITHERAUTO
:
3622 settings
->dither
= GetMenuFlag(menu
, MITEM_DITHERON
, MVDITHERMODE_ON
, MVDITHERMODE_OFF
);
3623 settings
->dither
= GetMenuFlag(menu
, MITEM_DITHERAUTO
, MVDITHERMODE_AUTO
, settings
->dither
);
3624 MV_SetAttrs(viewdata
->view
, MVIEW_Dither
, settings
->dither
, TAG_DONE
);
3627 case MITEM_AUTOQUIT
:
3628 if ((settings
->autoquit
= GetItemFlag(item
, TRUE
, FALSE
)))
3630 settings
->autohide
= FALSE
;
3631 settings
->loop
= FALSE
;
3632 // SetMenuSettings(mv, settings);
3633 setmenusettings
= TRUE
;
3637 case MITEM_AUTOHIDE
:
3638 if ((settings
->autohide
= GetItemFlag(item
, TRUE
, FALSE
)))
3640 settings
->autoquit
= FALSE
;
3641 settings
->loop
= FALSE
;
3642 // SetMenuSettings(mv, settings);
3643 setmenusettings
= TRUE
;
3647 case MITEM_AUTOSTOP
:
3648 settings
->autostop
= GetItemFlag(item
, TRUE
, FALSE
);
3651 case MITEM_AUTOCLEAR
:
3652 settings
->autoclear
= GetItemFlag(item
, TRUE
, FALSE
);
3656 if ((settings
->loop
= GetItemFlag(item
, TRUE
, FALSE
)))
3658 settings
->autoquit
= FALSE
;
3659 settings
->autohide
= FALSE
;
3660 // SetMenuSettings(mv, settings);
3661 setmenusettings
= TRUE
;
3663 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3666 case MITEM_RESETDISPLAYSETTINGS
:
3667 settings
->resetdisplaysettings
= GetItemFlag(item
, TRUE
, FALSE
);
3668 ResetDisplaySettings(viewdata
, settings
->resetdisplaysettings
);
3673 settings
->previewmode
=
3674 GetMenuFlag(menu
, MITEM_OPAQUE
, MVPREVMODE_OPAQUE
, 0) +
3675 GetMenuFlag(menu
, MITEM_GRID
, MVPREVMODE_GRID
, 0);
3676 MV_SetAttrs(viewdata
->view
, MVIEW_PreviewMode
, settings
->previewmode
, TAG_DONE
);
3679 case MITEM_KEEPASPECT1
:
3680 case MITEM_IGNOREASPECT
:
3682 int newdisplaymode
=
3683 GetMenuFlag(menu
, MITEM_KEEPASPECT1
, MVDISPMODE_KEEPASPECT_MIN
, 0) +
3684 GetMenuFlag(menu
, MITEM_IGNOREASPECT
, MVDISPMODE_IGNOREASPECT
, 0);
3686 if (newdisplaymode
!= settings
->displaymode
)
3688 settings
->displaymode
= newdisplaymode
;
3689 MV_SetAttrs(viewdata
->view
, MVIEW_DisplayMode
, settings
->displaymode
, TAG_DONE
);
3690 Train(mv
, settings
, viewdata
);
3691 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
3697 settings
->staticpalette
= GetItemFlag(item
, TRUE
, FALSE
);
3698 MV_SetAttrs(viewdata
->view
, MVIEW_StaticPalette
, settings
->staticpalette
, TAG_DONE
);
3701 case MITEM_BACKDROP
:
3702 settings
->borderless
= GetItemFlag(item
, TRUE
, FALSE
);
3703 status
= STATUS_REOPENWINDOW
;
3706 case MITEM_AUTOSAVESETTINGS
:
3707 pathsettings
->autosavesettings
= GetItemFlag(item
, TRUE
, FALSE
);
3710 case MITEM_REQUESTFILE
:
3711 settings
->requestfile
= GetItemFlag(item
, TRUE
, FALSE
) ?
3712 REQUEST_OPENFILES
: REQUEST_NONE
;
3715 case MITEM_CUSTOMSCREEN
:
3716 if (ModeRequest(mv
->modereq
, win
, settings
, MVTEXT_SELECTSCREENMODE
))
3718 settings
->scropenmode
= SCROPENMODE_CUSTOM
;
3719 status
= STATUS_REOPENALL
;
3723 case MITEM_PUBLICSCREEN
:
3724 case MITEM_DEFAULTSCREEN
:
3725 settings
->scropenmode
=
3726 GetMenuFlag(menu
, MITEM_CUSTOMSCREEN
, SCROPENMODE_CUSTOM
, 0) +
3727 GetMenuFlag(menu
, MITEM_PUBLICSCREEN
, SCROPENMODE_PUBLIC
, 0) +
3728 GetMenuFlag(menu
, MITEM_DEFAULTSCREEN
, SCROPENMODE_NONE
, 0);
3729 status
= STATUS_REOPENALL
;
3732 case MITEM_SMALLWINDOW
:
3733 case MITEM_LARGEWINDOW
:
3734 case MITEM_HALFWINDOW
:
3735 case MITEM_FULLWINDOW
:
3736 case MITEM_VISIBLEWINDOW
:
3737 case MITEM_FIXEDWINDOWSIZE
:
3738 settings
->winsizemode
=
3739 GetMenuFlag(menu
, MITEM_SMALLWINDOW
, WSIZEMODE_33PERCENT
, 0) +
3740 GetMenuFlag(menu
, MITEM_HALFWINDOW
, WSIZEMODE_HALF
, 0) +
3741 GetMenuFlag(menu
, MITEM_LARGEWINDOW
, WSIZEMODE_66PERCENT
, 0) +
3742 GetMenuFlag(menu
, MITEM_VISIBLEWINDOW
, WSIZEMODE_VISIBLE
, 0) +
3743 GetMenuFlag(menu
, MITEM_FULLWINDOW
, WSIZEMODE_FULL
, 0) +
3744 GetMenuFlag(menu
, MITEM_FIXEDWINDOWSIZE
, WSIZEMODE_NONE
, 0);
3746 if (settings
->winsizemode
== WSIZEMODE_NONE
)
3748 UpdateWindowParameters(mv
->window
);
3749 settings
->winwidth
= mv
->window
->winwidth
;
3750 settings
->winheight
= mv
->window
->winheight
;
3754 status
= STATUS_REOPENWINDOW
;
3758 case MITEM_SORT_NONE
:
3759 case MITEM_SORT_ALPHA_FILE
:
3760 case MITEM_SORT_ALPHA_FULL
:
3761 case MITEM_SORT_DATE
:
3762 case MITEM_SORT_RANDOM
:
3763 case MITEM_SORT_FILESIZE
:
3764 case MITEM_SORT_REVERSE
:
3765 settings
->sortmode
=
3766 GetMenuFlag(menu
, MITEM_SORT_NONE
, SORTMODE_NONE
, 0) +
3767 GetMenuFlag(menu
, MITEM_SORT_ALPHA_FILE
, SORTMODE_ALPHA_FILE
, 0) +
3768 GetMenuFlag(menu
, MITEM_SORT_RANDOM
, SORTMODE_RANDOM
, 0) +
3769 GetMenuFlag(menu
, MITEM_SORT_FILESIZE
, SORTMODE_FILESIZE
, 0) +
3770 GetMenuFlag(menu
, MITEM_SORT_DATE
, SORTMODE_DATE
, 0) +
3771 GetMenuFlag(menu
, MITEM_SORT_ALPHA_FULL
, SORTMODE_ALPHA_FULL
, 0);
3772 settings
->reverse
= GetMenuFlag(menu
, MITEM_SORT_REVERSE
, TRUE
, FALSE
);
3773 if (viewdata
->pichandler
)
3775 WindowBusy(mv
->window
);
3776 SetSortMode(viewdata
->pichandler
, settings
->sortmode
, settings
->reverse
);
3777 WindowFree(mv
->window
);
3779 SetViewText(viewdata
, SetPicInfoText(viewdata
, mv
->logopic
, settings
));
3782 case MITEM_CENTERWINDOW
:
3783 case MITEM_MOUSEWINDOW
:
3784 case MITEM_FIXEDWINDOWPOS
:
3785 settings
->winopenmode
=
3786 GetMenuFlag(menu
, MITEM_CENTERWINDOW
, WOPENMODE_CENTER
, 0) +
3787 GetMenuFlag(menu
, MITEM_MOUSEWINDOW
, WOPENMODE_MOUSE
, 0) +
3788 GetMenuFlag(menu
, MITEM_FIXEDWINDOWPOS
, WOPENMODE_NONE
, 0);
3789 if (settings
->winopenmode
== WOPENMODE_NONE
)
3791 UpdateWindowParameters(mv
->window
);
3792 settings
->winleft
= mv
->window
->winleft
;
3793 settings
->wintop
= mv
->window
->wintop
;
3797 status
= STATUS_REOPENWINDOW
;
3801 case MITEM_SNAPWINDOW
:
3802 UpdateWindowParameters(mv
->window
);
3803 settings
->winwidth
= mv
->window
->winwidth
;
3804 settings
->winheight
= mv
->window
->winheight
;
3805 settings
->winleft
= mv
->window
->winleft
;
3806 settings
->wintop
= mv
->window
->wintop
;
3807 settings
->winsizemode
= WSIZEMODE_NONE
;
3808 settings
->winopenmode
= WOPENMODE_NONE
;
3809 // SetMenuSettings(mv, settings);
3810 setmenusettings
= TRUE
;
3813 case MITEM_SAVESETTINGS
:
3814 WindowBusy(mv
->window
);
3815 SaveDefaultSettings(settings
, mv
->progfilename
);
3816 WindowFree(mv
->window
);
3819 case MITEM_RESETSETTINGS
:
3821 struct mainsettings
*new;
3822 if ((new = CreateMainSettings(NULL
, NULL
, TAG_END
)))
3824 DeleteMainSettings(settings
);
3826 status
= STATUS_REOPENALL
;
3831 case MITEM_RESTORESETTINGS
:
3833 struct mainsettings
*new;
3834 if ((new = CreateMainSettings(NULL
, oldsettings
, TAG_END
)))
3836 DeleteMainSettings(settings
);
3838 status
= STATUS_REOPENALL
;
3843 case MITEM_LASTSETTINGS
:
3845 struct mainsettings
*new;
3846 WindowBusy(mv
->window
);
3847 if ((new = LoadDefaultSettings(mv
->progfilename
)))
3849 DeleteMainSettings(settings
);
3851 status
= STATUS_REOPENALL
;
3853 WindowFree(mv
->window
);
3859 PICTURE
*pic
= viewdata
->showpic
? viewdata
->showpic
: mv
->logopic
;
3860 WindowBusy(mv
->window
);
3861 if (DoPictureMethod(pic
, PICMTHD_FLIPX
, NULL
))
3865 WindowFree(mv
->window
);
3871 PICTURE
*pic
= viewdata
->showpic
? viewdata
->showpic
: mv
->logopic
;
3872 WindowBusy(mv
->window
);
3873 if (DoPictureMethod(pic
, PICMTHD_FLIPY
, NULL
))
3877 WindowFree(mv
->window
);
3881 case MITEM_NEGATIVE
:
3883 PICTURE
*pic
= viewdata
->showpic
? viewdata
->showpic
: mv
->logopic
;
3884 WindowBusy(mv
->window
);
3885 if (DoPictureMethod(pic
, PICMTHD_NEGATIVE
, NULL
))
3889 WindowFree(mv
->window
);
3894 case MITEM_PRESET1
+1:
3895 case MITEM_PRESET1
+2:
3896 case MITEM_PRESET1
+3:
3897 case MITEM_PRESET1
+4:
3898 case MITEM_PRESET1
+5:
3899 case MITEM_PRESET1
+6:
3900 case MITEM_PRESET1
+7:
3901 case MITEM_PRESET1
+8:
3902 case MITEM_PRESET1
+9:
3904 int slot
= code
- MITEM_PRESET1
;
3905 if (MVFunction_UsePreset(mv
, &settings
, pathsettings
, viewdata
, slot
, FALSE
))
3907 status
= STATUS_REOPENALL
;
3914 MVFunction_CopyMoveTo(mv
, settings
, pathsettings
, viewdata
, FILEACTION_COPY
, FALSE
, buttons
);
3915 relayoutmenus
= TRUE
;
3920 MVFunction_CopyMoveTo(mv
, settings
, pathsettings
, viewdata
, FILEACTION_MOVE
, FALSE
, buttons
);
3921 relayoutmenus
= TRUE
;
3946 BOOL action
= (code
>= MITEM_MOVE1
&& code
<= MITEM_MOVE1
+9) ? FILEACTION_MOVE
: FILEACTION_COPY
;
3947 int slot
= code
- (action
== FILEACTION_MOVE
? MITEM_MOVE1
: MITEM_COPY1
);
3948 if (slot
>= 0 && slot
< 10)
3950 MVFunction_CopyMoveToPath(mv
, settings
, pathsettings
, viewdata
, slot
, action
, FALSE
, buttons
);
3951 relayoutmenus
= TRUE
;
3958 char *fullsourcename
;
3960 if ((fullsourcename
= GetPicFile(viewdata
->pichandler
)))
3962 if (PerformFileAction(mv
, fullsourcename
, fullsourcename
, FILEACTION_DELETE
, settings
->confirmlevel
))
3964 if (RemovePicture(viewdata
->pichandler
))
3966 DeleteViewPic(viewdata
, NULL
, settings
);
3967 GetCurrentPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
);
3971 // printf("ALERT: Delete Picture - something went wrong\n");
3974 Free(fullsourcename
);
3978 EasyRequest(mv
->window
->window
, &nopicreq
, NULL
, NULL
);
3985 if (RemovePicture(viewdata
->pichandler
))
3987 DeleteViewPic(viewdata
, NULL
, settings
);
3988 GetCurrentPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
);
3992 EasyRequest(mv
->window
->window
, &nopicreq
, NULL
, NULL
);
3997 case MITEM_CACHE_OFF
:
3998 settings
->bufferpercent
= 1;
3999 SetPicHandlerBuffer(viewdata
->pichandler
, settings
->bufferpercent
);
4001 case MITEM_CACHE_SMALL
:
4002 settings
->bufferpercent
= 15;
4003 SetPicHandlerBuffer(viewdata
->pichandler
, settings
->bufferpercent
);
4005 case MITEM_CACHE_MEDIUM
:
4006 settings
->bufferpercent
= 25;
4007 SetPicHandlerBuffer(viewdata
->pichandler
, settings
->bufferpercent
);
4009 case MITEM_CACHE_LARGE
:
4010 settings
->bufferpercent
= 35;
4011 SetPicHandlerBuffer(viewdata
->pichandler
, settings
->bufferpercent
);
4013 case MITEM_CACHE_HUGE
:
4014 settings
->bufferpercent
= 50;
4015 SetPicHandlerBuffer(viewdata
->pichandler
, settings
->bufferpercent
);
4018 case MITEM_SLIDEDELAY_0
:
4019 settings
->slidedelay
= 0;
4021 case MITEM_SLIDEDELAY_04
:
4022 settings
->slidedelay
= 4;
4024 case MITEM_SLIDEDELAY_1
:
4025 settings
->slidedelay
= 10;
4027 case MITEM_SLIDEDELAY_2
:
4028 settings
->slidedelay
= 20;
4030 case MITEM_SLIDEDELAY_5
:
4031 settings
->slidedelay
= 50;
4033 case MITEM_SLIDEDELAY_10
:
4034 settings
->slidedelay
= 100;
4036 case MITEM_SLIDEDELAY_30
:
4037 settings
->slidedelay
= 300;
4039 case MITEM_SLIDEDELAY_60
:
4040 settings
->slidedelay
= 600;
4042 case MITEM_SLIDEDELAY_120
:
4043 settings
->slidedelay
= 1200;
4045 case MITEM_SLIDEDELAY_300
:
4046 settings
->slidedelay
= 3000;
4048 case MITEM_SLIDEDELAY_600
:
4049 settings
->slidedelay
= 6000;
4052 case MITEM_SAVEPRESET
:
4054 char *pathname
, *filename
, *fullname
;
4055 if (SaveRequest(mv
->presetfreq
, win
, MVTEXT_SAVEPRESETAS
, pathsettings
->presetpath
, NULL
, &pathname
, &filename
))
4059 Free(pathsettings
->presetpath
);
4060 pathsettings
->presetpath
= _StrDup(pathname
);
4063 if ((fullname
= FullName(pathname
, filename
)))
4065 WindowBusy(mv
->window
);
4066 SavePreset(mv
, settings
, fullname
);
4067 WindowFree(mv
->window
);
4076 case MITEM_LOADPRESET
:
4078 char *pathname
, *filename
, *fullname
;
4079 if (FileRequest(mv
->presetfreq
, win
, MVTEXT_LOADPRESET
, pathsettings
->presetpath
, NULL
, &pathname
, &filename
))
4083 Free(pathsettings
->presetpath
);
4084 pathsettings
->presetpath
= _StrDup(pathname
);
4087 if ((fullname
= FullName(pathname
, filename
)))
4089 struct mainsettings
*new;
4090 WindowBusy(mv
->window
);
4091 if ((new = LoadPreset(fullname
, settings
)))
4093 DeleteMainSettings(settings
);
4095 status
= STATUS_REOPENALL
;
4097 WindowFree(mv
->window
);
4110 if (code
>= MITEM_PUBSCREEN1
)
4112 int slot
= code
- MITEM_PUBSCREEN1
;
4113 Free(settings
->pubscreen
);
4114 settings
->pubscreen
= _StrDup(mv
->pubscreenlist
[slot
+ 3]);
4115 settings
->scropenmode
= SCROPENMODE_PUBLIC
;
4116 status
= STATUS_REOPENALL
;
4120 myImsg
.Code
= item
->NextSelect
;
4134 SetupPathMenus(mv
, pathsettings
);
4135 SetupPresetMenu(mv
, pathsettings
);
4136 SetupPubscreenMenu(mv
, settings
);
4143 if ((newdispmode
= Recall(mv
, settings
, viewdata
)) != settings
->displaymode
)
4145 settings
->displaymode
= newdispmode
;
4146 // SetMenuSettings(mv, settings);
4147 setmenusettings
= TRUE
;
4150 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, TRUE
);
4152 UpdateWindowParameters(mv
->window
);
4154 MV_SetAttrs(viewdata
->view
,
4155 MVIEW_DestWidth
, mv
->window
->innerwidth
,
4156 MVIEW_DestHeight
, mv
->window
->innerheight
- (settings
->showbuttons
&& buttons
? buttons
->gadgetheight
+ BUTTON_VSPACE
* 2 : 0),
4157 MVIEW_DestX
, mv
->window
->innerleft
,
4158 MVIEW_DestY
, mv
->window
->innertop
+ (settings
->showbuttons
&& buttons
? buttons
->gadgetheight
+ BUTTON_VSPACE
* 2 : 0),
4159 MVIEW_DisplayMode
, settings
->displaymode
,
4164 // MV_SetPIPRelative(viewdata->view, myImsg.MouseX, myImsg.MouseY, mousebutton);
4166 if (setviewrelative
)
4168 IPTR newxpos
, newypos
;
4169 MV_SetViewRelative(viewdata
->view
, myImsg
.MouseX
, myImsg
.MouseY
);
4170 MV_GetAttrs(viewdata
->view
, MVIEW_XPos
, (IPTR
)&newxpos
, MVIEW_YPos
, (IPTR
)&newypos
, TAG_DONE
);
4171 viewdata
->xpos
= viewdata
->destxpos
= (double) newxpos
/ 65536;
4172 viewdata
->ypos
= viewdata
->destypos
= (double) newypos
/ 65536;
4176 if (setmenusettings
)
4178 SetMenuSettings(mv
, settings
);
4183 ApplyViewData(viewdata
, settings
, TRUE
);
4188 MV_Refresh(viewdata
->view
);
4196 if (requestfiles
!= REQUEST_NONE
)
4198 char **filepatternlist
;
4199 char *newpath
, *newfile
;
4201 if ((filepatternlist
= MultiFileRequest(mv
->freq
, win
,
4202 requestfiles
== REQUEST_OPENFILES
? MVTEXT_SELECTPICTURES
: MVTEXT_ADDPICTURES
,
4203 viewdata
->pathname
, NULL
/*viewdata->filename*/, &newpath
, &newfile
, settings
->filterpictures
, settings
->rejectpattern
)))
4205 if (requestfiles
== REQUEST_APPENDFILES
&& viewdata
->pichandler
)
4207 AppendPicHandler(viewdata
->pichandler
, filepatternlist
);
4211 newpicsignal
= NewPicHandler(viewdata
, filepatternlist
, settings
, mv
->logopic
);
4216 Free(pathsettings
->startpath
);
4217 pathsettings
->startpath
= _StrDup(newpath
);
4222 DeleteFilePatternList(filepatternlist
);
4224 requestfiles
= REQUEST_NONE
;
4232 if (signals
& appsignal
)
4234 char **newfilepatternlist
= NULL
;
4235 char **filepatternlist
= NULL
;
4237 ScreenToFront(mv
->screen
->screen
);
4238 WindowToFront(mv
->window
->window
);
4240 while ((appmsg
= (struct AppMessage
*) GetMsg(mv
->appmsgport
)))
4242 DeleteFilePatternList(newfilepatternlist
);
4243 if ((newfilepatternlist
= CreateFilePatternList(appmsg
->am_ArgList
, appmsg
->am_NumArgs
)))
4245 DeleteFilePatternList(filepatternlist
);
4246 filepatternlist
= newfilepatternlist
;
4247 newfilepatternlist
= NULL
;
4249 ReplyMsg((struct Message
*) appmsg
);
4252 if (filepatternlist
)
4254 if (FilterFilePatternList(&filepatternlist
, &settings
) & 2)
4256 status
= STATUS_REOPENALL
;
4260 if (filepatternlist
)
4262 if (settings
->appendicons
&& viewdata
->pichandler
)
4264 AppendPicHandler(viewdata
->pichandler
, filepatternlist
);
4268 newpicsignal
= NewPicHandler(viewdata
, filepatternlist
, settings
, mv
->logopic
);
4272 DeleteFilePatternList(filepatternlist
);
4281 if (signals
& cxsignal
)
4283 ULONG msgid
, msgtype
;
4284 while ((cxmsg
= (CxMsg
*) GetMsg(mv
->brokermsgport
)))
4286 msgid
= CxMsgID(cxmsg
);
4287 msgtype
= CxMsgType(cxmsg
);
4288 ReplyMsg((struct Message
*) cxmsg
);
4290 if (msgtype
== CXM_COMMAND
)
4298 case CXCMD_DISAPPEAR
:
4299 status
= STATUS_SLEEP
;
4303 status
= STATUS_QUIT
;
4315 ** trigger signal arrived
4318 if (signals
& triggersignal
)
4320 if (GetNextPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
, &newpicsignal
))
4322 if (settings
->autoquit
) status
= STATUS_QUIT
;
4323 else if (settings
->autohide
) status
= STATUS_SLEEP
;
4324 else if (settings
->requestfile
) requestfiles
= TRUE
;
4330 ** new picture arrived
4333 if (signals
& newpicsignal
)
4335 if (viewdata
->pichandler
)
4339 if (NewPicAvailable(viewdata
->pichandler
, &error
))
4344 Free(viewdata
->filename
); viewdata
->filename
= NULL
;
4345 Free(viewdata
->pathname
); viewdata
->pathname
= NULL
;
4346 Free(viewdata
->formatname
); viewdata
->formatname
= NULL
;
4348 if ((fullname
= GetPicFile(viewdata
->pichandler
)))
4350 viewdata
->formatname
= GetPicFormat(viewdata
->pichandler
);
4351 viewdata
->isdirectory
= GetPicFileType(viewdata
->pichandler
);
4352 viewdata
->filename
= _StrDup(FilePart(fullname
));
4353 *PathPart(fullname
) = (char) 0;
4354 viewdata
->pathname
= _StrDup(fullname
);
4358 ResetDisplaySettings(viewdata
, settings
->resetdisplaysettings
);
4360 if ((newpic
= GetPic(viewdata
->pichandler
)))
4364 viewdata
->showpic
= newpic
;
4366 if ((newdispmode
= Recall(mv
, settings
, viewdata
)) != settings
->displaymode
)
4368 settings
->displaymode
= newdispmode
;
4369 SetMenuSettings(mv
, settings
);
4370 SetButtonSettings(viewdata
, mv
->window
, buttons
, settings
, FALSE
);
4373 MV_SetAttrs(viewdata
->view
,
4374 MVIEW_Picture
, viewdata
->showpic
? (IPTR
)viewdata
->showpic
: (IPTR
)mv
->logopic
,
4375 MVIEW_DisplayMode
, settings
->displaymode
,
4376 MVIEW_Text
, (IPTR
)SetPicInfoText(viewdata
, newpic
, settings
), TAG_DONE
);
4378 MVFunction_CreateAutoThumbnail(mv
->window
, settings
, viewdata
);
4380 if (settings
->slideshow
)
4382 slidesuspended
= TRUE
; // wait for picture to be fully visible!
4389 if (error
== ERROR_OBJECT_WRONG_TYPE
&& settings
->simplescanning
)
4392 ** unrecognized file and simplescanning mode on:
4393 ** silently remove the non-picture from the list
4396 if (PicHandler_Remove(viewdata
->pichandler
->newPicHandler
,
4397 viewdata
->pichandler
->requestedID
))
4399 viewdata
->pichandler
->error
= 0;
4400 Free(viewdata
->pichandler
->errortext
);
4401 viewdata
->pichandler
->errortext
= NULL
;
4402 DeleteViewPic(viewdata
, NULL
, settings
);
4403 GetCurrentPicture(mv
, buttons
, viewdata
, settings
, mv
->logopic
);
4409 text
= SetPicInfoText(viewdata
, viewdata
->showpic
, settings
);
4413 viewdata
->destzoom
= 1;
4414 viewdata
->destxpos
= 0.5;
4415 viewdata
->destypos
= 0.5;
4417 DeleteViewPic(viewdata
, mv
->logopic
, settings
);
4418 SetViewText(viewdata
, text
);
4419 ApplyViewData(viewdata
, settings
, TRUE
);
4423 SetViewText(viewdata
, text
);
4431 if (slidesuspended
) //wait for picture to be fully visible
4433 if (settings
->slideshow
)
4435 if (signals
& (1 << viewdata
->picturevisiblesignal
))
4437 slidesuspended
= FALSE
; // fully visible picture breaks suspended state
4438 SetTrigger(viewdata
->trigger
, settings
->slidedelay
? settings
->slidedelay
* 5 : MINDELAY
);
4442 SetTrigger(viewdata
->trigger
, 0);
4447 slidesuspended
= FALSE
;
4456 if (signals
& SIGBREAKF_CTRL_C
)
4458 status
= STATUS_QUIT
;
4462 } while (status
== STATUS_WORKING
);
4467 WindowBusy(mv
->window
);
4469 DeleteButtons(buttons
);
4471 MV_Delete(viewdata
->view
);
4472 viewdata
->view
= NULL
;
4474 FreePubscreenMenu(mv
);
4478 *initsettings
= settings
;
4479 *initpathsettings
= pathsettings
;
4481 WindowFree(mv
->window
);
4487 /*********************************************************************
4488 ----------------------------------------------------------------------
4492 ----------------------------------------------------------------------
4493 *********************************************************************/
4495 int mymain(int argc
, char **argv
);
4498 extern struct WBStartup
*_WBenchMsg
;
4503 struct WBStartup
*_WBenchMsg
;
4504 void wbmain(struct WBStartup
*argmsg
)
4506 struct WBArg
*wbarg
;
4508 _WBenchMsg
= argmsg
;
4510 wbarg
= argmsg
->sm_ArgList
;
4514 olddir
= CurrentDir(wbarg
->wa_Lock
);
4515 mymain(0, (char **) argmsg
);
4520 mymain(0, (char **) argmsg
);
4527 int main(int argc
, char **argv
)
4529 return mymain(argc
, argv
);
4533 int mymain(int argc
, char **argv
)
4535 char **startfilepatternlist
;
4536 char **wbargarray
= NULL
;
4537 char *progfilename
= NULL
;
4540 char **piclist
= NULL
;
4543 struct mview
*viewer
;
4544 struct mainsettings
*initsettings
= NULL
;
4545 struct pathsettings
*initpathsettings
;
4549 struct RDArgs
*rdargs
= NULL
;
4550 long opts
[RDNUMARGS
];
4552 memset((void *) opts
, 0, (size_t) (sizeof(long) * RDNUMARGS
));
4556 struct keyfile
*key
= InstallKey();
4558 ttypes
= (char **) ArgArrayInit((LONG
) argc
, (UBYTE
**) argv
);
4560 MVNeuro_CreateNet();
4562 initpathsettings
= LoadPathSettings("ENV:MysticView", NULL
);
4565 // FIXME: Fix AROS WBenchMsg/_WBenchMsg/not_in_any_header stuff
4566 #define _WBenchMsg WBenchMsg
4567 extern struct WBStartup
*WBenchMsg
;
4571 char fullname
[MAXFULLNAMELEN
];
4572 struct mainsettings
*newsettings
;
4574 if (NameFromLock(GetProgramDir(), fullname
, MAXPATHNAMELEN
))
4576 if (AddPart(fullname
, _WBenchMsg
->sm_ArgList
[0].wa_Name
, MAXFULLNAMELEN
))
4578 progfilename
= _StrDup(fullname
);
4582 initsettings
= LoadDefaultSettings(progfilename
);
4584 if ((newsettings
= CreateMainSettings(ttypes
, initsettings
, TAG_END
)))
4586 DeleteMainSettings(initsettings
);
4587 initsettings
= newsettings
;
4590 wbargarray
= CreateFilePatternList(&_WBenchMsg
->sm_ArgList
[1], _WBenchMsg
->sm_NumArgs
- 1);
4593 ** check for preset and listfiles
4598 FilterFilePatternList(&wbargarray
, &initsettings
);
4601 startfilepatternlist
= wbargarray
;
4606 char fullname
[MAXFULLNAMELEN
];
4607 struct mainsettings
*newsettings
;
4609 rdargs
= ReadArgs(RDARGTEMPLATE
, opts
, NULL
);
4610 startfilepatternlist
= (char **) opts
[0];
4613 if (NameFromLock(GetProgramDir(), fullname
, MAXPATHNAMELEN
))
4615 if (AddPart(fullname
, argv
[0], MAXFULLNAMELEN
))
4617 progfilename
= _StrDup(fullname
);
4622 if (!opts
[ARG_DEFAULT
]) // do not read config when DEFAULT is specified
4624 struct DiskObject
*dob
;
4626 if ((dob
= GetDiskObject(progfilename
)))
4628 initsettings
= CreateMainSettings((char **)dob
->do_ToolTypes
, NULL
, TAG_END
);
4629 FreeDiskObject(dob
);
4636 if (opts
[ARG_LISTFILE
])
4638 if ((piclist
= LoadStringList((char *) opts
[ARG_LISTFILE
])))
4640 startfilepatternlist
= piclist
;
4644 char *fullname
= FullName(initpathsettings
->listpath
, FilePart((char *)opts
[ARG_LISTFILE
]));
4645 if ((piclist
= LoadStringList(fullname
)))
4647 startfilepatternlist
= piclist
;
4655 if (opts
[ARG_PRESETFILE
])
4657 struct mainsettings
*new;
4660 if ((new = LoadPreset((char *) opts
[ARG_PRESETFILE
], initsettings
)))
4662 DeleteMainSettings(initsettings
);
4667 char *fullname
= FullName(initpathsettings
->presetpath
, FilePart((char *) opts
[ARG_PRESETFILE
]));
4668 if ((new = LoadPreset(fullname
, initsettings
)))
4670 DeleteMainSettings(initsettings
);
4676 if ((newsettings
= CreateMainSettings(ttypes
, initsettings
, TAG_END
)))
4678 DeleteMainSettings(initsettings
);
4679 initsettings
= newsettings
;
4682 if (opts
[ARG_APPEND
] && startfilepatternlist
)
4684 if (PicHandler_AppendScanList(startfilepatternlist
,
4685 PICH_Reject
, initsettings
? (IPTR
) initsettings
->rejectpattern
: (IPTR
) TRUE
,
4686 PICH_Recursive
, initsettings
? (IPTR
) initsettings
->recursive
: (IPTR
) TRUE
,
4696 globalpriority
= SetTaskPri(FindTask(NULL
), MAXPRIORITY
);
4697 SetTaskPri(FindTask(NULL
), globalpriority
);
4700 if (!(SetSignal(0,0) & SIGBREAKF_CTRL_C
))
4702 struct mainsettings
*settings
= NULL
;
4703 struct mainsettings
*oldsettings
;
4704 struct pathsettings
*pathsettings
= NULL
;
4706 if ((settings
= CreateMainSettings(NULL
, initsettings
, TAG_END
)))
4708 // if (pathsettings = LoadPathSettings("ENV:MysticView", initpathsettings))
4709 if ((pathsettings
= CreatePathSettings(NULL
, initpathsettings
, TAG_END
)))
4711 if ((oldsettings
= CreateMainSettings(NULL
, settings
, TAG_END
)))
4713 struct viewdata
*viewdata
;
4715 if ((viewdata
= CreateViewData(startfilepatternlist
)))
4717 BOOL reopen
= FALSE
;
4718 int status
= settings
->cx_popup
? STATUS_WORKING
: STATUS_SLEEP
;
4720 if ((viewer
= CreateMView(settings
, progfilename
)))
4728 case STATUS_WORKING
:
4729 if (!viewer
->screen
) viewer
->screen
= CreateMVScreen(settings
);
4730 if (!viewer
->window
) viewer
->window
= CreateMVWindow(viewer
, viewer
->screen
, settings
);
4732 if (viewer
->screen
&& viewer
->window
)
4734 status
= HandleMView(viewer
, &settings
, &pathsettings
, oldsettings
, viewdata
, reopen
);
4738 printf("*** could not open window - screen: %s - window %s.\n", viewer
->screen
?"okay":"failed", viewer
->window
?"okay":"failed");
4739 status
= STATUS_QUIT
;
4744 case STATUS_REOPENALL
:
4745 DeleteMVWindow(viewer
, viewer
->window
);
4746 viewer
->window
= NULL
;
4747 DeleteMVScreen(viewer
->screen
);
4748 viewer
->screen
= NULL
;
4749 status
= STATUS_WORKING
;
4753 case STATUS_REOPENWINDOW
:
4754 DeleteMVWindow(viewer
, viewer
->window
);
4755 viewer
->window
= NULL
;
4756 status
= STATUS_WORKING
;
4762 ULONG cxsignal
= 1 << (viewer
->brokermsgport
->mp_SigBit
);
4763 struct AppMessage
*appmsg
;
4767 DeleteMVWindow(viewer
, viewer
->window
);
4768 viewer
->window
= NULL
;
4770 DeleteMVScreen(viewer
->screen
);
4771 viewer
->screen
= NULL
;
4775 signals
= Wait(cxsignal
| viewer
->appSignal
| SIGBREAKF_CTRL_C
);
4777 if (signals
& viewer
->appSignal
)
4779 char **newfilepatternlist
= NULL
;
4780 char **filepatternlist
= NULL
;
4782 while ((appmsg
= (struct AppMessage
*) GetMsg(viewer
->appmsgport
)))
4784 DeleteFilePatternList(newfilepatternlist
);
4785 if ((newfilepatternlist
= CreateFilePatternList(appmsg
->am_ArgList
, appmsg
->am_NumArgs
)))
4787 DeleteFilePatternList(filepatternlist
);
4788 filepatternlist
= newfilepatternlist
;
4789 newfilepatternlist
= NULL
;
4791 ReplyMsg((struct Message
*) appmsg
);
4794 if (filepatternlist
)
4796 FilterFilePatternList(&filepatternlist
, &settings
);
4798 if (filepatternlist
)
4800 NewPicHandler(viewdata
, filepatternlist
, settings
, NULL
);
4801 DeleteFilePatternList(filepatternlist
);
4803 status
= STATUS_WORKING
;
4806 if (signals
& cxsignal
)
4808 ULONG msgid
, msgtype
;
4809 while ((cxmsg
= (CxMsg
*) GetMsg(viewer
->brokermsgport
)))
4811 msgid
= CxMsgID(cxmsg
);
4812 msgtype
= CxMsgType(cxmsg
);
4813 ReplyMsg((struct Message
*) cxmsg
);
4821 status
= STATUS_WORKING
;
4825 status
= STATUS_QUIT
;
4833 if (msgid
== EVT_HOTKEY
)
4835 status
= STATUS_WORKING
;
4841 if (signals
& SIGBREAKF_CTRL_C
)
4843 status
= STATUS_QUIT
;
4845 } while (status
== STATUS_SLEEP
);
4852 DeleteMView(viewer
);
4857 } while (status
!= STATUS_QUIT
);
4859 DeleteMView(viewer
);
4862 DeleteViewData(viewdata
);
4865 if (pathsettings
->autosavesettings
)
4867 SaveDefaultSettings(settings
, progfilename
);
4870 SavePathSettings(pathsettings
, "ENVARC:MysticView");
4871 SavePathSettings(pathsettings
, "ENV:MysticView");
4873 DeleteMainSettings(oldsettings
);
4876 DeletePathSettings(pathsettings
);
4878 DeleteMainSettings(settings
);
4885 DeleteFilePatternList(wbargarray
);
4889 DeleteStringList(piclist
);
4893 DeleteMainSettings(initsettings
);
4895 DeletePathSettings(initpathsettings
);
4899 MVNeuro_DeleteNet();
4908 printf("*** abnormal program termination.\n");
4909 result
= RETURN_FAIL
;