From d9387a581ab513a84a69b9d85979e1ea6e439863 Mon Sep 17 00:00:00 2001 From: Maksym Veremeyenko Date: Fri, 17 Jun 2011 13:37:20 +0300 Subject: [PATCH] basic UI added --- pixmaps/Axialis_Team_item_add_16x116.png | Bin 0 -> 542 bytes .../Axialis_Team_item_add_from_library_16x16.png | Bin 0 -> 508 bytes pixmaps/Axialis_Team_item_block_16x116.png | Bin 0 -> 1142 bytes pixmaps/Axialis_Team_item_delete_16x116.png | Bin 0 -> 575 bytes pixmaps/Axialis_Team_item_edit_16x116.png | Bin 0 -> 608 bytes pixmaps/Axialis_Team_item_loop_16x116.png | Bin 0 -> 1142 bytes pixmaps/Axialis_Team_item_move_down_16x116.png | Bin 0 -> 596 bytes pixmaps/Axialis_Team_item_move_up_16x116.png | Bin 0 -> 576 bytes pixmaps/Axialis_Team_library_refresh_16x16.png | Bin 0 -> 757 bytes pixmaps/Axialis_Team_player_cue_32x32.png | Bin 0 -> 896 bytes pixmaps/Axialis_Team_player_pause_32x32.png | Bin 0 -> 901 bytes pixmaps/Axialis_Team_player_play_64x32.png | Bin 0 -> 8317 bytes pixmaps/Axialis_Team_player_stop_32x32.png | Bin 0 -> 725 bytes pixmaps/Axialis_Team_playlist_open_16x16.png | Bin 0 -> 486 bytes pixmaps/Axialis_Team_playlist_save_16x16.png | Bin 0 -> 556 bytes src/Makefile.am | 3 +- src/omnplay.h | 26 +++ src/ui.c | 162 ++++++++++++-- src/ui_buttons.c | 235 ++++++++++++++++++++ src/ui_buttons.h | 37 +++ src/ui_utils.h | 30 +++ 21 files changed, 478 insertions(+), 15 deletions(-) create mode 100644 pixmaps/Axialis_Team_item_add_16x116.png create mode 100644 pixmaps/Axialis_Team_item_add_from_library_16x16.png create mode 100644 pixmaps/Axialis_Team_item_block_16x116.png create mode 100644 pixmaps/Axialis_Team_item_delete_16x116.png create mode 100644 pixmaps/Axialis_Team_item_edit_16x116.png create mode 100644 pixmaps/Axialis_Team_item_loop_16x116.png create mode 100644 pixmaps/Axialis_Team_item_move_down_16x116.png create mode 100644 pixmaps/Axialis_Team_item_move_up_16x116.png create mode 100644 pixmaps/Axialis_Team_library_refresh_16x16.png create mode 100644 pixmaps/Axialis_Team_player_cue_32x32.png create mode 100644 pixmaps/Axialis_Team_player_pause_32x32.png create mode 100644 pixmaps/Axialis_Team_player_play_64x32.png create mode 100644 pixmaps/Axialis_Team_player_stop_32x32.png create mode 100644 pixmaps/Axialis_Team_playlist_open_16x16.png create mode 100644 pixmaps/Axialis_Team_playlist_save_16x16.png create mode 100644 src/ui_buttons.c create mode 100644 src/ui_buttons.h create mode 100644 src/ui_utils.h diff --git a/pixmaps/Axialis_Team_item_add_16x116.png b/pixmaps/Axialis_Team_item_add_16x116.png new file mode 100644 index 0000000000000000000000000000000000000000..e936278ee9c6b69fc245a7b10c8d394dc0929669 GIT binary patch literal 542 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 O000072F0{ss|#0dy6dh4y3oDi zs*48H*g%R)QArvI_%TgLG7~dN%najnKHm4I2TBg znA^AKh>Ycx*Di4C#3{UbHrF@U*jUF{i*t@<Iznb^XD%xHT5RXPoAaU@8P{7wOU=HD5lkFP%e+-T=tlUB}qp4 z@{2jnoOyw%H{K$SM@Z9@5CW=@WgTR5v#QPw{%WnoT1%Q{tgWrGy!;C@GqZT_aL%Es z#Bt1CeV5~7WgsIGVF+z~;~~HP{1d85NxCBbCZSUnmsJlg&y# nU!>RT0eZwRhzO4!{S*ELXC#t&XZl!F00000NkvXXu0mjf02FHy literal 0 Hc-jL100001 diff --git a/pixmaps/Axialis_Team_player_cue_32x32.png b/pixmaps/Axialis_Team_player_cue_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..8bafe99f078e2233a4dbb7aa0412001cc3e529d3 GIT binary patch literal 896 zc-jGg1AqL9P)ud3RzySuBsUXK_ft2AQ_ zhlhv3^?E(l*Vk7Xyt2t;VqLZK7{pT`d3*fC_*T!m1enkrF@%5m+4n zRYlbTH3NcbprU035XzLx`4mX2_=>8*T0@MXU3gVQ3dWrX#28yvf#O`kX!L}=y*+N< zeht;g@;X*ji|VTxSY88)h(p!$^;cgq8jna_!ppZ_Ez`J!2US!XRS@H{RiIdFvDWa# z=R0_xlO`#@{Q5I0!q(O;Vhl?#p{4L=7`XgR5lfOdc6L5yl1*^d5n{x-goh7*!Whfu z=8Gl0i+wfwjsqzfxLkoELbsdp>1Q7@8vcWG4j;1mzB7ggKmLHo8*FTB62etX6gN%9 zz4+OQUbxUD1!FFa4?vdXn1v5E`oI*~`A3W~oSy#4 zyYIYBx7)osV#B=mytMTS+uLu>?UKe6@#^!yJfOx1A$Y7yur6r@KoN+s?)gmyi#||X zyJ?`}wHZfI@!sRTZw0`6Ptc+&RKtvBiZZP=03v2)8X6mDzFxg zj~|yxZa4Fb_nR7T`ktOWT=7Nbrl4?QTL)gos?E9zok(nXBKi*jEK0$%v#A~$op62% zo|VmEpzWdbX#o_UPIcAvR~s$?SZhg=wDr;YX)Q?-j4`-_gM--X_00eA_x$MS$o~u1 W+2kvr(A#VP0000G6*BM~Tx_h+UHUS3HS>2}eo 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 Hu0mjfU<*`? literal 0 Hc-jL100001 diff --git a/pixmaps/Axialis_Team_playlist_open_16x16.png b/pixmaps/Axialis_Team_playlist_open_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..80008a72f59a5d8d132665029e9a4f45b0e1680a GIT binary patch literal 486 zc-jHx0U7>@P)qB%(M5|-klkW z=MV&rL^9>-?wLDxXJtB_`egC|cjGn{Lg4c9ho!ci(6%k^ek*{8P-_XPRzub91W+}S zJJhNGq?9P7A|hMSAl?NR5!@lUJF3QL)Np?Oh1s_$Ax7Mtw3j$NeNWSjad#XDBB+)v zz)5CKtwxOS_2PmU6J81ctG?&#>;oxA0L+X>hliY;yrxzi0N|Jz<}jbn`S|HG!enxf zoHIEuQPrKntycH9nvAL;Qb;00q9Q`y_k=J6_&2~EVvO{Ck4Qko5Rm~8f)iq3(f!0- zX_~#A4r(nd7YjnX&L$1rBb)V_Cr_X8^2KvviaVD_tMd5hh!hj11_&~neRq+FnX|v& z(liY>?W6!XXO_!60CjUUf)Ikxbsb&T-EjRH6M}4CMo1xq-v>jF|E&R(a$eeaJPvpH cOgS&?7l*C=MHpakhX4Qo07*qoM6N<$g0s2Y%K!iX literal 0 Hc-jL100001 diff --git a/pixmaps/Axialis_Team_playlist_save_16x16.png b/pixmaps/Axialis_Team_playlist_save_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..a7420306301f7327cda9f00f07e6a25d153fa354 GIT binary patch literal 556 zc-jFh0@MA8P)^?CPtsY=z;_ugT%eM(YRveQxI493!0c<(5ILXVq|0x zW_r51tLnPwHh|&+Z&I78oKyFld#(%y1Iw~2m_;sAs>*0|7}Gq@$nzXCyA*+l;C-#B z_mL1HW`>Bij~9c?KqL}^p{j%sNzK6fK({-?lgEz`O^|;vV0a%`TYHFE#0*k1BZNl3 zt7>Lv73bWA@J^?L_nsIHFwBfJM#KAtpqv(5zj2cX_wNzHd2o`z=H@H5x8AjqX$ZiG zvAOUe@O5{Gj~}*xKTQ?pyIq1c9yB;34Z(1(CPo;KCoC=9Vs&)|SDkO6(@A)_vBB#% zo2`t-_|*HFx~|Exc|r($+1=su&Zi4KP*q}#OeO^}Mnq~-k!GeMLRFT`&de~Gj9a75 zSDt0K(xEEtNTnfAHB^PEb5!25zW#z #include "ui.h" +#include "ui_utils.h" +#include "ui_buttons.h" #include "support.h" -#define GLADE_HOOKUP_OBJECT(component,widget,name) \ - g_object_set_data_full (G_OBJECT (component), name, \ - gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) - -#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ - g_object_set_data (G_OBJECT (component), name, widget) - static GtkWidget* create_label(GtkWidget* top, char* text, char* reg, GtkJustification jtype) { GtkWidget* label; @@ -95,7 +90,6 @@ static GtkWidget* create_treeview(GtkWidget* top, char* name, const char* column static GtkWidget* pane_library_grid(GtkWidget* top, omnplay_instance_t* app) { -// static const char* columns[] = {"REM", "B", "CH", "ID", "IN", "DUR", "TITLE", NULL}; static const char* columns[] = {"ID", "DUR", "TITLE", NULL}; GtkWidget *scrolledwindow; @@ -114,13 +108,21 @@ static GtkWidget* pane_library_buttons(GtkWidget* top, omnplay_instance_t* app) { GtkWidget* hbox; - hbox = gtk_vbox_new (FALSE, 0); + hbox = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox); - /* add buttons here: */ + /* playlist modify buttons */ + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_LIBRARY_ADD), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_LIBRARY_REFRESH), + FALSE, FALSE, 0); + + /* spacer */ gtk_box_pack_start (GTK_BOX (hbox), - create_label(top, "BUTTONS HERE", NULL, GTK_JUSTIFY_LEFT), - FALSE, TRUE, 0); + create_label(top, NULL, NULL, GTK_JUSTIFY_CENTER), + TRUE, TRUE, 0); return hbox; } @@ -131,6 +133,7 @@ static GtkWidget* pane_library(GtkWidget* top, omnplay_instance_t* app) vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); + gtk_widget_set_size_request(vbox, 300, -1); /* add buttons box */ gtk_box_pack_start (GTK_BOX (vbox), @@ -159,9 +162,140 @@ static GtkWidget* pane_operate_status(GtkWidget* top, omnplay_instance_t* app) return frame; } +static GtkWidget* pane_operate_buttons_playlist(GtkWidget* top, omnplay_instance_t* app) +{ + GtkWidget* hbox; + + hbox = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox); + + /* playlist load/save buttons */ + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYLIST_LOAD), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYLIST_SAVE), + FALSE, FALSE, 0); + + /* spacer */ + gtk_box_pack_start (GTK_BOX (hbox), + create_label(top, " ", NULL, GTK_JUSTIFY_CENTER), + FALSE, FALSE, 0); + + /* playlist modify buttons */ + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYLIST_ITEM_ADD), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYLIST_ITEM_EDIT), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYLIST_ITEM_DEL), + FALSE, FALSE, 0); + + /* spacer */ + gtk_box_pack_start (GTK_BOX (hbox), + create_label(top, " ", NULL, GTK_JUSTIFY_CENTER), + FALSE, FALSE, 0); + + /* playlist block buttons */ + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYLIST_BLOCK_SINGLE), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYLIST_BLOCK_LOOP), + FALSE, FALSE, 0); + + /* spacer */ + gtk_box_pack_start (GTK_BOX (hbox), + create_label(top, " ", NULL, GTK_JUSTIFY_CENTER), + FALSE, FALSE, 0); + + /* playlist move items buttons */ + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYLIST_ITEM_UP), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYLIST_ITEM_DOWN), + FALSE, FALSE, 0); + + return hbox; +} + +static GtkWidget* pane_operate_grid(GtkWidget* top, omnplay_instance_t* app) +{ + static const char* columns[] = {"REM", "B", "CH", "ID", "IN", "DUR", "TITLE", NULL}; + GtkWidget *scrolledwindow; + + scrolledwindow = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + + gtk_container_add (GTK_CONTAINER (scrolledwindow), + create_treeview(top, "treeview_playlist", columns)); + + return scrolledwindow; +} + +static GtkWidget* pane_operate_buttons_operate(GtkWidget* top, omnplay_instance_t* app) +{ + GtkWidget* hbox; + + hbox = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox); + + /* spacer */ + gtk_box_pack_start (GTK_BOX (hbox), + create_label(top, NULL, NULL, GTK_JUSTIFY_CENTER), + TRUE, TRUE, 0); + + /* playlist modify buttons */ + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYER_CUE), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYER_PLAY), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYER_PAUSE), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), + ui_create_button(top, app, BUTTON_PLAYER_STOP), + FALSE, FALSE, 0); + + /* spacer */ + gtk_box_pack_start (GTK_BOX (hbox), + create_label(top, NULL, NULL, GTK_JUSTIFY_CENTER), + TRUE, TRUE, 0); + + return hbox; +} + static GtkWidget* pane_operate_operate(GtkWidget* top, omnplay_instance_t* app) { - return create_label(top, "pane_operate", NULL, GTK_JUSTIFY_CENTER); + GtkWidget* vbox; + + vbox = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox); + + /* add buttons box #1 */ + gtk_box_pack_start (GTK_BOX (vbox), + pane_operate_buttons_playlist(top, app), + FALSE, FALSE, 0); + + /* add buttons box */ + gtk_box_pack_start (GTK_BOX (vbox), + pane_operate_grid(top, app), + TRUE, TRUE, 0); + + /* add buttons box #1 */ + gtk_box_pack_start (GTK_BOX (vbox), + pane_operate_buttons_operate(top, app), + FALSE, FALSE, 0); + + return vbox; + } static GtkWidget* pane_operate(GtkWidget* top, omnplay_instance_t* app) @@ -192,7 +326,7 @@ static GtkWidget* pane_top(GtkWidget* top, omnplay_instance_t* app) pane = gtk_hpaned_new (); gtk_widget_show (pane); - gtk_paned_set_position (GTK_PANED (pane), 300); + gtk_paned_set_position (GTK_PANED (pane), 800); gtk_paned_pack1 (GTK_PANED (pane), pane_operate(top, app), diff --git a/src/ui_buttons.c b/src/ui_buttons.c new file mode 100644 index 0000000..8af9ea6 --- /dev/null +++ b/src/ui_buttons.c @@ -0,0 +1,235 @@ +/* + * ui_buttons.h -- GTK+ 2 omnplay + * Copyright (C) 2011 Maksym Veremeyenko + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef UI_BUTTONS_H +#define UI_BUTTONS_H + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include + +#include +#include + +#include "ui.h" +#include "ui_utils.h" +#include "ui_buttons.h" +#include "support.h" + +typedef struct button_desc +{ + control_buttons_t id; + char* tooltip; + char* stock; + char* label; + char* hookup; + char* filename; +} button_desc_t; + +static const button_desc_t buttons[] = +{ + { + BUTTON_PLAYLIST_ITEM_ADD, + "Add item to playlist", + NULL, + NULL, + "button_playlist_add", + "Axialis_Team_item_add_16x116.png" + }, + { + BUTTON_PLAYLIST_ITEM_EDIT, + "Edit item in playlist", + NULL, + NULL, + "button_playlist_edit", + "Axialis_Team_item_edit_16x116.png" + }, + { + BUTTON_PLAYLIST_ITEM_DEL, + "Delete item from playlist", + NULL, + NULL, + "button_playlist_del", + "Axialis_Team_item_delete_16x116.png" + }, + { + BUTTON_PLAYLIST_ITEM_UP, + "Move item ebove", + NULL, + NULL, + "button_playlist_up", + "Axialis_Team_item_move_up_16x116.png" + }, + { + BUTTON_PLAYLIST_ITEM_DOWN, + "Move item below", + NULL, + NULL, + "button_playlist_down", + "Axialis_Team_item_move_down_16x116.png" + }, + { + BUTTON_PLAYLIST_LOAD, + "Load playlist", + NULL, + NULL, + "button_playlist_load", + "Axialis_Team_playlist_open_16x16.png" + }, + { + BUTTON_PLAYLIST_SAVE, + "Save playlist", + NULL, + NULL, + "button_playlist_load", + "Axialis_Team_playlist_save_16x16.png" + }, + { + BUTTON_PLAYLIST_BLOCK_LOOP, + "Make a loop block", + NULL, + NULL, + "button_playlist_block_loop", + "Axialis_Team_item_loop_16x116.png" + }, + { + BUTTON_PLAYLIST_BLOCK_SINGLE, + "Make a single block", + NULL, + NULL, + "button_playlist_block_single", + "Axialis_Team_item_block_16x116.png" + }, + { + BUTTON_PLAYER_CUE, + "Cue block", + NULL, + NULL, + "button_playlist_cue", + "Axialis_Team_player_cue_32x32.png" + }, + { + BUTTON_PLAYER_PLAY, + "Play", + NULL, + NULL, + "button_playlist_play", + "Axialis_Team_player_play_64x32.png" + }, + { + BUTTON_PLAYER_PAUSE, + "Pause", + NULL, + NULL, + "button_playlist_pause", + "Axialis_Team_player_pause_32x32.png" + }, + { + BUTTON_PLAYER_STOP, + "STOP", + NULL, + NULL, + "button_playlist_stop", + "Axialis_Team_player_stop_32x32.png" + }, + { + BUTTON_LIBRARY_ADD, + "Add to playlist", + NULL, + NULL, + "button_library_add", + "Axialis_Team_item_add_from_library_16x16.png" + }, + { + BUTTON_LIBRARY_REFRESH, + "Refresh library", + NULL, + NULL, + "button_library_refresh", + "Axialis_Team_library_refresh_16x16.png" + }, + + + { + BUTTON_LAST, + } +}; + +GtkWidget* ui_create_button(GtkWidget* top, omnplay_instance_t* app, control_buttons_t id) +{ + int idx; + GtkWidget *button, *alignment, *hbox, *image = NULL, *label; + const button_desc_t* info = NULL; + + for(idx = 0; !info && buttons[idx].id != BUTTON_LAST; idx++) + if(buttons[idx].id == id) + info = &buttons[idx]; + + if(!info) + return NULL; + + button = gtk_button_new(); + gtk_widget_show(button); + GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_button_set_relief(GTK_BUTTON (button), GTK_RELIEF_NONE); + if(info->tooltip) + gtk_widget_set_tooltip_text(button, info->tooltip); + + alignment = gtk_alignment_new(0, 0.5, 0, 0); + gtk_widget_show(alignment); + gtk_container_add(GTK_CONTAINER (button), alignment); + + hbox = gtk_hbox_new(FALSE, 2); + gtk_widget_show(hbox); + gtk_container_add(GTK_CONTAINER(alignment), hbox); + + if(info->stock) + image = gtk_image_new_from_stock(info->stock, GTK_ICON_SIZE_MENU); + else if(info->filename) + image = gtk_image_new_from_pixbuf(create_pixbuf(info->filename)); + if(image) + { + gtk_widget_show(image); + gtk_box_pack_start(GTK_BOX (hbox), image, FALSE, FALSE, 0); + } + + label = gtk_label_new_with_mnemonic(""); + if(info->label) + gtk_label_set_text(GTK_LABEL (label), info->label); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_label_set_justify(GTK_LABEL (label), GTK_JUSTIFY_LEFT); + + if(info->hookup) + GLADE_HOOKUP_OBJECT (top, button, info->hookup); + + app->buttons[id] = button; + + return button; +} + + +#endif /* UI_BUTTONS_H */ diff --git a/src/ui_buttons.h b/src/ui_buttons.h new file mode 100644 index 0000000..c1123c2 --- /dev/null +++ b/src/ui_buttons.h @@ -0,0 +1,37 @@ +/* + * ui_buttons.h -- GTK+ 2 omnplay + * Copyright (C) 2011 Maksym Veremeyenko + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef UI_BUTTONS_H +#define UI_BUTTONS_H + +#include "omnplay.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +GtkWidget* ui_create_button(GtkWidget* top, omnplay_instance_t* app, control_buttons_t id); + +#ifdef __cplusplus +}; +#endif /* __cplusplus */ + + +#endif /* UI_BUTTONS_H */ diff --git a/src/ui_utils.h b/src/ui_utils.h new file mode 100644 index 0000000..9ebfce7 --- /dev/null +++ b/src/ui_utils.h @@ -0,0 +1,30 @@ +/* + * ui_utils.h -- GTK+ 2 omnplay + * Copyright (C) 2011 Maksym Veremeyenko + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef UI_UTILS_H +#define UI_UTILS_H + +#define GLADE_HOOKUP_OBJECT(component,widget,name) \ + g_object_set_data_full (G_OBJECT (component), name, \ + gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) + +#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ + g_object_set_data (G_OBJECT (component), name, widget) + +#endif /* UI_UTILS_H */ -- 1.7.4.4