2
* Copyright 2010 Jiri Techet <techet@gmail.com>
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
29
#include <geanyplugin.h>
31
#include "gproject-project.h"
32
#include "gproject-sidebar.h"
33
#include "gproject-menu.h"
35
PLUGIN_VERSION_CHECK(211);
36
PLUGIN_SET_INFO(_("GProject"),
37
_("Glob-pattern-based project management plugin for Geany."),
39
"Jiri Techet <techet@gmail.com>");
41
GeanyPlugin *geany_plugin;
42
GeanyData *geany_data;
43
GeanyFunctions *geany_functions;
46
void plugin_init(G_GNUC_UNUSED GeanyData * data);
47
void plugin_cleanup(void);
50
static void on_doc_open(G_GNUC_UNUSED GObject * obj, G_GNUC_UNUSED GeanyDocument * doc,
51
G_GNUC_UNUSED gpointer user_data)
53
g_return_if_fail(doc != NULL && doc->file_name != NULL);
55
//tags of open files managed by geany
56
if (gprj_project_is_in_project(doc->file_name))
57
gprj_project_remove_file_tag(doc->file_name);
59
gprj_sidebar_update(FALSE);
63
static void on_doc_activate(G_GNUC_UNUSED GObject * obj, G_GNUC_UNUSED GeanyDocument * doc,
64
G_GNUC_UNUSED gpointer user_data)
66
g_return_if_fail(doc != NULL && doc->file_name != NULL);
68
gprj_sidebar_update(FALSE);
72
static void on_doc_close(G_GNUC_UNUSED GObject * obj, GeanyDocument * doc,
73
G_GNUC_UNUSED gpointer user_data)
75
g_return_if_fail(doc != NULL && doc->file_name != NULL);
77
//tags of open files managed by geany - when the file gets closed, we should take care of it
78
if (gprj_project_is_in_project(doc->file_name))
79
gprj_project_add_file_tag(doc->file_name);
81
gprj_sidebar_update(FALSE);
85
static void on_build_start(GObject *obj, gpointer user_data)
91
if (gprj_project_is_in_project(documents[i]->file_name))
92
document_save_file(documents[i], FALSE);
97
static void on_project_dialog_create(G_GNUC_UNUSED GObject * obj, GtkWidget * notebook,
98
G_GNUC_UNUSED gpointer user_data)
100
gprj_project_add_properties_tab(notebook);
104
static void on_project_dialog_confirmed(G_GNUC_UNUSED GObject * obj, GtkWidget * notebook,
105
G_GNUC_UNUSED gpointer user_data)
107
gprj_project_read_properties_tab();
108
gprj_sidebar_update(TRUE);
112
static void on_project_open(G_GNUC_UNUSED GObject * obj, GKeyFile * config,
113
G_GNUC_UNUSED gpointer user_data)
115
gprj_project_open(config);
116
gprj_sidebar_update(TRUE);
117
gprj_sidebar_activate(TRUE);
118
gprj_menu_activate_menu_items(TRUE);
122
static void on_project_close(G_GNUC_UNUSED GObject * obj, G_GNUC_UNUSED gpointer user_data)
124
gprj_project_close();
125
gprj_sidebar_update(TRUE);
126
gprj_sidebar_activate(FALSE);
127
gprj_menu_activate_menu_items(FALSE);
131
static void on_project_save(G_GNUC_UNUSED GObject * obj, GKeyFile * config,
132
G_GNUC_UNUSED gpointer user_data)
136
//happens when the project is created
137
gprj_project_open(config);
138
gprj_sidebar_update(TRUE);
139
gprj_sidebar_activate(TRUE);
140
gprj_menu_activate_menu_items(TRUE);
143
gprj_project_save(config);
147
PluginCallback plugin_callbacks[] = {
148
{"document-open", (GCallback) & on_doc_open, TRUE, NULL},
149
{"document-activate", (GCallback) & on_doc_activate, TRUE, NULL},
150
{"document-close", (GCallback) & on_doc_close, TRUE, NULL},
151
{"build-start", (GCallback) & on_build_start, TRUE, NULL},
152
{"project-dialog-create", (GCallback) & on_project_dialog_create, TRUE, NULL},
153
{"project-dialog-confirmed", (GCallback) & on_project_dialog_confirmed, TRUE, NULL},
154
{"project-open", (GCallback) & on_project_open, TRUE, NULL},
155
{"project-close", (GCallback) & on_project_close, TRUE, NULL},
156
{"project-save", (GCallback) & on_project_save, TRUE, NULL},
157
{NULL, NULL, FALSE, NULL}
161
void plugin_init(G_GNUC_UNUSED GeanyData * data)
168
void plugin_cleanup(void)
170
if (geany_data->app->project)
172
gprj_project_close();
173
gprj_sidebar_update(TRUE);
177
gprj_sidebar_cleanup();