mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 13:57:57 -07:00
28f4793785
Depending upon the desktop colour scheme, the light/dark GameList backgrounds can cause the always white text to become unreadble. Use the common luminance approximation algorithm to determine whether black text should be used instead.
121 lines
3.2 KiB
C++
121 lines
3.2 KiB
C++
// Copyright 2008 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <wx/listctrl.h>
|
|
#include <wx/tipwin.h>
|
|
|
|
#include "DolphinWX/ISOFile.h"
|
|
|
|
class wxEmuStateTip : public wxTipWindow
|
|
{
|
|
public:
|
|
wxEmuStateTip(wxWindow* parent, const wxString& text, wxEmuStateTip** windowPtr)
|
|
: wxTipWindow(parent, text, 70, (wxTipWindow**)windowPtr)
|
|
{
|
|
Bind(wxEVT_KEY_DOWN, &wxEmuStateTip::OnKeyDown, this);
|
|
}
|
|
|
|
// wxTipWindow doesn't correctly handle KeyEvents and crashes... we must overload that.
|
|
void OnKeyDown(wxKeyEvent& event)
|
|
{
|
|
event.StopPropagation();
|
|
Close();
|
|
}
|
|
};
|
|
|
|
wxDECLARE_EVENT(DOLPHIN_EVT_RELOAD_GAMELIST, wxCommandEvent);
|
|
|
|
class CGameListCtrl : public wxListCtrl
|
|
{
|
|
public:
|
|
CGameListCtrl(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size,
|
|
long style);
|
|
~CGameListCtrl();
|
|
|
|
void BrowseForDirectory();
|
|
const GameListItem* GetISO(size_t index) const;
|
|
const GameListItem* GetSelectedISO() const;
|
|
std::vector<const GameListItem*> GetAllSelectedISOs() const;
|
|
|
|
static bool IsHidingItems();
|
|
|
|
enum
|
|
{
|
|
COLUMN_DUMMY = 0,
|
|
COLUMN_PLATFORM,
|
|
COLUMN_BANNER,
|
|
COLUMN_TITLE,
|
|
COLUMN_MAKER,
|
|
COLUMN_FILENAME,
|
|
COLUMN_ID,
|
|
COLUMN_COUNTRY,
|
|
COLUMN_SIZE,
|
|
COLUMN_EMULATION_STATE,
|
|
NUMBER_OF_COLUMN
|
|
};
|
|
|
|
#ifdef __WXMSW__
|
|
bool MSWOnNotify(int id, WXLPARAM lparam, WXLPARAM* result) override;
|
|
#endif
|
|
|
|
private:
|
|
void ReloadList();
|
|
|
|
void ClearIsoFiles() { m_ISOFiles.clear(); }
|
|
void InitBitmaps();
|
|
void UpdateItemAtColumn(long _Index, int column);
|
|
void InsertItemInReportView(long _Index);
|
|
void SetColors();
|
|
void ScanForISOs();
|
|
|
|
// events
|
|
void OnReloadGameList(wxCommandEvent& event);
|
|
void OnLeftClick(wxMouseEvent& event);
|
|
void OnRightClick(wxMouseEvent& event);
|
|
void OnMouseMotion(wxMouseEvent& event);
|
|
void OnColumnClick(wxListEvent& event);
|
|
void OnColBeginDrag(wxListEvent& event);
|
|
void OnKeyPress(wxListEvent& event);
|
|
void OnSize(wxSizeEvent& event);
|
|
void OnProperties(wxCommandEvent& event);
|
|
void OnWiki(wxCommandEvent& event);
|
|
void OnNetPlayHost(wxCommandEvent& event);
|
|
void OnOpenContainingFolder(wxCommandEvent& event);
|
|
void OnOpenSaveFolder(wxCommandEvent& event);
|
|
void OnExportSave(wxCommandEvent& event);
|
|
void OnSetDefaultISO(wxCommandEvent& event);
|
|
void OnDeleteISO(wxCommandEvent& event);
|
|
void OnCompressISO(wxCommandEvent& event);
|
|
void OnMultiCompressISO(wxCommandEvent& event);
|
|
void OnMultiDecompressISO(wxCommandEvent& event);
|
|
void OnChangeDisc(wxCommandEvent& event);
|
|
void OnLocalIniModified(wxCommandEvent& event);
|
|
|
|
void CompressSelection(bool _compress);
|
|
void AutomaticColumnWidth();
|
|
void UnselectAll();
|
|
|
|
static bool CompressCB(const std::string& text, float percent, void* arg);
|
|
static bool MultiCompressCB(const std::string& text, float percent, void* arg);
|
|
static bool WiiCompressWarning();
|
|
|
|
std::vector<int> m_FlagImageIndex;
|
|
std::vector<int> m_PlatformImageIndex;
|
|
std::vector<int> m_EmuStateImageIndex;
|
|
std::vector<int> m_utility_game_banners;
|
|
std::vector<std::unique_ptr<GameListItem>> m_ISOFiles;
|
|
|
|
int last_column;
|
|
int last_sort;
|
|
wxSize lastpos;
|
|
wxEmuStateTip* toolTip;
|
|
};
|