App-DrivePlayer
view release on metacpan or search on metacpan
lib/App/DrivePlayer/GUI.pm view on Meta::CPAN
Gtk3::Window::set_default_icon_name('multimedia-player');
$self->win(Gtk3::Window->new('toplevel'));
$self->win->set_title('Drive Player');
$self->win->set_default_size(900, 600);
$self->win->signal_connect(destroy => sub { $self->_quit() });
my $vbox = Gtk3::Box->new('vertical', 0);
$self->win->add($vbox);
# Menu bar
$vbox->pack_start($self->_build_menubar(), FALSE, FALSE, 0);
# Toolbar
$vbox->pack_start($self->_build_toolbar(), FALSE, FALSE, 0);
# Main paned: sidebar | tracklist
my $paned = Gtk3::Paned->new('horizontal');
$paned->set_position(220);
$vbox->pack_start($paned, TRUE, TRUE, 0);
lib/App/DrivePlayer/GUI.pm view on Meta::CPAN
$self->statusbar(Gtk3::Statusbar->new());
$self->_status_ctx($self->statusbar->get_context_id('main'));
$vbox->pack_start($self->statusbar, FALSE, FALSE, 0);
$self->win->show_all();
$self->stop_btn->hide(); # hidden until playback starts
}
sub _build_menubar {
my ($self) = @_;
my $mb = Gtk3::MenuBar->new();
# File menu
my $file_menu = Gtk3::Menu->new();
$self->_add_menu_item($file_menu, 'Add Music Folderâ¦', sub { $self->_add_folder_dialog() });
$self->_add_menu_item($file_menu, 'Manage Foldersâ¦', sub { $self->_manage_folders_dialog() });
$file_menu->append(Gtk3::SeparatorMenuItem->new());
$self->_add_menu_item($file_menu, 'Settingsâ¦', sub { $self->_settings_dialog() });
$file_menu->append(Gtk3::SeparatorMenuItem->new());
$self->_add_menu_item($file_menu, 'Quit', sub { $self->_quit() });
my $file_item = Gtk3::MenuItem->new_with_label('File');
$file_item->set_submenu($file_menu);
$mb->append($file_item);
# Library menu
my $lib_menu = Gtk3::Menu->new();
$self->_add_menu_item($lib_menu, 'Sync', sub { $self->_sync_all() });
$self->_add_menu_item($lib_menu, 'Refresh', sub { $self->_load_library() });
$lib_menu->append(Gtk3::SeparatorMenuItem->new());
my $fetch_item = $self->_add_menu_item($lib_menu, 'Fetch All Metadata', sub { $self->_toggle_metadata_fetch() });
$self->_meta_fetch_item($fetch_item);
$self->_add_menu_item($lib_menu, 'Retry Incomplete Metadata', sub { $self->_retry_incomplete_metadata() });
$self->_add_menu_item($lib_menu, 'Reset Metadata Fetch', sub { $self->_reset_metadata_fetch() });
$lib_menu->append(Gtk3::SeparatorMenuItem->new());
$self->_add_menu_item($lib_menu, 'Clear Library', sub { $self->_clear_library() });
my $lib_item = Gtk3::MenuItem->new_with_label('Library');
$lib_item->set_submenu($lib_menu);
$mb->append($lib_item);
# Playback menu
my $pb_menu = Gtk3::Menu->new();
$self->_add_menu_item($pb_menu, 'Play / Pause', sub { $self->_toggle_play() });
$self->_add_menu_item($pb_menu, 'Stop', sub { $self->_stop() });
$self->_add_menu_item($pb_menu, 'Next Track', sub { $self->_next_track() });
$self->_add_menu_item($pb_menu, 'Previous Track',sub { $self->_prev_track() });
my $pb_item = Gtk3::MenuItem->new_with_label('Playback');
$pb_item->set_submenu($pb_menu);
$mb->append($pb_item);
return $mb;
}
sub _add_menu_item {
my ($self, $menu, $label, $cb) = @_;
my $item = Gtk3::MenuItem->new_with_label($label);
$item->signal_connect(activate => $cb);
$menu->append($item);
return $item;
}
sub _build_toolbar {
my ($self) = @_;
my $tb = Gtk3::Toolbar->new();
$tb->set_style('both-horiz');
lib/App/DrivePlayer/GUI.pm view on Meta::CPAN
return FALSE unless $path;
my $store = $self->sidebar_store;
my $iter = $store->get_iter($path);
my $type = $store->get($iter, 1);
return FALSE unless $type eq 'folder';
my $drive_id = $store->get($iter, 2);
my $sf = $self->db->get_scan_folder_by_drive_id($drive_id) or return FALSE;
my $menu = Gtk3::Menu->new();
$self->_add_menu_item($menu, 'Fetch Metadata for This Folder', sub {
$self->_stop_metadata_fetch() if $self->_meta_watch_id;
$self->_fetch_all_metadata($sf->{id});
});
$menu->show_all();
$menu->popup_at_pointer($event);
return TRUE;
}
# ---- Search ----
lib/App/DrivePlayer/GUI.pm view on Meta::CPAN
}
sub _tracklist_context_menu {
my ($self, $event) = @_;
my ($path) = $self->track_view->get_path_at_pos($event->x, $event->y);
return unless $path;
$self->track_view->get_selection()->select_path($path);
my $track = $self->_track_at_path($path);
my $menu = Gtk3::Menu->new();
my $play_item = Gtk3::MenuItem->new_with_label('Play');
$play_item->signal_connect(activate => sub { $self->_play_at_path($path) });
$menu->append($play_item);
my $edit_item = Gtk3::MenuItem->new_with_label('Editâ¦');
$edit_item->signal_connect(activate => sub {
$self->_edit_metadata_dialog($track) if $track;
});
$menu->append($edit_item);
$menu->show_all();
$menu->popup_at_pointer($event);
}
sub _edit_metadata_dialog {
( run in 0.626 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )