/*
* Copyright (C) 2001, 2002 Damien Tanner <[email protected]>
* Copyright (C) 2004, 2006 Florian Boor <[email protected]>
*
* 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.
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <libgen.h>
#include <string.h>
#include <libintl.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include <gpe/init.h>
#include <gpe/errorbox.h>
#include <gpe/gpedialog.h>
#include <gpe/pixmaps.h>
#include <gpe/picturebutton.h>
#include <gpe/question.h>
#include <gpe/spacing.h>
#include <gpe/gpehelp.h>
#define WINDOW_NAME "Editor"
#define _(_x) gettext (_x)
gchar *filename = NULL;
gint file_modified = 0;
gint search_replace_open = 0;
gint last_found = 0;
gboolean utf8_mode;
const gchar *appname = "gpe-edit";
GtkWidget *main_window;
GtkWidget *text_area;
GtkWidget *file_selector;
GtkWidget *search_replace_vbox;
/* some forwards */
static void save_file (void);
struct gpe_icon my_icons[] = {
// { "save_as", "save_as" },
// { "cut", "cut" },
// { "copy", "copy" },
// { "paste", "paste" },
// { "search", "search" },
// { "search_and_replace", "search_and_replace" },
// { "right", "right" },
// { "dir-closed", "dir-closed" },
// { "dir-up", "dir-up" },
// { "stop", "stop" },
{ "icon","/usr/share/pixmaps/gpe-edit.png" },
// { "help", "help" },
{NULL, NULL}
};
guint window_x = 240, window_y = 310;
static void
show_help (void)
{
gboolean test;
gchar *topic = NULL;
test = gpe_show_help(appname, topic);
if (test == TRUE)
gpe_error_box (_("Help not (or incorrectly) installed. Or no helpviewer application registered."));
}
static void
clear_text_area (void)
{
GtkTextBuffer *buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_area));
gtk_text_buffer_set_text(buf,"",0);
}
static void
update_window_title (void)
{
gchar *window_title;
GError *error = NULL;
gchar *displayname, *udisplayname;
gchar *wname = _(WINDOW_NAME);
if (filename == NULL || strlen (filename) == 0)
{
displayname = g_strdup_printf("%s %s",_("Untitled"),file_modified ? "*" : "");
}
else
{
displayname = g_strdup_printf("%s %s",basename(filename),file_modified ? "*" : "");
}
udisplayname = g_locale_to_utf8 (displayname, -1, NULL, NULL, &error);
if (error)
{
gpe_error_box (error->message);
g_error_free (error);
}
if (udisplayname)
{
window_title = g_strdup_printf ("%s - %s", wname, udisplayname);
gtk_window_set_title (GTK_WINDOW (main_window), window_title);
g_free (udisplayname);
g_free (window_title);
}
g_free (displayname);
}
static void
text_changed (void)
{
if (file_modified == 0)
{
file_modified = 1;
update_window_title ();
}
}
static void
new_file (GtkWidget *w, gpointer p)
{
if (file_modified)
{
if (gpe_question_ask (_("Current file is modified, save?"), _("Question"),
"question", "!gtk-no", NULL, "!gtk-yes", NULL, NULL))
save_file ();
else
file_modified = 0;
}
if (!file_modified)
{
clear_text_area ();
file_modified = 0;
if (filename) g_free(filename);
filename = NULL;
update_window_title ();
}
}
static void
open_file (const char *new_filename)
{
struct stat file_stat;
gchar *old_filename;
FILE *fp;
old_filename = filename;
filename = g_strdup (new_filename);
if ( (fp = fopen(filename, "r")) == NULL)
{
gpe_perror_box (filename);
g_free (filename);
filename = old_filename;
}
else
{
GtkTextIter start, end;
GtkTextBuffer *buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_area));
gchar *text, *buffer;
gsize size;
stat (filename, &file_stat);
buffer = g_malloc (file_stat.st_size);
fread (buffer, file_stat.st_size, 1, fp);
fclose (fp);
clear_text_area ();
if (utf8_mode)
{
text = buffer;
size = file_stat.st_size;
}
else
{
GError *error = NULL;
text = g_locale_to_utf8 (buffer, file_stat.st_size, NULL, &size, &error);
g_free (buffer);
if (error)
{
gpe_error_box (error->message);
g_error_free (error);
}
}
if (text)
{
gtk_text_buffer_get_bounds (buf, &start, &end);
gtk_text_buffer_insert (buf, &start, text, size);
g_free (text);
}
file_modified = 0;
update_window_title ();
if (old_filename) g_free(old_filename);
}
}
static void
open_file_from_filesel (GtkFileSelection *selector, gpointer user_data)
{
char *fname = NULL;
fname = g_strdup(gtk_file_selection_get_filename (GTK_FILE_SELECTION (file_selector)));
gtk_widget_destroy (file_selector);
open_file (fname);
if (fname) free(fname);
}
static void
do_save_file (gchar *filename)
{
guint text_length;
FILE *fp;
if ( (fp = fopen(filename, "w")) == NULL)
{
gpe_perror_box (filename);
}
else
{
GtkTextIter start, end;
GtkTextBuffer *buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_area));
gchar *text;
gtk_text_buffer_get_bounds (buf, &start, &end);
text = gtk_text_buffer_get_text (buf, &start, &end, FALSE);
if (!utf8_mode)
{
gchar *p = text;
text = g_locale_from_utf8 (text, -1, NULL, NULL, NULL);
g_free (p);
}
if (text)
{
text_length = strlen (text);
fwrite (text, 1, text_length, fp);
fclose (fp);
g_free (text);
}
file_modified = 0;
update_window_title ();
}
}
static void
select_open_file (void)
{
file_selector = gtk_file_selection_new (_("Open File ..."));
if(filename != NULL)
{
gchar *dir, *dir_with_sep;
gint path_len;
dir = g_path_get_dirname(filename);
path_len = strlen(dir);
dir_with_sep = (gchar *) g_malloc(path_len+2);
strncpy(dir_with_sep, dir, path_len);
dir_with_sep[path_len] = G_DIR_SEPARATOR;
dir_with_sep[path_len+1] = '\0';
gtk_file_selection_set_filename(GTK_FILE_SELECTION(file_selector), dir_with_sep);
g_free(dir_with_sep);
g_free(dir);
}
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->ok_button),
"clicked", GTK_SIGNAL_FUNC (open_file_from_filesel), NULL);
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->cancel_button),
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
(gpointer) file_selector);
gtk_window_set_transient_for(GTK_WINDOW(file_selector), GTK_WINDOW(main_window));
gtk_window_set_modal(GTK_WINDOW(file_selector), TRUE);
gtk_widget_show (file_selector);
}
static void
select_save_file_as (void)
{
gchar *suggested_filename;
guint text_length;
GtkTextIter start, end;
gint offset;
GtkTextBuffer *buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_area));
gtk_text_buffer_get_bounds (buf, &start, &end);
offset = gtk_text_iter_get_offset (&start);
text_length = gtk_text_iter_get_offset (&end) - offset;
if (text_length > 10)
text_length = 10;
gtk_text_iter_set_offset (&end, offset + text_length);
suggested_filename = gtk_text_buffer_get_text (buf, &start, &end, FALSE);
file_selector = gtk_file_selection_new (_("Save as..."));
gtk_window_set_transient_for(GTK_WINDOW(file_selector), GTK_WINDOW(main_window));
gtk_window_set_modal(GTK_WINDOW(file_selector), TRUE);
gtk_file_selection_set_filename (GTK_FILE_SELECTION (file_selector), suggested_filename);
gtk_widget_show (file_selector);
if (gtk_dialog_run(GTK_DIALOG(file_selector)) == GTK_RESPONSE_OK)
{
if (filename)
g_free(filename);
filename = g_strdup(gtk_file_selection_get_filename (GTK_FILE_SELECTION (file_selector)));
do_save_file (filename);
if (access(filename,W
没有合适的资源?快使用搜索试试~ 我知道了~
gpe-edit.gz_editing
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 171 浏览量
2022-09-24
01:02:33
上传
评论
收藏 273KB GZ 举报
温馨提示
共89个文件
po:25个
gmo:24个
in:9个
This is a text editing for Unix-linux system which uses GTK-2.0
资源推荐
资源详情
资源评论
收起资源包目录
gpe-edit.gz (89个子文件)
gpe-edit
gpe-edit.png 3KB
.deps
main.Po 42KB
intltool-update 30KB
po
stamp-it 0B
sv.po 2KB
fr.gmo 2KB
pt.gmo 2KB
wa.gmo 2KB
hu.po 2KB
nl.po 2KB
wa.po 2KB
fr.po 2KB
vi.gmo 2KB
pl.po 2KB
id.po 2KB
zh_CN.po 2KB
.intltool-merge-cache 19KB
sl.po 2KB
sk.gmo 2KB
cs.gmo 2KB
rw.po 3KB
es.po 2KB
pl.gmo 2KB
pt_BR.gmo 2KB
zh_TW.gmo 1KB
de.po 2KB
POTFILES.in 30B
ko.po 2KB
POTFILES 40B
pt.po 2KB
ro.po 2KB
Makefile.in.in 7KB
ru.po 2KB
es.gmo 2KB
sr.po 2KB
pt_BR.po 2KB
rw.gmo 838B
nl.gmo 2KB
ja.gmo 2KB
tr.gmo 2KB
Makefile.in 7KB
sv.gmo 2KB
vi.po 2KB
sk.po 2KB
ro.gmo 2KB
ru.gmo 2KB
tr.po 2KB
ko.gmo 2KB
Makefile 7KB
zh_TW.po 2KB
ChangeLog 0B
hu.gmo 2KB
cs.po 2KB
sl.gmo 2KB
sr.gmo 2KB
de.gmo 764B
zh_CN.gmo 2KB
ja.po 2KB
id.gmo 2KB
intltool-merge.in 37KB
main.c 21KB
gpe-edit.desktop.in.in 193B
config.log 21KB
intltool-extract.in 23KB
gpe-edit.desktop.in 193B
depcomp 16KB
aclocal.m4 58KB
gpe-edit 58KB
config.guess 44KB
Makefile.am 1KB
config.sub 32KB
intltool-update.in 30KB
Makefile.in 28KB
missing 11KB
gpe-edit.mime 68B
install-sh 9KB
doc
gpe-edit.html 890B
configure 214KB
config.status 34KB
intltool-merge 37KB
Makefile 33KB
main.o 58KB
ChangeLog 8KB
gpe-edit.desktop 2KB
gpe-dist.am 254B
configure.ac 846B
gpe-edit.applications 174B
gpe-tp.am 131B
intltool-extract 23KB
共 89 条
- 1
资源评论
alvarocfc
- 粉丝: 108
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功