diff --git a/src/osx/iphone/button.mm b/src/osx/iphone/button.mm new file mode 100644 index 0000000000..71a362daf6 --- /dev/null +++ b/src/osx/iphone/button.mm @@ -0,0 +1,177 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/osx/iphone/button.mm +// Purpose: wxButton +// Author: Stefan Csomor +// Modified by: +// Created: 1998-01-01 +// RCS-ID: $Id: button.cpp 54845 2008-07-30 14:52:41Z SC $ +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" + +#include "wx/button.h" + +#ifndef WX_PRECOMP + #include "wx/panel.h" + #include "wx/toplevel.h" + #include "wx/dcclient.h" +#endif + +#include "wx/stockitem.h" + +#include "wx/osx/private.h" + +wxSize wxButton::DoGetBestSize() const +{ + if ( GetId() == wxID_HELP ) + return wxSize( 18 , 18 ) ; + + wxSize sz = GetDefaultSize() ; + + wxRect r ; + + m_peer->GetBestRect(&r); + + if ( r.GetWidth() == 0 && r.GetHeight() == 0 ) + { + } + sz.x = r.GetWidth(); + sz.y = r.GetHeight(); + + int wBtn = 72; + + if ((wBtn > sz.x) || ( GetWindowStyle() & wxBU_EXACTFIT)) + sz.x = wBtn; + + return sz ; +} + +wxSize wxButton::GetDefaultSize() +{ + int wBtn = 72 ; + int hBtn = 35 ; + + return wxSize(wBtn, hBtn); +} + +@implementation wxUIButton + ++ (void)initialize +{ + static BOOL initialized = NO; + if (!initialized) + { + initialized = YES; + wxOSXIPhoneClassAddWXMethods( self ); + } +} + +- (int) intValue +{ + return 0; +} + +- (void) setIntValue: (int) v +{ +} + +@end + + +wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer, + wxWindowMac* WXUNUSED(parent), + wxWindowID id, + const wxString& WXUNUSED(label), + const wxPoint& pos, + const wxSize& size, + long WXUNUSED(style), + long WXUNUSED(extraStyle)) +{ + CGRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ; + UIButtonType buttonType = UIButtonTypeRoundedRect; + + if ( id == wxID_HELP ) + { + buttonType = UIButtonTypeInfoDark; + } + + UIButton* v = [[UIButton buttonWithType:buttonType] retain]; + v.frame = r; + wxWidgetIPhoneImpl* c = new wxWidgetIPhoneImpl( wxpeer, v ); + return c; +/* + OSStatus err; + Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ; + wxMacControl* peer = new wxMacControl(wxpeer) ; + if ( id == wxID_HELP ) + { + ControlButtonContentInfo info ; + info.contentType = kControlContentIconRef ; + GetIconRef(kOnSystemDisk, kSystemIconsCreator, kHelpIcon, &info.u.iconRef); + err = CreateRoundButtonControl( + MAC_WXHWND(parent->MacGetTopLevelWindowRef()), + &bounds, kControlRoundButtonNormalSize, + &info, peer->GetControlRefAddr() ); + } + else if ( label.Find('\n' ) == wxNOT_FOUND && label.Find('\r' ) == wxNOT_FOUND) + { + // Button height is static in Mac, can't be changed, so we need to force it here + int maxHeight; + switch (wxpeer->GetWindowVariant() ) + { + case wxWINDOW_VARIANT_NORMAL: + case wxWINDOW_VARIANT_LARGE: + maxHeight = 20 ; + break; + case wxWINDOW_VARIANT_SMALL: + maxHeight = 17; + case wxWINDOW_VARIANT_MINI: + maxHeight = 15; + default: + break; + } + bounds.bottom = bounds.top + maxHeight ; + wxpeer->SetMaxSize( wxSize( wxpeer->GetMaxWidth() , maxHeight )); + err = CreatePushButtonControl( + MAC_WXHWND(parent->MacGetTopLevelWindowRef()), + &bounds, CFSTR(""), peer->GetControlRefAddr() ); + } + else + { + ControlButtonContentInfo info ; + info.contentType = kControlNoContent ; + err = CreateBevelButtonControl( + MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds, CFSTR(""), + kControlBevelButtonLargeBevel, kControlBehaviorPushbutton, + &info, 0, 0, 0, peer->GetControlRefAddr() ); + } + verify_noerr( err ); + return peer; + */ +} + +void wxWidgetIPhoneImpl::SetDefaultButton( bool isDefault ) +{ +} + +void wxWidgetIPhoneImpl::PerformClick() +{ +} + +wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer, + wxWindowMac* WXUNUSED(parent), + wxWindowID WXUNUSED(id), + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long WXUNUSED(style), + long WXUNUSED(extraStyle)) +{ + CGRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ; + wxUIButton* v = [[wxUIButton alloc] initWithFrame:r]; + [v setTitle:wxCFStringRef( label).AsNSString() forState:UIControlStateNormal]; + wxWidgetIPhoneImpl* c = new wxWidgetIPhoneImpl( wxpeer, v ); + return c; +} diff --git a/src/osx/iphone/dialog.mm b/src/osx/iphone/dialog.mm new file mode 100644 index 0000000000..bab436b4ce --- /dev/null +++ b/src/osx/iphone/dialog.mm @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/osx/cocoa/dialog.cpp +// Purpose: wxDialog class +// Author: Stefan Csomor +// Modified by: +// Created: 1998-01-01 +// RCS-ID: $Id: dialog.cpp 54820 2008-07-29 20:04:11Z SC $ +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" + +#include "wx/dialog.h" + +#ifndef WX_PRECOMP + #include "wx/app.h" + #include "wx/utils.h" + #include "wx/frame.h" + #include "wx/settings.h" +#endif // WX_PRECOMP + +#include "wx/osx/private.h" + +extern wxList wxModalDialogs; + +void wxDialog::DoShowModal() +{ + wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") ); + + wxModalDialogs.Append(this); + + SetFocus() ; +/* + WindowGroupRef windowGroup; + WindowGroupRef formerParentGroup; + bool resetGroupParent = false; + + if ( GetParent() == NULL ) + { + windowGroup = GetWindowGroup(windowRef) ; + formerParentGroup = GetWindowGroupParent( windowGroup ); + SetWindowGroupParent( windowGroup, GetWindowGroupOfClass( kMovableModalWindowClass ) ); + resetGroupParent = true; + } +*/ + +/* + if ( resetGroupParent ) + { + SetWindowGroupParent( windowGroup , formerParentGroup ); + } +*/ +} diff --git a/src/osx/iphone/msgdlg.mm b/src/osx/iphone/msgdlg.mm new file mode 100644 index 0000000000..4567f105b0 --- /dev/null +++ b/src/osx/iphone/msgdlg.mm @@ -0,0 +1,138 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/osx/iphone/msgdlg.mm +// Purpose: wxMessageDialog +// Author: Stefan Csomor +// Modified by: +// Created: 04/01/98 +// RCS-ID: $Id: msgdlg.cpp 54129 2008-06-11 19:30:52Z SC $ +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#include "wx/wxprec.h" + +#include "wx/msgdlg.h" + +#ifndef WX_PRECOMP + #include "wx/intl.h" + #include "wx/app.h" +#endif + +#include "wx/thread.h" +#include "wx/osx/private.h" + + +IMPLEMENT_CLASS(wxMessageDialog, wxDialog) + + +wxMessageDialog::wxMessageDialog(wxWindow *parent, + const wxString& message, + const wxString& caption, + long style, + const wxPoint& WXUNUSED(pos)) + : wxMessageDialogWithCustomLabels(parent, message, caption, style) +{ +} + +int wxMessageDialog::ShowModal() +{ + int resultbutton = wxID_CANCEL; + + const long style = GetMessageDialogStyle(); + + // work out what to display + // if the extended text is empty then we use the caption as the title + // and the message as the text (for backwards compatibility) + // but if the extended message is not empty then we use the message as the title + // and the extended message as the text because that makes more sense + + wxString msgtitle,msgtext; + if(m_extendedMessage.IsEmpty()) + { + msgtitle = m_caption; + msgtext = m_message; + } + else + { + msgtitle = m_message; + msgtext = m_extendedMessage; + } + + wxCFStringRef cfNoString( GetNoLabel(), GetFont().GetEncoding() ); + wxCFStringRef cfYesString( GetYesLabel(), GetFont().GetEncoding() ); + wxCFStringRef cfOKString( GetOKLabel(), GetFont().GetEncoding() ); + wxCFStringRef cfCancelString( GetCancelLabel(), GetFont().GetEncoding() ); + + wxCFStringRef cfTitle( msgtitle, GetFont().GetEncoding() ); + wxCFStringRef cfText( msgtext, GetFont().GetEncoding() ); + + UIAlertView* alert = [[UIAlertView alloc] initWithTitle:cfTitle.AsNSString() message:cfText.AsNSString() delegate:nil cancelButtonTitle:nil otherButtonTitles:nil]; + + int buttonId[3] = { 0, 0, 0 }; + int buttonCount = 0; + + if (style & wxYES_NO) + { + if ( style & wxNO_DEFAULT ) + { + [alert addButtonWithTitle:cfNoString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_NO; + [alert addButtonWithTitle:cfYesString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_YES; + } + else + { + [alert addButtonWithTitle:cfYesString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_YES; + [alert addButtonWithTitle:cfNoString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_NO; + } + + if (style & wxCANCEL) + { + [alert addButtonWithTitle:cfCancelString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_CANCEL; + } + } + // the MSW implementation even shows an OK button if it is not specified, we'll do the same + else + { + [alert addButtonWithTitle:cfOKString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_OK; + if (style & wxCANCEL) + { + [alert addButtonWithTitle:cfCancelString.AsNSString()]; + buttonId[ buttonCount++ ] = wxID_CANCEL; + } + } + + + wxNonOwnedWindow* parentWindow = NULL; + int button = -1; + + if (GetParent()) + { + parentWindow = dynamic_cast(wxGetTopLevelParent(GetParent())); + } + +/* + if (parentWindow) + { + NSWindow* nativeParent = parentWindow->GetWXWindow(); + ModalDialogDelegate* sheetDelegate = [[ModalDialogDelegate alloc] init]; + [alert beginSheetModalForWindow: nativeParent modalDelegate: sheetDelegate + didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:) + contextInfo: nil]; + [sheetDelegate waitForSheetToFinish]; + button = [sheetDelegate code]; + [sheetDelegate release]; + } + else +*/ + { + [alert show]; + } + // [alert release]; + + return wxID_CANCEL; +}