void InitializeDB(void) { fds = List_Create(); root = malloc(sizeof(FileSystemObject)); root->ObjectType = FileSystemObjectType_Directory; root->Name[0] = 0; root->Children = List_Create(); }
void InitButtonsList() { int i,j,k=0; QuickList=List_Create(0,1); for(i=0;i<g_iButtonsCount;i++) { TCHAR* pszBName=NULL; ListData* ld=NULL; if (!(pszBName=getMenuEntry(i,0,3))) { g_iButtonsCount=i; db_set_b(NULL, PLGNAME,"ButtonsCount", (BYTE)g_iButtonsCount); break;} ld = (ListData *)mir_alloc(sizeof(ListData)); ButtonsList[i]=ld; ld->sl=List_Create(0,1); ld->ptszQValue=ld->ptszOPQValue=getMenuEntry(i,0,2); ld->ptszButtonName=pszBName; ld->dwPos=ld->dwOPPos=i; ld->dwOPFlags=0; ld->bIsServName=ld->bIsOpServName=getEntryByte(i,0,3); for(j=0;;j++) { TCHAR* pszEntry=NULL; ButtonData *bd=NULL; if (!(pszEntry=getMenuEntry(i,j,0))) break; bd = (ButtonData *)mir_alloc(sizeof(ButtonData)); memset(bd,0,sizeof(ButtonData)); bd->dwPos=bd->dwOPPos=j; bd->pszName=bd->pszOpName=pszEntry; bd->pszValue=bd->pszOpValue=getMenuEntry(i,j,1); bd->fEntryType=bd->fEntryOpType=getEntryByte(i,j,1); bd->bInQMenu=bd->bOpInQMenu=getEntryByte(i,j,0); bd->bIsServName=bd->bIsOpServName=getEntryByte(i,j,2); if(bd->bInQMenu){ QuickData* qd = (QuickData *)mir_alloc(sizeof(QuickData)); qd->dwPos=k++; qd->ptszValue=bd->pszValue; qd->ptszValueName=bd->pszName; List_InsertPtr(QuickList,qd); } List_InsertPtr((SortedList*)ld->sl,bd); } } }
static inline Object File_InternalReadString(Object _self, long maxLength, long stopSymbolsLength, long* stopSymbols) { Object _toReturn = List_Create(); Object_Autorelease(_toReturn); while(maxLength--) { Object _char = File_ReadChar(_self); if(_char == _nil) { if(List_Size(_toReturn) == 0) { return _nil; } else { return _toReturn; } } else { int i; long code = Number_GetLong(Char_GetMutableCode(_char)); for(i = 0; i < stopSymbolsLength; i++) { if(code == stopSymbols[i]) return _toReturn; } List_PushBack(_toReturn, _char); } } return _toReturn; }
FileSystemError CreateDirectory(char *path){ char *offset = NULL; FileSystemObject *r = NULL; FileSystemError err = SetupEntry(path, &r, &offset); if(err != FileSystemError_None) return err; if(r->ObjectType != FileSystemObjectType_Directory) return FileSystemError_PathInvalid; FileSystemObject *dir = malloc(sizeof(FileSystemObject)); if(dir == NULL) return FileSystemError_AllocationFailed; dir->ObjectType = FileSystemObjectType_Directory; strcpy(dir->Name, offset); dir->Children = List_Create(); dir->Parent = r; if(List_AddEntry(r->Children, dir) != ListError_None) return free(dir), FileSystemError_AllocationFailed; return FileSystemError_None; }
int main(void) { INIT(); long int i; Object list = List_Create(); Object iterator; for(i = 0; i < NODES; i++) { List_PushFront(list, INT_AS_OBJECT(i)); }; List_Sort(list); ; for(iterator = List_First(list), i = 0; !ListIterator_ThisEnd(iterator); ListIterator_Next(iterator), i++) { if(OBJECT_AS_INT(ListIterator_ThisData(iterator)) != i) { DEBUG("Got %li, but %li expected.\n", OBJECT_AS_INT(ListIterator_ThisData(iterator)), i); return 1; }; }; Object_Release(list); return 0; };
PTCar Car_Create(void) { PTCar car = (PTCar) malloc(sizeof(TCar)); car->axles = List_Create(); car->Acceleration = 0; car->Overload = 0; car->Speed = 0; return car; }
static void initThreading (void) { sg_threadList = List_Create(LIST_MODE_GENERIC, Thread_Cmp, Thread_KeyCmp, NULL, NULL, Thread_Lock, Thread_Unlock); initThreading_pthreads(); }
CList List_Copy(CList &l, size_t from, size_t count) { from = clamp(from, 0ul, l.size); count = clamp(count, 0ul, l.size - from); CList copy = List_Create(count); for(size_t i = 0; i < count; ++i) { List_Append(copy, List_Get(l, from + i)); } return copy; }
/* * read the file into a list of lines. * * we use the buffered read functions to read a block at a time, and * return us a pointer to a line within the block. The line we are * pointed to is not null terminated. from this we do a line_new: this * will make a copy of the text (since we want to re-use the buffer), and * will null-terminate its copy. * * we also give each line a number, starting at one. */ void file_readlines(FILEDATA fd) { LPSTR textp; LPWSTR pwzText; int cwch; HANDLE fh; FILEBUFFER fbuf; int linelen; int linenr = 1; HCURSOR hcurs; hcurs = SetCursor(LoadCursor(NULL, IDC_WAIT)); /* open the file */ fh = dir_openfile(fd->diritem); if (fh == INVALID_HANDLE_VALUE) { TRACE_ERROR(LoadRcString(IDS_ERR_OPENING_FILE), FALSE); SetCursor(hcurs); return; } /* initialise the file buffering */ fbuf = readfile_new(fh, &fd->fUnicode); if (fbuf) { /* make an empty list for the files */ fd->lines = List_Create(); while ( (textp = readfile_next(fbuf, &linelen, &pwzText, &cwch)) != NULL) { if (linelen>0) { /* readfile failure gives linelen==-1 */ line_new(textp, linelen, pwzText, cwch, linenr++, fd->lines); } else { line_new("!! <unreadable> !!", 20, NULL, 0, linenr++,fd->lines); break; } } /* close filehandle and free buffer */ readfile_delete(fbuf); } dir_closefile(fd->diritem, fh); SetCursor(hcurs); }
void APIENTRY List_Recover( PLIST plst ) { LIST Last, P,Q; BOOL OK; /* For no particular reason we presume that the forward chain is good and reconstruct the back chain from it. A better algorithm would do the kind of things that List_Check does to figure out where the problems lie. This just steps along until it sees either an address that it has already seen or else the anchor block. (It's an n-squared algorithm). It links the last good block found back to the anchor and fixes all the Anchor flags. */ if (plst==NULL) return; if (*plst==NULL) { *plst = List_Create(); return; } (*plst)->bAnchor = TRUE; P = (*plst)->pitNext; Last = *plst; for (; ; ) {if (P==*plst) break; Last = P; if (P->pitNext!=*plst) {OK = TRUE; Q = *plst; for (; ; ) { OK &= (P->pitNext!=Q); if (Q==P) break; Q = Q->pitNext; } if (!OK) break; } P = P->pitNext; } P = *plst; while (P!=Last) {P->pitNext->pitPrev = P; P->bAnchor = FALSE; P = P->pitNext; } Last->pitNext = *plst; (*plst)->pitPrev = Last; (*plst)->bAnchor = TRUE; (*plst)->bOK = TRUE; }
void CSmileyString::AddListeningToIcon(SHORTDATA *dat, TCHAR *szText) { iMaxSmileyHeight = 0; DestroySmileyList(); if (szText == NULL) return; int text_size = (int)mir_tstrlen(szText); plText = List_Create(0, 1); // Add Icon { ClcContactTextPiece *piece = (ClcContactTextPiece *)mir_alloc(sizeof(ClcContactTextPiece)); piece->type = TEXT_PIECE_TYPE_SMILEY; piece->len = 0; piece->smiley = g_hListeningToIcon; piece->smiley_width = 16; piece->smiley_height = 16; ICONINFO icon; if (GetIconInfo(piece->smiley, &icon)) { BITMAP bm; if (GetObject(icon.hbmColor, sizeof(BITMAP), &bm)) { piece->smiley_width = bm.bmWidth; piece->smiley_height = bm.bmHeight; } DeleteObject(icon.hbmMask); DeleteObject(icon.hbmColor); } dat->text_smiley_height = max(piece->smiley_height, dat->text_smiley_height); iMaxSmileyHeight = max(piece->smiley_height, iMaxSmileyHeight); List_Insert(plText, piece, plText->realCount); } // Add text { ClcContactTextPiece *piece = (ClcContactTextPiece *)mir_alloc(sizeof(ClcContactTextPiece)); piece->type = TEXT_PIECE_TYPE_TEXT; piece->start_pos = 0; piece->len = text_size; List_Insert(plText, piece, plText->realCount); } }
void CSmileyString::_CopySmileyList(SortedList *plInput) { if (!plInput || plInput->realCount == 0) return; plText = List_Create(0, 1); for (int i = 0; i < plInput->realCount; i++) { ClcContactTextPiece *pieceFrom = (ClcContactTextPiece *)plInput->items[i]; if (pieceFrom != nullptr) { ClcContactTextPiece *piece = (ClcContactTextPiece *)mir_alloc(sizeof(ClcContactTextPiece)); *piece = *pieceFrom; if (pieceFrom->type == TEXT_PIECE_TYPE_SMILEY) piece->smiley = CopyIcon(pieceFrom->smiley); List_Insert(plText, piece, plText->realCount); } } }
int main(void) { List* list = List_Create(); int i = 0; int j = 1; int k = 2; List_Insert(list, &i, 0); List_Insert(list, &j, 1); List_Insert(list, &k, 2); List_Clear(list); List_Destroy(list); return 0; }
HPOPUP CreatePopupMenuClassic(HINSTANCE hInst, CLASSIC_MENU_PROC proc) { HPOPUP popup = (HPOPUP)malloc(sizeof(CLASSICPOPUP)); memset(popup, 0, sizeof(CLASSICPOPUP)); popup->menu_proc = proc; popup->menu_items = List_Create(64); memset(&popup->menu_wndclass, 0, sizeof(WNDCLASS)); popup->menu_wndclass.hInstance = hInst; // We have to create these two little font handles // here, or otherwise some font metrics will be screwed up! popup->menu_item_font = CreateSimpleFontIndependent(TEXT("MS Sans Serif"), 8); popup->menu_item_font_default = CreateSimpleFontIndependent(TEXT("MS Sans Serif"), 8, FW_BOLD); return popup; }
int main(void) { INIT(); int i, j; Object list = List_Create(); for(j = 0; j < TIMES; j++) { Object front, back; for(i = 0; i < NODES; i++) { if(i & 1) { List_PushBack(list, INT_AS_OBJECT(i)); } else { List_PushFront(list, INT_AS_OBJECT(i)); }; }; front = List_First(list); back = List_Last(list); while(!ListIterator_ThisEnd(front)) { ListIterator_Next(front); ListIterator_Prev(back); }; if(!ListIterator_ThisBegin(back)) { return 1; }; List_Clean(list); }; Object_Release(list); return 0; };
void CSmileyString::ReplaceSmileys(SHORTDATA *dat, ClcCacheEntry *pdnce, TCHAR * szText, BOOL replace_smileys) { int last_pos = 0; iMaxSmileyHeight = 0; DestroySmileyList(); if (!dat->text_replace_smileys || !replace_smileys || szText == NULL) return; int text_size = (int)mir_tstrlen(szText); // Call service for the first time to see if needs to be used... SMADD_BATCHPARSE2 sp = { 0 }; sp.cbSize = sizeof(sp); if (dat->text_use_protocol_smileys) { sp.Protocolname = pdnce->m_cache_cszProto; if (db_get_b(NULL, "CLC", "Meta", SETTING_USEMETAICON_DEFAULT) != 1 && pdnce->m_cache_cszProto != NULL && mir_strcmp(pdnce->m_cache_cszProto, META_PROTO) == 0) { MCONTACT hContact = db_mc_getMostOnline(pdnce->hContact); if (hContact != 0) sp.Protocolname = GetContactProto(hContact); } } else sp.Protocolname = "clist"; sp.str = szText; sp.flag = SAFL_TCHAR; SMADD_BATCHPARSERES *spr = (SMADD_BATCHPARSERES*)CallService(MS_SMILEYADD_BATCHPARSE, 0, (LPARAM)&sp); // Did not find a simley if (spr == NULL || (INT_PTR)spr == CALLSERVICE_NOTFOUND) return; // Lets add smileys plText = List_Create(0, 1); for (unsigned i = 0; i < sp.numSmileys; ++i) { if (spr[i].hIcon != NULL) { // For deffective smileypacks // Add text if (spr[i].startChar - last_pos > 0) { ClcContactTextPiece *piece = (ClcContactTextPiece *)mir_alloc(sizeof(ClcContactTextPiece)); piece->type = TEXT_PIECE_TYPE_TEXT; piece->start_pos = last_pos;//sp.str - text; piece->len = spr[i].startChar - last_pos; List_Insert(plText, piece, plText->realCount); } // Add smiley { BITMAP bm; ICONINFO icon; ClcContactTextPiece *piece = (ClcContactTextPiece *)mir_alloc(sizeof(ClcContactTextPiece)); piece->type = TEXT_PIECE_TYPE_SMILEY; piece->len = spr[i].size; piece->smiley = spr[i].hIcon; piece->smiley_width = 16; piece->smiley_height = 16; if (GetIconInfo(piece->smiley, &icon)) { if (GetObject(icon.hbmColor, sizeof(BITMAP), &bm)) { piece->smiley_width = bm.bmWidth; piece->smiley_height = bm.bmHeight; } DeleteObject(icon.hbmMask); DeleteObject(icon.hbmColor); } dat->text_smiley_height = max(piece->smiley_height, dat->text_smiley_height); iMaxSmileyHeight = max(piece->smiley_height, iMaxSmileyHeight); List_Insert(plText, piece, plText->realCount); } } // Get next last_pos = spr[i].startChar + spr[i].size; } CallService(MS_SMILEYADD_BATCHFREE, 0, (LPARAM)spr); // Add rest of text if (last_pos < text_size) { ClcContactTextPiece *piece = (ClcContactTextPiece *)mir_alloc(sizeof(ClcContactTextPiece)); piece->type = TEXT_PIECE_TYPE_TEXT; piece->start_pos = last_pos; piece->len = text_size - last_pos; List_Insert(plText, piece, plText->realCount); } }
PTStack Stack_Create() { return List_Create(); }
LRESULT CALLBACK Main_WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { switch (uMessage) { case WM_NCCREATE: SHGetMalloc(&g_pMalloc); break; case WM_CREATE: { HIMAGELIST himlLarge; HIMAGELIST himlSmall; HWND hwndTree; HWND hwndList; g_uPosition = 0; //get the system image lists himlLarge = Main_CreateImageList(TRUE); himlSmall = Main_CreateImageList(FALSE); // create the TreeView control hwndTree = Tree_Create(g_hInst, hWnd, himlSmall); // create the ListView control hwndList = List_Create(g_hInst, hWnd, himlLarge, himlSmall); //initialize the TreeView control Tree_Init(hwndTree); SetFocus(hwndTree); } break; case WM_NOTIFY: { LPNMHDR pnmh = (LPNMHDR) lParam; switch(pnmh->idFrom) { case IDC_TREEVIEW: return Tree_Notify(hWnd, lParam); case IDC_LISTVIEW: return List_Notify(hWnd, lParam); } } return 0; case WM_SIZE: { Main_SizeChildren(hWnd); } break; case WM_LBUTTONDOWN: SetCapture(hWnd); return 0; case WM_LBUTTONUP: ReleaseCapture(); return 0; case WM_MOUSEMOVE: //if the left button is down if(GetKeyState(VK_LBUTTON) & 0x8000) { RECT rc; GetClientRect(hWnd, &rc); //don't do anything if we are already at the minimum size if((g_uPosition == MIN_SIZE) && (LOWORD(lParam) <= MIN_SIZE)) break; //don't do anything if we are already at the maximum size if(((rc.right - g_uPosition) == MIN_SIZE) && (LOWORD(lParam) >= g_uPosition)) break; g_uPosition = LOWORD(lParam); //check for min and max if(g_uPosition < MIN_SIZE) g_uPosition = MIN_SIZE; if((rc.right - g_uPosition) < MIN_SIZE) g_uPosition = rc.right - MIN_SIZE; Main_SizeChildren(hWnd); } break; case WM_COMMAND: return Main_OnCommand(hWnd, wParam, lParam); case WM_DESTROY: //tell the list to release its current folder List_ReleaseCurrentFolder(); PostQuitMessage(0); break; case WM_NCDESTROY: g_pMalloc->Release(); g_pMalloc = NULL; break; case WM_SYSCOLORCHANGE: { HBRUSH hbr = GetSysColorBrush(COLOR_3DFACE); hbr = (HBRUSH)SetClassLongPtr(hWnd, GCLP_HBRBACKGROUND, (LONG_PTR)hbr); if(hbr) DeleteObject(hbr); } break; case WM_INITMENUPOPUP: Main_UpdateMenu(hWnd, (HMENU)wParam); //fall through case WM_DRAWITEM: case WM_MENUCHAR: case WM_MEASUREITEM: if(g_pcm2) { g_pcm2->HandleMenuMsg(uMessage, wParam, lParam); } break; case WM_CONTEXTMENU: { POINT ptScreen; POINT ptClient; ptScreen.x = GET_X_LPARAM(lParam); ptScreen.y = GET_Y_LPARAM(lParam); ptClient = ptScreen; ScreenToClient(hWnd, &ptClient); HWND hwndOver = ChildWindowFromPoint(hWnd, ptClient); if(GetDlgItem(hWnd, IDC_TREEVIEW) == hwndOver) { Tree_DoContextMenu(hwndOver, &ptScreen); } else if(GetDlgItem(hWnd, IDC_LISTVIEW) == hwndOver) { List_DoContextMenu(hwndOver, &ptScreen); } } break; default: break; } return DefWindowProc(hWnd, uMessage, wParam, lParam); }
void Car_AxlesClear(PTCar car) { List_Destroy(car->axles); car->axles = List_Create(); }
int GModel::exportDiscreteGEOInternals() { if(_geo_internals) delete _geo_internals; _geo_internals = new GEO_Internals; for(viter it = firstVertex(); it != lastVertex(); it++){ Vertex *v = Create_Vertex((*it)->tag(), (*it)->x(), (*it)->y(), (*it)->z(), (*it)->prescribedMeshSizeAtVertex(), 1.0); Tree_Add(this->getGEOInternals()->Points, &v); } for(eiter it = firstEdge(); it != lastEdge(); it++){ if((*it)->geomType() == GEntity::DiscreteCurve){ Curve *c = Create_Curve((*it)->tag(), MSH_SEGM_DISCRETE, 1, NULL, NULL, -1, -1, 0., 1.); List_T *points = Tree2List(_geo_internals->Points); GVertex *gvb = (*it)->getBeginVertex(); GVertex *gve = (*it)->getEndVertex(); int nb = 2 ; c->Control_Points = List_Create(nb, 1, sizeof(Vertex *)); for(int i = 0; i < List_Nbr(points); i++) { Vertex *v; List_Read(points, i, &v); if (v->Num == gvb->tag()) { List_Add(c->Control_Points, &v); c->beg = v; } if (v->Num == gve->tag()) { List_Add(c->Control_Points, &v); c->end = v; } } End_Curve(c); Tree_Add(this->getGEOInternals()->Curves, &c); CreateReversedCurve(c); List_Delete(points); } } for(fiter it = firstFace(); it != lastFace(); it++){ if((*it)->geomType() == GEntity::DiscreteSurface){ Surface *s = Create_Surface((*it)->tag(), MSH_SURF_DISCRETE); std::list<GEdge*> edges = (*it)->edges(); s->Generatrices = List_Create(edges.size(), 1, sizeof(Curve *)); List_T *curves = Tree2List(_geo_internals->Curves); Curve *c; for(std::list<GEdge*>::iterator ite = edges.begin(); ite != edges.end(); ite++){ for(int i = 0; i < List_Nbr(curves); i++) { List_Read(curves, i, &c); if (c->Num == (*ite)->tag()) { List_Add(s->Generatrices, &c); } } } Tree_Add(this->getGEOInternals()->Surfaces, &s); List_Delete(curves); } } // TODO: create Volumes from discreteRegions Msg::Debug("Geo internal model has:"); Msg::Debug("%d Vertices", Tree_Nbr(_geo_internals->Points)); Msg::Debug("%d Edges", Tree_Nbr(_geo_internals->Curves)); Msg::Debug("%d Faces", Tree_Nbr(_geo_internals->Surfaces)); return 1; }
void test_algorithm(void) { int padding = 1; list_t *imageList = NULL; btree_t *tree; list_t *treeDumpList = NULL; list_t *fileListIter = NULL; int i = 0; char filename[10]; int success = 1; int initsize = 512; srand((unsigned int)time(NULL)); for (i = 0; i < 2800; i++) { list_t *node = NULL; image_t *img = NULL; img = (image_t *)calloc(1, sizeof(image_t)); node = List_Create(); sprintf(filename, "%d.png", i); img->w = 5 + rand() % 20; img->h = 5 + rand() % 20; Util_CopyString(&img->filename, filename); node->payload.type = Payload_Image; node->payload.data = img; List_PushFront(&imageList, node); } List_Sort(&imageList); tree = BTree_Create(); tree->rect.x = 0; tree->rect.y = 0; tree->rect.w = initsize; tree->rect.h = initsize; do { success = 1; for (fileListIter = imageList; fileListIter != NULL; fileListIter = fileListIter->next) { if (BTree_Insert(tree, (image_t *)fileListIter->payload.data, padding) == NULL) { printf("Shit happens\n"); success = 0; break; } } if (!success) { BTree_Destroy(tree); tree = BTree_Create(); tree->rect.x = 0; tree->rect.y = 0; initsize = Util_NextPOT(initsize+1); tree->rect.w = initsize; tree->rect.h = initsize; } } while (!success); printf("-----\n"); List_Destroy(imageList, ListDestroy_List|ListDestroy_PayLoad); treeDumpList = BTree_DumpToList(tree, BTreeTraverse_PostOrder); { list_t *iter = NULL; bitmap_t *canvas = NULL; rect_t *rect = NULL; canvas = Bitmap_Create(initsize, initsize); iter = treeDumpList; for (iter = treeDumpList; iter != NULL; iter = iter->next) { rect = (rect_t *)iter->payload.data; if (rect->image != NULL && rect->image->filename != NULL) { int argb = 0; bitmap_t *pad = NULL; bitmap_t *png = NULL; png = Bitmap_Create(rect->image->w, rect->image->h); pad = Bitmap_Create(rect->image->w + rect->padding * 2, rect->image->h + rect->padding * 2); argb = rand(); argb |= 0xFF000000; Bitmap_Clean(png, argb); Bitmap_Clean(pad, 0); Bitmap_CopyPasteBitmap(pad, png, rect->padding, rect->padding); Bitmap_CopyPasteBitmap(canvas, pad, rect->x, rect->y); Bitmap_Destroy(png); Bitmap_Destroy(pad); } } Bitmap_WriteAsPNG(canvas, "canvas.png"); Bitmap_Destroy(canvas); } List_Destroy(treeDumpList, ListDestroy_List); if (tree != NULL) BTree_Destroy(tree); memtrack_list_allocations(); }
StringList *StringList_Create(){ return (StringList*)List_Create(); }
void CarListInit(void) { if (CarList == NULL) { CarList = List_Create(); } }
struct Box_s *EditStatus_Create(struct Box_s *roster, struct StatusList_s *awaylist, struct StatusList_s *availlist) { struct editstatusdata_s *data = malloc(sizeof(*data)); struct Box_s *pbox, *dialog, *subbox, *pbox2; int x, y, w, h; w = 432; h = 440; { RECT windowrect; HMONITOR hm; MONITORINFO mi; windowrect.left = roster->x; windowrect.right = windowrect.left + roster->w - 1; windowrect.top = roster->y; windowrect.bottom = windowrect.top + roster->h - 1; hm = MonitorFromRect(&windowrect, MONITOR_DEFAULTTONEAREST); mi.cbSize = sizeof(mi); GetMonitorInfo(hm, &mi); x = mi.rcWork.left + (mi.rcWork.right - mi.rcWork.left - w) / 2; y = mi.rcWork.top + (mi.rcWork.bottom - mi.rcWork.top - h) / 2; } dialog = Box_Create(x, y, w, h, BOX_VISIBLE); dialog->bgcol = DefaultBG; dialog->fgcol = RGB(0, 0, 0); dialog->minw = 384; dialog->minh = 256; SizerSet_Create(dialog); dialog->titlebar = TitleBarOnly_Add(dialog, _("Edit My Statuses")); dialog->OnActive = TitleBarRoot_OnActive; dialog->OnInactive = TitleBarRoot_OnInactive; pbox = List_Create(1 * 8, 5 * 8, w - 2 * 8, h - 13 * 8 - 5 * 8, BOX_VISIBLE, FALSE); pbox->bgcol = TabBG2; pbox->fgcol = TabFG2; pbox->OnSizeWidth = Box_OnSizeWidth_Stretch; pbox->OnSizeHeight = Box_OnSizeHeight_Stretch; Box_AddChild(dialog, pbox); data->list = pbox; pbox = Box_Create(2 * 8, h - 12 * 8, 9 * 8, 2 * 8, BOX_VISIBLE | BOX_TRANSPARENT); pbox->fgcol = TabFG2; pbox->OnSizeHeight = Box_OnSizeHeight_StickBottom; Box_SetText(pbox, _("New Status:")); Box_AddChild(dialog, pbox); pbox = StdButton_Create((int)(w - 8 * 8), (int)(h - 12.5 * 8), 6 * 8, _("Add"), 0); pbox->OnSizeWidth = Box_OnSizeWidth_StickRight; pbox->OnSizeHeight = Box_OnSizeHeight_StickBottom; Button2_SetOnButtonHit(pbox, EditStatus_OnAdd); Box_AddChild(dialog, pbox); data->addbutton = pbox; Button2_SetDisabledState(data->addbutton, 1); pbox = StdButton_Create((int)(w - 23 * 8), (int)(h - 5.5 * 8), (int)(10.5 * 8), _("Save"), 0); pbox->OnSizeWidth = Box_OnSizeWidth_StickRight; pbox->OnSizeHeight = Box_OnSizeHeight_StickBottom; Button2_SetOnButtonHit(pbox, EditStatus_OnSave); Box_AddChild(dialog, pbox); pbox = StdButton_Create((int)(w - 12 * 8), (int)(h - 5.5 * 8), (int)(10.5 * 8), _("Cancel"), 0); pbox->OnSizeWidth = Box_OnSizeWidth_StickRight; pbox->OnSizeHeight = Box_OnSizeHeight_StickBottom; Button2_SetOnButtonHit(pbox, EditStatus_OnCancel); Box_AddChild(dialog, pbox); pbox = Edit2Box_Create(25 * 8, h - 100/*12.5 * 8*/, w - 25 * 8 - 9 * 8, 20, BOX_VISIBLE | BOX_BORDER, 1); pbox->bgcol = RGB(255, 255, 255); pbox->OnSizeWidth = Box_OnSizeWidth_Stretch; pbox->OnSizeHeight = Box_OnSizeHeight_StickBottom; Edit2Box_SetOnKey(pbox, EditStatusEdit_OnKey); Edit2Box_SetAltWText(pbox, _L("Name")); Box_AddChild(dialog, pbox); data->nameentry = pbox; pbox = ImgCombo_Create((int)(11.5 * 8), (int)(h - 12.5 * 8), (int)(13 * 8), 20, BOX_VISIBLE | BOX_BORDER); pbox->OnSizeHeight = Box_OnSizeHeight_StickBottom; pbox->bgcol = RGB(255, 255, 255); Box_AddChild(dialog, pbox); data->typecombo = pbox; dialog->boxdata = data; List_AddGroup(data->list, _("Available")); List_AddGroup(data->list, _("Away")); data->availlist = NULL; while (availlist) { EditStatus_AddEntry(dialog, availlist->statusmsg, FALSE); availlist = availlist->next; } data->awaylist = NULL; while (awaylist) { EditStatus_AddEntry(dialog, awaylist->statusmsg, TRUE); awaylist = awaylist->next; } List_RedoEntries(data->list); Box_CreateWndCustom(dialog, _("Edit My Statuses"), roster->hwnd); dialog->OnSizeWidth = Box_OnSizeWidth_Stretch; dialog->OnSizeHeight = Box_OnSizeHeight_Stretch; pbox = Box_Create(0, 0, 104, 20, BOX_VISIBLE); pbox->bgcol = RGB(255, 255, 255); subbox = Box_Create(0, 0, 16, 16, BOX_VISIBLE | BOX_TRANSPARENT); subbox->bgcol = RGB(255, 255, 255); subbox->img = ImageMgr_GetSubImage("presenceAvailable", "PresenceIcons.png", 16, 0, 16, 16); Box_AddChild(pbox, subbox); subbox = Box_Create(18, 2, 58, 16, BOX_VISIBLE | BOX_TRANSPARENT); Box_SetText(subbox, _("Available")); Box_AddChild(pbox, subbox); pbox2 = Box_Create(0, 0, 104, 20, BOX_VISIBLE); pbox2->bgcol = RGB(160, 160, 160); subbox = Box_Create(0, 0, 16, 16, BOX_VISIBLE | BOX_TRANSPARENT); subbox->bgcol = RGB(160, 160, 160); subbox->img = ImageMgr_GetSubImage("presenceAvailable", "PresenceIcons.png", 16, 0, 16, 16); Box_AddChild(pbox2, subbox); subbox = Box_Create(18, 2, 58, 16, BOX_VISIBLE | BOX_TRANSPARENT); Box_SetText(subbox, _("Available")); Box_AddChild(pbox2, subbox); ImgCombo_AddEntry(data->typecombo, _("Available"), pbox, pbox2); pbox->child->img = ImageMgr_GetSubImage("presenceAway", "PresenceIcons.png", 48, 0, 16, 16); Box_SetText(pbox->child->sibling, _("Away")); pbox2->child->img = ImageMgr_GetSubImage("presenceAway", "PresenceIcons.png", 48, 0, 16, 16); Box_SetText(pbox2->child->sibling, _("Away")); ImgCombo_AddEntry(data->typecombo, _("Away"), pbox, pbox2); Box_Destroy(pbox); ImgCombo_SetSelection(data->typecombo, _("Available")); BringWindowToTop(dialog->hwnd); return dialog; }
INT_PTR CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) { switch(msg){ case WM_INITDIALOG:{ DWORD style; g_opHdlg=hdlg; bOptionsInit=TRUE; TranslateDialogDefault(hdlg); if(g_iButtonsCount!=db_get_b(NULL, PLGNAME,"ButtonsCount", 0)) { LOGFONT logFont; HFONT hFont; bNeedRestart=TRUE; EnableWindow(GetDlgItem(hdlg,IDC_BUTTONSLIST),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_BLISTADD),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_BLISTREMOVE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MENUTREE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MTREEADD),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MTREEREMOVE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_BUTTONNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_MENUNAME),FALSE); ShowWindow(GetDlgItem(hdlg,IDC_WARNING),SW_SHOW); hFont = (HFONT)SendDlgItemMessage(hdlg, IDC_WARNING, WM_GETFONT, 0, 0); GetObject(hFont, sizeof(logFont), &logFont); logFont.lfWeight = FW_BOLD; hFont = CreateFontIndirect(&logFont); SendDlgItemMessage(hdlg, IDC_WARNING, WM_SETFONT, (WPARAM)hFont, 0); break; } g_iOPButtonsCount=g_iButtonsCount; hButtonsList=GetDlgItem(hdlg,IDC_BUTTONSLIST); hMenuTree=GetDlgItem(hdlg,IDC_MENUTREE); style = GetWindowLongPtr(hButtonsList,GWL_STYLE); style |=TVS_NOHSCROLL; SetWindowLongPtr(hButtonsList,GWL_STYLE, style); style = GetWindowLongPtr(hMenuTree,GWL_STYLE); style |=TVS_NOHSCROLL; SetWindowLongPtr(hMenuTree,GWL_STYLE, style); BuildButtonsList(hButtonsList); if (!TreeView_GetCount(hButtonsList)) EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),FALSE); mir_subclassWindow( GetDlgItem(hdlg,IDC_BUTTONNAME), EditSubclassProc); mir_subclassWindow( GetDlgItem(hdlg,IDC_MENUNAME), EditSubclassProc); EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); CheckDlgButton(hdlg,IDC_RAUTOSEND,(g_bRClickAuto=db_get_b(NULL,PLGNAME,"RClickAuto",0)) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hdlg,IDC_LAUTOSEND,(g_bLClickAuto=db_get_b(NULL,PLGNAME,"LClickAuto",0)) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hdlg,IDC_ENABLEQUICKMENU,(g_bQuickMenu=db_get_b(NULL, PLGNAME,"QuickMenu", 1)) ? BST_CHECKED : BST_UNCHECKED); bOptionsInit=FALSE; }break; case WM_LBUTTONUP: if(drag) { TVHITTESTINFO hti; HTREEITEM htiAfter=NULL; ButtonData* bd=NULL; TVITEM tvi; RECT rc; BYTE height; BOOLEAN bAsChild = FALSE; TreeView_SetInsertMark(hMenuTree, NULL, 0 ); ReleaseCapture(); SetCursor( LoadCursor( NULL, IDC_ARROW )); hti.pt.x = ( SHORT )LOWORD( lparam ); hti.pt.y = ( SHORT )HIWORD( lparam ); ClientToScreen(hdlg,&hti.pt); ScreenToClient(hMenuTree,&hti.pt); TreeView_HitTest( hMenuTree, &hti ); if(TreeView_GetParent(hMenuTree,hti.hItem)&&TreeView_GetChild(hMenuTree,hDragItem)) break; if(TreeView_GetChild(hMenuTree,hti.hItem)&&TreeView_GetChild(hMenuTree,hDragItem)) break; if ( hti.flags & TVHT_ABOVE ) { htiAfter = TVI_FIRST; } else if ( hti.flags & ( TVHT_NOWHERE|TVHT_BELOW )) { htiAfter = TVI_LAST; } else if ( hti.flags & ( TVHT_ONITEM|TVHT_ONITEMRIGHT )) { // check where over the item, the pointer is if ( !TreeView_GetItemRect( hMenuTree, hti.hItem, &rc, FALSE )) { drag=0; break; } height = ( BYTE )( rc.bottom - rc.top ); if ( hti.pt.y - ( height / 3 ) < rc.top ) { HTREEITEM hItem = hti.hItem; if ( !( hti.hItem = TreeView_GetPrevSibling( hMenuTree, hItem )) ) { if ( !( hti.hItem = TreeView_GetParent(hMenuTree, hItem ))) htiAfter = TVI_FIRST; else bAsChild = TRUE; } } else if ( hti.pt.y + ( height / 3 ) <= rc.bottom ) { bAsChild = TRUE; } } if(TreeView_GetChild(hMenuTree,hDragItem)&&bAsChild) break; if(hti.hItem){ tvi.hItem=hti.hItem; tvi.mask=TVIF_PARAM |TVIF_HANDLE; TreeView_GetItem(hMenuTree,&tvi); if ((bd=(ButtonData*)tvi.lParam)&&(bd->fEntryOpType&QMF_EX_SEPARATOR)) bAsChild = FALSE; } if(TreeView_GetParent(hMenuTree,hti.hItem)) bAsChild = FALSE; MoveItem( hDragItem, htiAfter?htiAfter:hti.hItem, bAsChild ); SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); drag=0; } break; /////////////////////////////////// //From UserInfoEx by DeathAxe // case WM_MOUSEMOVE: { if (!drag) break; { TVHITTESTINFO hti; hti.pt.x=(short)LOWORD(lparam); hti.pt.y=(short)HIWORD(lparam); ClientToScreen(hdlg,&hti.pt); ScreenToClient(hMenuTree,&hti.pt); TreeView_HitTest(hMenuTree,&hti); if ( hti.flags & ( TVHT_ONITEM|TVHT_ONITEMRIGHT )) { RECT rc; BYTE height; if ( TreeView_GetItemRect(hMenuTree, hti.hItem, &rc, FALSE )) { height = ( BYTE )( rc.bottom - rc.top ); if ( hti.pt.y - ( height / 3 ) < rc.top ) { SetCursor( LoadCursor( NULL, IDC_ARROW )); TreeView_SetInsertMark( hMenuTree, hti.hItem, 0 ); } else if ( hti.pt.y + ( height / 3 ) > rc.bottom ) { SetCursor( LoadCursor( NULL, IDC_ARROW )); TreeView_SetInsertMark( hMenuTree, hti.hItem, 1 ); } else { TreeView_SetInsertMark( hMenuTree, NULL, 0 ); SetCursor( LoadCursor( GetModuleHandle(NULL), MAKEINTRESOURCE( 183 )) ); } } } else { if ( hti.flags & TVHT_ABOVE ) SendMessage( hMenuTree, WM_VSCROLL, MAKEWPARAM( SB_LINEUP, 0 ), 0 ); if ( hti.flags & TVHT_BELOW ) SendMessage( hMenuTree, WM_VSCROLL, MAKEWPARAM( SB_LINEDOWN, 0 ), 0 ); TreeView_SetInsertMark( hMenuTree, NULL, 0 ); } } }break; ///////////// case WM_DESTROY: if (g_varhelpDlg) DestroyWindow(g_varhelpDlg); g_varhelpDlg=NULL; break; case WM_NOTIFY: switch(((LPNMHDR)lparam)->idFrom) { case 0: if (((LPNMHDR)lparam)->code == PSN_APPLY ) { if (!bNeedRestart){ SetMenuEntryProperties(hdlg); SaveMenuTree(hdlg); } db_set_b(NULL,PLGNAME,"RClickAuto",(BYTE)(g_bRClickAuto=IsDlgButtonChecked(hdlg,IDC_RAUTOSEND))); db_set_b(NULL,PLGNAME,"LClickAuto",(BYTE)(g_bLClickAuto=IsDlgButtonChecked(hdlg,IDC_LAUTOSEND))); db_set_b(NULL,PLGNAME,"QuickMenu",(BYTE)(g_bQuickMenu=IsDlgButtonChecked(hdlg,IDC_ENABLEQUICKMENU))); return 1; } else if (((LPNMHDR)lparam)->code == PSN_RESET ) { if (!bNeedRestart) RestoreModuleData(hdlg); return 1; } break; case IDC_MENUTREE: switch (((LPNMHDR)lparam)->code){ case TVN_KEYDOWN:{ TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*) ((LPNMHDR)lparam); if ( pTVKeyDown->wVKey == VK_F2 ) TreeView_EditLabel(hMenuTree,TreeView_GetSelection(hMenuTree)); else if ( pTVKeyDown->wVKey == VK_DELETE ) SendMessage(hdlg,WM_COMMAND,IDC_MTREEREMOVE,0); }break; case TVN_BEGINLABELEDIT: hwndEdit=TreeView_GetEditControl(hMenuTree); mir_subclassWindow(hwndEdit, LabelEditSubclassProc); break; case TVN_ENDLABELEDIT: { TVITEM tvi; ButtonData* bd=NULL; TCHAR strbuf[256]; TCHAR szLabel[256]; tvi.pszText = strbuf; tvi.cchTextMax = _countof(strbuf); tvi.mask=TVIF_TEXT |TVIF_HANDLE|TVIF_PARAM; tvi.hItem=TreeView_GetSelection(hMenuTree); TreeView_GetItem(hMenuTree,&tvi); GetWindowText(hwndEdit, szLabel, _countof(szLabel)); hwndEdit=NULL; if (!mir_tstrlen(szLabel)) break; if (bd = (ButtonData*)tvi.lParam){ if (!mir_tstrcmp(szLabel,_T("---"))) { if(TreeView_GetChild(hMenuTree,tvi.hItem)) break; else{ bd->fEntryOpType=QMF_EX_SEPARATOR; EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); } } else { bd->fEntryOpType&=~QMF_EX_SEPARATOR; EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),TRUE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),TRUE); SetDlgItemText(hdlg, IDC_MENUVALUE, bd->pszOpValue/*?bd->pszOpValue:bd->pszValue*/); } bd->pszOpName=mir_tstrdup(szLabel); tvi.pszText=szLabel; TreeView_SetItem(hMenuTree, &tvi); SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); } } break; case NM_KILLFOCUS: TreeView_EndEditLabelNow(hButtonsList, 1); break; case TVN_BEGINDRAG: SetCapture(hdlg); drag=1; hDragItem=((LPNMTREEVIEW)lparam)->itemNew.hItem; TreeView_SelectItem(hMenuTree,hDragItem); break; case TVN_SELCHANGING: { HTREEITEM hti = TreeView_GetSelection(hMenuTree); if (hti==NULL) break; TVITEM tvi; tvi.hItem=hti; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(hMenuTree,&tvi); if (tvi.lParam == 0) break; ButtonData *bd = ( ButtonData* )tvi.lParam; if (bd) { TCHAR szValue[256]; GetDlgItemText(hdlg, IDC_MENUVALUE, szValue, _countof(szValue)); if(mir_tstrlen(szValue)) { if(bd->pszOpValue&&(bd->pszOpValue!=bd->pszValue)) mir_free(bd->pszOpValue); bd->pszOpValue=mir_tstrdup(szValue); } bd->bOpInQMenu=IsDlgButtonChecked(hdlg,IDC_INQMENU); bd->bIsOpServName=IsDlgButtonChecked(hdlg,IDC_ISSERVNAME); } } break; case TVN_SELCHANGED: { HTREEITEM hti = TreeView_GetSelection(hMenuTree); if (hti == NULL) break; TVITEM tvi; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hti; TreeView_GetItem(hMenuTree,&tvi); ButtonData *bd = ( ButtonData* )tvi.lParam; if (bd) { if (!TreeView_GetChild(hMenuTree, tvi.hItem)&&!(bd->fEntryOpType&QMF_EX_SEPARATOR)) { EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),TRUE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),TRUE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),TRUE); SetDlgItemText(hdlg, IDC_MENUVALUE, bd->pszOpValue/*?bd->pszOpValue:bd->pszValue*/); } else { EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); if (!(bd->fEntryOpType&QMF_EX_SEPARATOR)) EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); } CheckDlgButton(hdlg,IDC_INQMENU,bd->bOpInQMenu ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hdlg,IDC_ISSERVNAME,bd->bIsOpServName ? BST_CHECKED : BST_UNCHECKED); } } } break; case IDC_BUTTONSLIST: switch (((LPNMHDR)lparam)->code) { case TVN_KEYDOWN:{ TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*) ((LPNMHDR)lparam); if ( pTVKeyDown->wVKey == VK_F2 ) TreeView_EditLabel(hButtonsList,TreeView_GetSelection(hButtonsList)); else if ( pTVKeyDown->wVKey == VK_DELETE ) SendMessage(hdlg,WM_COMMAND,IDC_BLISTREMOVE,0); }break; case TVN_BEGINLABELEDIT: hwndEdit = TreeView_GetEditControl(hButtonsList); mir_subclassWindow(hwndEdit, LabelEditSubclassProc); break; case TVN_ENDLABELEDIT: { TVITEM tvi; TCHAR strbuf[128]; TCHAR szLabel[128]; tvi.pszText = strbuf; tvi.cchTextMax = _countof(strbuf); tvi.mask=TVIF_TEXT |TVIF_HANDLE|TVIF_PARAM; tvi.hItem=TreeView_GetSelection(hButtonsList); TreeView_GetItem(hButtonsList,&tvi); GetWindowText(hwndEdit, szLabel, _countof(szLabel)); hwndEdit=NULL; if (!mir_tstrlen(szLabel)) break; tvi.pszText=szLabel; ((ListData*)tvi.lParam)->dwOPFlags|=QMF_RENAMED; TreeView_SetItem(hButtonsList, &tvi); SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); } break; case TVN_SELCHANGING: SetMenuEntryProperties(hdlg); break; case TVN_SELCHANGED: { HTREEITEM hti = TreeView_GetSelection(hButtonsList); if(hti==NULL||!TreeView_GetCount(hButtonsList)) { EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME2),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); break; } TVITEM tvi; tvi.mask=TVIF_HANDLE|TVIF_PARAM; tvi.hItem=hti; TreeView_GetItem(hButtonsList,&tvi); if(tvi.lParam==0) break; BuildMenuTree(hMenuTree,(SortedList *)((ListData*)tvi.lParam)->sl); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),TRUE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME2),TRUE); CheckDlgButton(hdlg,IDC_ISSERVNAME2,((ListData*)tvi.lParam)->bIsOpServName ? BST_CHECKED : BST_UNCHECKED); if (((ListData*)tvi.lParam)->ptszOPQValue) SetDlgItemText(hdlg, IDC_RCLICKVALUE, ((ListData*)tvi.lParam)->ptszOPQValue); else SetDlgItemText(hdlg, IDC_RCLICKVALUE, _T("")); } break; } break; } break; case WM_COMMAND: switch(LOWORD(wparam)) { case IDC_VARHELP: if (!g_varhelpDlg) g_varhelpDlg=CreateDialog(hinstance,MAKEINTRESOURCE(IDD_HELPDIALOG), 0, HelpDlgProc); else //ShowWindow(g_varhelpDlg,SW_SHOWDEFAULT); SetWindowPos(g_varhelpDlg,0,0,0,0,0,SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE); break; case IDC_BLISTADD: { TVINSERTSTRUCT tvis; ListData* ld=NULL; TCHAR namebuff[MAX_PATH]={'\0'}; int count=TreeView_GetCount(hButtonsList); if (count>10) break; if(g_iOPButtonsCount==99){ MessageBox(NULL, TranslateT("Congratulation!\r\nYou have clicked this button 100 times!\r\nThere was access violation at this point...\r\nAnd now function for freeing resources must be called...\r\nBut no! there's only break :D"), TranslateT("You win!"),MB_OK); break; } ld = (ListData *)mir_alloc(sizeof(ListData)); ButtonsList[g_iOPButtonsCount++]=ld; ld->sl=List_Create(0,1); ld->dwOPFlags=QMF_NEW; ld->bIsOpServName=0; ld->ptszButtonName=NULL; ld->ptszOPQValue=NULL; ld->ptszQValue=NULL; tvis.hParent = NULL; tvis.hInsertAfter = TVI_LAST; GetDlgItemText(hdlg, IDC_BUTTONNAME, namebuff, _countof(namebuff)); tvis.item.mask=TVIF_PARAM|TVIF_TEXT; tvis.item.pszText=(mir_tstrlen(namebuff))?namebuff:TranslateT("New Button"); tvis.item.lParam=(LPARAM)ld; TreeView_SelectItem(hButtonsList,TreeView_InsertItem(hButtonsList,&tvis)); }break; case IDC_BLISTREMOVE: { TVITEM tvi; ListData* ld; if (!(tvi.hItem=TreeView_GetSelection(hButtonsList))) break; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(hButtonsList,&tvi); ld= (ListData*)tvi.lParam; ld->dwOPFlags|=QMF_DELETNEEDED; TreeView_DeleteItem(hButtonsList,tvi.hItem); if (!TreeView_GetCount(hButtonsList)) { TreeView_DeleteAllItems(hMenuTree); EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_RCLICKVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME2),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); SetDlgItemText(hdlg, IDC_RCLICKVALUE, _T("")); } }break; case IDC_MTREEADD: { TVINSERTSTRUCT tvis; TVITEM tvi; ButtonData *bd=NULL; SortedList *sl=NULL; TCHAR namebuff[MAX_PATH]={'\0'}; if (!TreeView_GetCount(hButtonsList)) break; if (!(tvi.hItem=TreeView_GetSelection(hButtonsList))) break; bd = (ButtonData *)mir_alloc(sizeof(ButtonData)); memset(bd,0,sizeof(ButtonData)); GetDlgItemText(hdlg, IDC_MENUNAME, namebuff, _countof(namebuff)); bd->dwOPPos=TreeView_GetCount(hMenuTree)-1; bd->pszOpName=mir_tstrlen(namebuff)?mir_tstrdup(namebuff):mir_tstrdup(TranslateT("New Menu Entry")); bd->pszOpValue=mir_tstrdup(bd->pszOpName); bd->fEntryOpType=!mir_tstrcmp(namebuff,_T("---"))?QMF_EX_SEPARATOR:0; bd->dwOPFlags=QMF_NEW; bd->pszName=NULL; bd->pszValue=NULL; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(hButtonsList,&tvi); sl=((ListData*)tvi.lParam)->sl; List_InsertPtr(sl,bd); tvis.hParent = NULL; tvis.hInsertAfter = TVI_LAST; tvis.item.mask=TVIF_PARAM|TVIF_TEXT; tvis.item.pszText=bd->pszOpName; tvis.item.lParam=(LPARAM)bd; TreeView_SelectItem(hMenuTree,TreeView_InsertItem(hMenuTree,&tvis)); }break; case IDC_MTREEREMOVE: { TVITEM tvi; TVINSERTSTRUCT tvis; HTREEITEM hti=NULL; ButtonData *bd=NULL; tvi.mask=TVIF_HANDLE|TVIF_PARAM; if (!(tvi.hItem=TreeView_GetSelection(hMenuTree))) break; TreeView_GetItem(hMenuTree,&tvi); hti=tvi.hItem; bd= (ButtonData*)tvi.lParam; bd->dwOPFlags|=QMF_DELETNEEDED; if(tvi.hItem=TreeView_GetChild(hMenuTree,tvi.hItem)) { TCHAR strbuf[128]; while(tvi.hItem){ tvis.hInsertAfter=hti; tvi.pszText = strbuf; tvi.cchTextMax = _countof(strbuf); tvi.mask=TVIF_HANDLE|TVIF_PARAM|TVIF_TEXT; TreeView_GetItem(hMenuTree,&tvi); tvis.hParent=NULL; tvis.item=tvi; TreeView_InsertItem(hMenuTree,&tvis); tvi.hItem=TreeView_GetNextSibling(hMenuTree,tvi.hItem); } } TreeView_DeleteItem(hMenuTree,hti); if (!TreeView_GetCount(hMenuTree)) { EnableWindow(GetDlgItem(hdlg,IDC_MENUVALUE),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_ISSERVNAME),FALSE); EnableWindow(GetDlgItem(hdlg,IDC_INQMENU),FALSE); SetDlgItemText(hdlg, IDC_MENUVALUE, _T("")); } }break; } break; case WM_CLOSE: EndDialog(hdlg,0); return 0; } if (HIWORD(wparam)==BN_CLICKED && GetFocus()==(HWND)lparam) SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); else if ((HIWORD(wparam) == EN_CHANGE)&&(GetFocus()==(HWND)lparam)) if (!bOptionsInit) SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); return 0; }
PTQueue Queue_Create() { return List_Create(); }
static INT_PTR CALLBACK FtMgrPageDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { struct TFtPageData *dat = (struct TFtPageData *)GetWindowLongPtr(hwnd, GWLP_USERDATA); int i; switch (msg) { case WM_INITDIALOG: { // Force scrollbar visibility SCROLLINFO si = {0}; si.cbSize = sizeof(si); si.fMask = SIF_DISABLENOSCROLL; SetScrollInfo(hwnd, SB_VERT, &si, TRUE); dat = (struct TFtPageData *)mir_alloc(sizeof(struct TFtPageData)); dat->wnds = (struct TLayoutWindowList *)List_Create(0, 1); dat->scrollPos = 0; dat->runningCount = 0; SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)dat); } break; case WM_FT_ADD: { TLayoutWindowInfo *wnd = (struct TLayoutWindowInfo *)mir_alloc(sizeof(struct TLayoutWindowInfo)); wnd->hwnd = (HWND)lParam; GetWindowRect(wnd->hwnd, &wnd->rc); List_Insert((SortedList *)dat->wnds, wnd, dat->wnds->realCount); LayoutTransfers(hwnd, dat); dat->runningCount++; PostMessage(GetParent(hwnd), WM_TIMER, 1, NULL); } break; case WM_FT_RESIZE: for (i=0; i < dat->wnds->realCount; ++i) if (dat->wnds->items[i]->hwnd == (HWND)lParam) { GetWindowRect(dat->wnds->items[i]->hwnd, &dat->wnds->items[i]->rc); break; } LayoutTransfers(hwnd, dat); break; case WM_FT_REMOVE: for (i=0; i < dat->wnds->realCount; ++i) if (dat->wnds->items[i]->hwnd == (HWND)lParam) { mir_free(dat->wnds->items[i]); List_Remove((SortedList *)dat->wnds, i); break; } LayoutTransfers(hwnd, dat); break; case WM_FT_COMPLETED: //wParam: { ACKRESULT_SUCCESS | ACKRESULT_FAILED | ACKRESULT_DENIED } dat->runningCount--; for (i=0; i < dat->wnds->realCount; i++) { // no error when canceling (WM_FT_REMOVE is send first, check if hwnd is still registered) if (dat->wnds->items[i]->hwnd == (HWND)lParam) { SendMessage(GetParent(hwnd), WM_TIMER, 1, (LPARAM)wParam); break; } } if (i == dat->wnds->realCount) PostMessage(GetParent(hwnd), WM_TIMER, 1, NULL); if(dat->runningCount == 0 && wParam == ACKRESULT_SUCCESS && db_get_b(NULL, "SRFile", "AutoClose", 0)) ShowWindow(hwndFtMgr, SW_HIDE); break; case WM_FT_CLEANUP: for (i=0; i < dat->wnds->realCount; ++i) SendMessage(dat->wnds->items[i]->hwnd, WM_FT_CLEANUP, wParam, lParam); break; case WM_SIZE: LayoutTransfers(hwnd, dat); break; case WM_MOUSEWHEEL: { int zDelta = GET_WHEEL_DELTA_WPARAM(wParam); if (zDelta) { int nScrollLines = 0; SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, (void*)&nScrollLines, 0); for (i=0; i < (nScrollLines + 1) / 2; i++) SendMessage(hwnd, WM_VSCROLL, (zDelta < 0) ? SB_LINEDOWN : SB_LINEUP, 0); } SetWindowLongPtr(hwnd, DWLP_MSGRESULT, 0); return TRUE; } case WM_VSCROLL: { int pos = dat->scrollPos; switch (LOWORD(wParam)) { case SB_LINEDOWN: pos += 15; break; case SB_LINEUP: pos -= 15; break; case SB_PAGEDOWN: pos += dat->height - 10; break; case SB_PAGEUP: pos -= dat->height - 10; break; case SB_THUMBTRACK: pos = HIWORD(wParam); break; } if (pos > dat->dataHeight - dat->height) pos = dat->dataHeight - dat->height; if (pos < 0) pos = 0; if (dat->scrollPos != pos) { ScrollWindow(hwnd, 0, dat->scrollPos - pos, NULL, NULL); SetScrollPos(hwnd, SB_VERT, pos, TRUE); dat->scrollPos = pos; } break; } case M_PRESHUTDOWN: for (i=0; i < dat->wnds->realCount; ++i) PostMessage(dat->wnds->items[i]->hwnd, WM_COMMAND, MAKEWPARAM(IDCANCEL, BN_CLICKED), 0); break; case M_CALCPROGRESS: { TFtProgressData *prg = (TFtProgressData *)wParam; for (i=0; i < dat->wnds->realCount; ++i) { FileDlgData *trdat = (FileDlgData *)GetWindowLongPtr(dat->wnds->items[i]->hwnd, GWLP_USERDATA); if (trdat->transferStatus.totalBytes && trdat->fs && !trdat->send && (trdat->transferStatus.totalBytes == trdat->transferStatus.totalProgress)) prg->scan++; else if (trdat->transferStatus.totalBytes && trdat->fs) { // in progress prg->run++; prg->totalBytes += trdat->transferStatus.totalBytes; prg->totalProgress += trdat->transferStatus.totalProgress; } else if (trdat->fs) // starting prg->init++; } } break; case WM_DESTROY: for (i=0; i < dat->wnds->realCount; ++i) mir_free(dat->wnds->items[i]); List_Destroy((SortedList *)dat->wnds); mir_free(dat->wnds); mir_free(dat); break; } return FALSE; }
struct Box_s *EditCustomTimes_Create(struct Box_s *parent, void (*refreshCallback)(struct Box_s *), void (*destroyCallback)(struct Box_s *)) { struct editcustomtimesdata_s *data = malloc(sizeof(*data)); struct Box_s *pbox, *dialog; int x, y, w, h; memset(data, 0, sizeof(*data)); w = 432; h = 440; { RECT windowrect; HMONITOR hm; MONITORINFO mi; windowrect.left = parent->x; windowrect.right = windowrect.left + parent->w - 1; windowrect.top = parent->y; windowrect.bottom = windowrect.top + parent->h - 1; hm = MonitorFromRect(&windowrect, MONITOR_DEFAULTTONEAREST); mi.cbSize = sizeof(mi); GetMonitorInfo(hm, &mi); x = mi.rcWork.left + (mi.rcWork.right - mi.rcWork.left - w) / 2; y = mi.rcWork.top + (mi.rcWork.bottom - mi.rcWork.top - h) / 2; } dialog = Box_Create(x, y, w, h, BOX_VISIBLE); dialog->bgcol = DefaultBG; dialog->fgcol = RGB(0, 0, 0); dialog->minw = 384; dialog->minh = 256; data->parent = parent; data->refreshCallback = refreshCallback; data->destroyCallback = destroyCallback; SizerSet_Create(dialog); dialog->titlebar = TitleBarOnly_Add(dialog, _("Edit Saved Custom Time Controls")); dialog->OnActive = TitleBarRoot_OnActive; dialog->OnInactive = TitleBarRoot_OnInactive; dialog->OnClose = EditCustomTimes_OnClose; pbox = List_Create(1 * 8, 5 * 8, w - 2 * 8, h - 13 * 8 - 5 * 8, BOX_VISIBLE, FALSE); pbox->bgcol = TabBG2; pbox->fgcol = TabFG2; pbox->OnSizeWidth = Box_OnSizeWidth_Stretch; pbox->OnSizeHeight = Box_OnSizeHeight_Stretch; Box_AddChild(dialog, pbox); data->list = pbox; pbox = StdButton_Create(20, (int)(h - 5.5 * 8), (int)(10.5 * 8), _("Add"), 0); pbox->OnSizeWidth = Box_OnSizeWidth_StickRight; pbox->OnSizeHeight = Box_OnSizeHeight_StickBottom; Button2_SetOnButtonHit(pbox, EditCustomTimes_OnAdd); Box_AddChild(dialog, pbox); /* pbox = StdButton_Create((int)(w - 23 * 8), (int)(h - 5.5 * 8), (int)(10.5 * 8), "Save", 0); pbox->OnSizeWidth = Box_OnSizeWidth_StickRight; pbox->OnSizeHeight = Box_OnSizeHeight_StickBottom; Button2_SetOnButtonHit(pbox, EditCustomTimes_OnSave); Box_AddChild(dialog, pbox); */ pbox = StdButton_Create((int)(w - 12 * 8), (int)(h - 5.5 * 8), (int)(10.5 * 8), _("OK"), 0); pbox->OnSizeWidth = Box_OnSizeWidth_StickRight; pbox->OnSizeHeight = Box_OnSizeHeight_StickBottom; Button2_SetOnButtonHit(pbox, EditCustomTimes_OnOK); Box_AddChild(dialog, pbox); dialog->boxdata = data; { struct namedlist_s *customtimecontrols = Model_GetCustomTimeControls(); struct namedlist_s *entry = customtimecontrols; while (entry) { EditCustomTimes_AddEntry(dialog, entry->name, entry->data); entry = entry->next; } } Box_CreateWndCustom(dialog, _("Edit Saved Custom Times"), parent->hwnd); dialog->OnSizeWidth = Box_OnSizeWidth_Stretch; dialog->OnSizeHeight = Box_OnSizeHeight_Stretch; dialog->OnDestroy = EditCustomTimes_OnDestroy; BringWindowToTop(dialog->hwnd); return dialog; }
// Generate the list of smileys / text to be drawn void Cache_ReplaceSmileys(struct ClcData *dat, struct ClcContact *contact, TCHAR *text, int text_size, SortedList **plText, int *max_smiley_height, BOOL replace_smileys) { SMADD_PARSET sp; int last_pos=0; *max_smiley_height = 0; if (!dat->text_replace_smileys || !replace_smileys || text == NULL || !ServiceExists(MS_SMILEYADD_PARSET)) { Cache_DestroySmileyList(*plText); *plText = NULL; return; } // Free old list if (*plText != NULL) { Cache_DestroySmileyList(*plText); *plText = NULL; } // Call service for the first time to see if needs to be used... sp.cbSize = sizeof(sp); if (dat->text_use_protocol_smileys) { sp.Protocolname = contact->proto; if (DBGetContactSettingByte(NULL,"CLC","Meta",0) != 1 && contact->proto != NULL && strcmp(contact->proto, "MetaContacts") == 0) { HANDLE hContact = (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT, (UINT)contact->hContact, 0); if (hContact != 0) { sp.Protocolname = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (UINT)hContact, 0); } } } else { sp.Protocolname = "clist"; } sp.str = text; sp.startChar = 0; sp.size = 0; CallService(MS_SMILEYADD_PARSET, 0, (LPARAM)&sp); if (sp.size == 0) { // Did not find a simley return; } // Lets add smileys *plText = List_Create( 10, 10 ); do { if (sp.SmileyIcon != NULL) // For deffective smileypacks { // Add text if (sp.startChar-last_pos > 0) { ClcContactTextPiece *piece = (ClcContactTextPiece *) mir_alloc(sizeof(ClcContactTextPiece)); piece->type = TEXT_PIECE_TYPE_TEXT; piece->start_pos = last_pos ;//sp.str - text; piece->len = sp.startChar-last_pos; List_Append(*plText, piece); } // Add smiley { BITMAP bm; ICONINFO icon; ClcContactTextPiece *piece = (ClcContactTextPiece *) mir_alloc(sizeof(ClcContactTextPiece)); piece->type = TEXT_PIECE_TYPE_SMILEY; piece->len = sp.size; piece->smiley = sp.SmileyIcon; if (GetIconInfo(piece->smiley, &icon) && GetObject(icon.hbmColor,sizeof(BITMAP),&bm)) { piece->smiley_width = bm.bmWidth; piece->smiley_height = bm.bmHeight; } else { piece->smiley_width = 16; piece->smiley_height = 16; } dat->text_smiley_height = max(piece->smiley_height, dat->text_smiley_height); *max_smiley_height = max(piece->smiley_height, *max_smiley_height); List_Append(*plText, piece); } } /* * Bokra SmileyAdd Fix: */ // Get next last_pos=sp.startChar+sp.size; CallService(MS_SMILEYADD_PARSET, 0, (LPARAM)&sp); } while (sp.size != 0); // // Get next // sp.str += sp.startChar + sp.size; // sp.startChar = 0; // sp.size = 0; // CallService(MS_SMILEYADD_PARSE, 0, (LPARAM)&sp); //} //while (sp.SmileyIcon != NULL && sp.size != 0); // Add rest of text if (last_pos < text_size) { ClcContactTextPiece *piece = (ClcContactTextPiece *) mir_alloc(sizeof(ClcContactTextPiece)); piece->type = TEXT_PIECE_TYPE_TEXT; piece->start_pos = last_pos; piece->len = text_size-last_pos; List_Append(*plText, piece); } }
int main(void) { INIT(); long int i; int l = 10, r = 5; Object list = List_Create(); Object list2 = List_Create(); Object temp_list; Object front, back; // list2 = (0 1 2 3 4 5 6 ... 148 149) for(i = 0; i < l + r; i++) { List_PushBack(list2, INT_AS_OBJECT(i)); }; // list = (99998 99996 ... 8 6 4 2 0 1 3 5 7 9 ... 99997 99999 ) for(i = 0; i < NODES; i++) { if(i & 1) { List_PushBack(list, INT_AS_OBJECT(i)); } else { List_PushFront(list, INT_AS_OBJECT(i)); }; }; for(front = List_First(list), i = 0; i < NODES / 2; ListIterator_Next(front), i++) { List_AddAfterPosition(list2, INT_AS_OBJECT(l - 1 + i), ListIterator_ThisData(front)); }; for(back = List_Last(list), i = 0; i < NODES / 2; ListIterator_Prev(back), i++) { List_AddAfterPosition(list2, INT_AS_OBJECT(l + NODES / 2 - 1), ListIterator_ThisData(back)); }; front = List_IteratorFromPosition(list2, INT_AS_OBJECT(l)); TEST("Checking for correctness of IteratorFromPosition after AddList{Before|After}", OBJECT_AS_INT(ListIterator_ThisData(front)) == (NODES & (~1)) - ((!(NODES & 1)) * 2)); back = List_IteratorFromPosition(list2, INT_AS_OBJECT(l + NODES - 1)); TEST("Checking for correctness of IteratorFromPosition after AddList{Before|After}", OBJECT_AS_INT(ListIterator_ThisData(back)) == (NODES & (~1)) - 1 + ((NODES & 1) * 2)); temp_list = List_SublistBetweenIterators(list2, front, back); front = List_First(temp_list); back = List_Last(temp_list); for(i = 1; i < NODES / 2; i++) { if(OBJECT_AS_INT(ListIterator_ThisData(front)) != OBJECT_AS_INT(ListIterator_ThisData(back)) + 1) { DEBUG("Got %li and %li.\n", OBJECT_AS_INT(ListIterator_ThisData(front)), OBJECT_AS_INT(ListIterator_ThisData(back))); return 1; }; ListIterator_Next(front); ListIterator_Prev(back); }; Object_Release(list); Object_Release(list2); Object_Release(temp_list); return 0; };