Update of /cvsroot/audacity/lib-src/FileDialog/gtk
In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv617/FileDialog/gtk

Added Files:
        FileDialog.h FileDialog.hpp private.h 
Log Message:
New FileDialog (modified wx(Generic)FileDialog actually) that adds support
for an extra button.  (All this just for one little old button... ;-))


--- NEW FILE: FileDialog.h ---
/////////////////////////////////////////////////////////////////////////////
// Name:        filedlg.h
// Purpose:
// Author:      Robert Roebling
// Id:          $Id: FileDialog.h,v 1.1 2007/04/06 10:16:52 llucius Exp $
// Copyright:   (c) 1998 Robert Roebling
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////


#ifndef __FILEDIALOGGTKH__
#define __FILEDIALOGGTKH__

#include "wx/generic/filedlgg.h"

//-------------------------------------------------------------------------
// FileDialog
//-------------------------------------------------------------------------

class WXDLLIMPEXP_CORE FileDialog: public wxGenericFileDialog
{
public:
    FileDialog() { }

    FileDialog(wxWindow *parent,
                 const wxString& message = wxFileSelectorPromptStr,
                 const wxString& defaultDir = wxEmptyString,
                 const wxString& defaultFile = wxEmptyString,
                 const wxString& wildCard = wxFileSelectorDefaultWildcardStr,
                 long style = 0,
                 const wxPoint& pos = wxDefaultPosition);

    virtual ~FileDialog();

    virtual wxString GetPath() const;
    virtual void GetPaths(wxArrayString& paths) const;
    virtual wxString GetDirectory() const;
    virtual wxString GetFilename() const;
    virtual void GetFilenames(wxArrayString& files) const;
    virtual int GetFilterIndex() const;

    virtual void SetMessage(const wxString& message);
    virtual void SetPath(const wxString& path);
    virtual void SetDirectory(const wxString& dir);
    virtual void SetFilename(const wxString& name);
    virtual void SetWildcard(const wxString& wildCard);
    virtual void SetFilterIndex(int filterIndex);

    virtual int ShowModal();
    virtual bool Show( bool show = true );

//private:
    bool m_destroyed_by_delete;

    // override this from wxTLW since the native
    // form doesn't have any m_wxwindow
    virtual void DoSetSize(int x, int y,
                           int width, int height,
                           int sizeFlags = wxSIZE_AUTO);

   virtual void EnableButton(wxString label, fdCallback cb, void *cbdata);
   virtual void ClickButton(int index);
   
private:
    DECLARE_DYNAMIC_CLASS(FileDialog)
    DECLARE_EVENT_TABLE()
    void OnFakeOk( wxCommandEvent &event );

    wxString m_buttonlabel;
    fdCallback m_callback;
    void *m_cbdata;
};

#endif

--- NEW FILE: FileDialog.hpp ---
/////////////////////////////////////////////////////////////////////////////
// Name:        gtk/filedlg.cpp
// Purpose:     native implementation of FileDialog
// Author:      Robert Roebling, Zbigniew Zagorski, Mart Raudsepp
// Id:          $Id: FileDialog.hpp,v 1.1 2007/04/06 10:16:52 llucius Exp $
// Copyright:   (c) 1998 Robert Roebling, 2004 Zbigniew Zagorski, 2005 Mart 
Raudsepp
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
// Modified to support and additional button
/////////////////////////////////////////////////////////////////////////////

// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"

// Include setup.h to get wxUSE flags for compilers that do not support 
precompilation of headers
#include "wx/setup.h"

#include "FileDialog.h"

#if defined(__WXGTK24__) && (!defined(__WXGPE__))

#include <gtk/gtk.h>
#include "private.h"

#include <unistd.h> // chdir

#include "wx/intl.h"
#include "wx/filename.h" // wxFilename
#include "wx/tokenzr.h" // wxStringTokenizer
#include "wx/filefn.h" // ::wxGetCwd
#include "wx/msgdlg.h" // wxMessageDialog

//-----------------------------------------------------------------------------
// idle system
//-----------------------------------------------------------------------------

