Merge pull request #77 from gergelypolonkai/display-themes
Add display theme support
This commit is contained in:
commit
0af9bcc13f
@ -22,6 +22,11 @@
|
||||
<summary>The default house system</summary>
|
||||
<description>The house system to use by default in new charts</description>
|
||||
</key>
|
||||
<key name="default-display-theme" type="i">
|
||||
<default>-1</default>
|
||||
<summary>The ID of the default display theme to use</summary>
|
||||
<description>The database ID of the display theme to be used when a chart is created/opened.</description>
|
||||
</key>
|
||||
</schema>
|
||||
<schema id="eu.polonkai.gergely.Astrognome.state" path="/eu/polonkai/gergely/Astrognome/state/">
|
||||
<child name="window" schema="eu.polonkai.gergely.Astrognome.state.window" />
|
||||
@ -44,11 +49,4 @@
|
||||
<description>The height of newly created windows.</description>
|
||||
</key>
|
||||
</schema>
|
||||
<schema id="eu.polonkai.gergely.Astrognome.state.chart" path="/eu/polonkai/gergely/Astrognome/state/chart/">
|
||||
<key name="classic-only" type="b">
|
||||
<default>false</default>
|
||||
<summary>Use the classical view</summary>
|
||||
<description>Use the classical view: planets only between Sun and Saturn, only Ptolemaic aspects, no antiscia.</description>
|
||||
</key>
|
||||
</schema>
|
||||
</schemalist>
|
||||
|
@ -13,13 +13,14 @@ BUILT_SOURCES = \
|
||||
$(NULL)
|
||||
|
||||
astrognome_source_files = \
|
||||
ag-app.c \
|
||||
ag-window.c \
|
||||
ag-chart.c \
|
||||
ag-settings.c \
|
||||
ag-preferences.c \
|
||||
ag-db.c \
|
||||
astrognome.c \
|
||||
ag-app.c \
|
||||
ag-window.c \
|
||||
ag-chart.c \
|
||||
ag-settings.c \
|
||||
ag-preferences.c \
|
||||
ag-db.c \
|
||||
ag-display-theme.c \
|
||||
astrognome.c \
|
||||
$(NULL)
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
36
src/ag-app.c
36
src/ag-app.c
@ -8,11 +8,7 @@
|
||||
#include "config.h"
|
||||
#include "astrognome.h"
|
||||
|
||||
typedef struct _AgAppPrivate {
|
||||
WebKitUserContentManager *manager;
|
||||
} AgAppPrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE(AgApp, ag_app, GTK_TYPE_APPLICATION);
|
||||
G_DEFINE_TYPE(AgApp, ag_app, GTK_TYPE_APPLICATION);
|
||||
|
||||
GtkWindow *
|
||||
ag_app_peek_first_window(AgApp *app)
|
||||
@ -56,9 +52,8 @@ static GtkWidget *
|
||||
ag_app_create_window(AgApp *app)
|
||||
{
|
||||
GtkWidget *window;
|
||||
AgAppPrivate *priv = ag_app_get_instance_private(app);
|
||||
|
||||
window = ag_window_new(app, priv->manager);
|
||||
window = ag_window_new(app);
|
||||
gtk_application_add_window(GTK_APPLICATION(app), GTK_WINDOW(window));
|
||||
gtk_widget_show_all(window);
|
||||
|
||||
@ -432,33 +427,6 @@ ag_app_new(void)
|
||||
static void
|
||||
ag_app_init(AgApp *app)
|
||||
{
|
||||
AgAppPrivate *priv;
|
||||
GBytes *css_data;
|
||||
const gchar *css_source;
|
||||
gsize css_length;
|
||||
WebKitUserStyleSheet *stylesheet;
|
||||
|
||||
priv = ag_app_get_instance_private(app);
|
||||
priv->manager = webkit_user_content_manager_new();
|
||||
|
||||
css_data = g_resources_lookup_data(
|
||||
"/eu/polonkai/gergely/Astrognome/ui/chart-default.css",
|
||||
G_RESOURCE_LOOKUP_FLAGS_NONE,
|
||||
NULL
|
||||
);
|
||||
|
||||
if ((css_source = g_bytes_get_data(css_data, &css_length)) != NULL) {
|
||||
stylesheet = webkit_user_style_sheet_new(
|
||||
css_source,
|
||||
WEBKIT_USER_CONTENT_INJECT_TOP_FRAME,
|
||||
WEBKIT_USER_STYLE_LEVEL_USER,
|
||||
NULL, NULL
|
||||
);
|
||||
webkit_user_content_manager_add_style_sheet(priv->manager, stylesheet);
|
||||
webkit_user_style_sheet_unref(stylesheet);
|
||||
}
|
||||
|
||||
g_bytes_unref(css_data);
|
||||
}
|
||||
|
||||
static void
|
||||
|
164
src/ag-chart.c
164
src/ag-chart.c
@ -12,6 +12,7 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "astrognome.h"
|
||||
#include "ag-db.h"
|
||||
#include "ag-chart.h"
|
||||
#include "placidus.h"
|
||||
@ -221,145 +222,18 @@ ag_chart_finalize(GObject *gobject)
|
||||
void
|
||||
ag_chart_add_planets(AgChart *chart)
|
||||
{
|
||||
int i;
|
||||
AgChartPrivate *priv = ag_chart_get_instance_private(chart);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_CHARIKLO, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_CHARIKLO)
|
||||
);
|
||||
for (i = 0; i < used_planets_count; i++) {
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), used_planets[i], NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(used_planets[i])
|
||||
);
|
||||
}
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_VESTA, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_VESTA)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_JUNO, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_JUNO)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_PALLAS, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_PALLAS)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_CERES, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_CERES)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_NESSUS, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_NESSUS)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_PHOLUS, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_PHOLUS)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_CHIRON, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_CHIRON)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_MOON_APOGEE, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MOON_APOGEE)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_MOON_NODE, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MOON_NODE)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_PLUTO, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_PLUTO)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_NEPTUNE, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_NEPTUNE)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_URANUS, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_URANUS)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_SATURN, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_SATURN)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_JUPITER, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_JUPITER)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_MARS, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MARS)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_VENUS, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_VENUS)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_MERCURY, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MERCURY)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_MOON, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MOON)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_SUN, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_SUN)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_VERTEX, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_VERTEX)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_ASCENDANT, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_ASCENDANT)
|
||||
);
|
||||
|
||||
gswe_moment_add_planet(GSWE_MOMENT(chart), GSWE_PLANET_MC, NULL);
|
||||
priv->planet_list = g_list_prepend(
|
||||
priv->planet_list,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MC)
|
||||
);
|
||||
priv->planet_list = g_list_reverse(priv->planet_list);
|
||||
}
|
||||
|
||||
AgChart *
|
||||
@ -1277,7 +1151,7 @@ AgChart *ag_chart_load_from_placidus_file(GFile *file,
|
||||
}
|
||||
|
||||
AgChart *
|
||||
ag_chart_new_from_db_save(AgDbSave *save_data, GError **err)
|
||||
ag_chart_new_from_db_save(AgDbChartSave *save_data, GError **err)
|
||||
{
|
||||
GsweTimestamp *timestamp;
|
||||
gchar *house_system_enum_name;
|
||||
@ -1675,7 +1549,7 @@ ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
||||
G_ENUM_CLASS(planets_class),
|
||||
gswe_planet_data_get_planet(planet_data)
|
||||
);
|
||||
xmlNewProp(node, BAD_CAST "name", BAD_CAST enum_value->value_name);
|
||||
xmlNewProp(node, BAD_CAST "name", BAD_CAST enum_value->value_nick);
|
||||
|
||||
value = g_malloc0(12);
|
||||
g_ascii_dtostr(value, 12, gswe_planet_data_get_position(planet_data));
|
||||
@ -1724,14 +1598,14 @@ ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
||||
G_ENUM_CLASS(planets_class),
|
||||
gswe_planet_data_get_planet(planet_data)
|
||||
);
|
||||
xmlNewProp(node, BAD_CAST "body1", BAD_CAST enum_value->value_name);
|
||||
xmlNewProp(node, BAD_CAST "body1", BAD_CAST enum_value->value_nick);
|
||||
|
||||
planet_data = gswe_aspect_data_get_planet2(aspect_data);
|
||||
enum_value = g_enum_get_value(
|
||||
G_ENUM_CLASS(planets_class),
|
||||
gswe_planet_data_get_planet(planet_data)
|
||||
);
|
||||
xmlNewProp(node, BAD_CAST "body2", BAD_CAST enum_value->value_name);
|
||||
xmlNewProp(node, BAD_CAST "body2", BAD_CAST enum_value->value_nick);
|
||||
|
||||
enum_value = g_enum_get_value(
|
||||
G_ENUM_CLASS(aspects_class),
|
||||
@ -1769,20 +1643,20 @@ ag_chart_create_svg(AgChart *chart, gsize *length, GError **err)
|
||||
G_ENUM_CLASS(planets_class),
|
||||
gswe_planet_data_get_planet(planet_data)
|
||||
);
|
||||
xmlNewProp(node, BAD_CAST "body1", BAD_CAST enum_value->value_name);
|
||||
xmlNewProp(node, BAD_CAST "body1", BAD_CAST enum_value->value_nick);
|
||||
|
||||
planet_data = gswe_antiscion_data_get_planet2(antiscion_data);
|
||||
enum_value = g_enum_get_value(
|
||||
G_ENUM_CLASS(planets_class),
|
||||
gswe_planet_data_get_planet(planet_data)
|
||||
);
|
||||
xmlNewProp(node, BAD_CAST "body2", BAD_CAST enum_value->value_name);
|
||||
xmlNewProp(node, BAD_CAST "body2", BAD_CAST enum_value->value_nick);
|
||||
|
||||
enum_value = g_enum_get_value(
|
||||
G_ENUM_CLASS(antiscia_class),
|
||||
gswe_antiscion_data_get_axis(antiscion_data)
|
||||
);
|
||||
xmlNewProp(node, BAD_CAST "axis", BAD_CAST enum_value->value_name);
|
||||
xmlNewProp(node, BAD_CAST "axis", BAD_CAST enum_value->value_nick);
|
||||
}
|
||||
|
||||
g_type_class_unref(planets_class);
|
||||
@ -1908,12 +1782,12 @@ ag_chart_get_note(AgChart *chart)
|
||||
return priv->note;
|
||||
}
|
||||
|
||||
AgDbSave *
|
||||
AgDbChartSave *
|
||||
ag_chart_get_db_save(AgChart *chart, gint db_id)
|
||||
{
|
||||
GsweCoordinates *coords;
|
||||
AgChartPrivate *priv = ag_chart_get_instance_private(chart);
|
||||
AgDbSave *save_data = g_new0(AgDbSave, 1);
|
||||
AgDbChartSave *save_data = g_new0(AgDbChartSave, 1);
|
||||
GsweTimestamp *timestamp = gswe_moment_get_timestamp(GSWE_MOMENT(chart));
|
||||
GEnumClass *house_system_class;
|
||||
GEnumValue *house_system_enum;
|
||||
|
@ -57,7 +57,7 @@ AgChart *ag_chart_load_from_agc(GFile *file,
|
||||
AgChart *ag_chart_load_from_placidus_file(GFile *file,
|
||||
GError **err);
|
||||
|
||||
AgChart *ag_chart_new_from_db_save(AgDbSave *save_data, GError **err);
|
||||
AgChart *ag_chart_new_from_db_save(AgDbChartSave *save_data, GError **err);
|
||||
|
||||
void ag_chart_save_to_file(AgChart *chart,
|
||||
GFile *file,
|
||||
@ -92,7 +92,7 @@ void ag_chart_set_note(AgChart *chart, const gchar *note);
|
||||
|
||||
const gchar *ag_chart_get_note(AgChart *chart);
|
||||
|
||||
AgDbSave *ag_chart_get_db_save(AgChart *chart, gint db_id);
|
||||
AgDbChartSave *ag_chart_get_db_save(AgChart *chart, gint db_id);
|
||||
|
||||
#define AG_CHART_ERROR (ag_chart_error_quark())
|
||||
GQuark ag_chart_error_quark(void);
|
||||
|
189
src/ag-db.c
189
src/ag-db.c
@ -22,50 +22,50 @@ G_DEFINE_QUARK(ag_db_error_quark, ag_db_error);
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE(AgDb, ag_db, G_TYPE_OBJECT);
|
||||
|
||||
typedef enum {
|
||||
COLUMN_ID,
|
||||
COLUMN_NAME,
|
||||
COLUMN_COUNTRY,
|
||||
COLUMN_CITY,
|
||||
COLUMN_LONGITUDE,
|
||||
COLUMN_LATITUDE,
|
||||
COLUMN_ALTITUDE,
|
||||
COLUMN_YEAR,
|
||||
COLUMN_MONTH,
|
||||
COLUMN_DAY,
|
||||
COLUMN_HOUR,
|
||||
COLUMN_MINUTE,
|
||||
COLUMN_SECOND,
|
||||
COLUMN_TIMEZONE,
|
||||
COLUMN_HOUSE_SYSTEM,
|
||||
COLUMN_NOTE,
|
||||
enum {
|
||||
COLUMN_CHART_ID,
|
||||
COLUMN_CHART_NAME,
|
||||
COLUMN_CHART_COUNTRY,
|
||||
COLUMN_CHART_CITY,
|
||||
COLUMN_CHART_LONGITUDE,
|
||||
COLUMN_CHART_LATITUDE,
|
||||
COLUMN_CHART_ALTITUDE,
|
||||
COLUMN_CHART_YEAR,
|
||||
COLUMN_CHART_MONTH,
|
||||
COLUMN_CHART_DAY,
|
||||
COLUMN_CHART_HOUR,
|
||||
COLUMN_CHART_MINUTE,
|
||||
COLUMN_CHART_SECOND,
|
||||
COLUMN_CHART_TIMEZONE,
|
||||
COLUMN_CHART_HOUSE_SYSTEM,
|
||||
COLUMN_CHART_NOTE,
|
||||
|
||||
/* Leave this as the last element */
|
||||
COLUMN_COUNT
|
||||
} ChartTableColumn;
|
||||
COLUMN_CHART_COUNT
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
ChartTableColumn id;
|
||||
int id;
|
||||
gchar *name;
|
||||
} ChartTableColumnDef;
|
||||
} TableColumnDef;
|
||||
|
||||
static ChartTableColumnDef chart_table_column[] = {
|
||||
{ COLUMN_ID, "id" },
|
||||
{ COLUMN_NAME, "name" },
|
||||
{ COLUMN_COUNTRY, "country_name" },
|
||||
{ COLUMN_CITY, "city_name" },
|
||||
{ COLUMN_LONGITUDE, "longitude" },
|
||||
{ COLUMN_LATITUDE, "latitude" },
|
||||
{ COLUMN_ALTITUDE, "altitude" },
|
||||
{ COLUMN_YEAR, "year" },
|
||||
{ COLUMN_MONTH, "month" },
|
||||
{ COLUMN_DAY, "day" },
|
||||
{ COLUMN_HOUR, "hour" },
|
||||
{ COLUMN_MINUTE, "minute" },
|
||||
{ COLUMN_SECOND, "second" },
|
||||
{ COLUMN_TIMEZONE, "timezone" },
|
||||
{ COLUMN_HOUSE_SYSTEM, "house_system" },
|
||||
{ COLUMN_NOTE, "note" },
|
||||
static TableColumnDef chart_table_column[] = {
|
||||
{ COLUMN_CHART_ID, "id" },
|
||||
{ COLUMN_CHART_NAME, "name" },
|
||||
{ COLUMN_CHART_COUNTRY, "country_name" },
|
||||
{ COLUMN_CHART_CITY, "city_name" },
|
||||
{ COLUMN_CHART_LONGITUDE, "longitude" },
|
||||
{ COLUMN_CHART_LATITUDE, "latitude" },
|
||||
{ COLUMN_CHART_ALTITUDE, "altitude" },
|
||||
{ COLUMN_CHART_YEAR, "year" },
|
||||
{ COLUMN_CHART_MONTH, "month" },
|
||||
{ COLUMN_CHART_DAY, "day" },
|
||||
{ COLUMN_CHART_HOUR, "hour" },
|
||||
{ COLUMN_CHART_MINUTE, "minute" },
|
||||
{ COLUMN_CHART_SECOND, "second" },
|
||||
{ COLUMN_CHART_TIMEZONE, "timezone" },
|
||||
{ COLUMN_CHART_HOUSE_SYSTEM, "house_system" },
|
||||
{ COLUMN_CHART_NOTE, "note" },
|
||||
};
|
||||
|
||||
/**
|
||||
@ -542,12 +542,12 @@ ag_db_get(void)
|
||||
|
||||
/**
|
||||
* ag_db_save_data_free:
|
||||
* @save_data: the #AgDbSave struct to free
|
||||
* @save_data: the #AgDbChartSave struct to free
|
||||
*
|
||||
* Frees @save_data and all its fields
|
||||
*/
|
||||
void
|
||||
ag_db_save_data_free(AgDbSave *save_data)
|
||||
ag_db_chart_save_free(AgDbChartSave *save_data)
|
||||
{
|
||||
if (!save_data) {
|
||||
return;
|
||||
@ -577,7 +577,7 @@ ag_db_save_data_free(AgDbSave *save_data)
|
||||
}
|
||||
|
||||
/**
|
||||
* ag_db_save_chart:
|
||||
* ag_db_chart_save:
|
||||
* @db: the #AgDb object to operate on
|
||||
* @save_data: the data to save.
|
||||
* @err: a #GError for storing errors
|
||||
@ -589,7 +589,7 @@ ag_db_save_data_free(AgDbSave *save_data)
|
||||
* Returns: TRUE if the save succeeds, FALSE otherwise
|
||||
*/
|
||||
gboolean
|
||||
ag_db_save_chart(AgDb *db, AgDbSave *save_data, GError **err)
|
||||
ag_db_chart_save(AgDb *db, AgDbChartSave *save_data, GError **err)
|
||||
{
|
||||
GError *local_err = NULL;
|
||||
gboolean save_success = TRUE;
|
||||
@ -780,7 +780,7 @@ ag_db_save_chart(AgDb *db, AgDbSave *save_data, GError **err)
|
||||
}
|
||||
|
||||
/**
|
||||
* ag_db_get_chart_list:
|
||||
* ag_db_chart_get_list:
|
||||
* @db: the #AgDb object to operate on
|
||||
* @err: a #GError
|
||||
*
|
||||
@ -788,15 +788,15 @@ ag_db_save_chart(AgDb *db, AgDbSave *save_data, GError **err)
|
||||
* value may be NULL even if there are no charts or if there was an error, you
|
||||
* may want to check @err if the return value is NULL.
|
||||
*
|
||||
* Please be aware that the #AgDbSave objects of the returned value are not
|
||||
* Please be aware that the #AgDbChartSave objects of the returned value are not
|
||||
* fully realised chart records. To get one, you need to call
|
||||
* ag_db_get_chart_data_by_id()
|
||||
* ag_db_chart_get_data_by_id()
|
||||
*
|
||||
* Returns: (element-type AgDbSave) (transfer full): the list of all charts, or
|
||||
* or NULL if there are none, or if there is an error.
|
||||
* Returns: (element-type AgDbChartSave) (transfer full): the list of all
|
||||
* charts, or NULL if there are none, or if there is an error.
|
||||
*/
|
||||
GList *
|
||||
ag_db_get_chart_list(AgDb *db, GError **err)
|
||||
ag_db_chart_get_list(AgDb *db, GError **err)
|
||||
{
|
||||
GdaDataModelIter *iter;
|
||||
GList *ret = NULL;
|
||||
@ -814,8 +814,8 @@ ag_db_get_chart_list(AgDb *db, GError **err)
|
||||
iter = gda_data_model_create_iter(result);
|
||||
|
||||
while (gda_data_model_iter_move_next(iter)) {
|
||||
const GValue *value;
|
||||
AgDbSave *save_data = g_new0(AgDbSave, 1);
|
||||
const GValue *value;
|
||||
AgDbChartSave *save_data = g_new0(AgDbChartSave, 1);
|
||||
|
||||
value = gda_data_model_iter_get_value_at(iter, 0);
|
||||
save_data->db_id = g_value_get_int(value);
|
||||
@ -830,19 +830,19 @@ ag_db_get_chart_list(AgDb *db, GError **err)
|
||||
}
|
||||
|
||||
/**
|
||||
* ag_db_get_chart_data_by_id:
|
||||
* ag_db_chart_get_data_by_id:
|
||||
* @db: the #AgDb object to operate on
|
||||
* @row_id: the ID field of the requested chart
|
||||
* @err: a #GError
|
||||
*
|
||||
* Fetches the specified row from the chart table.
|
||||
*
|
||||
* Returns: (transfer full): A fully filled #AgDbSave record of the chart
|
||||
* Returns: (transfer full): A fully filled #AgDbChartSave record of the chart
|
||||
*/
|
||||
AgDbSave *
|
||||
ag_db_get_chart_data_by_id(AgDb *db, guint row_id, GError **err)
|
||||
AgDbChartSave *
|
||||
ag_db_chart_get_data_by_id(AgDb *db, guint row_id, GError **err)
|
||||
{
|
||||
AgDbSave *save_data;
|
||||
AgDbChartSave *save_data;
|
||||
const GValue *value;
|
||||
gchar *query,
|
||||
*columns;
|
||||
@ -852,7 +852,7 @@ ag_db_get_chart_data_by_id(AgDb *db, guint row_id, GError **err)
|
||||
|
||||
columns = NULL;
|
||||
|
||||
for (i = 1; i < COLUMN_COUNT; i++) {
|
||||
for (i = 1; i < COLUMN_CHART_COUNT; i++) {
|
||||
gchar *tmp;
|
||||
|
||||
if (i == 1) {
|
||||
@ -892,18 +892,28 @@ ag_db_get_chart_data_by_id(AgDb *db, guint row_id, GError **err)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
save_data = g_new0(AgDbSave, 1);
|
||||
save_data = g_new0(AgDbChartSave, 1);
|
||||
|
||||
/* id */
|
||||
value = gda_data_model_get_value_at(result, COLUMN_ID, 0, NULL);
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_CHART_ID,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->db_id = g_value_get_int(value);
|
||||
|
||||
/* name */
|
||||
value = gda_data_model_get_value_at(result, COLUMN_NAME, 0, NULL);
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_CHART_NAME,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->name = g_strdup(g_value_get_string(value));
|
||||
|
||||
/* country */
|
||||
value = gda_data_model_get_value_at(result, COLUMN_COUNTRY, 0, NULL);
|
||||
value = gda_data_model_get_value_at(result, COLUMN_CHART_COUNTRY, 0, NULL);
|
||||
|
||||
if (GDA_VALUE_HOLDS_NULL(value)) {
|
||||
save_data->country = NULL;
|
||||
@ -911,7 +921,7 @@ ag_db_get_chart_data_by_id(AgDb *db, guint row_id, GError **err)
|
||||
save_data->country = g_strdup(g_value_get_string(value));
|
||||
}
|
||||
|
||||
value = gda_data_model_get_value_at(result, COLUMN_CITY, 0, NULL);
|
||||
value = gda_data_model_get_value_at(result, COLUMN_CHART_CITY, 0, NULL);
|
||||
|
||||
if (GDA_VALUE_HOLDS_NULL(value)) {
|
||||
save_data->city = NULL;
|
||||
@ -919,23 +929,23 @@ ag_db_get_chart_data_by_id(AgDb *db, guint row_id, GError **err)
|
||||
save_data->city = g_strdup(g_value_get_string(value));
|
||||
}
|
||||
|
||||
value = gda_data_model_get_value_at(
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_LONGITUDE,
|
||||
COLUMN_CHART_LONGITUDE,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->longitude = g_value_get_double(value);
|
||||
|
||||
value = gda_data_model_get_value_at(
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_LATITUDE,
|
||||
COLUMN_CHART_LATITUDE,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->latitude = g_value_get_double(value);
|
||||
|
||||
value = gda_data_model_get_value_at(result, COLUMN_ALTITUDE, 0, NULL);
|
||||
value = gda_data_model_get_value_at(result, COLUMN_CHART_ALTITUDE, 0, NULL);
|
||||
|
||||
if (GDA_VALUE_HOLDS_NULL(value)) {
|
||||
save_data->altitude = DEFAULT_ALTITUDE;
|
||||
@ -943,56 +953,61 @@ ag_db_get_chart_data_by_id(AgDb *db, guint row_id, GError **err)
|
||||
save_data->altitude = g_value_get_double(value);
|
||||
}
|
||||
|
||||
value = gda_data_model_get_value_at(result, COLUMN_YEAR, 0, NULL);
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_CHART_YEAR,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->year = g_value_get_int(value);
|
||||
|
||||
value = gda_data_model_get_value_at(
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_MONTH,
|
||||
COLUMN_CHART_MONTH,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->month = g_value_get_uint(value);
|
||||
|
||||
value = gda_data_model_get_value_at(result, COLUMN_DAY, 0, NULL);
|
||||
value = gda_data_model_get_value_at(result, COLUMN_CHART_DAY, 0, NULL);
|
||||
save_data->day = g_value_get_uint(value);
|
||||
|
||||
value = gda_data_model_get_value_at(result, COLUMN_HOUR, 0, NULL);
|
||||
value = gda_data_model_get_value_at(result, COLUMN_CHART_HOUR, 0, NULL);
|
||||
save_data->hour = g_value_get_uint(value);
|
||||
|
||||
value = gda_data_model_get_value_at(
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_MINUTE,
|
||||
COLUMN_CHART_MINUTE,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->minute = g_value_get_uint(value);
|
||||
|
||||
value = gda_data_model_get_value_at(
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_SECOND,
|
||||
COLUMN_CHART_SECOND,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->second = g_value_get_uint(value);
|
||||
|
||||
value = gda_data_model_get_value_at(
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_TIMEZONE,
|
||||
COLUMN_CHART_TIMEZONE,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->timezone = g_value_get_double(value);
|
||||
|
||||
value = gda_data_model_get_value_at(
|
||||
value = gda_data_model_get_value_at(
|
||||
result,
|
||||
COLUMN_HOUSE_SYSTEM,
|
||||
COLUMN_CHART_HOUSE_SYSTEM,
|
||||
0,
|
||||
NULL
|
||||
);
|
||||
save_data->house_system = g_strdup(g_value_get_string(value));
|
||||
|
||||
value = gda_data_model_get_value_at(result, COLUMN_NOTE, 0, NULL);
|
||||
value = gda_data_model_get_value_at(result, COLUMN_CHART_NOTE, 0, NULL);
|
||||
|
||||
if (GDA_VALUE_HOLDS_NULL(value)) {
|
||||
save_data->note = NULL;
|
||||
@ -1038,17 +1053,19 @@ string_collate(const gchar *str1, const gchar *str2)
|
||||
}
|
||||
|
||||
/**
|
||||
* ag_db_save_identical:
|
||||
* @a: the first #AgDbSave structure
|
||||
* @b: the second #AgDbSave structure
|
||||
* ag_db_chart_save_identical:
|
||||
* @a: the first #AgDbChartSave structure
|
||||
* @b: the second #AgDbChartSave structure
|
||||
*
|
||||
* Compares two #AgDbSave structures and their contents.
|
||||
* Compares two #AgDbChartSave structures and their contents.
|
||||
*
|
||||
* Returns: TRUE if the two structs hold equal values (strings are also compared
|
||||
* with string_collate()), FALSE otherwise
|
||||
*/
|
||||
gboolean
|
||||
ag_db_save_identical(const AgDbSave *a, const AgDbSave *b, gboolean chart_only)
|
||||
ag_db_chart_save_identical(const AgDbChartSave *a,
|
||||
const AgDbChartSave *b,
|
||||
gboolean chart_only)
|
||||
{
|
||||
if (a == b) {
|
||||
g_debug("identical: Equal");
|
||||
@ -1156,7 +1173,7 @@ ag_db_save_identical(const AgDbSave *a, const AgDbSave *b, gboolean chart_only)
|
||||
}
|
||||
|
||||
gboolean
|
||||
ag_db_delete_chart(AgDb *db, gint row_id, GError **err)
|
||||
ag_db_chart_delete(AgDb *db, gint row_id, GError **err)
|
||||
{
|
||||
AgDbPrivate *priv = ag_db_get_instance_private(db);
|
||||
GValue id = G_VALUE_INIT;
|
||||
|
24
src/ag-db.h
24
src/ag-db.h
@ -30,7 +30,7 @@ struct _AgDbClass {
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
typedef struct _AgDbSave {
|
||||
typedef struct _AgDbChartSave {
|
||||
gint db_id;
|
||||
gchar *name;
|
||||
gchar *country;
|
||||
@ -47,7 +47,7 @@ typedef struct _AgDbSave {
|
||||
gdouble timezone;
|
||||
gchar *house_system;
|
||||
gchar *note;
|
||||
} AgDbSave;
|
||||
} AgDbChartSave;
|
||||
|
||||
typedef enum {
|
||||
AG_DB_ERROR_NO_CHART,
|
||||
@ -58,21 +58,21 @@ GType ag_db_get_type(void) G_GNUC_CONST;
|
||||
|
||||
AgDb *ag_db_get(void);
|
||||
|
||||
void ag_db_save_data_free(AgDbSave *save_data);
|
||||
void ag_db_chart_save_free(AgDbChartSave *save_data);
|
||||
|
||||
gboolean ag_db_save_chart(AgDb *db,
|
||||
AgDbSave *save_data,
|
||||
GError **err);
|
||||
gboolean ag_db_chart_save(AgDb *db,
|
||||
AgDbChartSave *save_data,
|
||||
GError **err);
|
||||
|
||||
GList *ag_db_get_chart_list(AgDb *db, GError **err);
|
||||
GList *ag_db_chart_get_list(AgDb *db, GError **err);
|
||||
|
||||
AgDbSave *ag_db_get_chart_data_by_id(AgDb *db, guint row_id, GError **err);
|
||||
AgDbChartSave *ag_db_chart_get_data_by_id(AgDb *db, guint row_id, GError **err);
|
||||
|
||||
gboolean ag_db_delete_chart(AgDb *db, gint row_id, GError **err);
|
||||
gboolean ag_db_chart_delete(AgDb *db, gint row_id, GError **err);
|
||||
|
||||
gboolean ag_db_save_identical(const AgDbSave *a,
|
||||
const AgDbSave *b,
|
||||
gboolean chart_only);
|
||||
gboolean ag_db_chart_save_identical(const AgDbChartSave *a,
|
||||
const AgDbChartSave *b,
|
||||
gboolean chart_only);
|
||||
|
||||
#define AG_DB_ERROR (ag_db_error_quark())
|
||||
GQuark ag_db_error_quark(void);
|
||||
|
276
src/ag-display-theme.c
Normal file
276
src/ag-display-theme.c
Normal file
@ -0,0 +1,276 @@
|
||||
#include <glib/gi18n.h>
|
||||
#include <swe-glib.h>
|
||||
|
||||
#include "astrognome.h"
|
||||
#include "ag-display-theme.h"
|
||||
|
||||
static gchar *planet_all = ".planet {\n" \
|
||||
" visibility: visible;\n" \
|
||||
"}\n";
|
||||
|
||||
static gchar *planet_none = ".planet {\n" \
|
||||
" visibility: hidden;\n" \
|
||||
" }\n";
|
||||
|
||||
static gchar *planet_tmpl = ".planet-%s {\n" \
|
||||
" visibility: %s !important;\n" \
|
||||
"}\n";
|
||||
|
||||
static gchar *aspect_all = ".aspect {\n" \
|
||||
" visibility: visible;\n" \
|
||||
"}\n";
|
||||
|
||||
static gchar *aspect_none = ".aspect {\n" \
|
||||
" visibility: hidden;\n" \
|
||||
" }\n";
|
||||
|
||||
static gchar *aspect_tmpl = ".aspect-%s {\n" \
|
||||
" visibility: %s !important;\n" \
|
||||
"}\n";
|
||||
|
||||
static gchar *antiscion_all = ".antiscion {\n" \
|
||||
" visibility: visible;\n" \
|
||||
"}\n";
|
||||
|
||||
static gchar *antiscion_none = ".antiscion {\n" \
|
||||
" visibility: hidden;\n" \
|
||||
"}\n";
|
||||
|
||||
static gchar *antiscion_tmpl = ".antiscion-%s {\n" \
|
||||
" visibility: %s !important;\n" \
|
||||
"}\n";
|
||||
|
||||
static AgDisplayTheme **builtin_themes = NULL;
|
||||
static gchar *builtin_theme_name[AG_DISPLAY_THEME_COUNT] = {
|
||||
NC_("Display theme name", "Everything"),
|
||||
NC_("Display theme name", "Classic"),
|
||||
};
|
||||
|
||||
gchar *
|
||||
ag_display_theme_to_css(AgDisplayTheme *theme)
|
||||
{
|
||||
GList *i;
|
||||
gchar *ret;
|
||||
GString *css = NULL;
|
||||
|
||||
if (theme->planets_include) {
|
||||
css = g_string_new(planet_none);
|
||||
} else {
|
||||
css = g_string_new(planet_all);
|
||||
}
|
||||
|
||||
for (i = theme->planets; i; i = g_list_next(i)) {
|
||||
const gchar *planet_name;
|
||||
|
||||
planet_name = ag_planet_id_to_nick(GPOINTER_TO_INT(i->data));
|
||||
|
||||
g_string_append_printf(
|
||||
css,
|
||||
planet_tmpl,
|
||||
planet_name,
|
||||
(theme->planets_include) ? "visible" : "hidden"
|
||||
);
|
||||
}
|
||||
|
||||
if (theme->aspects_include) {
|
||||
g_string_append(css, aspect_none);
|
||||
} else {
|
||||
g_string_append(css, aspect_all);
|
||||
}
|
||||
|
||||
for (i = theme->aspects; i; i = g_list_next(i)) {
|
||||
const gchar *aspect_name;
|
||||
|
||||
aspect_name = ag_aspect_id_to_nick(GPOINTER_TO_INT(i->data));
|
||||
|
||||
g_string_append_printf(
|
||||
css,
|
||||
aspect_tmpl,
|
||||
aspect_name,
|
||||
(theme->aspects_include) ? "visible" : "hidden"
|
||||
);
|
||||
}
|
||||
|
||||
if (theme->antiscia_include) {
|
||||
g_string_append(css, antiscion_none);
|
||||
} else {
|
||||
g_string_append(css, antiscion_all);
|
||||
}
|
||||
|
||||
for (i = theme->antiscia; i; i = g_list_next(i)) {
|
||||
const gchar *antiscion_axis_name;
|
||||
|
||||
antiscion_axis_name = ag_antiscion_axis_id_to_nick(
|
||||
GPOINTER_TO_INT(i->data)
|
||||
);
|
||||
|
||||
g_string_append_printf(
|
||||
css,
|
||||
antiscion_tmpl,
|
||||
antiscion_axis_name,
|
||||
(theme->antiscia_include) ? "visible" : "hidden"
|
||||
);
|
||||
}
|
||||
|
||||
ret = g_string_free(css, FALSE);
|
||||
|
||||
g_debug("%s", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static AgDisplayTheme *
|
||||
ag_display_theme_get_builtin(gint id)
|
||||
{
|
||||
AgDisplayTheme *theme;
|
||||
|
||||
// Builtin themes all have a negative ID
|
||||
g_return_val_if_fail(id < 0, NULL);
|
||||
// And must be greater then AG_DISPLAY_THEME_COUNT
|
||||
g_return_val_if_fail(id >= -AG_DISPLAY_THEME_COUNT, NULL);
|
||||
|
||||
if (builtin_themes == NULL) {
|
||||
builtin_themes = g_new0(AgDisplayTheme *, AG_DISPLAY_THEME_COUNT);
|
||||
}
|
||||
|
||||
// If the theme is already created, return it
|
||||
if (builtin_themes[-id] != NULL) {
|
||||
return builtin_themes[-id];
|
||||
}
|
||||
|
||||
theme = builtin_themes[-id] = g_new0(AgDisplayTheme, 1);
|
||||
|
||||
switch (id) {
|
||||
case AG_DISPLAY_THEME_ALL:
|
||||
theme->id = id;
|
||||
theme->name = gettext(builtin_theme_name[-id - 1]);
|
||||
theme->builtin = TRUE;
|
||||
theme->planets_include = FALSE;
|
||||
theme->planets = NULL;
|
||||
theme->aspects_include = FALSE;
|
||||
theme->aspects = NULL;
|
||||
theme->antiscia_include = FALSE;
|
||||
theme->antiscia = NULL;
|
||||
|
||||
break;
|
||||
|
||||
case AG_DISPLAY_THEME_CLASSIC:
|
||||
// TODO: If SWE-GLib would support it, we could programatically get
|
||||
// classic planets and aspects here, thus, if it is messed up,
|
||||
// we need to fix it only once.
|
||||
theme->id = id;
|
||||
theme->name = gettext(builtin_theme_name[-id - 1]);
|
||||
theme->builtin = TRUE;
|
||||
theme->planets_include = TRUE;
|
||||
theme->planets = NULL;
|
||||
theme->aspects_include = TRUE;
|
||||
theme->aspects = NULL;
|
||||
theme->antiscia_include = TRUE;
|
||||
theme->antiscia = NULL;
|
||||
|
||||
theme->planets = g_list_prepend(
|
||||
theme->planets,
|
||||
GINT_TO_POINTER(GSWE_PLANET_SUN)
|
||||
);
|
||||
theme->planets = g_list_prepend(
|
||||
theme->planets,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MOON)
|
||||
);
|
||||
theme->planets = g_list_prepend(
|
||||
theme->planets,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MERCURY)
|
||||
);
|
||||
theme->planets = g_list_prepend(
|
||||
theme->planets,
|
||||
GINT_TO_POINTER(GSWE_PLANET_VENUS)
|
||||
);
|
||||
theme->planets = g_list_prepend(
|
||||
theme->planets,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MARS)
|
||||
);
|
||||
theme->planets = g_list_prepend(
|
||||
theme->planets,
|
||||
GINT_TO_POINTER(GSWE_PLANET_JUPITER)
|
||||
);
|
||||
theme->planets = g_list_prepend(
|
||||
theme->planets,
|
||||
GINT_TO_POINTER(GSWE_PLANET_SATURN)
|
||||
);
|
||||
theme->planets = g_list_prepend(
|
||||
theme->planets,
|
||||
GINT_TO_POINTER(GSWE_PLANET_MOON_NODE)
|
||||
);
|
||||
|
||||
theme->aspects = g_list_prepend(
|
||||
theme->aspects,
|
||||
GINT_TO_POINTER(GSWE_ASPECT_CONJUCTION)
|
||||
);
|
||||
theme->aspects = g_list_prepend(
|
||||
theme->aspects,
|
||||
GINT_TO_POINTER(GSWE_ASPECT_OPPOSITION)
|
||||
);
|
||||
theme->aspects = g_list_prepend(
|
||||
theme->aspects,
|
||||
GINT_TO_POINTER(GSWE_ASPECT_TRINE)
|
||||
);
|
||||
theme->aspects = g_list_prepend(
|
||||
theme->aspects,
|
||||
GINT_TO_POINTER(GSWE_ASPECT_SQUARE)
|
||||
);
|
||||
theme->aspects = g_list_prepend(
|
||||
theme->aspects,
|
||||
GINT_TO_POINTER(GSWE_ASPECT_SEXTILE)
|
||||
);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
g_free(theme);
|
||||
g_warning("Trying to instantiate unknown builtin theme %d", id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return theme;
|
||||
}
|
||||
|
||||
GList *
|
||||
ag_display_theme_get_list(void)
|
||||
{
|
||||
int i;
|
||||
GList *ret = NULL;
|
||||
|
||||
for (i = 1; i <= AG_DISPLAY_THEME_COUNT; i++) {
|
||||
AgDisplayTheme *theme = ag_display_theme_get_builtin(-i);
|
||||
|
||||
ret = g_list_append(ret, theme);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
AgDisplayTheme *
|
||||
ag_display_theme_get_by_id(int id)
|
||||
{
|
||||
if (id < 0) {
|
||||
return ag_display_theme_get_builtin(id);
|
||||
}
|
||||
|
||||
g_warning("Invalid theme ID. Falling back to display everything.");
|
||||
|
||||
return ag_display_theme_get_builtin(AG_DISPLAY_THEME_ALL);
|
||||
}
|
||||
|
||||
void
|
||||
ag_display_theme_free(AgDisplayTheme *display_theme)
|
||||
{
|
||||
if (!display_theme || display_theme->builtin)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
g_free(display_theme->name);
|
||||
g_list_free(display_theme->planets);
|
||||
g_list_free(display_theme->aspects);
|
||||
g_list_free(display_theme->antiscia);
|
||||
g_free(display_theme);
|
||||
}
|
33
src/ag-display-theme.h
Normal file
33
src/ag-display-theme.h
Normal file
@ -0,0 +1,33 @@
|
||||
#ifndef __AG_DISPLAY_THEME_H__
|
||||
#define __AG_DISPLAY_THEME_H__
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
typedef struct _AgDisplayTheme {
|
||||
gint id;
|
||||
gchar *name;
|
||||
gboolean builtin;
|
||||
gboolean planets_include;
|
||||
GList *planets;
|
||||
gboolean aspects_include;
|
||||
GList *aspects;
|
||||
gboolean antiscia_include;
|
||||
GList *antiscia;
|
||||
} AgDisplayTheme;
|
||||
|
||||
enum {
|
||||
AG_DISPLAY_THEME_ALL = -1,
|
||||
AG_DISPLAY_THEME_CLASSIC = -2,
|
||||
AG_DISPLAY_THEME_PREV,
|
||||
AG_DISPLAY_THEME_COUNT = - AG_DISPLAY_THEME_PREV + 1
|
||||
};
|
||||
|
||||
gchar *ag_display_theme_to_css(AgDisplayTheme *display_theme);
|
||||
|
||||
AgDisplayTheme *ag_display_theme_get_by_id(int id);
|
||||
|
||||
GList *ag_display_theme_get_list(void);
|
||||
|
||||
void ag_display_theme_free(AgDisplayTheme *display_theme);
|
||||
|
||||
#endif /* __AG_DISPLAY_THEME_H__ */
|
@ -1,8 +1,10 @@
|
||||
#include <gtk/gtk.h>
|
||||
#include <swe-glib.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "ag-settings.h"
|
||||
#include "ag-preferences.h"
|
||||
#include "ag-display-theme.h"
|
||||
|
||||
static GtkWidget *prefs_dialog = NULL;
|
||||
|
||||
@ -12,6 +14,8 @@ typedef struct _AgPreferencesPrivate {
|
||||
GtkCheckButton *aspect_chars;
|
||||
GtkWidget *house_system;
|
||||
GtkListStore *house_system_model;
|
||||
GtkWidget *display_theme;
|
||||
GtkListStore *display_theme_model;
|
||||
|
||||
AgSettings *settings;
|
||||
} AgPreferencesPrivate;
|
||||
@ -75,6 +79,16 @@ ag_preferences_class_init(AgPreferencesClass *klass)
|
||||
AgPreferences,
|
||||
house_system_model
|
||||
);
|
||||
gtk_widget_class_bind_template_child_private(
|
||||
widget_class,
|
||||
AgPreferences,
|
||||
display_theme
|
||||
);
|
||||
gtk_widget_class_bind_template_child_private(
|
||||
widget_class,
|
||||
AgPreferences,
|
||||
display_theme_model
|
||||
);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -98,14 +112,68 @@ ag_preferences_add_house_system(GsweHouseSystemInfo *house_system_info,
|
||||
);
|
||||
}
|
||||
|
||||
static void
|
||||
ag_preferences_add_display_theme(AgDisplayTheme *display_theme,
|
||||
AgPreferencesPrivate *priv)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
gchar *id_string = g_strdup_printf("%d", display_theme->id);
|
||||
|
||||
g_debug("Adding theme with ID %d ('%s')", display_theme->id, id_string);
|
||||
|
||||
gtk_list_store_append(priv->display_theme_model, &iter);
|
||||
gtk_list_store_set(
|
||||
priv->display_theme_model, &iter,
|
||||
0, id_string,
|
||||
1, display_theme->name,
|
||||
-1
|
||||
);
|
||||
g_free(id_string);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ag_preferences_display_theme_get(GValue *value,
|
||||
GVariant *variant,
|
||||
gpointer user_data)
|
||||
{
|
||||
gint32 id = g_variant_get_int32(variant);
|
||||
gchar *id_string = g_strdup_printf("%d", id);
|
||||
|
||||
g_debug("Converted %d to '%s'", id, id_string);
|
||||
|
||||
g_value_take_string(value, id_string);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GVariant *
|
||||
ag_preferences_display_theme_set(const GValue *value,
|
||||
const GVariantType *expected_type,
|
||||
gpointer user_data)
|
||||
{
|
||||
const gchar *id_string;
|
||||
gint32 id;
|
||||
GVariant *variant;
|
||||
|
||||
id_string = g_value_get_string(value);
|
||||
id = atoi(id_string);
|
||||
|
||||
g_debug("Converted '%s' to %d", id_string, id);
|
||||
|
||||
variant = g_variant_new_int32(id);
|
||||
|
||||
return variant;
|
||||
}
|
||||
|
||||
static void
|
||||
ag_preferences_init(AgPreferences *prefs)
|
||||
{
|
||||
GSettings *settings_window,
|
||||
*settings_main;
|
||||
GList *house_system_list = gswe_all_house_systems();
|
||||
AgPreferencesPrivate *priv = ag_preferences_get_instance_private(prefs);
|
||||
GtkCellRenderer *cell_renderer;
|
||||
GList *house_system_list = gswe_all_house_systems(),
|
||||
*display_theme_list = ag_display_theme_get_list();
|
||||
AgPreferencesPrivate *priv = ag_preferences_get_instance_private(prefs);
|
||||
|
||||
gtk_widget_init_template(GTK_WIDGET(prefs));
|
||||
priv->settings = ag_settings_get();
|
||||
@ -127,6 +195,24 @@ ag_preferences_init(AgPreferences *prefs)
|
||||
NULL
|
||||
);
|
||||
|
||||
g_list_foreach(
|
||||
display_theme_list,
|
||||
(GFunc)ag_preferences_add_display_theme,
|
||||
priv
|
||||
);
|
||||
cell_renderer = gtk_cell_renderer_text_new();
|
||||
gtk_cell_layout_pack_start(
|
||||
GTK_CELL_LAYOUT(priv->display_theme),
|
||||
cell_renderer,
|
||||
TRUE
|
||||
);
|
||||
gtk_cell_layout_set_attributes(
|
||||
GTK_CELL_LAYOUT(priv->display_theme),
|
||||
cell_renderer,
|
||||
"text", 1,
|
||||
NULL
|
||||
);
|
||||
|
||||
settings_window = ag_settings_peek_window_settings(priv->settings);
|
||||
g_settings_bind(
|
||||
settings_window,
|
||||
@ -158,6 +244,17 @@ ag_preferences_init(AgPreferences *prefs)
|
||||
"active-id",
|
||||
G_SETTINGS_BIND_DEFAULT
|
||||
);
|
||||
g_settings_bind_with_mapping(
|
||||
settings_main,
|
||||
"default-display-theme",
|
||||
priv->display_theme,
|
||||
"active-id",
|
||||
G_SETTINGS_BIND_DEFAULT,
|
||||
ag_preferences_display_theme_get,
|
||||
ag_preferences_display_theme_set,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -2,15 +2,13 @@
|
||||
|
||||
#define SETTINGS_SCHEMA_ID_MAIN "eu.polonkai.gergely.Astrognome"
|
||||
#define SETTINGS_SCHEMA_ID_WINDOW "eu.polonkai.gergely.Astrognome.state.window"
|
||||
#define SETTINGS_SCHEMA_ID_CHART "eu.polonkai.gergely.Astrognome.state.chart"
|
||||
|
||||
static AgSettings *singleton = NULL;
|
||||
|
||||
struct _AgSettingsPrivate {
|
||||
typedef struct _AgSettingsPrivate {
|
||||
GSettings *settings_main;
|
||||
GSettings *settings_window;
|
||||
GSettings *settings_chart;
|
||||
};
|
||||
} AgSettingsPrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE(AgSettings, ag_settings, G_TYPE_OBJECT);
|
||||
|
||||
@ -21,7 +19,6 @@ ag_settings_init(AgSettings *settings)
|
||||
|
||||
priv->settings_main = g_settings_new(SETTINGS_SCHEMA_ID_MAIN);
|
||||
priv->settings_window = g_settings_new(SETTINGS_SCHEMA_ID_WINDOW);
|
||||
priv->settings_chart = g_settings_new(SETTINGS_SCHEMA_ID_CHART);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -32,7 +29,6 @@ ag_settings_dispose(GObject *object)
|
||||
);
|
||||
|
||||
g_clear_object(&priv->settings_window);
|
||||
g_clear_object(&priv->settings_chart);
|
||||
g_clear_object(&priv->settings_main);
|
||||
|
||||
G_OBJECT_CLASS(ag_settings_parent_class)->dispose(object);
|
||||
@ -84,11 +80,3 @@ ag_settings_peek_window_settings(AgSettings *settings)
|
||||
|
||||
return priv->settings_window;
|
||||
}
|
||||
|
||||
GSettings *
|
||||
ag_settings_peek_chart_settings(AgSettings *settings)
|
||||
{
|
||||
AgSettingsPrivate *priv = ag_settings_get_instance_private(settings);
|
||||
|
||||
return priv->settings_chart;
|
||||
}
|
||||
|
@ -23,7 +23,6 @@ G_BEGIN_DECLS
|
||||
|
||||
typedef struct _AgSettings AgSettings;
|
||||
typedef struct _AgSettingsClass AgSettingsClass;
|
||||
typedef struct _AgSettingsPrivate AgSettingsPrivate;
|
||||
|
||||
struct _AgSettings {
|
||||
GObject parent_instance;
|
||||
@ -39,7 +38,6 @@ AgSettings *ag_settings_get(void);
|
||||
|
||||
GSettings *ag_settings_peek_main_settings(AgSettings *settings);
|
||||
GSettings *ag_settings_peek_window_settings(AgSettings *settings);
|
||||
GSettings *ag_settings_peek_chart_settings(AgSettings *settings);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
375
src/ag-window.c
375
src/ag-window.c
@ -16,6 +16,7 @@
|
||||
#include "ag-chart.h"
|
||||
#include "ag-settings.h"
|
||||
#include "ag-db.h"
|
||||
#include "ag-display-theme.h"
|
||||
|
||||
struct _AgWindowPrivate {
|
||||
GtkWidget *header_bar;
|
||||
@ -40,6 +41,7 @@ struct _AgWindowPrivate {
|
||||
GtkWidget *second;
|
||||
GtkWidget *timezone;
|
||||
GtkWidget *house_system;
|
||||
GtkWidget *display_theme;
|
||||
|
||||
GtkWidget *tab_list;
|
||||
GtkWidget *tab_chart;
|
||||
@ -57,11 +59,14 @@ struct _AgWindowPrivate {
|
||||
GtkTextBuffer *note_buffer;
|
||||
GtkListStore *house_system_model;
|
||||
GtkListStore *db_chart_data;
|
||||
AgDbSave *saved_data;
|
||||
AgDbChartSave *saved_data;
|
||||
GtkEntryCompletion *country_comp;
|
||||
GtkEntryCompletion *city_comp;
|
||||
gchar *selected_country;
|
||||
gchar *selected_city;
|
||||
GList *style_sheets;
|
||||
AgDisplayTheme *theme;
|
||||
GtkListStore *display_theme_model;
|
||||
};
|
||||
|
||||
struct cc_search {
|
||||
@ -643,7 +648,7 @@ ag_window_chart_changed(AgChart *chart, AgWindow *window)
|
||||
static void
|
||||
ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
|
||||
{
|
||||
AgDbSave *edit_data,
|
||||
AgDbChartSave *edit_data,
|
||||
*chart_data;
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
gboolean south,
|
||||
@ -673,7 +678,7 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
|
||||
gtk_spin_button_update(GTK_SPIN_BUTTON(current));
|
||||
}
|
||||
|
||||
edit_data = g_new0(AgDbSave, 1);
|
||||
edit_data = g_new0(AgDbChartSave, 1);
|
||||
|
||||
edit_data->db_id = db_id;
|
||||
|
||||
@ -748,16 +753,16 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
|
||||
: NULL
|
||||
;
|
||||
|
||||
if (ag_db_save_identical(edit_data, chart_data, !set_everything)) {
|
||||
if (ag_db_chart_save_identical(edit_data, chart_data, !set_everything)) {
|
||||
g_debug("No redrawing needed");
|
||||
|
||||
ag_db_save_data_free(edit_data);
|
||||
ag_db_save_data_free(chart_data);
|
||||
ag_db_chart_save_free(edit_data);
|
||||
ag_db_chart_save_free(chart_data);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
ag_db_save_data_free(chart_data);
|
||||
ag_db_chart_save_free(chart_data);
|
||||
|
||||
g_debug("Recalculating chart data");
|
||||
|
||||
@ -799,7 +804,7 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
|
||||
ag_chart_set_note(priv->chart, edit_data->note);
|
||||
}
|
||||
|
||||
ag_db_save_data_free(edit_data);
|
||||
ag_db_chart_save_free(edit_data);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -989,7 +994,7 @@ ag_window_can_close(AgWindow *window, gboolean display_dialog)
|
||||
gint db_id = (priv->saved_data)
|
||||
? priv->saved_data->db_id
|
||||
: -1;
|
||||
AgDbSave *save_data = NULL;
|
||||
AgDbChartSave *save_data = NULL;
|
||||
AgDb *db = ag_db_get();
|
||||
GError *err = NULL;
|
||||
gboolean ret = TRUE;
|
||||
@ -999,7 +1004,7 @@ ag_window_can_close(AgWindow *window, gboolean display_dialog)
|
||||
save_data = ag_chart_get_db_save(priv->chart, db_id);
|
||||
|
||||
if (
|
||||
!ag_db_save_identical(priv->saved_data, save_data, FALSE)
|
||||
!ag_db_chart_save_identical(priv->saved_data, save_data, FALSE)
|
||||
|| !(priv->saved_data)
|
||||
|| (priv->saved_data->db_id == -1)
|
||||
) {
|
||||
@ -1020,7 +1025,7 @@ ag_window_can_close(AgWindow *window, gboolean display_dialog)
|
||||
|
||||
switch (response) {
|
||||
case GTK_RESPONSE_YES:
|
||||
if (!ag_db_save_chart(db, save_data, &err)) {
|
||||
if (!ag_db_chart_save(db, save_data, &err)) {
|
||||
ag_app_message_dialog(
|
||||
GTK_WINDOW(window),
|
||||
GTK_MESSAGE_ERROR,
|
||||
@ -1051,7 +1056,7 @@ ag_window_can_close(AgWindow *window, gboolean display_dialog)
|
||||
}
|
||||
}
|
||||
|
||||
ag_db_save_data_free(save_data);
|
||||
ag_db_chart_save_free(save_data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -1066,7 +1071,7 @@ ag_window_save_action(GSimpleAction *action,
|
||||
AgDb *db = ag_db_get();
|
||||
GError *err = NULL;
|
||||
gint old_id;
|
||||
AgDbSave *save_data;
|
||||
AgDbChartSave *save_data;
|
||||
|
||||
ag_window_recalculate_chart(window, TRUE);
|
||||
|
||||
@ -1074,7 +1079,7 @@ ag_window_save_action(GSimpleAction *action,
|
||||
old_id = (priv->saved_data) ? priv->saved_data->db_id : -1;
|
||||
save_data = ag_chart_get_db_save(priv->chart, old_id);
|
||||
|
||||
if (!ag_db_save_chart(db, save_data, &err)) {
|
||||
if (!ag_db_chart_save(db, save_data, &err)) {
|
||||
ag_app_message_dialog(
|
||||
GTK_WINDOW(window),
|
||||
GTK_MESSAGE_ERROR,
|
||||
@ -1083,7 +1088,7 @@ ag_window_save_action(GSimpleAction *action,
|
||||
);
|
||||
}
|
||||
|
||||
ag_db_save_data_free(priv->saved_data);
|
||||
ag_db_chart_save_free(priv->saved_data);
|
||||
priv->saved_data = save_data;
|
||||
}
|
||||
}
|
||||
@ -1108,6 +1113,130 @@ ag_window_delete_event_callback(AgWindow *window,
|
||||
return (!ag_window_can_close(window, TRUE));
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_clear_style_sheets(AgWindow *window)
|
||||
{
|
||||
WebKitUserContentManager *manager;
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
|
||||
g_debug("Clearing style sheets");
|
||||
|
||||
manager = webkit_web_view_get_user_content_manager(
|
||||
WEBKIT_WEB_VIEW(priv->chart_web_view)
|
||||
);
|
||||
|
||||
webkit_user_content_manager_remove_all_style_sheets(manager);
|
||||
g_list_free_full(
|
||||
priv->style_sheets,
|
||||
(GDestroyNotify)webkit_user_style_sheet_unref
|
||||
);
|
||||
priv->style_sheets = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_add_style_sheet(AgWindow *window, const gchar *path)
|
||||
{
|
||||
gchar *css_source;
|
||||
gboolean source_free = FALSE;
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
|
||||
if (strncmp("gres://", path, 7) == 0) {
|
||||
gchar *res_path = g_strdup_printf(
|
||||
"/eu/polonkai/gergely/Astrognome/%s",
|
||||
path + 7
|
||||
);
|
||||
GBytes *css_data = g_resources_lookup_data(
|
||||
res_path,
|
||||
G_RESOURCE_LOOKUP_FLAGS_NONE,
|
||||
NULL
|
||||
);
|
||||
|
||||
css_source = g_strdup(g_bytes_get_data(css_data, NULL));
|
||||
source_free = TRUE;
|
||||
g_bytes_unref(css_data);
|
||||
} else if (strncmp("raw:", path, 4) == 0) {
|
||||
css_source = (gchar *)path + 4;
|
||||
} else {
|
||||
GFile *css_file = g_file_new_for_uri(path);
|
||||
GError *err = NULL;
|
||||
|
||||
g_file_load_contents(
|
||||
css_file,
|
||||
NULL,
|
||||
&css_source, NULL,
|
||||
NULL,
|
||||
&err
|
||||
);
|
||||
source_free = TRUE;
|
||||
g_object_unref(css_file);
|
||||
}
|
||||
|
||||
if (css_source) {
|
||||
WebKitUserStyleSheet *style_sheet = webkit_user_style_sheet_new(
|
||||
css_source,
|
||||
WEBKIT_USER_CONTENT_INJECT_TOP_FRAME,
|
||||
WEBKIT_USER_STYLE_LEVEL_USER,
|
||||
NULL, NULL
|
||||
);
|
||||
|
||||
priv->style_sheets = g_list_append(priv->style_sheets, style_sheet);
|
||||
|
||||
if (source_free) {
|
||||
g_free(css_source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_update_style_sheets(AgWindow *window)
|
||||
{
|
||||
GList *item;
|
||||
WebKitUserContentManager *manager;
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
|
||||
g_debug("Updating style sheets");
|
||||
|
||||
manager = webkit_web_view_get_user_content_manager(
|
||||
WEBKIT_WEB_VIEW(priv->chart_web_view)
|
||||
);
|
||||
|
||||
webkit_user_content_manager_remove_all_style_sheets(manager);
|
||||
|
||||
for (item = priv->style_sheets; item; item = g_list_next(item)) {
|
||||
WebKitUserStyleSheet *style_sheet = item->data;
|
||||
|
||||
webkit_user_content_manager_add_style_sheet(manager, style_sheet);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_set_theme(AgWindow *window, AgDisplayTheme *theme)
|
||||
{
|
||||
gchar *css,
|
||||
*css_final;
|
||||
|
||||
g_debug("Setting theme to %s", (theme) ? theme->name : "no theme");
|
||||
ag_window_clear_style_sheets(window);
|
||||
|
||||
// Add the default style sheet
|
||||
ag_window_add_style_sheet(
|
||||
window,
|
||||
"gres://ui/chart-default.css"
|
||||
);
|
||||
|
||||
if (theme) {
|
||||
css = ag_display_theme_to_css(theme);
|
||||
css_final = g_strdup_printf("raw:%s", css);
|
||||
g_free(css);
|
||||
|
||||
ag_window_add_style_sheet(window, css_final);
|
||||
|
||||
g_free(css_final);
|
||||
}
|
||||
|
||||
ag_window_update_style_sheets(window);
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_tab_changed_cb(GtkStack *stack, GParamSpec *pspec, AgWindow *window)
|
||||
{
|
||||
@ -1125,6 +1254,23 @@ ag_window_tab_changed_cb(GtkStack *stack, GParamSpec *pspec, AgWindow *window)
|
||||
|
||||
if (strcmp("chart", active_tab_name) == 0) {
|
||||
gtk_widget_set_size_request(active_tab, 600, 600);
|
||||
if (priv->theme == NULL) {
|
||||
AgSettings *settings;
|
||||
GSettings *main_settings;
|
||||
gint default_theme;
|
||||
|
||||
settings = ag_settings_get();
|
||||
main_settings = ag_settings_peek_main_settings(settings);
|
||||
default_theme = g_settings_get_int(
|
||||
main_settings,
|
||||
"default-display-theme"
|
||||
);
|
||||
g_object_unref(settings);
|
||||
|
||||
priv->theme = ag_display_theme_get_by_id(default_theme);
|
||||
|
||||
ag_window_set_theme(window, priv->theme);
|
||||
}
|
||||
}
|
||||
|
||||
if (strcmp("list", active_tab_name) == 0) {
|
||||
@ -1203,6 +1349,37 @@ ag_window_set_default_house_system(GtkTreeModel *model,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ag_window_set_default_display_theme(GtkTreeModel *model,
|
||||
GtkTreePath *path,
|
||||
GtkTreeIter *iter,
|
||||
AgWindow *window)
|
||||
{
|
||||
gint row_display_theme;
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
AgSettings *settings = ag_settings_get();
|
||||
GSettings *main_settings = ag_settings_peek_main_settings(settings);
|
||||
gint default_theme = g_settings_get_int(
|
||||
main_settings,
|
||||
"default-display-theme"
|
||||
);
|
||||
|
||||
g_clear_object(&settings);
|
||||
gtk_tree_model_get(
|
||||
model, iter,
|
||||
0, &row_display_theme,
|
||||
-1
|
||||
);
|
||||
|
||||
if (default_theme == row_display_theme) {
|
||||
gtk_combo_box_set_active_iter(GTK_COMBO_BOX(priv->display_theme), iter);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_new_chart_action(GSimpleAction *action,
|
||||
GVariant *parameter,
|
||||
@ -1262,7 +1439,7 @@ ag_window_back_action(GSimpleAction *action,
|
||||
|
||||
if (ag_window_can_close(window, TRUE)) {
|
||||
g_clear_object(&(priv->chart));
|
||||
ag_db_save_data_free(priv->saved_data);
|
||||
ag_db_chart_save_free(priv->saved_data);
|
||||
priv->saved_data = NULL;
|
||||
|
||||
ag_window_load_chart_list(window);
|
||||
@ -1355,7 +1532,7 @@ ag_window_delete_action(GSimpleAction *action,
|
||||
id = atoi(id_str);
|
||||
g_free(id_str);
|
||||
|
||||
if (!ag_db_delete_chart(db, id, &err)) {
|
||||
if (!ag_db_chart_delete(db, id, &err)) {
|
||||
ag_app_message_dialog(
|
||||
GTK_WINDOW(window),
|
||||
GTK_MESSAGE_ERROR,
|
||||
@ -1399,8 +1576,8 @@ ag_window_connection_action(GSimpleAction *action,
|
||||
);
|
||||
static gchar *js = "aspects = document.getElementById('aspects');\n" \
|
||||
"antiscia = document.getElementById('antiscia');\n" \
|
||||
"aspects.setAttribute('visibility', '%s');\n" \
|
||||
"antiscia.setAttribute('visibility', '%s');\n";
|
||||
"aspects.setAttribute('display', '%s');\n" \
|
||||
"antiscia.setAttribute('display', '%s');\n";
|
||||
|
||||
current_state = g_action_get_state(G_ACTION(action));
|
||||
|
||||
@ -1414,10 +1591,10 @@ ag_window_connection_action(GSimpleAction *action,
|
||||
|
||||
if (strcmp("aspects", state) == 0) {
|
||||
g_debug("Switching to aspects");
|
||||
js_code = g_strdup_printf(js, "visible", "hidden");
|
||||
js_code = g_strdup_printf(js, "block", "none");
|
||||
} else if (strcmp("antiscia", state) == 0) {
|
||||
g_debug("Switching to antiscia");
|
||||
js_code = g_strdup_printf(js, "hidden", "visible");
|
||||
js_code = g_strdup_printf(js, "none", "block");
|
||||
} else {
|
||||
g_warning("Connection type '%s' is invalid", state);
|
||||
}
|
||||
@ -1480,6 +1657,21 @@ ag_window_add_house_system(GsweHouseSystemInfo *house_system_info,
|
||||
);
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_add_display_theme(AgDisplayTheme *display_theme,
|
||||
AgWindowPrivate *priv)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
|
||||
gtk_list_store_append(priv->display_theme_model, &iter);
|
||||
gtk_list_store_set(
|
||||
priv->display_theme_model, &iter,
|
||||
0, display_theme->id,
|
||||
1, display_theme->name,
|
||||
-1
|
||||
);
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_list_item_activated_cb(GdMainView *view,
|
||||
const gchar *id,
|
||||
@ -1507,7 +1699,7 @@ ag_window_list_item_activated_cb(GdMainView *view,
|
||||
|
||||
g_debug("Loading chart with ID %d", row_id);
|
||||
|
||||
if ((priv->saved_data = ag_db_get_chart_data_by_id(
|
||||
if ((priv->saved_data = ag_db_chart_get_data_by_id(
|
||||
db,
|
||||
row_id,
|
||||
&err)) == NULL) {
|
||||
@ -1534,7 +1726,7 @@ ag_window_list_item_activated_cb(GdMainView *view,
|
||||
"Error: %s",
|
||||
err->message
|
||||
);
|
||||
ag_db_save_data_free(priv->saved_data);
|
||||
ag_db_chart_save_free(priv->saved_data);
|
||||
priv->saved_data = NULL;
|
||||
|
||||
return;
|
||||
@ -1612,17 +1804,46 @@ ag_window_city_matches(GtkEntryCompletion *city_comp,
|
||||
return ret;
|
||||
}
|
||||
|
||||
gboolean
|
||||
ag_window_chart_context_cb(WebKitWebView *web_view,
|
||||
GtkWidget *default_menu,
|
||||
WebKitHitTestResult *hit_test_result,
|
||||
gboolean triggered_with_keyboard,
|
||||
gpointer user_data)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_init(AgWindow *window)
|
||||
{
|
||||
GtkAccelGroup *accel_group;
|
||||
GSettings *main_settings;
|
||||
GList *house_system_list;
|
||||
GtkCellRenderer *house_system_renderer;
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
GtkAccelGroup *accel_group;
|
||||
GSettings *main_settings;
|
||||
GList *house_system_list,
|
||||
*display_theme_list;
|
||||
GtkCellRenderer *house_system_renderer,
|
||||
*display_theme_renderer;
|
||||
WebKitUserContentManager *manager = webkit_user_content_manager_new();
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
|
||||
gtk_widget_init_template(GTK_WIDGET(window));
|
||||
|
||||
priv->chart_web_view = webkit_web_view_new_with_user_content_manager(
|
||||
manager
|
||||
);
|
||||
gtk_box_pack_end(
|
||||
GTK_BOX(priv->tab_chart),
|
||||
priv->chart_web_view,
|
||||
TRUE, TRUE, 0
|
||||
);
|
||||
|
||||
g_signal_connect(
|
||||
priv->chart_web_view,
|
||||
"context-menu",
|
||||
G_CALLBACK(ag_window_chart_context_cb),
|
||||
NULL
|
||||
);
|
||||
|
||||
priv->settings = ag_settings_get();
|
||||
main_settings = ag_settings_peek_main_settings(priv->settings);
|
||||
|
||||
@ -1678,6 +1899,32 @@ ag_window_init(AgWindow *window)
|
||||
NULL
|
||||
);
|
||||
|
||||
display_theme_list = ag_display_theme_get_list();
|
||||
g_list_foreach(
|
||||
display_theme_list,
|
||||
(GFunc)ag_window_add_display_theme,
|
||||
priv
|
||||
);
|
||||
g_list_free_full(display_theme_list, (GDestroyNotify)ag_display_theme_free);
|
||||
gtk_tree_model_foreach(
|
||||
GTK_TREE_MODEL(priv->display_theme_model),
|
||||
(GtkTreeModelForeachFunc)ag_window_set_default_display_theme,
|
||||
window
|
||||
);
|
||||
|
||||
display_theme_renderer = gtk_cell_renderer_text_new();
|
||||
gtk_cell_layout_pack_start(
|
||||
GTK_CELL_LAYOUT(priv->display_theme),
|
||||
display_theme_renderer,
|
||||
TRUE
|
||||
);
|
||||
gtk_cell_layout_set_attributes(
|
||||
GTK_CELL_LAYOUT(priv->display_theme),
|
||||
display_theme_renderer,
|
||||
"text", 1,
|
||||
NULL
|
||||
);
|
||||
|
||||
priv->tab_list = GTK_WIDGET(gd_main_view_new(GD_MAIN_VIEW_ICON));
|
||||
gtk_stack_add_titled(
|
||||
GTK_STACK(priv->stack),
|
||||
@ -1930,6 +2177,26 @@ ag_window_city_changed_callback(GtkSearchEntry *city, AgWindow *window)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ag_window_display_theme_changed_cb(GtkComboBox *combo_box,
|
||||
AgWindow *window)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
gint theme_id;
|
||||
AgDisplayTheme *theme;
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
|
||||
gtk_combo_box_get_active_iter(combo_box, &iter);
|
||||
gtk_tree_model_get(
|
||||
GTK_TREE_MODEL(priv->display_theme_model), &iter,
|
||||
0, &theme_id,
|
||||
-1
|
||||
);
|
||||
|
||||
theme = ag_display_theme_get_by_id(theme_id);
|
||||
ag_window_set_theme(window, theme);
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_class_init(AgWindowClass *klass)
|
||||
{
|
||||
@ -2074,6 +2341,16 @@ ag_window_class_init(AgWindowClass *klass)
|
||||
AgWindow,
|
||||
points_eq
|
||||
);
|
||||
gtk_widget_class_bind_template_child_private(
|
||||
widget_class,
|
||||
AgWindow,
|
||||
display_theme
|
||||
);
|
||||
gtk_widget_class_bind_template_child_private(
|
||||
widget_class,
|
||||
AgWindow,
|
||||
display_theme_model
|
||||
);
|
||||
|
||||
gtk_widget_class_bind_template_callback(
|
||||
widget_class,
|
||||
@ -2095,16 +2372,10 @@ ag_window_class_init(AgWindowClass *klass)
|
||||
widget_class,
|
||||
ag_window_city_changed_callback
|
||||
);
|
||||
}
|
||||
|
||||
gboolean
|
||||
ag_window_chart_context_cb(WebKitWebView *web_view,
|
||||
GtkWidget *default_menu,
|
||||
WebKitHitTestResult *hit_test_result,
|
||||
gboolean triggered_with_keyboard,
|
||||
gpointer user_data)
|
||||
{
|
||||
return TRUE;
|
||||
gtk_widget_class_bind_template_callback(
|
||||
widget_class,
|
||||
ag_window_display_theme_changed_cb
|
||||
);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -2124,26 +2395,10 @@ ag_window_configure_event_cb(GtkWidget *widget,
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
ag_window_new(AgApp *app, WebKitUserContentManager *manager)
|
||||
ag_window_new(AgApp *app)
|
||||
{
|
||||
AgWindow *window = g_object_new(AG_TYPE_WINDOW, NULL);
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
|
||||
priv->chart_web_view = webkit_web_view_new_with_user_content_manager(
|
||||
manager
|
||||
);
|
||||
gtk_box_pack_end(
|
||||
GTK_BOX(priv->tab_chart),
|
||||
priv->chart_web_view,
|
||||
TRUE, TRUE, 0
|
||||
);
|
||||
|
||||
g_signal_connect(
|
||||
priv->chart_web_view,
|
||||
"context-menu",
|
||||
G_CALLBACK(ag_window_chart_context_cb),
|
||||
NULL
|
||||
);
|
||||
AgWindow *window = g_object_new(AG_TYPE_WINDOW, NULL);
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
|
||||
// TODO: translate this error message!
|
||||
webkit_web_view_load_html(
|
||||
@ -2192,7 +2447,7 @@ ag_window_set_chart(AgWindow *window, AgChart *chart)
|
||||
g_clear_object(&(priv->chart));
|
||||
}
|
||||
|
||||
ag_db_save_data_free(priv->saved_data);
|
||||
ag_db_chart_save_free(priv->saved_data);
|
||||
|
||||
priv->chart = chart;
|
||||
g_signal_connect(
|
||||
@ -2278,7 +2533,7 @@ ag_window_change_tab(AgWindow *window, const gchar *tab_name)
|
||||
}
|
||||
|
||||
static void
|
||||
ag_window_add_chart_to_list(AgDbSave *save_data, AgWindow *window)
|
||||
ag_window_add_chart_to_list(AgDbChartSave *save_data, AgWindow *window)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
AgWindowPrivate *priv = ag_window_get_instance_private(window);
|
||||
@ -2313,7 +2568,7 @@ ag_window_load_chart_list(AgWindow *window)
|
||||
{
|
||||
AgDb *db = ag_db_get();
|
||||
GError *err = NULL;
|
||||
GList *chart_list = ag_db_get_chart_list(db, &err);
|
||||
GList *chart_list = ag_db_chart_get_list(db, &err);
|
||||
|
||||
ag_window_clear_chart_list(window);
|
||||
/* With only a few charts, this should be fine. Maybe implementing lazy
|
||||
|
@ -2,7 +2,6 @@
|
||||
#define __AG_WINDOW_H__
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <webkit2/webkit2.h>
|
||||
|
||||
#include "ag-app.h"
|
||||
#include "ag-chart.h"
|
||||
@ -41,7 +40,7 @@ struct _AgWindowClass {
|
||||
|
||||
GType ag_window_get_type(void) G_GNUC_CONST;
|
||||
|
||||
GtkWidget *ag_window_new(AgApp *app, WebKitUserContentManager *manager);
|
||||
GtkWidget *ag_window_new(AgApp *app);
|
||||
|
||||
void ag_window_set_chart(AgWindow *window,
|
||||
AgChart *chart);
|
||||
|
124
src/astrognome.c
124
src/astrognome.c
@ -27,6 +27,7 @@ GtkFileFilter *filter_hor = NULL;
|
||||
GtkTreeModel *country_list = NULL;
|
||||
GtkTreeModel *city_list = NULL;
|
||||
GHashTable *xinclude_positions;
|
||||
gsize used_planets_count;
|
||||
|
||||
const char *moonStateName[] = {
|
||||
"New Moon",
|
||||
@ -40,6 +41,32 @@ const char *moonStateName[] = {
|
||||
"Dark Moon"
|
||||
};
|
||||
|
||||
const GswePlanet used_planets[] = {
|
||||
GSWE_PLANET_MC,
|
||||
GSWE_PLANET_ASCENDANT,
|
||||
GSWE_PLANET_VERTEX,
|
||||
GSWE_PLANET_SUN,
|
||||
GSWE_PLANET_MOON,
|
||||
GSWE_PLANET_MERCURY,
|
||||
GSWE_PLANET_VENUS,
|
||||
GSWE_PLANET_MARS,
|
||||
GSWE_PLANET_JUPITER,
|
||||
GSWE_PLANET_SATURN,
|
||||
GSWE_PLANET_URANUS,
|
||||
GSWE_PLANET_NEPTUNE,
|
||||
GSWE_PLANET_PLUTO,
|
||||
GSWE_PLANET_MOON_NODE,
|
||||
GSWE_PLANET_MOON_APOGEE,
|
||||
GSWE_PLANET_CHIRON,
|
||||
GSWE_PLANET_PHOLUS,
|
||||
GSWE_PLANET_NESSUS,
|
||||
GSWE_PLANET_CERES,
|
||||
GSWE_PLANET_PALLAS,
|
||||
GSWE_PLANET_JUNO,
|
||||
GSWE_PLANET_VESTA,
|
||||
GSWE_PLANET_CHARIKLO
|
||||
};
|
||||
|
||||
void
|
||||
init_filters(void)
|
||||
{
|
||||
@ -188,6 +215,102 @@ ag_house_system_nick_to_id(const gchar *nick)
|
||||
return GSWE_HOUSE_SYSTEM_NONE;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
ag_planet_id_to_nick(GswePlanet planet)
|
||||
{
|
||||
GEnumClass *planet_class;
|
||||
GEnumValue *enum_value;
|
||||
|
||||
planet_class = g_type_class_ref(GSWE_TYPE_PLANET);
|
||||
enum_value = g_enum_get_value(planet_class, planet);
|
||||
|
||||
if (enum_value) {
|
||||
return enum_value->value_nick;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GswePlanet
|
||||
ag_planet_nick_to_id(const gchar *nick)
|
||||
{
|
||||
GEnumClass *planet_class;
|
||||
GEnumValue *enum_value;
|
||||
|
||||
planet_class = g_type_class_ref(GSWE_TYPE_PLANET);
|
||||
enum_value = g_enum_get_value_by_nick(planet_class, nick);
|
||||
|
||||
if (enum_value) {
|
||||
return enum_value->value;
|
||||
}
|
||||
|
||||
return GSWE_PLANET_NONE;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
ag_aspect_id_to_nick(GsweAspect aspect)
|
||||
{
|
||||
GEnumClass *aspect_class;
|
||||
GEnumValue *enum_value;
|
||||
|
||||
aspect_class = g_type_class_ref(GSWE_TYPE_ASPECT);
|
||||
enum_value = g_enum_get_value(aspect_class, aspect);
|
||||
|
||||
if (enum_value) {
|
||||
return enum_value->value_nick;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GsweAspect
|
||||
ag_aspect_nick_to_id(const gchar *nick)
|
||||
{
|
||||
GEnumClass *aspect_class;
|
||||
GEnumValue *enum_value;
|
||||
|
||||
aspect_class = g_type_class_ref(GSWE_TYPE_ASPECT);
|
||||
enum_value = g_enum_get_value_by_nick(aspect_class, nick);
|
||||
|
||||
if (enum_value) {
|
||||
return enum_value->value;
|
||||
}
|
||||
|
||||
return GSWE_ASPECT_NONE;
|
||||
}
|
||||
|
||||
const gchar *
|
||||
ag_antiscion_axis_id_to_nick(GsweAntiscionAxis antiscion_axis)
|
||||
{
|
||||
GEnumClass *antiscion_axis_class;
|
||||
GEnumValue *enum_value;
|
||||
|
||||
antiscion_axis_class = g_type_class_ref(GSWE_TYPE_ANTISCION_AXIS);
|
||||
enum_value = g_enum_get_value(antiscion_axis_class, antiscion_axis);
|
||||
|
||||
if (enum_value) {
|
||||
return enum_value->value_nick;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GsweAntiscionAxis
|
||||
ag_antiscion_axis_nick_to_id(const gchar *nick)
|
||||
{
|
||||
GEnumClass *antiscion_axis_class;
|
||||
GEnumValue *enum_value;
|
||||
|
||||
antiscion_axis_class = g_type_class_ref(GSWE_TYPE_ANTISCION_AXIS);
|
||||
enum_value = g_enum_get_value_by_nick(antiscion_axis_class, nick);
|
||||
|
||||
if (enum_value) {
|
||||
return enum_value->value;
|
||||
}
|
||||
|
||||
return GSWE_ANTISCION_AXIS_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* ag_get_user_data_dir:
|
||||
*
|
||||
@ -261,6 +384,7 @@ main(int argc, char *argv[])
|
||||
textdomain(GETTEXT_PACKAGE);
|
||||
#endif
|
||||
|
||||
used_planets_count = sizeof(used_planets) / sizeof(GswePlanet);
|
||||
LIBXML_TEST_VERSION;
|
||||
xmlSubstituteEntitiesDefault(1);
|
||||
xmlLoadExtDtdDefaultValue = 1;
|
||||
|
@ -10,11 +10,13 @@ typedef struct {
|
||||
gboolean new_window;
|
||||
} AstrognomeOptions;
|
||||
|
||||
extern GtkFileFilter *filter_all;
|
||||
extern GtkFileFilter *filter_chart;
|
||||
extern GtkFileFilter *filter_hor;
|
||||
extern GtkTreeModel *country_list;
|
||||
extern GtkTreeModel *city_list;
|
||||
extern GtkFileFilter *filter_all;
|
||||
extern GtkFileFilter *filter_chart;
|
||||
extern GtkFileFilter *filter_hor;
|
||||
extern GtkTreeModel *country_list;
|
||||
extern GtkTreeModel *city_list;
|
||||
extern const GswePlanet used_planets[];
|
||||
extern gsize used_planets_count;
|
||||
|
||||
enum {
|
||||
AG_COUNTRY_CODE,
|
||||
@ -35,6 +37,16 @@ enum {
|
||||
|
||||
const gchar *ag_house_system_id_to_nick(GsweHouseSystem house_system);
|
||||
GsweHouseSystem ag_house_system_nick_to_id(const gchar *nick);
|
||||
|
||||
const gchar *ag_planet_id_to_nick(GswePlanet planet);
|
||||
GswePlanet ag_planet_nick_to_id(const gchar *nick);
|
||||
|
||||
const gchar *ag_aspect_id_to_nick(GsweAspect aspect);
|
||||
GsweAspect ag_aspect_nick_to_id(const gchar *nick);
|
||||
|
||||
const gchar *ag_antiscion_axis_id_to_nick(GsweAntiscionAxis antiscion_axis);
|
||||
GsweAntiscionAxis ag_antiscion_axis_nick_to_id(const gchar *nick);
|
||||
|
||||
GFile *ag_get_user_data_dir(void);
|
||||
|
||||
#ifndef GDOUBLE_FROM_LE
|
||||
|
@ -10,11 +10,19 @@
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="display_theme_model">
|
||||
<columns>
|
||||
<!-- column-name display-theme-id -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name display-theme-name -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<template class="AgPreferences" parent="GtkDialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="type_hint">normal</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="dialog-vbox1">
|
||||
<object class="GtkBox">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">2</property>
|
||||
@ -37,7 +45,7 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkGrid" id="grid2">
|
||||
<object class="GtkGrid">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
@ -86,7 +94,7 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Default house system</property>
|
||||
@ -99,7 +107,7 @@
|
||||
<child>
|
||||
<object class="GtkComboBox" id="house_system">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">house_system_model</property>
|
||||
<property name="id_column">0</property>
|
||||
</object>
|
||||
@ -108,6 +116,29 @@
|
||||
<property name="top_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Default display theme</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="display_theme">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">display_theme_model</property>
|
||||
<property name="id_column">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -114,6 +114,14 @@
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="display_theme_model">
|
||||
<columns>
|
||||
<!-- column-name display-theme-id -->
|
||||
<column type="gint"/>
|
||||
<!-- column-name display-theme-name -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkTextBuffer" id="note_buffer">
|
||||
</object>
|
||||
<object class="GtkListStore" id="db_chart_data">
|
||||
@ -794,6 +802,15 @@
|
||||
<property name="action_target">'antiscia'</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="display_theme">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">display_theme_model</property>
|
||||
<property name="id_column">1</property>
|
||||
<signal name="changed" handler="ag_window_display_theme_changed_cb" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">start</property>
|
||||
|
@ -128,3 +128,9 @@ line.aspect-biquintile {
|
||||
line.aspect-quincunx {
|
||||
stroke: #cc0000;
|
||||
}
|
||||
|
||||
line.antiscion {
|
||||
stroke-width: 1;
|
||||
stroke: #000000;
|
||||
stroke-dasharray: 20,10;
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:math="http://exslt.org/math">
|
||||
<xsl:output
|
||||
method="xml"
|
||||
@ -18,6 +19,49 @@
|
||||
<xsl:variable name="icon_size" select="30" />
|
||||
<xsl:variable name="r_aspect" select="$image_size * 0.3" />
|
||||
|
||||
<xsl:template name="planet-template">
|
||||
<xsl:param name="planet_name"/>
|
||||
<xsl:param name="planet_base"/>
|
||||
<xsl:param name="rotate"/>
|
||||
<xsl:param name="dist"/>
|
||||
<xsl:param name="retrograde"/>
|
||||
<xsl:param name="upside-down"/>
|
||||
|
||||
<g xmlns="http://www.w3.org/2000/svg">
|
||||
<xsl:attribute name="id">planet-<xsl:value-of select="$planet_name"/></xsl:attribute>
|
||||
<xsl:attribute name="class">planet planet-<xsl:value-of select="$planet_name"/></xsl:attribute>
|
||||
<xsl:attribute name="transform">rotate(<xsl:value-of select="-$rotate"/>, 0, 0)</xsl:attribute>
|
||||
<line y1="0" y2="0" class="planet-marker">
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$image_size * 0.2875"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$image_size * 0.3"/></xsl:attribute>
|
||||
</line>
|
||||
<line y1="0" y2="0" class="planet-marker">
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$image_size * 0.375"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$image_size * 0.3875"/></xsl:attribute>
|
||||
</line>
|
||||
<g>
|
||||
<xsl:attribute name="transform">translate(<xsl:value-of select="$image_size * 0.4125 + $dist * ($icon_size * 1.1666666)"/>, <xsl:value-of select="-$icon_size div 2"/>) rotate(<xsl:value-of select="$rotate - $asc_rotate"/>, <xsl:value-of select="$icon_size div 2"/>, <xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
|
||||
<use class="planet-symbol">
|
||||
<xsl:attribute name="xlink:href">#<xsl:value-of select="$planet_base"/>_tmpl</xsl:attribute>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$upside-down='yes'">
|
||||
<xsl:attribute name="transform">rotate(180, <xsl:value-of select="$icon_size div 2"/>, <xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</use>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$retrograde='True'">
|
||||
<text>
|
||||
<xsl:attribute name="font-size"><xsl:value-of select="$icon_size div 2"/></xsl:attribute>
|
||||
<xsl:attribute name="transform">translate(<xsl:value-of select="$icon_size"/>, <xsl:value-of select="$icon_size * 1.5"/>)</xsl:attribute>
|
||||
R
|
||||
</text>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</g>
|
||||
</g>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="/">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@ -505,7 +549,9 @@
|
||||
<use x="0" y="0" xlink:href="#sign_pisces_tmpl" id="sign_pisces" class="sign sign-water">
|
||||
<xsl:attribute name="transform">rotate(-345,0,0) translate(<xsl:value-of select="$image_size * 0.32625"/>,-<xsl:value-of select="$icon_size div 2"/>) rotate(90,<xsl:value-of select="$icon_size div 2"/>,<xsl:value-of select="$icon_size div 2"/>)</xsl:attribute>
|
||||
</use>
|
||||
</g>
|
||||
|
||||
<g id="houes">
|
||||
<xsl:for-each select="chartinfo/houses/house">
|
||||
<xsl:variable name="next_house" select="@number + 1"/>
|
||||
<xsl:variable name="next_degree_read">
|
||||
@ -581,191 +627,151 @@
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$image_size * 0.0625"/></xsl:attribute>
|
||||
<xsl:attribute name="transform"><xsl:value-of select="concat('rotate(-', $mc, ')')" /></xsl:attribute>
|
||||
</line>
|
||||
</g>
|
||||
|
||||
<g id="planets">
|
||||
<xsl:for-each select="chartinfo/ascmcs/vertex">
|
||||
<xsl:variable name="planet_base">point_vertex</xsl:variable>
|
||||
<xsl:variable name="degree"><xsl:value-of select="@degree_ut" /></xsl:variable>
|
||||
<xsl:variable name="negative_degree"><xsl:value-of select="0 - $degree" /></xsl:variable>
|
||||
<g>
|
||||
<xsl:attribute name="id"><xsl:value-of select="$planet_base"/></xsl:attribute>
|
||||
<xsl:attribute name="transform"><xsl:value-of select="concat('rotate(', $negative_degree, ',0,0)')"/></xsl:attribute>
|
||||
<line y1="0" y2="0" class="planet-marker">
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$image_size * 0.2875"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$image_size * 0.3"/></xsl:attribute>
|
||||
<xsl:attribute name="id"><xsl:value-of select="concat('mark_', $planet_base)" /></xsl:attribute>
|
||||
</line>
|
||||
<line y1="0" y2="0" class="planet-marker">
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$image_size * 0.375"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$image_size * 0.4"/></xsl:attribute>
|
||||
<xsl:attribute name="id"><xsl:value-of select="concat('mark_', $planet_base, '_outer')" /></xsl:attribute>
|
||||
</line>
|
||||
<use class="planet-symbol">
|
||||
<xsl:attribute name="xlink:href"><xsl:value-of select="concat('#', $planet_base, '_tmpl')"/></xsl:attribute>
|
||||
<xsl:attribute name="transform"><xsl:value-of select="concat('translate(',$image_size * 0.4125,',-',$icon_size div 2,') rotate(', $degree - $asc_rotate ,',', $icon_size div 2, ',', $icon_size div 2, ')')"/></xsl:attribute>
|
||||
</use>
|
||||
</g>
|
||||
</xsl:for-each>
|
||||
<xsl:for-each select="chartinfo/bodies/body">
|
||||
<xsl:variable name="planet_base" select="substring(translate(@name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 6)"/>
|
||||
<xsl:variable name="negative_degree"><xsl:value-of select="0 - @degree"/></xsl:variable>
|
||||
<g>
|
||||
<xsl:attribute name="id"><xsl:value-of select="$planet_base"/></xsl:attribute>
|
||||
<xsl:attribute name="transform"><xsl:value-of select="concat('rotate(', $negative_degree, ',0,0)')"/></xsl:attribute>
|
||||
<line y1="0" y2="0" class="planet-marker">
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$image_size * 0.2875"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$image_size * 0.3"/></xsl:attribute>
|
||||
<xsl:attribute name="id"><xsl:value-of select="concat('mark_', $planet_base)" /></xsl:attribute>
|
||||
</line>
|
||||
<line y1="0" y2="0" class="planet-marker">
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$image_size * 0.375"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$image_size * 0.3875"/></xsl:attribute>
|
||||
<xsl:attribute name="id"><xsl:value-of select="concat('mark_', $planet_base, '_outer')" /></xsl:attribute>
|
||||
</line>
|
||||
<use class="planet-symbol">
|
||||
<xsl:attribute name="xlink:href"><xsl:value-of select="concat('#', $planet_base, '_tmpl')"/></xsl:attribute>
|
||||
<xsl:attribute name="transform"><xsl:value-of select="concat('translate(', $image_size * 0.4125 + @dist * ($icon_size * 1.1666666), ',-', $icon_size div 2, ') rotate(', @degree - $asc_rotate ,',', $icon_size div 2, ',', $icon_size div 2, ')')"/></xsl:attribute>
|
||||
</use>
|
||||
<xsl:choose>
|
||||
<xsl:when test="@retrograde='True'">
|
||||
<text>
|
||||
<xsl:attribute name="transform"><xsl:value-of select="concat('translate(', $image_size * 0.45625 + @dist * $icon_size * 1.1666666, ',', $icon_size div 2, ') rotate(', @degree - $asc_rotate, ',-', $icon_size * 0.666666, ',-', $icon_size * 0.666666, ')')"/></xsl:attribute>
|
||||
R
|
||||
</text>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</g>
|
||||
<g id="planets">
|
||||
<xsl:for-each select="chartinfo/ascmcs/vertex">
|
||||
<xsl:call-template name="planet-template">
|
||||
<xsl:with-param name="planet_name">vertex</xsl:with-param>
|
||||
<xsl:with-param name="rotate"><xsl:value-of select="@degree_ut"/></xsl:with-param>
|
||||
<xsl:with-param name="planet_base">point_vertex</xsl:with-param>
|
||||
<!-- TODO: dist must be calculated for Vertex, too! -->
|
||||
<xsl:with-param name="dist">0</xsl:with-param>
|
||||
<xsl:with-param name="retrograde">False</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:for-each>
|
||||
<xsl:for-each select="chartinfo/bodies/body">
|
||||
<xsl:call-template name="planet-template">
|
||||
<xsl:with-param name="planet_name"><xsl:value-of select="@name"/></xsl:with-param>
|
||||
<xsl:with-param name="rotate"><xsl:value-of select="@degree"/></xsl:with-param>
|
||||
<xsl:with-param name="planet_base">planet_<xsl:value-of select="translate(@name, '-', '_')"/></xsl:with-param>
|
||||
<xsl:with-param name="dist"><xsl:value-of select="@dist"/></xsl:with-param>
|
||||
<xsl:with-param name="retrograde"><xsl:value-of select="@retrograde"/></xsl:with-param>
|
||||
</xsl:call-template>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="@name='moon-node'">
|
||||
<xsl:call-template name="planet-template">
|
||||
<xsl:with-param name="planet_name"><xsl:value-of select="@name"/>-desc</xsl:with-param>
|
||||
<xsl:with-param name="rotate"><xsl:value-of select="180 + @degree"/></xsl:with-param>
|
||||
<xsl:with-param name="planet_base">planet_moon_node</xsl:with-param>
|
||||
<xsl:with-param name="dist"><xsl:value-of select="@dist"/></xsl:with-param>
|
||||
<xsl:with-param name="retrograde"><xsl:value-of select="@retrograde"/></xsl:with-param>
|
||||
<xsl:with-param name="upside-down">yes</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:for-each>
|
||||
</g>
|
||||
|
||||
<g id="aspects">
|
||||
<xsl:for-each select="chartinfo/aspects/aspect">
|
||||
<xsl:variable name="planet1" select="@body1"/>
|
||||
<xsl:variable name="deg1">
|
||||
<xsl:choose>
|
||||
<xsl:when test="@name='GSWE_PLANET_MOON_NODE'">
|
||||
<g>
|
||||
<xsl:attribute name="id"><xsl:value-of select="concat($planet_base, '_desc')"/></xsl:attribute>
|
||||
<xsl:attribute name="transform"><xsl:value-of select="concat('rotate(', 180 + $negative_degree, ',0,0)')"/></xsl:attribute>
|
||||
<line y1="0" y2="0" class="planet-marker">
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$image_size * 0.2875"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$image_size * 0.3"/></xsl:attribute>
|
||||
<xsl:attribute name="id"><xsl:value-of select="concat('mark_', $planet_base)" /></xsl:attribute>
|
||||
</line>
|
||||
<line y1="0" y2="0" class="planet-marker">
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$image_size * 0.375"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$image_size * 0.3875"/></xsl:attribute>
|
||||
<xsl:attribute name="id"><xsl:value-of select="concat('mark_', $planet_base, '_outer')" /></xsl:attribute>
|
||||
</line>
|
||||
<use class="planet-symbol">
|
||||
<xsl:attribute name="xlink:href"><xsl:value-of select="concat('#', $planet_base, '_tmpl')"/></xsl:attribute>
|
||||
<xsl:attribute name="transform"><xsl:value-of select="concat('translate(', $image_size * 0.4125, ',-', $icon_size div 2, ') rotate(', @degree - $asc_rotate ,',', $icon_size div 2, ',', $icon_size div 2, ')')"/></xsl:attribute>
|
||||
</use>
|
||||
</g>
|
||||
<xsl:when test="$planet1='ascendant'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/ascendant/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet1='mc'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/mc/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet1='vertex'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/vertex/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="/chartinfo/bodies/body[@name=$planet1]/@degree" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:for-each>
|
||||
</g>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="rad1" select="$deg1 * $PI div 180"/>
|
||||
<xsl:variable name="x1" select="$r_aspect * math:cos($rad1)"/>
|
||||
<xsl:variable name="y1" select="$r_aspect * -math:sin($rad1)"/>
|
||||
|
||||
<g id="aspects">
|
||||
<xsl:for-each select="chartinfo/aspects/aspect">
|
||||
<xsl:variable name="planet1" select="@body1"/>
|
||||
<xsl:variable name="deg1">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$planet1='GSWE_PLANET_ASCENDANT'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/ascendant/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet1='GSWE_PLANET_MC'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/mc/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet1='GSWE_PLANET_VERTEX'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/vertex/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="/chartinfo/bodies/body[@name=$planet1]/@degree" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="rad1" select="$deg1 * $PI div 180"/>
|
||||
<xsl:variable name="x1" select="$r_aspect * math:cos($rad1)"/>
|
||||
<xsl:variable name="y1" select="$r_aspect * -math:sin($rad1)"/>
|
||||
<xsl:variable name="planet2" select="@body2"/>
|
||||
<xsl:variable name="deg2">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$planet2='ascendant'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/ascendant/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet2='mc'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/mc/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet2='vertex'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/vertex/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="/chartinfo/bodies/body[@name=$planet2]/@degree" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="rad2" select="$deg2 * $PI div 180"/>
|
||||
<xsl:variable name="x2" select="$r_aspect * math:cos($rad2)"/>
|
||||
<xsl:variable name="y2" select="$r_aspect * -math:sin($rad2)"/>
|
||||
|
||||
<xsl:variable name="planet2" select="@body2"/>
|
||||
<xsl:variable name="deg2">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$planet2='GSWE_PLANET_ASCENDANT'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/ascendant/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet2='GSWE_PLANET_MC'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/mc/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet2='GSWE_PLANET_VERTEX'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/vertex/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="/chartinfo/bodies/body[@name=$planet2]/@degree" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="rad2" select="$deg2 * $PI div 180"/>
|
||||
<xsl:variable name="x2" select="$r_aspect * math:cos($rad2)"/>
|
||||
<xsl:variable name="y2" select="$r_aspect * -math:sin($rad2)"/>
|
||||
<line class="aspect">
|
||||
<xsl:attribute name="id">aspect-<xsl:value-of select="$planet1"/>-<xsl:value-of select="$planet2"/></xsl:attribute>
|
||||
<xsl:attribute name="class">aspect aspect-<xsl:value-of select="@type"/> aspect-<xsl:value-of select="$planet1"/> aspect-<xsl:value-of select="$planet2"/></xsl:attribute>
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$x1"/></xsl:attribute>
|
||||
<xsl:attribute name="y1"><xsl:value-of select="$y1"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$x2"/></xsl:attribute>
|
||||
<xsl:attribute name="y2"><xsl:value-of select="$y2"/></xsl:attribute>
|
||||
</line>
|
||||
</xsl:for-each>
|
||||
</g>
|
||||
|
||||
<line class="aspect">
|
||||
<xsl:attribute name="class"><xsl:value-of select="concat('aspect aspect-', @type)"/></xsl:attribute>
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$x1"/></xsl:attribute>
|
||||
<xsl:attribute name="y1"><xsl:value-of select="$y1"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$x2"/></xsl:attribute>
|
||||
<xsl:attribute name="y2"><xsl:value-of select="$y2"/></xsl:attribute>
|
||||
</line>
|
||||
</xsl:for-each>
|
||||
</g>
|
||||
<g id="antiscia" display="none">
|
||||
<xsl:for-each select="chartinfo/antiscia/antiscia">
|
||||
<xsl:variable name="planet1" select="@body1"/>
|
||||
<xsl:variable name="deg1">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$planet1='ascendant'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/ascendant/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet1='mc'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/mc/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet1='vertex'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/vertex/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="/chartinfo/bodies/body[@name=$planet1]/@degree" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="rad1" select="$deg1 * $PI div 180"/>
|
||||
<xsl:variable name="x1" select="$r_aspect * math:cos($rad1)"/>
|
||||
<xsl:variable name="y1" select="$r_aspect * -math:sin($rad1)"/>
|
||||
|
||||
<g id="antiscia" visibility="hidden">
|
||||
<xsl:for-each select="chartinfo/antiscia/antiscia">
|
||||
<xsl:variable name="planet1" select="@body1"/>
|
||||
<xsl:variable name="deg1">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$planet1='GSWE_PLANET_ASCENDANT'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/ascendant/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet1='GSWE_PLANET_MC'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/mc/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet1='GSWE_PLANET_VERTEX'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/vertex/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="/chartinfo/bodies/body[@name=$planet1]/@degree" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="rad1" select="$deg1 * $PI div 180"/>
|
||||
<xsl:variable name="x1" select="$r_aspect * math:cos($rad1)"/>
|
||||
<xsl:variable name="y1" select="$r_aspect * -math:sin($rad1)"/>
|
||||
<xsl:variable name="planet2" select="@body2"/>
|
||||
<xsl:variable name="deg2">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$planet2='ascendant'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/ascendant/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet2='mc'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/mc/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet2='vertex'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/vertex/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="/chartinfo/bodies/body[@name=$planet2]/@degree" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="rad2" select="$deg2 * $PI div 180"/>
|
||||
<xsl:variable name="x2" select="$r_aspect * math:cos($rad2)"/>
|
||||
<xsl:variable name="y2" select="$r_aspect * -math:sin($rad2)"/>
|
||||
|
||||
<xsl:variable name="planet2" select="@body2"/>
|
||||
<xsl:variable name="deg2">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$planet2='GSWE_PLANET_ASCENDANT'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/ascendant/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet2='GSWE_PLANET_MC'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/mc/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:when test="$planet2='GSWE_PLANET_VERTEX'">
|
||||
<xsl:value-of select="/chartinfo/ascmcs/vertex/@degree_ut" />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="/chartinfo/bodies/body[@name=$planet2]/@degree" />
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="rad2" select="$deg2 * $PI div 180"/>
|
||||
<xsl:variable name="x2" select="$r_aspect * math:cos($rad2)"/>
|
||||
<xsl:variable name="y2" select="$r_aspect * -math:sin($rad2)"/>
|
||||
|
||||
<line style="stroke-width:1;stroke:#000000;stroke-dasharray:20,10">
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$x1"/></xsl:attribute>
|
||||
<xsl:attribute name="y1"><xsl:value-of select="$y1"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$x2"/></xsl:attribute>
|
||||
<xsl:attribute name="y2"><xsl:value-of select="$y2"/></xsl:attribute>
|
||||
</line>
|
||||
</xsl:for-each>
|
||||
</g>
|
||||
<line class="antiscion">
|
||||
<xsl:attribute name="id">antiscion-<xsl:value-of select="$planet1"/>-<xsl:value-of select="$planet2"/></xsl:attribute>
|
||||
<xsl:attribute name="class">antiscion antiscion-<xsl:value-of select="@axis"/> antiscion-<xsl:value-of select="$planet1"/> antiscion-<xsl:value-of select="$planet2"/></xsl:attribute>
|
||||
<xsl:attribute name="x1"><xsl:value-of select="$x1"/></xsl:attribute>
|
||||
<xsl:attribute name="y1"><xsl:value-of select="$y1"/></xsl:attribute>
|
||||
<xsl:attribute name="x2"><xsl:value-of select="$x2"/></xsl:attribute>
|
||||
<xsl:attribute name="y2"><xsl:value-of select="$y2"/></xsl:attribute>
|
||||
</line>
|
||||
</xsl:for-each>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
Loading…
Reference in New Issue
Block a user