diff --git a/.gitignore b/.gitignore index 86a9ce7..408e9a2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.user *~ +Makefile diff --git a/CMakeLists.txt b/CMakeLists.txt index d8e0263..34a68aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,15 @@ project(konaclient-gtk) - cmake_minimum_required(VERSION 2.8) -aux_source_directory(. SRC_LIST) +set(CMAKE_BUILD_TYPE Release) find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK3 REQUIRED gtk+-3.0) -pkg_check_modules(PC_LIBSOUP REQUIRED libsoup-2.4) +pkg_check_modules(GLIB2 REQUIRED glib-2.0) +pkg_check_modules(GOBJECT2 REQUIRED gobject-2.0) -include_directories(${GTK3_INCLUDE_DIRS} ${PC_LIBSOUP_INCLUDE_DIRS}) -link_directories(${GTK3_LIBRARY_DIRS} ${PC_LIBSOUP_LIBRARY_DIRS}) -add_definitions(${GTK3_CFLAGS_OTHER}) +INCLUDE_DIRECTORIES (${GLIB2_INCLUDE_DIRS} ${GOBJECT2_INCLUDE_DIRS} libkonaclient) +LINK_DIRECTORIES (${GLIB2_LIBRARY_DIRS} ${GOBJECT2_LIBRARY_DIRS}) +add_definitions(${GLIB2_CFLAGS_OTHER} ${GOBJECT2_CFLAGS_OTHER}) -add_executable(${PROJECT_NAME} ${SRC_LIST}) +add_subdirectory(libkonaclient) +add_subdirectory(konaclient-gtk) -# Link the target to the GTK+ libraries -target_link_libraries(${PROJECT_NAME} ${GTK3_LIBRARIES} ${PC_LIBSOUP_LIBRARIES}) diff --git a/konaclient-gtk/CMakeLists.txt b/konaclient-gtk/CMakeLists.txt new file mode 100644 index 0000000..3076bba --- /dev/null +++ b/konaclient-gtk/CMakeLists.txt @@ -0,0 +1,14 @@ +aux_source_directory(. SRC_LIST) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK3 REQUIRED gtk+-3.0) +pkg_check_modules(PC_LIBSOUP REQUIRED libsoup-2.4) + +include_directories(${GTK3_INCLUDE_DIRS} ${PC_LIBSOUP_INCLUDE_DIRS}) +link_directories(${GTK3_LIBRARY_DIRS} ${PC_LIBSOUP_LIBRARY_DIRS} libkonaclient) +add_definitions(${GTK3_CFLAGS_OTHER}) + +add_executable(${PROJECT_NAME} ${SRC_LIST}) + +# Link the target to the GTK+ libraries +target_link_libraries(${PROJECT_NAME} ${GTK3_LIBRARIES} ${PC_LIBSOUP_LIBRARIES} konaclient) diff --git a/glade/mainWindow.glade b/konaclient-gtk/glade/mainWindow.glade similarity index 100% rename from glade/mainWindow.glade rename to konaclient-gtk/glade/mainWindow.glade diff --git a/glade/previewWidget.glade b/konaclient-gtk/glade/previewWidget.glade similarity index 100% rename from glade/previewWidget.glade rename to konaclient-gtk/glade/previewWidget.glade diff --git a/glade/tagItemViewport.glade b/konaclient-gtk/glade/tagItemViewport.glade similarity index 100% rename from glade/tagItemViewport.glade rename to konaclient-gtk/glade/tagItemViewport.glade diff --git a/kona_search.c b/konaclient-gtk/kona_search.c similarity index 100% rename from kona_search.c rename to konaclient-gtk/kona_search.c diff --git a/kona_search.h b/konaclient-gtk/kona_search.h similarity index 100% rename from kona_search.h rename to konaclient-gtk/kona_search.h diff --git a/konaclient-gtk/konaclient-gtk b/konaclient-gtk/konaclient-gtk new file mode 100755 index 0000000..94699cd Binary files /dev/null and b/konaclient-gtk/konaclient-gtk differ diff --git a/main.c b/konaclient-gtk/main.c similarity index 100% rename from main.c rename to konaclient-gtk/main.c diff --git a/previewwidget.c b/konaclient-gtk/previewwidget.c similarity index 100% rename from previewwidget.c rename to konaclient-gtk/previewwidget.c diff --git a/previewwidget.h b/konaclient-gtk/previewwidget.h similarity index 100% rename from previewwidget.h rename to konaclient-gtk/previewwidget.h diff --git a/libkonaclient/CMakeLists.txt b/libkonaclient/CMakeLists.txt new file mode 100644 index 0000000..4102803 --- /dev/null +++ b/libkonaclient/CMakeLists.txt @@ -0,0 +1,4 @@ +# Build library +aux_source_directory(. LIBSRC_LIST) +add_library(konaclient SHARED ${LIBSRC_LIST}) +target_link_libraries(konaclient ${GLIB2_LIBRARIES} ${GOBJECT2_LIBRARIES}) diff --git a/libkonaclient/konaimage.c b/libkonaclient/konaimage.c new file mode 100644 index 0000000..f982c87 --- /dev/null +++ b/libkonaclient/konaimage.c @@ -0,0 +1,111 @@ +#include "konaimage.h" +#include + +typedef struct { + guint64 test; +} KonaImagePrivate; + +struct _KonaImage { + GObject parent_instance; // struct of parent (inherit) + guint64 id; + GList *tags; + GString *url; +}; + + +G_DEFINE_TYPE_WITH_PRIVATE(KonaImage, kona_image, G_TYPE_OBJECT) + +enum { + PROP_ID = 1, + PROP_TAGS, + PROP_URL, + PROP_COUNT +}; + +static GParamSpec *properties [PROP_COUNT]; + +static void kona_image_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { + KonaImage *self = (KonaImage*)object; + + switch (prop_id) { + case PROP_ID: + g_value_set_uint64(value, *kona_image_get_id(self)); + break; + case PROP_TAGS: + g_value_set_gtype(value, (GType) self->tags); // Returning the pointer itself may be dangerous... Rather copy it to the target value? + break; + case PROP_URL: + g_value_set_string(value, (const gchar*) self->url); + default: + break; + } +} + +static void kona_image_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { + KonaImage *self = (KonaImage*)object; + + switch (prop_id) { + case PROP_ID: + kona_image_set_id(self, g_value_get_uint64(value)); + break; + case PROP_TAGS: + g_list_free(self->tags); + self->tags = g_list_copy((GList*) g_value_get_gtype(value)); + break; + case PROP_URL: + g_free(self->url); + self->url = (GString*) g_strdup(g_value_get_string(value)); + break; + default: + break; + } +} + +static void kona_image_class_init(KonaImageClass *klass) { + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->set_property = kona_image_set_property; + object_class->get_property = kona_image_get_property; + + properties [PROP_ID] = + g_param_spec_uint64("id", "id", "The ID of the image.", 0, G_MAXINT64, 22, G_PARAM_READWRITE); + + properties [PROP_TAGS] = + g_param_spec_gtype("tags", "tags", "A list of tags.", G_TYPE_NONE, G_PARAM_READWRITE); // TODO: G_TYPE_NONE for a GList(GString) a parameter? + + properties [PROP_URL] = + g_param_spec_string("url", "url", "The URL to the full picture.", "", G_PARAM_READWRITE); + + g_object_class_install_properties(object_class, PROP_COUNT, properties); +} + +static void kona_image_init (KonaImage *self) { + +} + +static void kona_image_dispose(KonaImage *self) { + // Clear privates here + G_OBJECT_CLASS (kona_image_parent_class)->dispose((GObject*) self); +} + +static void kona_image_finalize(KonaImage *self) { + // Clear public vars here + g_free(self->tags); + G_OBJECT_CLASS (kona_image_parent_class)->finalize ((GObject*) self); +} + +const guint64 *kona_image_get_id(KonaImage *self) +{ + return &(self->id); +} + +void kona_image_set_id(KonaImage *self, const guint64 id) +{ + self->id = id; +} + + +KonaImage *kona_image_new() +{ + return g_object_new(KONA_TYPE_IMAGE, 0); +} diff --git a/libkonaclient/konaimage.h b/libkonaclient/konaimage.h new file mode 100644 index 0000000..0e9a185 --- /dev/null +++ b/libkonaclient/konaimage.h @@ -0,0 +1,19 @@ +#ifndef KONAIMAGE_H +#define KONAIMAGE_H + +#include + +G_BEGIN_DECLS + +#define KONA_TYPE_IMAGE (kona_image_get_type()) + +G_DECLARE_FINAL_TYPE (KonaImage, kona_image, KONA, IMAGE, GObject) // Struct name, function prefix, Namespace, name, inherits + +KonaImage *kona_image_new (void); + +const guint64 *kona_image_get_id(KonaImage *self); +void kona_image_set_id(KonaImage *self, const guint64 id); + +G_END_DECLS + +#endif // KONAIMAGE_H diff --git a/libkonaclient/libkonalib.so b/libkonaclient/libkonalib.so new file mode 100755 index 0000000..e62e15c Binary files /dev/null and b/libkonaclient/libkonalib.so differ