extern void wxapp_install_idle_handler();

//-----------------------------------------------------------------------------
// "clicked" for OK-button
//-----------------------------------------------------------------------------

extern "C" {
static void gtk_filedialog_ok_callback(GtkWidget *widget, FileDialog *dialog)
{
    int style = dialog->GetStyle();
    gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));

    // gtk version numbers must be identical with the one in ctor (that calls 
set_do_overwrite_confirmation)
#if GTK_CHECK_VERSION(2,7,3)
    if(gtk_check_version(2,7,3) != NULL)
#endif
    if ((style & wxSAVE) && (style & wxOVERWRITE_PROMPT))
    {
        if ( g_file_test(filename, G_FILE_TEST_EXISTS) )
        {
            wxString msg;

            msg.Printf(
                _("File '%s' already exists, do you really want to overwrite 
it?"),
                wxString(wxConvFileName->cMB2WX(filename)).c_str());

            wxMessageDialog dlg(dialog, msg, _("Confirm"),
                               wxYES_NO | wxICON_QUESTION);
            if (dlg.ShowModal() != wxID_YES)
                return;
        }
    }

    // change to the directory where the user went if asked
    if (style & wxCHANGE_DIR)
    {
        // Use chdir to not care about filename encodings
        gchar* folder = g_path_get_dirname(filename);
        chdir(folder);
        g_free(folder);
    }

    g_free(filename);

    wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
    event.SetEventObject(dialog);
    dialog->GetEventHandler()->ProcessEvent(event);
}
}

//-----------------------------------------------------------------------------
// "clicked" for Cancel-button
//-----------------------------------------------------------------------------

extern "C" {
static void gtk_filedialog_cancel_callback(GtkWidget *WXUNUSED(w),
                                           FileDialog *dialog)
{
    wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
    event.SetEventObject(dialog);
    dialog->GetEventHandler()->ProcessEvent(event);
}
}

extern "C" {
static void gtk_filedialog_response_callback(GtkWidget *w,
                                             gint response,
                                             FileDialog *dialog)
{
    wxapp_install_idle_handler();

    if (response == GTK_RESPONSE_ACCEPT)
        gtk_filedialog_ok_callback(w, dialog);
    else if (response == GTK_RESPONSE_CANCEL)
        gtk_filedialog_cancel_callback(w, dialog);
    else // "delete"
    {
        gtk_filedialog_cancel_callback(w, dialog);
        dialog->m_destroyed_by_delete = true;
    }
}
}

//-----------------------------------------------------------------------------
// "clicked" for extra-button
//-----------------------------------------------------------------------------

extern "C" {
static void gtk_filedialog_extra_callback(GtkWidget *WXUNUSED(w),
                                          FileDialog *dialog)
{
    dialog->ClickButton(dialog->GetFilterIndex());
}
}

#endif // __WXGTK24__

//-----------------------------------------------------------------------------
// FileDialog
//-----------------------------------------------------------------------------

IMPLEMENT_DYNAMIC_CLASS(FileDialog,wxGenericFileDialog)

BEGIN_EVENT_TABLE(FileDialog,wxGenericFileDialog)
    EVT_BUTTON(wxID_OK, FileDialog::OnFakeOk)
END_EVENT_TABLE()

