]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/propgrid/propgrid.cpp
No changes, just use better names in wxDataViewCtrl sample.
[wxWidgets.git] / samples / propgrid / propgrid.cpp
index 0122b230d2bf668a14092fe1fb1bd9f912a8070d..f910ac0c737d8b0aae7492f981631640ecddf3c2 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     2004-09-25
 // RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 //
@@ -264,11 +264,7 @@ wxAdvImageFileProperty::wxAdvImageFileProperty( const wxString& label,
 wxAdvImageFileProperty::~wxAdvImageFileProperty ()
 {
     // Delete old image
-    if ( m_pImage )
-    {
-        delete m_pImage;
-        m_pImage = (wxImage*) NULL;
-    }
+    wxDELETE(m_pImage);
 }
 
 void wxAdvImageFileProperty::OnSetValue()
@@ -276,11 +272,7 @@ void wxAdvImageFileProperty::OnSetValue()
     wxFileProperty::OnSetValue();
 
     // Delete old image
-    if ( m_pImage )
-    {
-        delete m_pImage;
-        m_pImage = (wxImage*) NULL;
-    }
+    wxDELETE(m_pImage);
 
     wxString imagename = GetValueAsString(0);
 
@@ -398,11 +390,7 @@ void wxAdvImageFileProperty::LoadThumbnails( size_t index )
 
         }
 
-        if ( m_pImage )
-        {
-            delete m_pImage;
-            m_pImage = (wxImage*) NULL;
-        }
+        wxDELETE(m_pImage);
     }
 }
 
@@ -691,7 +679,8 @@ enum
     ID_RUNMINIMAL,
     ID_ENABLELABELEDITING,
     ID_VETOCOLDRAG,
-    ID_SHOWHEADER
+    ID_SHOWHEADER,
+    ID_ONEXTENDEDKEYNAV
 };
 
 // -----------------------------------------------------------------------
@@ -756,6 +745,7 @@ BEGIN_EVENT_TABLE(FormMain, wxFrame)
     EVT_MENU( ID_ITERATE2, FormMain::OnIterate2Click )
     EVT_MENU( ID_ITERATE3, FormMain::OnIterate3Click )
     EVT_MENU( ID_ITERATE4, FormMain::OnIterate4Click )
+    EVT_MENU( ID_ONEXTENDEDKEYNAV, FormMain::OnExtendedKeyNav )
     EVT_MENU( ID_SETBGCOLOUR, FormMain::OnSetBackgroundColour )
     EVT_MENU( ID_SETBGCOLOURRECUR, FormMain::OnSetBackgroundColour )
     EVT_MENU( ID_CLEARMODIF, FormMain::OnClearModifyStatusClick )
@@ -926,25 +916,36 @@ void FormMain::OnPropertyGridChange( wxPropertyGridEvent& event )
     wxPGProperty* property = event.GetProperty();
 
     const wxString& name = property->GetName();
-    wxVariant value = property->GetValue();
+
+    // Properties store values internally as wxVariants, but it is preferred
+    // to use the more modern wxAny at the interface level
+    wxAny value = property->GetValue();
 
     // Don't handle 'unspecified' values
     if ( value.IsNull() )
         return;
 
+    //
+    // FIXME-VC6: In order to compile on Visual C++ 6.0, wxANY_AS()
+    //            macro is used. Unless you want to support this old
+    //            compiler in your own code, you can use the more
+    //            nicer form value.As<FOO>() instead of
+    //            wxANY_AS(value, FOO).
+    //
+
     // Some settings are disabled outside Windows platform
     if ( name == wxT("X") )
-        SetSize ( m_pPropGridManager->GetPropertyValueAsInt(property), -1, -1, -1, wxSIZE_USE_EXISTING );
+        SetSize( wxANY_AS(value, int), -1, -1, -1, wxSIZE_USE_EXISTING );
     else if ( name == wxT("Y") )
     // wxPGVariantToInt is safe long int value getter
-        SetSize ( -1, value.GetLong(), -1, -1, wxSIZE_USE_EXISTING );
+        SetSize ( -1, wxANY_AS(value, int), -1, -1, wxSIZE_USE_EXISTING );
     else if ( name == wxT("Width") )
-        SetSize ( -1, -1, m_pPropGridManager->GetPropertyValueAsInt(property), -1, wxSIZE_USE_EXISTING );
+        SetSize ( -1, -1, wxANY_AS(value, int), -1, wxSIZE_USE_EXISTING );
     else if ( name == wxT("Height") )
