Added basic loading of categories.
Added two empty sample categories with corresponding icons. The categories are now being loaded into the toolbar in the main program window.
This commit is contained in:
parent
82cfa12920
commit
55c25ae1bd
125
share/library/Logical/icon.svg
Normal file
125
share/library/Logical/icon.svg
Normal file
@ -0,0 +1,125 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="128"
|
||||
height="128"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.0 r9654"
|
||||
sodipodi:docname="icon.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="56.201683"
|
||||
inkscape:cy="68.554775"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g3016-8"
|
||||
showgrid="true"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="748"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3780"
|
||||
empspacing="5"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-924.36218)">
|
||||
<g
|
||||
id="g3016"
|
||||
transform="translate(-10,-60)">
|
||||
<path
|
||||
transform="translate(0,924.36218)"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3008"
|
||||
d="m 25,108 20,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
transform="translate(0,924.36218)"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3010"
|
||||
d="m 25,88 20,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccscc"
|
||||
transform="translate(0,924.36218)"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3012"
|
||||
d="m 45,118 0,-40 25,0 c 0,0 20,0 20,20 0,20 -20,20 -20,20 z"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3014"
|
||||
d="m 90,98 20,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
transform="translate(0,924.36218)" />
|
||||
</g>
|
||||
<g
|
||||
id="g3016-8"
|
||||
transform="translate(5,-5)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3010-0"
|
||||
d="m 25,1022.3622 20,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
transform="translate(0,924.36218)"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3012-9"
|
||||
d="M 45,118 45,78 75,98 z"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3014-6"
|
||||
d="m 87.5,1022.3622 17.5,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:none;stroke:#000000;stroke-width:6;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="path3820"
|
||||
sodipodi:cx="90"
|
||||
sodipodi:cy="93"
|
||||
sodipodi:rx="10"
|
||||
sodipodi:ry="10"
|
||||
d="m 100,93 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
|
||||
transform="matrix(0.5,0,0,0.5,37,975.86218)" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.5 KiB |
94
share/library/Passive/icon.svg
Normal file
94
share/library/Passive/icon.svg
Normal file
@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="128"
|
||||
height="128"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.0 r9654"
|
||||
sodipodi:docname="New document 1">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="65.613954"
|
||||
inkscape:cy="65.153369"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g3784"
|
||||
showgrid="true"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="748"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3780"
|
||||
empspacing="5"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-924.36218)">
|
||||
<g
|
||||
id="g3784"
|
||||
transform="translate(0,10)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2985"
|
||||
d="m 15,962.36218 25,0 0,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2987"
|
||||
d="m 40,937.36218 0,50"
|
||||
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2985-2"
|
||||
d="m 85,962.36218 -25,0 0,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path2987-7"
|
||||
d="m 60,937.36216 0,50.00002"
|
||||
style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 29,1033.3622 15,0 c 0,0 0,-15 10,-15 10,0 10,15 10,15 0,0 0,-15 10,-15 10,0 10,15 10,15 0,0 0,-15 10,-15 10,0 10,15 10,15 l 15,0"
|
||||
id="path3782"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccscscscc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
@ -27,7 +27,6 @@ G_BEGIN_DECLS
|
||||
((obj), LOGDIAG_SYMBOL_CATEGORY, LogdiagSymbolCategoryClass))
|
||||
|
||||
typedef struct _LogdiagSymbolCategory LogdiagSymbolCategory;
|
||||
/*typedef struct _LogdiagSymbolCategoryPrivate LogdiagSymbolCategoryPrivate;*/
|
||||
typedef struct _LogdiagSymbolCategoryClass LogdiagSymbolCategoryClass;
|
||||
|
||||
|
||||
@ -46,8 +45,8 @@ struct _LogdiagSymbolCategory
|
||||
|
||||
/*< public >*/
|
||||
gpointer parent;
|
||||
char *name;
|
||||
char *image_path;
|
||||
gchar *name;
|
||||
gchar *image_path;
|
||||
GHashTable *children;
|
||||
};
|
||||
|
||||
|
@ -74,8 +74,8 @@ logdiag_symbol_library_init (LogdiagSymbolLibrary *self)
|
||||
/* TODO: lua */
|
||||
self->priv->lua_state = NULL;
|
||||
|
||||
/* TODO: use _new_full and specify destroy functions. */
|
||||
self->categories = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
self->categories = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
(GDestroyNotify) g_free, (GDestroyNotify) g_object_unref);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -110,7 +110,7 @@ logdiag_symbol_library_new (void)
|
||||
*
|
||||
* Loads a category into the library.
|
||||
*/
|
||||
LogdiagSymbolCategory *
|
||||
static LogdiagSymbolCategory *
|
||||
load_category (LogdiagSymbolLibrary *self, const char *path, const char *name)
|
||||
{
|
||||
LogdiagSymbolCategory *cat;
|
||||
@ -120,6 +120,9 @@ load_category (LogdiagSymbolLibrary *self, const char *path, const char *name)
|
||||
g_return_val_if_fail (path != NULL, NULL);
|
||||
g_return_val_if_fail (name != NULL, NULL);
|
||||
|
||||
if (!g_file_test (path, G_FILE_TEST_IS_DIR))
|
||||
return NULL;
|
||||
|
||||
icon_file = g_build_filename (path, "icon.svg", NULL);
|
||||
if (!g_file_test (icon_file, G_FILE_TEST_IS_REGULAR))
|
||||
{
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
#include "window-main.h"
|
||||
#include "symbol-library.h"
|
||||
#include "symbol-category.h"
|
||||
|
||||
|
||||
/**
|
||||
@ -45,6 +46,24 @@ struct _LogdiagWindowMainPrivate
|
||||
G_DEFINE_TYPE (LogdiagWindowMain, logdiag_window_main, GTK_TYPE_WINDOW);
|
||||
|
||||
|
||||
/* ===== Local functions =================================================== */
|
||||
|
||||
/*
|
||||
* cb_load_category:
|
||||
*
|
||||
* A hashtable foreach callback for adding categories into the toolbar.
|
||||
*/
|
||||
static void
|
||||
cb_load_category (gpointer key, gpointer value, gpointer user_data);
|
||||
|
||||
/*
|
||||
* load_toolbar:
|
||||
*
|
||||
* Load symbols from the library into the toolbar.
|
||||
*/
|
||||
static void
|
||||
load_toolbar (LogdiagWindowMain *self);
|
||||
|
||||
/*
|
||||
* cb_ui_proxy_connected:
|
||||
*
|
||||
@ -76,6 +95,8 @@ static void
|
||||
cb_show_about_dialog (GtkAction *action, LogdiagWindowMain *window);
|
||||
|
||||
|
||||
/* ===== Local variables =================================================== */
|
||||
|
||||
/* Actions for menus, toolbars, accelerators. */
|
||||
static GtkActionEntry mw_actionEntries[] =
|
||||
{
|
||||
@ -177,10 +198,10 @@ logdiag_window_main_init (LogdiagWindowMain *self)
|
||||
priv->menu = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
|
||||
gtk_box_pack_start (GTK_BOX (priv->vbox), priv->menu, FALSE, FALSE, 0);
|
||||
|
||||
|
||||
priv->hbox = gtk_hbox_new(FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (priv->vbox), priv->hbox, TRUE, TRUE, 0);
|
||||
|
||||
/* Add the symbol toolbar. */
|
||||
priv->toolbar = gtk_toolbar_new ();
|
||||
/* NOTE: For GTK 2.16+, s/toolbar/orientable/ */
|
||||
gtk_toolbar_set_orientation
|
||||
@ -190,18 +211,13 @@ logdiag_window_main_init (LogdiagWindowMain *self)
|
||||
gtk_toolbar_set_style
|
||||
(GTK_TOOLBAR (priv->toolbar), GTK_TOOLBAR_ICONS);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->toolbar, FALSE, FALSE, 0);
|
||||
|
||||
/* Symbol library. */
|
||||
priv->library = logdiag_symbol_library_new ();
|
||||
logdiag_symbol_library_load (priv->library, PROJECT_SHARE_DIR "library/");
|
||||
logdiag_symbol_library_load (priv->library, PROJECT_SHARE_DIR "library");
|
||||
|
||||
/* TODO: Show contents of the library in the toolbar. */
|
||||
GtkToolItem *item;
|
||||
item = gtk_tool_button_new (/* icon widget */ NULL, _("Blah"));
|
||||
gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), "network");
|
||||
gtk_toolbar_insert (GTK_TOOLBAR (priv->toolbar), item, 0);
|
||||
/* http://library.gnome.org/devel/gdk-pixbuf/unstable/ */
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (priv->hbox), priv->toolbar, FALSE, FALSE, 0);
|
||||
load_toolbar (self);
|
||||
|
||||
/* TODO: GtkHPaned */
|
||||
|
||||
@ -220,6 +236,44 @@ logdiag_window_main_init (LogdiagWindowMain *self)
|
||||
gtk_widget_show_all (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
static void
|
||||
cb_load_category (gpointer key, gpointer value, gpointer user_data)
|
||||
{
|
||||
const gchar *name;
|
||||
LogdiagSymbolCategory *cat;
|
||||
LogdiagWindowMain *self;
|
||||
GdkPixbuf *pbuf;
|
||||
GtkWidget *img;
|
||||
GtkToolItem *item;
|
||||
|
||||
name = key;
|
||||
cat = value;
|
||||
self = user_data;
|
||||
|
||||
g_return_if_fail (key != NULL);
|
||||
g_return_if_fail (LOGDIAG_IS_SYMBOL_CATEGORY (cat));
|
||||
|
||||
/* XXX: Hardcoded icon width, unref? */
|
||||
pbuf = gdk_pixbuf_new_from_file_at_size (cat->image_path, 32, -1, NULL);
|
||||
if (!pbuf)
|
||||
return;
|
||||
img = gtk_image_new_from_pixbuf (pbuf);
|
||||
g_object_unref (pbuf);
|
||||
|
||||
item = gtk_tool_button_new (img, name);
|
||||
gtk_tool_item_set_tooltip_text (item, name);
|
||||
gtk_toolbar_insert (GTK_TOOLBAR (self->priv->toolbar), item, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
load_toolbar (LogdiagWindowMain *self)
|
||||
{
|
||||
/* TODO: Clear the toolbar first, if there was already something in it. */
|
||||
|
||||
g_hash_table_foreach (self->priv->library->categories,
|
||||
cb_load_category, self);
|
||||
}
|
||||
|
||||
static void
|
||||
cb_ui_proxy_connected (GtkUIManager *ui, GtkAction *action,
|
||||
GtkWidget *proxy, LogdiagWindowMain *window)
|
||||
|
Loading…
Reference in New Issue
Block a user