+
+6. LaTeX export
+
+Set all_latex=1 in the variables view to let the beamer and pdf templates use LaTeX commands.
+
+
+
+
+
+7. Diagram size
+
+The size of the diagrams exported can be tuned by specific values in the variables view:
+diagram_width=200
+diagram_height=500
+
+
diff -Nru semantik-0.7.3/src/data_control.cpp semantik-0.8.3/src/data_control.cpp
--- semantik-0.7.3/src/data_control.cpp 2009-08-30 11:35:35.000000000 +0000
+++ semantik-0.8.3/src/data_control.cpp 1970-01-01 00:00:00.000000000 +0000
@@ -1,1264 +0,0 @@
-// Thomas Nagy 2007-2009 GPLV3
-
-#include
-
-%: include
- #include
-#include
- #include
- %: include
- #include
-#include
-%:include\
-
-#include
- #include
- #include
-/*
- */ #include
- #include
-#include
-/*
- */ %: include "con.h"
- #include
- #include "sembind.h"
- #include "data_item.h"
- %: include "data_control.h"
-
-class semantik_reader : public QXmlDefaultHandler
-{
- public:
- semantik_reader(data_control*);
-
- //private:
- QString m_sBuf;
- int m_iVersion;
- data_control *m_oControl;
- int m_iId;
-
- //public:
- bool startElement(const QString&, const QString&, const QString&, const QXmlAttributes&);
- bool endElement(const QString&, const QString&, const QString&);
- bool characters(const QString &i_sStr);
-
-};
-
-semantik_reader::semantik_reader(data_control *i_oControl)
-{
- m_oControl = i_oControl;
-}
-
-bool semantik_reader::startElement(const QString&, const QString&, const QString& i_sName, const QXmlAttributes& i_oAttrs)
-{
- if (i_sName == notr("info"))
- {
- //m_oControl->m_sName = i_oAttrs.value("name");
- //m_oControl->m_sFirstName = i_oAttrs.value("fname");
- //m_oControl->m_sOrganization = i_oAttrs.value("organization");
- //m_oControl->m_sEmail = i_oAttrs.value("email");
- m_oControl->m_sHints = i_oAttrs.value(notr("hints"));
-
- if (i_oAttrs.value(notr("location")).size()) m_oControl->m_sOutDir = i_oAttrs.value(notr("location"));
- if (i_oAttrs.value(notr("dir")).size()) m_oControl->m_sOutProject = i_oAttrs.value(notr("dir"));
- if (i_oAttrs.value(notr("output")).size()) m_oControl->m_sOutTemplate = i_oAttrs.value(notr("output"));
- }
- else if (i_sName == notr("link"))
- {
- int a = i_oAttrs.value(notr("p")).toInt();
- int b = i_oAttrs.value(notr("v")).toInt();
- if (!m_oControl->m_oItems.contains(a)) return false;
- if (!m_oControl->m_oItems.contains(b)) return false;
- m_oControl->link_items(a, b);
- }
- else if (i_sName == notr("tblsettings"))
- {
- data_item *l_oItem = m_oControl->m_oItems.value(m_iId);
- l_oItem->m_iNumRows = i_oAttrs.value(notr("rows")).toInt();
- l_oItem->m_iNumCols = i_oAttrs.value(notr("cols")).toInt();
- }
- else if (i_sName == notr("tbl"))
- {
- data_item *l_oItem = m_oControl->m_oItems.value(m_iId);
- data_table_item l_o;
- l_o.m_iRow = i_oAttrs.value(notr("row")).toInt();
- l_o.m_iCol = i_oAttrs.value(notr("col")).toInt();
- l_o.m_sText = i_oAttrs.value(notr("text"));
- l_oItem->m_oTableData.push_back(l_o);
- }
- else if (i_sName == notr("item"))
- {
- m_iId = i_oAttrs.value(notr("id")).toInt();
- if (m_iId <= NO_ITEM) return false;
-
- m_oControl->add_item(NO_ITEM, m_iId);
-
- data_item *l_oItem = m_oControl->m_oItems.value(m_iId);
- l_oItem->m_sSummary = i_oAttrs.value(notr("summary"));
- l_oItem->m_sText = i_oAttrs.value(notr("text"));
- l_oItem->m_iTextLength = i_oAttrs.value(notr("len")).toInt();
- l_oItem->m_sComment = i_oAttrs.value(notr("comment"));
-
- l_oItem->m_sPicLocation = i_oAttrs.value(notr("pic_location"));
- l_oItem->m_sPicCaption = i_oAttrs.value(notr("pic_caption"));
- l_oItem->m_sPicComment = i_oAttrs.value(notr("pic_comment"));
-
- l_oItem->m_iDataType = i_oAttrs.value(notr("data")).toInt();
- if (l_oItem->m_iDataType == 0) l_oItem->m_iDataType = view_text;
-
- l_oItem->m_sHints = i_oAttrs.value(notr("hints"));
-
- l_oItem->m_iNumRows = i_oAttrs.value(notr("tbl_rows")).toInt();
- l_oItem->m_iNumCols = i_oAttrs.value(notr("tbl_cols")).toInt();
-
- l_oItem->m_sDiag = i_oAttrs.value(notr("dg"));
-
- l_oItem->m_iXX = i_oAttrs.value(notr("c2")).toDouble();
- l_oItem->m_iYY = i_oAttrs.value(notr("c1")).toDouble();
-
- l_oItem->m_iColor = i_oAttrs.value(notr("color")).toInt();
- l_oItem->m_oCustom.m_sName = i_oAttrs.value(notr("custom_name"));
- l_oItem->m_oCustom.m_oInnerColor = QColor(i_oAttrs.value(notr("custom_inner")));
- l_oItem->m_oCustom.m_oBorderColor = QColor(i_oAttrs.value(notr("custom_border")));
- l_oItem->m_oCustom.m_oTextColor = QColor(i_oAttrs.value(notr("custom_text")));
- }
- else if (i_sName == notr("color_schemes"))
- {
- m_oControl->m_oColorSchemes.clear();
- }
- else if (i_sName == notr("color_scheme"))
- {
- color_scheme l_o;
- l_o.m_sName = i_oAttrs.value(notr("name"));
- l_o.m_oInnerColor = i_oAttrs.value(notr("inner"));
- l_o.m_oBorderColor = i_oAttrs.value(notr("border"));
- l_o.m_oTextColor = i_oAttrs.value(notr("text"));
- m_oControl->m_oColorSchemes.push_back(l_o);
- }
- else if (i_sName == notr("flag"))
- {
- data_item *l_oItem = m_oControl->m_oItems.value(m_iId);
- l_oItem->m_oFlags.push_back(i_oAttrs.value(notr("id")));
- }
- return true;
-}
-
-bool semantik_reader::endElement(const QString&, const QString&, const QString& i_sName)
-{
- return true;
-}
-
-bool semantik_reader::characters(const QString &i_s)
-{
- m_sBuf += i_s;
- return true;
-}
-
-extern "C" {
- void cleanup_pb(); void add_cstr(int, int);
- void add_box(int, double, double, double, double);
- void iterate_pb(int); double get_x(int); double get_y(int);
- }
-
-data_control::~data_control()
-{
- destroy_timer();
- clean_temp_dir();
- while (!m_oFlagSchemes.empty())
- {
- delete m_oFlagSchemes.takeFirst();
- }
-}
-
-void data_control::init_timer()
-{
- destroy_timer();
- if (m_iTimerValue<1) return;
- m_oTimer = new QTimer(this);
- m_oTimer->setInterval(m_iTimerValue * 60000);
- connect(m_oTimer, SIGNAL(timeout()), this, SLOT(slot_autosave()));
- m_oTimer->start();
-}
-
-void data_control::destroy_timer()
-{
- if (m_oTimer) m_oTimer->stop();
- delete m_oTimer;
- m_oTimer = NULL;
-}
-
-void data_control::slot_autosave()
-{
- m_oLock.lock();
- // autosave for the last used save name
- qDebug()<<"autosave"< 1)
- {
- QString o = trUtf8("Automatic save failed for file: %1").arg(m_sLastSaved);
- if (save_file(m_sLastSaved))
- {
- o = trUtf8("%1 saved automatically").arg(m_sLastSaved);
- }
- emit sig_message(o, 5000);
- }
- m_oLock.unlock();
-}
-
-void data_control::init_colors()
-{
- m_oColorSchemes.clear();
-
- QStringList l_oS;
- //l_oS<<"#FFFCD5"<<"#ABFBC7"<<"#FDE1E1"<<"#D2F1FF"<<"#EDDFFF"<<"#FFFFFF";
- l_oS<<"#fffe8d"<<"#91ffab"<<"#9bfffe"<<"#b8bbff"<<"#e0aaff"<<"#ffa6a6"<<"#ffd8a6"<<"#FFFFFF"<<"#d3d7cf";
-
- int i = 0;
- foreach (QString l_s, l_oS)
- {
- color_scheme l_o;
- l_o.m_oInnerColor = QColor(l_s);
- l_o.m_sName = trUtf8("Color %1").arg(QString::number(i));
- m_oColorSchemes.push_back(l_o);
- ++i;
- }
-
- KConfigGroup l_oSettings(KGlobal::config(), notr("General Options"));
- m_iConnType = l_oSettings.readEntry(notr("conn"), 0);
- m_iReorgType = l_oSettings.readEntry(notr("reorg"), 0);
- m_dTriSize = l_oSettings.readEntry(notr("trisize"), (double) 4.5);
- m_iTimerValue = l_oSettings.readEntry(notr("auto"), 0);
-
- init_timer();
-
- hash_params l_oCmd;
- l_oCmd.insert(data_commande, QVariant(cmd_update_colors));
- emit synchro(l_oCmd);
-}
-
-void data_control::init_flags()
-{
- while (!m_oFlagSchemes.empty())
- {
- delete m_oFlagSchemes.takeFirst();
- }
-
- QStringList l_oLst = QString(notr("flag_delay flag_idea flag_look flag_lunch flag_money flag_ok flag_people flag_phone flag_star flag_stop flag_talk flag_target flag_time flag_tune flag_unknown flag_write")).split(" ");
- foreach (QString l_s, l_oLst)
- {
- m_oFlagSchemes.push_back(new flag_scheme(this, l_s, l_s));
- }
-
- hash_params l_oCmd;
- l_oCmd.insert(data_commande, QVariant(cmd_update_flags));
- emit synchro(l_oCmd);
-}
-
-void data_control::init_temp_dir()
-{
- char sfn[16] = "";
- strcpy(sfn, "/tmp/sem.XXXXXX");
- char * l_oRet = mkdtemp(sfn);
- m_sTempDir = l_oRet;
-
- Q_ASSERT(l_oRet!=NULL);
- Q_ASSERT(QFile::exists(m_sTempDir));
-}
-
-void data_control::clean_temp_dir()
-{
- //qDebug()<<"data_control::clean_temp_dir";
- QProcess l_oP;
- QStringList l_oArgs;
- l_oArgs<m_iXX + l_oData->m_iWW/2,
- (double) l_oData->m_iYY + l_oData->m_iHH/2,
- (double) l_oData->m_iWW/2, (double) l_oData->m_iHH/2);
- }
- for (int i=0; im_iXX = get_x(l_iVal) - l_oData->m_iWW/2;
- l_oData->m_iYY = get_y(l_iVal) - l_oData->m_iHH/2;
- update_item(l_iVal);
- }
- cleanup_pb();
-
- hash_params l_oCmd2;
- l_oCmd2.insert(data_commande, QVariant(cmd_open_map));
- emit synchro(l_oCmd2);
-}
-
-QString data_control::doc_to_xml()
-{
- QStringList l_oS;
-
- l_oS<\n");
- l_oS<\n");
- l_oS<\n");
-
- l_oS<\n");
- foreach (color_scheme l_o, m_oColorSchemes)
- {
- l_oS<\n").arg(
- l_o.m_sName,
- l_o.m_oInnerColor.name(),
- l_o.m_oBorderColor.name(),
- l_o.m_oTextColor.name()
- );
- }
- l_oS<\n");
-
-
- QList l_oLst = m_oItems.values();
- for (int i=0; im_iId));
- l_oS<m_sSummary));
- l_oS<m_sText));
- l_oS<m_iTextLength));
- l_oS<m_sComment));
-
- l_oS<m_sPicLocation));
- l_oS<m_sPicCaption));
- l_oS<m_sPicComment));
-
- l_oS<m_iNumRows));
- l_oS<m_iNumCols));
-
- l_oS<m_sDiag));
-
- l_oS<m_sHints));
- l_oS<m_iDataType));
-
- l_oS<m_iYY));
- l_oS<m_iXX));
-
- l_oS<m_iColor));
-
- color_scheme l_o = l_oItem->m_oCustom;
-
- l_oS<\n");
-
- l_oS<\n").arg(
- QString::number(l_oItem->m_iNumRows), QString::number(l_oItem->m_iNumCols));
- foreach (data_table_item l_o, l_oItem->m_oTableData)
- {
- l_oS<\n");
- }
-
- foreach (QString l_s, l_oItem->m_oFlags)
- {
- l_oS<\n").arg(bind_node::protectXML(l_s));
- }
-
- l_oS<\n");
- }
-
- for (int i=0; i\n").arg(l_oP.x()).arg(l_oP.y());
- }
-
- l_oS<\n");
-
- return l_oS.join("");
-}
-
-bool data_control::save_file(QString i_sUrl)
-{
- Q_ASSERT(i_sUrl.endsWith(".sem"));
-
- hash_params l_oCmd;
- l_oCmd.insert(data_commande, QVariant(cmd_save_data));
- emit synchro(l_oCmd);
-
- QFile l_o2(QString(TEMPLATE_DIR)+notr("/semantik.sem.py"));
- if (!l_o2.open(QIODevice::ReadOnly))
- {
- emit sig_message(trUtf8("File saving: missing file %1").arg(l_o2.fileName()), 5000);
- return false;
- }
-
- QByteArray l_oBa = l_o2.readAll();
- l_o2.close();
-
- bind_node::set_var(notr("temp_dir"), m_sTempDir);
- bind_node::set_var(notr("outfile"), i_sUrl);
- bind_node::set_var(notr("fulldoc"), doc_to_xml());
- bind_node::set_var(notr("hints"), m_sHints);
- bind_node::set_var(notr("namet"), "");
- bind_node::set_var(notr("outdir"), "");
-
- if (!init_py())
- {
- emit sig_message(trUtf8("Missing bindings for opening files"), 5000);
- return false;
- }
- PyRun_SimpleString(l_oBa.constData());
-
- m_sLastSaved = i_sUrl;
-
- return true;
-}
-
-void data_control::purge_document()
-{
- QList k = m_oItems.keys();
- foreach(int i, k)
- {
- remove_item(i);
- }
- Q_ASSERT(m_oItems.keys().size()==0);
- m_sCount = 1;
-}
-
-bool data_control::open_file(const QString& i_sUrl)
-{
- purge_document();
-
- QFile l_o2(QString(FILTER_DIR)+"/main.py");
- if (!l_o2.open(QIODevice::ReadOnly))
- {
- emit sig_message(trUtf8("Missing filter file %1 for opening files").arg(l_o2.fileName()), 5000);
- return false;
- }
- QByteArray l_oBa = l_o2.readAll();
- l_o2.close();
-
- bind_node::set_var(notr("temp_dir"), m_sTempDir);
- bind_node::set_var(notr("pname"), i_sUrl);
- bind_node::set_var(notr("hints"), m_sHints);
- bind_node::set_var(notr("namet"), i_sUrl);
- bind_node::set_var(notr("outdir"), "");
-
- if (!init_py())
- {
- emit sig_message(trUtf8("Missing bindings for opening files"), 5000);
- return false;
- }
- PyRun_SimpleString(l_oBa.constData());
-
- delete bind_node::_root;
- bind_node::_root = NULL;
-
- //qDebug()<<"full text "<load_from_path(l_sNew);
- }
-
- // now update all items created
- for (int i=0; i NO_ITEM) l_iNext = i_iIdx;
- else l_iNext = get_next();
-
- data_item *l_oItem = new data_item(this, l_iNext);
- m_oItems[l_iNext] = l_oItem;
-
- if (i_iCopy)
- {
- // copy parents colors and other settings
- data_item *l_oParent = m_oItems[i_oAdd];
- l_oItem->m_iColor = l_oParent->m_iColor;
- l_oItem->m_oCustom = l_oParent->m_oCustom;
- }
-
- hash_params l_oCmd;
- l_oCmd.insert(data_commande, QVariant(cmd_add_item));
- l_oCmd.insert(data_id, QVariant(l_iNext));
- emit synchro(l_oCmd);
-
- if (i_oAdd != NO_ITEM)
- {
- link_items(i_oAdd, l_iNext);
- }
-
- select_item(l_iNext);
- return l_iNext;
-}
-
-void data_control::unlink_items(int i_iId1, int i_iId2)
-{
- Q_ASSERT(m_oItems.contains(i_iId1) && m_oItems.contains(i_iId2));
-
- m_oLinks.removeAll(QPoint(i_iId1, i_iId2));
- m_oLinks.removeAll(QPoint(i_iId2, i_iId1));
-
- hash_params l_oCmd;
- l_oCmd.insert(data_commande, QVariant(cmd_unlink));
- l_oCmd.insert(data_id1, QVariant(i_iId1));
- l_oCmd.insert(data_id2, QVariant(i_iId2));
- emit synchro(l_oCmd);
-}
-
-bool data_control::link_items(int i_iParent, int i_iChild)
-{
- Q_ASSERT(m_oItems.contains(i_iParent) && m_oItems.contains(i_iChild));
-
- if (i_iParent == i_iChild) return false;
-
- // one parent
- for (int i=0; i NO_ITEM)
- {
- int l_iNew = NO_ITEM;
- for (int i=0; i data_control::all_roots()
-{
- QList l_o = QList ();
- foreach (int l_iVal, m_oItems.keys())
- {
- for (int i=0; i l_o = all_roots();
- if (l_o.size() == 0) return;
-
- int l_i = root_of(m_iLastItemSelected);
- if (l_i == NO_ITEM) select_item(l_o[0]);
-
- for (int i=0; i l_o = all_roots();
- if (l_o.size() == 0) return;
-
- int l_i = root_of(m_iLastItemSelected);
- if (l_i == NO_ITEM) select_item(l_o[0]);
-
- for (int i=0; i l_o = all_roots();
- if (l_o.size() > 0) select_item(l_o[0]);
- }
- else
- {
- int l_iId = root_of(i_iId);
- select_item(l_iId);
- }
-}
-
-void data_control::select_item_keyboard(int l_iId, int l_iDirection)
-{
- if (l_iId == NO_ITEM)
- {
- select_root_item(NO_ITEM); return;
- }
- if (!m_oLinks.size()) return;
-
- switch (l_iDirection)
- {
- case 1: //left
- {
- int l_iParent = NO_ITEM;
- int i = 0;
-
- while (i