]> git.saurik.com Git - wxWidgets.git/commitdiff
Added middle mouse event macros to wxListCtrl doc; added wxCreateGreyedImage
authorJulian Smart <julian@anthemion.co.uk>
Mon, 25 Feb 2002 10:11:10 +0000 (10:11 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Mon, 25 Feb 2002 10:11:10 +0000 (10:11 +0000)
and attempt to show disabled buttons in wxUniversal wxToolBar

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14400 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/listctrl.tex
docs/latex/wx/listevt.tex
include/wx/tbarbase.h
src/common/tbarbase.cpp
src/univ/toolbar.cpp

index ce63aa66bea979521e7456cfa026abfd7ed5910a..6466cd44b7606078d52e032e28c9a066add2ec7d 100644 (file)
@@ -78,7 +78,8 @@ functions that take a \helpref{wxListEvent}{wxlistevent} argument.
 \twocolitem{{\bf EVT\_LIST\_ITEM\_DESELECTED(id, func)}}{The item has been deselected.}
 \twocolitem{{\bf EVT\_LIST\_ITEM\_ACTIVATED(id, func)}}{The item has been activated (ENTER or double click).}
 \twocolitem{{\bf EVT\_LIST\_ITEM\_FOCUSED(id, func)}}{The currently focused item has changed.}
-\twocolitem{{\bf EVT\_LIST\_ITEM\_RIGHT\_CLICK(id, func)}}{An item has been right-clicked.}
+\twocolitem{{\bf EVT\_LIST\_ITEM\_MIDDLE\_CLICK(id, func)}}{The middle mouse button has been clicked on an item.}
+\twocolitem{{\bf EVT\_LIST\_ITEM\_RIGHT\_CLICK(id, func)}}{The right mouse button has been clicked on an item.}
 \twocolitem{{\bf EVT\_LIST\_KEY\_DOWN(id, func)}}{A key has been pressed.}
 \twocolitem{{\bf EVT\_LIST\_INSERT\_ITEM(id, func)}}{An item has been inserted.}
 \twocolitem{{\bf EVT\_LIST\_COL\_CLICK(id, func)}}{A column ({\bf m\_col}) has been left-clicked.}
index 003449b9f273fcb07ae49cf9fb4ea5e1ec638ab0..57ee3e4262e4eabd1f7859b526da23bb54f07737 100644 (file)
@@ -32,7 +32,8 @@ functions that take a wxListEvent argument.
 \twocolitem{{\bf EVT\_LIST\_ITEM\_DESELECTED(id, func)}}{The item has been deselected.}
 \twocolitem{{\bf EVT\_LIST\_ITEM\_ACTIVATED(id, func)}}{The item has been activated (ENTER or double click).}
 \twocolitem{{\bf EVT\_LIST\_ITEM\_FOCUSED(id, func)}}{The currently focused item has changed.}
-\twocolitem{{\bf EVT\_LIST\_ITEM\_RIGHT\_CLICK(id, func)}}{An item has been right-clicked.}
+\twocolitem{{\bf EVT\_LIST\_ITEM\_MIDDLE\_CLICK(id, func)}}{The middle mouse button has been clicked on an item.}
+\twocolitem{{\bf EVT\_LIST\_ITEM\_RIGHT\_CLICK(id, func)}}{The right mouse button has been clicked on an item.}
 \twocolitem{{\bf EVT\_LIST\_KEY\_DOWN(id, func)}}{A key has been pressed.}
 \twocolitem{{\bf EVT\_LIST\_INSERT\_ITEM(id, func)}}{An item has been inserted.}
 \twocolitem{{\bf EVT\_LIST\_COL\_CLICK(id, func)}}{A column ({\bf m\_col}) has been left-clicked.}
index f530678a40fcf5567c2c5e12a123075f0796f7cb..d57869579bc663dc94675c4490b02af4a0fd39b4 100644 (file)
@@ -30,6 +30,7 @@
 
 class WXDLLEXPORT wxToolBarBase;
 class WXDLLEXPORT wxToolBarToolBase;
+class WXDLLEXPORT wxImage;
 
 // ----------------------------------------------------------------------------
 // constants
@@ -475,6 +476,9 @@ private:
     DECLARE_CLASS(wxToolBarBase)
 };
 
