\r
projecturl = "http://sourceforge.jp/projects/pydun/"\r
projectrssurl = "http://sourceforge.jp/projects/pydun/releases/rss"\r
-projectversion = "1.0.4"\r
+projectversion = "1.0.5"\r
\r
\r
class MainWindow(QtGui.QMainWindow):\r
self.redoact.setDisabled(True)\r
\r
def setTitle(self, filename):\r
+ s ="Pydun - " + self.getfilename(filename)\r
+ self.setWindowTitle(s)\r
+\r
+ def getfilename(self, filename):\r
if filename == None:\r
s = u"新規作成"\r
else:\r
s = os.path.basename(filename)\r
- s ="Pydun - " + s\r
- self.setWindowTitle(s)\r
+ return s\r
\r
@QtCore.Slot()\r
def new_triggered(self):\r
- if QtGui.QMessageBox.Ok == QtGui.QMessageBox.question(\r
- self, u"確認", u"新しいマップを作成しますか?",\r
- (QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)):\r
+ if self.confirmdiscarding():\r
self.new()\r
+ return True\r
+ return False\r
\r
def new(self):\r
global _mapengine\r
_mapengine = MapEngine(20, 20, 1, -1, 0, +19)\r
- _undomanager.clear()\r
- _undomanager.save(_mapengine.savestring())\r
+ _undomanager.init(_mapengine.savestring())\r
self.setTitle(None)\r
try:\r
self.mainframe.mapframe.repaint()\r
except:\r
pass\r
\r
+ def confirmdiscarding(self):\r
+ if not _undomanager.commited:\r
+ dlg = PydunAskSaveDialog(self, self.getfilename(_mapengine.filename))\r
+ ret = dlg.exec_()\r
+ if ret == QtGui.QMessageBox.Cancel:\r
+ return False\r
+ elif ret == QtGui.QMessageBox.Save:\r
+ saved = self.save_triggered()\r
+ if not saved:\r
+ return False\r
+ return True\r
+\r
@QtCore.Slot()\r
def open_triggered(self):\r
- d = ""\r
- try:\r
- d = os.path.dirname(_mapengine.filename)\r
- except:\r
- pass\r
- filename = QtGui.QFileDialog.getOpenFileName(\r
- dir=d,\r
- filter=u"*.pydun;;*.*", selectedFilter=u"*.pydun")\r
- if filename[0] != u"":\r
- self.open(filename[0])\r
+ if self.confirmdiscarding():\r
+ d = ""\r
+ try:\r
+ d = os.path.dirname(_mapengine.filename)\r
+ except:\r
+ pass\r
+ filename = QtGui.QFileDialog.getOpenFileName(\r
+ dir=d,\r
+ filter=u"*.pydun;;*.*", selectedFilter=u"*.pydun")\r
+ if filename[0] != u"":\r
+ self.open(filename[0])\r
\r
def open(self, filename):\r
_mapengine.load(filename)\r
- _undomanager.clear()\r
- _undomanager.save(_mapengine.savestring())\r
+ _undomanager.init(_mapengine.savestring())\r
self.setTitle(_mapengine.filename)\r
try:\r
self.mainframe.mapframe.repaint()\r
def save_triggered(self):\r
if _mapengine.filename:\r
self.save(_mapengine.filename)\r
+ saved = True\r
else:\r
- self.saveas_triggered()\r
+ saved = self.saveas_triggered()\r
+ return saved\r
\r
@QtCore.Slot()\r
def saveas_triggered(self):\r
filter=u"*.pydun;;*.*", selectedFilter=u"*.pydun")\r
if filename[0] != u"":\r
self.save(filename[0])\r
+ return True\r
+ else:\r
+ return False\r
\r
def save(self, filename):\r
_mapengine.save(filename)\r
+ _undomanager.commit()\r
self.setTitle(_mapengine.filename)\r
\r
@QtCore.Slot()\r
def exit(self):\r
global config\r
global configfilename\r
- if QtGui.QMessageBox.Ok == QtGui.QMessageBox.question(\r
- self, u"確認", u"終了しますか?",\r
- (QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)):\r
+ if self.confirmdiscarding():\r
config["windowSize"] = dict()\r
config["windowSize"]["width"] = self.size().width()\r
config["windowSize"]["height"] = self.size().height()\r
def create_wall_menu(self, direction):\r
menu = QtGui.QMenu(self)\r
for idx, img in enumerate(_mapimages.wall_icons):\r
- act = QtGui.QAction(self)\r
+ act = QtGui.QAction(_mapimages.wall_texts[idx][direction], self)\r
act.setIcon(img[direction])\r
\r
def triggerd(idx):\r
self.detailtext.setText(u"")\r
detaillabel.setBuddy(self.detailtext)\r
\r
- self.buttonBox = QtGui.QDialogButtonBox(\r
+ self.buttonbox = QtGui.QDialogButtonBox(\r
QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)\r
- self.buttonBox.accepted.connect(self.accept)\r
- self.buttonBox.rejected.connect(self.reject)\r
+ self.buttonbox.accepted.connect(self.accept)\r
+ self.buttonbox.rejected.connect(self.reject)\r
+ self.buttonbox.button(QtGui.QDialogButtonBox.Ok).setText(u"OK")\r
+ self.buttonbox.button(QtGui.QDialogButtonBox.Cancel).setText(u"キャンセル")\r
\r
layout = QtGui.QGridLayout()\r
layout.addWidget(marklabel, 0, 0, 1, 1)\r
layout.addWidget(self.forecolorbox, 0, 3, 1, 1)\r
layout.addWidget(detaillabel, 1, 0, 1, 1)\r
layout.addWidget(self.detailtext, 1, 1, 1, 3)\r
- layout.addWidget(self.buttonBox, 2, 0, 1, 4)\r
+ layout.addWidget(self.buttonbox, 2, 0, 1, 4)\r
self.setLayout(layout)\r
self.setModal(True)\r
\r
self.ybox.setValue(0)\r
ylabel.setBuddy(self.ybox)\r
\r
- self.buttonBox = QtGui.QDialogButtonBox(\r
+ self.buttonbox = QtGui.QDialogButtonBox(\r
QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)\r
- self.buttonBox.accepted.connect(self.accept)\r
- self.buttonBox.rejected.connect(self.reject)\r
+ self.buttonbox.accepted.connect(self.accept)\r
+ self.buttonbox.rejected.connect(self.reject)\r
+ self.buttonbox.button(QtGui.QDialogButtonBox.Ok).setText(u"OK")\r
+ self.buttonbox.button(QtGui.QDialogButtonBox.Cancel).setText(u"キャンセル")\r
\r
layout = QtGui.QGridLayout()\r
layout.addWidget(promptlabel, 0, 0, 1, 4)\r
layout.addWidget(self.xbox, 2, 1, 1, 1)\r
layout.addWidget(ylabel, 2, 2, 1, 1)\r
layout.addWidget(self.ybox, 2, 3, 1, 1)\r
- layout.addWidget(self.buttonBox, 3, 0, 1, 4)\r
+ layout.addWidget(self.buttonbox, 3, 0, 1, 4)\r
self.setLayout(layout)\r
self.setModal(True)\r
\r
QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)\r
self.buttonbox.accepted.connect(self.accept)\r
self.buttonbox.rejected.connect(self.reject)\r
+ self.buttonbox.button(QtGui.QDialogButtonBox.Ok).setText(u"OK")\r
+ self.buttonbox.button(QtGui.QDialogButtonBox.Cancel).setText(u"キャンセル")\r
\r
verticalgroup = QtGui.QButtonGroup(self)\r
verticalgroup.addButton(self.topbutton)\r
\r
class MapImages(object):\r
def __init__(self):\r
+ vtext = [u"なし", u"壁", u"扉", u"扉(→)", u"扉(←)", u"一通(→)", u"一通(←)", u"隠", u"隠(→)", u"隠(←)",]\r
+ htext = [u"なし", u"壁", u"扉", u"扉(↓)", u"扉(↑)", u"一通(↓)", u"一通(↑)", u"隠", u"隠(↓)", u"隠(↑)",]\r
self.wall_images = list()\r
self.wall_icons = list()\r
+ self.wall_texts = list()\r
for index in range(10):\r
self.wall_images.append(dict())\r
self.wall_icons.append(dict())\r
+ self.wall_texts.append(dict())\r
for direction in ["v", "h"]:\r
filename = os.path.join(\r
basedir(),\r
self.wall_images[index][direction] = QtGui.QImage()\r
self.wall_images[index][direction].load(filename)\r
self.wall_icons[index][direction] = QtGui.QIcon(filename)\r
+ self.wall_texts[index]["v"] = vtext[index]\r
+ self.wall_texts[index]["h"] = htext[index]\r
\r
@property\r
def width(self):\r
self._undo = [None for x in range(self.MAX_UNDO_COUNT)]\r
self._index = 0\r
self._undocount = 0\r
+ self._commited = True\r
self.changed.emit(self.canundo, self.canredo)\r
\r
+ def init(self, data):\r
+ self.clear()\r
+ self.save(data)\r
+ self._commited = True\r
+\r
def save(self, obj):\r
if self._index >= self.MAX_UNDO_COUNT:\r
self._undo = self._undo[1:]\r
self._undo[self._index] = obj\r
self._index += 1\r
self._undocount = 0\r
+ self._commited = False\r
self.changed.emit(self.canundo, self.canredo)\r
\r
def undo(self):\r
self._index -= 1\r
self._undocount += 1\r
+ self._commited = False\r
self.changed.emit(self.canundo, self.canredo)\r
return self._undo[self._index - 1]\r
\r
def redo(self):\r
self._index += 1\r
self._undocount -= 1\r
+ self._commited = False\r
self.changed.emit(self.canundo, self.canredo)\r
return self._undo[self._index - 1]\r
\r
+ def commit(self):\r
+ self._commited = True\r
+\r
@property\r
def canundo(self):\r
return (self._index > 1)\r
def canredo(self):\r
return (self._undocount > 0)\r
\r
+ @property\r
+ def commited(self):\r
+ return self._commited\r
+\r
\r
class PydunColorDialog(QtGui.QColorDialog):\r
def __init__(self, parent, config):\r
return self._config\r
\r
\r
+class PydunAskSaveDialog(QtGui.QMessageBox):\r
+ def __init__(self, parent, filename):\r
+ super(PydunAskSaveDialog, self).__init__(parent)\r
+ self.setText(u"{filename} への変更を保存しますか?".format(filename=filename))\r
+ self.setStandardButtons(QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel)\r
+ self.setDefaultButton(QtGui.QMessageBox.Save)\r
+ self.button(QtGui.QMessageBox.Save).setText(u"保存する(&S)")\r
+ self.button(QtGui.QMessageBox.Discard).setText(u"保存しない(&N)")\r
+ self.button(QtGui.QMessageBox.Cancel).setText(u"キャンセル")\r
+\r
+\r
def getcolorstring(color):\r
return "#{r:02x}{g:02x}{b:02x}".format(r=color.red(), g=color.green(), b=color.blue())\r
\r
int(colorstring[5:7], 16))\r
\r
def basedir():\r
- return os.path.dirname(os.path.abspath(sys.argv[0]))\r
+ return os.path.dirname(os.path.abspath(unicode(sys.argv[0], locale.getpreferredencoding())))\r
\r
def getlatestversion():\r
try:\r