Start Zune Prefs program with {NP_StackStack, 20000} and
[tangerine.git] / workbench / prefs / input / misc.c
blob2dcb1b93ea3439858c4ec01bbe6401fc675c2e8b
1 /*
2 Copyright © 1995-2001, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc:
6 Lang: English
7 */
9 /*********************************************************************************************/
11 #include "global.h"
12 #include "version.h"
14 #include <string.h>
16 /*********************************************************************************************/
18 static struct NewMenu nm[] =
20 {NM_TITLE, (STRPTR)MSG_MEN_PROJECT },
21 {NM_ITEM, (STRPTR)MSG_MEN_PROJECT_OPEN },
22 {NM_ITEM, (STRPTR)MSG_MEN_PROJECT_SAVEAS },
23 {NM_ITEM, NM_BARLABEL },
24 {NM_ITEM, (STRPTR)MSG_MEN_PROJECT_QUIT },
25 {NM_TITLE, (STRPTR)MSG_MEN_EDIT },
26 {NM_ITEM, (STRPTR)MSG_MEN_EDIT_DEFAULT },
27 {NM_ITEM, (STRPTR)MSG_MEN_EDIT_LASTSAVED },
28 {NM_ITEM, (STRPTR)MSG_MEN_EDIT_RESTORE },
29 {NM_TITLE, (STRPTR)MSG_MEN_SETTINGS },
30 {NM_ITEM, (STRPTR)MSG_MEN_SETTINGS_CREATEICONS, NULL, CHECKIT | MENUTOGGLE },
31 {NM_END}
34 /*********************************************************************************************/
36 void InitMenus(void)
38 struct NewMenu *actnm = nm;
40 for(actnm = nm; actnm->nm_Type != NM_END; actnm++)
42 if (actnm->nm_Label != NM_BARLABEL)
44 ULONG id = (ULONG)actnm->nm_Label;
45 CONST_STRPTR str = MSG(id);
47 if (actnm->nm_Type == NM_TITLE)
49 actnm->nm_Label = str;
50 } else {
51 actnm->nm_Label = str + 2;
52 if (str[0] != ' ') actnm->nm_CommKey = str;
54 actnm->nm_UserData = (APTR)id;
56 } /* if (actnm->nm_Label != NM_BARLABEL) */
58 } /* for(actnm = nm; nm->nm_Type != NM_END; nm++) */
62 /*********************************************************************************************/
64 void MakeMenus(void)
66 struct TagItem menu_tags[] =
68 {GTMN_NewLookMenus, TRUE},
69 {TAG_DONE }
72 menus = CreateMenusA(nm, NULL);
73 if (!menus) Cleanup(MSG(MSG_CANT_CREATE_MENUS));
75 if (!LayoutMenusA(menus, vi, menu_tags)) Cleanup(MSG(MSG_CANT_CREATE_MENUS));
79 /*********************************************************************************************/
81 void KillMenus(void)
83 if (win) ClearMenuStrip(win);
84 if (menus) FreeMenus(menus);
86 menus = NULL;
89 /*********************************************************************************************/
91 void SetMenuFlags(void)
93 if (win) ClearMenuStrip(win);
94 if (win) ResetMenuStrip(win, menus);
97 /*********************************************************************************************/
99 STRPTR GetFile(CONST_STRPTR title, CONST_STRPTR dir, BOOL savemode)
101 static UBYTE filebuffer[300];
102 struct FileRequester *req;
103 STRPTR retval = NULL;
105 AslBase = OpenLibrary("asl.library", 39);
106 if (AslBase)
108 req = AllocAslRequestTags(ASL_FileRequest, ASLFR_TitleText , (IPTR)title,
109 ASLFR_DoPatterns , TRUE ,
110 ASLFR_InitialDrawer, (IPTR)dir ,
111 ASLFR_DoSaveMode , savemode ,
112 TAG_DONE);
113 if (req)
115 if (AslRequest(req, NULL))
117 strncpy(filebuffer, req->fr_Drawer, 299);
118 AddPart(filebuffer, req->fr_File, 299);
120 retval = filebuffer;
122 } /* if (AslRequest(req, NULL) */
124 FreeAslRequest(req);
126 } /* if (req) */
128 CloseLibrary(AslBase);
130 } /* if (AslBase) */
132 return retval;
135 /*********************************************************************************************/
137 struct Node *FindListNode(struct List *list, WORD which)
139 struct Node *node = NULL;
141 if (which >= 0)
143 for(node = list->lh_Head; node->ln_Succ && which; node = node->ln_Succ, which--)
146 if (!node->ln_Succ) node = NULL;
149 return node;
152 /*********************************************************************************************/
154 void SortInNode(struct List *list, struct Node *node)
156 struct Node *sort, *prev = NULL;
158 ForeachNode(list, sort)
160 if (Stricmp(node->ln_Name, sort->ln_Name) < 0) break;
161 prev = sort;
164 Insert(list, node, prev);
167 /*********************************************************************************************/
169 void DrawFrameWithTitle(struct RastPort *rp, WORD x1, WORD y1, WORD x2, WORD y2, CONST_STRPTR title)
171 UWORD pen1, pen2, slen, tlen, i;
173 pen1 = dri->dri_Pens[SHADOWPEN];
174 pen2 = dri->dri_Pens[SHINEPEN];
175 slen = strlen(title);
176 tlen = TextLength(rp, title, slen);
178 SetDrMd(rp, JAM1);
180 SetAPen(rp, dri->dri_Pens[TEXTPEN]);
181 Move(rp, x1 + FRAMETITLE_OFFX + FRAMETITLE_TITLESPACE, y1 + rp->TxBaseline);
182 Text(rp, title, slen);
184 y1 += rp->TxBaseline / 2;
186 for(i = 0; i < 2; i++)
188 SetAPen(rp, pen1);
189 Move(rp, x1, y2);
190 Draw(rp, x1, y1);
191 Draw(rp, x1 + FRAMETITLE_OFFX - 1 - i, y1);
192 Move(rp, x1 + FRAMETITLE_OFFX - 1 + FRAMETITLE_TITLESPACE + tlen + FRAMETITLE_TITLESPACE - i, y1);
193 Draw(rp, x2, y1);
195 SetAPen(rp, pen2);
196 Draw(rp, x2, y2);
197 Draw(rp, x1 + 1, y2);
199 x1++; y1++; x2--; y2--;
200 pen1 ^= pen2; pen2 ^= pen1; pen1 ^= pen2; /* swap pen1 and pen2 */
205 /*********************************************************************************************/