diff anagram/vaclgui/dpanel.cpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/anagram/vaclgui/dpanel.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,175 @@
+/*
+ * AnaGram, A System for Syntax Directed Programming
+ * Copyright 1997-2002 Parsifal Software. All Rights Reserved.
+ * See the file COPYING for license and usage terms.
+ *
+ * dpanel.cpp
+ */
+
+
+#include "agcstack.h"
+#include "dpanel.hpp"
+#include "myalloc.h"
+
+//#define INCLUDE_LOGGING
+#include "log.h"
+
+
+AgDataPanel::AgDataPanel(WindowData *data)
+  : AgFrame(  IFrameWindow::maximizeButton
+	    | IFrameWindow::systemMenu
+	    | IFrameWindow::sizingBorder)
+  , dataView(new AgDataView(this, data))
+  , helpDemon(&windowTitle, data->headTitle())
+{
+  LOGSECTION("AgDataPanel::AgDataPanel(WindowData *)");
+  LOGV(windowId);
+  ok_ptr(data);
+  syntaxDependent = data->syntaxDependent();
+  init();
+}
+
+AgDataPanel::AgDataPanel()
+  : AgFrame(  IFrameWindow::maximizeButton
+	    | IFrameWindow::systemMenu
+	    | IFrameWindow::sizingBorder)
+  , helpDemon(&windowTitle)
+{
+  LOGSECTION("AgDataPanel::AgDataPanel()");
+  LOGV(windowId);
+}
+
+void AgDataPanel::init() {
+  LOGSECTION("AgDataPanel::init");
+  LOGV(windowId);
+  AgString titleString;
+  AgString title;
+  AgString simpleTitle;
+
+  ok_ptr(dataView->windowData);
+  title = dataView->windowData->headTitle();
+  helpDemon.setTopic(title);
+  LOGV(title.pointer());
+
+  AgString name = dataView->windowData->fileName();
+  char buf[500] = "AnaGram";
+  if (syntaxDependent && name.exists()) {
+    sprintf(buf, "AnaGram : %s", name.pointer());
+  }
+  AgString objectName = buf;
+
+  AgString foot = dataView->windowData->footTitle();
+  if (foot.exists() && foot.size()) {
+    simpleTitle = AgString::format("%s (%s)", title.pointer(), foot.pointer());
+  }
+  else {
+    simpleTitle = title;
+  }
+
+  LOGV(windowTitle.objectText());
+  LOGV(windowTitle.viewText());
+  LOGV(windowTitle.text());
+
+  windowTitle.setObjectText(objectName.pointer());
+  windowTitle.setViewText(simpleTitle.pointer());
+  AgCharStack cs;
+  //cs.push(name).push(" - ").push(simpleTitle);
+  cs << name;
+  cs << " - " << simpleTitle;
+  dataView->copyTitle = cs.popString();
+  LOGV(dataView->copyTitle);
+  LOGV(windowTitle.objectText());
+  LOGV(windowTitle.viewText());
+  LOGV(windowTitle.text());
+
+  registerTitle(simpleTitle);
+
+  ISize tableSize = dataView->suggestSize();
+
+  int width = 40*dataView->font().avgCharWidth();
+  int testWidth = tableSize.width();
+
+  int titleWidth
+    = windowTitle.displaySize(windowTitle.text()).width()
+      + windowTitle.minimumSize().width();
+
+  LOGV(windowTitle.text());
+  LOGV(titleWidth);
+  LOGV(testWidth);
+
+  if (testWidth < titleWidth) {
+    testWidth = titleWidth;
+  }
+  LOGV(width);
+  LOGV(testWidth);
+
+  if (testWidth < width/2) {
+    width = width/2;
+  }
+  else if (testWidth > 2*width) {
+    width = 2*width;
+  }
+  else {
+    width = testWidth;
+  }
+
+  LOGV(width);
+
+  ISize clientSize(width, tableSize.height());
+  IRectangle frameRect(frameRectFor(clientSize));
+  LOGV(clientSize.asString());
+  LOGV(frameRect.size().asString());
+  sizeTo(frameRect.size());
+
+  //LOGV(cascadeOffset.asString());
+
+  setClient(dataView);
+
+  positionFrame();
+  //show();
+}
+
+AgDataPanel::~AgDataPanel() {
+  LOGSECTION("AgDataPanel::~AgDataPanel");
+  LOGV(windowId);
+  //dataView->disconnect();
+  ok_ptr(dataView->windowData);
+  //dataView->disconnect();
+  //if (dataView->windowData) dataView->windowData->close();
+  delete dataView;
+}
+
+void AgDataPanel::disconnect() {
+  LOGSECTION("AgDataPanel::disconnect");
+  dataView->disconnect();
+}
+
+AgDataPanel &AgDataPanel::close() {
+  LOGSECTION("AgDataPanel::close");
+/*
+  if (dataView->windowData) {
+    dataView->windowData->close();
+  }
+  delete dataView->windowData;
+*/
+  //dataView->windowData = 0;
+  //dataView->disconnect();
+  IFrameWindow::close();
+  return *this;
+}
+
+unsigned AgDataPanel::getLineNumber() {
+  return dataView->getCursorLine();
+}
+
+void AgDataPanel::setLineNumber(unsigned n) {
+  dataView->setCursorLine(n);
+}
+
+Boolean AgDataPanel::findNext(AgString s) {
+  return dataView->findNext(s);
+}
+
+Boolean AgDataPanel::findPrev(AgString s) {
+  return dataView->findPrev(s);
+}