2024-02-07 20:59:24 +08:00
|
|
|
#ifndef LUNA_BASE_CONTROLS_H
|
|
|
|
#define LUNA_BASE_CONTROLS_H
|
|
|
|
#include"window.h"
|
2024-02-11 23:49:11 +08:00
|
|
|
#include <CommCtrl.h>
|
2024-03-29 18:07:15 +08:00
|
|
|
class Menu{
|
|
|
|
public:
|
|
|
|
void dispatch(WPARAM);
|
|
|
|
struct menuinfos{
|
|
|
|
UINT type;
|
|
|
|
std::function<void()> callback;
|
|
|
|
std::wstring str;
|
|
|
|
};
|
|
|
|
std::vector<menuinfos>menu_callbacks;
|
|
|
|
HMENU load();
|
|
|
|
HMENU hmenu;
|
|
|
|
void add(const std::wstring&,std::function<void()> callback);
|
|
|
|
void add_checkable(const std::wstring&,bool,std::function<void(bool)> callback);
|
|
|
|
void add_sep();
|
|
|
|
};
|
|
|
|
using maybehavemenu=std::optional<Menu>;
|
|
|
|
|
2024-02-07 20:59:24 +08:00
|
|
|
class control:public basewindow{
|
|
|
|
public:
|
|
|
|
mainwindow* parent;
|
|
|
|
control(mainwindow*);
|
|
|
|
virtual void dispatch(WPARAM);
|
2024-02-11 23:49:11 +08:00
|
|
|
virtual void dispatch_2(WPARAM wParam, LPARAM lParam);
|
2024-03-29 18:07:15 +08:00
|
|
|
maybehavemenu menu;
|
|
|
|
std::function<maybehavemenu()> on_menu=[]()->maybehavemenu{return {};};
|
2024-04-25 15:44:28 +08:00
|
|
|
|
2024-02-07 20:59:24 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
class button:public control{
|
|
|
|
public:
|
2024-03-28 11:01:44 +08:00
|
|
|
button(mainwindow* parent);
|
|
|
|
button(mainwindow*,const std::wstring&);//,int,int,int,int,DWORD=BS_PUSHBUTTON);
|
2024-02-07 20:59:24 +08:00
|
|
|
void dispatch(WPARAM);
|
|
|
|
std::function<void()> onclick=[](){};
|
|
|
|
};
|
|
|
|
class checkbox:public button{
|
|
|
|
public:
|
2024-03-28 11:01:44 +08:00
|
|
|
checkbox(mainwindow*,const std::wstring&);//,int,int,int,int);
|
2024-02-07 20:59:24 +08:00
|
|
|
bool ischecked();
|
2024-02-09 09:25:26 +08:00
|
|
|
void setcheck(bool);
|
2024-02-07 20:59:24 +08:00
|
|
|
};
|
2024-03-28 11:01:44 +08:00
|
|
|
class texteditbase:public control{
|
2024-02-07 20:59:24 +08:00
|
|
|
public:
|
2024-03-28 11:01:44 +08:00
|
|
|
texteditbase(mainwindow*);
|
2024-02-07 20:59:24 +08:00
|
|
|
void dispatch(WPARAM);
|
|
|
|
std::function<void(const std::wstring&)> ontextchange=[&](const std::wstring &text){};
|
|
|
|
void appendtext(const std::wstring&);
|
|
|
|
void scrolltoend();
|
2024-02-20 23:24:33 +08:00
|
|
|
void setreadonly(bool);
|
2024-02-07 20:59:24 +08:00
|
|
|
};
|
2024-03-28 11:01:44 +08:00
|
|
|
class multilineedit:public texteditbase{
|
|
|
|
public:
|
|
|
|
multilineedit(mainwindow*);
|
2024-04-19 20:12:03 +08:00
|
|
|
std::wstring getsel();
|
2024-03-28 11:01:44 +08:00
|
|
|
};
|
|
|
|
class lineedit:public texteditbase{
|
|
|
|
public:
|
|
|
|
lineedit(mainwindow*);
|
|
|
|
};
|
2024-02-09 19:38:12 +08:00
|
|
|
class spinbox:public control{
|
|
|
|
HWND hUpDown;
|
|
|
|
int minv,maxv;
|
|
|
|
public:
|
|
|
|
void dispatch(WPARAM);
|
2024-03-28 19:24:07 +08:00
|
|
|
spinbox(mainwindow*,int);
|
2024-02-09 19:38:12 +08:00
|
|
|
void setminmax(int,int);
|
|
|
|
std::pair<int,int>getminmax();
|
|
|
|
void setcurr(int);
|
2024-03-28 19:24:07 +08:00
|
|
|
int getcurr();
|
2024-02-09 19:38:12 +08:00
|
|
|
std::function<void(int)> onvaluechange=[&](int){};
|
2024-03-28 11:01:44 +08:00
|
|
|
void setgeo(int,int,int,int);
|
2024-02-09 19:38:12 +08:00
|
|
|
};
|
2024-02-07 20:59:24 +08:00
|
|
|
class label:public control{
|
|
|
|
public:
|
2024-03-28 11:01:44 +08:00
|
|
|
label(mainwindow*,const std::wstring&);
|
2024-02-07 20:59:24 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
class listbox:public control{
|
|
|
|
public:
|
2024-03-28 11:01:44 +08:00
|
|
|
listbox(mainwindow*);
|
2024-02-07 20:59:24 +08:00
|
|
|
void dispatch(WPARAM);
|
|
|
|
int currentidx();
|
|
|
|
std::wstring text(int);
|
|
|
|
std::function<void(int)> oncurrentchange=[](int){};
|
|
|
|
void clear();
|
2024-02-12 00:17:58 +08:00
|
|
|
int additem(const std::wstring&);
|
2024-02-07 20:59:24 +08:00
|
|
|
void deleteitem(int);
|
|
|
|
void setdata(int,LONG_PTR);
|
2024-03-27 16:36:14 +08:00
|
|
|
void setcurrent(int idx);
|
2024-02-12 00:17:58 +08:00
|
|
|
int insertitem(int,const std::wstring&);
|
2024-02-07 20:59:24 +08:00
|
|
|
LONG_PTR getdata(int);
|
|
|
|
int count();
|
|
|
|
};
|
2024-02-11 23:49:11 +08:00
|
|
|
class listview:public control{
|
|
|
|
int headernum=1;
|
2024-04-18 16:19:52 +08:00
|
|
|
bool addicon;
|
2024-02-11 23:49:11 +08:00
|
|
|
HIMAGELIST hImageList;
|
2024-04-18 16:19:52 +08:00
|
|
|
std::vector<LONG_PTR>assodata;
|
|
|
|
std::map<LONG_PTR,int>remapidx;
|
|
|
|
std::mutex lockdataidx;
|
2024-02-11 23:49:11 +08:00
|
|
|
public:
|
2024-04-18 16:19:52 +08:00
|
|
|
listview(mainwindow*,bool,bool);
|
|
|
|
int insertitem(int,const std::wstring&,HICON hicon=NULL);
|
|
|
|
void settext(int,int,const std::wstring&);
|
2024-02-11 23:49:11 +08:00
|
|
|
int insertcol(int,const std::wstring& );
|
|
|
|
void clear();
|
|
|
|
int count();
|
2024-04-18 16:19:52 +08:00
|
|
|
int currentidx();
|
|
|
|
void setcurrent(int idx);
|
|
|
|
|
2024-02-11 23:49:11 +08:00
|
|
|
std::function<void(int)> oncurrentchange=[](int){};
|
|
|
|
std::wstring text(int,int=0);
|
|
|
|
void setheader(const std::vector<std::wstring>&);
|
2024-04-18 16:19:52 +08:00
|
|
|
void deleteitem(int);
|
|
|
|
int additem(const std::wstring&,HICON hicon=NULL);
|
|
|
|
LONG_PTR getdata(int);
|
|
|
|
void setdata(int,LONG_PTR);
|
|
|
|
int querydataidx(LONG_PTR);
|
2024-02-12 00:17:58 +08:00
|
|
|
void dispatch_2(WPARAM wParam, LPARAM lParam);
|
2024-03-28 11:01:44 +08:00
|
|
|
void on_size(int,int);
|
|
|
|
};
|
|
|
|
class gridlayout:public control{
|
|
|
|
struct _c{
|
|
|
|
control* ctr;
|
|
|
|
int row,col,rowrange,colrange;
|
|
|
|
};
|
|
|
|
int margin;
|
|
|
|
int maxrow,maxcol;
|
|
|
|
std::vector<_c>savecontrol;
|
|
|
|
std::map<int,int>fixedwidth,fixedheight;
|
|
|
|
public:
|
|
|
|
void setgeo(int,int,int,int);
|
|
|
|
void setfixedwidth(int col,int width);
|
|
|
|
void setfixedheigth(int row,int height);
|
|
|
|
void addcontrol(control*,int row,int col,int rowrange=1,int colrange=1);
|
|
|
|
gridlayout(int row=0,int col=0);
|
|
|
|
void setmargin(int m=10);
|
2024-02-11 23:49:11 +08:00
|
|
|
};
|
2024-04-25 15:44:28 +08:00
|
|
|
|
|
|
|
class FontSelector{
|
|
|
|
public:
|
|
|
|
FontSelector(HWND hwnd,const std::wstring& init,std::function<void(const std::wstring&)>callback);
|
|
|
|
};
|
2024-02-07 20:59:24 +08:00
|
|
|
#endif
|