-        SetSize ( -1, -1, -1, value.GetLong(), wxSIZE_USE_EXISTING );
+        SetSize ( -1, -1, -1, wxANY_AS(value, int), wxSIZE_USE_EXISTING );
     else if ( name == wxT("Label") )
     {
-        SetTitle ( m_pPropGridManager->GetPropertyValueAsString(property) );
+        SetTitle( wxANY_AS(value, wxString) );
     }
     else if ( name == wxT("Password") )
     {
@@ -958,8 +959,7 @@ void FormMain::OnPropertyGridChange( wxPropertyGridEvent& event )
     else
     if ( name == wxT("Font") )
     {
-        wxFont font;
-        font << value;
+        wxFont font = wxANY_AS(value, wxFont);
         wxASSERT( font.Ok() );
 
         m_pPropGridManager->SetFont( font );
@@ -967,26 +967,22 @@ void FormMain::OnPropertyGridChange( wxPropertyGridEvent& event )
     else
     if ( name == wxT("Margin Colour") )
     {
-        wxColourPropertyValue cpv;
-        cpv << value;
+        wxColourPropertyValue cpv = wxANY_AS(value, wxColourPropertyValue);
         m_pPropGridManager->GetGrid()->SetMarginColour( cpv.m_colour );
     }
     else if ( name == wxT("Cell Colour") )
     {
-        wxColourPropertyValue cpv;
-        cpv << value;
+        wxColourPropertyValue cpv = wxANY_AS(value, wxColourPropertyValue);
         m_pPropGridManager->GetGrid()->SetCellBackgroundColour( cpv.m_colour );
     }
     else if ( name == wxT("Line Colour") )
     {
-        wxColourPropertyValue cpv;
-        cpv << value;
+        wxColourPropertyValue cpv = wxANY_AS(value, wxColourPropertyValue);
         m_pPropGridManager->GetGrid()->SetLineColour( cpv.m_colour );
     }
     else if ( name == wxT("Cell Text Colour") )
     {
-        wxColourPropertyValue cpv;
-        cpv << value;
+        wxColourPropertyValue cpv = wxANY_AS(value, wxColourPropertyValue);
         m_pPropGridManager->GetGrid()->SetCellTextColour( cpv.m_colour );
     }
 }
@@ -1845,9 +1841,14 @@ void FormMain::PopulateWithLibraryConfig ()
     wxPropertyGridManager* pgman = m_pPropGridManager;
     wxPropertyGridPage* pg = pgman->GetPage(wxT("wxWidgets Library Config"));
 
-    // Set custom column proportions
-    pg->SetColumnProportion(0, 3);
-    pg->SetColumnProportion(1, 1);
+    // Set custom column proportions (here in the sample app we need
+    // to check if the grid has wxPG_SPLITTER_AUTO_CENTER style. You usually
+    // need not to do it in your application).
+    if ( pgman->HasFlag(wxPG_SPLITTER_AUTO_CENTER) )
+    {
+        pg->SetColumnProportion(0, 3);
+        pg->SetColumnProportion(1, 1);
+    }
 
     wxPGProperty* cat;
 
@@ -1917,7 +1918,6 @@ void FormMain::PopulateWithLibraryConfig ()
     ADD_WX_LIB_CONF_GROUP(wxT("Unicode Support"))
     ADD_WX_LIB_CONF( wxUSE_UNICODE )
     ADD_WX_LIB_CONF( wxUSE_UNICODE_MSLU )
-    ADD_WX_LIB_CONF( wxUSE_WCHAR_T )
 
     ADD_WX_LIB_CONF_GROUP(wxT("Global Features"))
     ADD_WX_LIB_CONF( wxUSE_EXCEPTIONS )
@@ -2298,6 +2298,11 @@ FormMain::FormMain(const wxString& title, const wxPoint& pos, const wxSize& size
     menuTools2->Append(ID_ITERATE3, wxT("Reverse Iterate Over Properties") );
     menuTools2->Append(ID_ITERATE4, wxT("Iterate Over Categories") );
     menuTools2->AppendSeparator();
+    menuTools2->Append(ID_ONEXTENDEDKEYNAV, "Extend Keyboard Navigation",
+                       "This will set Enter to navigate to next property, "
+                       "and allows arrow keys to navigate even when in "
+                       "editor control.");
+    menuTools2->AppendSeparator();
     menuTools2->Append(ID_SETPROPERTYVALUE, wxT("Set Property Value") );
     menuTools2->Append(ID_CLEARMODIF, wxT("Clear Modified Status"), wxT("Clears wxPG_MODIFIED flag from all properties.") );
     menuTools2->AppendSeparator();
@@ -2674,6 +2679,25 @@ void FormMain::OnIterate4Click( wxCommandEvent& WXUNUSED(event) )
 
 // -----------------------------------------------------------------------
 
+void FormMain::OnExtendedKeyNav( wxCommandEvent& WXUNUSED(event) )
+{
+    // Use AddActionTrigger() and DedicateKey() to set up Enter,
+    // Up, and Down keys for navigating between properties.
+    wxPropertyGrid* propGrid = m_pPropGridManager->GetGrid();
+
+    propGrid->AddActionTrigger(wxPG_ACTION_NEXT_PROPERTY,
+                               WXK_RETURN);
+    propGrid->DedicateKey(WXK_RETURN);
+
+    // Up and Down keys are alredy associated with navigation,
+    // but we must also prevent them from being eaten by
+    // editor controls.
+    propGrid->DedicateKey(WXK_UP);
+    propGrid->DedicateKey(WXK_DOWN);
+}
+
+// -----------------------------------------------------------------------
+
 void FormMain::OnFitColumnsClick( wxCommandEvent& WXUNUSED(event) )
 {
     wxPropertyGridPage* page = m_pPropGridManager->GetCurrentPage();
@@ -3023,8 +3047,8 @@ void FormMain::OnCatColours( wxCommandEvent& event )
 
 void FormMain::OnSelectStyle( wxCommandEvent& WXUNUSED(event) )
 {
-    int style;
-    int extraStyle;
+    int style = 0;
+    int extraStyle = 0;
 
     {
         wxArrayString chs;