+// Helper function for creating the image for disabled buttons
+bool wxCreateGreyedImage(const wxImage& in, wxImage& out) ;
+
 #endif // wxUSE_TOOLBAR
 
 #endif
index 91b6a23e2891d1606f67cdf64efcca9df6150481..cbe5143e37d10df5874f0b8bb57d0dc46e48bfc3 100644 (file)
@@ -35,6 +35,8 @@
 #endif
 
 #include "wx/frame.h"
+#include "wx/image.h"
+#include "wx/settings.h"
 
 // For ::UpdateWindow
 #ifdef __WXMSW__
@@ -568,4 +570,119 @@ void wxToolBarBase::DoToolbarUpdates()
     }
 }
 
+///////////// button-label rendering helpers //////////////////
+
+#define MIN_COLOR_DIFF 10
+
+#define IS_IN_ARRAY(x,y) ( (x) < width && (y) < height && (x) >= 0 && (y) >= 0 )
+
+#define IS_GREATER(red1,green1,blue1, red2,green2,blue2) ( ( red1 > red2 + MIN_COLOR_DIFF ) && \
+                                ( green1 > green2 + MIN_COLOR_DIFF ) &&  \
+                                ( blue1 > blue2 + MIN_COLOR_DIFF )     \
+                              )
+
+// Helper function, used by wxCreateGreyedImage
+
+static void wxGreyOutImage( const wxImage& src, wxImage& dest,
+    const wxColour& darkCol, const wxColour& lightCol, const wxColour& bgCol)
+{
+    int x = 0;
+    int y = 1;
+
+    int width = src.GetWidth();
+    int height = src.GetHeight();
+
+    unsigned int redCur, greenCur, blueCur;
+
+    do
+    {
+        redCur = src.GetRed(x, y);
+        greenCur = src.GetGreen(x, y);
+        blueCur = src.GetBlue(x, y);     
+
+        if ( IS_IN_ARRAY(x-1,y-1) )
+        {
+            unsigned int redUpper = src.GetRed(x-1, y-1);
+            unsigned int greenUpper = src.GetGreen(x-1, y-1);
+            unsigned int blueUpper = src.GetBlue(x-1, y-1);     
+
+            // if the upper element is lighter than current
+            if ( IS_GREATER(redUpper, greenUpper, blueUpper, redCur, greenCur, blueCur) )
+            {
+                dest.SetRGB(x,y, darkCol.Red(), darkCol.Green(), darkCol.Blue());
+            }
+            // if the current element is ligher than the upper
+            else if ( IS_GREATER(redCur, greenCur, blueCur, redUpper, greenUpper, blueUpper) )
+            {
+                dest.SetRGB(x,y, lightCol.Red(), lightCol.Green(), lightCol.Blue());
+            }
+            else
+            {
+                unsigned int red1 = dest.GetRed(x-1, y-1);
+                unsigned int green1 = dest.GetGreen(x-1, y-1);
+                unsigned int blue1 = dest.GetBlue(x-1, y-1);     
+
+                if ( red1 == lightCol.Red() && green1 == lightCol.Green() && blue1 == lightCol.Blue() )
+                    dest.SetRGB(x, y, bgCol.Red(), bgCol.Green(), bgCol.Blue());
+                else if ( red1 == darkCol.Red() && green1 == darkCol.Green() && blue1 == darkCol.Blue() )
+                    dest.SetRGB(x, y, darkCol.Red(), darkCol.Green(), darkCol.Blue());
+                else
+                    dest.SetRGB(x, y, bgCol.Red(), bgCol.Green(), bgCol.Blue());
+            }
+        }
+
+        // go zig-zag
+
+        if ( IS_IN_ARRAY(x+1,y-1) ) 
+        {
+            ++x;
+            --y;
+        }
+        else
+        {
+            while ( IS_IN_ARRAY(x-1,y+1) ) 
+            {
+                --x;
+                ++y;
+            }
+
+            if ( IS_IN_ARRAY(x,y+1) )
+            {
+                ++y;
+                continue;
+            }
+            else
+            {
+                if ( IS_IN_ARRAY(x+1,y) )
+                {
+                    ++x;
+                    continue;
+                }
+                else break;
+            }
+        }
+
+    } while (1);
+}
+
+/*
+ * Make a greyed-out image suitable for disabled buttons.
+ * This code is adapted from wxNewBitmapButton in FL.
+ */
+
+bool wxCreateGreyedImage(const wxImage& in, wxImage& out)
+{
+    out = in.Copy();
+
+    // assuming the pixels along the edges are of the background color
+    wxColour bgCol(in.GetRed(0, 0), in.GetGreen(0, 0), in.GetBlue(0, 0));
+
+    wxColour darkCol = wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW) ;
+    wxColour lightCol = wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT) ;
+
+    wxGreyOutImage(in, out, darkCol, lightCol, bgCol);
+
+    return TRUE;
+}
+
 #endif // wxUSE_TOOLBAR
