|
|
@ -34,146 +34,84 @@ |
|
|
|
|
|
|
|
|
|
|
|
enum colors_id { |
|
|
|
ID_COLOR_BLACK = 2000 // ID_COLOR_ = ID_COLOR_BLACK a ID_COLOR_BLACK + 31
|
|
|
|
ID_COLOR_BLACK = 2000 // colors_id = ID_COLOR_BLACK a ID_COLOR_BLACK + NBCOLORS-1
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
class WinEDA_SelColorFrame : public wxDialog |
|
|
|
class CHOOSE_COLOR_DLG : public wxDialog |
|
|
|
{ |
|
|
|
public: |
|
|
|
WinEDA_SelColorFrame( wxWindow* parent, |
|
|
|
const wxPoint& framepos, int OldColor ); |
|
|
|
~WinEDA_SelColorFrame() {}; |
|
|
|
CHOOSE_COLOR_DLG( wxWindow* aParent, EDA_COLOR_T aOldColor ); |
|
|
|
~CHOOSE_COLOR_DLG() {}; |
|
|
|
|
|
|
|
EDA_COLOR_T GetSelectedColor() { return m_color; } |
|
|
|
|
|
|
|
private: |
|
|
|
void Init_Dialog( int aOldColor ); |
|
|
|
void OnCancel( wxCommandEvent& event ); |
|
|
|
void SelColor( wxCommandEvent& event ); |
|
|
|
void init_Dialog(); |
|
|
|
void selColor( wxCommandEvent& event ); |
|
|
|
|
|
|
|
EDA_COLOR_T m_color; |
|
|
|
|
|
|
|
DECLARE_EVENT_TABLE() |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_EVENT_TABLE( WinEDA_SelColorFrame, wxDialog ) |
|
|
|
EVT_BUTTON( wxID_CANCEL, WinEDA_SelColorFrame::OnCancel ) |
|
|
|
EVT_COMMAND_RANGE( ID_COLOR_BLACK, ID_COLOR_BLACK + 31, |
|
|
|
BEGIN_EVENT_TABLE( CHOOSE_COLOR_DLG, wxDialog ) |
|
|
|
EVT_COMMAND_RANGE( ID_COLOR_BLACK, ID_COLOR_BLACK + NBCOLORS, |
|
|
|
wxEVT_COMMAND_BUTTON_CLICKED, |
|
|
|
WinEDA_SelColorFrame::SelColor ) |
|
|
|
CHOOSE_COLOR_DLG::selColor ) |
|
|
|
END_EVENT_TABLE() |
|
|
|
|
|
|
|
|
|
|
|
EDA_COLOR_T DisplayColorFrame( wxWindow* parent, int OldColor ) |
|
|
|
EDA_COLOR_T DisplayColorFrame( wxWindow* aParent, EDA_COLOR_T aOldColor ) |
|
|
|
{ |
|
|
|
wxPoint framepos; |
|
|
|
EDA_COLOR_T color; |
|
|
|
|
|
|
|
wxGetMousePosition( &framepos.x, &framepos.y ); |
|
|
|
|
|
|
|
WinEDA_SelColorFrame* frame = new WinEDA_SelColorFrame( parent, |
|
|
|
framepos, OldColor ); |
|
|
|
color = static_cast<EDA_COLOR_T>( frame->ShowModal() ); |
|
|
|
frame->Destroy(); |
|
|
|
if( color > NBCOLORS ) |
|
|
|
color = UNSPECIFIED_COLOR; |
|
|
|
return color; |
|
|
|
CHOOSE_COLOR_DLG dlg( aParent, aOldColor ); |
|
|
|
|
|
|
|
if( dlg.ShowModal() == wxID_OK ) |
|
|
|
{ |
|
|
|
return dlg.GetSelectedColor(); |
|
|
|
} |
|
|
|
|
|
|
|
return UNSPECIFIED_COLOR; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
WinEDA_SelColorFrame::WinEDA_SelColorFrame( wxWindow* parent, |
|
|
|
const wxPoint& framepos, |
|
|
|
int OldColor ) : |
|
|
|
wxDialog( parent, -1, _( "Colors" ), framepos, wxDefaultSize, |
|
|
|
CHOOSE_COLOR_DLG::CHOOSE_COLOR_DLG( wxWindow* aParent, EDA_COLOR_T aOldColor ) : |
|
|
|
wxDialog( aParent, -1, _( "Colors" ), wxDefaultPosition, wxDefaultSize, |
|
|
|
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ) |
|
|
|
{ |
|
|
|
m_color = aOldColor; |
|
|
|
|
|
|
|
Init_Dialog( OldColor ); |
|
|
|
init_Dialog(); |
|
|
|
// Resize the dialog
|
|
|
|
GetSizer()->SetSizeHints( this ); |
|
|
|
|
|
|
|
// Ensure the whole frame is visible, whenever the asked position.
|
|
|
|
// Moreover with a work station having dual monitors, the asked position can be relative to a monitor
|
|
|
|
// and this frame can be displayed on the other monitor, with an "out of screen" position.
|
|
|
|
// Give also a small margin.
|
|
|
|
int margin = 10; |
|
|
|
wxPoint windowPosition = GetPosition(); |
|
|
|
if( framepos != wxDefaultPosition ) |
|
|
|
{ |
|
|
|
if( windowPosition.x < margin ) |
|
|
|
windowPosition.x = margin; |
|
|
|
// Under MACOS, a vertical margin >= 20 is needed by the system menubar
|
|
|
|
int v_margin = std::max(20, margin); |
|
|
|
if( windowPosition.y < v_margin ) |
|
|
|
windowPosition.y = v_margin; |
|
|
|
if( windowPosition != framepos ) |
|
|
|
SetPosition(windowPosition); |
|
|
|
} |
|
|
|
wxPoint endCornerPosition = GetPosition(); |
|
|
|
endCornerPosition.x += GetSize().x + margin; |
|
|
|
endCornerPosition.y += GetSize().y + margin; |
|
|
|
|
|
|
|
windowPosition = GetPosition(); |
|
|
|
wxRect freeScreenArea( wxGetClientDisplayRect( ) ); |
|
|
|
|
|
|
|
if( freeScreenArea.GetRight() < endCornerPosition.x ) |
|
|
|
{ |
|
|
|
windowPosition.x += freeScreenArea.GetRight() - endCornerPosition.x; |
|
|
|
|
|
|
|
if( windowPosition.x < freeScreenArea.x ) |
|
|
|
windowPosition.x = freeScreenArea.x; |
|
|
|
|
|
|
|
// Sligly modify the vertical position to avoid the mouse to be
|
|
|
|
// exactly on the upper side of the window
|
|
|
|
windowPosition.y +=5; |
|
|
|
endCornerPosition.y += 5; |
|
|
|
} |
|
|
|
|
|
|
|
if( freeScreenArea.GetBottom() < endCornerPosition.y ) |
|
|
|
{ |
|
|
|
windowPosition.y += freeScreenArea.GetBottom() - endCornerPosition.y; |
|
|
|
|
|
|
|
if( windowPosition.y < freeScreenArea.y ) |
|
|
|
windowPosition.y = freeScreenArea.y; |
|
|
|
} |
|
|
|
|
|
|
|
SetPosition(windowPosition); |
|
|
|
} |
|
|
|
|
|
|
|
void WinEDA_SelColorFrame::Init_Dialog( int aOldColor ) |
|
|
|
void CHOOSE_COLOR_DLG::init_Dialog() |
|
|
|
{ |
|
|
|
wxBoxSizer* OuterBoxSizer = NULL; |
|
|
|
wxBoxSizer* MainBoxSizer = NULL; |
|
|
|
wxFlexGridSizer* FlexColumnBoxSizer = NULL; |
|
|
|
wxBitmapButton* BitmapButton = NULL; |
|
|
|
wxStaticText* Label = NULL; |
|
|
|
wxStaticLine* Line = NULL; |
|
|
|
wxStdDialogButtonSizer* StdDialogButtonSizer = NULL; |
|
|
|
wxButton* Button = NULL; |
|
|
|
|
|
|
|
int ii, butt_ID; |
|
|
|
int w = 20, h = 20; |
|
|
|
bool ColorFound = false; |
|
|
|
wxBitmapButton* focusedButton = NULL; |
|
|
|
const int w = 20, h = 20; |
|
|
|
|
|
|
|
SetReturnCode( -1 ); |
|
|
|
|
|
|
|
OuterBoxSizer = new wxBoxSizer( wxVERTICAL ); |
|
|
|
wxBoxSizer* OuterBoxSizer = new wxBoxSizer( wxVERTICAL ); |
|
|
|
SetSizer( OuterBoxSizer ); |
|
|
|
|
|
|
|
MainBoxSizer = new wxBoxSizer( wxHORIZONTAL ); |
|
|
|
wxBoxSizer*MainBoxSizer = new wxBoxSizer( wxHORIZONTAL ); |
|
|
|
OuterBoxSizer->Add( MainBoxSizer, 1, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 ); |
|
|
|
|
|
|
|
for( ii = 0; ii < NBCOLORS; ++ii ) |
|
|
|
for( int ii = 0; ii < NBCOLORS; ++ii ) |
|
|
|
{ |
|
|
|
// Provide a separate column for every six buttons (and their
|
|
|
|
// associated text strings), so provide a FlexGrid Sizer with
|
|
|
|
// eight rows and two columns.
|
|
|
|
// six rows and two columns.
|
|
|
|
if( ii % 6 == 0 ) |
|
|
|
{ |
|
|
|
FlexColumnBoxSizer = new wxFlexGridSizer( 6, 2, 0, 0 ); |
|
|
|
|
|
|
|
// Specify that all of the rows can be expanded.
|
|
|
|
for( int ii = 0; ii < 6; ii++ ) |
|
|
|
for( int kk = 0; kk < 6; kk++ ) |
|
|
|
{ |
|
|
|
FlexColumnBoxSizer->AddGrowableRow( ii ); |
|
|
|
FlexColumnBoxSizer->AddGrowableRow( kk ); |
|
|
|
} |
|
|
|
|
|
|
|
// Specify that the second column can also be expanded.
|
|
|
@ -182,7 +120,7 @@ void WinEDA_SelColorFrame::Init_Dialog( int aOldColor ) |
|
|
|
MainBoxSizer->Add( FlexColumnBoxSizer, 1, wxGROW | wxTOP, 5 ); |
|
|
|
} |
|
|
|
|
|
|
|
butt_ID = ID_COLOR_BLACK + ii; |
|
|
|
int butt_ID = ID_COLOR_BLACK + ii; |
|
|
|
wxMemoryDC iconDC; |
|
|
|
wxBitmap ButtBitmap( w, h ); |
|
|
|
wxBrush brush; |
|
|
@ -200,24 +138,21 @@ void WinEDA_SelColorFrame::Init_Dialog( int aOldColor ) |
|
|
|
iconDC.Clear(); |
|
|
|
iconDC.DrawRoundedRectangle( 0, 0, w, h, (double) h / 3 ); |
|
|
|
|
|
|
|
BitmapButton = new wxBitmapButton( this, butt_ID, ButtBitmap, |
|
|
|
wxBitmapButton* bitmapButton = new wxBitmapButton( this, butt_ID, ButtBitmap, |
|
|
|
wxDefaultPosition, wxSize( w+8, h+6 ) ); |
|
|
|
FlexColumnBoxSizer->Add( BitmapButton, 0, |
|
|
|
FlexColumnBoxSizer->Add( bitmapButton, 0, |
|
|
|
wxALIGN_LEFT | 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( aOldColor == buttcolor ) |
|
|
|
{ |
|
|
|
ColorFound = true; |
|
|
|
BitmapButton->SetFocus(); |
|
|
|
} |
|
|
|
if( m_color == buttcolor ) |
|
|
|
focusedButton = bitmapButton; |
|
|
|
|
|
|
|
Label = new wxStaticText( this, -1, ColorGetName( buttcolor ), |
|
|
|
wxDefaultPosition, wxDefaultSize, 0 ); |
|
|
|
FlexColumnBoxSizer->Add( Label, 1, |
|
|
|
wxStaticText* label = new wxStaticText( this, -1, ColorGetName( buttcolor ), |
|
|
|
wxDefaultPosition, wxDefaultSize, 0 ); |
|
|
|
FlexColumnBoxSizer->Add( label, 1, |
|
|
|
wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | |
|
|
|
wxLEFT | wxRIGHT | wxBOTTOM, 5 ); |
|
|
|
} |
|
|
@ -227,38 +162,35 @@ void WinEDA_SelColorFrame::Init_Dialog( int aOldColor ) |
|
|
|
// (and also provide a horizontal static line to separate
|
|
|
|
// that button from all of the other buttons).
|
|
|
|
|
|
|
|
Line = new wxStaticLine( this, -1, wxDefaultPosition, |
|
|
|
wxStaticLine* sline = new wxStaticLine( this, -1, wxDefaultPosition, |
|
|
|
wxDefaultSize, wxLI_HORIZONTAL ); |
|
|
|
OuterBoxSizer->Add( Line, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 ); |
|
|
|
OuterBoxSizer->Add( sline, 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 5 ); |
|
|
|
|
|
|
|
StdDialogButtonSizer = new wxStdDialogButtonSizer; |
|
|
|
OuterBoxSizer->Add( StdDialogButtonSizer, 0, wxGROW | wxALL, 10 ); |
|
|
|
wxStdDialogButtonSizer* stdDialogButtonSizer = new wxStdDialogButtonSizer; |
|
|
|
OuterBoxSizer->Add( stdDialogButtonSizer, 0, wxGROW | wxALL, 10 ); |
|
|
|
|
|
|
|
Button = new wxButton( this, wxID_CANCEL, _( "Cancel" ), wxDefaultPosition, |
|
|
|
wxDefaultSize, 0 ); |
|
|
|
StdDialogButtonSizer->AddButton( Button ); |
|
|
|
wxButton* cancelButton = new wxButton( this, wxID_CANCEL, _( "Cancel" ), |
|
|
|
wxDefaultPosition, wxDefaultSize, 0 ); |
|
|
|
stdDialogButtonSizer->AddButton( cancelButton ); |
|
|
|
|
|
|
|
StdDialogButtonSizer->Realize(); |
|
|
|
stdDialogButtonSizer->Realize(); |
|
|
|
|
|
|
|
// 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(); |
|
|
|
} |
|
|
|
|
|
|
|
void WinEDA_SelColorFrame::OnCancel( wxCommandEvent& WXUNUSED( event ) ) |
|
|
|
{ |
|
|
|
// Setting the return value to -1 indicates that the
|
|
|
|
// dialog box has been canceled (and thus that the
|
|
|
|
// previously selected color is to be retained).
|
|
|
|
EndModal( -1 ); |
|
|
|
if( focusedButton ) |
|
|
|
focusedButton->SetFocus(); |
|
|
|
else |
|
|
|
cancelButton->SetFocus(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void WinEDA_SelColorFrame::SelColor( wxCommandEvent& event ) |
|
|
|
void CHOOSE_COLOR_DLG::selColor( wxCommandEvent& event ) |
|
|
|
{ |
|
|
|
int id = event.GetId(); |
|
|
|
m_color = EDA_COLOR_T( id - ID_COLOR_BLACK ); |
|
|
|
|
|
|
|
EndModal( id - ID_COLOR_BLACK ); |
|
|
|
// Close the dialog by calling the default dialog handler for a wxID_OK event
|
|
|
|
event.SetId( wxID_OK ); |
|
|
|
event.Skip(); |
|
|
|
} |