FileDialog::FileDialog(wxWindow *parent, const wxString& message,
                           const wxString& defaultDir,
                           const wxString& defaultFileName,
                           const wxString& wildCard,
                           long style, const wxPoint& pos)
    : wxGenericFileDialog(parent, message, defaultDir, defaultFileName,
                       wildCard, style, pos, true )
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        wxASSERT_MSG( !( (style & wxSAVE) && (style & wxMULTIPLE) ), 
wxT("FileDialog - wxMULTIPLE used on a save dialog" ) );
        m_needParent = false;
        m_destroyed_by_delete = false;

        if (!PreCreation(parent, pos, wxDefaultSize) ||
            !CreateBase(parent, wxID_ANY, pos, wxDefaultSize, style,
                    wxDefaultValidator, wxT("filedialog")))
        {
            wxFAIL_MSG( wxT("FileDialog creation failed") );
            return;
        }

        GtkFileChooserAction gtk_action;
        GtkWindow* gtk_parent = NULL;
        if (parent)
            gtk_parent = GTK_WINDOW( gtk_widget_get_toplevel(parent->m_widget) 
);

        gchar* ok_btn_stock;
        if ( style & wxSAVE )
        {
            gtk_action = GTK_FILE_CHOOSER_ACTION_SAVE;
            ok_btn_stock = GTK_STOCK_SAVE;
        }
        else
        {
            gtk_action = GTK_FILE_CHOOSER_ACTION_OPEN;
            ok_btn_stock = GTK_STOCK_OPEN;
        }

        m_widget = gtk_file_chooser_dialog_new(
                       wxGTK_CONV(m_message),
                       gtk_parent,
                       gtk_action,
                       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                       ok_btn_stock, GTK_RESPONSE_ACCEPT,
                       NULL);

        if ( style & wxMULTIPLE )
            gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(m_widget), 
true);

        // local-only property could be set to false to allow non-local files 
to be loaded.
        // In that case get/set_uri(s) should be used instead of 
get/set_filename(s) everywhere
        // and the GtkFileChooserDialog should probably also be created with a 
backend,
        // e.g "gnome-vfs", "default", ... 
(gtk_file_chooser_dialog_new_with_backend).
        // Currently local-only is kept as the default - true:
        // gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(m_widget), true);

        g_signal_connect(G_OBJECT(m_widget), "response",
            GTK_SIGNAL_FUNC(gtk_filedialog_response_callback), (gpointer)this);

        SetWildcard(wildCard);

        if ( style & wxSAVE )
        {
            if ( !defaultDir.empty() )
                gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(m_widget),
                wxConvFileName->cWX2MB(defaultDir));

            gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(m_widget),
                wxConvFileName->cWX2MB(defaultFileName));

#if GTK_CHECK_VERSION(2,7,3)
            if (!gtk_check_version(2,7,3))
                
gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(m_widget), 
TRUE);
#endif
        }
        else
        {
            if ( !defaultFileName.empty() )
            {
                wxString dir;
                if ( defaultDir.empty() )
                    dir = ::wxGetCwd();
                else
                    dir = defaultDir;

                gtk_file_chooser_set_filename(
                    GTK_FILE_CHOOSER(m_widget),
                    wxConvFileName->cWX2MB( wxFileName(dir, 
defaultFileName).GetFullPath() ) );
            }
            else if ( !defaultDir.empty() )
                gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(m_widget),
                    wxConvFileName->cWX2MB(defaultDir) );
        }
    }
    else
#endif
        wxGenericFileDialog::Create( parent, message, defaultDir, 
defaultFileName, wildCard, style, pos );
}

FileDialog::~FileDialog()
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        if (m_destroyed_by_delete)
            m_widget = NULL;
    }
#endif
}

void FileDialog::OnFakeOk( wxCommandEvent &event )
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
        wxDialog::OnOK( event );
    else
#endif
        wxGenericFileDialog::OnListOk( event );
}

int FileDialog::ShowModal()
{
    if ( !m_buttonlabel.IsEmpty() )
    {
        GtkWidget *btn;
        btn = gtk_button_new_with_label(wxGTK_CONV(m_buttonlabel));
        gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(m_widget), btn);
        g_signal_connect(G_OBJECT(btn), "clicked",
            GTK_SIGNAL_FUNC(gtk_filedialog_extra_callback), (gpointer)this);
    }

#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
        return wxDialog::ShowModal();
    else
#endif
        return wxGenericFileDialog::ShowModal();
}

bool FileDialog::Show( bool show )
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
        return wxDialog::Show( show );
    else
#endif
        return wxGenericFileDialog::Show( show );
}

void FileDialog::DoSetSize(int x, int y, int width, int height, int sizeFlags )
{
    if (!m_wxwindow)
        return;
    else
        wxGenericFileDialog::DoSetSize( x, y, width, height, sizeFlags );
}

wxString FileDialog::GetPath() const
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
        return 
