Files
ppsspp/Windows/W32Util/Misc.h

124 lines
3.4 KiB
C
Raw Permalink Normal View History

2012-11-01 16:19:01 +01:00
#pragma once
#include <cstdint>
2018-03-22 22:14:19 +01:00
#include <string>
#include <vector>
#include "Common/CommonWindows.h"
2012-11-01 16:19:01 +01:00
namespace W32Util
{
void CenterWindow(HWND hwnd);
BOOL CopyTextToClipboard(HWND hwnd, const char *text);
BOOL CopyTextToClipboard(HWND hwnd, const std::wstring &wtext);
void MakeTopMost(HWND hwnd, bool topMost);
void ExitAndRestart(bool overrideArgs = false, const std::string &args = "");
void SpawnNewInstance(bool overrideArgs = false, const std::string &args = "");
void GetSelfExecuteParams(std::wstring &workingDirectory, std::wstring &moduleFilename);
2023-08-10 10:28:25 +02:00
void GetWindowRes(HWND hWnd, int *xres, int *yres);
void ShowFileInFolder(const std::string &path);
2023-08-10 10:28:25 +02:00
struct ClipboardData {
ClipboardData(const char *format, size_t sz);
ClipboardData(UINT format, size_t sz);
~ClipboardData();
void Set();
operator bool() {
return data != nullptr;
}
UINT format_;
HANDLE handle_;
void *data;
};
2013-09-29 01:02:05 +02:00
}
struct GenericListViewColumn
{
2018-03-23 04:21:46 +01:00
const wchar_t *name;
2013-09-29 01:02:05 +02:00
float size;
int flags;
2013-09-29 01:02:05 +02:00
};
struct GenericListViewDef
{
const GenericListViewColumn* columns;
int columnCount;
int* columnOrder;
bool checkbox; // the first column will always have the checkbox. specify a custom order to change its position
};
#define GLVC_CENTERED 1
typedef struct tagNMLVCUSTOMDRAW *LPNMLVCUSTOMDRAW;
2013-11-05 11:29:55 +01:00
// the most significant bit states whether the key is currently down.
// simply checking if it's != 0 is not enough, as bit0 is set if
// the key was pressed between the last call to GetAsyncKeyState
2017-02-24 20:50:27 +01:00
bool KeyDownAsync(int vkey);
2013-11-05 11:29:55 +01:00
2013-09-29 01:02:05 +02:00
class GenericListControl
{
public:
GenericListControl(HWND hwnd, const GenericListViewDef& def);
virtual ~GenericListControl();
int HandleNotify(LPARAM lParam);
2013-09-29 01:02:05 +02:00
void Update();
int GetSelectedIndex();
HWND GetHandle() { return handle; };
2013-09-29 11:19:13 +02:00
void SetSendInvalidRows(bool enabled) { sendInvalidRows = enabled; };
2013-09-29 01:02:05 +02:00
protected:
void SetIconList(int w, int h, const std::vector<HICON> &icons);
void SetCheckState(int item, bool state);
void SetItemState(int item, uint8_t state);
2013-09-29 01:02:05 +02:00
virtual bool WindowMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT& returnValue) = 0;
virtual void GetColumnText(wchar_t* dest, int row, int col) = 0;
virtual int GetRowCount() = 0;
virtual void OnDoubleClick(int itemIndex, int column) { };
2013-09-29 10:50:18 +02:00
virtual void OnRightClick(int itemIndex, int column, const POINT& point) { };
virtual void CopyRows(int start, int size);
virtual void OnToggle(int item, bool newValue) { };
virtual bool ListenRowPrePaint() { return false; }
virtual bool ListenColPrePaint() { return false; }
virtual bool OnRowPrePaint(int row, LPNMLVCUSTOMDRAW msg) { return false; }
virtual bool OnColPrePaint(int row, int col, LPNMLVCUSTOMDRAW msg) { return false; }
virtual int OnIncrementalSearch(int startRow, const wchar_t *str, bool wrap, bool partial);
2013-09-29 01:02:05 +02:00
private:
static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
void ProcessUpdate();
2013-09-29 01:02:05 +02:00
void ResizeColumns();
void ProcessCopy();
void SelectAll();
2013-09-29 01:02:05 +02:00
HWND handle;
WNDPROC oldProc;
void *images_ = nullptr;
2013-09-29 01:02:05 +02:00
const GenericListViewColumn* columns;
int columnCount;
wchar_t stringBuffer[256];
bool valid;
2013-09-29 11:19:13 +02:00
bool sendInvalidRows;
2014-01-22 18:36:40 -05:00
// Used for hacky workaround to fix a rare hang (see issue #5184)
volatile bool inResizeColumns;
volatile bool updating;
bool updateScheduled_ = false;
enum class Action {
CHECK,
IMAGE,
};
struct PendingAction {
Action action;
int item;
int state;
};
std::vector<PendingAction> pendingActions_;
2018-03-22 22:14:19 +01:00
};