AG_Tlist *AGOL_Settings::CreateWadDirList(void *parent) { AG_Tlist *wdlist; string waddirs; char cwd[AG_PATHNAME_MAX]; wdlist = AG_TlistNewPolled(parent, AG_TLIST_EXPAND, EventReceiver, "%p", RegisterEventHandler((EVENT_FUNC_PTR)&AGOL_Settings::UpdateWadDirList)); AG_TlistSetCompareFn(wdlist, AG_TlistCompareStrings); AG_TlistSizeHintPixels(wdlist, 400, 0); // Read the WadDirs option from the config file if(GuiConfig::Read("WadDirs", waddirs)) { // If there are no waddirs configured insert the current working directory if(!AG_GetCWD(cwd, AG_PATHNAME_MAX)) WadDirs.push_back(cwd); } else { size_t oldpos = 0; size_t pos = waddirs.find(PATH_DELIMITER); // Parse the waddirs option while(pos != string::npos) { // Put a wad path into the list WadDirs.push_back(waddirs.substr(oldpos, pos - oldpos)); oldpos = pos + 1; pos = waddirs.find(PATH_DELIMITER, oldpos); } } return wdlist; }
static void Expand(AG_Event *event) { AG_UCombo *com = AG_PTR(1); AG_Driver *drv = WIDGET(com)->drv; int expand = AG_INT(2); AG_SizeReq rList; int x, y, w, h; Uint wView, hView; AG_ObjectLock(com); if (expand) { com->panel = AG_WindowNew(AG_WINDOW_POPUP|AG_WINDOW_MODAL| AG_WINDOW_NOTITLE); AG_ObjectSetName(com->panel, "_UComboPopup"); AG_WindowSetPadding(com->panel, 0,0,0,0); AG_ObjectAttach(com->panel, com->list); if (WIDGET(com)->window != NULL) AG_WindowAttach(WIDGET(com)->window, com->panel); if (com->wSaved > 0) { w = com->wSaved; h = com->hSaved; } else { if (com->wPreList != -1 && com->hPreList != -1) { AG_TlistSizeHintPixels(com->list, com->wPreList, com->hPreList); } AG_WidgetSizeReq(com->list, &rList); w = rList.w + com->panel->wBorderSide*2; h = rList.h + com->panel->wBorderBot; } x = WIDGET(com)->rView.x2 - w; y = WIDGET(com)->rView.y1; AG_GetDisplaySize(WIDGET(com)->drv, &wView, &hView); if (x+w > wView) { w = wView - x; } if (y+h > hView) { h = hView - y; } if (AGDRIVER_CLASS(drv)->wm == AG_WM_MULTIPLE && WIDGET(com)->window != NULL) { x += WIDGET(WIDGET(com)->window)->x; y += WIDGET(WIDGET(com)->window)->y; } if (x < 0) { x = 0; } if (y < 0) { y = 0; } if (w < 4 || h < 4) { Collapse(com); return; } AG_SetEvent(com->panel, "window-modal-close", ModalClose, "%p", com); AG_WindowSetGeometry(com->panel, x,y, w,h); AG_WindowShow(com->panel); } else { Collapse(com); } AG_ObjectUnlock(com); }