Gui Bug fix: Tabbed support for system-wide macros

===============================================

What?
Implementation of triplus' idea of making user-specific and system-specific macros
having a different list in different tabs.

Fixing of a bug related to the previous "separator".

Suggested terminology.
This commit is contained in:
Abdullah Tahiri 2015-12-19 15:07:31 +01:00 committed by wmayer
parent f1a3276d37
commit 3d551450a2
3 changed files with 298 additions and 124 deletions

View File

@ -1,60 +1,138 @@
<ui version="4.0" >
<author></author>
<comment></comment>
<exportmacro></exportmacro>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Gui::Dialog::DlgMacroExecute</class>
<widget class="QDialog" name="Gui::Dialog::DlgMacroExecute" >
<property name="geometry" >
<widget class="QDialog" name="Gui::Dialog::DlgMacroExecute">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>344</width>
<height>346</height>
<width>640</width>
<height>480</height>
</rect>
</property>
<property name="windowTitle" >
<property name="windowTitle">
<string>Execute macro</string>
</property>
<property name="modal" >
<property name="modal">
<bool>true</bool>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<layout class="QGridLayout">
<property name="leftMargin">
<number>9</number>
</property>
<property name="spacing" >
<property name="topMargin">
<number>9</number>
</property>
<property name="rightMargin">
<number>9</number>
</property>
<property name="bottomMargin">
<number>9</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0" >
<layout class="QGridLayout" >
<property name="margin" >
<item row="0" column="0">
<layout class="QGridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="spacing" >
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0" >
<widget class="QGroupBox" name="MacroNameGroup" >
<property name="title" >
<item row="0" column="0">
<widget class="QGroupBox" name="MacroNameGroup">
<property name="title">
<string>Macro name:</string>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<layout class="QGridLayout">
<property name="leftMargin">
<number>9</number>
</property>
<property name="spacing" >
<property name="topMargin">
<number>9</number>
</property>
<property name="rightMargin">
<number>9</number>
</property>
<property name="bottomMargin">
<number>9</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<item row="1" column="0" >
<widget class="QTreeWidget" name="macroListBox" >
<property name="rootIsDecorated" >
<bool>false</bool>
<item row="1" column="0">
<widget class="QTabWidget" name="tabMacroWidget">
<property name="tabPosition">
<enum>QTabWidget::North</enum>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="userSpecificTab">
<attribute name="title">
<string>User macros</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTreeWidget" name="userMacroListBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="systemWideTag">
<attribute name="title">
<string>System macros</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTreeWidget" name="systemMacroListBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="0" column="0" >
<widget class="QLineEdit" name="LineEditMacroName" >
<property name="enabled" >
<item row="0" column="0">
<widget class="QLineEdit" name="LineEditMacroName">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
@ -62,21 +140,30 @@
</layout>
</widget>
</item>
<item row="1" column="0" >
<widget class="QGroupBox" name="DestinationGroup" >
<property name="title" >
<string>Macro destination:</string>
<item row="1" column="0">
<widget class="QGroupBox" name="DestinationGroup">
<property name="title">
<string>User macros location:</string>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<layout class="QGridLayout">
<property name="leftMargin">
<number>9</number>
</property>
<property name="spacing" >
<property name="topMargin">
<number>9</number>
</property>
<property name="rightMargin">
<number>9</number>
</property>
<property name="bottomMargin">
<number>9</number>
</property>
<property name="spacing">
<number>6</number>
</property>
<item row="0" column="0" >
<widget class="Gui::FileChooser" name="fileChooser" >
<property name="focusPolicy" >
<item row="0" column="0">
<widget class="Gui::FileChooser" name="fileChooser" native="true">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="mode" >
@ -87,40 +174,49 @@
</layout>
</widget>
</item>
<item row="0" column="1" >
<layout class="QVBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<item row="0" column="1">
<layout class="QVBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="executeButton" >
<property name="enabled" >
<widget class="QPushButton" name="executeButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text" >
<property name="text">
<string>Execute</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="closeButton" >
<property name="text" >
<widget class="QPushButton" name="closeButton">
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation" >
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" >
<property name="sizeHint" stdset="0">
<size>
<width>77</width>
<height>34</height>
@ -129,41 +225,41 @@
</spacer>
</item>
<item>
<widget class="QPushButton" name="createButton" >
<property name="enabled" >
<widget class="QPushButton" name="createButton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text" >
<property name="text">
<string>Create</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="deleteButton" >
<property name="enabled" >
<widget class="QPushButton" name="deleteButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text" >
<property name="text">
<string>Delete</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="editButton" >
<property name="enabled" >
<widget class="QPushButton" name="editButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text" >
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation" >
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" >
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
@ -177,19 +273,16 @@
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11" />
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>Gui::FileChooser</class>
<extends>QWidget</extends>
<header>Gui/FileDialog.h</header>
<container>0</container>
<pixmap></pixmap>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>LineEditMacroName</tabstop>
<tabstop>macroListBox</tabstop>
<tabstop>executeButton</tabstop>
<tabstop>closeButton</tabstop>
<tabstop>createButton</tabstop>
@ -205,27 +298,43 @@
<receiver>Gui::Dialog::DlgMacroExecute</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel" >
<hint type="sourcelabel">
<x>268</x>
<y>42</y>
</hint>
<hint type="destinationlabel" >
<hint type="destinationlabel">
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>macroListBox</sender>
<sender>userMacroListBox</sender>
<signal>itemDoubleClicked(QTreeWidgetItem*,int)</signal>
<receiver>Gui::Dialog::DlgMacroExecute</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel" >
<hint type="sourcelabel">
<x>110</x>
<y>110</y>
</hint>
<hint type="destinationlabel" >
<hint type="destinationlabel">
<x>281</x>
<y>281</y>
</hint>
</hints>
</connection>
<connection>
<sender>systemMacroListBox</sender>
<signal>itemDoubleClicked(QTreeWidgetItem*,int)</signal>
<receiver>Gui::Dialog::DlgMacroExecute</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>110</x>
<y>110</y>
</hint>
<hint type="destinationlabel">
<x>281</x>
<y>281</y>
</hint>
@ -237,11 +346,11 @@
<receiver>Gui::Dialog::DlgMacroExecute</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel" >
<hint type="sourcelabel">
<x>317</x>
<y>16</y>
</hint>
<hint type="destinationlabel" >
<hint type="destinationlabel">
<x>302</x>
<y>319</y>
</hint>

