void IconSaveBrowser::Update(GuiTrigger * t) { if(state == STATE_DISABLED || !t || !triggerupdate) return; if(!browser->GetSaveListCount()) { for(int i = 0; i < (int)Buttons.size() && listChanged; i++) SetButton(i, "", false, 0, 0); listChanged = false; return; } if (oldSelectedItem != selectedItem) { SelectTimer.reset(); oldSelectedItem = selectedItem; } scrollbar->Update(t); if(scrollbar->ListChanged()) { selectedItem = scrollbar->GetSelectedItem(); browser->SetPageIndex(scrollbar->GetSelectedIndex()); listChanged = true; } if(browser) browser->UpdateMarker(t); if(t->Right()) { if(browser->GetPageIndex() + selectedItem + 1 < browser->GetSaveListCount()) { if(selectedItem == PageSize-1) { // move list down by 1 browser->SetPageIndex(browser->GetPageIndex()+RowSize); Buttons[selectedItem]->ResetState(); selectedItem = PageSize-RowSize; Buttons[selectedItem]->SetState(STATE_SELECTED, t->chan); listChanged = true; } else if(Buttons[selectedItem+1]->IsVisible()) { Buttons[selectedItem]->ResetState(); Buttons[++selectedItem]->SetState(STATE_SELECTED, t->chan); } } } else if(t->Left()) { if(selectedItem == 0 && browser->GetPageIndex() + selectedItem > 0) { // move list up by 1 browser->SetPageIndex(browser->GetPageIndex()-RowSize); Buttons[selectedItem]->ResetState(); selectedItem = RowSize-1; Buttons[selectedItem]->SetState(STATE_SELECTED, t->chan); listChanged = true; } else if(selectedItem > 0) { Buttons[selectedItem]->ResetState(); Buttons[--selectedItem]->SetState(STATE_SELECTED, t->chan); } } else if(t->Up()) { if(browser->GetPageIndex() + selectedItem - RowSize >= 0) { Buttons[selectedItem]->ResetState(); selectedItem = selectedItem-RowSize; if(selectedItem < 0) { // move list up by 1 browser->SetPageIndex(browser->GetPageIndex()-RowSize); selectedItem = selectedItem+RowSize; oldSelectedItem = -1; } Buttons[selectedItem]->SetState(STATE_SELECTED, t->chan); listChanged = true; } } else if(t->Down()) { int i = RowSize; while(browser->GetPageIndex()+selectedItem+RowSize >= browser->GetSaveListCount() && i > 0 && selectedItem > 0 && RowSize < browser->GetSaveListCount()) { --i; --selectedItem; } if(browser->GetPageIndex() + selectedItem + RowSize < browser->GetSaveListCount()) { Buttons[selectedItem]->ResetState(); selectedItem = selectedItem+RowSize; if(selectedItem >= PageSize) { // move list down by 1 browser->SetPageIndex(browser->GetPageIndex()+RowSize); selectedItem = selectedItem-RowSize; oldSelectedItem = -1; } Buttons[selectedItem]->SetState(STATE_SELECTED, t->chan); listChanged = true; } } //endNavigation: if(numEntries != browser->GetSaveListCount()) { numEntries = browser->GetSaveListCount(); scrollbar->SetEntrieCount(numEntries); listChanged = true; } u16 x = 12, y = 0; for(int i = 0; i < PageSize; i++) { while(listChanged && browser->IsGettingList()) usleep(100); if(listChanged) { if(browser->GetPageIndex()+i < browser->GetSaveListCount()) { std::string name = browser->GetItemSaveName(browser->GetPageIndex()+i); SetButton(i, name, true, x, y); } else { SetButton(i, "", false, 0, 0); } x += 90; if(x >= (u32) width-80) { x = 12; y += 90; } } if(i != selectedItem && Buttons[i]->GetState() == STATE_SELECTED) Buttons[i]->ResetState(); else if(i == selectedItem && Buttons[i]->GetState() == STATE_DEFAULT) Buttons[selectedItem]->SetState(STATE_SELECTED, t->chan); int currChan = t->chan; if(t->wpad.ir.valid && !Buttons[i]->IsInside(t->wpad.ir.x, t->wpad.ir.y)) t->chan = -1; Buttons[i]->Update(t); t->chan = currChan; if(Buttons[i]->GetState() == STATE_CLICKED) { browser->SetSelectedIndex(browser->GetPageIndex() + i); state = STATE_CLICKED; } if(Buttons[i]->GetState() == STATE_SELECTED) { selectedItem = i; browser->SetSelectedIndex(browser->GetPageIndex() + i); Tooltip[i]->SetState(STATE_DEFAULT); } else { Tooltip[i]->SetState(STATE_DISABLED); } ItemMarker * IMarker = browser->GetItemMarker(); int itemCount = IMarker->GetItemcount(); for(int n = 0; n < itemCount; n++) { if(browser->GetPageIndex() + i == IMarker->GetItemIndex(n)) { Buttons[i]->SetState(STATE_SELECTED); } } } scrollbar->SetPageSize(PageSize); scrollbar->SetRowSize(RowSize); scrollbar->SetSelectedItem(selectedItem); scrollbar->SetSelectedIndex(browser->GetPageIndex()); listChanged = false; }
void Explorer::ProcessArcChoice(int choice, const char * destCandidat) { ArchiveBrowser * browser = (ArchiveBrowser *) curBrowser; if(!browser) return; if(choice == ArcPasteItems) { int ret = WindowPrompt(tr("Paste the item(s) into this directory?"), Clipboard::Instance()->GetItemName(Clipboard::Instance()->GetItemcount()-1), tr("Yes"), tr("Cancel")); if(ret <= 0) return; PackTask *task = new PackTask(Clipboard::Instance(), browser->GetCurrentPath(), browser->GetArchive(), Settings.CompressionLevel); task->TaskEnd.connect(this, &Explorer::OnFinishedTask); this->explorerTasks++; Taskbar::Instance()->AddTask(task); ThreadedTaskHandler::Instance()->AddTask(task); Clipboard::Instance()->Reset(); } else if(choice == ArcExtractFile) { int ret = WindowPrompt(tr("Extract the selected item(s)?"), browser->GetCurrentName(), tr("Yes"), tr("Cancel")); if(ret <= 0) return; char dest[MAXPATHLEN]; snprintf(dest, sizeof(dest), "%s", destCandidat); int result = OnScreenKeyboard(dest, sizeof(dest)); if(result) { //append selected Item browser->MarkCurrentItem(); //Get ItemMarker ItemMarker * IMarker = browser->GetItemMarker(); //switch between browser index and archive file index for(int i = 0; i < IMarker->GetItemcount(); i++) IMarker->GetItem(i)->itemindex = browser->GetItemStructure(IMarker->GetItem(i)->itemindex)->fileindex; UnpackTask *task = new UnpackTask(IMarker, dest, browser->GetArchive(), false); task->TaskEnd.connect(this, &Explorer::OnFinishedTask); this->explorerTasks++; Taskbar::Instance()->AddTask(task); ThreadedTaskHandler::Instance()->AddTask(task); IMarker->Reset(); } } else if(choice == ArcExtractAll) { int ret = WindowPrompt(tr("Extract full archive?"), 0, tr("Yes"), tr("Cancel")); if(ret <= 0) return; char dest[MAXPATHLEN]; snprintf(dest, sizeof(dest), "%s", destCandidat); if(dest[strlen(dest)-1] != '/') strcat(dest, "/"); strncat(dest, browser->GetArchiveName(), sizeof(dest)); char * ext = strrchr(dest, '.'); if(ext) ext[0] = 0; strcat(dest, "/"); int result = OnScreenKeyboard(dest, sizeof(dest)); if(result) { UnpackTask *task = new UnpackTask(browser->GetItemMarker(), dest, browser->GetArchive(), true); task->TaskEnd.connect(this, &Explorer::OnFinishedTask); this->explorerTasks++; Taskbar::Instance()->AddTask(task); ThreadedTaskHandler::Instance()->AddTask(task); browser->GetItemMarker()->Reset(); } } else if(choice == ArcProperties) { browser->MarkCurrentItem(); ItemMarker * Marker = browser->GetItemMarker(); ArchiveProperties * Prompt = new ArchiveProperties(browser->GetArchive(), Marker); Prompt->SetAlignment(ALIGN_CENTER | ALIGN_MIDDLE); Prompt->DimBackground(true); Application::Instance()->SetUpdateOnly(Prompt); Application::Instance()->Append(Prompt); Marker->Reset(); } }
void ListEmuBrowser::Update(GuiTrigger * t) { if(state == STATE_DISABLED || !t || !triggerupdate) return; if(!browser->GetEmuListCount()) { for(int i = 0; i < (int)saveBtn.size() && listChanged; i++) SetButton(i, "", false); if(infosWindow) infosWindow->SetVisible(false); listChanged = false; return; } if(infosWindow && !infosWindow->IsVisible()) infosWindow->SetVisible(true); scrollbar->Update(t); if(scrollbar->ListChanged()) { selectedItem = scrollbar->GetSelectedItem(); browser->SetPageIndex(scrollbar->GetSelectedIndex()); listChanged = true; } if(browser) browser->UpdateMarker(t); SetSelectedInfos(); if(t->Right()) { if(browser->GetPageIndex() < browser->GetEmuListCount() && browser->GetEmuListCount() > PAGESIZE) { int pageIndex = browser->GetPageIndex() + PAGESIZE; if(pageIndex+PAGESIZE >= browser->GetEmuListCount()) pageIndex = browser->GetEmuListCount()-PAGESIZE; browser->SetPageIndex(pageIndex); listChanged = true; } } else if(t->Left()) { if(browser->GetPageIndex() > 0) { int pageIndex = browser->GetPageIndex() - PAGESIZE; if(pageIndex < 0) pageIndex = 0; browser->SetPageIndex(pageIndex); listChanged = true; } } else if(t->Down()) { if(browser->GetPageIndex() + selectedItem + 1 < browser->GetEmuListCount()) { if(selectedItem == (int) saveBtn.size()-1) { //! move list down by 1 browser->SetPageIndex(browser->GetPageIndex()+1); listChanged = true; } else if((int) saveBtn.size() > selectedItem+1 && saveBtn[selectedItem+1]->IsVisible()) { saveBtn[selectedItem]->ResetState(); saveBtn[++selectedItem]->SetState(STATE_SELECTED, t->chan); } } } else if(t->Up()) { if(selectedItem == 0 && browser->GetPageIndex() + selectedItem > 0) { //! move list up by 1 browser->SetPageIndex(browser->GetPageIndex()-1); listChanged = true; } else if((int) saveBtn.size() > selectedItem && selectedItem > 0) { saveBtn[selectedItem]->ResetState(); saveBtn[--selectedItem]->SetState(STATE_SELECTED, t->chan); } } if(numEntries != browser->GetEmuListCount()) { numEntries = browser->GetEmuListCount(); scrollbar->SetEntrieCount(numEntries); listChanged = true; } for(int i = 0; i < PAGESIZE; i++) { while(listChanged && browser->IsGettingList()) usleep(100); if(listChanged) { if(browser->GetPageIndex()+i < browser->GetEmuListCount()) { std::string name = browser->GetItemEmuName(browser->GetPageIndex()+i); SetButton(i, name, true); } else SetButton(i, "", false); } if(i != selectedItem && saveBtn[i]->GetState() == STATE_SELECTED) saveBtn[i]->ResetState(); else if(i == selectedItem && saveBtn[i]->GetState() == STATE_DEFAULT) saveBtn[selectedItem]->SetState(STATE_SELECTED, -1); int currChan = t->chan; if(t->wpad.ir.valid && !saveBtn[i]->IsInside(t->wpad.ir.x, t->wpad.ir.y)) t->chan = -1; saveBtn[i]->Update(t); t->chan = currChan; if(saveBtn[i]->GetState() == STATE_SELECTED) { selectedItem = i; browser->SetSelectedIndex(browser->GetPageIndex() + i); } if (saveBtn[i]->GetState() == STATE_CLICKED) state = STATE_CLICKED; ItemMarker * IMarker = browser->GetItemMarker(); int itemCount = IMarker->GetItemcount(); for(int n = 0; n < itemCount; n++) { if(browser->GetPageIndex() + i == IMarker->GetItemIndex(n)) saveBtn[i]->SetState(STATE_SELECTED); } } scrollbar->SetPageSize(PAGESIZE); scrollbar->SetRowSize(0); scrollbar->SetSelectedItem(selectedItem); scrollbar->SetSelectedIndex(browser->GetPageIndex()); listChanged = false; }
void Explorer::ProcessChoice(int choice) { FileBrowser * browser = (FileBrowser *) curBrowser; if(!browser) return; else if(browser->GetCurrentFilename() && strcmp(browser->GetCurrentFilename(),"..") != 0) { if(choice == CUT) { choice = WindowPrompt(browser->GetCurrentFilename(), tr("Cut current marked item(s)?"), tr("Yes"), tr("Cancel")); if(choice == 1) { Clipboard::Instance()->Reset(); //append selected Item browser->MarkCurrentItem(); //Get ItemMarker ItemMarker * IMarker = browser->GetItemMarker(); for(int i = 0; i < IMarker->GetItemcount(); i++) Clipboard::Instance()->AddItem(IMarker->GetItem(i)); IMarker->Reset(); Clipboard::Instance()->Operation = OP_MOVE; } } else if(choice == COPY) { choice = WindowPrompt(browser->GetCurrentFilename(), tr("Copy current marked item(s)?"), tr("Yes"), tr("Cancel")); if(choice == 1) { Clipboard::Instance()->Reset(); //append selected Item browser->MarkCurrentItem(); //Get ItemMarker ItemMarker * IMarker = browser->GetItemMarker(); for(int i = 0; i < IMarker->GetItemcount(); i++) Clipboard::Instance()->AddItem(IMarker->GetItem(i)); IMarker->Reset(); Clipboard::Instance()->Operation = OP_COPY; } } else if(choice == RENAME) { char srcpath[MAXPATHLEN]; char destdir[MAXPATHLEN]; snprintf(srcpath, sizeof(srcpath), "%s", browser->GetCurrentSelectedFilepath()); char entered[151]; snprintf(entered, sizeof(entered), "%s", browser->GetCurrentFilename()); int result = OnScreenKeyboard(entered, 150); if(result == 1) { snprintf(destdir, sizeof(destdir), "%s/%s", browser->GetCurrentPath(), entered); if(!RenameFile(srcpath, destdir)) WindowPrompt(tr("Failed renaming item"), tr("Name might already exists."), tr("OK")); //! Update browser guiBrowser->Refresh(); } } else if(choice == DELETE) { char currentpath[MAXPATHLEN]; snprintf(currentpath, sizeof(currentpath), "%s/", browser->GetCurrentSelectedFilepath()); choice = WindowPrompt(browser->GetCurrentFilename(), tr("Delete the selected item(s) and its content?"), tr("Yes"), tr("Cancel")); if(choice == 1) { if(ProgressWindow::Instance()->IsRunning()) choice = WindowPrompt(tr("Currently a process is running."), tr("Do you want to append this delete to the queue?"), tr("Yes"), tr("Cancel")); if(choice == 1) { //append selected Item browser->MarkCurrentItem(); //Get ItemMarker ItemMarker * IMarker = browser->GetItemMarker(); DeleteTask *task = new DeleteTask(IMarker); task->TaskEnd.connect(this, &Explorer::OnFinishedTask); this->explorerTasks++; Taskbar::Instance()->AddTask(task); ThreadedTaskHandler::Instance()->AddTask(task); IMarker->Reset(); } } } } else if(choice >= 0 && choice != PASTE && choice != NEWFOLDER && choice != PROPERTIES) WindowPrompt(tr("You cant use this operation on:"), tr("Directory .."), tr("OK")); if(choice == PASTE) { choice = WindowPrompt(Clipboard::Instance()->GetItemName(Clipboard::Instance()->GetItemcount()-1), tr("Paste item(s) into current directory?"), tr("Yes"), tr("Cancel")); if(choice == 1) { if(ProgressWindow::Instance()->IsRunning()) choice = WindowPrompt(tr("Currently a process is running."), tr("Do you want to append this paste to the queue?"), tr("Yes"), tr("Cancel")); if(choice == 1) { if(Clipboard::Instance()->Operation == OP_COPY) { CopyTask *task = new CopyTask(Clipboard::Instance(), browser->GetCurrentPath()); task->TaskEnd.connect(this, &Explorer::OnFinishedTask); this->explorerTasks++; Taskbar::Instance()->AddTask(task); ThreadedTaskHandler::Instance()->AddTask(task); } else if(Clipboard::Instance()->Operation == OP_MOVE) { MoveTask *task = new MoveTask(Clipboard::Instance(), browser->GetCurrentPath()); task->TaskEnd.connect(this, &Explorer::OnFinishedTask); this->explorerTasks++; Taskbar::Instance()->AddTask(task); ThreadedTaskHandler::Instance()->AddTask(task); } } } } else if(choice == ADDTOZIP) { int ret = WindowPrompt(browser->GetCurrentFilename(), tr("Would you like to add/append the selected item(s) to a zip?"), tr("Yes"), tr("No")); if(ret <= 0) return; char DestZipPath[MAXPATHLEN]; snprintf(DestZipPath, sizeof(DestZipPath), "%s", browser->GetCurrentPath()); if(DestZipPath[strlen(DestZipPath)-1] != '/') strncat(DestZipPath, "/", sizeof(DestZipPath)); strncat(DestZipPath, tr("NewZip.zip"), sizeof(DestZipPath)); if(!OnScreenKeyboard(DestZipPath, sizeof(DestZipPath))) return; std::string DestPath = DestZipPath; size_t pos = DestPath.rfind('/'); if(pos != std::string::npos) DestPath.erase(pos); CreateSubfolder(DestPath.c_str()); //append selected Item browser->MarkCurrentItem(); //Get ItemMarker ItemMarker * IMarker = browser->GetItemMarker(); ZipFile *Zip = new ZipFile(DestZipPath, CheckFile(DestZipPath) ? ZipFile::APPEND : ZipFile::CREATE); ArchiveHandle * archive = new ArchiveHandle(Zip); PackTask *task = new PackTask(IMarker, "", archive, Settings.CompressionLevel); task->TaskEnd.connect(this, &Explorer::OnFinishedTask); this->explorerTasks++; Taskbar::Instance()->AddTask(task); ThreadedTaskHandler::Instance()->AddTask(task); //! Update browser IMarker->Reset(); } else if(choice == CHECK_MD5) { int md5Choice = 1; if(ProgressWindow::Instance()->IsRunning()) md5Choice = WindowPrompt(tr("Currently a process is running."), tr("Do you want to append this process to the queue?"), tr("Yes"), tr("Cancel")); if(md5Choice == 1) { char LogPath[1024]; snprintf(LogPath, sizeof(LogPath), "%s/MD5.log", browser->GetCurrentPath()); browser->MarkCurrentItem(); MD5Task *task = new MD5Task(browser->GetItemMarker(), LogPath); task->TaskEnd.connect(this, &Explorer::OnFinishedTask); this->explorerTasks++; Taskbar::Instance()->AddTask(task); ThreadedTaskHandler::Instance()->AddTask(task); browser->GetItemMarker()->Reset(); } } else if(choice == NEWFOLDER) { char entered[151]; snprintf(entered, sizeof(entered), tr("New Folder")); int result = OnScreenKeyboard(entered, 150); if(result == 1) { char currentpath[MAXPATHLEN]; snprintf(currentpath, sizeof(currentpath), "%s/%s/", browser->GetCurrentPath(), entered); bool ret = CreateSubfolder(currentpath); if(ret == false) ShowError(tr("Unable to create folder.")); //! Update browser guiBrowser->Refresh(); } } else if(choice == PROPERTIES) { browser->MarkCurrentItem(); ItemMarker * Marker = browser->GetItemMarker(); Properties * Prompt = new Properties(Marker); Prompt->SetAlignment(ALIGN_CENTER | ALIGN_MIDDLE); Prompt->DimBackground(true); Application::Instance()->SetUpdateOnly(Prompt); Application::Instance()->Append(Prompt); Marker->Reset(); } }