]> git.saurik.com Git - wxWidgets.git/blame - src/msw/colordlg.cpp
wxWindow::FindFocus() doesn't exist in wxGTK - #ifdef'd out
[wxWidgets.git] / src / msw / colordlg.cpp
CommitLineData
2bda0e17
KB
1/////////////////////////////////////////////////////////////////////////////
2// Name: colordlg.cpp
3// Purpose: wxColourDialog class
4// Author: Julian Smart
5// Modified by:
6// Created: 01/02/97
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart and Markus Holzem
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "colordlg.h"
14#endif
15
16// For compilers that support precompilation, includes "wx.h".
17#include "wx/wxprec.h"
18
19#ifdef __BORLANDC__
20#pragma hdrstop
21#endif
22
23#ifndef WX_PRECOMP
24#include <stdio.h>
25#include "wx/defs.h"
26#include "wx/pen.h"
27#include "wx/brush.h"
28#include "wx/gdicmn.h"
29#include "wx/utils.h"
30#include "wx/frame.h"
31#include "wx/dialog.h"
32#include "wx/msgdlg.h"
33#endif
34
35#include <windows.h>
36
37#ifndef __WIN32__
38#include <commdlg.h>
39#endif
40
41#include "wx/msw/private.h"
42#include "wx/colordlg.h"
43#include "wx/cmndata.h"
44
45#include <math.h>
46#include <stdlib.h>
47#include <string.h>
48
49#define wxDIALOG_DEFAULT_X 300
50#define wxDIALOG_DEFAULT_Y 300
51
52#if !USE_SHARED_LIBRARY
53IMPLEMENT_DYNAMIC_CLASS(wxColourDialog, wxDialog)
54#endif
55
56/*
57 * wxColourDialog
58 */
59
60wxColourDialog::wxColourDialog(void)
61{
62 dialogParent = NULL;
63}
64
65wxColourDialog::wxColourDialog(wxWindow *parent, wxColourData *data)
66{
67 Create(parent, data);
68}
69
70bool wxColourDialog::Create(wxWindow *parent, wxColourData *data)
71{
72 dialogParent = parent;
73
74 if (data)
75 colourData = *data;
76 return TRUE;
77}
78
79int wxColourDialog::ShowModal(void)
80{
81 CHOOSECOLOR chooseColorStruct;
82 COLORREF custColours[16];
83 memset(&chooseColorStruct, 0, sizeof(CHOOSECOLOR));
84
85 int i;
86 for (i = 0; i < 16; i++)
87 custColours[i] = RGB(colourData.custColours[i].Red(), colourData.custColours[i].Green(), colourData.custColours[i].Blue());
88
89 chooseColorStruct.lStructSize = sizeof(CHOOSECOLOR);
90 chooseColorStruct.hwndOwner = (HWND) (dialogParent ? (HWND) dialogParent->GetHWND() : NULL);
91 chooseColorStruct.rgbResult = RGB(colourData.dataColour.Red(), colourData.dataColour.Green(), colourData.dataColour.Blue());
92 chooseColorStruct.lpCustColors = custColours;
93
94 chooseColorStruct.Flags = CC_RGBINIT;
95
96 if (!colourData.GetChooseFull())
97 chooseColorStruct.Flags |= CC_PREVENTFULLOPEN;
98
99 // Do the modal dialog
100 bool success = (ChooseColor(&(chooseColorStruct)) != 0);
101
102 // Try to highlight the correct window (the parent)
103 HWND hWndParent = 0;
104 if (GetParent())
105 {
106 hWndParent = (HWND) GetParent()->GetHWND();
107 if (hWndParent)
108 ::BringWindowToTop(hWndParent);
109 }
110
111
112 // Restore values
113 for (i = 0; i < 16; i++)
114 {
115 colourData.custColours[i].Set(GetRValue(custColours[i]), GetGValue(custColours[i]),
116 GetBValue(custColours[i]));
117 }
118
119 colourData.dataColour.Set(GetRValue(chooseColorStruct.rgbResult), GetGValue(chooseColorStruct.rgbResult),
120 GetBValue(chooseColorStruct.rgbResult));
121
122 return success ? wxID_OK : wxID_CANCEL;
123}
124