View File

@ -50,15 +50,13 @@ namespace Gui {
class MacroItem : public QTreeWidgetItem
{
public:
MacroItem(QTreeWidget * widget, bool systemwide, bool separator=false)
MacroItem(QTreeWidget * widget, bool systemwide)
: QTreeWidgetItem(widget),
systemWide(systemwide),
Separator(separator){}
systemWide(systemwide){}
~MacroItem(){}
bool systemWide;
bool Separator;
};
}
}
@ -85,8 +83,10 @@ DlgMacroExecuteImp::DlgMacroExecuteImp( QWidget* parent, Qt::WindowFlags fl )
// Fill the List box
QStringList labels; labels << tr("Macros");
macroListBox->setHeaderLabels(labels);
macroListBox->header()->hide();
userMacroListBox->setHeaderLabels(labels);
userMacroListBox->header()->hide();
systemMacroListBox->setHeaderLabels(labels);
systemMacroListBox->header()->hide();
fillUpList();
}
@ -103,59 +103,112 @@ DlgMacroExecuteImp::~DlgMacroExecuteImp()
*/
void DlgMacroExecuteImp::fillUpList(void)
{
// lists all files in macro path
QDir dir(this->macroPath, QLatin1String("*.FCMacro *.py"));
// fill up with the directory
macroListBox->clear();
userMacroListBox->clear();
for (unsigned int i=0; i<dir.count(); i++ ) {
MacroItem* item = new MacroItem(macroListBox,false);
item->setText(0, dir[i]);
MacroItem* item = new MacroItem(userMacroListBox,false);
item->setText(0, dir[i]);
}
QString dirstr = QString::fromUtf8(App::GetApplication().getHomePath()) + QString::fromUtf8("Macro");
dir = QDir(dirstr, QLatin1String("*.FCMacro *.py"));
if(dir.exists()) {
MacroItem* item = new MacroItem(macroListBox,false,true);
item->setText(0, tr("----- system-wide macros -----"));
for (unsigned int i=0; i<dir.count(); i++ ) {
MacroItem* item = new MacroItem(macroListBox,true);
item->setText(0, dir[i]);
}
systemMacroListBox->clear();
if(dir.exists()) {
for (unsigned int i=0; i<dir.count(); i++ ) {
MacroItem* item = new MacroItem(systemMacroListBox,true);
item->setText(0, dir[i]);
}
}
}
/**
* Selects a macro file in the list view.
*/
void DlgMacroExecuteImp::on_macroListBox_currentItemChanged(QTreeWidgetItem* item)
void DlgMacroExecuteImp::on_userMacroListBox_currentItemChanged(QTreeWidgetItem* item)
{
if (item) {
MacroItem * mitem = static_cast<MacroItem *>(item);
if(!mitem->Separator) {
LineEditMacroName->setText(item->text(0));
if(!mitem->systemWide) {
executeButton->setEnabled(true);
editButton->setEnabled(true);
deleteButton->setEnabled(true);
}
else {
executeButton->setEnabled(true);
editButton->setEnabled(false);
deleteButton->setEnabled(false);
}
}
else {
LineEditMacroName->setText(QString::fromLatin1(""));
executeButton->setEnabled(false);
editButton->setEnabled(false);
deleteButton->setEnabled(false);
}
LineEditMacroName->setText(item->text(0));
executeButton->setEnabled(true);
editButton->setEnabled(true);
deleteButton->setEnabled(true);
createButton->setEnabled(true);
}
else {
executeButton->setEnabled(false);
editButton->setEnabled(false);
deleteButton->setEnabled(false);
createButton->setEnabled(true);
}
}
void DlgMacroExecuteImp::on_systemMacroListBox_currentItemChanged(QTreeWidgetItem* item)
{
if (item) {
LineEditMacroName->setText(item->text(0));
executeButton->setEnabled(true);
editButton->setEnabled(false);
deleteButton->setEnabled(false);
createButton->setEnabled(false);
}
else {
executeButton->setEnabled(false);
editButton->setEnabled(false);
deleteButton->setEnabled(false);
createButton->setEnabled(false);
}
}
void DlgMacroExecuteImp::on_tabMacroWidget_currentChanged(int index)
{
QTreeWidgetItem* item;
if(index == 0) { //user-specific
item = userMacroListBox->currentItem();
if(item) {
executeButton->setEnabled(true);
editButton->setEnabled(true);
deleteButton->setEnabled(true);
createButton->setEnabled(true);
}
else {
executeButton->setEnabled(false);
editButton->setEnabled(false);
deleteButton->setEnabled(false);
createButton->setEnabled(true);
}
}
else { //index==1 system-wide
item = systemMacroListBox->currentItem();
if(item) {
executeButton->setEnabled(true);
editButton->setEnabled(false);
deleteButton->setEnabled(false);
createButton->setEnabled(false);
}
else {
executeButton->setEnabled(false);
editButton->setEnabled(false);
deleteButton->setEnabled(false);
createButton->setEnabled(false);
}
}
if (item) {
LineEditMacroName->setText(item->text(0));
}
else {
LineEditMacroName->setText(QString::fromLatin1(""));
}
}
@ -164,7 +217,17 @@ void DlgMacroExecuteImp::on_macroListBox_currentItemChanged(QTreeWidgetItem* ite
*/
void DlgMacroExecuteImp::accept()
{
QTreeWidgetItem* item = macroListBox->currentItem();
QTreeWidgetItem* item;
int index = tabMacroWidget->currentIndex();
if(index == 0) { //user-specific
item = userMacroListBox->currentItem();
}
else {
//index == 1 system-wide
item = systemMacroListBox->currentItem();
}
if (!item) return;
QDialog::accept();
@ -216,7 +279,7 @@ void DlgMacroExecuteImp::on_fileChooser_fileNameChanged(const QString& fn)
*/
void DlgMacroExecuteImp::on_editButton_clicked()
{
QTreeWidgetItem* item = macroListBox->currentItem();
QTreeWidgetItem* item = userMacroListBox->currentItem();
if (!item) return;
MacroItem * mitem = static_cast<MacroItem *>(item);
@ -276,7 +339,7 @@ void DlgMacroExecuteImp::on_createButton_clicked()
/** Deletes the selected macro file from your harddisc. */
void DlgMacroExecuteImp::on_deleteButton_clicked()
{
QTreeWidgetItem* item = macroListBox->currentItem();
QTreeWidgetItem* item = userMacroListBox->currentItem();
if (!item) return;
MacroItem * mitem = static_cast<MacroItem *>(item);
@ -295,8 +358,8 @@ void DlgMacroExecuteImp::on_deleteButton_clicked()
{
QDir dir(this->macroPath);
dir.remove(fn);
int index = macroListBox->indexOfTopLevelItem(item);
macroListBox->takeTopLevelItem(index);
int index = userMacroListBox->indexOfTopLevelItem(item);
userMacroListBox->takeTopLevelItem(index);
delete item;
}
}

View File

@ -52,7 +52,9 @@ public Q_SLOTS:
void on_editButton_clicked();
protected Q_SLOTS:
void on_macroListBox_currentItemChanged(QTreeWidgetItem*);
void on_userMacroListBox_currentItemChanged(QTreeWidgetItem*);
void on_systemMacroListBox_currentItemChanged(QTreeWidgetItem*);
void on_tabMacroWidget_currentChanged(int index);
protected:
void fillUpList(void);