@@ -24,7 +24,7 @@ namespace
2424
2525std::shared_ptr<HitmanDialog> s_SelectedDialog;
2626OrderedSet<std::shared_ptr<HitmanDialog>> s_Dialogs;
27- String8CI s_OpenFilters;
27+ std::vector<std::pair<StringView8CI, StringView8>> s_OpenFilters;
2828
2929}
3030
@@ -93,11 +93,9 @@ void InitializeOpenFilters()
9393 if (!s_OpenFilters.empty ())
9494 return ;
9595
96- auto hitmanFilters = Hitman1Dialog::GetOpenFilter ();
97- ranges::copy (Hitman23Dialog::GetOpenFilter (), std::back_inserter (hitmanFilters));
98- ranges::copy (Hitman4Dialog::GetOpenFilter (), std::back_inserter (hitmanFilters));
99-
100- s_OpenFilters = MakeFileDialogFilter (hitmanFilters);
96+ s_OpenFilters = Hitman1Dialog::GetOpenFilter ();
97+ ranges::copy (Hitman23Dialog::GetOpenFilter (), std::back_inserter (s_OpenFilters));
98+ ranges::copy (Hitman4Dialog::GetOpenFilter (), std::back_inserter (s_OpenFilters));
10199}
102100
103101namespace App {
@@ -314,7 +312,7 @@ ExitStatus App::Application::run() {
314312 {
315313 InitializeOpenFilters ();
316314
317- auto [ archivePath, archiveType] = OpenFileDialog (s_OpenFilters);
315+ const auto archivePath = OpenFileDialog (s_OpenFilters);
318316
319317 auto alreadyOpened = false ;
320318 for (const auto & dialog : s_Dialogs)
@@ -327,68 +325,41 @@ ExitStatus App::Application::run() {
327325 }
328326
329327 // TODO - some error messages/warnings wouldn't hurt...
330- if (!alreadyOpened && !archivePath.empty () && archiveType != 0 )
328+ if (!alreadyOpened && !archivePath.empty ())
331329 {
332- switch (archiveType)
333- {
334- case 1 :
335- {
336-
337- const auto * originalSelectedDialog = s_SelectedDialog.get ();
338-
339- for (const auto & filter : Hitman1Dialog::GetOpenFilter () | ranges::views::values)
340- {
341- if (archivePath.path ().extension () != StringViewWCI (filter.path ().extension ()))
342- continue ;
343-
344- s_SelectedDialog = *s_Dialogs.insert (std::make_shared<Hitman1Dialog>()).first ;
345- s_SelectedDialog->Load (archivePath);
346- break ;
347- }
348-
349- if (s_SelectedDialog.get () != originalSelectedDialog)
350- break ;
330+ const auto * originalSelectedDialog = s_SelectedDialog.get ();
351331
352- for (const auto & filter : Hitman23Dialog::GetOpenFilter () | ranges::views::values)
353- {
354- if (archivePath.path ().extension () != StringViewWCI (filter.path ().extension ()))
355- continue ;
356-
357- s_SelectedDialog = *s_Dialogs.insert (std::make_shared<Hitman23Dialog>()).first ;
358- s_SelectedDialog->Load (archivePath);
359- break ;
360- }
361-
362- if (s_SelectedDialog.get () != originalSelectedDialog)
363- break ;
364-
365- for (const auto & filter : Hitman4Dialog::GetOpenFilter () | ranges::views::values)
366- {
367- if (archivePath.path ().extension () != StringViewWCI (filter.path ().extension ()))
368- continue ;
332+ for (const auto & filter : Hitman1Dialog::GetOpenFilter () | ranges::views::keys)
333+ {
334+ if (archivePath.path ().extension () != StringViewWCI (filter.path ().extension ()))
335+ continue ;
369336
370- s_SelectedDialog = *s_Dialogs.insert (std::make_shared<Hitman4Dialog >()).first ;
371- s_SelectedDialog->Load (archivePath);
372- break ;
373- }
337+ s_SelectedDialog = *s_Dialogs.insert (std::make_shared<Hitman1Dialog >()).first ;
338+ s_SelectedDialog->Load (archivePath);
339+ break ;
340+ }
374341
375- break ;
376- }
377- case 2 :
378- {
379- s_SelectedDialog = *s_Dialogs.insert (std::make_unique<Hitman1Dialog>()).first ;
380- s_SelectedDialog->Load (archivePath);
381- break ;
382- }
383- case 3 :
342+ if (s_SelectedDialog.get () == originalSelectedDialog)
343+ {
344+ for (const auto & filter : Hitman23Dialog::GetOpenFilter () | ranges::views::keys)
384345 {
385- s_SelectedDialog = *s_Dialogs.insert (std::make_unique<Hitman23Dialog>()).first ;
346+ if (archivePath.path ().extension () != StringViewWCI (filter.path ().extension ()))
347+ continue ;
348+
349+ s_SelectedDialog = *s_Dialogs.insert (std::make_shared<Hitman23Dialog>()).first ;
386350 s_SelectedDialog->Load (archivePath);
387351 break ;
388352 }
389- case 4 :
353+ }
354+
355+ if (s_SelectedDialog.get () == originalSelectedDialog)
356+ {
357+ for (const auto & filter : Hitman4Dialog::GetOpenFilter () | ranges::views::keys)
390358 {
391- s_SelectedDialog = *s_Dialogs.insert (std::make_unique<Hitman4Dialog>()).first ;
359+ if (archivePath.path ().extension () != StringViewWCI (filter.path ().extension ()))
360+ continue ;
361+
362+ s_SelectedDialog = *s_Dialogs.insert (std::make_shared<Hitman4Dialog>()).first ;
392363 s_SelectedDialog->Load (archivePath);
393364 break ;
394365 }
@@ -435,7 +406,7 @@ ExitStatus App::Application::run() {
435406 {
436407 assert (s_SelectedDialog);
437408
438- const auto [ archivePath, archiveType] = SaveFileDialog (MakeFileDialogFilter ( s_SelectedDialog->GetSaveFilter () ));
409+ const auto archivePath = SaveFileDialog (s_SelectedDialog->GetSaveFilter ());
439410
440411 s_SelectedDialog->Save (archivePath, true );
441412 }
0 commit comments