# -*- coding: utf-8 -*- # CoordConvert # # Created by Erik Fløisbonn # Email: erif@0x6.org # # Latest version can be found at: # http://www.0x6.org/CoordConvert/ # name = "CoordConvert" version = "1.4.7b" modified = "13/04/09" author = u"Erik Fløisbonn" contact = "erif@0x6.org" url = "http://www.0x6.org/CoordConvert/" releasenotes = '''What's new? ----------- - Changed .kof format to correctly handle blank values of pointcode and themecode. - Filename guessing with drag-and-drop. - Create graph with Gnuplot (bundled), requires the newest CoordConvert. x_rot, y_rot and other options are not currently implemented. - Speed improvements.''' ''' TODO: 1. (Done) Alter .kof format to correctly handle blank values of pointcode and themecode 2. Add entity TYPE, so that one can transfer different types of data between formats - lines between kof/dxf 3. (Done) Filename guessing. 4. (Begun) Create graph - Must add gnuplot to bundle - Delete temporary files after they are used 5. Check for illegal file in gnuplot 6. Fix changing gnuplotfile. ''' import sys from PyQt4 import QtGui, QtCore import urllib2 import os # Globals set by Update.py '''if not "folder" in globals(): global folder folder = "./" if not "filename" in globals(): global filename filename = "CoordConvert"''' # Set color of window # This palette uses the colors of skanska. global skin skin = "normal" def useSkin(name): global skin skin = name def setStyle(window): if skin == "Skanska": window.setStyleSheet('''QMainWindow, QDialog { background: #E0E0E0; } QLineEdit { border: 1px solid #293e6b; color: #293e6b; background: #F4F4F4; selection-background-color: #293e6b; selection-color: #F0F0F0; } QTextEdit { border: 1px solid #293e6b; color: #293e6b; background: #F4F4F4; selection-background-color: #293e6b; selection-color: #F0F0F0; } QCheckBox::indicator { border: 0; } QCheckBox::indicator:unchecked { background-color: transparent; border: 1px solid #293e6b; } QCheckBox::indicator:checked { background-color: #293e6b; border: 0; } QPushButton { border: 1px solid #293e6b; background-color: #c8c8c8; color: #293e6b; padding-left: 10px; padding-right: 10px; } QPushButton:hover { color: #F0F0F0; border-style: inset; } QPushButton:pressed { background-color: #F0F0F0; color: #c8c8c8; } QMenu { background-color: #F0F0F0; color: #293e6b; border: 1px solid #293e6b; } QMenu::item { background-color: transparent; } QMenu::item:selected { background-color: #293e6b; color: #F0F0F0; } QMenuBar { background-color: #F4F4F4; color: #293e6b; border: 1px solid #293e6b; border-right: 0; border-top: 0; border-left: 1px solid transparent; /* bugfix */ } QMenuBar::item { spacing: 4px; /* spacing between menu bar items */ padding: 1px 4px; background: transparent; } QMenuBar::item:selected { /* when selected using mouse or keyboard */ background: #293e6b; color: #F0F0F0; } QMenuBar::item:pressed { background: #293e6b; color: #F0F0F0; } QTreeView { color: #293e6b; } QLabel { color: #293e6b; } /* Taken from Qt documentation */ QGroupBox { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #E0E0E0, stop: 1 #FFFFFF); border: 1px solid #293e6b; margin-top: 1ex; /* leave space at the top for the title */ } QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top center; /* position at the top center */ padding: 0 3px; color: #293e6b; } QTreeView { background-color: #F4F4F4; border: 1px solid #293e6b; } QHeaderView::section { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #E0E0E0, stop: 1 #F4F4F4); color: #293e6b; padding-left: 4px; border-bottom: 1px solid #293e6b; border-left: 1px solid #293e6b; border-right: 1px solid #293e6b; border-top: None; } /* style the sort indicator */ QHeaderView::down-arrow { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #293e6b, stop: 1 #F4F4F4); } QHeaderView::up-arrow { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #F4F4F4, stop: 1 #293e6b); }''') elif skin == "LSK": window.setStyleSheet('''QMainWindow, QDialog { background: #EEEE10; } QLineEdit { border: 1px solid #000000; color: #000000; background: #FFFF00; selection-background-color: #000000; selection-color: #FFFF00; } QTextEdit { border: 1px solid #000000; color: #000000; background: #FFFF00; selection-background-color: #000000; selection-color: #FFFF00; } QCheckBox::indicator { border: 0; } QCheckBox::indicator:unchecked { background-color: transparent; border: 1px solid #000000; } QCheckBox::indicator:checked { background-color: #000000; border: 0; } QPushButton { border: 1px solid #000000; background-color: #EEEE10; color: #000000; padding-left: 10px; padding-right: 10px; } QPushButton:hover { color: #EEEE10; border-style: inset; background-color: #000000; } QPushButton:pressed { background-color: #FFFF10; color: #c8c8c8; } QMenu { background-color: #FFFF10; color: #000000; border: 1px solid #000000; } QMenu::item { background-color: transparent; } QMenu::item:selected { background-color: #000000; color: #FFFF10; } QMenuBar { background-color: #FFFF00; color: #000000; border: 1px solid #000000; border-right: 0; border-top: 0; border-left: 1px solid transparent; /* bugfix */ } QMenuBar::item { spacing: 4px; /* spacing between menu bar items */ padding: 1px 4px; background: transparent; } QMenuBar::item:selected { /* when selected using mouse or keyboard */ background: #000000; color: #FFFF10; } QMenuBar::item:pressed { background: #000000; color: #FFFF10; } QTreeView { color: #000000; } QLabel { color: #000000; } /* Taken from Qt documentation */ QGroupBox { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #EEEE10, stop: 1 #AAAA00); border: 1px solid #000000; margin-top: 1ex; /* leave space at the top for the title */ } QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top center; /* position at the top center */ padding: 0 3px; color: #000000; } QTreeView { background-color: #FFFF00; border: 1px solid #000000; } QHeaderView::section { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #EEEE10, stop: 1 #FFFF00); color: #000000; padding-left: 4px; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: None; } /* style the sort indicator */ QHeaderView::down-arrow { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #000000, stop: 1 #FFFF00); } QHeaderView::up-arrow { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #FFFF00, stop: 1 #000000); }"''') elif skin == "Forest": window.setStyleSheet(''' QMainWindow, QDialog { background: #AA0000; } QLineEdit { border: 1px solid #FFFFFF; color: #FFFFFF; background: #AA1010; selection-background-color: #FFFFFF; selection-color: #AA1010; } QTextEdit { border: 1px solid #FFFFFF; color: #FFFFFF; background: #AA1010; selection-background-color: #FFFFFF; selection-color: #AA1010; } QCheckBox { color: #FFFFFF; } QCheckBox::indicator { border: 0; } QCheckBox::indicator:unchecked { background-color: transparent; border: 1px solid #FFFFFF; } QCheckBox::indicator:checked { background-color: #FFFFFF; border: 0; } QPushButton { border: 1px solid #FFFFFF; background-color: #EE1010; color: #FFFFFF; padding-left: 10px; padding-right: 10px; } QPushButton:hover { color: #EE1010; border-style: inset; background-color: #FFFFFF; } QPushButton:pressed { background-color: #EE1010; color: #AA1010; } QMenu { background-color: #AA1010; color: #FFFFFF; border: 1px solid #FFFFFF; } QMenu::item { background-color: transparent; } QMenu::item:selected { background-color: #FFFFFF; color: #AA1010; } QMenuBar { background-color: #AA1010; color: #FFFFFF; border: 1px solid #FFFFFF; border-right: 0; border-top: 0; border-left: 1px solid transparent; /* bugfix */ } QMenuBar::item { spacing: 4px; /* spacing between menu bar items */ padding: 1px 4px; background: transparent; } QMenuBar::item:selected { /* when selected using mouse or keyboard */ background-color: #AA1010; color: #FFFFFF; } QMenuBar::item:pressed { background: #FFFFFF; color: #AA1010; } QTreeView { color: #FFFFFF; } QLabel { color: #FFFFFF; } /* Taken from Qt documentation */ QGroupBox { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #EE1010, stop: 1 #AA0000); border: 1px solid #FFFFFF; margin-top: 1ex; /*leave space at the top for the title */ } QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top center; /* position at the top center */ padding: 0 3px; color: #FFFFFF; border: 1px solid #FFFFFF; background-color: #EE1010; } QTreeView { background-color: #AA1010; border: 1px solid #FFFFFF; } QHeaderView::section { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #EE1010, stop: 1 #AA1010); color: #FFFFFF; padding-left: 4px; border-bottom: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF; border-right: 1px solid #FFFFFF; border-top: None; } /* style the sort indicator */ QHeaderView::down-arrow { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #FFFFFF, stop: 1 #AA1010); } QHeaderView::up-arrow { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #AA1010, stop: 1 #FFFFFF); } "''') elif skin == "Lillestrom": window.setStyleSheet(''' QMainWindow, QDialog { background: #fad603; } QLineEdit { border: 1px solid #000000; color: #000000; /*background: #fad603;*/ selection-background-color: #000000; selection-color: #fad603; background: qlineargradient(x1:0,y1:0,x2:0,y2:1, stop:0 #000000, stop:0.1 #fad603, stop:0.8 #fad603, stop:1 #fad603); } QTextEdit { border: 1px solid #000000; color: #000000; background: #fad603; selection-background-color: #000000; selection-color: #fad603; } QCheckBox { color: #000000; } QCheckBox { color: #000000; } QCheckBox::indicator { border: 0; } QCheckBox::indicator:unchecked { background-color: transparent; border: 1px solid #000000; } QCheckBox::indicator:checked { background-color: #000000; border: 0; } QPushButton { border: 1px solid #000000; background-color: #fad603; color: #000000; padding-left: 10px; padding-right: 10px; background-color: qlineargradient(x1:0,y1:0,x2:0,y2:1, stop:0 white, stop:0.2 #fad603, stop:0.8 #fad603, stop:1 #000000) } QPushButton:hover { color: #fad603; border-style: inset; background-color: #000000; background-color: qlineargradient(x1:0,y1:0,x2:0,y2:1, stop:0 white, stop:0.2 #000000, stop:0.8 #000000, stop:1 #000000) } QPushButton:pressed { background-color: #000000; color: #fad603; } QMenu { background-color: #fad603; color: #000000; border: 1px solid #000000; } QMenu::item { background-color: transparent; } QMenu::item:selected { background-color: #000000; color: #fad603; } QMenuBar { background-color: #fad603; color: #000000; border: 1px solid #000000; border-right: 0; border-top: 0; border-left: 1px solid transparent; /* bugfix */ } QMenuBar::item { spacing: 4px; /* spacing between menu bar items */ padding: 1px 4px; background: transparent; } QMenuBar::item:selected { /* when selected using mouse or keyboard */ background-color: #fad603; color: #000000; } QMenuBar::item:pressed { background: #000000; color: #fad603; } QTreeView { color: #000000; } QLabel { color: #000000; } /* Taken from Qt documentation */ QGroupBox { background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0 white, stop: 0.5 #fad603, stop: 1 #000000); border: 1px solid #000000; margin-top: 1ex; /*leave space at the top for the title */ /*border-radius: 3px;*/ } QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top center; /* position at the top center */ /*padding: 0 3px;*/ color: #000000; border: 1px solid #000000; background-color: #fad603; /*background: qlineargradient(x1:0,y1:0,x2:0,y2:1, stop:0 #000000, stop:0.1 #fad603, stop:0.8 #fad603, stop:1 #fad603);*/ } QTreeView { background-color: #fad603; border: 1px solid #000000; } QHeaderView::section { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #fad603, stop: 1 #fad603); color: #000000; padding-left: 4px; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: None; } /* style the sort indicator */ QHeaderView::down-arrow { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #000000, stop: 1 #fad603); } QHeaderView::up-arrow { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #fad603, stop: 1 #000000); } "''') else: window.setStyleSheet("") def setPalette(window): return if skin == "Skanska": palette = QtGui.QPalette(QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.Window, QtGui.QColor(240,240,240)) palette.setColor(QtGui.QPalette.Background, QtGui.QColor(240,240,240)) palette.setColor(QtGui.QPalette.WindowText, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.Foreground, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.Base, QtGui.QColor(244,244,244)) palette.setColor(QtGui.QPalette.AlternateBase, QtGui.QColor(244,244,244)) palette.setColor(QtGui.QPalette.Text, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.Button, QtGui.QColor(200,200,200)) palette.setColor(QtGui.QPalette.ButtonText, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.BrightText, QtGui.QColor(41,62,107)) # 3D palette.setColor(QtGui.QPalette.Light, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.Midlight, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.Dark, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.Mid, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.Shadow, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.ToolTipBase, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.ToolTipText, QtGui.QColor(244,244,244)) # Selected items palette.setColor(QtGui.QPalette.Highlight, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.HighlightedText, QtGui.QColor(240,240,240)) # Hyperlinks palette.setColor(QtGui.QPalette.Link, QtGui.QColor(41,62,107)) palette.setColor(QtGui.QPalette.LinkVisited, QtGui.QColor(41,62,107)) window.setPalette(palette) else: window.setPalette(QtGui.QPalette()) # reSmall, subset of reStructuredtext # A veeeery simple reStructured text interpreter # This only supports headers h1->h5, unnumbered lists and paragraphs. def reSmall(text): out = [] tmp = [] headers = ["-", "+", "/", "*", "%"] # h1->h5 bullets = ["*", "+", "-"] lines = (text + "\n\n").splitlines().__iter__() for line in lines: if (len(line) > 1 and line[0] == "\t" and line[1] in bullets) or (len(line) > 4 and line[0:4] == " "*4 and line[4] in bullets): # Remove the bullet line = line[0:5].strip("".join(bullets)) + line[5:] if "