summaryrefslogtreecommitdiff
path: root/TAO/utils/wxNamingViewer/wxViewIORDialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/utils/wxNamingViewer/wxViewIORDialog.cpp')
-rw-r--r--TAO/utils/wxNamingViewer/wxViewIORDialog.cpp269
1 files changed, 269 insertions, 0 deletions
diff --git a/TAO/utils/wxNamingViewer/wxViewIORDialog.cpp b/TAO/utils/wxNamingViewer/wxViewIORDialog.cpp
new file mode 100644
index 00000000000..6c87e29d5cf
--- /dev/null
+++ b/TAO/utils/wxNamingViewer/wxViewIORDialog.cpp
@@ -0,0 +1,269 @@
+// @file wxViewIORDialog.cpp
+//
+// @author Charlie Frasch <cfrasch@atdesk.com>
+//
+// $Id$
+
+#include "pch.h"
+#include "wxViewIORDialog.h"
+
+#include "tao/Profile.h"
+#include "tao/Stub.h"
+#include "wx/sizer.h"
+#include "wx/textctrl.h"
+#include "wx/treectrl.h"
+#include "wxNamingViewer.h"
+#include "ace/SString.h"
+
+namespace // anonymous
+{
+ void create_dialog_components( wxDialog* dialog)
+ {
+ wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL);
+
+ {
+ wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL);
+ sizer->Add(
+ new wxStaticText( dialog, -1, "IOR:" ),
+ 0,
+ wxALL,
+ 5);
+ wxTextCtrl* iorText = new wxTextCtrl(
+ dialog,
+ IDC_IOR
+ );
+ iorText->SetName( "iorText");
+ sizer->Add(
+ iorText,
+ 1,
+ wxALL,
+ 5);
+ topsizer->Add(
+ sizer,
+ 0,
+ wxALIGN_LEFT | wxEXPAND);
+ }
+
+ {
+ wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL);
+ sizer->Add(
+ new wxStaticText( dialog, -1, "Repository ID:" ),
+ 0,
+ wxALL,
+ 5);
+ wxTextCtrl* typeID = new wxTextCtrl(
+ dialog,
+ IDC_TYPE_ID
+ );
+ typeID->SetName( "typeIDText");
+ sizer->Add(
+ typeID,
+ 1,
+ wxALL,
+ 5);
+ topsizer->Add(
+ sizer,
+ 0,
+ wxALIGN_LEFT | wxEXPAND);
+ }
+
+ {
+ wxTreeCtrl* profiles = new wxTreeCtrl(
+ dialog,
+ IDC_PROFILES,
+ wxDefaultPosition,
+ wxSize( 675, 140)
+ );
+ profiles->SetName( "profilesTree");
+ topsizer->Add(
+ profiles,
+ 1,
+ wxALL | wxEXPAND,
+ 5);
+ }
+
+ wxBoxSizer* button_sizer = new wxBoxSizer( wxHORIZONTAL);
+ {
+ wxButton* okButton = new wxButton( dialog, wxID_OK, "OK" );
+ okButton->SetName( "okButton");
+ button_sizer->Add(
+ okButton,
+ 0,
+ wxALL,
+ 5);
+ }
+ {
+ wxButton* applyButton = new wxButton( dialog, wxID_APPLY, "Apply" );
+ applyButton->SetName( "applyButton");
+ button_sizer->Add(
+ applyButton,
+ 0,
+ wxALL,
+ 5);
+ }
+ {
+ button_sizer->Add(
+ new wxButton( dialog, wxID_CANCEL, "Cancel" ),
+ 0,
+ wxALL,
+ 5);
+ }
+ topsizer->Add(
+ button_sizer,
+ 0,
+ wxALIGN_CENTER);
+
+ dialog->SetSizer( topsizer);
+ topsizer->SetSizeHints( dialog);
+ }
+
+}; // anonymous
+
+BEGIN_EVENT_TABLE( WxViewIORDialog, wxDialog)
+ EVT_BUTTON( wxID_APPLY, WxViewIORDialog::OnApply)
+ EVT_TEXT( IDC_IOR, WxViewIORDialog::onIORText)
+END_EVENT_TABLE()
+
+
+WxViewIORDialog::WxViewIORDialog(
+ CORBA::ORB_ptr orb,
+ CORBA::Object_ptr object,
+ wxWindow* parent)
+#if defined(wxUSE_RESOURCES) && (wxUSE_RESOURCES == 1)
+ : wxDialog()
+#else
+ : wxDialog(
+ parent,
+ IDD_NAMINGVIEWER_DIALOG,
+ "View IOR",
+ wxDefaultPosition,
+ wxSize(394,127),
+ wxRAISED_BORDER | wxCAPTION | wxTHICK_FRAME | wxSYSTEM_MENU,
+ "viewIOR")
+#endif // defined(wxUSE_RESOURCES) && (wxUSE_RESOURCES == 1)
+ , orb( orb)
+{
+#if defined(wxUSE_RESOURCES) && (wxUSE_RESOURCES == 1)
+ LoadFromResource( parent, "viewIOR");
+#else
+ create_dialog_components( this);
+#endif // defined(wxUSE_RESOURCES) && (wxUSE_RESOURCES == 1)
+ iorText = static_cast<wxTextCtrl*>( wxFindWindowByName(
+ "iorText",
+ this));
+ assert( iorText);
+ typeIDText = static_cast<wxTextCtrl*>( wxFindWindowByName(
+ "typeIDText",
+ this));
+ assert( typeIDText);
+ profiles = static_cast<wxTreeCtrl*>( wxFindWindowByName(
+ "profilesTree",
+ this));
+ assert( typeIDText);
+ wxButton* ctrl = static_cast<wxButton*>( wxFindWindowByName(
+ "okButton",
+ this));
+ assert( ctrl);
+ ctrl->SetDefault();
+ applyButton = static_cast<wxButton*>( wxFindWindowByName(
+ "applyButton",
+ this));
+ assert( applyButton);
+ applyButton->Enable( false);
+
+ if (object != CORBA::Object::_nil()) {
+
+ WxViewIORDialog::object = CORBA::Object::_duplicate( object);
+
+ }
+ CORBA::String_var ior = orb->object_to_string( object);
+ WxViewIORDialog::ior = ior;
+ decodeIOR();
+}
+
+
+void WxViewIORDialog::decodeIOR()
+{
+ profiles->DeleteAllItems();
+
+ // if object is nil, return out
+ if(CORBA::is_nil( object.in())) {
+
+ typeID = "";
+ TransferDataToWindow();
+ return;
+
+ }
+
+ // Get the stub
+ TAO_Stub* stub = object->_stubobj();
+ const char* type = stub->type_id;
+ typeID = type ? type : ""; // special case for INS objects, tao doesn't get the type id
+ TransferDataToWindow();
+
+ // Iterate through each profile and add an entry to the tree control
+ const TAO_MProfile& baseProfiles = stub->base_profiles();
+ CORBA::ULong count = baseProfiles.profile_count();
+ wxTreeItemId rootItem = profiles->AddRoot( "Profiles");
+ for( CORBA::ULong slot = 0; slot < count; slot++) {
+
+ const TAO_Profile* profile = baseProfiles.get_profile( slot);
+ try{
+
+ // The need to const_cast should disappear in TAO 1.1.2 BUT IT DIDN'T
+ char* profileString =
+ const_cast<TAO_Profile*>(profile)->to_string();
+ profiles->AppendItem( rootItem, profileString);
+ delete [] profileString;
+
+ } catch (const CORBA::Exception& ex) {
+
+ wxMessageBox( ex._info().c_str(), "CORBA::Exception");
+
+ }
+
+ }
+ profiles->Expand( rootItem);
+}
+
+
+void WxViewIORDialog::OnApply( wxCommandEvent& event)
+{
+ wxDialog::OnApply( event);
+ try {
+
+ object = orb->string_to_object( ior);
+ decodeIOR();
+
+ } catch( CORBA::Exception& ex) {
+
+ wxMessageBox( ex._info().c_str(), "CORBA::Exception");
+ }
+}
+
+
+void WxViewIORDialog::onIORText( wxCommandEvent& event)
+{
+ // Enable the Apply button if the IOR has changed
+ if (event.GetString() != ior) {
+
+ applyButton->Enable( true);
+
+ }
+}
+
+
+bool WxViewIORDialog::TransferDataFromWindow()
+{
+ ior = iorText->GetValue();
+ return true;
+}
+
+
+bool WxViewIORDialog::TransferDataToWindow()
+{
+ iorText->SetValue( ior);
+ typeIDText->SetValue( typeID);
+ return true;
+}
+