Skip to content

Commit

Permalink
redesign of layout Window options and init, and implement new window …
Browse files Browse the repository at this point in the history
…options

- "pos" and "size" options can be relative to the width/height of the screen
  by using a percentage (example : pos=50%x20%).
- If a percentage is used for "pos", the window will be centered on this
  position by default. This can be changed by appending a percentage
  relative to the size of the window.
  For example "pos=50%-50%x0+10%" will put the window at
	x= screenwidth/2 - windowwidth/2 and y= 0 + windowheight/10
- add transparent=1 window option, it requires Cairo and a compositing
  window manager to work
- add insensitive=1 window option, it makes the window completely
  insensitive to mouse or keyboard.
- it is now possible to specify options with the name of a layout
  example :
	OpenCustom(NameOfLayout(pos=100%x50%))
  will open the window at the bottom center
- add "uniqueid" and "ifexist" window options. uniqueid is a string id
  that default to the layout id. ifexist define the action to take when
  attempting to create a window with the same uniqueid as an existing
  window, it can be :
	'toggle'  : to close the existing window
	'present' : to bring the existing window to the front
	'replace' : to close the window and open a new window
  • Loading branch information
squentin committed Sep 18, 2009
1 parent c48ebe4 commit ec495ad
Show file tree
Hide file tree
Showing 5 changed files with 248 additions and 262 deletions.
2 changes: 1 addition & 1 deletion debian/control
Expand Up @@ -9,7 +9,7 @@ Standards-Version: 3.7.3
Package: gmusicbrowser
Architecture: all
Depends: perl, libgtk2-perl, libgtk2.0-0 (>= 2.6)
Recommends: liblocale-gettext-perl (>= 1.04), libnet-dbus-perl, libgtk2-trayicon-perl, libgstreamer-perl, libdigest-crc-perl
Recommends: liblocale-gettext-perl (>= 1.04), libnet-dbus-perl, libgtk2-trayicon-perl, libgstreamer-perl, libdigest-crc-perl, libcairo-perl
Suggests: mplayer, mpg321, vorbis-tools, alsa-utils, libgtk2-mozembed-perl
Description: jukebox for large collections of mp3/ogg/flac/mpc files
Uses GStreamer, mpg321/ogg123/flac123 or mplayer for playback. It has easy
Expand Down
85 changes: 36 additions & 49 deletions gmusicbrowser.pl
Expand Up @@ -618,8 +618,8 @@ sub ConvertSize
our ($RandomMode,$SortFields,$ListMode);
our ($SongID,$Recent,$RecentPos,$Queue); our $QueueAction='';
our ($Position,$ChangedID,$ChangedPos,@NextSongs,$NextFileToPlay);
our ($MainWindow,$BrowserWindow,$ContextWindow,$FullscreenWindow); my $OptionsDialog;
our $QueueWindow; my $TrayIcon;
our ($MainWindow,$FullscreenWindow); my $OptionsDialog;
my $TrayIcon;
my %Editing; #used to keep track of opened song properties dialog and lyrics dialog
our $PlayTime;
our ($StartTime,$StartedAt,$PlayingID,$PlayedPartial);
Expand Down Expand Up @@ -867,14 +867,14 @@ sub GetIconThemesList
Rewind => [\&Rewind, _"Rewind",_"Number of seconds",qr/^\d+$/],
Seek => [sub {SkipTo($_[1])}, _"Seek",_"Number of seconds",qr/^\d+$/],
Stop => [\&Stop, _"Stop"],
Browser => [\&Playlist, _"Open Browser"],
Browser => [\&OpenBrowser, _"Open Browser"],
OpenQueue => [\&EditQueue, _"Open Queue window"],
OpenSearch => [sub { Layout::Window->new($Options{LayoutS}); }, _"Open Search window"],
OpenContext => [sub { Layout::Window->new('Context');}, _"Open Context window"],
OpenSearch => [sub { Layout::Window->new($Options{LayoutS}, uniqueid=>'Search'); }, _"Open Search window"],
OpenContext => [\&ContextWindow, _"Open Context window"],
OpenCustom => [sub { Layout::Window->new($_[1]); }, _"Open Custom window",_"Name of layout", sub { TextCombo->new( Layout::get_layout_list() ); }],
PopupCustom => [sub { PopupLayout($_[1],$_[0]); }, _"Popup Custom window",_"Name of layout", sub { TextCombo::Tree->new( Layout::get_layout_list() ); }],
CloseWindow => [sub { $_[0]->get_toplevel->close_window if $_[0];}, _"Close Window"],
SetPlayerLayout => [sub { SetOption(Layout=>$_[1]); set_layout(); },_"Set player window layout",_"Name of layout", sub { TextCombo::Tree->new( Layout::get_layout_list('G') ); }, ],
SetPlayerLayout => [sub { SetOption(Layout=>$_[1]); CreateMainWindow(); },_"Set player window layout",_"Name of layout", sub { TextCombo::Tree->new( Layout::get_layout_list('G') ); }, ],
OpenPref => [\&PrefDialog, _"Open Preference window"],
OpenSongProp => [sub { DialogSongProp($SongID) if defined $SongID }, _"Edit Current Song Properties"],
EditSelectedSongsProperties => [sub { my $songlist=GetSonglist($_[0]) or return; my @IDs=$songlist->GetSelectedIDs; DialogSongsProp(@IDs) if @IDs; }, _"Edit selected song properties"],
Expand Down Expand Up @@ -1058,7 +1058,7 @@ sub forksystem
ActivatePlugin($_,'startup') for grep $Options{'PLUGIN_'.$_}, sort keys %Plugins;

