]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/Install/builder/wxib.cpp
merged 2.2 branch
[wxWidgets.git] / utils / Install / builder / wxib.cpp
diff --git a/utils/Install/builder/wxib.cpp b/utils/Install/builder/wxib.cpp
new file mode 100644 (file)
index 0000000..73abbca
--- /dev/null
@@ -0,0 +1,647 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wxib.cpp
+// Purpose:     wxInstall Builder
+// Author:      Julian Smart
+// Author:      Brian Smith
+// Modified by:
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// For compilers that support precompilation, includes "wx/wx.h".
+#include <wx/wxprec.h>
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+    #include <wx/wx.h>
+#endif
+
+#include <wx/toolbar.h>
+#include <wx/log.h>
+#include <wx/image.h>
+
+// define this to 1 to use wxToolBarSimple instead of the native one
+#define USE_GENERIC_TBAR 0
+
+#if USE_GENERIC_TBAR
+    #if !wxUSE_TOOLBAR_SIMPLE
+        #error wxToolBarSimple is not compiled in, set wxUSE_TOOLBAR_SIMPLE \
+               to 1 in setup.h and recompile the library.
+    #else
+        #include <wx/tbarsmpl.h>
+    #endif
+#endif // USE_GENERIC_TBAR
+
+// ----------------------------------------------------------------------------
+// resources
+// ----------------------------------------------------------------------------
+
+#if defined(__WXGTK__) || defined(__WXMOTIF__)
+    #include "mondrian.xpm"
+    #include "bitmaps/new.xpm"
+    #include "bitmaps/open.xpm"
+    #include "bitmaps/save.xpm"
+    #include "bitmaps/copy.xpm"
+    #include "bitmaps/cut.xpm"
+    #include "bitmaps/preview.xpm"  // paste XPM
+    #include "bitmaps/print.xpm"
+    #include "bitmaps/help.xpm"
+#endif // GTK or Motif
+
+char appName[] = "wxInstall Builder";
+
+// ----------------------------------------------------------------------------
+// classes
+// ----------------------------------------------------------------------------
+
+// Define a new application
+class MyApp : public wxApp
+{
+public:
+    bool OnInit();
+};
+
+// Define a new frame
+class MyFrame: public wxFrame
+{
+public:
+    MyFrame(wxFrame *parent,
+            wxWindowID id = -1,
+            const wxString& title = "wxInstall Builder",
+            const wxPoint& pos = wxDefaultPosition,
+            const wxSize& size = wxDefaultSize,
+            long style = wxDEFAULT_FRAME_STYLE);
+
+    void RecreateToolbar();
+
+    void OnQuit(wxCommandEvent& event);
+    void OnAbout(wxCommandEvent& event);
+
+       void OnNewScript(wxCommandEvent& event);
+       void OnOpenScript(wxCommandEvent& event);
+       void OnSaveScript(wxCommandEvent& event);
+       void OnNewProject(wxCommandEvent& event);
+       void OnOpenProject(wxCommandEvent& event);
+       void OnSaveProject(wxCommandEvent& event);
+
+    void OnCut(wxCommandEvent& event);
+    void OnCopy(wxCommandEvent& event);
+    void OnPaste(wxCommandEvent& event);
+
+    void OnListBoxDoubleClick(wxCommandEvent& event);
+
+#if USE_GENERIC_TBAR
+    virtual wxToolBar *OnCreateToolBar(long style,
+                                       wxWindowID id,
+                                       const wxString& name );
+#endif // USE_GENERIC_TBAR
+
+private:
+    bool                m_smallToolbar,
+                        m_horzToolbar;
+    size_t              m_rows;             // 1 or 2 only
+
+    wxTextCtrl*         m_textWindow;
+       wxListBox*          m_listBox;
+
+    DECLARE_EVENT_TABLE()
+};
+
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+const int ID_TOOLBAR = 500;
+
+enum
+{
+       ID_COMBO = 1000,
+       ID_LISTBOX,
+    wxID_NEW_SCRIPT,
+       wxID_SAVE_SCRIPT,
+       wxID_OPEN_SCRIPT,
+       wxID_NEW_PROJECT,
+       wxID_SAVE_PROJECT,
+    wxID_OPEN_PROJECT
+};
+
+// ----------------------------------------------------------------------------
+// event tables
+// ----------------------------------------------------------------------------
+
+// Notice that wxID_HELP will be processed for the 'About' menu and the toolbar
+// help button.
+
+BEGIN_EVENT_TABLE(MyFrame, wxFrame)
+    EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
+    EVT_MENU(wxID_HELP, MyFrame::OnAbout)
+
+    EVT_MENU(wxID_NEW_SCRIPT, MyFrame::OnNewScript)
+    EVT_MENU(wxID_OPEN_SCRIPT, MyFrame::OnOpenScript)
+    EVT_MENU(wxID_SAVE_SCRIPT, MyFrame::OnSaveScript)
+    EVT_MENU(wxID_NEW_PROJECT, MyFrame::OnNewProject)
+    EVT_MENU(wxID_OPEN_PROJECT, MyFrame::OnOpenProject)
+    EVT_MENU(wxID_SAVE_PROJECT, MyFrame::OnSaveProject)
+
+    EVT_MENU(wxID_CUT, MyFrame::OnCut)
+    EVT_MENU(wxID_COPY, MyFrame::OnCopy)
+    EVT_MENU(wxID_PASTE, MyFrame::OnPaste)
+
+    EVT_LISTBOX_DCLICK(ID_LISTBOX, MyFrame::OnListBoxDoubleClick)
+END_EVENT_TABLE()
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// MyApp
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_APP(MyApp)
+
+// The `main program' equivalent, creating the windows and returning the
+// main frame
+bool MyApp::OnInit()
+{
+    // Create the main frame window
+    MyFrame* frame = new MyFrame((wxFrame *) NULL, -1,
+                                 "wxInstall Builder",
+                                 wxPoint(100, 100), wxSize(450, 300));
+
+       frame->SetAutoLayout(TRUE);
+
+    frame->Show(TRUE);
+
+    frame->SetStatusText("Welcome to wxWindows Install Builder");
+
+    SetTopWindow(frame);
+
+    return TRUE;
+}
+
+void MyFrame::RecreateToolbar()
+{
+    // delete and recreate the toolbar
+    wxToolBarBase *toolBar = GetToolBar();
+    delete toolBar;
+
+    SetToolBar(NULL);
+
+    long style = wxNO_BORDER | wxTB_FLAT | wxTB_DOCKABLE;
+    style |= m_horzToolbar ? wxTB_HORIZONTAL : wxTB_VERTICAL;
+
+    toolBar = CreateToolBar(style, ID_TOOLBAR);
+    toolBar->SetMargins( 4, 4 );
+
+    // Set up toolbar
+    wxBitmap toolBarBitmaps[8];
+
+    toolBarBitmaps[0] = wxBITMAP(new);
+    toolBarBitmaps[1] = wxBITMAP(open);
+    toolBarBitmaps[2] = wxBITMAP(save);
+    toolBarBitmaps[3] = wxBITMAP(copy);
+    toolBarBitmaps[4] = wxBITMAP(cut);
+    toolBarBitmaps[5] = wxBITMAP(paste);
+    toolBarBitmaps[6] = wxBITMAP(print);
+    toolBarBitmaps[7] = wxBITMAP(help);
+
+    if ( !m_smallToolbar )
+    {
+        int w = 2*toolBarBitmaps[0].GetWidth(),
+            h = 2*toolBarBitmaps[0].GetHeight();
+        for ( size_t n = 0; n < WXSIZEOF(toolBarBitmaps); n++ )
+        {
+            toolBarBitmaps[n] =
+                wxImage(toolBarBitmaps[n]).Scale(w, h).ConvertToBitmap();
+        }
+
+        toolBar->SetToolBitmapSize(wxSize(w, h));
+    }
+
+#ifdef __WXMSW__
+    int width = 24;
+#else
+    int width = 16;
+#endif
+
+    int currentX = 5;
+
+    toolBar->AddTool(wxID_NEW_SCRIPT, toolBarBitmaps[0], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "New script");
+    currentX += width + 5;
+       toolBar->AddTool(wxID_OPEN_SCRIPT, toolBarBitmaps[1], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Open script");
+
+    // neither the generic nor Motif native toolbars really support this
+    currentX += width + 5;
+    toolBar->AddTool(wxID_SAVE_SCRIPT, toolBarBitmaps[2], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Save script");
+    currentX += width + 5;
+    toolBar->AddTool(wxID_COPY, toolBarBitmaps[3], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Copy");
+    currentX += width + 5;
+    toolBar->AddTool(wxID_CUT, toolBarBitmaps[4], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Cut");
+    currentX += width + 5;
+    toolBar->AddTool(wxID_PASTE, toolBarBitmaps[5], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Paste");
+    currentX += width + 5;
+    toolBar->AddSeparator();
+    toolBar->AddTool(wxID_HELP, toolBarBitmaps[7], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Help button");
+
+    // after adding the buttons to the toolbar, must call Realize() to reflect
+    // the changes
+    toolBar->Realize();
+
+    toolBar->SetRows(m_horzToolbar ? m_rows : 10 / m_rows);
+}
+
+// ----------------------------------------------------------------------------
+// MyFrame
+// ----------------------------------------------------------------------------
+
+// Define my frame constructor
+MyFrame::MyFrame(wxFrame* parent,
+                 wxWindowID id,
+                 const wxString& title,
+                 const wxPoint& pos,
+                 const wxSize& size,
+                 long style)
+       : wxFrame(parent, id, title, pos, size, style)
+{
+       m_listBox = new wxListBox(this, ID_LISTBOX, wxPoint(0,0), wxSize(-1, -1));
+
+       m_listBox->Append("loadwxr");
+       m_listBox->Append("closeold");
+       m_listBox->Append("mleview");
+       m_listBox->Append("setbutton");
+       m_listBox->Append("getcheck");
+       m_listBox->Append("message");
+       m_listBox->Append("disable");
+       m_listBox->Append("settext");
+       m_listBox->Append("gettext");
+       m_listBox->Append("grabfile");
+       m_listBox->Append("remove");
+       m_listBox->Append("system");
+       m_listBox->Append("startinst");
+
+       wxLayoutConstraints *b1 = new wxLayoutConstraints;
+       b1->left.SameAs       (this, wxLeft, 0);
+       b1->top.SameAs        (this, wxTop, 0);
+       b1->width.PercentOf   (this, wxWidth, 20);
+       b1->bottom.SameAs     (this, wxBottom, 0);
+       m_listBox->SetConstraints(b1);
+
+       m_textWindow = new wxTextCtrl(this, -1, "", wxPoint(0,0), wxSize(-1, -1), wxTE_MULTILINE);
+
+       m_textWindow->AppendText("; Script generated by wxInstall Builder\n");
+
+       wxLayoutConstraints *b2 = new wxLayoutConstraints;
+       b2->top.SameAs        (this, wxTop, 0);
+       b2->left.SameAs       (m_listBox, wxRight, 0);
+       b2->width.PercentOf   (this, wxWidth, 80);
+       b2->bottom.SameAs     (this, wxBottom, 0);
+       m_textWindow->SetConstraints(b2);
+
+       m_smallToolbar = TRUE;
+    m_horzToolbar = TRUE;
+    m_rows = 1;
+
+    // Give it a status line
+    CreateStatusBar();
+
+    // Give it an icon
+    SetIcon(wxICON(mondrian));
+
+    wxMenu *fileMenu = new wxMenu;
+    fileMenu->Append(wxID_NEW_SCRIPT, "&New Script", "New wxInstall Script" );
+    fileMenu->Append(wxID_OPEN_SCRIPT, "&Open Script", "Open wxInstall Script" );
+    fileMenu->Append(wxID_SAVE_SCRIPT, "&Save Script", "Save wxInstall Script" );
+    fileMenu->AppendSeparator();
+    /*fileMenu->Append(wxID_NEW_PROJECT, "N&ew Project", "New wxInstall Project" );
+    fileMenu->Append(wxID_OPEN_PROJECT, "O&pen Project", "Open wxInstall Project" );
+    fileMenu->Append(wxID_SAVE_PROJECT, "S&ave Project", "Save wxInstall Project" );
+    fileMenu->AppendSeparator();*/
+    fileMenu->Append(wxID_EXIT, "E&xit", "Quit wxInstall Builder" );
+
+    wxMenu *helpMenu = new wxMenu;
+    helpMenu->Append(wxID_HELP, "&About", "About wxInstall Builder");
+
+    wxMenuBar* menuBar = new wxMenuBar( wxMB_DOCKABLE );
+
+    menuBar->Append(fileMenu, "&File");
+    menuBar->Append(helpMenu, "&Help");
+
+    // Associate the menu bar with the frame
+    SetMenuBar(menuBar);
+
+    // Create the toolbar
+    RecreateToolbar();
+}
+
+#if USE_GENERIC_TBAR
+
+wxToolBar* MyFrame::OnCreateToolBar(long style,
+                                    wxWindowID id,
+                                    const wxString& name)
+{
+    return (wxToolBar *)new wxToolBarSimple(this, id,
+                                            wxDefaultPosition, wxDefaultSize,
+                                            style, name);
+}
+
+#endif // USE_GENERIC_TBAR
+
+void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
+{
+    Close(TRUE);
+}
+
+void MyFrame::OnCut(wxCommandEvent& WXUNUSED(event))
+{
+    m_textWindow->Cut();
+}
+
+void MyFrame::OnCopy(wxCommandEvent& WXUNUSED(event))
+{
+    m_textWindow->Copy();
+}
+
+void MyFrame::OnPaste(wxCommandEvent& WXUNUSED(event))
+{
+    m_textWindow->Paste();
+}
+
+void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
+{
+    (void)wxMessageBox("wxInstall Builder by Brian Smith", "About wxInstall Builder");
+}
+
+void MyFrame::OnNewScript(wxCommandEvent& event)
+{
+    m_textWindow->Clear();
+       m_textWindow->AppendText("; Script generated by wxInstall Builder\n");
+}
+
+void MyFrame::OnOpenScript(wxCommandEvent& event)
+{
+       wxFileDialog dialog2(this, "Open Script", "", "", "*.ini", 0);
+
+       if (dialog2.ShowModal() == wxID_OK)
+               m_textWindow->LoadFile(dialog2.GetPath());
+}
+
+void MyFrame::OnSaveScript(wxCommandEvent& event)
+{
+       wxFileDialog dialog2(this, "Save Script", "", "", "*.ini", 0);
+
+       if (dialog2.ShowModal() == wxID_OK)
+               m_textWindow->SaveFile(dialog2.GetPath());
+}
+
+void MyFrame::OnNewProject(wxCommandEvent& event)
+{
+}
+
+void MyFrame::OnOpenProject(wxCommandEvent& event)
+{
+}
+
+void MyFrame::OnSaveProject(wxCommandEvent& event)
+{
+}
+
+void MyFrame::OnListBoxDoubleClick( wxCommandEvent &event )
+{
+       int item;
+
+       item = m_listBox->GetSelection();
+
+       switch(item)
+       {
+       case 0:
+               {
+                       wxFileDialog dialog2(this, "Choose wxr filename", "", "", "*.wxr", 0);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               char tempbuf[1024] = "DialogEd ";
+                               wxString tmp = dialog2.GetFilename();
+
+                               m_textWindow->WriteText("loadwxr,");
+                               m_textWindow->WriteText(tmp);
+                               m_textWindow->WriteText("\n");
+
+                               strcat(tempbuf, tmp);
+                               wxExecute(tempbuf);
+                       }
+               }
+               break;
+       case 1:
+               {
+                       m_textWindow->WriteText("closeold\n");
+               }
+               break;
+       case 2:
+               {
+                       wxFileDialog dialog2(this, "Choose filename to view", "", "", "*.txt", 0);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               wxTextEntryDialog dialog3(this,
+                                                                                 "Please enter name of the MLE widget",
+                                                                                 appName,
+                                                                                 "",
+                                                                                 wxOK | wxCANCEL);
+
+                               if (dialog3.ShowModal() == wxID_OK)
+                               {
+                                       m_textWindow->WriteText("mleview,");
+                                       m_textWindow->WriteText(dialog3.GetValue());
+                                       m_textWindow->WriteText(",");
+                                       m_textWindow->WriteText(dialog2.GetFilename());
+                                       m_textWindow->WriteText("\n");
+                               }
+                       }
+               }
+               break;
+       case 3:
+               {
+                       wxFileDialog dialog2(this, "Choose script to attach to button", "", "", "*.ini", 0);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               wxTextEntryDialog dialog3(this,
+                                                                                 "Please enter ID of the button",
+                                                                                 appName,
+                                                                                 "",
+                                                                                 wxOK | wxCANCEL);
+
+                               if (dialog3.ShowModal() == wxID_OK)
+                               {
+                                       m_textWindow->WriteText("setbutton,");
+                                       m_textWindow->WriteText(dialog3.GetValue());
+                                       m_textWindow->WriteText(",");
+                                       m_textWindow->WriteText(dialog2.GetFilename());
+                                       m_textWindow->WriteText("\n");
+                               }
+                       }
+               }
+               break;
+       case 4:
+               {
+                       wxFileDialog dialog2(this, "Choose script to run if not checked", "", "", "*.ini", 0);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               wxTextEntryDialog dialog3(this,
+                                                                                 "Please enter name of the checkbox widget",
+                                                                                 appName,
+                                                                                 "",
+                                                                                 wxOK | wxCANCEL);
+
+                               if (dialog3.ShowModal() == wxID_OK)
+                               {
+                                       m_textWindow->WriteText("getcheck,");
+                                       m_textWindow->WriteText(dialog3.GetValue());
+                                       m_textWindow->WriteText(",");
+                                       m_textWindow->WriteText(dialog2.GetFilename());
+                                       m_textWindow->WriteText("\n");
+                               }
+                       }
+               }
+               break;
+       case 5:
+               {
+                       wxTextEntryDialog dialog2(this,
+                                                                         "Please enter the message to display to the user",
+                                                                         appName,
+                                                                         "",
+                                                                         wxOK | wxCANCEL);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               m_textWindow->WriteText("message,\"");
+                               m_textWindow->WriteText(dialog2.GetValue());
+                               m_textWindow->WriteText("\"\n");
+                       }
+               }
+               break;
+       case 6:
+               {
+                       wxTextEntryDialog dialog2(this,
+                                                                         "Please enter the widget name to disable",
+                                                                         appName,
+                                                                         "",
+                                                                         wxOK | wxCANCEL);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               m_textWindow->WriteText("disable,");
+                               m_textWindow->WriteText(dialog2.GetValue());
+                               m_textWindow->WriteText("\n");
+                       }
+               }
+               break;
+       case 7:
+               {
+                       wxTextEntryDialog dialog2(this,
+                                                                         "Please enter text widget name to set from",
+                                                                         appName,
+                                                                         "",
+                                                                         wxOK | wxCANCEL);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               m_textWindow->WriteText("settext,");
+                               m_textWindow->WriteText(dialog2.GetValue());
+                               m_textWindow->WriteText("\n");
+                       }
+               }
+               break;
+       case 8:
+               {
+                       wxTextEntryDialog dialog2(this,
+                                                                         "Please enter text widget name to get from",
+                                                                         appName,
+                                                                         "",
+                                                                         wxOK | wxCANCEL);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               m_textWindow->WriteText("gettext,");
+                               m_textWindow->WriteText(dialog2.GetValue());
+                               m_textWindow->WriteText("\n");
+                       }
+               }
+               break;
+       case 9:
+               {
+                       wxFileDialog dialog2(this, "Choose file to grab", "", "", "*", 0);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               m_textWindow->WriteText("grabfile,");
+                               m_textWindow->WriteText(dialog2.GetFilename());
+                               m_textWindow->WriteText("\n");
+                       }
+               }
+               break;
+       case 10:
+               {
+                       wxFileDialog dialog2(this, "Choose file to remove", "", "", "*", 0);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               m_textWindow->WriteText("remove,");
+                               m_textWindow->WriteText(dialog2.GetFilename());
+                               m_textWindow->WriteText("\n");
+                       }
+               }
+               break;
+       case 11:
+               {
+                       wxTextEntryDialog dialog2(this,
+                                                                         "Please enter the command to execute",
+                                                                         appName,
+                                                                         "",
+                                                                         wxOK | wxCANCEL);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               m_textWindow->WriteText("system,");
+                               m_textWindow->WriteText(dialog2.GetValue());
+                               m_textWindow->WriteText("\n");
+                       }
+               }
+               break;
+       case 12:
+               {
+                       wxFileDialog dialog2(this, "Choose script to run at installation completion", "", "", "*.ini", 0);
+
+                       if (dialog2.ShowModal() == wxID_OK)
+                       {
+                               wxTextEntryDialog dialog3(this,
+                                                                                 "Please enter name of the gauge widget",
+                                                                                 appName,
+                                                                                 "",
+                                                                                 wxOK | wxCANCEL);
+
+                               if (dialog3.ShowModal() == wxID_OK)
+                               {
+                                       m_textWindow->WriteText("startinst,");
+                                       m_textWindow->WriteText(dialog3.GetValue());
+                                       m_textWindow->WriteText(",");
+                                       m_textWindow->WriteText(dialog2.GetFilename());
+                                       m_textWindow->WriteText("\n");
+                               }
+                       }
+               }
+               break;
+       }
+}