small fixes

This commit is contained in:
2021-03-24 19:42:46 +03:00
parent eee28579a1
commit e3f19521be
2 changed files with 51 additions and 18 deletions

View File

@@ -26,6 +26,16 @@
QFileInfo projectfs_menu_target; QFileInfo projectfs_menu_target;
enum ItemType {
itProject = 1,
itFile,
itDir
};
const int roleFullPath = Qt::UserRole;
const int roleItemType = Qt::UserRole + 1;
const int roleIsDir = Qt::UserRole + 2;
ProjectFilesystemWidget::ProjectFilesystemWidget(QWidget * parent): QWidget(parent) { ProjectFilesystemWidget::ProjectFilesystemWidget(QWidget * parent): QWidget(parent) {
setupUi(this); setupUi(this);
@@ -40,9 +50,14 @@ ProjectFilesystemWidget::ProjectFilesystemWidget(QWidget * parent): QWidget(pare
actionShow_external->setIcon(Core::FileIconProvider::icon(QFileIconProvider::Folder)); actionShow_external->setIcon(Core::FileIconProvider::icon(QFileIconProvider::Folder));
actionCopy_name->setIcon(Utils::Icons::COPY.icon()); actionCopy_name->setIcon(Utils::Icons::COPY.icon());
actionCopy_path->setIcon(Utils::Icons::COPY.icon()); actionCopy_path->setIcon(Utils::Icons::COPY.icon());
popup_menu.addActions(QList<QAction*>() << actionOpen_here << actionOpen_external << actionShow_external << actionOpen_terminal); QAction * sep = new QAction();
popup_menu.addSeparator(); sep->setSeparator(true);
popup_menu.addActions(QList<QAction*>() << actionCopy_name << actionCopy_path); //this_actions << sep;
this_actions << actionOpen_here << actionOpen_external << actionShow_external << actionOpen_terminal;
//sep = new QAction();
//sep->setSeparator(true);
this_actions << sep;
this_actions << actionCopy_name << actionCopy_path;
proj_plug = 0; proj_plug = 0;
//connect(ProjectExplorer::ProjectTree::instance(), SIGNAL(subtreeChanged(ProjectExplorer::FolderNode*)), this, SLOT(projectsChanged())); //connect(ProjectExplorer::ProjectTree::instance(), SIGNAL(subtreeChanged(ProjectExplorer::FolderNode*)), this, SLOT(projectsChanged()));
connect(ProjectExplorer::SessionManager::instance(), SIGNAL(startupProjectChanged(ProjectExplorer::Project *)), this, SLOT(startupProjectChanged())); connect(ProjectExplorer::SessionManager::instance(), SIGNAL(startupProjectChanged(ProjectExplorer::Project *)), this, SLOT(startupProjectChanged()));
@@ -88,8 +103,9 @@ void ProjectFilesystemWidget::createTree(QTreeWidgetItem * ti, const QString & d
QTreeWidgetItem * ni = new QTreeWidgetItem(); QTreeWidgetItem * ni = new QTreeWidgetItem();
ni->setText(0, nit); ni->setText(0, nit);
ni->setIcon(0, Core::FileIconProvider::icon(i)); ni->setIcon(0, Core::FileIconProvider::icon(i));
ni->setData(0, Qt::UserRole, i.absoluteFilePath()); ni->setData(0, roleFullPath, i.absoluteFilePath());
ni->setData(0, Qt::UserRole + 1, i.isDir()); ni->setData(0, roleItemType, i.isDir() ? itDir : itFile);
ni->setData(0, roleIsDir, i.isDir());
item_map[i.absoluteFilePath()] = ni; item_map[i.absoluteFilePath()] = ni;
if (i.isDir()) { if (i.isDir()) {
createTree(ni, dir + QDir::separator() + i.fileName()); createTree(ni, dir + QDir::separator() + i.fileName());
@@ -105,7 +121,7 @@ bool ProjectFilesystemWidget::filterTree(QTreeWidgetItem * ti, const QString & f
for (int i = 0; i < ti->childCount(); ++i) { for (int i = 0; i < ti->childCount(); ++i) {
QTreeWidgetItem * ci = ti->child(i); QTreeWidgetItem * ci = ti->child(i);
QString cit = ci->text(0); QString cit = ci->text(0);
if (ci->data(0, Qt::UserRole + 1).toBool()) { if (ci->data(0, roleIsDir).toBool()) {
if (!filterTree(ci, filter)) { if (!filterTree(ci, filter)) {
ci->setHidden(true); ci->setHidden(true);
continue; continue;
@@ -137,12 +153,12 @@ void ProjectFilesystemWidget::filter() {
void ProjectFilesystemWidget::rememberExpanded(QTreeWidgetItem * ti) { void ProjectFilesystemWidget::rememberExpanded(QTreeWidgetItem * ti) {
//QMessageBox::information(0, ti->data(0, Qt::UserRole).toString(), QString::number(ti->childCount())); //QMessageBox::information(0, ti->data(0, roleFullPath).toString(), QString::number(ti->childCount()));
for (int i = 0; i < ti->childCount(); ++i) { for (int i = 0; i < ti->childCount(); ++i) {
QTreeWidgetItem * ci = ti->child(i); QTreeWidgetItem * ci = ti->child(i);
if (ci->data(0, Qt::UserRole + 1).toBool()) { if (ci->data(0, roleIsDir).toBool()) {
if (ci->isExpanded()) if (ci->isExpanded())
last_expanded << ci->data(0, Qt::UserRole).toString(); last_expanded << ci->data(0, roleFullPath).toString();
rememberExpanded(ci); rememberExpanded(ci);
} }
} }
@@ -152,8 +168,8 @@ void ProjectFilesystemWidget::rememberExpanded(QTreeWidgetItem * ti) {
void ProjectFilesystemWidget::restoreExpanded(QTreeWidgetItem * ti) { void ProjectFilesystemWidget::restoreExpanded(QTreeWidgetItem * ti) {
for (int i = 0; i < ti->childCount(); ++i) { for (int i = 0; i < ti->childCount(); ++i) {
QTreeWidgetItem * ci = ti->child(i); QTreeWidgetItem * ci = ti->child(i);
if (ci->data(0, Qt::UserRole + 1).toBool()) { if (ci->data(0, roleIsDir).toBool()) {
if (last_expanded.contains(ci->data(0, Qt::UserRole).toString())) if (last_expanded.contains(ci->data(0, roleFullPath).toString()))
ci->setExpanded(true); ci->setExpanded(true);
restoreExpanded(ci); restoreExpanded(ci);
} }
@@ -195,8 +211,9 @@ void ProjectFilesystemWidget::projectsChanged() {
ri->setIcon(0, QIcon(logo.fileName())); ri->setIcon(0, QIcon(logo.fileName()));
else else
ri->setIcon(0, Core::FileIconProvider::icon(QFileIconProvider::Folder)); ri->setIcon(0, Core::FileIconProvider::icon(QFileIconProvider::Folder));
ri->setData(0, Qt::UserRole, dir); ri->setData(0, roleFullPath, dir);
ri->setData(0, Qt::UserRole + 1, true); ri->setData(0, roleIsDir, true);
ri->setData(0, roleItemType, itProject);
createTree(ri, dir); createTree(ri, dir);
tree->addTopLevelItem(ri); tree->addTopLevelItem(ri);
} }
@@ -241,7 +258,7 @@ void ProjectFilesystemWidget::startupProjectChanged() {
QTreeWidgetItem * ti = tree->topLevelItem(i); QTreeWidgetItem * ti = tree->topLevelItem(i);
ti->setFont(0, f); ti->setFont(0, f);
if (!sp) continue; if (!sp) continue;
if (sp->projectDirectory().toString() == ti->data(0, Qt::UserRole).toString()) if (sp->projectDirectory().toString() == ti->data(0, roleFullPath).toString())
ti->setFont(0, bf); ti->setFont(0, bf);
} }
} }
@@ -249,8 +266,8 @@ void ProjectFilesystemWidget::startupProjectChanged() {
void ProjectFilesystemWidget::on_tree_itemDoubleClicked(QTreeWidgetItem * item, int) { void ProjectFilesystemWidget::on_tree_itemDoubleClicked(QTreeWidgetItem * item, int) {
if (!item) return; if (!item) return;
QString afp = item->data(0, Qt::UserRole).toString(); QString afp = item->data(0, roleFullPath).toString();
bool dir = item->data(0, Qt::UserRole + 1).toBool(); bool dir = item->data(0, roleIsDir).toBool();
if (dir) return; if (dir) return;
if (afp.isEmpty()) return; if (afp.isEmpty()) return;
Core::EditorManager::openEditor(afp); Core::EditorManager::openEditor(afp);
@@ -268,7 +285,7 @@ void ProjectFilesystemWidget::on_tree_itemClicked(QTreeWidgetItem * item, int co
setExtVariable(); setExtVariable();
return; return;
} }
projectfs_menu_target = QFileInfo(item->data(0, Qt::UserRole).toString()); projectfs_menu_target = QFileInfo(item->data(0, roleFullPath).toString());
setExtVariable(); setExtVariable();
} }
@@ -281,10 +298,25 @@ void ProjectFilesystemWidget::on_tree_customContextMenuRequested(const QPoint &
setExtVariable(); setExtVariable();
return; return;
} }
projectfs_menu_target = QFileInfo(item->data(0, Qt::UserRole).toString()); projectfs_menu_target = QFileInfo(item->data(0, roleFullPath).toString());
setExtVariable(); setExtVariable();
actionOpen_here->setEnabled(!projectfs_menu_target.isDir()); actionOpen_here->setEnabled(!projectfs_menu_target.isDir());
actionOpen_external->setEnabled(!projectfs_menu_target.isDir()); actionOpen_external->setEnabled(!projectfs_menu_target.isDir());
popup_menu.clear();
/*if (item->data(0, roleItemType).toInt() == itProject) {
QString proj_path = item->data(0, roleFullPath).toString();
ProjectExplorer::Project * project = Utils::findOrDefault(ProjectExplorer::SessionManager::projects(),
[proj_path](const ProjectExplorer::Project * p) {return p->containerNode()->path() == proj_path;});
//ProjectExplorer::ProjectTree::instance()->setCurrent
QMenu * contextMenu = Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_PROJECTCONTEXT)->menu();
//contextMenu = Core::ActionManager::actionContainer(Constants::M_FOLDERCONTEXT)->menu();
//contextMenu = Core::ActionManager::actionContainer(Constants::M_FILECONTEXT)->menu();
popup_menu.addActions(contextMenu->actions());
}*/
popup_menu.addActions(this_actions);
popup_menu.popup(tree->mapToGlobal(pos)); popup_menu.popup(tree->mapToGlobal(pos));
} }

View File

@@ -38,6 +38,7 @@ protected:
bool in_proc, need_rebuild; bool in_proc, need_rebuild;
ExtensionSystem::IPlugin * proj_plug; ExtensionSystem::IPlugin * proj_plug;
QMenu popup_menu; QMenu popup_menu;
QList<QAction*> this_actions;
QMap<QString, QTreeWidgetItem*> item_map; QMap<QString, QTreeWidgetItem*> item_map;
QSet<QString> last_expanded; QSet<QString> last_expanded;
FilterDialog filter_dialog; FilterDialog filter_dialog;