summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/GsWidget.H2
-rw-r--r--src/GsWidget.cxx9
-rw-r--r--src/flpsed.cxx40
3 files changed, 49 insertions, 2 deletions
diff --git a/src/GsWidget.H b/src/GsWidget.H
index 9fb6372..659bc69 100644
--- a/src/GsWidget.H
+++ b/src/GsWidget.H
@@ -81,6 +81,8 @@ public:
int get_page();
+ int get_pages();
+
private:
void setProps();
diff --git a/src/GsWidget.cxx b/src/GsWidget.cxx
index 27a8cb7..859e3d4 100644
--- a/src/GsWidget.cxx
+++ b/src/GsWidget.cxx
@@ -417,3 +417,12 @@ int GsWidget::zoom(int p) {
return 0;
}
+
+int
+GsWidget::get_pages() {
+ if (dsc) {
+ return dsc->get_pages();
+ } else {
+ return 0;
+ }
+}
diff --git a/src/flpsed.cxx b/src/flpsed.cxx
index deb2579..391134c 100644
--- a/src/flpsed.cxx
+++ b/src/flpsed.cxx
@@ -40,6 +40,7 @@
#include <FL/Fl_Menu_Bar.H>
#include <FL/Fl_Menu_Item.H>
#include <FL/Fl_Color_Chooser.H>
+#include <FL/Fl_Hold_Browser.H>
#include "PSEditor.H"
#include "util.h"
@@ -47,6 +48,7 @@
PSEditor *psed_p = NULL;
Fl_Scroll *scroll = NULL;
+Fl_Hold_Browser *page_sel = NULL;
int xev_handler(int ev) {
if (psed_p) {
@@ -76,6 +78,31 @@ int check_save(void) {
char filename[256] = "";
+
+void page_sel_cb(Fl_Widget *w, void *) {
+ int p = page_sel->value() - 1;
+ if (p >= 0) {
+ psed_p->load_page(page_sel->value() - 1);
+ }
+}
+
+void page_sel_fill() {
+ char buf[64];
+ int p = psed_p->get_pages();
+
+ page_sel->clear();
+
+ if (p == 0) {
+ return;
+ }
+
+ for(int i=1; i<=p; i++) {
+ snprintf(buf, sizeof(buf), "%d", i);
+ page_sel->add(buf);
+ }
+ page_sel->select(psed_p->get_page() + 1);
+}
+
void open_cb() {
if (!check_save()) return;
char *file = fl_file_chooser("Open File?", "*.ps", filename);
@@ -83,9 +110,11 @@ void open_cb() {
psed_p->open_file(file);
psed_p->load();
+ page_sel_fill();
}
}
+
void import_pdf_cb() {
char *file;
FILE *p;
@@ -105,6 +134,8 @@ void import_pdf_cb() {
if (p) {
psed_p->open_file(p);
+ psed_p->load();
+ page_sel_fill();
fclose(p);
waitpid(pid, &status, 0);
if (WEXITSTATUS(status) == 127 || WEXITSTATUS(status) == 126) {
@@ -165,10 +196,12 @@ void import_cb() {
void first_cb() {
psed_p->load();
+ page_sel->select(psed_p->get_page() + 1);
}
void next_cb() {
psed_p->next();
+ page_sel->select(psed_p->get_page() + 1);
}
void quit_cb() {
@@ -512,8 +545,10 @@ int main(int argc, char** argv) {
color_b->shortcut(FL_ALT + 'c');
color_b->tooltip("Text Color");
props.end();
-
- scroll = new Fl_Scroll(0, 55, win->w(), win->h()-55);
+ page_sel = new Fl_Hold_Browser(0, 55, 40, win->h()-55);
+ page_sel->callback(page_sel_cb);
+ page_sel->end();
+ scroll = new Fl_Scroll(40, 55, win->w()-40, win->h()-55);
psed_p = new PSEditor(0, 0, 700, 900);
psed_p->property_changed_callback(property_changed_cb);
scroll->end();
@@ -530,6 +565,7 @@ int main(int argc, char** argv) {
if (in_fp) {
psed_p->open_file(in_fp);
psed_p->load();
+ page_sel_fill();
fclose(in_fp);
}