index 83d4ad199af9cb54f0071691a99ea452066cc877..cceff8c4750680f4e5c53d3fab7c3e9494578b1b 100644 (file)
@@ -31,7 +31,7 @@
 #endif
 
 #include "wx/toolbar.h"
-#include "wx/validate.h"
+#include "wx/image.h"
 
 //-----------------------------------------------------------------------------
 // wxToolBar
@@ -90,6 +90,17 @@ bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *tool)
 
 void wxToolBar::DoEnableTool(wxToolBarToolBase *tool, bool enable)
 {
+    // Created disabled-state bitmap on demand
+    if (!enable && !m_bitmap2.Ok())
+    {
+        wxImage in(m_bitmap1);
+        wxImage out(m_bitmap1);
+
+        wxCreateGreyedImage(in, out);
+
+        m_bitmap2 = out.ConvertToBitmap();
+    }
+    RefreshTool(tool);    
 }
 
 void wxToolBar::DoToggleTool(wxToolBarToolBase *tool, bool toggle)
@@ -135,9 +146,10 @@ void wxToolBar::RefreshTool( wxToolBarTool *tool )
 
 void wxToolBar::DrawToolBarTool( wxToolBarTool *tool, wxDC &dc, bool down )
 {
+    wxBitmap& bitmap = (tool->IsEnabled() || !tool->GetBitmap1().Ok()) ? tool->GetBitmap1() : tool->GetBitmap2() ;
     if (down)
     {
-        dc.DrawBitmap( tool->GetBitmap1(), tool->m_x+4, tool->m_y+4, TRUE );
+        dc.DrawBitmap( bitmap, tool->m_x+4, tool->m_y+4, TRUE );
         
         dc.SetPen( *wxGREY_PEN );
         dc.DrawLine( tool->m_x, tool->m_y, tool->m_x+m_defaultWidth+5, tool->m_y );
@@ -153,7 +165,7 @@ void wxToolBar::DrawToolBarTool( wxToolBarTool *tool, wxDC &dc, bool down )
     }
     else
     {
-        dc.DrawBitmap( tool->GetBitmap1(), tool->m_x+3, tool->m_y+3, TRUE );
+        dc.DrawBitmap( bitmap, tool->m_x+3, tool->m_y+3, TRUE );
         
         dc.SetPen( *wxWHITE_PEN );
         dc.DrawLine( tool->m_x, tool->m_y, tool->m_x+m_defaultWidth+5, tool->m_y );
@@ -292,7 +304,7 @@ void wxToolBar::OnMouse(wxMouseEvent &event)
         }
     }
     
-    if (event.LeftDown() && (hit))
+    if (event.LeftDown() && (hit) && hit->Enabled())
     {
         CaptureMouse();
         m_captured = hit;