Pixie 2.8: fix play button while playing, delete from the list, bugfixes

git-svn-id: svn://kolibrios.org@7196 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2018-03-20 08:24:20 +00:00
parent d391816c81
commit d6c5005f96
3 changed files with 49 additions and 35 deletions

View File

@ -15,7 +15,7 @@ void OpenDirectory(dword folder_path)
{ {
notify("'Error opening folder' -E"); notify("'Error opening folder' -E");
} }
debugval("sizeof(files_mas)", sizeof(files_mas));
for (j=0; j<filesnum; j++) for (j=0; j<filesnum; j++)
{ {
strcpy(#temp_filename, j*304 + buf+72); strcpy(#temp_filename, j*304 + buf+72);
@ -26,7 +26,8 @@ void OpenDirectory(dword folder_path)
{ {
cur = list.count; cur = list.count;
files_mas[cur]=j; files_mas[cur]=j;
list.count++; list.count++;
if (list.count>=sizeof(files_mas)*sizeof(int)) break;
} }
} }
SortByName(0, list.count-1); SortByName(0, list.count-1);

View File

@ -11,7 +11,6 @@
#include "../lib/gui.h" #include "../lib/gui.h"
#include "../lib/random.h" #include "../lib/random.h"
#include "../lib/kfont.h" #include "../lib/kfont.h"
#include "../lib/collection.h"
#include "../lib/obj/libio.h" #include "../lib/obj/libio.h"
#include "../lib/obj/libimg.h" #include "../lib/obj/libimg.h"
@ -32,7 +31,7 @@
char default_dir[] = "/rd/1"; char default_dir[] = "/rd/1";
od_filter filter2 = { 15, "MP3\0WAV\0XM\0\0" }; od_filter filter2 = { 15, "MP3\0WAV\0XM\0\0" };
#define ABOUT_MESSAGE "Pixie Player v2.7 #define ABOUT_MESSAGE "Pixie Player v2.8
A tiny music folder player. A tiny music folder player.
Supports MP3, WAV, XM audio file formats. Supports MP3, WAV, XM audio file formats.
@ -43,6 +42,7 @@ Play/Stop: Space or P key
Start playing selected file: Enter Start playing selected file: Enter
Goto next/previous track: Ctrl + Left/Right Goto next/previous track: Ctrl + Left/Right
Change sound volume: Left/Right key Change sound volume: Left/Right key
Remove from the list: Delete
Repeat: R Repeat: R
Shuffle: S Shuffle: S
Mute: M Mute: M
@ -95,8 +95,6 @@ enum {
PLAYBACK_MODE_PLAYING PLAYBACK_MODE_PLAYING
}; };
collection music_col;
#define LAST_FOLDER_EXISTS 1 #define LAST_FOLDER_EXISTS 1
//===================================================// //===================================================//
@ -183,6 +181,7 @@ void main()
if (key_scancode==SCAN_CODE_RIGHT) RunProgram("/sys/@VOLUME", "+"); if (key_scancode==SCAN_CODE_RIGHT) RunProgram("/sys/@VOLUME", "+");
if (key_scancode==SCAN_CODE_LEFT) RunProgram("/sys/@VOLUME", "-"); if (key_scancode==SCAN_CODE_LEFT) RunProgram("/sys/@VOLUME", "-");
if (key_scancode==SCAN_CODE_ENTER) EventStartPlayingSelectedItem(); if (key_scancode==SCAN_CODE_ENTER) EventStartPlayingSelectedItem();
if (key_scancode==SCAN_CODE_DEL) EventDeleteItem();
if (key_scancode==SCAN_CODE_KEY_P)||(key_scancode==SCAN_CODE_SPACE) EventPlayAndPause(); if (key_scancode==SCAN_CODE_KEY_P)||(key_scancode==SCAN_CODE_SPACE) EventPlayAndPause();
if (list.ProcessKey(key_scancode)) DrawPlayList(); if (list.ProcessKey(key_scancode)) DrawPlayList();
break; break;
@ -209,6 +208,7 @@ void DrawPlayList()
{ {
int i; int i;
int yyy; int yyy;
int kfont_width;
char temp_filename[4096]; char temp_filename[4096];
dword text_color, bg_color; dword text_color, bg_color;
for (i=0; i<list.visible; i++;) for (i=0; i<list.visible; i++;)
@ -240,8 +240,9 @@ void DrawPlayList()
text_color = theme.color_list_active_text; text_color = theme.color_list_active_text;
} }
DrawBar(list.x, yyy, list.w, list.item_h, bg_color); DrawBar(list.x, yyy, list.w, list.item_h, bg_color);
kfont.WriteIntoWindow(6, yyy+list.text_y, bg_color, kfont_width = kfont.WriteIntoWindow(6, yyy+list.text_y, bg_color,
text_color, list.font_type, #temp_filename); text_color, list.font_type, #temp_filename);
if (kfont_width>skin.w-15) DrawBar(skin.w-1, yyy, 1, list.item_h, theme.color_list_border);
} }
DrawBar(list.x,list.visible * list.item_h + list.y, list.w, DrawBar(list.x,list.visible * list.item_h + list.y, list.w,
-list.visible * list.item_h + list.h, theme.color_list_bg); -list.visible * list.item_h + list.h, theme.color_list_bg);
@ -260,19 +261,9 @@ void draw_window() {
} }
} }
dword GetSongTitle()
{
char cur_y_playing_title[245];
strcpy(#cur_y_playing_title, #current_filename);
cur_y_playing_title[strrchr(#cur_y_playing_title, '.')-1] = '\0';
//if (strlen(#cur_y_playing_title) > 36) strcpy(#cur_y_playing_title + 34, "...");
return #cur_y_playing_title;
}
void DrawTopPanel() void DrawTopPanel()
{ {
int kfont_width;
int button_y; int button_y;
//Mode depended //Mode depended
if (window_mode == WINDOW_MODE_NORMAL) if (window_mode == WINDOW_MODE_NORMAL)
@ -288,8 +279,9 @@ void DrawTopPanel()
if (!work_folder) DrawPixieTitle("Pixie"); if (!work_folder) DrawPixieTitle("Pixie");
else DrawPixieTitle(#work_folder + strrchr(#work_folder, '/')); else DrawPixieTitle(#work_folder + strrchr(#work_folder, '/'));
kfont.WriteIntoWindow(8, 24, theme.color_top_panel_bg, kfont_width = kfont.WriteIntoWindow(8, 24, theme.color_top_panel_bg,
theme.color_top_panel_song_name, list.font_type, GetSongTitle()); theme.color_top_panel_song_name, list.font_type, #current_filename);
if (kfont_width>skin.w-15) DrawBar(skin.w-1, 24, 1, list.item_h, theme.color_list_border);
//Playing control buttons //Playing control buttons
DefineHiddenButton(7, button_y, 38, 20, BUTTON_PLAYBACK_PREV); DefineHiddenButton(7, button_y, 38, 20, BUTTON_PLAYBACK_PREV);
DefineHiddenButton(47, button_y, 38, 20, BUTTON_PLAYBACK_PLAY_PAUSE); DefineHiddenButton(47, button_y, 38, 20, BUTTON_PLAYBACK_PLAY_PAUSE);
@ -308,6 +300,8 @@ void DrawTopPanel()
{ {
button_y = 7; button_y = 7;
img_draw stdcall(skin.image, 0, 0, WIN_W_SMALL, WIN_H_SMALL, skin.w-1, 0); img_draw stdcall(skin.image, 0, 0, WIN_W_SMALL, WIN_H_SMALL, skin.w-1, 0);
if (playback_mode != PLAYBACK_MODE_STOPED)
img_draw stdcall(skin.image, 46, button_y-1, 27, 19, skin.w+83, WIN_H_SMALL+1);
DefineHiddenButton(0, 0, WIN_W_SMALL, WIN_H_SMALL, 99 + BT_NOFRAME); DefineHiddenButton(0, 0, WIN_W_SMALL, WIN_H_SMALL, 99 + BT_NOFRAME);
//Playing control buttons //Playing control buttons
DefineHiddenButton(20, button_y, 24, 16, BUTTON_PLAYBACK_PREV); DefineHiddenButton(20, button_y, 24, 16, BUTTON_PLAYBACK_PREV);
@ -369,15 +363,15 @@ void EventOpenFolder(dword _open_path)
{ {
list.w -= scroll1.size_x; list.w -= scroll1.size_x;
} }
MoveSize(OLD, OLD, OLD, skin.h + list.h); if (window_mode==WINDOW_MODE_NORMAL) MoveSize(OLD, OLD, OLD, skin.h + list.h);
list.KeyHome(); list.KeyHome();
current_playing_file_n=0; current_playing_file_n=0;
EventStopPlayingMp3(); EventStopPlaying();
if (_open_path) EventStartPlayingMp3(); if (_open_path) EventStartPlaying();
} }
void EventStopPlayingMp3() void EventStopPlaying()
{ {
if (player_run_id) player_run_id = KillProcess(player_run_id); if (player_run_id) player_run_id = KillProcess(player_run_id);
if (notify_run_id) notify_run_id = KillProcess(notify_run_id); if (notify_run_id) notify_run_id = KillProcess(notify_run_id);
@ -387,12 +381,12 @@ void EventStopPlayingMp3()
} }
void EventStartPlayingMp3() void EventStartPlaying()
{ {
word i; word i;
char item_path[4096]; char item_path[4096];
char notify_message[512]; char notify_message[512];
EventStopPlayingMp3(); EventStopPlaying();
if (current_playing_file_n >= list.count) { if (current_playing_file_n >= list.count) {
current_playing_file_n = list.count-1; current_playing_file_n = list.count-1;
return; return;
@ -404,11 +398,12 @@ void EventStartPlayingMp3()
playback_mode = PLAYBACK_MODE_PLAYING; playback_mode = PLAYBACK_MODE_PLAYING;
strlcpy(#current_filename, Getcur_yItemName(), sizeof(current_filename)); strlcpy(#current_filename, Getcur_yItemName(), sizeof(current_filename));
sprintf(#item_path,"-h %s/%s",#work_folder,#current_filename); sprintf(#item_path,"-h %s/%s",#work_folder,#current_filename);
current_filename[strrchr(#current_filename, '.')-1] = '\0';
DrawPlayList(); DrawPlayList();
DrawTopPanel(); DrawTopPanel();
player_run_id = RunProgram("/sys/media/ac97snd", #item_path); player_run_id = RunProgram("/sys/media/ac97snd", #item_path);
sprintf(#notify_message,"'Now playing:\n%s' -St",#current_filename); sprintf(#notify_message,"'Now playing:\n%s' -St",#current_filename);
if (!repeat) if (!repeat) && (window_mode==WINDOW_MODE_SMALL)
{ {
for (i=2; i<strlen(#notify_message)-6; i++) for (i=2; i<strlen(#notify_message)-6; i++)
{ {
@ -425,12 +420,12 @@ void EventPlayAndPause()
if (playback_mode == PLAYBACK_MODE_PLAYING) if (playback_mode == PLAYBACK_MODE_PLAYING)
{ {
playback_mode = PLAYBACK_MODE_STOPED; playback_mode = PLAYBACK_MODE_STOPED;
EventStopPlayingMp3(); EventStopPlaying();
} }
else else
{ {
playback_mode = PLAYBACK_MODE_PLAYING; playback_mode = PLAYBACK_MODE_PLAYING;
EventStartPlayingMp3(); EventStartPlaying();
} }
} }
@ -457,7 +452,7 @@ void EventChangeWindowMode()
void EventExitApp() void EventExitApp()
{ {
EventStopPlayingMp3(); EventStopPlaying();
SaveIniConfig(); SaveIniConfig();
ExitProcess(); ExitProcess();
} }
@ -466,20 +461,20 @@ void EventPlaybackPrevious()
{ {
if (shuffle) current_playing_file_n = random(list.count); if (shuffle) current_playing_file_n = random(list.count);
else current_playing_file_n--; else current_playing_file_n--;
EventStartPlayingMp3(); EventStartPlaying();
} }
void EventPlaybackNext() void EventPlaybackNext()
{ {
if (shuffle) current_playing_file_n = random(list.count); if (shuffle) current_playing_file_n = random(list.count);
else current_playing_file_n++; else current_playing_file_n++;
EventStartPlayingMp3(); EventStartPlaying();
} }
void EventStartPlayingSelectedItem() void EventStartPlayingSelectedItem()
{ {
current_playing_file_n=list.cur_y; current_playing_file_n=list.cur_y;
EventStartPlayingMp3(); EventStartPlaying();
} }
void EventFileDialogOpen() void EventFileDialogOpen()
@ -492,7 +487,7 @@ void EventCheckSongFinished()
{ {
if (playback_mode == PLAYBACK_MODE_PLAYING) if (playback_mode == PLAYBACK_MODE_PLAYING)
&& (!GetProcessSlot(player_run_id)) { && (!GetProcessSlot(player_run_id)) {
if (repeat) EventStartPlayingMp3(); if (repeat) EventStartPlaying();
else EventPlaybackNext(); else EventPlaybackNext();
} }
} }
@ -509,6 +504,24 @@ void EventShuffleClick()
DrawTopPanel(); DrawTopPanel();
} }
void EventDeleteItem()
{
int i;
if (list.cur_y == current_playing_file_n) EventStopPlaying();
for (i=list.cur_y; i<list.count; i++) files_mas[i] = files_mas[i+1];
list.count--;
if (i + list.first <= current_playing_file_n) current_playing_file_n--;
list.CheckDoesValuesOkey();
if (list.count <= list.visible)
{
list.h = list.count * list.item_h;
list.visible = list.count;
list.w -= 1;
if (window_mode==WINDOW_MODE_NORMAL) MoveSize(OLD, OLD, OLD, skin.h + list.h);
}
else DrawPlayList();
}
void EventShowAbout() void EventShowAbout()
{ {
proc_info pop_up; proc_info pop_up;
@ -522,7 +535,7 @@ void EventShowAbout()
if (key_scancode == SCAN_CODE_ESC) ExitProcess(); if (key_scancode == SCAN_CODE_ESC) ExitProcess();
break; break;
case evReDraw: case evReDraw:
DefineDragableWindow(150, 200, 400, 327); DefineDragableWindow(150, 200, 400, 346);
GetProcessInfo(#pop_up, SelfInfo); GetProcessInfo(#pop_up, SelfInfo);
DrawBar(0, 0, pop_up.width, pop_up.height, theme.color_top_panel_bg); DrawBar(0, 0, pop_up.width, pop_up.height, theme.color_top_panel_bg);
DrawRectangle(0, 0, pop_up.width, pop_up.height, theme.color_list_border); DrawRectangle(0, 0, pop_up.width, pop_up.height, theme.color_list_border);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB