Added MooFileChooser

master
Yevgen Muntyan 2006-04-04 21:48:12 -05:00
parent 632ec59da6
commit bcefef042c
7 changed files with 277 additions and 61 deletions

View File

@ -24,7 +24,7 @@
</ignoreparts> </ignoreparts>
<projectdirectory>.</projectdirectory> <projectdirectory>.</projectdirectory>
<absoluteprojectpath>false</absoluteprojectpath> <absoluteprojectpath>false</absoluteprojectpath>
<description/> <description></description>
<secondaryLanguages> <secondaryLanguages>
<language>C</language> <language>C</language>
</secondaryLanguages> </secondaryLanguages>
@ -36,10 +36,10 @@
<useconfiguration>debug</useconfiguration> <useconfiguration>debug</useconfiguration>
</general> </general>
<run> <run>
<mainprogram>medit</mainprogram> <mainprogram>./medit</mainprogram>
<directoryradio>executable</directoryradio> <directoryradio>executable</directoryradio>
<customdirectory>/</customdirectory> <customdirectory>/</customdirectory>
<programargs/> <programargs></programargs>
<terminal>false</terminal> <terminal>false</terminal>
<autocompile>false</autocompile> <autocompile>false</autocompile>
<envvars/> <envvars/>
@ -216,11 +216,15 @@
</kdevautoproject> </kdevautoproject>
<kdevdebugger> <kdevdebugger>
<general> <general>
<dbgshell/> <dbgshell></dbgshell>
<programargs>--g-fatal-warnings</programargs> <programargs>--g-fatal-warnings</programargs>
<breakonloadinglibs>true</breakonloadinglibs> <breakonloadinglibs>true</breakonloadinglibs>
<separatetty>false</separatetty> <separatetty>false</separatetty>
<floatingtoolbar>true</floatingtoolbar> <floatingtoolbar>true</floatingtoolbar>
<gdbpath></gdbpath>
<configGdbScript></configGdbScript>
<runShellScript></runShellScript>
<runGdbScript></runGdbScript>
</general> </general>
<display> <display>
<staticmembers>true</staticmembers> <staticmembers>true</staticmembers>
@ -282,16 +286,16 @@
</kdevdoctreeview> </kdevdoctreeview>
<kdevfilecreate> <kdevfilecreate>
<filetypes> <filetypes>
<type icon="source" ext="g" name="GAP source" create="template" > <type icon="source" ext="g" create="template" name="GAP source" >
<descr>A new empty GAP source file</descr> <descr>A new empty GAP source file</descr>
</type> </type>
<type icon="source_cpp" ext="cpp" name="C++ Source" create="template" > <type icon="source_cpp" ext="cpp" create="template" name="C++ Source" >
<descr>A new empty C++ file.</descr> <descr>A new empty C++ file.</descr>
</type> </type>
<type icon="source_h" ext="h" name="C/C++ Header" create="template" > <type icon="source_h" ext="h" create="template" name="C/C++ Header" >
<descr>A new empty header file for C/C++.</descr> <descr>A new empty header file for C/C++.</descr>
</type> </type>
<type icon="source_c" ext="c" name="C Source" create="template" > <type icon="source_c" ext="c" create="template" name="C Source" >
<descr>A new empty C file.</descr> <descr>A new empty C file.</descr>
</type> </type>
</filetypes> </filetypes>
@ -318,7 +322,7 @@
</codecompletion> </codecompletion>
<references/> <references/>
<creategettersetter> <creategettersetter>
<prefixGet/> <prefixGet></prefixGet>
<prefixSet>set</prefixSet> <prefixSet>set</prefixSet>
<prefixVariable>m_,_</prefixVariable> <prefixVariable>m_,_</prefixVariable>
<parameterName>theValue</parameterName> <parameterName>theValue</parameterName>

View File

@ -39,6 +39,9 @@ if GTK_2_6
mooedit_plugins_sources += \ mooedit_plugins_sources += \
$(mooedit_plugins)/moofileselector-glade.h\ $(mooedit_plugins)/moofileselector-glade.h\
$(mooedit_plugins)/moofilechooser-glade.h \ $(mooedit_plugins)/moofilechooser-glade.h \
$(mooedit_plugins)/moofileselector.h \
$(mooedit_plugins)/moofilechooser.c \
$(mooedit_plugins)/moofilechooser.h \
$(mooedit_plugins)/fileselector.c $(mooedit_plugins)/fileselector.c
endif endif

View File

@ -15,12 +15,12 @@
#include "config.h" #include "config.h"
#endif #endif
#include "mooedit/plugins/moofileselector.h"
#include "mooedit/mooplugin-macro.h" #include "mooedit/mooplugin-macro.h"
#include "mooutils/moofileview/moofileview.h"
#include "mooutils/moofileview/moobookmarkmgr.h" #include "mooutils/moofileview/moobookmarkmgr.h"
#include "mooedit/plugins/mooeditplugins.h" #include "mooedit/plugins/mooeditplugins.h"
#include "mooedit/plugins/moofileselector-glade.h" #include "mooedit/plugins/moofileselector-glade.h"
#include "mooedit/plugins/moofilechooser-glade.h" #include "mooedit/plugins/moofilechooser.h"
#include "mooutils/moostock.h" #include "mooutils/moostock.h"
#include "mooutils/mooutils-fs.h" #include "mooutils/mooutils-fs.h"
#include "mooutils/mooutils-misc.h" #include "mooutils/mooutils-misc.h"
@ -49,28 +49,6 @@ typedef struct {
#define Plugin FileSelectorPlugin #define Plugin FileSelectorPlugin
#define MOO_TYPE_FILE_SELECTOR (moo_file_selector_get_type ())
#define MOO_FILE_SELECTOR(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_FILE_SELECTOR, MooFileSelector))
#define MOO_FILE_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_FILE_SELECTOR, MooFileSelectorClass))
#define MOO_IS_FILE_SELECTOR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOO_TYPE_FILE_SELECTOR))
#define MOO_IS_FILE_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOO_TYPE_FILE_SELECTOR))
#define MOO_FILE_SELECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOO_TYPE_FILE_SELECTOR, MooFileSelectorClass))
typedef struct {
MooFileView base;
MooEditWindow *window;
GtkWidget *button;
guint open_pane_timeout;
gboolean button_highlight;
GtkTargetList *targets;
gboolean waiting_for_tab;
} MooFileSelector;
typedef struct {
MooFileViewClass base_class;
} MooFileSelectorClass;
enum { enum {
TARGET_MOO_EDIT_TAB = 1, TARGET_MOO_EDIT_TAB = 1,
TARGET_URI_LIST = 2 TARGET_URI_LIST = 2
@ -85,7 +63,6 @@ static GtkTargetEntry targets[] = {
#define OPEN_PANE_TIMEOUT 300 #define OPEN_PANE_TIMEOUT 300
GType moo_file_selector_get_type (void) G_GNUC_CONST;
G_DEFINE_TYPE (MooFileSelector, moo_file_selector, MOO_TYPE_FILE_VIEW) G_DEFINE_TYPE (MooFileSelector, moo_file_selector, MOO_TYPE_FILE_VIEW)
@ -1067,32 +1044,46 @@ show_file_selector (MooEditWindow *window)
} }
// static void static void
// show_file_chooser (MooEditWindow *window) show_file_chooser (MooEditWindow *window)
// { {
// GtkWidget *dialog; GtkWidget *dialog;
// int response; int response;
//
// dialog = g_object_get_data (G_OBJECT (window), "moo-file-chooser"); dialog = g_object_get_data (G_OBJECT (window), "moo-file-chooser");
//
// if (!dialog) if (!dialog)
// { {
// MooGladeXML *xml; dialog = moo_file_chooser_new ();
// gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window));
// xml = moo_glade_xml_new_empty (); g_object_set_data_full (G_OBJECT (window), "moo-file-chooser",
// moo_glade_xml_map_id (xml, "fielview", MOO_TYPE_FILE_SELECTOR); dialog, (GDestroyNotify) gtk_widget_destroy);
// moo_glade_xml_parse_memory (*xml, MOO_FILE_CHOOSER_GLADE_XML, -1, NULL); }
//
// dialog = moo_glade_xml_get_widget (xml, "dialog"); response = gtk_dialog_run (GTK_DIALOG (dialog));
// g_return_val_if_fail (dialog != NULL, NULL); gtk_widget_hide (dialog);
//
// gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window)); if (response == GTK_RESPONSE_OK)
// g_object_set_data_full (G_OBJECT (window), "moo-file-chooser", {
// dialog, gtk_widget_destroy); GSList *files = NULL;
// } GList *filenames;
//
// response = gtk_dialog_run (); filenames = moo_file_view_get_filenames (MOO_FILE_CHOOSER (dialog)->fileview);
// }
while (filenames)
{
MooEditFileInfo *info = moo_edit_file_info_new (filenames->data, NULL);
files = g_slist_prepend (files, info);
g_free (filenames->data);
filenames = g_list_delete_link (filenames, filenames);
}
moo_editor_open (moo_edit_window_get_editor (window), window, NULL, files);
g_slist_foreach (files, (GFunc) moo_edit_file_info_free, NULL);
g_slist_free (files);
}
}
static gboolean static gboolean
@ -1112,6 +1103,13 @@ file_selector_plugin_init (Plugin *plugin)
"icon-stock-id", MOO_STOCK_FILE_SELECTOR, "icon-stock-id", MOO_STOCK_FILE_SELECTOR,
"closure-callback", show_file_selector, "closure-callback", show_file_selector,
NULL); NULL);
moo_window_class_new_action (klass, "ShowFileChooser",
"name", "Show File Chooser",
"label", "Show File Chooser",
"tooltip", "Show file chooser",
"icon-stock-id", MOO_STOCK_FILE_SELECTOR,
"closure-callback", show_file_chooser,
NULL);
plugin->ui_merge_id = moo_ui_xml_new_merge_id (xml); plugin->ui_merge_id = moo_ui_xml_new_merge_id (xml);
@ -1119,6 +1117,10 @@ file_selector_plugin_init (Plugin *plugin)
"Editor/Menubar/View", "Editor/Menubar/View",
"ShowFileSelector", "ShowFileSelector",
"ShowFileSelector", -1); "ShowFileSelector", -1);
moo_ui_xml_add_item (xml, plugin->ui_merge_id,
"Editor/Menubar/View",
"ShowFileChooser",
"ShowFileChooser", -1);
moo_prefs_new_key_string (DIR_PREFS, NULL); moo_prefs_new_key_string (DIR_PREFS, NULL);

View File

@ -0,0 +1,81 @@
/*
* moofilechooser.c
*
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* See COPYING file that comes with this distribution.
*/
#include "mooedit/plugins/moofilechooser.h"
#include "mooedit/plugins/moofilechooser-glade.h"
#include "mooutils/mooglade.h"
#include <gtk/gtk.h>
G_DEFINE_TYPE(MooFileChooser, moo_file_chooser, GTK_TYPE_DIALOG)
static void
fileview_activate (GtkDialog *dialog)
{
gtk_dialog_response (dialog, GTK_RESPONSE_OK);
}
static void
moo_file_chooser_destroy (GtkObject *object)
{
MooFileChooser *chooser = MOO_FILE_CHOOSER (object);
if (chooser->fileview)
{
g_signal_handlers_disconnect_by_func (chooser->fileview,
(gpointer) fileview_activate,
chooser);
chooser->fileview = NULL;
}
GTK_OBJECT_CLASS(moo_file_chooser_parent_class)->destroy (object);
}
static void
moo_file_chooser_class_init (MooFileChooserClass *klass)
{
GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass);
gtkobject_class->destroy = moo_file_chooser_destroy;
}
static void
moo_file_chooser_init (MooFileChooser *chooser)
{
MooGladeXML *xml;
GtkDialog *dialog = GTK_DIALOG (chooser);
xml = moo_glade_xml_new_empty ();
moo_glade_xml_map_id (xml, "fileview", MOO_TYPE_FILE_VIEW);
moo_glade_xml_fill_widget (xml, GTK_WIDGET (dialog),
MOO_FILE_CHOOSER_GLADE_XML, -1, "dialog");
gtk_dialog_set_alternative_button_order (dialog, GTK_RESPONSE_OK,
GTK_RESPONSE_CANCEL);
chooser->fileview = moo_glade_xml_get_widget (xml, "fileview");
g_signal_connect_swapped (chooser->fileview, "activate",
G_CALLBACK (fileview_activate),
chooser);
g_signal_emit_by_name (chooser->fileview, "go-home");
}
GtkWidget *
moo_file_chooser_new (void)
{
return g_object_new (MOO_TYPE_FILE_CHOOSER, NULL);
}

View File

@ -8,6 +8,8 @@
<property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property> <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
<property name="modal">True</property> <property name="modal">True</property>
<property name="default_width">400</property>
<property name="default_height">300</property>
<property name="resizable">True</property> <property name="resizable">True</property>
<property name="destroy_with_parent">False</property> <property name="destroy_with_parent">False</property>
<property name="decorated">True</property> <property name="decorated">True</property>
@ -64,8 +66,21 @@
</child> </child>
<child> <child>
<widget class="GtkDrawingArea" id="fileview"> <widget class="GtkVBox" id="vbox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkDrawingArea" id="fileview">
<property name="visible">True</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget> </widget>
<packing> <packing>
<property name="padding">0</property> <property name="padding">0</property>

View File

@ -0,0 +1,52 @@
/*
* moofilechooser.h
*
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* See COPYING file that comes with this distribution.
*/
#ifndef __MOO_FILE_CHOOSER_H__
#define __MOO_FILE_CHOOSER_H__
#include "mooutils/moofileview/moofileview.h"
#include <gtk/gtkdialog.h>
G_BEGIN_DECLS
#define MOO_TYPE_FILE_CHOOSER (moo_file_chooser_get_type ())
#define MOO_FILE_CHOOSER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_FILE_CHOOSER, MooFileChooser))
#define MOO_FILE_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_FILE_CHOOSER, MooFileChooserClass))
#define MOO_IS_FILE_CHOOSER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOO_TYPE_FILE_CHOOSER))
#define MOO_IS_FILE_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOO_TYPE_FILE_CHOOSER))
#define MOO_FILE_CHOOSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOO_TYPE_FILE_CHOOSER, MooFileChooserClass))
typedef struct _MooFileChooser MooFileChooser;
typedef struct _MooFileChooserClass MooFileChooserClass;
struct _MooFileChooser
{
GtkDialog parent;
MooFileView *fileview;
};
struct _MooFileChooserClass
{
GtkDialogClass parent_class;
};
GType moo_file_chooser_get_type (void) G_GNUC_CONST;
GtkWidget *moo_file_chooser_new (void);
G_END_DECLS
#endif /* __MOO_FILE_CHOOSER_H__ */

View File

@ -0,0 +1,59 @@
/*
* moofileselector.h
*
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* See COPYING file that comes with this distribution.
*/
#ifndef __MOO_FILE_SELECTOR_H__
#define __MOO_FILE_SELECTOR_H__
#include "mooedit/mooeditwindow.h"
#include "mooutils/moofileview/moofileview.h"
G_BEGIN_DECLS
#define MOO_TYPE_FILE_SELECTOR (moo_file_selector_get_type ())
#define MOO_FILE_SELECTOR(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MOO_TYPE_FILE_SELECTOR, MooFileSelector))
#define MOO_FILE_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOO_TYPE_FILE_SELECTOR, MooFileSelectorClass))
#define MOO_IS_FILE_SELECTOR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MOO_TYPE_FILE_SELECTOR))
#define MOO_IS_FILE_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOO_TYPE_FILE_SELECTOR))
#define MOO_FILE_SELECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOO_TYPE_FILE_SELECTOR, MooFileSelectorClass))
typedef struct _MooFileSelector MooFileSelector;
typedef struct _MooFileSelectorClass MooFileSelectorClass;
struct _MooFileSelector
{
MooFileView parent;
MooEditWindow *window;
GtkWidget *button;
guint open_pane_timeout;
gboolean button_highlight;
GtkTargetList *targets;
gboolean waiting_for_tab;
};
struct _MooFileSelectorClass
{
MooFileViewClass parent_class;
};
GType moo_file_selector_get_type (void) G_GNUC_CONST;
GtkWidget *moo_file_selector_new (void);
G_END_DECLS
#endif /* __MOO_FILE_SELECTOR_H__ */