Were did that svn:executable come from?
[AROS.git] / workbench / devs / diskimage / ra_gui / setdevicetype.c
blob766b2d658c39cd02011e103b0611e78010edbc10
1 /* Copyright 2007-2012 Fredrik Wikstrom. All rights reserved.
2 **
3 ** Redistribution and use in source and binary forms, with or without
4 ** modification, are permitted provided that the following conditions
5 ** are met:
6 **
7 ** 1. Redistributions of source code must retain the above copyright
8 ** notice, this list of conditions and the following disclaimer.
9 **
10 ** 2. Redistributions in binary form must reproduce the above copyright
11 ** notice, this list of conditions and the following disclaimer in the
12 ** documentation and/or other materials provided with the distribution.
14 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
15 ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18 ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 ** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 ** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 ** POSSIBILITY OF SUCH DAMAGE.
27 #include "diskimagegui.h"
28 #include <proto/exec.h>
29 #include <proto/utility.h>
30 #include <proto/intuition.h>
31 #include <proto/diskimage.h>
32 #include <clib/alib_protos.h>
34 void SetDeviceType (void) {
35 struct Window *window;
36 Object *listbrowser;
37 struct Node *node;
38 LONG unit_num;
39 STRPTR window_title;
40 UBYTE old_device_type;
41 UBYTE new_device_type;
42 ULONG chooser_sel;
44 window = NULL;
45 GetAttr(WINDOW_Window, Gui.windows[WID_MAIN], (Tag *)&window);
46 listbrowser = Gui.gadgets[GID_DRIVELIST];
48 node = NULL;
49 GetAttr(LISTBROWSER_SelectedNode, Gui.gadgets[GID_DRIVELIST], (Tag *)&node);
50 unit_num = GetUnitNumber(node);
51 if (unit_num == -1) {
52 return;
55 window_title = ASPrintf(GetString(&LocaleInfo, MSG_SETDEVICETYPE_WND), unit_num);
56 if (!window_title) {
57 return;
60 StopScreenNotify();
61 SetWindowBusy(~0, TRUE);
63 old_device_type = DG_DIRECT_ACCESS;
64 UnitControl(unit_num,
65 DITAG_GetDeviceType, &old_device_type,
66 TAG_END);
67 chooser_sel = 0;
68 switch (old_device_type) {
69 case DG_DIRECT_ACCESS: chooser_sel = 0; break;
70 case DG_CDROM: chooser_sel = 1; break;
72 SetAttrs(Gui.windows[WID_SETDEVICETYPE],
73 WA_Title, window_title,
74 WINDOW_Position, window ? WPOS_CENTERWINDOW : WPOS_CENTERMOUSE,
75 WINDOW_RefWindow, window,
76 TAG_END);
77 SetAttrs(Gui.gadgets[GID_DEVICETYPECHOOSER],
78 CHOOSER_Selected, chooser_sel,
79 TAG_END);
81 if (ShowWindow(WID_SETDEVICETYPE)) {
82 BOOL done = FALSE;
83 ULONG sigs, res;
84 UWORD code;
85 while (!done) {
86 GetAttr(WINDOW_SigMask, Gui.windows[WID_SETDEVICETYPE], &sigs);
87 Wait(sigs);
88 while ((res = RA_HandleInput(Gui.windows[WID_SETDEVICETYPE], &code)) != WMHI_LASTMSG) {
89 switch (res & WMHI_CLASSMASK) {
90 case WMHI_CLOSEWINDOW:
91 done = TRUE;
92 break;
93 case WMHI_GADGETUP:
94 switch (res & WMHI_GADGETMASK) {
95 case GID_SETDEVICETYPE_SAVE:
96 chooser_sel = 0;
97 GetAttr(CHOOSER_Selected, Gui.gadgets[GID_DEVICETYPECHOOSER], &chooser_sel);
98 new_device_type = DG_DIRECT_ACCESS;
99 switch (chooser_sel) {
100 case 0: new_device_type = DG_DIRECT_ACCESS; break;
101 case 1: new_device_type = DG_CDROM; break;
103 if (new_device_type != old_device_type) {
104 UBYTE device_type = DG_DIRECT_ACCESS;
105 ULONG device_icon = IID_LIST_DISK;
107 UnitControl(unit_num,
108 DITAG_SetDeviceType, new_device_type,
109 DITAG_GetDeviceType, &device_type,
110 TAG_END);
112 SetAttrs(listbrowser,
113 LISTBROWSER_Labels, ~0,
114 TAG_END);
116 if (device_type == DG_CDROM) {
117 device_icon = IID_LIST_CDROM;
120 SetListBrowserNodeAttrs(node,
121 LBNA_Column, DRIVE_COL_ICON,
122 LBNCA_Image, Gui.images[device_icon],
123 TAG_END);
125 SetGadgetAttrs(GA(listbrowser), window, NULL,
126 LISTBROWSER_Labels, Gui.lists[LID_DRIVELIST],
127 TAG_END);
129 /* fall through */
130 case GID_SETDEVICETYPE_CANCEL:
131 done = TRUE;
132 break;
134 break;
138 HideWindow(WID_SETDEVICETYPE);
140 FreeVec(window_title);
142 SetWindowBusy(~0, FALSE);
143 BeginScreenNotify();