our $Tooltips=Gtk2::Tooltips->new;
$MainWindow=Layout::Window->new($CmdLine{layout}||$Options{Layout});
CreateMainWindow( $CmdLine{layout}||$Options{Layout} );
&ShowHide if $CmdLine{hide};
SkipTo($PlayTime) if $PlayTime; #done only now because of gstreamer

Expand Down Expand Up @@ -2536,32 +2536,28 @@ sub IdleLoop
return $IdleLoop;
}
sub Playlist
{ if ($BrowserWindow)
{ if ($_[0]{toggle}) {$BrowserWindow->close_window}
else {$BrowserWindow->present}
}
else
{ $BrowserWindow=Layout::Window->new($Options{LayoutB});
$BrowserWindow->signal_connect(destroy => sub { $BrowserWindow=undef; });
}
sub OpenBrowser
{ OpenSpecialWindow('Browser');
}
sub ContextWindow
{ if ($ContextWindow)
{ if ($_[0]{toggle}) {$ContextWindow->close_window}
else {$ContextWindow->present}
}
else
{ $ContextWindow=Layout::Window->new('Context');
$ContextWindow->signal_connect(destroy => sub { $ContextWindow=undef; });
}
{ OpenSpecialWindow('Context');
}
sub EditQueue
{ OpenSpecialWindow('Queue');
}
sub OpenSpecialWindow
{ my ($type,$toggle)=@_;
my $layout= $type eq 'Browser' ? $Options{LayoutB} : $type;
my $ifexist= $toggle ? 'toggle' : 'present';
Layout::Window->new($layout, ifexist => $ifexist, uniqueid=>$type);
}
sub ToggleFullscreenLayout
{ if ($FullscreenWindow)
{ $FullscreenWindow->close_window;
}
else
{ $FullscreenWindow=Layout::Window->new($Options{LayoutF},undef,'UseDefaultState');
{ $FullscreenWindow=Layout::Window->new($Options{LayoutF},fullscreen=>1);
$FullscreenWindow->signal_connect(destroy => sub { $FullscreenWindow=undef; });
if ($Options{StopScreensaver} && findcmd('xdg-screensaver'))
{ my $h={ XID => $FullscreenWindow->window->XID};
Expand All @@ -2583,23 +2579,12 @@ sub ToggleFullscreenLayout
}
}
sub EditQueue
{ if ($QueueWindow)
{ if ($_[0]{toggle}) {$QueueWindow->close_window}
else {$QueueWindow->present}
}
else
{ $QueueWindow=Layout::Window->new('Queue');
$QueueWindow->signal_connect(destroy => sub { $QueueWindow=undef; });
}
}
sub WEditList
{ my $name=$_[0];
my ($window)=grep exists $_->{editing_listname} && $_->{editing_listname} eq $name, Gtk2::Window->list_toplevels;
if ($window) { $window->present; return; }
$SongList::Common::EditList=$name; #list that will be used by SongList/SongTree in 'editlist' mode
$window=Layout::Window->new('EditList',UseDefaultState=>1,KeepSize=>1);
$window=Layout::Window->new('EditList', 'pos'=>undef);
$SongList::Common::EditList=undef;
$window->{editing_listname}=$name;
Watch($window, SavedLists => sub #close window if the list is deleted, update title if renamed
Expand Down Expand Up @@ -5069,7 +5054,7 @@ sub PrefAudio
if (exists $PlayPacks{Play_GST})
{ my $hbox2=NewPrefCombo(gst_sink => Play_GST->supported_sinks, text => _"output device :", sizeg1=>$sg1, sizeg2=> $sg2);
my $EQbut=Gtk2::Button->new(_"Open Equalizer");
$EQbut->signal_connect(clicked => sub {Layout::Window->new('Equalizer');});
$EQbut->signal_connect(clicked => sub { OpenSpecialWindow('Equalizer'); });
my $EQcheck=NewPrefCheckButton(gst_use_equalizer => _"Use Equalizer", sub { HasChanged('Equalizer'); });
$sg1->add_widget($EQcheck);
$sg2->add_widget($EQbut);
Expand Down Expand Up @@ -5213,7 +5198,7 @@ sub PrefLayouts
my $sg1=Gtk2::SizeGroup->new('horizontal');
my $sg2=Gtk2::SizeGroup->new('horizontal');
my $layoutT=NewPrefCombo(LayoutT=> Layout::get_layout_list('T'), text => _"Tray tip window layout :", sizeg1=>$sg1,sizeg2=>$sg2, tree=>1);
my $layout =NewPrefCombo(Layout => Layout::get_layout_list('G'), text =>_"Player window layout :", sizeg1=>$sg1,sizeg2=>$sg2, tree=>1, cb => \&set_layout);
my $layout =NewPrefCombo(Layout => Layout::get_layout_list('G'), text =>_"Player window layout :", sizeg1=>$sg1,sizeg2=>$sg2, tree=>1, cb => sub {CreateMainWindow();}, );
my $layoutB=NewPrefCombo(LayoutB=> Layout::get_layout_list('B'), text =>_"Browser window layout :", sizeg1=>$sg1,sizeg2=>$sg2, tree=>1);
my $layoutF=NewPrefCombo(LayoutF=> Layout::get_layout_list('F'), text =>_"Full screen layout :", sizeg1=>$sg1,sizeg2=>$sg2, tree=>1);
my $layoutS=NewPrefCombo(LayoutS=> Layout::get_layout_list('S'), text =>_"Search window layout :", sizeg1=>$sg1,sizeg2=>$sg2, tree=>1);
Expand All @@ -5229,11 +5214,12 @@ sub PrefLayouts
return $vbox;
}

sub set_layout
{ my $old=$MainWindow;
$old->SaveOptions;
$MainWindow=Layout::Window->new( $Options{Layout} );
$old->destroy;
sub CreateMainWindow
{ my $layout=shift;
$layout=$Options{Layout} unless defined $layout;
$MainWindow->{quitonclose}=0 if $MainWindow;
$MainWindow=Layout::Window->new( $layout, uniqueid=> 'MainWindow', ifexist => 'replace');
$MainWindow->{quitonclose}=1;
}

sub PrefTags
Expand Down Expand Up @@ -6013,7 +5999,7 @@ sub PresentWindow

sub PopupLayout
{ my ($layout,$widget)=@_;
return if $widget && Layout::Window::Popup::find_window($widget);
return if $widget && $widget->{PoppedUpWindow};
my $popup=Layout::Window::Popup->new($layout,$widget);
}

Expand Down Expand Up @@ -6078,7 +6064,7 @@ sub TrayMenuPopup
{ label=> _"Settings", code => \&PrefDialog, stockicon => 'gtk-preferences' },
{ label=> _"Quit", code => \&Quit, stockicon => 'gtk-quit' },
);
my $traytip=Layout::Window::Popup::find_window($TrayIcon->child,$_[0]);
my $traytip=$TrayIcon->child->{PoppedUpWindow};
$traytip->DestroyNow if $traytip;
$TrayIcon->{NoTrayTip}=1;
my $m=PopupContextMenu(\@TrayMenu,{});
Expand Down Expand Up @@ -6136,10 +6122,11 @@ sub IsWindowVisible
return $visible;
}
sub ShowHide
{ if ( IsWindowVisible($MainWindow) )
{ my (@windows)=grep $_->isa('Layout::Window') && $_->{showhide} && $_!=$MainWindow, Gtk2::Window->list_toplevels;
if ( IsWindowVisible($MainWindow) )
{ #hide
#warn "hiding\n";
for my $win ($MainWindow,$BrowserWindow,$ContextWindow)
for my $win ($MainWindow,@windows)
{ next unless $win;
$win->{saved_position}=join 'x',$win->get_position;
$win->iconify;
Expand All @@ -6154,7 +6141,7 @@ sub ShowHide
my $screen=Gtk2::Gdk::Screen->get_default;
my $scrw=$screen->get_width;
my $scrh=$screen->get_height;
for my $win ($ContextWindow,$BrowserWindow,$MainWindow)
for my $win (@windows,$MainWindow)
{ next unless $win;
my ($x,$y)= $win->{saved_position} ? split('x', delete $win->{saved_position}) : $win->get_position;
my ($w,$h)= $win->get_size;
Expand Down
2 changes: 1 addition & 1 deletion gmusicbrowser.spec
Expand Up @@ -11,7 +11,7 @@ Packager: Quentin Sculo <squentin@free.fr>
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildArch: noarch
Requires: perl >= 5.8, gtk2 >= 2.6.0, perl-Gtk2, perl-Gtk2-TrayIcon, perl(Locale::gettext) >= 1.04, perl-GStreamer
Requires(hint): mpg123, vorbis-tools, alsa-utils, perl-Gtk2-WebKit, perl-Gtk2-MozEmbed, perl-Net-DBus, gstreamer0.10-lame, gstreamer0.10-plugins-ugly, gstreamer0.10-plugins-bad, perl-Digest-CRC
Requires(hint): mpg123, vorbis-tools, alsa-utils, perl-Gtk2-WebKit, perl-Gtk2-MozEmbed, perl-Net-DBus, gstreamer0.10-lame, gstreamer0.10-plugins-ugly, gstreamer0.10-plugins-bad, perl-Digest-CRC, perl-Cairo
AutoReq: no
AutoProv: no

Expand Down

0 comments on commit ec495ad

Please sign in to comment.