Improve marking behaviour

This commit is contained in:
d0k3 2016-07-22 04:28:11 +02:00
parent 27a77cc474
commit e8cb821b6d

View File

@ -491,7 +491,7 @@ u32 GodMode() {
PaneData* pane = panedata; PaneData* pane = panedata;
char current_path[256] = { 0x00 }; char current_path[256] = { 0x00 };
int mark_setting = -1; int mark_next = -1;
u32 last_clipboard_size = 0; u32 last_clipboard_size = 0;
u32 cursor = 0; u32 cursor = 0;
u32 scroll = 0; u32 scroll = 0;
@ -536,13 +536,14 @@ u32 GodMode() {
if (cursor >= current_dir->n_entries) // cursor beyond allowed range if (cursor >= current_dir->n_entries) // cursor beyond allowed range
cursor = current_dir->n_entries - 1; cursor = current_dir->n_entries - 1;
DirEntry* curr_entry = &(current_dir->entry[cursor]); DirEntry* curr_entry = &(current_dir->entry[cursor]);
if ((mark_next >= 0) && (curr_entry->type != T_DOTDOT)) {
curr_entry->marked = mark_next;
mark_next = -2;
}
DrawUserInterface(current_path, curr_entry, clipboard, N_PANES ? pane - panedata + 1 : 0); DrawUserInterface(current_path, curr_entry, clipboard, N_PANES ? pane - panedata + 1 : 0);
DrawDirContents(current_dir, cursor, &scroll); DrawDirContents(current_dir, cursor, &scroll);
u32 pad_state = InputWait(); u32 pad_state = InputWait();
bool switched = (pad_state & BUTTON_R1); bool switched = (pad_state & BUTTON_R1);
if (!(*current_path) || switched || !(pad_state & BUTTON_L1)) {
mark_setting = -1;
}
// basic navigation commands // basic navigation commands
if ((pad_state & BUTTON_A) && (curr_entry->type != T_FILE) && (curr_entry->type != T_DOTDOT)) { // for dirs if ((pad_state & BUTTON_A) && (curr_entry->type != T_FILE) && (curr_entry->type != T_DOTDOT)) { // for dirs
@ -681,8 +682,10 @@ u32 GodMode() {
GetDirContents(current_dir, current_path); GetDirContents(current_dir, current_path);
if (cursor >= current_dir->n_entries) cursor = 0; if (cursor >= current_dir->n_entries) cursor = 0;
} else if ((pad_state & BUTTON_DOWN) && (cursor + 1 < current_dir->n_entries)) { // cursor down } else if ((pad_state & BUTTON_DOWN) && (cursor + 1 < current_dir->n_entries)) { // cursor down
if (pad_state & BUTTON_L1) mark_next = curr_entry->marked;
cursor++; cursor++;
} else if ((pad_state & BUTTON_UP) && cursor) { // cursor up } else if ((pad_state & BUTTON_UP) && cursor) { // cursor up
if (pad_state & BUTTON_L1) mark_next = curr_entry->marked;
cursor--; cursor--;
} else if (switched && (pad_state & (BUTTON_RIGHT|BUTTON_LEFT))) { // switch pane } else if (switched && (pad_state & (BUTTON_RIGHT|BUTTON_LEFT))) { // switch pane
memcpy(pane->path, current_path, 256); // store state in current pane memcpy(pane->path, current_path, 256); // store state in current pane
@ -695,26 +698,23 @@ u32 GodMode() {
cursor = pane->cursor; cursor = pane->cursor;
scroll = pane->scroll; scroll = pane->scroll;
GetDirContents(current_dir, current_path); GetDirContents(current_dir, current_path);
} else if ((pad_state & BUTTON_RIGHT) && (mark_setting < 0)) { // cursor down (quick) } else if ((pad_state & BUTTON_RIGHT) && !(pad_state & BUTTON_L1)) { // cursor down (quick)
cursor += quick_stp; cursor += quick_stp;
} else if ((pad_state & BUTTON_LEFT) && (mark_setting < 0)) { // cursor up (quick) } else if ((pad_state & BUTTON_LEFT) && !(pad_state & BUTTON_L1)) { // cursor up (quick)
cursor = (cursor >= quick_stp) ? cursor - quick_stp : 0; cursor = (cursor >= quick_stp) ? cursor - quick_stp : 0;
} else if (pad_state & BUTTON_RIGHT) { // mark all entries } else if (pad_state & BUTTON_RIGHT) { // mark all entries
for (u32 c = 1; c < current_dir->n_entries; c++) current_dir->entry[c].marked = 1; for (u32 c = 1; c < current_dir->n_entries; c++) current_dir->entry[c].marked = 1;
mark_setting = 1; mark_next = 1;
} else if (pad_state & BUTTON_LEFT) { // unmark all entries } else if (pad_state & BUTTON_LEFT) { // unmark all entries
for (u32 c = 1; c < current_dir->n_entries; c++) current_dir->entry[c].marked = 0; for (u32 c = 1; c < current_dir->n_entries; c++) current_dir->entry[c].marked = 0;
mark_setting = 0; mark_next = 0;
} else if (switched && (pad_state & BUTTON_L1)) { // switched L -> screenshot } else if (switched && (pad_state & BUTTON_L1)) { // switched L -> screenshot
CreateScreenshot(); CreateScreenshot();
ClearScreenF(true, true, COLOR_STD_BG); ClearScreenF(true, true, COLOR_STD_BG);
} else if (*current_path && (pad_state & BUTTON_L1) && (curr_entry->type != T_DOTDOT)) { // unswitched L - mark/unmark single entry } else if (*current_path && (pad_state & BUTTON_L1) && (curr_entry->type != T_DOTDOT)) {
if (mark_setting >= 0) { // unswitched L - mark/unmark single entry
curr_entry->marked = mark_setting; if (mark_next < -1) mark_next = -1;
} else { else curr_entry->marked ^= 0x1;
curr_entry->marked ^= 0x1;
mark_setting = curr_entry->marked;
}
} else if (pad_state & BUTTON_SELECT) { // clear/restore clipboard } else if (pad_state & BUTTON_SELECT) { // clear/restore clipboard
clipboard->n_entries = (clipboard->n_entries > 0) ? 0 : last_clipboard_size; clipboard->n_entries = (clipboard->n_entries > 0) ? 0 : last_clipboard_size;
} }