# -*- coding: utf-8 -*- # FileConvert # # Copyright 2009 Erik Fløisbonn # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # name = "FileConvert" version = "1.4.7fa" modified = "09/03/10" author = u"Erik Fløisbonn" contact = "erif@0x6.org" url = "http://www.0x6.org/FileConvert/" releasenotes = '''Bugfix: ++++++++++ - Removed check on custom format. - dxf supporting custom format from txt - Plotting: Circumvented linebreak problem. - dxf: Microstation not understanding $ACADVER. - Filepaths containing non-ASCII chars (æøåô). - kof: handle blank values of pointcode and themecode. What's new? ----------- - New name: FileConvert! - New icon. - Licensed under GPL3. - Added support for reading/writing lines in dxf/kof. Support for pxy is on the way, as soon as the format is properly understood. - Filename guessing also with drag-and-drop. - Create graph with Gnuplot (bundled). - Speed improvements. - Local SVN repository and trac wiki.''' ''' 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. Fix reading .dxf files (DONE) Add statistics, how many lines and how many points (Partly done) .txt custom format? From line in dxf to csv, only gets start point. Should print all points? Fix .PXY to find LINES ''' import sys from PyQt4 import QtGui, QtCore import urllib2 import os try: import psyco psyco.full() except ImportError: pass # Globals set by Update.py '''if not "folder" in globals(): global folder folder = "./" if not "filename" in globals(): global filename filename = "FileConvert"''' # 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 "