wxConvFileName->cMB2WX(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_widget)));
    else
#endif
        return wxGenericFileDialog::GetPath();
}

void FileDialog::GetFilenames(wxArrayString& files) const
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        GetPaths(files);
        for (size_t n = 0; n < files.GetCount(); ++n )
        {
            wxFileName file(files[n]);
            files[n] = file.GetFullName();
        }
    }
    else
#endif
        wxGenericFileDialog::GetFilenames( files );
}

void FileDialog::GetPaths(wxArrayString& paths) const
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        paths.Empty();
        if (gtk_file_chooser_get_select_multiple(GTK_FILE_CHOOSER(m_widget)))
        {
            GSList *gpathsi = 
gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(m_widget));
            GSList *gpaths = gpathsi;
            while (gpathsi)
            {
                wxString file(wxConvFileName->cMB2WX((gchar*) gpathsi->data));
                paths.Add(file);
                g_free(gpathsi->data);
                gpathsi = gpathsi->next;
            }

            g_slist_free(gpaths);
        }
        else
            paths.Add(GetPath());
    }
    else
#endif
        wxGenericFileDialog::GetPaths( paths );
}

void FileDialog::SetMessage(const wxString& message)
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        m_message = message;
        SetTitle(message);
    }
    else
#endif
        wxGenericFileDialog::SetMessage( message );
}

void FileDialog::SetPath(const wxString& path)
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        if (path.empty()) return;

        gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(m_widget), 
wxConvFileName->cWX2MB(path));
    }
    else
#endif
        wxGenericFileDialog::SetPath( path );
}

void FileDialog::SetDirectory(const wxString& dir)
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        if (wxDirExists(dir))
        {
            gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(m_widget), 
wxConvFileName->cWX2MB(dir));
        }
    }
    else
#endif
        wxGenericFileDialog::SetDirectory( dir );
}

wxString FileDialog::GetDirectory() const
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
        return wxConvFileName->cMB2WX(
            gtk_file_chooser_get_current_folder( GTK_FILE_CHOOSER(m_widget) ) );
    else
#endif
        return wxGenericFileDialog::GetDirectory();
}

void FileDialog::SetFilename(const wxString& name)
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        if (GetStyle() & wxSAVE)
            gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(m_widget), 
wxConvFileName->cWX2MB(name));
        else
            SetPath(wxFileName(GetDirectory(), name).GetFullPath());
    }
    else
#endif
        wxGenericFileDialog::SetFilename( name );
}

wxString FileDialog::GetFilename() const
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
        return wxFileName(
            
wxConvFileName->cMB2WX(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_widget)))
 ).GetFullName();
    else
#endif
        return wxGenericFileDialog::GetFilename();
}

void FileDialog::SetWildcard(const wxString& wildCard)
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        // parse filters
        wxArrayString wildDescriptions, wildFilters;
        if (!wxParseCommonDialogsFilter(wildCard, wildDescriptions, 
wildFilters))
        {
            wxFAIL_MSG( wxT("FileDialog::SetWildCard - bad wildcard string") );
        }
        else
        {
            // Parsing went fine. Set m_wildCard to be returned by 
FileDialogBase::GetWildcard
            m_wildCard = wildCard;

            GtkFileChooser* chooser = GTK_FILE_CHOOSER(m_widget);

            // empty current filter list:
            GSList* ifilters = gtk_file_chooser_list_filters(chooser);
            GSList* filters = ifilters;

            while (ifilters)
            {
                
gtk_file_chooser_remove_filter(chooser,GTK_FILE_FILTER(ifilters->data));
                ifilters = ifilters->next;
            }
            g_slist_free(filters);

            // add parsed to GtkChooser
            for (size_t n = 0; n < wildFilters.GetCount(); ++n)
            {
                GtkFileFilter* filter = gtk_file_filter_new();
                gtk_file_filter_set_name(filter, 
wxGTK_CONV(wildDescriptions[n]));

                wxStringTokenizer exttok(wildFilters[n], wxT(";"));
                while (exttok.HasMoreTokens())
                {
                    wxString token = exttok.GetNextToken();
                    gtk_file_filter_add_pattern(filter, wxGTK_CONV(token));
                }

                gtk_file_chooser_add_filter(chooser, filter);
            }

            // Reset the filter index
            SetFilterIndex(0);
        }
    }
    else
