/************************************************************************* Set whether the list should allow multiple selections or just a single selection *************************************************************************/ void Listbox::setMultiselectEnabled(bool setting) { // only react if the setting is changed if (d_multiselect != setting) { d_multiselect = setting; // if we change to single-select, deselect all except the first selected item. WindowEventArgs args(this); if ((!d_multiselect) && (getSelectedCount() > 1)) { ListboxItem* itm = getFirstSelectedItem(); while ((itm = getNextSelected(itm))) { itm->setSelected(false); } onSelectionChanged(args); } onMultiselectModeChanged(args); } }
/************************************************************************* Return a pointer to the first selected item. *************************************************************************/ ListboxItem* Listbox::getFirstSelectedItem(void) const { return getNextSelected(0); }
char cmd_copymove1(uchar copymode, uchar shiftPressed) { char *name; char e; FileInfo* f; char sourceFile[256]; char mask[11]; char forMask[11]; char type; uint i; if(shiftPressed) { // Копируем имя c первой панели (без пути) f = getSelNoBack(); if(!f) return 0; // Файл не выбран, выходим без ошибки unpackName(cmdLine, f->fname); } else { // Копируем путь со второй панели i = strlen(panelB.path1); if(i >= 254) return ERR_RECV_STRING; // Так как прибавим 2 символа cmdLine[0] = '/'; strcpy(cmdline+1, panelB.path1); if(i != 0) strcpy(cmdline+i+1, "/"); } // Позволяем пользователю изменить путь или имя if(!inputBox(copymode ? " kopirowatx " : " pereimenowatx/peremestitx ") && cmdline[0]!=0) return 0; // Преобразование относительного пути в абсолютный if(!absolutePath(cmdline)) return ERR_RECV_STRING; // Используется ли маска? mask[0] = 0; name = getname(cmdline); if(name[0] != 0) { // Сохраняем маску packName(mask, name); // Убираем из пути маску dropPathInt(cmdLine, 0); } else { // Если в ком строке что то есть, а имя не выделено, значит ком строка оканчивается на /. // Этот символ надо удалить if(cmdline[0] != 0 && name[0] == 0) name[-1] = 0; } // Ищем первый файл type = getFirstSelected(sourceFile); if(type == 0) return 0; // Нет выбранных файлов for(;;) { // Преобразование относительного пути в абсолютный if(!absolutePath(sourceFile)) { e = ERR_RECV_STRING; break; } // Добавляем имя packName(forMask, getname(sourceFile)); if(mask[0]) applyMask(forMask, mask); if(catPathAndUnpack(cmdline, forMask)) return ERR_RECV_STRING; // Самого в мебя не копируем и не переименовываем if(0!=strcmp(sourceFile, cmdline)) { // Выполнение операции if(copymode) { if(type==2) { e = cmd_copyFolder(sourceFile, cmdline); } else { e = cmd_copyFile(sourceFile, cmdline); } } else { // Простое окно drawWindow(" pereimenowanie/pereme}enie "); drawWindowText(0, 1, "iz:"); drawWindowText(4, 1, sourceFile); drawWindowText(0, 2, "w:"); drawWindowText(4, 2, cmdline); drawAnyKeyButton(); // Прерывание if(fs_bioskey(1) == KEY_ESC) { e = ERR_USER; break; } e = fs_move(sourceFile, cmdline); } if(e) break; } // Убираем из пути имя файла dropPathInt(cmdLine, 0); // Следующий выбранный файл type = getNextSelected(sourceFile); if(type == 0) { e=0; break; } } // конец цикла // При переносе файла надо обновить обе панели // А при копировании список файов используется под буфер getFiles(); dupFiles(1); return e; }