Sizers now provided within the "Colors" dialog box

This commit is contained in:
g_harland 2007-10-21 10:01:15 +00:00
parent 3d82623c26
commit 5d2817fffd
2 changed files with 148 additions and 98 deletions

View File

@ -4,6 +4,12 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2007-Oct-21 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
================================================================================
+ eeschema & pcbnew & gerbview
* Sizers have now been provided within the "Colors" dialog box.
2007-Oct-19 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+ pcbnew

View File

@ -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);
SetFont( *g_DialogFont );
SetReturnCode(-1);
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);
OuterBoxSizer = new wxBoxSizer(wxVERTICAL);
SetSizer(OuterBoxSizer);
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() );
MainBoxSizer = new wxBoxSizer(wxHORIZONTAL);
OuterBoxSizer->Add(MainBoxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxTOP, 5);
BitmapButton = new wxBitmapButton( this, butt_ID,
ButtBitmap,
wxPoint( pos.x, pos.y - (h - line_height) / 2 ),
wxSize(w, h) );
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);
}
// 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();
}
// Provide a sizer for each button and its associated text string
RowBoxSizer = new wxBoxSizer(wxHORIZONTAL);
ColumnBoxSizer->Add(RowBoxSizer, 0, wxALIGN_LEFT, 5);
pos.y += line_height + 5;
if ( ii == 7 || ii == 15 )
{
pos.x = right + 10;
pos.y = START_Y;
}
}
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 );
pos.x = 140;
iconDC.SetBrush( Brush );
iconDC.SetBackground( *wxGREY_BRUSH );
iconDC.Clear();
iconDC.DrawRoundedRectangle( 0, 0, w, h, (double)h / 3 );
// 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();
BitmapButton = new wxBitmapButton( this, butt_ID, ButtBitmap,
wxDefaultPosition, wxSize( w, h ) );
RowBoxSizer->Add(BitmapButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxBOTTOM, 5);
SetClientSize( wxSize( right + 10, bottom + 40 ) );
// 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 );
}