Add commandline option to resize window
This commit is contained in:
parent
2a8490ef31
commit
4c0f7c3dd4
|
@ -71,10 +71,11 @@ const char *CommandlineOptions::kHelpText =
|
|||
" -o, --show-osd %27\n"
|
||||
" -y, --toggle-pretty-osd %28\n"
|
||||
" -g, --language <lang> %29\n"
|
||||
" --quiet %30\n"
|
||||
" --verbose %31\n"
|
||||
" --log-levels <levels> %32\n"
|
||||
" --version %33\n";
|
||||
" -w, --resize-window <WxH> %30\n"
|
||||
" --quiet %31\n"
|
||||
" --verbose %32\n"
|
||||
" --log-levels <levels> %33\n"
|
||||
" --version %34\n";
|
||||
|
||||
const char *CommandlineOptions::kVersionText = "Strawberry %1";
|
||||
|
||||
|
@ -143,6 +144,7 @@ bool CommandlineOptions::Parse() {
|
|||
{"show-osd", no_argument, nullptr, 'o'},
|
||||
{"toggle-pretty-osd", no_argument, nullptr, 'y'},
|
||||
{"language", required_argument, nullptr, 'g'},
|
||||
{"resize-window", required_argument, nullptr, 'w'},
|
||||
{"quiet", no_argument, nullptr, Quiet},
|
||||
{"verbose", no_argument, nullptr, Verbose},
|
||||
{"log-levels", required_argument, nullptr, LogLevels},
|
||||
|
@ -152,7 +154,7 @@ bool CommandlineOptions::Parse() {
|
|||
// Parse the arguments
|
||||
bool ok = false;
|
||||
forever {
|
||||
int c = getopt_long(argc_, argv_, "hptusqrfv:c:alk:i:oyg:", kOptions, nullptr);
|
||||
int c = getopt_long(argc_, argv_, "hptusqrfv:c:alk:i:oyg:w:", kOptions, nullptr);
|
||||
|
||||
// End of the options
|
||||
if (c == -1) break;
|
||||
|
@ -186,6 +188,7 @@ bool CommandlineOptions::Parse() {
|
|||
.arg(tr("Other options"), tr("Display the on-screen-display"),
|
||||
tr("Toggle visibility for the pretty on-screen-display"),
|
||||
tr("Change the language"),
|
||||
tr("Resize the window"),
|
||||
tr("Equivalent to --log-levels *:1"),
|
||||
tr("Equivalent to --log-levels *:3"),
|
||||
tr("Comma separated list of class:level, level is 0-3"))
|
||||
|
@ -293,6 +296,11 @@ bool CommandlineOptions::Parse() {
|
|||
if (!ok) play_track_at_ = -1;
|
||||
break;
|
||||
|
||||
case 'w':
|
||||
window_size_ = QString(optarg);
|
||||
player_action_ = Player_ResizeWindow;
|
||||
break;
|
||||
|
||||
case '?':
|
||||
default:
|
||||
return false;
|
||||
|
@ -370,7 +378,8 @@ QDataStream& operator<<(QDataStream &s, const CommandlineOptions &a) {
|
|||
<< a.urls_
|
||||
<< a.log_levels_
|
||||
<< a.toggle_pretty_osd_
|
||||
<< a.playlist_name_;
|
||||
<< a.playlist_name_
|
||||
<< a.window_size_;
|
||||
|
||||
return s;
|
||||
|
||||
|
@ -380,6 +389,7 @@ QDataStream& operator>>(QDataStream &s, CommandlineOptions &a) {
|
|||
|
||||
quint32 player_action = 0;
|
||||
quint32 url_list_action = 0;
|
||||
|
||||
s >> player_action
|
||||
>> url_list_action
|
||||
>> a.set_volume_
|
||||
|
@ -391,7 +401,9 @@ QDataStream& operator>>(QDataStream &s, CommandlineOptions &a) {
|
|||
>> a.urls_
|
||||
>> a.log_levels_
|
||||
>> a.toggle_pretty_osd_
|
||||
>> a.playlist_name_;
|
||||
>> a.playlist_name_
|
||||
>> a.window_size_;
|
||||
|
||||
a.player_action_ = CommandlineOptions::PlayerAction(player_action);
|
||||
a.url_list_action_ = CommandlineOptions::UrlListAction(url_list_action);
|
||||
|
||||
|
|
|
@ -58,6 +58,7 @@ class CommandlineOptions {
|
|||
Player_RestartOrPrevious = 7,
|
||||
Player_StopAfterCurrent = 8,
|
||||
Player_PlayPlaylist = 9,
|
||||
Player_ResizeWindow = 10
|
||||
};
|
||||
|
||||
bool Parse();
|
||||
|
@ -78,13 +79,13 @@ class CommandlineOptions {
|
|||
QString language() const { return language_; }
|
||||
QString log_levels() const { return log_levels_; }
|
||||
QString playlist_name() const { return playlist_name_; }
|
||||
QString window_size() const { return window_size_; }
|
||||
|
||||
QByteArray Serialize() const;
|
||||
void Load(const QByteArray &serialized);
|
||||
|
||||
private:
|
||||
// These are "invalid" characters to pass to getopt_long for options that
|
||||
// shouldn't have a short (single character) option.
|
||||
// These are "invalid" characters to pass to getopt_long for options that shouldn't have a short (single character) option.
|
||||
enum LongOptions {
|
||||
VolumeUp = 256,
|
||||
VolumeDown,
|
||||
|
@ -120,6 +121,7 @@ class CommandlineOptions {
|
|||
QString language_;
|
||||
QString log_levels_;
|
||||
QString playlist_name_;
|
||||
QString window_size_;
|
||||
|
||||
QList<QUrl> urls_;
|
||||
};
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
#include <QApplication>
|
||||
#include <QObject>
|
||||
#include <QWidget>
|
||||
#include <QScreen>
|
||||
#include <QWindow>
|
||||
#include <QMetaObject>
|
||||
#include <QThread>
|
||||
#include <QSystemTrayIcon>
|
||||
|
@ -2312,8 +2314,46 @@ void MainWindow::CommandlineOptionsReceived(const CommandlineOptions &options) {
|
|||
app_->player()->RestartOrPrevious();
|
||||
break;
|
||||
|
||||
case CommandlineOptions::Player_ResizeWindow:{
|
||||
if (options.window_size().contains('x') && options.window_size().length() >= 4) {
|
||||
QString str_w = options.window_size().left(options.window_size().indexOf('x'));
|
||||
QString str_h = options.window_size().right(options.window_size().length() - options.window_size().indexOf('x') - 1);
|
||||
bool w_ok = false;
|
||||
bool h_ok = false;
|
||||
int w = str_w.toInt(&w_ok);
|
||||
int h = str_h.toInt(&h_ok);
|
||||
if (w_ok && h_ok) {
|
||||
QSize window_size(w, h);
|
||||
if (window_size.isValid()) {
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
||||
QScreen *screen = QWidget::screen();
|
||||
#else
|
||||
QScreen *screen = (window() && window()->windowHandle() ? window()->windowHandle()->screen() : nullptr);
|
||||
#endif
|
||||
if (screen) {
|
||||
const QRect sr = screen->availableGeometry();
|
||||
window_size = window_size.boundedTo(sr.size());
|
||||
if (window_size.width() >= sr.width() && window_size.height() >= sr.height()) {
|
||||
resize(window_size);
|
||||
showMaximized();
|
||||
}
|
||||
else {
|
||||
showNormal();
|
||||
resize(window_size);
|
||||
const QRect wr({}, size().boundedTo(sr.size()));
|
||||
resize(wr.size());
|
||||
move(sr.center() - wr.center());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case CommandlineOptions::Player_None:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (!options.urls().empty()) {
|
||||
|
|
Loading…
Reference in New Issue