[gnome-latex: 43/205] Symbols: arrows
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-latex: 43/205] Symbols: arrows
- Date: Fri, 14 Dec 2018 10:50:30 +0000 (UTC)
commit 2f3870216737c4683e6d80a28e9ab4b9c2b37615
Author: Sébastien Wilmet <sebastien wilmet gmail com>
Date: Mon Sep 7 01:29:49 2009 +0200
Symbols: arrows
There is a list to choose the Greek letters or the arrows.
CMakeLists.txt | 2 +-
TODO | 4 +-
src/callbacks.c | 34 ++++++++
src/callbacks.h | 1 +
src/main.c | 240 +++++++++++++++++++++++++++++++++++++++++++++-----------
src/main.h | 20 +++--
6 files changed, 248 insertions(+), 53 deletions(-)
---
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f113d78..a397a21 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6.2)
PROJECT(latexila)
diff --git a/TODO b/TODO
index 565c897..41036ac 100644
--- a/TODO
+++ b/TODO
@@ -13,12 +13,12 @@ Thu Sep 3, 2009 to Thu Sep 10, 2009
[-] symbol tables
x Greek alphabet
- - arrows
+ x arrows
- relation
+ - delimiters
- operators
- miscellaneous math
- miscellaneous text
- - delimiters
- ...
[-] save and load dimensions
diff --git a/src/callbacks.c b/src/callbacks.c
index e6d60ba..deeb20a 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -774,6 +774,40 @@ cb_font_set (GtkFontButton *font_button, gpointer user_data)
pref_changed = TRUE;
}
+void
+cb_category_symbols_selected (GtkIconView *icon_view, gpointer user_data)
+{
+ GList *selected_items = gtk_icon_view_get_selected_items (icon_view);
+ GtkTreePath *path = g_list_nth_data (selected_items, 0);
+ GtkTreeModel *model = gtk_icon_view_get_model (icon_view);
+ GtkTreeIter iter;
+
+ if (path != NULL && gtk_tree_model_get_iter (model, &iter, path))
+ {
+ gint num;
+ gtk_tree_model_get (model, &iter, COLUMN_CAT_NUM, &num, -1);
+
+ // change the model
+ gtk_icon_view_set_model (latexila.symbol_view,
+ GTK_TREE_MODEL (latexila.symbol_stores[num]));
+
+ // TODO scroll to the start
+ /* this doesn't work...
+ GtkTreePath *first_path = gtk_icon_view_get_path_at_pos (
+ latexila.symbol_view, 0, 0);
+ if (first_path != NULL)
+ {
+ gtk_icon_view_scroll_to_path (latexila.symbol_view, first_path,
+ TRUE, 0.0, 0.0);
+ }
+ */
+ }
+
+ // free the GList
+ g_list_foreach (selected_items, (GFunc) gtk_tree_path_free, NULL);
+ g_list_free (selected_items);
+}
+
void
cb_symbol_selected (GtkIconView *icon_view, gpointer user_data)
{
diff --git a/src/callbacks.h b/src/callbacks.h
index 9869181..8da7839 100644
--- a/src/callbacks.h
+++ b/src/callbacks.h
@@ -63,6 +63,7 @@ void cb_pref_dialog_close (GtkDialog *dialog, gint response_id,
void cb_line_numbers (GtkToggleButton *toggle_button, gpointer user_data);
void cb_command_view (GtkButton *button, gpointer user_data);
void cb_font_set (GtkFontButton *font_button, gpointer user_data);
+void cb_category_symbols_selected (GtkIconView *icon_view, gpointer user_data);
void cb_symbol_selected (GtkIconView *icon_view, gpointer user_data);
void open_new_document (const gchar *filename, const gchar *uri);
diff --git a/src/main.c b/src/main.c
index 67420c6..f6e03cc 100644
--- a/src/main.c
+++ b/src/main.c
@@ -31,10 +31,13 @@
#include "callbacks.h"
#include "print.h"
+static void register_my_stock_icons (void);
+static GtkListStore * get_symbol_store (const struct symbol symbols[]);
+
latexila_t latexila = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL};
-static struct symbols symbols_greek[] = {
+static struct symbol symbols_greek[] = {
{DATA_DIR "/images/greek/01-alpha.png", "\\alpha", NULL},
{DATA_DIR "/images/greek/02-beta.png", "\\beta", NULL},
{DATA_DIR "/images/greek/03-gamma.png", "\\gamma", NULL},
@@ -99,13 +102,87 @@ static struct symbols symbols_greek[] = {
{DATA_DIR "/images/greek/62-Psi.png", "\\Psi", NULL},
{DATA_DIR "/images/greek/63-varPsi.png", "\\varPsi", "amsmath"},
{DATA_DIR "/images/greek/64-Omega.png", "\\Omega", NULL},
- {DATA_DIR "/images/greek/65-varOmega.png", "\\varOmega", "amsmath"}
+ {DATA_DIR "/images/greek/65-varOmega.png", "\\varOmega", "amsmath"},
+ {NULL, NULL, NULL}
+};
+
+static struct symbol symbols_arrows[] = {
+ {DATA_DIR "/images/arrows/01.png", "\\leftarrow", NULL},
+ {DATA_DIR "/images/arrows/02.png", "\\leftrightarrow", NULL},
+ {DATA_DIR "/images/arrows/03.png", "\\rightarrow", NULL},
+ {DATA_DIR "/images/arrows/04.png", "\\mapsto", NULL},
+ {DATA_DIR "/images/arrows/05.png", "\\longleftarrow", NULL},
+ {DATA_DIR "/images/arrows/06.png", "\\longleftrightarrow", NULL},
+ {DATA_DIR "/images/arrows/07.png", "\\longrightarrow", NULL},
+ {DATA_DIR "/images/arrows/08.png", "\\longmapsto", NULL},
+ {DATA_DIR "/images/arrows/09.png", "\\downarrow", NULL},
+ {DATA_DIR "/images/arrows/10.png", "\\updownarrow", NULL},
+ {DATA_DIR "/images/arrows/11.png", "\\uparrow", NULL},
+ {DATA_DIR "/images/arrows/12.png", "\\nwarrow", NULL},
+ {DATA_DIR "/images/arrows/13.png", "\\searrow", NULL},
+ {DATA_DIR "/images/arrows/14.png", "\\nearrow", NULL},
+ {DATA_DIR "/images/arrows/15.png", "\\swarrow", NULL},
+ {DATA_DIR "/images/arrows/16.png", "\\textdownarrow", "textcomp"},
+ {DATA_DIR "/images/arrows/17.png", "\\textuparrow", "textcomp"},
+ {DATA_DIR "/images/arrows/18.png", "\\textleftarrow", "textcomp"},
+ {DATA_DIR "/images/arrows/19.png", "\\textrightarrow", "textcomp"},
+ {DATA_DIR "/images/arrows/20.png", "\\nleftarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/21.png", "\\nleftrightarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/22.png", "\\nrightarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/23.png", "\\hookleftarrow", NULL},
+ {DATA_DIR "/images/arrows/24.png", "\\hookrightarrow", NULL},
+ {DATA_DIR "/images/arrows/25.png", "\\twoheadleftarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/26.png", "\\twoheadrightarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/27.png", "\\leftarrowtail", "amssymb"},
+ {DATA_DIR "/images/arrows/28.png", "\\rightarrowtail", "amssymb"},
+ {DATA_DIR "/images/arrows/29.png", "\\Leftarrow", NULL},
+ {DATA_DIR "/images/arrows/30.png", "\\Leftrightarrow", NULL},
+ {DATA_DIR "/images/arrows/31.png", "\\Rightarrow", NULL},
+ {DATA_DIR "/images/arrows/32.png", "\\Longleftarrow", NULL},
+ {DATA_DIR "/images/arrows/33.png", "\\Longleftrightarrow", NULL},
+ {DATA_DIR "/images/arrows/34.png", "\\Longrightarrow", NULL},
+ {DATA_DIR "/images/arrows/35.png", "\\Updownarrow", NULL},
+ {DATA_DIR "/images/arrows/36.png", "\\Uparrow", NULL},
+ {DATA_DIR "/images/arrows/37.png", "\\Downarrow", NULL},
+ {DATA_DIR "/images/arrows/38.png", "\\nLeftarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/39.png", "\\nLeftrightarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/40.png", "\\nRightarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/41.png", "\\leftleftarrows", "amssymb"},
+ {DATA_DIR "/images/arrows/42.png", "\\leftrightarrows", "amssymb"},
+ {DATA_DIR "/images/arrows/43.png", "\\rightleftarrows", "amssymb"},
+ {DATA_DIR "/images/arrows/44.png", "\\rightrightarrows", "amssymb"},
+ {DATA_DIR "/images/arrows/45.png", "\\downdownarrows", "amssymb"},
+ {DATA_DIR "/images/arrows/46.png", "\\upuparrows", "amssymb"},
+ {DATA_DIR "/images/arrows/47.png", "\\circlearrowleft", "amssymb"},
+ {DATA_DIR "/images/arrows/48.png", "\\circlearrowright", "amssymb"},
+ {DATA_DIR "/images/arrows/49.png", "\\curvearrowleft", "amssymb"},
+ {DATA_DIR "/images/arrows/50.png", "\\curvearrowright", "amssymb"},
+ {DATA_DIR "/images/arrows/51.png", "\\Lsh", "amssymb"},
+ {DATA_DIR "/images/arrows/52.png", "\\Rsh", "amssymb"},
+ {DATA_DIR "/images/arrows/53.png", "\\looparrowleft", "amssymb"},
+ {DATA_DIR "/images/arrows/54.png", "\\looparrowright", "amssymb"},
+ {DATA_DIR "/images/arrows/55.png", "\\dashleftarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/56.png", "\\dashrightarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/57.png", "\\leftrightsquigarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/58.png", "\\rightsquigarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/59.png", "\\Lleftarrow", "amssymb"},
+ {DATA_DIR "/images/arrows/60.png", "\\leftharpoondown", NULL},
+ {DATA_DIR "/images/arrows/61.png", "\\rightharpoondown", NULL},
+ {DATA_DIR "/images/arrows/62.png", "\\leftharpoonup", NULL},
+ {DATA_DIR "/images/arrows/63.png", "\\rightharpoonup", NULL},
+ {DATA_DIR "/images/arrows/64.png", "\\rightleftharpoons", NULL},
+ {DATA_DIR "/images/arrows/65.png", "\\leftrightharpoons", "amssymb"},
+ {DATA_DIR "/images/arrows/66.png", "\\downharpoonleft", "amssymb"},
+ {DATA_DIR "/images/arrows/67.png", "\\upharpoonleft", "amssymb"},
+ {DATA_DIR "/images/arrows/68.png", "\\downharpoonright", "amssymb"},
+ {DATA_DIR "/images/arrows/69.png", "\\upharpoonright", "amssymb"},
+ {NULL, NULL, NULL}
};
-static struct {
- gchar *filename;
- gchar *stock_id;
-} stock_icons[] = {
+static struct {
+ gchar *filename;
+ gchar *stock_id;
+} stock_icons[] = {
{DATA_DIR "/images/icons/compile_latex.png", "compile_latex"},
{DATA_DIR "/images/icons/compile_pdflatex.png", "compile_pdflatex"},
{DATA_DIR "/images/icons/view_dvi.png", "view_dvi"},
@@ -132,15 +209,62 @@ register_my_stock_icons (void)
gtk_icon_factory_add (icon_factory, stock_icons[i].stock_id, icon_set);
gtk_icon_set_unref (icon_set);
}
+
gtk_icon_factory_add_default (icon_factory);
g_object_unref (icon_factory);
}
+// symbols must be NULL-terminated
+static GtkListStore *
+get_symbol_store (const struct symbol symbols[])
+{
+ GError *error = NULL;
+ GtkListStore *symbol_store = gtk_list_store_new (N_COLUMNS_SYMBOL,
+ GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
+
+ for (gint i = 0 ; symbols[i].filename != NULL ; i++)
+ {
+ struct symbol current_symbol = symbols[i];
+
+ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (current_symbol.filename,
+ &error);
+ if (error != NULL)
+ {
+ print_warning ("impossible to load the symbol: %s", error->message);
+ g_error_free (error);
+ continue;
+ }
+
+ gchar *tooltip;
+ if (current_symbol.package_required != NULL)
+ {
+ tooltip = g_strdup_printf ("%s (package %s)",
+ current_symbol.latex_command,
+ current_symbol.package_required);
+ }
+ else
+ tooltip = g_strdup (current_symbol.latex_command);
+
+ GtkTreeIter iter;
+ gtk_list_store_append (symbol_store, &iter);
+ gtk_list_store_set (symbol_store, &iter,
+ COLUMN_SYMBOL_PIXBUF, pixbuf,
+ COLUMN_SYMBOL_COMMAND, current_symbol.latex_command,
+ COLUMN_SYMBOL_TOOLTIP, tooltip,
+ -1);
+ g_free (tooltip);
+ }
+
+ return symbol_store;
+}
+
int
main (int argc, char *argv[])
{
GError *error = NULL;
GtkWidget *scrollbar;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
gtk_init (&argc, &argv);
@@ -311,58 +435,84 @@ main (int argc, char *argv[])
gtk_box_pack_start (GTK_BOX (main_vbox), main_hpaned, TRUE, TRUE, 0);
/* symbol tables */
- GtkWidget *symbol_tables = gtk_vbox_new (FALSE, 0);
- gtk_paned_pack1 (GTK_PANED (main_hpaned), symbol_tables, TRUE, TRUE);
+ GtkWidget *vbox_symbols = gtk_vbox_new (FALSE, 0);
+ gtk_paned_pack1 (GTK_PANED (main_hpaned), vbox_symbols, TRUE, TRUE);
+
+ // store the categories
+ struct {
+ gchar *name;
+ gchar *icon;
+ } categories[] = {
+ {"Greek", DATA_DIR "/images/greek/18-pi.png"},
+ {"Arrows", DATA_DIR "/images/arrows/58.png"}
+ };
- GtkListStore *greek_symbol_store = gtk_list_store_new (N_COLUMNS_SYMBOL,
- GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
+ GtkListStore *categories_store = gtk_list_store_new (N_COLUMNS_CAT,
+ GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
- // store the data
- gint nb_greek_letters = G_N_ELEMENTS (symbols_greek);
- GtkTreeIter iter;
- for (gint i = 0 ; i < nb_greek_letters ; i++)
+ gint nb_categories = G_N_ELEMENTS (categories);
+ for (gint i = 0 ; i < nb_categories ; i++)
{
- GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (symbols_greek[i].filename,
+ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (categories[i].icon,
&error);
if (error != NULL)
{
print_warning ("impossible to load the symbol: %s", error->message);
g_error_free (error);
+ continue;
}
- else
- {
- gchar *tooltip;
- if (symbols_greek[i].package_required != NULL)
- {
- tooltip = g_strdup_printf ("%s (package %s)",
- symbols_greek[i].latex_command,
- symbols_greek[i].package_required);
- }
- else
- tooltip = g_strdup (symbols_greek[i].latex_command);
-
- gtk_list_store_append (greek_symbol_store, &iter);
- gtk_list_store_set (greek_symbol_store, &iter,
- COLUMN_SYMBOL_PIXBUF, pixbuf,
- COLUMN_SYMBOL_COMMAND, symbols_greek[i].latex_command,
- COLUMN_SYMBOL_TOOLTIP, tooltip,
- -1);
- g_free (tooltip);
- }
+
+ GtkTreeIter iter;
+ gtk_list_store_append (categories_store, &iter);
+ gtk_list_store_set (categories_store, &iter,
+ COLUMN_CAT_ICON, pixbuf,
+ COLUMN_CAT_NAME, categories[i].name,
+ COLUMN_CAT_NUM, i,
+ -1);
}
+ // show the categories
+ GtkWidget *categories_view = gtk_icon_view_new_with_model (
+ GTK_TREE_MODEL (categories_store));
+ gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (categories_view),
+ COLUMN_CAT_ICON);
+ gtk_icon_view_set_text_column (GTK_ICON_VIEW (categories_view),
+ COLUMN_CAT_NAME);
+ gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (categories_view),
+ GTK_SELECTION_SINGLE);
+ /*
+ gtk_icon_view_set_orientation (GTK_ICON_VIEW (categories_view),
+ GTK_ORIENTATION_HORIZONTAL);
+ gtk_icon_view_set_columns (GTK_ICON_VIEW (categories_view), 1);
+ */
+ gtk_icon_view_set_spacing (GTK_ICON_VIEW (categories_view), 0);
+ gtk_icon_view_set_row_spacing (GTK_ICON_VIEW (categories_view), 0);
+ gtk_icon_view_set_column_spacing (GTK_ICON_VIEW (categories_view), 0);
+
+ g_signal_connect (G_OBJECT (categories_view), "selection-changed",
+ G_CALLBACK (cb_category_symbols_selected), NULL);
+
+ gtk_box_pack_start (GTK_BOX (vbox_symbols), categories_view, FALSE, FALSE, 0);
+
+ // store all the symbols
+ // Attention, we must save the GtkListStore in latexila.symbol_stores in
+ // the same order than the structure "categories" above
+ latexila.symbol_stores[0] = get_symbol_store (symbols_greek);
+ latexila.symbol_stores[1] = get_symbol_store (symbols_arrows);
+
// show the symbols
GtkWidget *symbol_view = gtk_icon_view_new_with_model (
- GTK_TREE_MODEL (greek_symbol_store));
- gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (symbol_view),
+ GTK_TREE_MODEL (latexila.symbol_stores[0]));
+ latexila.symbol_view = GTK_ICON_VIEW (symbol_view);
+ gtk_icon_view_set_pixbuf_column (latexila.symbol_view,
COLUMN_SYMBOL_PIXBUF);
- gtk_icon_view_set_tooltip_column (GTK_ICON_VIEW (symbol_view),
+ gtk_icon_view_set_tooltip_column (latexila.symbol_view,
COLUMN_SYMBOL_TOOLTIP);
- gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (symbol_view),
+ gtk_icon_view_set_selection_mode (latexila.symbol_view,
GTK_SELECTION_SINGLE);
- gtk_icon_view_set_spacing (GTK_ICON_VIEW (symbol_view), 0);
- gtk_icon_view_set_row_spacing (GTK_ICON_VIEW (symbol_view), 0);
- gtk_icon_view_set_column_spacing (GTK_ICON_VIEW (symbol_view), 0);
+ gtk_icon_view_set_spacing (latexila.symbol_view, 0);
+ gtk_icon_view_set_row_spacing (latexila.symbol_view, 0);
+ gtk_icon_view_set_column_spacing (latexila.symbol_view, 0);
g_signal_connect (G_OBJECT (symbol_view), "selection-changed",
G_CALLBACK (cb_symbol_selected), NULL);
@@ -372,7 +522,7 @@ main (int argc, char *argv[])
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollbar),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (scrollbar), symbol_view);
- gtk_box_pack_start (GTK_BOX (symbol_tables), scrollbar, TRUE, TRUE, 5);
+ gtk_box_pack_start (GTK_BOX (vbox_symbols), scrollbar, TRUE, TRUE, 0);
/* vertical pane
* top: source view
@@ -405,8 +555,8 @@ main (int argc, char *argv[])
GtkWidget *list_view = gtk_tree_view_new_with_model (
GTK_TREE_MODEL (list_store));
latexila.list_view = GTK_TREE_VIEW (list_view);
- GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
- GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes (
+ renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (
_("Action history"), renderer, "text", COLUMN_ACTION_TITLE, NULL);
gtk_tree_view_append_column (latexila.list_view, column);
diff --git a/src/main.h b/src/main.h
index c2cc671..4997783 100644
--- a/src/main.h
+++ b/src/main.h
@@ -24,9 +24,9 @@
// if Native Language Support is enabled
#ifdef LATEXILA_NLS_ENABLED
-#define _(STRING) gettext(STRING)
+# define _(STRING) gettext(STRING)
#else
-#define _(STRING) STRING
+# define _(STRING) STRING
#endif
// if GTK+ version is < 2.14.0
@@ -67,9 +67,11 @@ typedef struct
gchar *pref_file;
PangoFontDescription *font_desc;
gint font_size;
+ GtkListStore *symbol_stores[2];
+ GtkIconView *symbol_view;
} latexila_t;
-// all the documents are accessible by the docs variable
+// all the documents are accessible by the "latexila" variable
extern latexila_t latexila;
// for the actions list in the log zone
@@ -83,7 +85,7 @@ enum action
};
// for the symbol tables
-struct symbols
+struct symbol
{
gchar *filename;
gchar *latex_command;
@@ -91,7 +93,7 @@ struct symbols
};
// for the symbol lists
-enum symbol
+enum symbols
{
COLUMN_SYMBOL_PIXBUF,
COLUMN_SYMBOL_COMMAND,
@@ -99,4 +101,12 @@ enum symbol
N_COLUMNS_SYMBOL
};
+enum category_symbols
+{
+ COLUMN_CAT_ICON,
+ COLUMN_CAT_NAME,
+ COLUMN_CAT_NUM,
+ N_COLUMNS_CAT
+};
+
#endif /* MAIN_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]