|
|
|
@ -1,6 +1,6 @@ |
|
|
|
/************************/ |
|
|
|
/* SETCOLOR.CPP */ |
|
|
|
/************************/ |
|
|
|
/****************/ |
|
|
|
/* SETCOLOR.CPP */ |
|
|
|
/****************/ |
|
|
|
/* Affichage et selection de la palette des couleurs disponibles
|
|
|
|
* dans une frame |
|
|
|
*/ |
|
|
|
@ -12,9 +12,11 @@ |
|
|
|
#include "common.h"
|
|
|
|
#include "colors.h"
|
|
|
|
|
|
|
|
#include "wx/statline.h"
|
|
|
|
|
|
|
|
|
|
|
|
enum colors_id { |
|
|
|
ID_COLOR_BLACK = 2000, // ID_COLOR_ = ID_COLOR_BLACK a ID_COLOR_BLACK + 31
|
|
|
|
ID_COLOR_BLACK = 2000, // ID_COLOR_ = ID_COLOR_BLACK a ID_COLOR_BLACK + 31
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
@ -27,23 +29,24 @@ class WinEDA_SelColorFrame: public wxDialog |
|
|
|
private: |
|
|
|
public: |
|
|
|
|
|
|
|
// Constructor and destructor
|
|
|
|
WinEDA_SelColorFrame(wxWindow *parent, |
|
|
|
const wxPoint& framepos, int OldColor); |
|
|
|
~WinEDA_SelColorFrame() {}; |
|
|
|
// Constructor and destructor
|
|
|
|
WinEDA_SelColorFrame( wxWindow *parent, |
|
|
|
const wxPoint& framepos, int OldColor ); |
|
|
|
~WinEDA_SelColorFrame() {}; |
|
|
|
|
|
|
|
private: |
|
|
|
void OnCancel(wxCommandEvent& event); |
|
|
|
void SelColor(wxCommandEvent& event); |
|
|
|
DECLARE_EVENT_TABLE() |
|
|
|
void OnCancel(wxCommandEvent& event); |
|
|
|
void SelColor(wxCommandEvent& event); |
|
|
|
DECLARE_EVENT_TABLE() |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/* Construction de la table des evenements pour FrameClassMain */ |
|
|
|
BEGIN_EVENT_TABLE(WinEDA_SelColorFrame, wxDialog) |
|
|
|
EVT_BUTTON(wxID_CANCEL, WinEDA_SelColorFrame::OnCancel) |
|
|
|
EVT_COMMAND_RANGE( ID_COLOR_BLACK, ID_COLOR_BLACK + 31, |
|
|
|
wxEVT_COMMAND_BUTTON_CLICKED, WinEDA_SelColorFrame::SelColor ) |
|
|
|
EVT_BUTTON( wxID_CANCEL, WinEDA_SelColorFrame::OnCancel ) |
|
|
|
EVT_COMMAND_RANGE( ID_COLOR_BLACK, ID_COLOR_BLACK + 31, |
|
|
|
wxEVT_COMMAND_BUTTON_CLICKED, |
|
|
|
WinEDA_SelColorFrame::SelColor ) |
|
|
|
END_EVENT_TABLE() |
|
|
|
|
|
|
|
|
|
|
|
@ -54,105 +57,147 @@ int DisplayColorFrame(wxWindow * parent, int OldColor) |
|
|
|
wxPoint framepos; |
|
|
|
int color; |
|
|
|
|
|
|
|
wxGetMousePosition(&framepos.x, &framepos.y); |
|
|
|
wxGetMousePosition(&framepos.x, &framepos.y); |
|
|
|
|
|
|
|
WinEDA_SelColorFrame * frame = new WinEDA_SelColorFrame(parent, |
|
|
|
framepos, OldColor); |
|
|
|
color = frame->ShowModal(); |
|
|
|
frame->Destroy(); |
|
|
|
if( color > NBCOLOR ) |
|
|
|
color = -1; |
|
|
|
return color; |
|
|
|
WinEDA_SelColorFrame * frame = new WinEDA_SelColorFrame( parent, |
|
|
|
framepos, OldColor ); |
|
|
|
color = frame->ShowModal(); |
|
|
|
frame->Destroy(); |
|
|
|
if( color > NBCOLOR ) |
|
|
|
color = -1; |
|
|
|
return color; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************/ |
|
|
|
WinEDA_SelColorFrame::WinEDA_SelColorFrame(wxWindow *parent, |
|
|
|
const wxPoint& framepos, int OldColor): |
|
|
|
wxDialog(parent, -1, _("Colors"), framepos, wxSize(375, 240), |
|
|
|
DIALOG_STYLE ) |
|
|
|
WinEDA_SelColorFrame::WinEDA_SelColorFrame( wxWindow *parent, |
|
|
|
const wxPoint& framepos, int OldColor ): |
|
|
|
wxDialog( parent, -1, _("Colors"), framepos, wxDefaultSize, |
|
|
|
DIALOG_STYLE ) |
|
|
|
/*******************************************************************/ |
|
|
|
{ |
|
|
|
#define START_Y 10
|
|
|
|
wxBitmapButton * BitmapButton; |
|
|
|
wxButton * Button; |
|
|
|
wxBoxSizer* OuterBoxSizer = NULL; |
|
|
|
wxBoxSizer* MainBoxSizer = NULL; |
|
|
|
wxBoxSizer* ColumnBoxSizer = NULL; |
|
|
|
wxBoxSizer* RowBoxSizer = NULL; |
|
|
|
wxBitmapButton* BitmapButton = NULL; |
|
|
|
wxStaticText* text = NULL; |
|
|
|
wxStaticLine* line = NULL; |
|
|
|
wxButton* Button = NULL; |
|
|
|
int ii, butt_ID, buttcolor; |
|
|
|
wxPoint pos; |
|
|
|
int w = 20, h = 20; |
|
|
|
wxStaticText * text; |
|
|
|
int right, bottom, line_height; |
|
|
|
bool ColorFound = false; |
|
|
|
|
|
|
|
SetFont(*g_DialogFont); |
|
|
|
|
|
|
|
SetReturnCode(-1); |
|
|
|
|
|
|
|
bottom = pos.x = 5; right = pos.y = START_Y; |
|
|
|
line_height = h; |
|
|
|
for ( ii = 0; ColorRefs[ii].m_Name != NULL ; ii++ ) |
|
|
|
{ |
|
|
|
butt_ID = ID_COLOR_BLACK + ii; |
|
|
|
wxMemoryDC iconDC; |
|
|
|
wxBitmap ButtBitmap(w,h); |
|
|
|
wxBrush Brush; |
|
|
|
iconDC.SelectObject( ButtBitmap ); |
|
|
|
buttcolor = ColorRefs[ii].m_Numcolor; |
|
|
|
iconDC.SetPen(*wxBLACK_PEN); |
|
|
|
Brush.SetColour( |
|
|
|
ColorRefs[buttcolor].m_Red, |
|
|
|
ColorRefs[buttcolor].m_Green, |
|
|
|
ColorRefs[buttcolor].m_Blue |
|
|
|
); |
|
|
|
Brush.SetStyle(wxSOLID); |
|
|
|
|
|
|
|
iconDC.SetBrush(Brush); |
|
|
|
iconDC.SetBackground(*wxGREY_BRUSH); |
|
|
|
iconDC.Clear(); |
|
|
|
iconDC.DrawRoundedRectangle(0, 0, w, h, (double)h / 3); |
|
|
|
|
|
|
|
text = new wxStaticText( this, -1, |
|
|
|
ColorRefs[ii].m_Name, |
|
|
|
wxPoint( pos.x + 2 + w, pos.y ), |
|
|
|
wxSize(-1, -1), 0 ); |
|
|
|
line_height = MAX( line_height, text->GetRect().GetHeight() ); |
|
|
|
right = MAX( right, text->GetRect().GetRight() ); |
|
|
|
bottom = MAX( bottom, text->GetRect().GetBottom() ); |
|
|
|
|
|
|
|
BitmapButton = new wxBitmapButton( this, butt_ID, |
|
|
|
ButtBitmap, |
|
|
|
wxPoint( pos.x, pos.y - (h - line_height) / 2 ), |
|
|
|
wxSize(w, h) ); |
|
|
|
|
|
|
|
// Set focus to this button if its color matches the
|
|
|
|
// color which had been selected previously (for
|
|
|
|
// whichever layer's color is currently being edited).
|
|
|
|
if( OldColor == buttcolor ) |
|
|
|
{ |
|
|
|
ColorFound = true; |
|
|
|
BitmapButton->SetFocus(); |
|
|
|
} |
|
|
|
|
|
|
|
pos.y += line_height + 5; |
|
|
|
if ( ii == 7 || ii == 15 ) |
|
|
|
{ |
|
|
|
pos.x = right + 10; |
|
|
|
pos.y = START_Y; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
pos.x = 140; |
|
|
|
|
|
|
|
// Provide a Cancel button as well, so that this dialog
|
|
|
|
// box can also be cancelled by pressing the Esc key.
|
|
|
|
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ), pos ); |
|
|
|
Button->SetForegroundColour( *wxBLUE ); |
|
|
|
// Set focus to the Cancel button if the currently selected color
|
|
|
|
// does not match any of the colors provided by this dialog box.
|
|
|
|
// (That shouldn't ever happen in practice though.)
|
|
|
|
if( !ColorFound ) |
|
|
|
Button->SetFocus(); |
|
|
|
|
|
|
|
SetClientSize( wxSize( right + 10, bottom + 40 ) ); |
|
|
|
SetFont( *g_DialogFont ); |
|
|
|
|
|
|
|
SetReturnCode( -1 ); |
|
|
|
|
|
|
|
|
|
|
|
OuterBoxSizer = new wxBoxSizer(wxVERTICAL); |
|
|
|
SetSizer(OuterBoxSizer); |
|
|
|
|
|
|
|
MainBoxSizer = new wxBoxSizer(wxHORIZONTAL); |
|
|
|
OuterBoxSizer->Add(MainBoxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxTOP, 5); |
|
|
|
|
|
|
|
for( ii = 0; ColorRefs[ii].m_Name != NULL; ii++ ) |
|
|
|
{ |
|
|
|
// Provide a separate column for every eight buttons (and
|
|
|
|
// their associated text strings)
|
|
|
|
if( ii % 8 == 0 ) |
|
|
|
{ |
|
|
|
ColumnBoxSizer = new wxBoxSizer(wxVERTICAL); |
|
|
|
MainBoxSizer->Add(ColumnBoxSizer, 0, wxALIGN_TOP|wxTOP, 5); |
|
|
|
} |
|
|
|
|
|
|
|
// Provide a sizer for each button and its associated text string
|
|
|
|
RowBoxSizer = new wxBoxSizer(wxHORIZONTAL); |
|
|
|
ColumnBoxSizer->Add(RowBoxSizer, 0, wxALIGN_LEFT, 5); |
|
|
|
|
|
|
|
butt_ID = ID_COLOR_BLACK + ii; |
|
|
|
wxMemoryDC iconDC; |
|
|
|
wxBitmap ButtBitmap( w, h ); |
|
|
|
wxBrush Brush; |
|
|
|
iconDC.SelectObject( ButtBitmap ); |
|
|
|
buttcolor = ColorRefs[ii].m_Numcolor; |
|
|
|
iconDC.SetPen( *wxBLACK_PEN ); |
|
|
|
Brush.SetColour( |
|
|
|
ColorRefs[buttcolor].m_Red, |
|
|
|
ColorRefs[buttcolor].m_Green, |
|
|
|
ColorRefs[buttcolor].m_Blue |
|
|
|
); |
|
|
|
Brush.SetStyle( wxSOLID ); |
|
|
|
|
|
|
|
iconDC.SetBrush( Brush ); |
|
|
|
iconDC.SetBackground( *wxGREY_BRUSH ); |
|
|
|
iconDC.Clear(); |
|
|
|
iconDC.DrawRoundedRectangle( 0, 0, w, h, (double)h / 3 ); |
|
|
|
|
|
|
|
BitmapButton = new wxBitmapButton( this, butt_ID, ButtBitmap, |
|
|
|
wxDefaultPosition, wxSize( w, h ) ); |
|
|
|
RowBoxSizer->Add(BitmapButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxBOTTOM, 5); |
|
|
|
|
|
|
|
// Set focus to this button if its color matches the
|
|
|
|
// color which had been selected previously (for
|
|
|
|
// whichever layer's color is currently being edited).
|
|
|
|
if( OldColor == buttcolor ) |
|
|
|
{ |
|
|
|
ColorFound = true; |
|
|
|
BitmapButton->SetFocus(); |
|
|
|
} |
|
|
|
|
|
|
|
text = new wxStaticText( this, -1, ColorRefs[ii].m_Name, |
|
|
|
wxDefaultPosition, wxDefaultSize, 0 ); |
|
|
|
RowBoxSizer->Add(text, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxBOTTOM, 5); |
|
|
|
} |
|
|
|
|
|
|
|
// Provide a Cancel button as well, so that this dialog
|
|
|
|
// box can also be cancelled by pressing the Esc key
|
|
|
|
// (and also provide a horizontal static line to separate
|
|
|
|
// that button from all of the other buttons).
|
|
|
|
|
|
|
|
line = new wxStaticLine( this, -1, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); |
|
|
|
OuterBoxSizer->Add(line, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5); |
|
|
|
|
|
|
|
#ifdef 0
|
|
|
|
BottomBoxSizer = new wxBoxSizer(wxHORIZONTAL); |
|
|
|
OuterBoxSizer->Add(BottomBoxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); |
|
|
|
|
|
|
|
Button = new wxButton( this, wxID_OK, _( "OK" ), wxDefaultPosition, wxDefaultSize, 0 ); |
|
|
|
Button->SetForegroundColour( *wxRED ); |
|
|
|
BottomBoxSizer->Add(Button, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); |
|
|
|
|
|
|
|
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ), wxDefaultPosition, wxDefaultSize, 0 ); |
|
|
|
Button->SetForegroundColour( *wxBLUE ); |
|
|
|
BottomBoxSizer->Add(Button, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); |
|
|
|
|
|
|
|
// Dialog boxes usually contain both an "OK" button and a "Cancel" button (and sometimes
|
|
|
|
// also contain an "Apply" button). The previous code implements an additional sizer
|
|
|
|
// (to contain such buttons), then installs that sizer into the outermost sizer, then
|
|
|
|
// implements "OK" and "Cancel" buttons, and then installs those buttons into that sizer.
|
|
|
|
//
|
|
|
|
// However, as this particular dialog does not contain an "OK" button (nor an "Apply"
|
|
|
|
// button), it is not necessary to provide an additional sizer to contain (just) a
|
|
|
|
// "Cancel" button; that button can be installed directly into the outermost sizer
|
|
|
|
// instead. (Note that a value of 10 has been specified for the margin surrounding that
|
|
|
|
// button; that provides the same outcome as specifying the customary value of 5 for both
|
|
|
|
// that button, and the BottomBoxSizer that it would otherwise be installed within.)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ), wxDefaultPosition, wxDefaultSize, 0 ); |
|
|
|
Button->SetForegroundColour( *wxBLUE ); |
|
|
|
OuterBoxSizer->Add(Button, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10); |
|
|
|
|
|
|
|
// Set focus to the Cancel button if the currently selected color
|
|
|
|
// does not match any of the colors provided by this dialog box.
|
|
|
|
// (That shouldn't ever happen in practice though.)
|
|
|
|
if( !ColorFound ) |
|
|
|
Button->SetFocus(); |
|
|
|
|
|
|
|
// Resize the dialog
|
|
|
|
if (GetSizer()) |
|
|
|
{ |
|
|
|
GetSizer()->SetSizeHints(this); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -162,10 +207,10 @@ void WinEDA_SelColorFrame::OnCancel(wxCommandEvent& WXUNUSED(event)) |
|
|
|
/* Called by the Cancel button
|
|
|
|
*/ |
|
|
|
{ |
|
|
|
// Setting the return value to -1 indicates that the
|
|
|
|
// dialog box has been cancelled (and thus that the
|
|
|
|
// previously selected color is to be retained).
|
|
|
|
EndModal(-1); |
|
|
|
// Setting the return value to -1 indicates that the
|
|
|
|
// dialog box has been cancelled (and thus that the
|
|
|
|
// previously selected color is to be retained).
|
|
|
|
EndModal(-1); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -175,6 +220,5 @@ void WinEDA_SelColorFrame::SelColor(wxCommandEvent& event) |
|
|
|
{ |
|
|
|
int id = event.GetId(); |
|
|
|
|
|
|
|
EndModal(id - ID_COLOR_BLACK); |
|
|
|
EndModal( id - ID_COLOR_BLACK ); |
|
|
|
} |
|
|
|
|