diff --git a/change_log.txt b/change_log.txt index f219e865e5..808238f8bc 100644 --- a/change_log.txt +++ b/change_log.txt @@ -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 +================================================================================ ++ eeschema & pcbnew & gerbview + * Sizers have now been provided within the "Colors" dialog box. + + 2007-Oct-19 UPDATE Dick Hollenbeck ================================================================================ + pcbnew diff --git a/common/selcolor.cpp b/common/selcolor.cpp index 014cf0a0d9..6fef202de6 100644 --- a/common/selcolor.cpp +++ b/common/selcolor.cpp @@ -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 ); } -