Display a system icon for a custom actions
Refactored Icon cache Refactored custom command spawning FossilOrigin-Name: 2dabf7d89cfa79d1ce278c7b083761be5f54a691
This commit is contained in:
parent
2ccd05f476
commit
c6a0b4e0df
19
manifest
19
manifest
@ -1,5 +1,5 @@
|
|||||||
C Merged\sfolder-state\sbranch
|
C Display\sa\ssystem\sicon\sfor\sa\scustom\sactions\nRefactored\sIcon\scache\nRefactored\scustom\scommand\sspawning\n
|
||||||
D 2015-07-11T11:50:18.204
|
D 2015-07-11T12:12:17.094
|
||||||
F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35
|
F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35
|
||||||
F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b
|
F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b
|
||||||
F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b
|
F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b
|
||||||
@ -224,8 +224,8 @@ F src/FslSettingsDialog.cpp 2531d3709f0eab66651671e3edead2ca720d07d5
|
|||||||
F src/FslSettingsDialog.h dfe2a61884a55a74cbb9206b6f6b482b979725e7
|
F src/FslSettingsDialog.h dfe2a61884a55a74cbb9206b6f6b482b979725e7
|
||||||
F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c
|
F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c
|
||||||
F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261
|
F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261
|
||||||
F src/MainWindow.cpp b9920340aaa14152287c482b524b12499067dc33
|
F src/MainWindow.cpp 6261d26a6220f04bff642d1a0f522d2dd29c4baf
|
||||||
F src/MainWindow.h 765c362ad4937da808276ec321adf4a351ab5b28
|
F src/MainWindow.h 87dbc88db94f1cd8914641527fa09bee76e865b5
|
||||||
F src/RemoteDialog.cpp 8540cc5e2e41c4127ed8a028d84691604fa6ecac
|
F src/RemoteDialog.cpp 8540cc5e2e41c4127ed8a028d84691604fa6ecac
|
||||||
F src/RemoteDialog.h 5e0438c2bd7c79b1bb44bfbd58c2181b544a9e5d
|
F src/RemoteDialog.h 5e0438c2bd7c79b1bb44bfbd58c2181b544a9e5d
|
||||||
F src/RevisionDialog.cpp e58c4f8a704f00addebb15d521b76620fdafda79
|
F src/RevisionDialog.cpp e58c4f8a704f00addebb15d521b76620fdafda79
|
||||||
@ -236,8 +236,8 @@ F src/Settings.cpp 258d3f466f6a125ce2b8519d6d57a312cbc44a3f
|
|||||||
F src/Settings.h 0a10b0b83fe804bdc7dac58eed06b5b6ee422055
|
F src/Settings.h 0a10b0b83fe804bdc7dac58eed06b5b6ee422055
|
||||||
F src/SettingsDialog.cpp cab739fb0569bd26550e57f97136c7515fe757fe
|
F src/SettingsDialog.cpp cab739fb0569bd26550e57f97136c7515fe757fe
|
||||||
F src/SettingsDialog.h 5eb3ae2cbb00ab5544e1889860f5376f69fe47cd
|
F src/SettingsDialog.h 5eb3ae2cbb00ab5544e1889860f5376f69fe47cd
|
||||||
F src/Utils.cpp e047c7aaeb4fb4b64c1383df5cb35d269abb87ed
|
F src/Utils.cpp 6d9a08603f40fff3cb237259ecc6b1e534472d8f
|
||||||
F src/Utils.h cb0499ead8dd5662b184dbeabb6e66c3ae65eebc
|
F src/Utils.h aa7a91ef3b4b9b0d873b2c9675403bbe928892bc
|
||||||
F src/Workspace.cpp b4f0bb95dfc49c1e906f8a163d518050c3f945db
|
F src/Workspace.cpp b4f0bb95dfc49c1e906f8a163d518050c3f945db
|
||||||
F src/Workspace.h 731ec8ae7e97d500f85ee13b18024efbd3d55516
|
F src/Workspace.h 731ec8ae7e97d500f85ee13b18024efbd3d55516
|
||||||
F src/main.cpp d8c65ea5e54102e4989fef9fd8cfd4f13ef8a8f0
|
F src/main.cpp d8c65ea5e54102e4989fef9fd8cfd4f13ef8a8f0
|
||||||
@ -252,8 +252,7 @@ F ui/MainWindow.ui 10181826a25056ed5aba2b23a7d110159be7c043
|
|||||||
F ui/RemoteDialog.ui 95a4750d972ed8c49bb10b95db91ff16cfe2dd0b
|
F ui/RemoteDialog.ui 95a4750d972ed8c49bb10b95db91ff16cfe2dd0b
|
||||||
F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd
|
F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd
|
||||||
F ui/SettingsDialog.ui 47b9a31e28ad523f14a1c4cd361270b6babbdf7d
|
F ui/SettingsDialog.ui 47b9a31e28ad523f14a1c4cd361270b6babbdf7d
|
||||||
P ccbdbff89e2354c6d8f38d994587328a04112eaa 0f8cf57fa2a7b38a7d2a8ca22d7e0fa09b1cd24d
|
P cca2042b901945b1079faedaa7339578f6192a3f
|
||||||
R d10a7a3bf72e8afb9416f20dd6e5fec3
|
R f3b000d69b50c8a107ec105ff2cabbca
|
||||||
T +closed 0f8cf57fa2a7b38a7d2a8ca22d7e0fa09b1cd24d
|
|
||||||
U kostas
|
U kostas
|
||||||
Z 24f7a95608407ce6b9d41dea21fc53e5
|
Z c422a488a81d98221d9e129ef1baf4fc
|
||||||
|
@ -1 +1 @@
|
|||||||
cca2042b901945b1079faedaa7339578f6192a3f
|
2dabf7d89cfa79d1ce278c7b083761be5f54a691
|
@ -1000,12 +1000,8 @@ void MainWindow::updateFileView()
|
|||||||
getWorkspace().getFileModel().setItem(item_id, COLUMN_STATUS, status);
|
getWorkspace().getFileModel().setItem(item_id, COLUMN_STATUS, status);
|
||||||
|
|
||||||
QFileInfo finfo = e.getFileInfo();
|
QFileInfo finfo = e.getFileInfo();
|
||||||
QString icon_type = iconProvider.type(finfo);
|
|
||||||
|
|
||||||
if(!iconCache.contains(icon_type))
|
const QIcon *icon = &getInternalFileIcon(finfo);
|
||||||
iconCache.insert(icon_type, iconProvider.icon(finfo));
|
|
||||||
|
|
||||||
const QIcon *icon = &iconCache[icon_type];
|
|
||||||
|
|
||||||
QStandardItem *filename_item = 0;
|
QStandardItem *filename_item = 0;
|
||||||
getWorkspace().getFileModel().setItem(item_id, COLUMN_PATH, new QStandardItem(path));
|
getWorkspace().getFileModel().setItem(item_id, COLUMN_PATH, new QStandardItem(path));
|
||||||
@ -2114,13 +2110,22 @@ QMenu * MainWindow::createPopupMenu()
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
const QIcon &MainWindow::getInternalIcon(const char* name)
|
const QIcon &MainWindow::getInternalIcon(const char* name)
|
||||||
{
|
{
|
||||||
if(iconCache.contains(name))
|
if(!iconCache.contains(name))
|
||||||
return iconCache[name];
|
iconCache.insert(name, QIcon(name));
|
||||||
|
|
||||||
iconCache.insert(name, QIcon(name));
|
|
||||||
return iconCache[name];
|
return iconCache[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
const QIcon &MainWindow::getInternalFileIcon(const QFileInfo &finfo)
|
||||||
|
{
|
||||||
|
QString icon_type = iconProvider.type(finfo);
|
||||||
|
|
||||||
|
if(!iconCache.contains(icon_type))
|
||||||
|
iconCache.insert(icon_type, iconProvider.icon(finfo));
|
||||||
|
|
||||||
|
return iconCache[icon_type];
|
||||||
|
}
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
void MainWindow::on_actionCreateStash_triggered()
|
void MainWindow::on_actionCreateStash_triggered()
|
||||||
{
|
{
|
||||||
@ -2824,6 +2829,16 @@ void MainWindow::updateCustomActions()
|
|||||||
action->setVisible(cust_act.IsValid());
|
action->setVisible(cust_act.IsValid());
|
||||||
action->setText(cust_act.Description);
|
action->setText(cust_act.Description);
|
||||||
|
|
||||||
|
if(!cust_act.IsValid())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Attempt to extract an icon
|
||||||
|
QString cmd, extra_params;
|
||||||
|
SplitCommandLine(cust_act.Command, cmd, extra_params);
|
||||||
|
QFileInfo fi(cmd);
|
||||||
|
if(fi.isFile())
|
||||||
|
action->setIcon(getInternalFileIcon(fi));
|
||||||
|
|
||||||
if(cust_act.IsActive(ACTION_CONTEXT_FILES))
|
if(cust_act.IsActive(ACTION_CONTEXT_FILES))
|
||||||
{
|
{
|
||||||
ui->fileTableView->addAction(action);
|
ui->fileTableView->addAction(action);
|
||||||
|
@ -62,6 +62,7 @@ private:
|
|||||||
void setBusy(bool busy);
|
void setBusy(bool busy);
|
||||||
virtual QMenu *createPopupMenu();
|
virtual QMenu *createPopupMenu();
|
||||||
const QIcon& getInternalIcon(const char *name);
|
const QIcon& getInternalIcon(const char *name);
|
||||||
|
const QIcon& getInternalFileIcon(const QFileInfo &finfo);
|
||||||
|
|
||||||
enum ViewMode
|
enum ViewMode
|
||||||
{
|
{
|
||||||
|
@ -476,39 +476,45 @@ QString UrlToStringNoCredentials(const QUrl& url)
|
|||||||
return url.toString(QUrl::PrettyDecoded|QUrl::RemoveUserInfo);
|
return url.toString(QUrl::PrettyDecoded|QUrl::RemoveUserInfo);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
bool SpawnExternalProcess(QObject *processParent, const QString& command, const QStringList& fileList, const stringset_t& pathSet, const QString &workspaceDir, UICallback &uiCallback)
|
void SplitCommandLine(const QString &commandLine, QString &command, QString &extraParams)
|
||||||
{
|
{
|
||||||
QStringList params;
|
|
||||||
|
|
||||||
// Process command string
|
// Process command string
|
||||||
QString cmd = command;
|
command = commandLine;
|
||||||
Q_ASSERT(!cmd.isEmpty());
|
Q_ASSERT(!command.isEmpty());
|
||||||
|
|
||||||
// Split command from embedded params
|
// Split command from embedded params
|
||||||
QString extra_params;
|
extraParams.clear();
|
||||||
|
|
||||||
// Command ends after first space
|
// Command ends after first space
|
||||||
QChar cmd_char_end = ' ';
|
QChar cmd_char_end = ' ';
|
||||||
int start = 0;
|
int start = 0;
|
||||||
|
|
||||||
// ...unless it is a quoted command
|
// ...unless it is a quoted command
|
||||||
if(cmd[0]=='"')
|
if(command[0]=='"')
|
||||||
{
|
{
|
||||||
cmd_char_end = '"';
|
cmd_char_end = '"';
|
||||||
start = 1;
|
start = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmd_end = cmd.indexOf(cmd_char_end, start);
|
int cmd_end = command.indexOf(cmd_char_end, start);
|
||||||
if(cmd_end != -1)
|
if(cmd_end != -1)
|
||||||
{
|
{
|
||||||
extra_params = cmd.mid(cmd_end+1);
|
extraParams = command.mid(cmd_end+1);
|
||||||
cmd = cmd.left(cmd_end);
|
command = command.left(cmd_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd = cmd.trimmed();
|
command = command.trimmed();
|
||||||
extra_params = extra_params.trimmed();
|
extraParams = extraParams.trimmed();
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
bool SpawnExternalProcess(QObject *processParent, const QString& command, const QStringList& fileList, const stringset_t& pathSet, const QString &workspaceDir, UICallback &uiCallback)
|
||||||
|
{
|
||||||
|
QStringList params;
|
||||||
|
|
||||||
|
QString cmd, extra_params;
|
||||||
|
SplitCommandLine(command, cmd, extra_params);
|
||||||
|
|
||||||
// Push all additional params, except those containing macros
|
// Push all additional params, except those containing macros
|
||||||
QString macro_file;
|
QString macro_file;
|
||||||
|
@ -61,6 +61,7 @@ bool KeychainDelete(QObject* parent, const QUrl& url);
|
|||||||
QString HashString(const QString &str);
|
QString HashString(const QString &str);
|
||||||
QString UrlToStringDisplay(const QUrl &url);
|
QString UrlToStringDisplay(const QUrl &url);
|
||||||
QString UrlToStringNoCredentials(const QUrl& url);
|
QString UrlToStringNoCredentials(const QUrl& url);
|
||||||
|
void SplitCommandLine(const QString &commandLine, QString &command, QString &extraParams);
|
||||||
bool SpawnExternalProcess(QObject *processParent, const QString& command, const QStringList& fileList, const stringset_t& pathSet, const QString &workspaceDir, UICallback &uiCallback);
|
bool SpawnExternalProcess(QObject *processParent, const QString& command, const QStringList& fileList, const stringset_t& pathSet, const QString &workspaceDir, UICallback &uiCallback);
|
||||||
|
|
||||||
typedef QMap<QString, QString> QStringMap;
|
typedef QMap<QString, QString> QStringMap;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user