mirror of https://github.com/KLayout/klayout.git
WIP: package template selection dialog
Plus some initial package templates (without files).
This commit is contained in:
parent
1353c9dfb0
commit
4a90479187
|
|
@ -0,0 +1,237 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>SaltGrainTemplateSelectionDialog</class>
|
||||||
|
<widget class="QDialog" name="SaltGrainTemplateSelectionDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>401</width>
|
||||||
|
<height>499</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Create Package</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Template</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QListView" name="salt_view">
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>64</width>
|
||||||
|
<height>64</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="selectionRectVisible">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<italic>true</italic>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>(Pick a template with which to initialize your new package)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Fixed</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>10</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Package Name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::NoFrame</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<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="QLineEdit" name="name_edit"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="lay::AlertLogButton" name="name_alert">
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="layResources.qrc">
|
||||||
|
<normaloff>:/warn.png</normaloff>:/warn.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="autoRaise">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>50</weight>
|
||||||
|
<italic>true</italic>
|
||||||
|
<bold>false</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>(Choose a simple name composed of letters, digits and underscores. Use the notation "group/package" to create a package inside a group)</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
<action name="actionNew">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="layResources.qrc">
|
||||||
|
<normaloff>:/add.png</normaloff>:/add.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>New</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>New package</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionDelete">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="layResources.qrc">
|
||||||
|
<normaloff>:/clear.png</normaloff>:/clear.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Delete</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Delete package</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionImport">
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="layResources.qrc">
|
||||||
|
<normaloff>:/import.png</normaloff>:/import.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Import</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Import package</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>lay::AlertLogButton</class>
|
||||||
|
<extends>QToolButton</extends>
|
||||||
|
<header>layLogViewerDialog.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources>
|
||||||
|
<include location="layResources.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>SaltGrainTemplateSelectionDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>273</x>
|
||||||
|
<y>431</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>276</x>
|
||||||
|
<y>448</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>SaltGrainTemplateSelectionDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>351</x>
|
||||||
|
<y>426</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>363</x>
|
||||||
|
<y>445</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
||||||
|
|
@ -99,7 +99,8 @@ FORMS = \
|
||||||
TechSaveOptionsEditorPage.ui \
|
TechSaveOptionsEditorPage.ui \
|
||||||
MainConfigPage7.ui \
|
MainConfigPage7.ui \
|
||||||
SaltManagerDialog.ui \
|
SaltManagerDialog.ui \
|
||||||
SaltGrainPropertiesDialog.ui
|
SaltGrainPropertiesDialog.ui \
|
||||||
|
SaltGrainTemplateSelectionDialog.ui
|
||||||
|
|
||||||
SOURCES = \
|
SOURCES = \
|
||||||
gsiDeclLayApplication.cc \
|
gsiDeclLayApplication.cc \
|
||||||
|
|
@ -156,6 +157,7 @@ RESOURCES = layBuildInMacros.qrc \
|
||||||
layLayoutStatistics.qrc \
|
layLayoutStatistics.qrc \
|
||||||
layMacroTemplates.qrc \
|
layMacroTemplates.qrc \
|
||||||
layResources.qrc \
|
layResources.qrc \
|
||||||
|
laySaltTemplates.qrc
|
||||||
|
|
||||||
INCLUDEPATH += ../tl ../gsi ../db ../rdb ../laybasic ../ant ../img ../edt
|
INCLUDEPATH += ../tl ../gsi ../db ../rdb ../laybasic ../ant ../img ../edt
|
||||||
DEPENDPATH += ../tl ../gsi ../db ../rdb ../laybasic ../ant ../img ../edt
|
DEPENDPATH += ../tl ../gsi ../db ../rdb ../laybasic ../ant ../img ../edt
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,9 @@ Salt::grain_by_name (const std::string &name)
|
||||||
void
|
void
|
||||||
Salt::add_location (const std::string &path)
|
Salt::add_location (const std::string &path)
|
||||||
{
|
{
|
||||||
|
tl_assert (! path.empty ());
|
||||||
|
|
||||||
|
if (path[0] != ':') {
|
||||||
// do nothing if the collection is already there
|
// do nothing if the collection is already there
|
||||||
QFileInfo fi (tl::to_qstring (path));
|
QFileInfo fi (tl::to_qstring (path));
|
||||||
for (lay::SaltGrains::collection_iterator g = m_root.begin_collections (); g != m_root.end_collections (); ++g) {
|
for (lay::SaltGrains::collection_iterator g = m_root.begin_collections (); g != m_root.end_collections (); ++g) {
|
||||||
|
|
@ -88,6 +91,7 @@ Salt::add_location (const std::string &path)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lay::SaltGrains gg = lay::SaltGrains::from_path (path);
|
lay::SaltGrains gg = lay::SaltGrains::from_path (path);
|
||||||
m_root.add_collection (gg);
|
m_root.add_collection (gg);
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
|
#include <QResource>
|
||||||
|
|
||||||
namespace lay
|
namespace lay
|
||||||
{
|
{
|
||||||
|
|
@ -326,8 +327,28 @@ SaltGrain::is_readonly () const
|
||||||
void
|
void
|
||||||
SaltGrain::load (const std::string &p)
|
SaltGrain::load (const std::string &p)
|
||||||
{
|
{
|
||||||
|
tl_assert (!p.empty ());
|
||||||
|
|
||||||
|
if (p[0] != ':') {
|
||||||
|
|
||||||
tl::XMLFileSource source (p);
|
tl::XMLFileSource source (p);
|
||||||
xml_struct.parse (source, *this);
|
xml_struct.parse (source, *this);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
QResource res (tl::to_qstring (p));
|
||||||
|
QByteArray data;
|
||||||
|
if (res.isCompressed ()) {
|
||||||
|
data = qUncompress ((const unsigned char *)res.data (), (int)res.size ());
|
||||||
|
} else {
|
||||||
|
data = QByteArray ((const char *)res.data (), (int)res.size ());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string str_data (data.constData (), data.size ());
|
||||||
|
tl::XMLStringSource source (str_data);
|
||||||
|
xml_struct.parse (source, *this);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -376,9 +397,15 @@ SaltGrain::from_url (const std::string &url)
|
||||||
bool
|
bool
|
||||||
SaltGrain::is_grain (const std::string &path)
|
SaltGrain::is_grain (const std::string &path)
|
||||||
{
|
{
|
||||||
|
tl_assert (! path.empty ());
|
||||||
|
|
||||||
|
if (path[0] != ':') {
|
||||||
QDir dir (tl::to_qstring (path));
|
QDir dir (tl::to_qstring (path));
|
||||||
QString gf = dir.filePath (tl::to_qstring (grain_filename));
|
QString gf = dir.filePath (tl::to_qstring (grain_filename));
|
||||||
return QFileInfo (gf).exists ();
|
return QFileInfo (gf).exists ();
|
||||||
|
} else {
|
||||||
|
return QResource (tl::to_qstring (path + "/" + grain_filename)).isValid ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
#include <QResource>
|
||||||
|
|
||||||
namespace lay
|
namespace lay
|
||||||
{
|
{
|
||||||
|
|
@ -129,12 +130,39 @@ SaltGrains::is_readonly () const
|
||||||
return QFileInfo (tl::to_qstring (path ())).isWritable ();
|
return QFileInfo (tl::to_qstring (path ())).isWritable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A helper class required because directory traversal is not supported by QResource directly
|
||||||
|
*/
|
||||||
|
class OpenResource
|
||||||
|
: public QResource
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using QResource::isDir;
|
||||||
|
using QResource::isFile;
|
||||||
|
using QResource::children;
|
||||||
|
|
||||||
|
OpenResource (const QString &path)
|
||||||
|
: QResource (path)
|
||||||
|
{
|
||||||
|
// .. nothing yet ..
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
SaltGrains
|
SaltGrains
|
||||||
SaltGrains::from_path (const std::string &path, const std::string &prefix)
|
SaltGrains::from_path (const std::string &path, const std::string &prefix)
|
||||||
{
|
{
|
||||||
|
tl_assert (! path.empty ());
|
||||||
|
|
||||||
SaltGrains grains;
|
SaltGrains grains;
|
||||||
grains.set_path (path);
|
grains.set_path (path);
|
||||||
|
|
||||||
|
if (path[0] != ':') {
|
||||||
|
|
||||||
QDir dir (tl::to_qstring (path));
|
QDir dir (tl::to_qstring (path));
|
||||||
QStringList entries = dir.entryList (QDir::NoDotAndDotDot | QDir::Dirs, QDir::Name);
|
QStringList entries = dir.entryList (QDir::NoDotAndDotDot | QDir::Dirs, QDir::Name);
|
||||||
for (QStringList::const_iterator e = entries.begin (); e != entries.end (); ++e) {
|
for (QStringList::const_iterator e = entries.begin (); e != entries.end (); ++e) {
|
||||||
|
|
@ -164,6 +192,44 @@ SaltGrains::from_path (const std::string &path, const std::string &prefix)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
OpenResource resource (tl::to_qstring (path));
|
||||||
|
if (resource.isDir ()) {
|
||||||
|
|
||||||
|
QStringList templ_dir = resource.children ();
|
||||||
|
for (QStringList::const_iterator t = templ_dir.begin (); t != templ_dir.end (); ++t) {
|
||||||
|
|
||||||
|
std::string new_prefix = prefix;
|
||||||
|
if (! new_prefix.empty ()) {
|
||||||
|
new_prefix += "/";
|
||||||
|
}
|
||||||
|
new_prefix += tl::to_string (*t);
|
||||||
|
|
||||||
|
std::string epath = path + "/" + tl::to_string (*t);
|
||||||
|
|
||||||
|
if (SaltGrain::is_grain (epath)) {
|
||||||
|
try {
|
||||||
|
SaltGrain g (SaltGrain::from_path (epath));
|
||||||
|
g.set_name (new_prefix);
|
||||||
|
grains.add_grain (g);
|
||||||
|
} catch (...) {
|
||||||
|
// ignore errors (TODO: what to do here?)
|
||||||
|
}
|
||||||
|
} else if (OpenResource (tl::to_qstring (epath)).isDir ()) {
|
||||||
|
SaltGrains c = SaltGrains::from_path (epath, new_prefix);
|
||||||
|
c.set_name (new_prefix);
|
||||||
|
if (! c.is_empty ()) {
|
||||||
|
grains.add_collection (c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return grains;
|
return grains;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
#include "laySaltManagerDialog.h"
|
#include "laySaltManagerDialog.h"
|
||||||
#include "laySaltGrainPropertiesDialog.h"
|
#include "laySaltGrainPropertiesDialog.h"
|
||||||
#include "laySalt.h"
|
#include "laySalt.h"
|
||||||
|
#include "ui_SaltGrainTemplateSelectionDialog.h"
|
||||||
#include "tlString.h"
|
#include "tlString.h"
|
||||||
|
|
||||||
#include <QAbstractItemModel>
|
#include <QAbstractItemModel>
|
||||||
|
|
@ -33,6 +34,7 @@
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
|
#include <QResource>
|
||||||
|
|
||||||
namespace lay
|
namespace lay
|
||||||
{
|
{
|
||||||
|
|
@ -219,6 +221,56 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A tiny dialog to select a template and a name for the grain
|
||||||
|
*/
|
||||||
|
class SaltGrainTemplateSelectionDialog
|
||||||
|
: public QDialog, private Ui::SaltGrainTemplateSelectionDialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SaltGrainTemplateSelectionDialog (QWidget *parent)
|
||||||
|
: QDialog (parent)
|
||||||
|
{
|
||||||
|
Ui::SaltGrainTemplateSelectionDialog::setupUi (this);
|
||||||
|
|
||||||
|
m_salt_templates.add_location (":/salt_templates");
|
||||||
|
salt_view->setModel (new SaltModel (this, &m_salt_templates));
|
||||||
|
salt_view->setItemDelegate (new SaltItemDelegate (this));
|
||||||
|
salt_view->setCurrentIndex (salt_view->model ()->index (0, 0, QModelIndex ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
lay::SaltGrain templ () const
|
||||||
|
{
|
||||||
|
SaltModel *model = dynamic_cast<SaltModel *> (salt_view->model ());
|
||||||
|
tl_assert (model != 0);
|
||||||
|
|
||||||
|
SaltGrain *g = model->grain_from_index (salt_view->currentIndex ());
|
||||||
|
tl_assert (g != 0);
|
||||||
|
|
||||||
|
g->set_name (tl::to_string (name_edit->text ().simplified ()));
|
||||||
|
|
||||||
|
return *g;
|
||||||
|
}
|
||||||
|
|
||||||
|
void accept ()
|
||||||
|
{
|
||||||
|
name_alert->clear ();
|
||||||
|
std::string name = tl::to_string (name_edit->text ().simplified ());
|
||||||
|
if (name.empty ()) {
|
||||||
|
name_alert->error () << tr ("Name must not be empty");
|
||||||
|
} else if (! SaltGrain::valid_name (name)) {
|
||||||
|
name_alert->error () << tr ("Name is not valid (must be composed of letters, digits or underscores.\nGroups and names need to be separated with slashes.");
|
||||||
|
} else {
|
||||||
|
QDialog::accept ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
lay::Salt m_salt_templates;
|
||||||
|
};
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------
|
||||||
// SaltManager implementation
|
// SaltManager implementation
|
||||||
|
|
||||||
|
|
@ -242,6 +294,9 @@ SaltManagerDialog::SaltManagerDialog (QWidget *parent)
|
||||||
mp_properties_dialog = new lay::SaltGrainPropertiesDialog (this);
|
mp_properties_dialog = new lay::SaltGrainPropertiesDialog (this);
|
||||||
|
|
||||||
connect (edit_button, SIGNAL (clicked ()), this, SLOT (edit_properties ()));
|
connect (edit_button, SIGNAL (clicked ()), this, SLOT (edit_properties ()));
|
||||||
|
connect (create_button, SIGNAL (clicked ()), this, SLOT (create_grain ()));
|
||||||
|
connect (delete_button, SIGNAL (clicked ()), this, SLOT (delete_grain ()));
|
||||||
|
connect (install_button, SIGNAL (clicked ()), this, SLOT (install_grain ()));
|
||||||
|
|
||||||
// @@@
|
// @@@
|
||||||
salt = lay::Salt (); salt_initialized = false;
|
salt = lay::Salt (); salt_initialized = false;
|
||||||
|
|
@ -279,6 +334,58 @@ SaltManagerDialog::edit_properties ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @@@
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A helper class required because directory traversal is not supported by QResource directly
|
||||||
|
*/
|
||||||
|
class OpenResource
|
||||||
|
: public QResource
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using QResource::isDir;
|
||||||
|
using QResource::isFile;
|
||||||
|
using QResource::children;
|
||||||
|
|
||||||
|
OpenResource (const QString &path)
|
||||||
|
: QResource (path)
|
||||||
|
{
|
||||||
|
// .. nothing yet ..
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
// @@@
|
||||||
|
|
||||||
|
void
|
||||||
|
SaltManagerDialog::create_grain ()
|
||||||
|
{
|
||||||
|
SaltGrainTemplateSelectionDialog temp_dialog (this);
|
||||||
|
if (temp_dialog.exec ()) {
|
||||||
|
|
||||||
|
// @@@
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SaltManagerDialog::delete_grain ()
|
||||||
|
{
|
||||||
|
|
||||||
|
// @@@
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SaltManagerDialog::install_grain ()
|
||||||
|
{
|
||||||
|
|
||||||
|
// @@@
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SaltManagerDialog::salt_changed ()
|
SaltManagerDialog::salt_changed ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,21 @@ private slots:
|
||||||
*/
|
*/
|
||||||
void edit_properties ();
|
void edit_properties ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when the "edit" button is pressed
|
||||||
|
*/
|
||||||
|
void create_grain ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when the "delete" button is pressed
|
||||||
|
*/
|
||||||
|
void delete_grain ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Called when the "install" button is pressed
|
||||||
|
*/
|
||||||
|
void install_grain ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
lay::Salt *mp_salt;
|
lay::Salt *mp_salt;
|
||||||
bool m_current_changed_enabled;
|
bool m_current_changed_enabled;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
<RCC>
|
||||||
|
<qresource prefix="/salt_templates">
|
||||||
|
</qresource>
|
||||||
|
|
||||||
|
<!-- font template -->
|
||||||
|
<qresource prefix="/salt_templates/font">
|
||||||
|
<file alias="grain.xml">salt_templates/font/grain.xml</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/salt_templates/font/fonts">
|
||||||
|
</qresource>
|
||||||
|
|
||||||
|
<!-- lib template -->
|
||||||
|
<qresource prefix="/salt_templates/lib">
|
||||||
|
<file alias="grain.xml">salt_templates/lib/grain.xml</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/salt_templates/lib/libraries">
|
||||||
|
</qresource>
|
||||||
|
|
||||||
|
<!-- pcell_lib template -->
|
||||||
|
<qresource prefix="/salt_templates/pcell_lib">
|
||||||
|
<file alias="grain.xml">salt_templates/pcell_lib/grain.xml</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/salt_templates/pcell_lib/macros">
|
||||||
|
</qresource>
|
||||||
|
|
||||||
|
<!-- macro template -->
|
||||||
|
<qresource prefix="/salt_templates/macro">
|
||||||
|
<file alias="grain.xml">salt_templates/macro/grain.xml</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/salt_templates/macro/macros">
|
||||||
|
</qresource>
|
||||||
|
|
||||||
|
<!-- pymacro template -->
|
||||||
|
<qresource prefix="/salt_templates/pymacro">
|
||||||
|
<file alias="grain.xml">salt_templates/pymacro/grain.xml</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/salt_templates/pymacro/pymacros">
|
||||||
|
</qresource>
|
||||||
|
|
||||||
|
<!-- tech template -->
|
||||||
|
<qresource prefix="/salt_templates/tech">
|
||||||
|
<file alias="grain.xml">salt_templates/tech/grain.xml</file>
|
||||||
|
</qresource>
|
||||||
|
<qresource prefix="/salt_templates/tech/tech">
|
||||||
|
</qresource>
|
||||||
|
|
||||||
|
</RCC>
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<salt-grain>
|
||||||
|
<name>font</name>
|
||||||
|
<version>0.0</version>
|
||||||
|
<title>Font package</title>
|
||||||
|
<doc>This template provides a font for the Basic.TEXT PCell</doc>
|
||||||
|
<doc-url/>
|
||||||
|
<url/>
|
||||||
|
<license>GPLv3</license>
|
||||||
|
<author/>
|
||||||
|
<author-contact/>
|
||||||
|
<authored-time/>
|
||||||
|
<installed-time/>
|
||||||
|
<icon/>
|
||||||
|
<screenshot/>
|
||||||
|
</salt-grain>
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<salt-grain>
|
||||||
|
<name>lib</name>
|
||||||
|
<version>0.0</version>
|
||||||
|
<title>Static Library</title>
|
||||||
|
<doc>This template provides a static library</doc>
|
||||||
|
<doc-url/>
|
||||||
|
<url/>
|
||||||
|
<license>GPLv3</license>
|
||||||
|
<author/>
|
||||||
|
<author-contact/>
|
||||||
|
<authored-time/>
|
||||||
|
<installed-time/>
|
||||||
|
<icon/>
|
||||||
|
<screenshot/>
|
||||||
|
</salt-grain>
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<salt-grain>
|
||||||
|
<name>macro</name>
|
||||||
|
<version>0.0</version>
|
||||||
|
<title>Ruby Macro</title>
|
||||||
|
<doc>This template provides a Ruby macro</doc>
|
||||||
|
<doc-url/>
|
||||||
|
<url/>
|
||||||
|
<license>GPLv3</license>
|
||||||
|
<author/>
|
||||||
|
<author-contact/>
|
||||||
|
<authored-time/>
|
||||||
|
<installed-time/>
|
||||||
|
<icon/>
|
||||||
|
<screenshot/>
|
||||||
|
</salt-grain>
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<salt-grain>
|
||||||
|
<name>macro</name>
|
||||||
|
<version>0.0</version>
|
||||||
|
<title>PCell library</title>
|
||||||
|
<doc>This template provides a PCell library implemented in Ruby</doc>
|
||||||
|
<doc-url/>
|
||||||
|
<url/>
|
||||||
|
<license>GPLv3</license>
|
||||||
|
<author/>
|
||||||
|
<author-contact/>
|
||||||
|
<authored-time/>
|
||||||
|
<installed-time/>
|
||||||
|
<icon/>
|
||||||
|
<screenshot/>
|
||||||
|
</salt-grain>
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<salt-grain>
|
||||||
|
<name>macro</name>
|
||||||
|
<version>0.0</version>
|
||||||
|
<title>Python Macro</title>
|
||||||
|
<doc>This template provides a Python macro</doc>
|
||||||
|
<doc-url/>
|
||||||
|
<url/>
|
||||||
|
<license>GPLv3</license>
|
||||||
|
<author/>
|
||||||
|
<author-contact/>
|
||||||
|
<authored-time/>
|
||||||
|
<installed-time/>
|
||||||
|
<icon/>
|
||||||
|
<screenshot/>
|
||||||
|
</salt-grain>
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<salt-grain>
|
||||||
|
<name>macro</name>
|
||||||
|
<version>0.0</version>
|
||||||
|
<title>Technology</title>
|
||||||
|
<doc>This template provides a technology</doc>
|
||||||
|
<doc-url/>
|
||||||
|
<url/>
|
||||||
|
<license>GPLv3</license>
|
||||||
|
<author/>
|
||||||
|
<author-contact/>
|
||||||
|
<authored-time/>
|
||||||
|
<installed-time/>
|
||||||
|
<icon/>
|
||||||
|
<screenshot/>
|
||||||
|
</salt-grain>
|
||||||
Loading…
Reference in New Issue