]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc
Merge branch 'master' into terencehill/dynamic_hud
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / dialog_multiplayer_media_screenshot_viewer.qc
1 #include "dialog_multiplayer_media_screenshot_viewer.qh"
2
3 #include "screenshotlist.qh"
4 #include "inputbox.qh"
5 #include "button.qh"
6
7 float music_playlist_index_backup;
8 void XonoticScreenshotViewerDialog_loadScreenshot(entity me, string scrImage)
9 {
10         // disable music as it can lag depending on image loading time
11         if(!cvar("menu_screenshotviewer_enablemusic"))
12         if(cvar("music_playlist_index") != 999) // if the playlist isn't paused
13         {
14                 // pause music
15                 if(cvar("music_playlist_index") != -1)
16                 {
17                         music_playlist_index_backup = cvar("music_playlist_index");
18                         cvar_set("music_playlist_sampleposition0", "0");
19                         cvar_set("music_playlist_index", "999");
20                 }
21                 else
22                         localcmd("\ncd pause\n");
23         }
24
25         if (me.currentScrPath == scrImage)
26                 return;
27         if (me.currentScrPath)
28                 strunzone(me.currentScrPath);
29         me.currentScrPath = strzone(scrImage);
30         me.screenshotImage.load(me.screenshotImage, me.currentScrPath);
31         me.frame.setText(me.frame, me.screenshotImage.screenshotTitle);
32 }
33 void prevScreenshot_Click(entity btn, entity me)
34 {
35         me.scrList.goScreenshot(me.scrList, -1);
36 }
37 void nextScreenshot_Click(entity btn, entity me)
38 {
39         me.scrList.goScreenshot(me.scrList, +1);
40 }
41 void increaseZoom_Click(entity btn, entity me)
42 {
43         me.screenshotImage.setZoom(me.screenshotImage, -2, false);
44 }
45 void decreaseZoom_Click(entity btn, entity me)
46 {
47         me.screenshotImage.setZoom(me.screenshotImage, -1/2, false);
48 }
49 void resetZoom_Click(entity btn, entity me)
50 {
51         me.screenshotImage.setZoom(me.screenshotImage, 0, false);
52 }
53 void toggleSlideShow_Click(entity btn, entity me)
54 {
55         if (me.slideShowButton.forcePressed)
56         {
57                 me.scrList.stopSlideShow(me.scrList);
58                 me.slideShowButton.forcePressed = 0;
59         }
60         else
61         {
62                 me.scrList.startSlideShow(me.scrList);
63                 me.slideShowButton.forcePressed = 1;
64         }
65 }
66 float XonoticScreenshotViewerDialog_keyDown(entity me, float key, float ascii, float shift)
67 {
68         switch(key)
69         {
70                 case K_KP_LEFTARROW:
71                 case K_LEFTARROW:
72                         me.scrList.goScreenshot(me.scrList, -1);
73                         return 1;
74                 case K_KP_RIGHTARROW:
75                 case K_RIGHTARROW:
76                         me.scrList.goScreenshot(me.scrList, +1);
77                         return 1;
78                 case K_KP_ENTER:
79                 case K_ENTER:
80                 case K_SPACE:
81                         // we cannot use SPACE/ENTER directly, as in a dialog they are needed
82                         // to press buttons while browsing with only the keyboard
83                         if (shift & S_CTRL)
84                         {
85                                 toggleSlideShow_Click(NULL, me);
86                                 return 1;
87                         }
88                         return SUPER(XonoticScreenshotViewerDialog).keyDown(me, key, ascii, shift);
89                 default:
90                         if (key == K_MWHEELUP || ascii == '+')
91                         {
92                                 me.screenshotImage.setZoom(me.screenshotImage, -2, (key == K_MWHEELUP));
93                                 return 1;
94                         }
95                         else if (key == K_MWHEELDOWN || ascii == '-')
96                         {
97                                 me.screenshotImage.setZoom(me.screenshotImage, -1/2, (key == K_MWHEELDOWN));
98                                 return 1;
99                         }
100                         if (me.scrList.keyDown(me.scrList, key, ascii, shift))
101                         {
102                                 // keyDown has already changed the selected item
103                                 me.scrList.goScreenshot(me.scrList, 0);
104                                 return 1;
105                         }
106                         return SUPER(XonoticScreenshotViewerDialog).keyDown(me, key, ascii, shift);
107         }
108 }
109 void XonoticScreenshotViewerDialog_close(entity me)
110 {
111         // resume music
112         if(!cvar("menu_screenshotviewer_enablemusic"))
113         if(cvar("music_playlist_index") == 999)
114         {
115                 cvar_set("music_playlist_index", ftos(music_playlist_index_backup));
116         }
117         else
118                 localcmd("\ncd resume\n");
119
120         me.scrList.stopSlideShow(me.scrList);
121         me.slideShowButton.forcePressed = 0;
122         SUPER(XonoticScreenshotViewerDialog).close(me);
123 }
124 void XonoticScreenshotViewerDialog_fill(entity me)
125 {
126         entity e;
127         me.TR(me);
128                 me.TD(me, me.rows - 1, me.columns, e = makeXonoticScreenshotImage());
129                         e.showTitle = 0; // dialog title is enough
130                         me.screenshotImage = e;
131         me.gotoRC(me, me.rows - 1, 0);
132                 me.TDempty(me, 1/20 * me.columns);
133                 me.TD(me, 1, 1/20 * me.columns, e = makeXonoticButton("-", '0 0 0'));
134                         e.onClick = decreaseZoom_Click;
135                         e.onClickEntity = me;
136                 me.TD(me, 1, 1/20 * me.columns, e = makeXonoticButton("+", '0 0 0'));
137                         e.onClick = increaseZoom_Click;
138                         e.onClickEntity = me;
139                 me.TD(me, 1, 2/20 * me.columns, e = makeXonoticButton(_("Reset"), '0 0 0'));
140                         e.onClick = resetZoom_Click;
141                         e.onClickEntity = me;
142
143                 me.TDempty(me, 2/20 * me.columns);
144                 me.TD(me, 1, 3/20 * me.columns, e = makeXonoticButton(_("Previous"), '0 0 0'));
145                         e.onClick = prevScreenshot_Click;
146                         e.onClickEntity = me;
147                 me.TD(me, 1, 3/20 * me.columns, e = makeXonoticButton(_("Next"), '0 0 0'));
148                         e.onClick = nextScreenshot_Click;
149                         e.onClickEntity = me;
150
151                 me.TDempty(me, 2/20 * me.columns);
152                 me.TD(me, 1, 4/20 * me.columns, e = makeXonoticButton(_("Slide show"), '0 0 0'));
153                         e.onClick = toggleSlideShow_Click;
154                         e.onClickEntity = me;
155                         me.slideShowButton = e;
156 }