/** * @brief Sets the view settings for this view. * * When they change, the view is updated accordingly. * * @param view_settings The settings to watch. */ void TilesetView::set_view_settings(ViewSettings& view_settings) { this->view_settings = &view_settings; connect(&view_settings, SIGNAL(zoom_changed(double)), this, SLOT(update_zoom())); update_zoom(); connect(this->view_settings, SIGNAL(grid_visibility_changed(bool)), this, SLOT(update_grid_visibility())); connect(this->view_settings, SIGNAL(grid_size_changed(QSize)), this, SLOT(update_grid_visibility())); connect(this->view_settings, SIGNAL(grid_style_changed(GridStyle)), this, SLOT(update_grid_visibility())); connect(this->view_settings, SIGNAL(grid_color_changed(QColor)), this, SLOT(update_grid_visibility())); update_grid_visibility(); horizontalScrollBar()->setValue(0); verticalScrollBar()->setValue(0); }
static LRESULT CALLBACK grid_proc(HWND win, UINT msg, WPARAM wp, LPARAM lp) { grid_t* grid = (grid_t*) GetWindowLongPtr(win, 0); switch(msg) { case WM_PAINT: return generic_paint(win, grid->no_redraw, (grid->style & MC_GS_DOUBLEBUFFER), grid_paint, grid); case WM_PRINTCLIENT: return generic_printclient(win, (HDC) wp, grid_paint, grid); case WM_NCPAINT: return generic_ncpaint(win, grid->theme_listview, (HRGN) wp); case WM_ERASEBKGND: return generic_erasebkgnd(win, grid->theme_listview, (HDC) wp); case MC_GM_GETTABLE: return (LRESULT) grid->table; case MC_GM_SETTABLE: return (grid_set_table(grid, (table_t*) lp) == 0 ? TRUE : FALSE); case MC_GM_GETCOLUMNCOUNT: return grid->col_count; case MC_GM_GETROWCOUNT: return grid->row_count; case MC_GM_RESIZE: return (grid_resize_table(grid, LOWORD(wp), HIWORD(wp)) == 0 ? TRUE : FALSE); case MC_GM_CLEAR: return (grid_clear(grid, wp) == 0 ? TRUE : FALSE); case MC_GM_SETCELLW: case MC_GM_SETCELLA: return (grid_set_cell(grid, LOWORD(wp), HIWORD(wp), (MC_TABLECELL*)lp, (msg == MC_GM_SETCELLW)) == 0 ? TRUE : FALSE); case MC_GM_GETCELLW: case MC_GM_GETCELLA: return (grid_get_cell(grid, LOWORD(wp), HIWORD(wp), (MC_TABLECELL*)lp, (msg == MC_GM_GETCELLW)) == 0 ? TRUE : FALSE); case MC_GM_SETGEOMETRY: return (grid_set_geometry(grid, (MC_GGEOMETRY*)lp, TRUE) == 0 ? TRUE : FALSE); case MC_GM_GETGEOMETRY: return (grid_get_geometry(grid, (MC_GGEOMETRY*)lp) == 0 ? TRUE : FALSE); case MC_GM_REDRAWCELLS: return (grid_redraw_cells(grid, LOWORD(wp), HIWORD(wp), LOWORD(lp), LOWORD(lp)) == 0 ? TRUE : FALSE); case MC_GM_SETCOLUMNWIDTH: return (grid_set_col_width(grid, wp, LOWORD(lp)) == 0 ? TRUE : FALSE); case MC_GM_GETCOLUMNWIDTH: return grid_get_col_width(grid, wp); case MC_GM_SETROWHEIGHT: return (grid_set_row_height(grid, wp, LOWORD(lp)) == 0 ? TRUE : FALSE); case MC_GM_GETROWHEIGHT: return grid_get_row_height(grid, wp); case WM_SETREDRAW: grid->no_redraw = !wp; return 0; case WM_VSCROLL: case WM_HSCROLL: grid_scroll(grid, (msg == WM_VSCROLL), LOWORD(wp), 1); return 0; case WM_MOUSEWHEEL: case WM_MOUSEHWHEEL: grid_mouse_wheel(grid, (msg == WM_MOUSEWHEEL), (int)(SHORT)HIWORD(wp)); return 0; case WM_SIZE: if(!grid->no_redraw) { int old_scroll_x = grid->scroll_x; int old_scroll_y = grid->scroll_y; grid_setup_scrollbars(grid, FALSE); if(grid->scroll_x != old_scroll_x || grid->scroll_y != old_scroll_y) InvalidateRect(win, NULL, TRUE); } return 0; case WM_GETFONT: return (LRESULT) grid->font; case WM_SETFONT: grid->font = (HFONT) wp; if((BOOL) lp && !grid->no_redraw) InvalidateRect(win, NULL, TRUE); return 0; case WM_STYLECHANGED: if(wp == GWL_STYLE) grid_style_changed(grid, (STYLESTRUCT*) lp); break; case WM_THEMECHANGED: grid_close_theme(grid); grid_open_theme(grid); if(!grid->no_redraw) RedrawWindow(win, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASE); return 0; case WM_SYSCOLORCHANGE: if(!grid->no_redraw) RedrawWindow(win, NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_ERASE); return 0; case WM_NOTIFYFORMAT: if(lp == NF_REQUERY) grid_notify_format(grid); return (grid->unicode_notifications ? NFR_UNICODE : NFR_ANSI); case CCM_SETUNICODEFORMAT: { BOOL old = grid->unicode_notifications; grid->unicode_notifications = (wp != 0); return old; } case CCM_GETUNICODEFORMAT: return grid->unicode_notifications; case CCM_SETNOTIFYWINDOW: { HWND old = grid->notify_win; grid->notify_win = (wp ? (HWND) wp : GetAncestor(win, GA_PARENT)); return (LRESULT) old; } case CCM_SETWINDOWTHEME: mcSetWindowTheme(win, (const WCHAR*) lp, NULL); return 0; case WM_NCCREATE: grid = grid_nccreate(win, (CREATESTRUCT*)lp); if(MC_ERR(grid == NULL)) return FALSE; SetWindowLongPtr(win, 0, (LONG_PTR)grid); return TRUE; case WM_CREATE: return (grid_create(grid) == 0 ? 0 : -1); case WM_DESTROY: grid_destroy(grid); return 0; case WM_NCDESTROY: if(grid) grid_ncdestroy(grid); return 0; } return DefWindowProc(win, msg, wp, lp); }