#endif
        wxGenericFileDialog::SetWildcard( wildCard );
}

void FileDialog::SetFilterIndex(int filterIndex)
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        gpointer filter;
        GtkFileChooser *chooser = GTK_FILE_CHOOSER(m_widget);
        GSList *filters = gtk_file_chooser_list_filters(chooser);

        filter = g_slist_nth_data(filters, filterIndex);

        if (filter != NULL)
        {
            gtk_file_chooser_set_filter(chooser, GTK_FILE_FILTER(filter));
        }
        else
        {
            wxFAIL_MSG( wxT("FileDialog::SetFilterIndex - bad filter index") );
        }

        g_slist_free(filters);
    }
    else
#endif
        wxGenericFileDialog::SetFilterIndex( filterIndex );
}

int FileDialog::GetFilterIndex() const
{
#if defined(__WXGTK24__) && (!defined(__WXGPE__))
    if (!gtk_check_version(2,4,0))
    {
        GtkFileChooser *chooser = GTK_FILE_CHOOSER(m_widget);
        GtkFileFilter *filter = gtk_file_chooser_get_filter(chooser);
        GSList *filters = gtk_file_chooser_list_filters(chooser);
        gint index = g_slist_index(filters, filter);
        g_slist_free(filters);

        if (index == -1)
        {
            wxFAIL_MSG( wxT("FileDialog::GetFilterIndex - bad filter index 
returned by gtk+") );
            return 0;
        }
        else
            return index;
    }
    else
#endif
                return wxGenericFileDialog::GetFilterIndex();
}

--- NEW FILE: private.h ---
///////////////////////////////////////////////////////////////////////////////
// Name:        wx/gtk/private.h
// Purpose:     wxGTK private macros, functions &c
// Author:      Vadim Zeitlin
// Modified by:
// Created:     12.03.02
// RCS-ID:      $Id: private.h,v 1.1 2007/04/06 10:16:52 llucius Exp $
// Copyright:   (c) 2002 Vadim Zeitlin <[EMAIL PROTECTED]>
// Licence:     wxWindows licence
///////////////////////////////////////////////////////////////////////////////

#ifndef _WX_GTK_PRIVATE_H_
#define _WX_GTK_PRIVATE_H_

#include <gdk/gdk.h>
#include <gtk/gtk.h>

#include "wx/event.h"

// fail all version tests if the GTK+ version is so ancient that it doesn't
// even have GTK_CHECK_VERSION
#ifndef GTK_CHECK_VERSION
    #define GTK_CHECK_VERSION(a, b, c) 0
#endif

#ifdef __WXGTK20__
#if wxUSE_UNICODE
    #define wxGTK_CONV(s) wxConvUTF8.cWX2MB(s)
    #define wxGTK_CONV_BACK(s) wxConvUTF8.cMB2WX(s)
#else
    #define wxGTK_CONV(s) wxConvUTF8.cWC2MB( wxConvLocal.cWX2WC(s) )
    #define wxGTK_CONV_BACK(s)  wxConvLocal.cWC2WX( (wxConvUTF8.cMB2WC( s ) ) )
#endif
#else
    #define wxGTK_CONV(s) s.c_str()
    #define wxGTK_CONV_BACK(s) s
#endif


// GTK+ 2.0 compatibility define is broken when used from C++ as it
// casts enum to int implicitly
#ifdef __WXGTK20__
    #undef gtk_signal_disconnect_by_func
    #define gtk_signal_disconnect_by_func(object,func,data) \
        gtk_signal_compat_matched((object), (func), (data), \
                                  (GSignalMatchType)(G_SIGNAL_MATCH_FUNC | \
                                                     G_SIGNAL_MATCH_DATA), 0)
#endif

// child is not a member of GTK_BUTTON() any more in GTK+ 2.0
#ifdef __WXGTK20__
    #define BUTTON_CHILD(w) GTK_BIN((w))->child
#else
    #define BUTTON_CHILD(w) GTK_BUTTON((w))->child
#endif

// event_window has disappeared from GtkToggleButton in GTK+ 2.0
#ifdef __WXGTK20__
    #define TOGGLE_BUTTON_EVENT_WIN(w) GTK_BUTTON((w))->event_window
#else
    #define TOGGLE_BUTTON_EVENT_WIN(w) GTK_TOGGLE_BUTTON((w))->event_window
#endif

// gtk_editable_{copy|cut|paste}_clipboard() had an extra argument under
// previous GTK+ versions but no more
#if defined(__WXGTK20__) || (GTK_MINOR_VERSION > 0)
    #define DUMMY_CLIPBOARD_ARG
#else
    #define DUMMY_CLIPBOARD_ARG  ,0
#endif

// _GtkEditable is now private
#ifdef __WXGTK20__
    #define GET_EDITABLE_POS(w) gtk_editable_get_position(GTK_EDITABLE(w))
    #define SET_EDITABLE_POS(w, pos) \
        gtk_editable_set_position(GTK_EDITABLE(w), (pos))
#else
    #define GET_EDITABLE_POS(w) GTK_EDITABLE((w))->current_pos
    #define SET_EDITABLE_POS(w, pos) \
        GTK_EDITABLE((w))->current_pos = (pos)
#endif

// this GtkNotebook struct field has been renamed
#ifdef __WXGTK20__
    #define NOTEBOOK_PANEL(nb)  GTK_NOTEBOOK(nb)->event_window
#else
    #define NOTEBOOK_PANEL(nb)  GTK_NOTEBOOK(nb)->panel
#endif

#ifdef __WXGTK20__
    #define SCROLLBAR_CBACK_ARG
    #define GET_SCROLL_TYPE(w)   GTK_SCROLL_JUMP
#else
    #define SCROLLBAR_CBACK_ARG
    #define GET_SCROLL_TYPE(w)   GTK_RANGE((w))->scroll_type
#endif

// translate a GTK+ scroll type to a wxEventType
inline wxEventType GtkScrollTypeToWx(guint scrollType)
{
    wxEventType command;
    switch ( scrollType )
    {
        case GTK_SCROLL_STEP_BACKWARD:
            command = wxEVT_SCROLL_LINEUP;
            break;

        case GTK_SCROLL_STEP_FORWARD:
            command = wxEVT_SCROLL_LINEDOWN;
            break;

        case GTK_SCROLL_PAGE_BACKWARD:
            command = wxEVT_SCROLL_PAGEUP;
            break;

        case GTK_SCROLL_PAGE_FORWARD:
            command = wxEVT_SCROLL_PAGEDOWN;
            break;

        default:
            command = wxEVT_SCROLL_THUMBTRACK;
    }

    return command;
}

inline wxEventType GtkScrollWinTypeToWx(guint scrollType)
{
    // GtkScrollTypeToWx() returns SCROLL_XXX, not SCROLLWIN_XXX as we need
    return GtkScrollTypeToWx(scrollType) +
            wxEVT_SCROLLWIN_TOP - wxEVT_SCROLL_TOP;
}

// Needed for implementing e.g. combobox on wxGTK within a modal dialog.
void wxAddGrab(wxWindow* window);
void wxRemoveGrab(wxWindow* window);

#ifdef __WXGTK20__
// Escapes string so that it is valid Pango markup XML string:
WXDLLIMPEXP_CORE wxString wxEscapeStringForPangoMarkup(const wxString& str);
#endif

// The declaration for gtk_icon_size_lookup was accidentally ifdefed out in
// GTK+ 2.1.0 which Sun seem to have shipped with some versions of JDS
// for Solaris 9 x86.
#ifdef NEED_GTK_ICON_SIZE_LOOKUP
extern "C" gboolean gtk_icon_size_lookup  (GtkIconSize  size,
                                           gint         *width,
                                           gint         *height);
#endif

#endif // _WX_GTK_PRIVATE_H_



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to