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

View File

@ -11,7 +11,6 @@
#include "../lib/gui.h"
#include "../lib/random.h"
#include "../lib/kfont.h"
#include "../lib/collection.h"
#include "../lib/obj/libio.h"
#include "../lib/obj/libimg.h"
@ -32,7 +31,7 @@
char default_dir[] = "/rd/1";
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.
Supports MP3, WAV, XM audio file formats.
@ -43,6 +42,7 @@ Play/Stop: Space or P key
Start playing selected file: Enter
Goto next/previous track: Ctrl + Left/Right
Change sound volume: Left/Right key
Remove from the list: Delete
Repeat: R
Shuffle: S
Mute: M
@ -95,8 +95,6 @@ enum {
PLAYBACK_MODE_PLAYING
};
collection music_col;
#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_LEFT) RunProgram("/sys/@VOLUME", "-");
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 (list.ProcessKey(key_scancode)) DrawPlayList();
break;
@ -209,6 +208,7 @@ void DrawPlayList()
{
int i;
int yyy;
int kfont_width;
char temp_filename[4096];
dword text_color, bg_color;
for (i=0; i<list.visible; i++;)
@ -240,8 +240,9 @@ void DrawPlayList()
text_color = theme.color_list_active_text;
}
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);
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,
-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()
{
int kfont_width;
int button_y;
//Mode depended
if (window_mode == WINDOW_MODE_NORMAL)
@ -288,8 +279,9 @@ void DrawTopPanel()
if (!work_folder) DrawPixieTitle("Pixie");
else DrawPixieTitle(#work_folder + strrchr(#work_folder, '/'));
kfont.WriteIntoWindow(8, 24, theme.color_top_panel_bg,
theme.color_top_panel_song_name, list.font_type, GetSongTitle());
kfont_width = kfont.WriteIntoWindow(8, 24, theme.color_top_panel_bg,
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
DefineHiddenButton(7, button_y, 38, 20, BUTTON_PLAYBACK_PREV);
DefineHiddenButton(47, button_y, 38, 20, BUTTON_PLAYBACK_PLAY_PAUSE);
@ -308,6 +300,8 @@ void DrawTopPanel()
{
button_y = 7;
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);
//Playing control buttons
DefineHiddenButton(20, button_y, 24, 16, BUTTON_PLAYBACK_PREV);
@ -369,15 +363,15 @@ void EventOpenFolder(dword _open_path)
{
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();
current_playing_file_n=0;
EventStopPlayingMp3();
if (_open_path) EventStartPlayingMp3();
EventStopPlaying();
if (_open_path) EventStartPlaying();
}
void EventStopPlayingMp3()
void EventStopPlaying()
{
if (player_run_id) player_run_id = KillProcess(player_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;
char item_path[4096];
char notify_message[512];
EventStopPlayingMp3();
EventStopPlaying();
if (current_playing_file_n >= list.count) {
current_playing_file_n = list.count-1;
return;
@ -404,11 +398,12 @@ void EventStartPlayingMp3()
playback_mode = PLAYBACK_MODE_PLAYING;
strlcpy(#current_filename, Getcur_yItemName(), sizeof(current_filename));
sprintf(#item_path,"-h %s/%s",#work_folder,#current_filename);
current_filename[strrchr(#current_filename, '.')-1] = '\0';
DrawPlayList();
DrawTopPanel();
player_run_id = RunProgram("/sys/media/ac97snd", #item_path);
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++)
{
@ -425,12 +420,12 @@ void EventPlayAndPause()
if (playback_mode == PLAYBACK_MODE_PLAYING)
{
playback_mode = PLAYBACK_MODE_STOPED;
EventStopPlayingMp3();
EventStopPlaying();
}
else
{
playback_mode = PLAYBACK_MODE_PLAYING;
EventStartPlayingMp3();
EventStartPlaying();
}
}
@ -457,7 +452,7 @@ void EventChangeWindowMode()
void EventExitApp()
{
EventStopPlayingMp3();
EventStopPlaying();
SaveIniConfig();
ExitProcess();
}
@ -466,20 +461,20 @@ void EventPlaybackPrevious()
{
if (shuffle) current_playing_file_n = random(list.count);
else current_playing_file_n--;
EventStartPlayingMp3();
EventStartPlaying();
}
void EventPlaybackNext()
{
if (shuffle) current_playing_file_n = random(list.count);
else current_playing_file_n++;
EventStartPlayingMp3();
EventStartPlaying();
}
void EventStartPlayingSelectedItem()
{
current_playing_file_n=list.cur_y;
EventStartPlayingMp3();
EventStartPlaying();
}
void EventFileDialogOpen()
@ -492,7 +487,7 @@ void EventCheckSongFinished()
{
if (playback_mode == PLAYBACK_MODE_PLAYING)
&& (!GetProcessSlot(player_run_id)) {
if (repeat) EventStartPlayingMp3();
if (repeat) EventStartPlaying();
else EventPlaybackNext();
}
}
@ -509,6 +504,24 @@ void EventShuffleClick()
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()
{
proc_info pop_up;
@ -522,7 +535,7 @@ void EventShowAbout()
if (key_scancode == SCAN_CODE_ESC) ExitProcess();
break;
case evReDraw:
DefineDragableWindow(150, 200, 400, 327);
DefineDragableWindow(150, 200, 400, 346);
GetProcessInfo(#pop_up, SelfInfo);
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);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB