aboutsummaryrefslogtreecommitdiff
path: root/win32/toneview.c
diff options
context:
space:
mode:
authorTakamichi Horikawa <takamichiho@gmail.com>2017-04-03 22:25:21 +0900
committerTakamichi Horikawa <takamichiho@gmail.com>2017-04-03 22:25:21 +0900
commit813ed6d6c17d4b3c99e3d237872041f1a0047f97 (patch)
tree8dbb1431ebc2c6e14010689bcad6fe42ede0480b /win32/toneview.c
parent21c6232b797baaad10c305f98cd96765876505c1 (diff)
add VOPM tone format
Diffstat (limited to 'win32/toneview.c')
-rw-r--r--win32/toneview.c54
1 files changed, 38 insertions, 16 deletions
diff --git a/win32/toneview.c b/win32/toneview.c
index adda8b6..ab0b3df 100644
--- a/win32/toneview.c
+++ b/win32/toneview.c
@@ -24,21 +24,25 @@ struct toneview_g toneview_g = {
static struct {
HINSTANCE hinst;
HWND toneviewer;
- HWND tonelabel[6];
+ HWND tonelabel[6], copybutton[6];
ATOM toneviewer_class;
struct fmplayer_tonedata tonedata;
struct fmplayer_tonedata tonedata_n;
+ struct fmplayer_tonedata tonedata_n_disp;
char strbuf[FMPLAYER_TONEDATA_STR_SIZE];
wchar_t strbuf_w[FMPLAYER_TONEDATA_STR_SIZE];
- enum fmplayer_tonedata_format format;
+ enum fmplayer_tonedata_format format, format_disp;
bool normalize;
HFONT font;
HFONT font_mono;
HWND checkbox;
HWND formatlist;
WNDPROC static_defproc;
+ void (*closecb)(void *ptr);
+ void *cbptr;
} g = {
- .normalize = true
+ .normalize = true,
+ .format_disp = -1
};
extern HWND g_currentdlg;
@@ -46,10 +50,14 @@ extern HWND g_currentdlg;
static void on_destroy(HWND hwnd) {
for (int i = 0; i < 6; i++) {
DestroyWindow(g.tonelabel[i]);
+ DestroyWindow(g.copybutton[i]);
}
DestroyWindow(g.checkbox);
DestroyWindow(g.formatlist);
g.toneviewer = 0;
+ if (g.closecb) {
+ g.closecb(g.cbptr);
+ }
}
enum {
@@ -58,8 +66,8 @@ enum {
NORMALIZE_W = 200,
TOP_H = 25,
TONELABEL_X = 10,
- TONELABEL_H = 100,
- TONELABEL_W = 300,
+ TONELABEL_H = 120,
+ TONELABEL_W = 390,
COPY_X = TONELABEL_X + TONELABEL_W + 5,
COPY_W = 100,
WIN_H = 10 + TOP_H + 5 + TONELABEL_H*6 + 5*5 + 10,
@@ -125,6 +133,7 @@ static LRESULT static_wndproc(
}
static bool on_create(HWND hwnd, const CREATESTRUCT *cs) {
+ g.format_disp = -1;
RECT wr;
wr.left = 0;
wr.right = WIN_W;
@@ -157,7 +166,8 @@ static bool on_create(HWND hwnd, const CREATESTRUCT *cs) {
SetWindowFont(g.formatlist, g.font, TRUE);
ComboBox_AddString(g.formatlist, L"PMD");
ComboBox_AddString(g.formatlist, L"FMP");
- ComboBox_SetCurSel(g.formatlist, 0);
+ ComboBox_AddString(g.formatlist, L"VOPM");
+ ComboBox_SetCurSel(g.formatlist, g.format);
g.checkbox = CreateWindowEx(0, L"button",
L"&Normalize",
WS_CHILD | WS_VISIBLE | BS_CHECKBOX | WS_TABSTOP,
@@ -177,12 +187,12 @@ static bool on_create(HWND hwnd, const CREATESTRUCT *cs) {
SetWindowFont(g.tonelabel[i], g.font_mono, TRUE);
wchar_t text[] = L"Copy (& )";
text[7] = L'1' + i;
- HWND copybutton = CreateWindowEx(0, L"button",
+ g.copybutton[i] = CreateWindowEx(0, L"button",
text,
WS_VISIBLE | WS_CHILD | WS_TABSTOP,
COPY_X, 40 + (TONELABEL_H+5)*i, 100, TONELABEL_H,
hwnd, (HMENU)((intptr_t)(ID_COPY0+i)), g.hinst, 0);
- SetWindowFont(copybutton, g.font, TRUE);
+ SetWindowFont(g.copybutton[i], g.font, TRUE);
}
ShowWindow(hwnd, SW_SHOW);
SetTimer(hwnd, TIMER_UPDATE, 16, 0);
@@ -201,15 +211,18 @@ static void on_timer(HWND hwnd, UINT id) {
if (g.normalize) {
tonedata_ch_normalize_tl(&g.tonedata_n.ch[c]);
}
- tonedata_ch_string(g.format, g.strbuf, &g.tonedata_n.ch[c], 0);
- for (int i = 0; i < FMPLAYER_TONEDATA_STR_SIZE; i++) {
- g.strbuf_w[i] = g.strbuf[i];
+ if (g.format != g.format_disp ||
+ !fmplayer_tonedata_channel_isequal(&g.tonedata_n.ch[c], &g.tonedata_n_disp.ch[c])) {
+ g.tonedata_n_disp.ch[c] = g.tonedata_n.ch[c];
+ tonedata_ch_string(g.format, g.strbuf, &g.tonedata_n_disp.ch[c], 0);
+ for (int i = 0; i < FMPLAYER_TONEDATA_STR_SIZE; i++) {
+ g.strbuf_w[i] = g.strbuf[i];
+ }
+ DefWindowProc(g.tonelabel[c], WM_SETTEXT, 0, (LPARAM)g.strbuf_w);
+ InvalidateRect(g.tonelabel[c], 0, FALSE);
}
- DefWindowProc(g.tonelabel[c], WM_SETTEXT, 0, (LPARAM)g.strbuf_w);
- RedrawWindow(g.tonelabel[c], 0, 0, RDW_ERASE | RDW_INVALIDATE);
}
-// RedrawWindow(hwnd, 0, 0, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN);
- InvalidateRect(hwnd, 0, FALSE);
+ g.format_disp = g.format;
}
}
@@ -231,7 +244,9 @@ static LRESULT CALLBACK wndproc(
return DefWindowProc(hwnd, msg, wParam, lParam);
}
-void show_toneview(HINSTANCE hinst, HWND parent) {
+void toneview_open(HINSTANCE hinst, HWND parent, void (*closecb)(void *ptr), void *cbptr) {
+ g.closecb = closecb;
+ g.cbptr = cbptr;
g.hinst = hinst;
if (!g.toneviewer) {
if (!g.toneviewer_class) {
@@ -259,3 +274,10 @@ void show_toneview(HINSTANCE hinst, HWND parent) {
SetForegroundWindow(g.toneviewer);
}
}
+
+void toneview_close(void) {
+ if (g.toneviewer) {
+ g.closecb = 0;
+ DestroyWindow(g.toneviewer);
+ }
+}