Commit 5d2817ff authored by g_harland's avatar g_harland

Sizers now provided within the "Colors" dialog box

parent 3d82623c
...@@ -4,6 +4,12 @@ Started 2007-June-11 ...@@ -4,6 +4,12 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with Please add newer entries at the top, list the date and your name with
email address. 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> 2007-Oct-19 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================ ================================================================================
+ pcbnew + pcbnew
......
/************************/ /****************/
/* SETCOLOR.CPP */ /* SETCOLOR.CPP */
/************************/ /****************/
/* Affichage et selection de la palette des couleurs disponibles /* Affichage et selection de la palette des couleurs disponibles
* dans une frame * dans une frame
*/ */
...@@ -12,9 +12,11 @@ ...@@ -12,9 +12,11 @@
#include "common.h" #include "common.h"
#include "colors.h" #include "colors.h"
#include "wx/statline.h"
enum colors_id { 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 ...@@ -27,23 +29,24 @@ class WinEDA_SelColorFrame: public wxDialog
private: private:
public: public:
// Constructor and destructor // Constructor and destructor
WinEDA_SelColorFrame(wxWindow *parent, WinEDA_SelColorFrame( wxWindow *parent,
const wxPoint& framepos, int OldColor); const wxPoint& framepos, int OldColor );
~WinEDA_SelColorFrame() {}; ~WinEDA_SelColorFrame() {};
private: private:
void OnCancel(wxCommandEvent& event); void OnCancel(wxCommandEvent& event);
void SelColor(wxCommandEvent& event); void SelColor(wxCommandEvent& event);
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
/* Construction de la table des evenements pour FrameClassMain */ /* Construction de la table des evenements pour FrameClassMain */
BEGIN_EVENT_TABLE(WinEDA_SelColorFrame, wxDialog) BEGIN_EVENT_TABLE(WinEDA_SelColorFrame, wxDialog)
EVT_BUTTON(wxID_CANCEL, WinEDA_SelColorFrame::OnCancel) EVT_BUTTON( wxID_CANCEL, WinEDA_SelColorFrame::OnCancel )
EVT_COMMAND_RANGE( ID_COLOR_BLACK, ID_COLOR_BLACK + 31, EVT_COMMAND_RANGE( ID_COLOR_BLACK, ID_COLOR_BLACK + 31,
wxEVT_COMMAND_BUTTON_CLICKED, WinEDA_SelColorFrame::SelColor ) wxEVT_COMMAND_BUTTON_CLICKED,
WinEDA_SelColorFrame::SelColor )
END_EVENT_TABLE() END_EVENT_TABLE()
...@@ -54,105 +57,147 @@ int DisplayColorFrame(wxWindow * parent, int OldColor) ...@@ -54,105 +57,147 @@ int DisplayColorFrame(wxWindow * parent, int OldColor)
wxPoint framepos; wxPoint framepos;
int color; int color;
wxGetMousePosition(&framepos.x, &framepos.y); wxGetMousePosition(&framepos.x, &framepos.y);
WinEDA_SelColorFrame * frame = new WinEDA_SelColorFrame(parent, WinEDA_SelColorFrame * frame = new WinEDA_SelColorFrame( parent,
framepos, OldColor); framepos, OldColor );
color = frame->ShowModal(); color = frame->ShowModal();
frame->Destroy(); frame->Destroy();
if( color > NBCOLOR ) if( color > NBCOLOR )
color = -1; color = -1;
return color; return color;
} }
/*******************************************************************/ /*******************************************************************/
WinEDA_SelColorFrame::WinEDA_SelColorFrame(wxWindow *parent, WinEDA_SelColorFrame::WinEDA_SelColorFrame( wxWindow *parent,
const wxPoint& framepos, int OldColor): const wxPoint& framepos, int OldColor ):
wxDialog(parent, -1, _("Colors"), framepos, wxSize(375, 240), wxDialog( parent, -1, _("Colors"), framepos, wxDefaultSize,
DIALOG_STYLE ) DIALOG_STYLE )
/*******************************************************************/ /*******************************************************************/
{ {
#define START_Y 10 wxBoxSizer* OuterBoxSizer = NULL;
wxBitmapButton * BitmapButton; wxBoxSizer* MainBoxSizer = NULL;
wxButton * Button; wxBoxSizer* ColumnBoxSizer = NULL;
wxBoxSizer* RowBoxSizer = NULL;
wxBitmapButton* BitmapButton = NULL;
wxStaticText* text = NULL;
wxStaticLine* line = NULL;
wxButton* Button = NULL;
int ii, butt_ID, buttcolor; int ii, butt_ID, buttcolor;
wxPoint pos;
int w = 20, h = 20; int w = 20, h = 20;
wxStaticText * text;
int right, bottom, line_height;
bool ColorFound = false; 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; OuterBoxSizer = new wxBoxSizer(wxVERTICAL);
for ( ii = 0; ColorRefs[ii].m_Name != NULL ; ii++ ) SetSizer(OuterBoxSizer);
{
butt_ID = ID_COLOR_BLACK + ii; MainBoxSizer = new wxBoxSizer(wxHORIZONTAL);
wxMemoryDC iconDC; OuterBoxSizer->Add(MainBoxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxTOP, 5);
wxBitmap ButtBitmap(w,h);
wxBrush Brush; for( ii = 0; ColorRefs[ii].m_Name != NULL; ii++ )
iconDC.SelectObject( ButtBitmap ); {
buttcolor = ColorRefs[ii].m_Numcolor; // Provide a separate column for every eight buttons (and
iconDC.SetPen(*wxBLACK_PEN); // their associated text strings)
Brush.SetColour( if( ii % 8 == 0 )
ColorRefs[buttcolor].m_Red, {
ColorRefs[buttcolor].m_Green, ColumnBoxSizer = new wxBoxSizer(wxVERTICAL);
ColorRefs[buttcolor].m_Blue MainBoxSizer->Add(ColumnBoxSizer, 0, wxALIGN_TOP|wxTOP, 5);
); }
Brush.SetStyle(wxSOLID);
// Provide a sizer for each button and its associated text string
iconDC.SetBrush(Brush); RowBoxSizer = new wxBoxSizer(wxHORIZONTAL);
iconDC.SetBackground(*wxGREY_BRUSH); ColumnBoxSizer->Add(RowBoxSizer, 0, wxALIGN_LEFT, 5);
iconDC.Clear();
iconDC.DrawRoundedRectangle(0, 0, w, h, (double)h / 3); butt_ID = ID_COLOR_BLACK + ii;
wxMemoryDC iconDC;
text = new wxStaticText( this, -1, wxBitmap ButtBitmap( w, h );
ColorRefs[ii].m_Name, wxBrush Brush;
wxPoint( pos.x + 2 + w, pos.y ), iconDC.SelectObject( ButtBitmap );
wxSize(-1, -1), 0 ); buttcolor = ColorRefs[ii].m_Numcolor;
line_height = MAX( line_height, text->GetRect().GetHeight() ); iconDC.SetPen( *wxBLACK_PEN );
right = MAX( right, text->GetRect().GetRight() ); Brush.SetColour(
bottom = MAX( bottom, text->GetRect().GetBottom() ); ColorRefs[buttcolor].m_Red,
ColorRefs[buttcolor].m_Green,
BitmapButton = new wxBitmapButton( this, butt_ID, ColorRefs[buttcolor].m_Blue
ButtBitmap, );
wxPoint( pos.x, pos.y - (h - line_height) / 2 ), Brush.SetStyle( wxSOLID );
wxSize(w, h) );
iconDC.SetBrush( Brush );
// Set focus to this button if its color matches the iconDC.SetBackground( *wxGREY_BRUSH );
// color which had been selected previously (for iconDC.Clear();
// whichever layer's color is currently being edited). iconDC.DrawRoundedRectangle( 0, 0, w, h, (double)h / 3 );
if( OldColor == buttcolor )
{ BitmapButton = new wxBitmapButton( this, butt_ID, ButtBitmap,
ColorFound = true; wxDefaultPosition, wxSize( w, h ) );
BitmapButton->SetFocus(); RowBoxSizer->Add(BitmapButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxBOTTOM, 5);
}
// Set focus to this button if its color matches the
pos.y += line_height + 5; // color which had been selected previously (for
if ( ii == 7 || ii == 15 ) // whichever layer's color is currently being edited).
{ if( OldColor == buttcolor )
pos.x = right + 10; {
pos.y = START_Y; ColorFound = true;
} BitmapButton->SetFocus();
} }
pos.x = 140; text = new wxStaticText( this, -1, ColorRefs[ii].m_Name,
wxDefaultPosition, wxDefaultSize, 0 );
// Provide a Cancel button as well, so that this dialog RowBoxSizer->Add(text, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxBOTTOM, 5);
// box can also be cancelled by pressing the Esc key. }
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ), pos );
Button->SetForegroundColour( *wxBLUE ); // Provide a Cancel button as well, so that this dialog
// Set focus to the Cancel button if the currently selected color // box can also be cancelled by pressing the Esc key
// does not match any of the colors provided by this dialog box. // (and also provide a horizontal static line to separate
// (That shouldn't ever happen in practice though.) // that button from all of the other buttons).
if( !ColorFound )
Button->SetFocus(); line = new wxStaticLine( this, -1, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
OuterBoxSizer->Add(line, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5);
SetClientSize( wxSize( right + 10, bottom + 40 ) );
#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)) ...@@ -162,10 +207,10 @@ void WinEDA_SelColorFrame::OnCancel(wxCommandEvent& WXUNUSED(event))
/* Called by the Cancel button /* Called by the Cancel button
*/ */
{ {
// Setting the return value to -1 indicates that the // Setting the return value to -1 indicates that the
// dialog box has been cancelled (and thus that the // dialog box has been cancelled (and thus that the
// previously selected color is to be retained). // previously selected color is to be retained).
EndModal(-1); EndModal(-1);
} }
...@@ -175,6 +220,5 @@ void WinEDA_SelColorFrame::SelColor(wxCommandEvent& event) ...@@ -175,6 +220,5 @@ void WinEDA_SelColorFrame::SelColor(wxCommandEvent& event)
{ {
int id = event.GetId(); int id = event.GetId();
EndModal(id - ID_COLOR_BLACK); EndModal( id - ID_COLOR_BLACK );
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment