/* Set up color Layers */ #include "fctsys.h" #include "gr_basic.h" #include "common.h" #include "program.h" #include "libcmp.h" #include "general.h" #include "id.h" #include "protos.h" /* Variables locales */ /* Fonctions locales: */ /* Macro utile : */ #define ADR(numlayer) &(g_LayerDescr.LayerColor[numlayer]) #define BUTT_SIZE_X 30 #define BUTT_SIZE_Y 20 enum col_sel_id { ID_COLOR_SETUP = 1800 }; /**********************************/ /* Liste des menus de Menu_Layers */ /**********************************/ struct ColorButton { wxString m_Name; int * m_Color; int m_Id; wxBitmapButton * m_Button; int m_State; }; static ColorButton Msg_General= { _("General"), /* Title */ NULL }; static ColorButton Msg_Sheets= { _("Sheets"), /* Title */ NULL }; static ColorButton Layer_Wire_Item= { _("Wire"), /* Title */ ADR(LAYER_WIRE) /* adr du parametre optionnel */ }; static ColorButton Layer_Bus_Item= { _("Bus"), /* Title */ ADR(LAYER_BUS) /* adr du parametre optionnel */ }; static ColorButton Layer_Jonction_Item= { _("Junction"), /* Title */ ADR(LAYER_JUNCTION) /* adr du parametre optionnel */ }; static ColorButton Layer_LocalLabel_Item= { _("Label"), /* Title */ ADR(LAYER_LOCLABEL) /* adr du parametre optionnel */ }; static ColorButton Layer_GlobLabel_Item= { _("GlobLabel"), /* Title */ ADR(LAYER_GLOBLABEL) /* adr du parametre optionnel */ }; static ColorButton Layer_PinNum_Item= { _("PinNum"), /* Title */ ADR(LAYER_PINNUM) /* adr du parametre optionnel */ }; static ColorButton Layer_PinNam_Item= { _("PinNam"), /* Title */ ADR(LAYER_PINNAM) /* adr du parametre optionnel */ }; static ColorButton Layer_Reference_Item= { _("Reference"), /* Title */ ADR(LAYER_REFERENCEPART) /* adr du parametre optionnel */ }; static ColorButton Layer_Value_Item= { _("Value"), /* Title */ ADR(LAYER_VALUEPART) /* adr du parametre optionnel */ }; static ColorButton Layer_Fields_Item= { _("Fields"), /* Title */ ADR(LAYER_FIELDS) /* adr du parametre optionnel */ }; static ColorButton Layer_BodyDevice_Item= { _("Body"), /* Title */ ADR(LAYER_DEVICE) /* adr du parametre optionnel */ }; static ColorButton Layer_BodyBackgroundDevice_Item= { _("Body Bg"), /* Title */ ADR(LAYER_DEVICE_BACKGROUND) /* adr du parametre optionnel */ }; static ColorButton MsgDevice_Item= { _("Device"), /* Title */ NULL }; static ColorButton Layer_Notes_Item= { _("Notes"), /* Title */ ADR(LAYER_NOTES) /* adr du parametre optionnel */ }; static ColorButton Layer_NetNam_Item= { _("Netname"), /* Title */ ADR(LAYER_NETNAM) /* adr du parametre optionnel */ }; static ColorButton Layer_Pin_Item= { _("Pin"), /* Title */ ADR(LAYER_PIN) /* adr du parametre optionnel */ }; static ColorButton Layer_Sheet_Item= { _("Sheet"), /* Title */ ADR(LAYER_SHEET) /* adr du parametre optionnel */ }; static ColorButton Layer_SheetName_Item= { _("SheetName"), /* Title */ ADR(LAYER_SHEETNAME) /* adr du parametre optionnel */ }; static ColorButton Layer_SheetFileName_Item= { _("Sheetfile"), /* Title */ ADR(LAYER_SHEETFILENAME) /* adr du parametre optionnel */ }; static ColorButton Layer_SheetLabel_Item= { _("SheetLabel"), /* Title */ ADR(LAYER_SHEETLABEL) /* adr du parametre optionnel */ }; static ColorButton Layer_NoConnect_Item= { _("NoConn"), /* Title */ ADR(LAYER_NOCONNECT) /* adr du parametre optionnel */ }; static ColorButton Msg_ErcMarck= { _("Erc Mark"), /* Title */ NULL }; static ColorButton Layer_Erc_Warning_Item= { _("Erc Warning"), /* Title */ ADR(LAYER_ERC_WARN) /* adr du parametre optionnel */ }; static ColorButton Layer_Erc_Error_Item= { _("Erc Error"), /* Title */ ADR(LAYER_ERC_ERR) /* adr du parametre optionnel */ }; #define NB_BUTT 26 static ColorButton * laytool_list[NB_BUTT+1] = { &Msg_General, &Layer_Wire_Item, &Layer_Bus_Item, &Layer_Jonction_Item, &Layer_LocalLabel_Item, &Layer_GlobLabel_Item, &Layer_NetNam_Item, &Layer_Notes_Item, &Layer_NoConnect_Item, &MsgDevice_Item, &Layer_BodyDevice_Item, &Layer_BodyBackgroundDevice_Item, &Layer_Pin_Item, &Layer_PinNum_Item, &Layer_PinNam_Item, &Layer_Reference_Item, &Layer_Value_Item, &Layer_Fields_Item, &Msg_Sheets, &Layer_Sheet_Item, &Layer_SheetFileName_Item, &Layer_SheetName_Item, &Layer_SheetLabel_Item, &Msg_ErcMarck, &Layer_Erc_Warning_Item, &Layer_Erc_Error_Item, NULL }; /*************************************************************/ /* classe derivee pour la frame de Configuration des couleurs*/ /*************************************************************/ class WinEDA_SetColorsFrame: public wxDialog { private: WinEDA_DrawFrame *m_Parent; wxRadioBox * m_SelBgColor; public: // Constructor and destructor WinEDA_SetColorsFrame(WinEDA_DrawFrame *parent, const wxPoint& framepos); ~WinEDA_SetColorsFrame(void) {}; private: void SetColor(wxCommandEvent& event); void BgColorChoice(wxCommandEvent& event); DECLARE_EVENT_TABLE() }; /* Table des evenements pour WinEDA_SetColorsFrame */ BEGIN_EVENT_TABLE(WinEDA_SetColorsFrame, wxDialog) EVT_RADIOBOX(ID_SEL_BG_COLOR, WinEDA_SetColorsFrame::BgColorChoice) EVT_COMMAND_RANGE(ID_COLOR_SETUP, ID_COLOR_SETUP+26, wxEVT_COMMAND_BUTTON_CLICKED, WinEDA_SetColorsFrame::SetColor) END_EVENT_TABLE() /**************************************************************/ void DisplayColorSetupFrame(WinEDA_DrawFrame * parent, const wxPoint & framepos) /**************************************************************/ { WinEDA_SetColorsFrame * frame = new WinEDA_SetColorsFrame(parent, framepos); frame->ShowModal(); frame->Destroy(); } /**********************************************************************/ WinEDA_SetColorsFrame::WinEDA_SetColorsFrame(WinEDA_DrawFrame *parent, const wxPoint& framepos): wxDialog(parent, -1, _("EESchema Preferences"), framepos, wxSize(500, 270), DIALOG_STYLE) /**********************************************************************/ { #define START_Y 15 wxBitmapButton * Button; int ii, yy, butt_ID, buttcolor; wxPoint pos; int w = BUTT_SIZE_X, h = BUTT_SIZE_Y; wxStaticText * text; int right, bottom, line_height; wxPoint bg_color_pos; m_Parent = parent; SetFont(*g_DialogFont); pos.x = 10; pos.y = START_Y; right = pos.x; bottom = 0; line_height = h; for ( ii = 0; laytool_list[ii] != NULL; ii++ ) { if( laytool_list[ii]->m_Color == NULL) { if( pos.y != START_Y ) { pos.x = right + 10; pos.y = START_Y; bg_color_pos = pos; } wxString msg = wxGetTranslation(laytool_list[ii]->m_Name); text = new wxStaticText(this,-1, msg, wxPoint(pos.x, pos.y ), wxSize(-1,-1), 0 ); line_height = MAX(line_height, text->GetRect().GetHeight()); pos.y += line_height; continue; } butt_ID = ID_COLOR_SETUP + ii; laytool_list[ii]->m_Id = butt_ID; wxMemoryDC iconDC; wxBitmap ButtBitmap(w,h); iconDC.SelectObject( ButtBitmap ); buttcolor = *laytool_list[ii]->m_Color; wxBrush Brush; iconDC.SelectObject( ButtBitmap ); 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.DrawRectangle(0,0, w, h); Button = new wxBitmapButton(this, butt_ID, ButtBitmap, wxPoint(pos.x, pos.y - ((h -line_height)/2) ), wxSize(w,h) ); laytool_list[ii]->m_Button = Button; wxString msg = wxGetTranslation(laytool_list[ii]->m_Name); text = new wxStaticText(this,-1, msg, wxPoint(pos.x + 5 + w , pos.y ), wxSize(-1,-1), 0 ); wxPoint lowpos; lowpos.x = text->GetRect().GetRight(); lowpos.y = text->GetRect().GetBottom(); right = MAX(right, lowpos.x); bottom = MAX(bottom, lowpos.y); bg_color_pos.y = lowpos.y; yy = line_height + 5; pos.y += yy; } bg_color_pos.x += 5; bg_color_pos.y += 25; wxString bg_choice[2] = { _("White Background"), _("Black Background")}; m_SelBgColor = new wxRadioBox(this, ID_SEL_BG_COLOR, _("Background Colour"), bg_color_pos, wxDefaultSize, 2, bg_choice, 1, wxRA_SPECIFY_COLS); m_SelBgColor->SetSelection( (g_DrawBgColor == BLACK) ? 1 : 0); bottom = MAX(bottom, m_SelBgColor->GetRect().GetBottom());; right = MAX(right, m_SelBgColor->GetRect().GetRight());; SetClientSize(wxSize(right+10, bottom+10)); } /***************************************************************/ void WinEDA_SetColorsFrame::SetColor(wxCommandEvent& event) /***************************************************************/ { int id = event.GetId(); int color = DisplayColorFrame(this); int w = BUTT_SIZE_X, h = BUTT_SIZE_Y; if ( color < 0) return; for ( int ii = 0; laytool_list[ii] != NULL; ii++ ) { if( laytool_list[ii]->m_Id != id) continue; if( *laytool_list[ii]->m_Color == color) break; *laytool_list[ii]->m_Color = color; wxMemoryDC iconDC; wxBitmapButton * Button = laytool_list[ii]->m_Button; wxBitmap ButtBitmap = Button->GetBitmapLabel(); iconDC.SelectObject( ButtBitmap ); int buttcolor = *laytool_list[ii]->m_Color; wxBrush Brush; iconDC.SelectObject( ButtBitmap ); 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.DrawRectangle(0,0, w, h); Button->SetBitmapLabel(ButtBitmap); if ( m_Parent->GetScreen() ) m_Parent->GetScreen()->SetRefreshReq(); } Refresh(FALSE); } /***************************************************************/ void WinEDA_SetColorsFrame::BgColorChoice(wxCommandEvent& event) /***************************************************************/ { int color; if ( m_SelBgColor->GetSelection() == 0 ) color = WHITE; else color = BLACK; if ( color != g_DrawBgColor ) { g_DrawBgColor = color; m_Parent->SetDrawBgColor(g_DrawBgColor); m_Parent->ReDrawPanel(); } } /*************************/ void SeedLayers(void) /*************************/ { LayerStruct * LayerPointer = &g_LayerDescr; int pt; LayerPointer->CommonColor = WHITE; LayerPointer->Flags = 0; pt=0; LayerPointer->CurrentWidth = 1; /* seed Up the Layer colours, set all user layers off */ for( pt = 0; pt < MAX_LAYERS; pt++ ) { LayerPointer->LayerStatus[pt]= 0; LayerPointer->LayerColor[pt] = DARKGRAY; } LayerPointer->NumberOfLayers = pt - 1; /* Couleurs specifiques: Mise a jour par la lecture de la config*/ } /*******************************/ int ReturnLayerColor(int Layer) /*******************************/ { if(g_LayerDescr.Flags==0) return(g_LayerDescr.LayerColor[Layer]); else return(g_LayerDescr.CommonColor); }