|
From: Emilien K. <cur...@us...> - 2005-01-07 17:41:55
|
Update of /cvsroot/wxdevcenter/StdPlugin/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28962/src Modified Files: BitmapCtrl.cpp BitmapDocView.cpp Controls.cpp Log Message: Tout ce qu'il faut pour les bitmaps Index: BitmapCtrl.cpp =================================================================== RCS file: /cvsroot/wxdevcenter/StdPlugin/src/BitmapCtrl.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** BitmapCtrl.cpp 4 Jan 2005 15:31:56 -0000 1.3 --- BitmapCtrl.cpp 7 Jan 2005 17:41:44 -0000 1.4 *************** *** 34,41 **** EVT_SIZE(BitmapCtrl::OnSize) EVT_PAINT(BitmapCtrl::OnPaint) - EVT_MOUSEWHEEL(BitmapCtrl::OnMouseWheel) EVT_SCROLLWIN(BitmapCtrl::OnScroll) EVT_ERASE_BACKGROUND(BitmapCtrl::OnEraseBackground) ! EVT_MOUSE_EVENTS(BitmapCtrl::OnMouseEvent) END_EVENT_TABLE() --- 34,41 ---- EVT_SIZE(BitmapCtrl::OnSize) EVT_PAINT(BitmapCtrl::OnPaint) EVT_SCROLLWIN(BitmapCtrl::OnScroll) EVT_ERASE_BACKGROUND(BitmapCtrl::OnEraseBackground) ! EVT_MOUSEWHEEL(BitmapCtrl::OnMouseWheel) ! EVT_MOUSE_EVENTS(BitmapCtrl::OnMouseEvents) END_EVENT_TABLE() *************** *** 253,256 **** --- 253,263 ---- + // Interception des évènements de la souris. + void BitmapCtrl::OnMouseEvents(wxMouseEvent& event) + { + wxExtendedMouseInterface::OnMouseEvent(event); + } + + // Interception du wheel de la souris. void BitmapCtrl::OnMouseWheel(wxMouseEvent& event) *************** *** 326,336 **** - // Interception des évènements de la souris. - void BitmapCtrl::OnMouseEvent(wxMouseEvent& event) - { - wxExtendedMouseInterface::OnMouseEvent(event); - } - - --- 333,336 ---- Index: Controls.cpp =================================================================== RCS file: /cvsroot/wxdevcenter/StdPlugin/src/Controls.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Controls.cpp 6 Jan 2005 16:23:20 -0000 1.4 --- Controls.cpp 7 Jan 2005 17:41:44 -0000 1.5 *************** *** 29,35 **** m_pSpin = new wxSpinCtrl(this, ID_SSC_SPIN, wxString::Format(wxT("%d"), value), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, minValue, maxValue, value); ! pHSizer->Add(m_pSlider, 2, wxALIGN_CENTER_VERTICAL); ! pHSizer->Add(m_pSpin, 1, wxALIGN_CENTER_VERTICAL); ! SetSizer(pHSizer); } --- 29,39 ---- m_pSpin = new wxSpinCtrl(this, ID_SSC_SPIN, wxString::Format(wxT("%d"), value), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, minValue, maxValue, value); ! pHSizer->Add(m_pSlider, 2, wxALIGN_CENTER_VERTICAL|wxALL, 1); ! pHSizer->Add(m_pSpin, 1, wxALIGN_CENTER_VERTICAL|wxALL, 1); ! ! pHSizer->SetItemMinSize(m_pSlider, m_pSlider->GetMinSize()); ! pHSizer->SetItemMinSize(m_pSpin, m_pSpin->GetMinSize()); ! ! SetSizerAndFit(pHSizer); } *************** *** 85,88 **** --- 89,93 ---- { m_pSlider->SetValue(m_pSpin->GetValue()); + event.SetId(GetId()); event.Skip(); } *************** *** 91,94 **** --- 96,100 ---- { m_pSlider->SetValue(m_pSpin->GetValue()); + event.SetId(GetId()); event.Skip(); } *************** *** 97,103 **** --- 103,122 ---- { m_pSpin->SetValue(m_pSlider->GetValue()); + event.SetId(GetId()); event.Skip(); } + wxSize wxSliderSpinCtrl::GetBestSize() const + { + return m_pSpin->GetBestSize(); + } + + + bool wxSliderSpinCtrl::SetBackgroundColour(const wxColour& colour) + { + return (m_pSpin->SetBackgroundColour(colour)&& + m_pSlider->SetBackgroundColour(colour)&& + wxWindow::SetBackgroundColour(colour)); + } /** *************** *** 127,130 **** --- 146,153 ---- if(col.Ok()) SetBackgroundColour(col); + + wxString str; + str.Printf("#%02X%02X%02X", (int)col.Red(), (int)col.Green(), (int)col.Blue()); + SetToolTip(str); Refresh(); } *************** *** 162,163 **** --- 185,231 ---- ProcessEvent(evt); } + + + /** + * Implémentation de la classe wxToggleBitmapButton + */ + + wxToggleBitmapButton::wxToggleBitmapButton(wxWindow* parent, wxWindowID id, const wxBitmap& label, const wxPoint& pos, const wxSize& size, long style): + wxStaticBitmap(parent, id, label, pos, size, style), + m_bIsToggle(false) + { + SetValue(true); + } + + BEGIN_EVENT_TABLE(wxToggleBitmapButton, wxControl) + EVT_LEFT_UP(wxToggleBitmapButton::OnMouseLeftUp) + END_EVENT_TABLE() + + + void wxToggleBitmapButton::SetValue(bool bToggle) + { + + wxLogDebug("wxToggleBitmapButton::SetValue %s", bToggle?"true":"false"); + + m_bIsToggle = bToggle; + + long style = GetWindowStyle(); + style &= ~wxBORDER_MASK; + + if(m_bIsToggle) + style |= wxRAISED_BORDER; + else + style |= wxSUNKEN_BORDER; + + SetWindowStyleFlag(style); + Refresh(); + } + + + void wxToggleBitmapButton::OnMouseLeftUp(wxMouseEvent& WXUNUSED(event)) + { + SetValue(!GetValue()); + wxCommandEvent evt(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, GetId()); + ProcessEvent(evt); + } + Index: BitmapDocView.cpp =================================================================== RCS file: /cvsroot/wxdevcenter/StdPlugin/src/BitmapDocView.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** BitmapDocView.cpp 3 Dec 2004 16:51:29 -0000 1.1 --- BitmapDocView.cpp 7 Jan 2005 17:41:44 -0000 1.2 *************** *** 31,44 **** { if(!m_Image.LoadFile((wxInputStream&)*ar)) ! wxMessageBox(wxT("Machin truc")); return true; } ! bool BitmapDocument::SaveDocument(wxDevCenter::Archive* WXUNUSED(ar)) { return true; } ////////////////////////////////////////////////////////////////////// --- 31,86 ---- { if(!m_Image.LoadFile((wxInputStream&)*ar)) ! wxMessageBox(WXDC_BITMAP_ERROR_LOAD); return true; } ! bool BitmapDocument::SaveDocument(wxDevCenter::Archive* ar) { + int type = GetBitmapType(GetDocumentPath()); + if(type==wxBITMAP_TYPE_GIF) + { + wxMessageBox(WXDC_BITMAP_ERROR_GIF_SAVE); + return false; + } + + if(!m_Image.SaveFile((wxOutputStream&)*ar, type)) + { + wxMessageBox(WXDC_BITMAP_ERROR_SAVE); + return false; + } return true; } + // Fixe la couleur d'un pixel. + void BitmapDocument::SetPixel(wxPoint pt, wxColour col) + { + m_Image.SetRGB(pt.x, pt.y, col.Red(), col.Green(), col.Blue()); + UpdateAllViews(NULL); + } + + + + // Revoie le type de bitmap depuis l'extension d'un fichier. + int BitmapDocument::GetBitmapType(wxDevCenter::FilePath strFile) + { + int type = wxBITMAP_TYPE_INVALID; + wxString strExt = strFile.GetFileExt(); + if(strExt.CmpNoCase("bmp")) + type = wxBITMAP_TYPE_BMP; + else if(strExt.CmpNoCase("png")) + type = wxBITMAP_TYPE_PNG; + else if(strExt.CmpNoCase("gif")) + type = wxBITMAP_TYPE_GIF; + else if(strExt.CmpNoCase("pcx")) + type = wxBITMAP_TYPE_PCX; + else if(strExt.CmpNoCase("jpg")) + type = wxBITMAP_TYPE_JPEG; + else if(strExt.CmpNoCase("jpeg")) + type = wxBITMAP_TYPE_JPEG; + else if(strExt.CmpNoCase("ico")) + type = wxBITMAP_TYPE_ICO; + return type; + } ////////////////////////////////////////////////////////////////////// *************** *** 49,52 **** --- 91,107 ---- #define IDM_VIEW_EXTRASCROLL 6001 + #define ID_BITMAP_CTRL 101 + #define ID_PANEL_CTRL 102 + + #define ID_COLOR_CURSOR_LEFT 111 + #define ID_COLOR_CURSOR_RIGHT 112 + #define ID_COLOR_SLIDER_RED 113 + #define ID_COLOR_SLIDER_GREEN 114 + #define ID_COLOR_SLIDER_BLUE 115 + #define ID_COLOR_HTML 116 + + #define ID_COLOR_PALETTE_START 120 + #define ID_COLOR_PALETTE_END (ID_COLOR_PALETTE_START+WXDC_BITMAP_PALETTE_SIZE) + IMPLEMENT_DYNAMIC_CLASS(BitmapView, View) *************** *** 57,62 **** --- 112,136 ---- EVT_UPDATE_UI(IDM_VIEW_CENTER, BitmapView::OnUpdateViewCenter) EVT_UPDATE_UI(IDM_VIEW_EXTRASCROLL, BitmapView::OnUpdateExtraScroll) + + EVT_EXTMOUSE_LEFT_MOVE_DRAG(ID_BITMAP_CTRL, BitmapView::OnLeftDrag) + + EVT_COMMAND_RANGE(ID_COLOR_PALETTE_START, ID_COLOR_PALETTE_END, wxEVT_COMMAND_LEFT_CLICK, BitmapView::OnColorPaletteLeftClick) + EVT_COMMAND_RANGE(ID_COLOR_PALETTE_START, ID_COLOR_PALETTE_END, wxEVT_COMMAND_RIGHT_CLICK, BitmapView::OnColorPaletteRightClick) + + EVT_COMMAND_LEFT_CLICK(ID_COLOR_CURSOR_LEFT, BitmapView::OnColorLeftClick) + EVT_COMMAND_LEFT_CLICK(ID_COLOR_CURSOR_RIGHT, BitmapView::OnColorRightClick) + + EVT_TEXT(ID_COLOR_SLIDER_RED, BitmapView::OnSliderSpinTextChanged) + EVT_TEXT(ID_COLOR_SLIDER_GREEN, BitmapView::OnSliderSpinTextChanged) + EVT_TEXT(ID_COLOR_SLIDER_BLUE, BitmapView::OnSliderSpinTextChanged) END_EVENT_TABLE() + /** Interception d'un drag gauche.*/ + void BitmapView::OnLeftDrag(wxExtendedMouseEvent& event) + { + GetDocument()->SetPixel( m_pBitmapCtrl->ClientToBitmap(event.GetToPos()) , wxColour(0, 0, 0)); + wxLogDebug("BitmapView::OnLeftDrag (%d,%d)-(%d,%d)", event.GetFromPos().x, event.GetFromPos().y, + event.GetToPos().x, event.GetToPos().y); + } BitmapView::BitmapView(): *************** *** 72,82 **** bool BitmapView::OnCreate() { ! m_pBitmapCtrl = new BitmapCtrl(this, -1, wxDefaultPosition, wxDefaultSize, 0); ! wxSizer *pSizer = new wxBoxSizer(wxVERTICAL); pSizer->Add(m_pBitmapCtrl, 1, wxGROW); SetSizerAndFit(pSizer); return true; } void BitmapView::OnSize(wxSizeEvent& event) { --- 146,222 ---- bool BitmapView::OnCreate() { ! m_pBitmapCtrl = new BitmapCtrl(this, ID_BITMAP_CTRL, wxDefaultPosition, wxDefaultSize, 0); ! wxSizer *pSizer = new wxBoxSizer(wxHORIZONTAL); ! wxPanel* pPanel = CreateControlPanel(); ! pSizer->Add(m_pBitmapCtrl, 1, wxGROW); + pSizer->Add(pPanel, 0, wxGROW); + pSizer->SetItemMinSize(pPanel, 172, -1); SetSizerAndFit(pSizer); + + + SetActiveColorCtrl(m_pColourLeftButton); + return true; } + // Création de la barre de controle. + wxPanel* BitmapView::CreateControlPanel() + { + wxPanel *pPanel = new wxPanel(this, ID_PANEL_CTRL); + wxSizer *pGlobalSizer = new wxBoxSizer(wxVERTICAL), + *pHSizer; + + // Liste de couleurs + pHSizer = new wxGridSizer(WXDC_BITMAP_PALETTE_WIDTH, WXDC_BITMAP_PALETTE_HEIGHT, 0, 0); + for(int i=0; i<WXDC_BITMAP_PALETTE_SIZE; i++) + { + m_pColourArray[i] = new wxColourCtrl(pPanel, ID_COLOR_PALETTE_START+i, wxColour(255, 0, 0), wxDefaultPosition, wxSize(-1, 32), wxCOL_PICK_ON_DBLCLIC|wxSUNKEN_BORDER); + pHSizer->Add(m_pColourArray[i], 1, wxGROW); + pHSizer->SetItemMinSize(i, 16, 16); + } + pGlobalSizer->Add(pHSizer, 0, wxGROW); + + pGlobalSizer->AddSpacer(8); + + + // Deux boutons curseur + pHSizer = new wxBoxSizer(wxHORIZONTAL); + m_pColourLeftButton = new wxColourCtrl(pPanel, ID_COLOR_CURSOR_LEFT, wxColour(255, 0, 0), wxDefaultPosition, wxSize(-1, 32), wxCOL_PICK_ON_DBLCLIC|wxSUNKEN_BORDER); + m_pColourRightButton = new wxColourCtrl(pPanel, ID_COLOR_CURSOR_RIGHT, wxColour(0, 255, 0), wxDefaultPosition, wxSize(-1, 32), wxCOL_PICK_ON_DBLCLIC|wxSTATIC_BORDER); + pHSizer->Add(m_pColourLeftButton, 1, wxALL, 2); + pHSizer->Add(m_pColourRightButton, 1, wxALL, 2); + pHSizer->SetItemMinSize((size_t)0, -1, 32); + pHSizer->SetItemMinSize((size_t)1, -1, 32); + pGlobalSizer->Add(pHSizer, 0, wxGROW); + + pGlobalSizer->AddSpacer(8); + + + // SlideSpin + m_pRedSSC = new wxSliderSpinCtrl(pPanel, ID_COLOR_SLIDER_RED, 0, 0, 255); + m_pGreenSSC = new wxSliderSpinCtrl(pPanel, ID_COLOR_SLIDER_GREEN, 0, 0, 255); + m_pBlueSSC = new wxSliderSpinCtrl(pPanel, ID_COLOR_SLIDER_BLUE, 0, 0, 255); + + m_pRedSSC->SetBackgroundColour(wxColour(255, 192, 192)); + m_pGreenSSC->SetBackgroundColour(wxColour(192, 255, 192)); + m_pBlueSSC->SetBackgroundColour(wxColour(192, 192, 255)); + + pGlobalSizer->Add(m_pRedSSC, 0, wxGROW|wxALL, 4); + pGlobalSizer->Add(m_pGreenSSC, 0, wxGROW|wxALL, 4); + pGlobalSizer->Add(m_pBlueSSC, 0, wxGROW|wxALL, 4); + + // Couleur HTML + m_pHTMLColor = new wxTextCtrl(pPanel, ID_COLOR_HTML, "", wxDefaultPosition, wxDefaultSize, wxTE_READONLY); + pHSizer = new wxBoxSizer(wxHORIZONTAL); + pHSizer->Add(new wxStaticText(pPanel, -1, "HTML : #"), 0, wxALIGN_CENTER_VERTICAL); + pHSizer->Add(m_pHTMLColor, 1, wxGROW); + pGlobalSizer->Add(pHSizer, 0, wxGROW|wxALL, 4); + + pPanel->SetSizerAndFit(pGlobalSizer); + return pPanel; + } + + void BitmapView::OnSize(wxSizeEvent& event) { *************** *** 121,124 **** --- 261,329 ---- + // Interception du changement de controle de couleur actif sur bouton gauche. + void BitmapView::OnColorPaletteLeftClick(wxCommandEvent& event) + { + wxColourCtrl *pCol = m_pColourArray[event.GetId()-ID_COLOR_PALETTE_START]; + SetLeftColor(pCol->GetColour()); + } + + // Interception du changement de controle de couleur actif sur bouton droit. + void BitmapView::OnColorPaletteRightClick(wxCommandEvent& event) + { + wxColourCtrl *pCol = m_pColourArray[event.GetId()-ID_COLOR_PALETTE_START]; + SetRightColor(pCol->GetColour()); + } + + // Interception du click sur le bouton gauche. + void BitmapView::OnColorLeftClick(wxCommandEvent& WXUNUSED(event)) + { + SetActiveColorCtrl(m_pColourLeftButton); + } + + // Interception du click sur le bouton droit. + void BitmapView::OnColorRightClick(wxCommandEvent& WXUNUSED(event)) + { + SetActiveColorCtrl(m_pColourRightButton); + } + + // Fixe la couleur gauche. + void BitmapView::SetLeftColor(wxColour col) + { + m_pColourLeftButton->SetColour(col); + SetActiveColorCtrl(m_pColourLeftButton); + } + + // Fixe la couleur droite. + void BitmapView::SetRightColor(wxColour col) + { + m_pColourRightButton->SetColour(col); + SetActiveColorCtrl(m_pColourRightButton); + } + + // Fixe le controle de couleur actif. + void BitmapView::SetActiveColorCtrl(wxColourCtrl* pColor) + { + m_pColourSelected = pColor; + + wxColour col = pColor->GetColour(); + + m_pRedSSC->SetValue(col.Red()); + m_pGreenSSC->SetValue(col.Green()); + m_pBlueSSC->SetValue(col.Blue()); + + m_pHTMLColor->SetValue(wxString::Format(wxT("%02X%02X%02X"), (int)col.Red(), (int)col.Green(), (int)col.Blue())); + } + + // Intercepte le changement de couleur des wxSliderSpinCtrl. + void BitmapView::OnSliderSpinTextChanged(wxCommandEvent& WXUNUSED(event)) + { + wxColor col((unsigned char)m_pRedSSC->GetValue(), + (unsigned char)m_pGreenSSC->GetValue(), + (unsigned char)m_pBlueSSC->GetValue()); + m_pColourSelected->SetColour(col); + m_pHTMLColor->SetValue(wxString::Format(wxT("%02X%02X%02X"), (int)col.Red(), (int)col.Green(), (int)col.Blue())); + } + + ////////////////////////////////////////////////////////////////////// // BitmapMiniDoc |