]> git.saurik.com Git - wxWidgets.git/commitdiff
1. serious bug in wxRegConfig corrected - deleting a value would delete the
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 26 Jun 1999 11:10:50 +0000 (11:10 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 26 Jun 1999 11:10:50 +0000 (11:10 +0000)
   key containing it if it didn't have any subkeys (i.e. would delete the
   sibling values)
2. wxRegKey::GetFirstValue() starts with first value, not the second one
3. typo in wxStaticText::DoSetSize() which prevented width.AsIs() from
   working fixed
4. adjustment for the parent client area offset not done for the top level
   windows (dialogs and frames) any more

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

include/wx/msw/registry.h
src/msw/regconf.cpp
src/msw/registry.cpp
src/msw/stattext.cpp
src/msw/window.cpp

index 3bdce82bcab54694521a60ced59fe1ea0c9a7216..693207b3fd31a4c6f9d2a4ab69ab6ee3b9568136 100644 (file)
@@ -187,11 +187,15 @@ public:
 
   // query existence of a key/value
     // return true if value exists
-  bool  HasValue(const wxChar *szKey) const;
+  bool HasValue(const wxChar *szKey) const;
     // return true if given subkey exists
-  bool  HasSubKey(const wxChar *szKey) const;
+  bool HasSubKey(const wxChar *szKey) const;
     // return true if any subkeys exist
-  bool  HasSubkeys() const;
+  bool HasSubkeys() const;
+    // return true if any values exist
+  bool HasValues() const;
+    // return true if the key is empty (nothing under this key)
+  bool IsEmpty() const { return !HasSubkeys() && !HasValues(); }
 
   // enumerate values and subkeys
   bool  GetFirstValue(wxString& strValueName, long& lIndex);
index 99cc9465dc4121595ea5c6d00f81440fb931be27..6ec17a61ffbda5d682315be9c98b2d9b649ea6fe 100644 (file)
@@ -531,7 +531,7 @@ bool wxRegConfig::DeleteEntry(const wxString& value, bool bGroupIfEmptyAlso)
   if ( !m_keyLocal.DeleteValue(path.Name()) )
     return FALSE;
 
-  if ( !m_keyLocal.HasSubkeys() ) {
+  if ( m_keyLocal.IsEmpty() ) {
     wxString strKey = GetPath().AfterLast(wxCONFIG_PATH_SEPARATOR);
     SetPath("..");  // changes m_keyLocal
     return m_keyLocal.DeleteKey(strKey);
index fbdb35b0e852dfd05df94206d2f1fd477bbb2675..dca9790b5de68d6f10f5ce869f0cccf473288a22 100644 (file)
@@ -532,6 +532,18 @@ bool wxRegKey::HasValue(const wxChar *szValue) const
   #endif  // WIN16/32
 }
 
+// returns TRUE if this key has any values
+bool wxRegKey::HasValues() const
+{
+  // suppress possible messages from GetFirstValue()
+  wxLogNull nolog;
+  
+  // just call GetFirstValue with dummy parameters
+  wxString str;
+  long     l;
+  return CONST_CAST GetFirstValue(str, l);
+}
+
 // returns TRUE if this key has any subkeys
 bool wxRegKey::HasSubkeys() const
 {
@@ -718,8 +730,7 @@ bool wxRegKey::GetNextValue(wxString& strValueName, long& lIndex) const
     wxChar  szValueName[1024];                  // @@ use RegQueryInfoKey...
     DWORD dwValueLen = WXSIZEOF(szValueName);
 
-    lIndex++;
-    m_dwLastError = RegEnumValue((HKEY) m_hKey, lIndex,
+    m_dwLastError = RegEnumValue((HKEY) m_hKey, lIndex++,
                                  szValueName, &dwValueLen,
                                  RESERVED, 
                                  NULL,            // [out] type 
index afbb5f2ff22a1fdb4e31014690d5a7096f8de166..da9906d9881f95fa5d42527de4c3c2b930f0b68f 100644 (file)
@@ -121,7 +121,7 @@ void wxStaticText::DoSetSize(int x, int y, int width, int height, int sizeFlags)
     for ( const char *pc = text; ; pc++ ) {
         if ( *pc == '\n' || *pc == '\0' ) {
             GetTextExtent(curLine, &widthLine, &heightLine);
-            if ( width > widthTextMax )
+            if ( widthLine > widthTextMax )
                 widthTextMax = widthLine;
             heightTextTotal += heightLine;
 
index 9e27c1d6aae275f7826f59f7474c8f8e280b9ffa..ac5c4cac6dcf76ffc825c1532b8a2a2a134f4ac7 100644 (file)
@@ -1082,30 +1082,38 @@ void wxWindow::DoGetSize(int *x, int *y) const
 void wxWindow::DoGetPosition(int *x, int *y) const
 {
     HWND hWnd = GetHwnd();
-    HWND hParentWnd = 0;
-    if ( GetParent() )
-        hParentWnd = (HWND) GetParent()->GetHWND();
 
     RECT rect;
     GetWindowRect(hWnd, &rect);
 
-    // Since we now have the absolute screen coords, if there's a parent we
-    // must subtract its top left corner
     POINT point;
     point.x = rect.left;
     point.y = rect.top;
-    if ( hParentWnd )
-    {
-        ::ScreenToClient(hParentWnd, &point);
-    }
 
-    // We may be faking the client origin. So a window that's really at (0,
-    // 30) may appear (to wxWin apps) to be at (0, 0).
-    if ( GetParent() )
+    // we do the adjustments with respect to the parent only for the "real"
+    // children, not for the dialogs/frames
+    if ( !IsTopLevel() )
     {
-        wxPoint pt(GetParent()->GetClientAreaOrigin());
-        point.x -= pt.x;
-        point.y -= pt.y;
+        HWND hParentWnd = 0;
+        wxWindow *parent = GetParent();
+        if ( parent )
+            hParentWnd = GetWinHwnd(parent);
+
+        // Since we now have the absolute screen coords, if there's a parent we
+        // must subtract its top left corner
+        if ( hParentWnd )
+        {
+            ::ScreenToClient(hParentWnd, &point);
+        }
+
+        // We may be faking the client origin. So a window that's really at (0,
+        // 30) may appear (to wxWin apps) to be at (0, 0).
+        if ( parent )
+        {
+            wxPoint pt(parent->GetClientAreaOrigin());
+            point.x -= pt.x;
+            point.y -= pt.y;
+        }
     }
 
     if ( x )
@@ -1240,10 +1248,16 @@ wxPoint wxWindow::GetClientAreaOrigin() const
 // a toolbar that it manages itself).
 void wxWindow::AdjustForParentClientOrigin(int& x, int& y, int sizeFlags)
 {
-    if ( ((sizeFlags & wxSIZE_NO_ADJUSTMENTS) == 0) && GetParent() )
+    // don't do it for the dialogs/frames - they float independently of their
+    // parent
+    if ( !IsTopLevel() )
     {
-        wxPoint pt(GetParent()->GetClientAreaOrigin());
-        x += pt.x; y += pt.y;
+        wxWindow *parent = GetParent();
+        if ( !(sizeFlags & wxSIZE_NO_ADJUSTMENTS) && parent )
+        {
+            wxPoint pt(parent->GetClientAreaOrigin());
+            x += pt.x; y += pt.y;
+        }
     }
 }