1 /* Copyright 2007-2012 Fredrik Wikstrom. All rights reserved.
3 ** Redistribution and use in source and binary forms, with or without
4 ** modification, are permitted provided that the following conditions
7 ** 1. Redistributions of source code must retain the above copyright
8 ** notice, this list of conditions and the following disclaimer.
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
;
40 UBYTE old_device_type
;
41 UBYTE new_device_type
;
45 GetAttr(WINDOW_Window
, Gui
.windows
[WID_MAIN
], (Tag
*)&window
);
46 listbrowser
= Gui
.gadgets
[GID_DRIVELIST
];
49 GetAttr(LISTBROWSER_SelectedNode
, Gui
.gadgets
[GID_DRIVELIST
], (Tag
*)&node
);
50 unit_num
= GetUnitNumber(node
);
55 window_title
= ASPrintf(GetString(&LocaleInfo
, MSG_SETDEVICETYPE_WND
), unit_num
);
61 SetWindowBusy(~0, TRUE
);
63 old_device_type
= DG_DIRECT_ACCESS
;
65 DITAG_GetDeviceType
, &old_device_type
,
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
,
77 SetAttrs(Gui
.gadgets
[GID_DEVICETYPECHOOSER
],
78 CHOOSER_Selected
, chooser_sel
,
81 if (ShowWindow(WID_SETDEVICETYPE
)) {
86 GetAttr(WINDOW_SigMask
, Gui
.windows
[WID_SETDEVICETYPE
], &sigs
);
88 while ((res
= RA_HandleInput(Gui
.windows
[WID_SETDEVICETYPE
], &code
)) != WMHI_LASTMSG
) {
89 switch (res
& WMHI_CLASSMASK
) {
90 case WMHI_CLOSEWINDOW
:
94 switch (res
& WMHI_GADGETMASK
) {
95 case GID_SETDEVICETYPE_SAVE
:
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
,
112 SetAttrs(listbrowser
,
113 LISTBROWSER_Labels
, ~0,
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
],
125 SetGadgetAttrs(GA(listbrowser
), window
, NULL
,
126 LISTBROWSER_Labels
, Gui
.lists
[LID_DRIVELIST
],
130 case GID_SETDEVICETYPE_CANCEL
:
138 HideWindow(WID_SETDEVICETYPE
);
140 FreeVec(window_title
);
142 SetWindowBusy(~0, FALSE
);