-
Notifications
You must be signed in to change notification settings - Fork 0
/
signalhandler.h
123 lines (103 loc) · 6.07 KB
/
signalhandler.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#ifndef GTKMM_EXAMPLEWINDOW_H
#define GTKMM_EXAMPLEWINDOW_H
#include <string>
#include <gtk/gtk.h>
#include <list>
#include <string>
#include "song.h"
#ifdef _WIN32
typedef unsigned int uint;
#include <glib-object.h>
#ifndef G_VALUE_INIT
#define G_VALUE_INIT { 0, { { 0 } } } //WHY THIS NOT HERE ON WIN32, BROSKI?
#endif
#endif
#define CH_GET_OBJECT( builder, name, type, data ) \
data->name = type( gtk_builder_get_object( builder, #name ) )
#define CH_GET_WIDGET( builder, name, data ) \
CH_GET_OBJECT( builder, name, GTK_WIDGET, data )
#define REPEAT_NONE 0
#define REPEAT_ALL 1
#define REPEAT_ONE 2
#define NUM_COLUMNS 8
//In Win32, these are totally different, because GPL
#define PLAY_ICON "media-playback-start"
#define PLAY_ERR_ICON "gtk-no"
#define ALBUM_ART_ICON_WIDTH 42
#define ALBUM_ART_ICON_HEIGHT 42
typedef struct _ChData ChData;
struct _ChData
{
// Widgets
GtkWidget *main_window; // Main application window
};
extern "C"
{
//Buttons
G_MODULE_EXPORT void button_addfile_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_addfolder_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_removesongs_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT gboolean key_pressed(GtkWidget *widget, GdkEvent *event, gpointer user_data);
G_MODULE_EXPORT void button_previous_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_next_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_play_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_repeat_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_shuffle_enter(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_shuffle_leave(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_shuffle_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_albumart_clicked(GtkButton *button, ChData *data);
//Menu
G_MODULE_EXPORT void menu_export_M3U(GtkMenuItem *menuitem, gpointer user_data);
//Playlist pane buttons
G_MODULE_EXPORT void button_newplaylist_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_import_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void button_deleteplaylist_clicked(GtkButton *button, ChData *data);
G_MODULE_EXPORT void newplaylist_ok(GtkButton *button, ChData *data);
G_MODULE_EXPORT void newplaylist_cancel(GtkButton *button, ChData *data);
//Volume control
G_MODULE_EXPORT void volume_changed(GtkScaleButton *button, gdouble value, ChData *data);
//Playlist pane control
G_MODULE_EXPORT void song_selected(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, ChData *data);
G_MODULE_EXPORT void playlist_selected(GtkTreeSelection *treeselection, gpointer user_data);
G_MODULE_EXPORT void newplaylist_text_changed(GtkEditable *editable, gpointer user_data);
//Called whenever a data field in the playlist is edited
G_MODULE_EXPORT void title_edited(GtkCellRendererText *renderer, gchar *path, gchar *new_text, ChData *data);
G_MODULE_EXPORT void artist_edited(GtkCellRendererText *renderer, gchar *path, gchar *new_text, ChData *data);
G_MODULE_EXPORT void album_edited(GtkCellRendererText *renderer, gchar *path, gchar *new_text, ChData *data);
G_MODULE_EXPORT void track_edited(GtkCellRendererText *renderer, gchar *path, gchar* new_text, ChData *data);
G_MODULE_EXPORT void playlistname_edited(GtkCellRendererText *renderer, gchar *path, gchar *new_text, ChData *data);
//Sorting function callbacks
G_MODULE_EXPORT void drag_begins(GtkWidget *widget, GdkDragContext *drag_context, gpointer user_data);
G_MODULE_EXPORT void drag_ends(GtkWidget *widget, GdkDragContext *drag_context, gpointer user_data);
//For when the user drags on the slider for the current song
G_MODULE_EXPORT void slider_move(GtkAdjustment *adjustment, gpointer user_data);
//Misc functions for playlist treeview
G_MODULE_EXPORT void columns_changed(GtkTreeView *tree_view, gpointer user_data); //Reorder the playing column to the far left, so it stays there
//Misc handlers
G_MODULE_EXPORT gboolean window_changed(GtkWidget *widget, GdkEvent *event, gpointer user_data);
//G_MODULE_EXPORT gboolean check_window_pos(gpointer data);
G_MODULE_EXPORT void mainwindow_hidden(GtkWidget *widget, gpointer user_data);
}
//Helper functions
void set_table_data(std::string sTreeViewName, std::string sListStoreName, GtkTreePath *path, gchar* new_text, gint column);
void set_table_data(std::string sTreeViewName, std::string sListStoreName, GtkTreePath *path, guint new_text, gint column);
void add_song(std::string sFilename, std::string sTitle, std::string sArtist, std::string sAlbum, uint track, float fLength);
void show_play(); //Show play icon (for when music isn't playing)
void show_pause(); //Show pause icon (for when music is playing)
void init_signal_handler(); //Initialize variables used by the signal handler functions
void update_play_slider(float fPos, float fLen); //Update where our current song is playing
void update_playlist_time(); //Update label that says X songs, X total minutes
std::list<song> get_cur_playlist(); //Get the current playlist displayed in the GUI
void draw_album_art(std::string sFilename); //Draw album art
void play_this_song(GtkTreeModel *model, GtkTreePath *path); //Play this song
void next_song(bool bLoop = false); //Play the next song on the playlist
void clean_gui(); //Clean current-song data from GUI
void clear_now_playing(); //Empties out the right "now playing" pane
bool get_window_maximized(); //If the window is currently maximized
void get_window_position(int* x, int* y);
void get_window_size(int* x, int* y);
std::string playlist_currently_viewing(); //Returns the name of the playlist we're currently looking at
void set_repeat_mode(int iRepeat); //Updates the GUI and sets the repeat mode accordingly
int get_repeat_mode(); //Returns the current repeat mode
void window_moved(GtkWindow *window, GdkEvent *event, gpointer data);
#endif //GTKMM_EXAMPLEWINDOW_H